@dan-ai-studio/dshopencodego 0.1.40 → 0.1.42

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
@@ -472,6 +472,7 @@ var import_react = require("react");
472
472
 
473
473
  // src/update/check.ts
474
474
  var PACKAGE_NAME = "@dan-ai-studio/dshopencodego";
475
+ var REPOSITORY = "dan-ai-studio/dshopencodego";
475
476
  var REGISTRY_LATEST_URL = `https://registry.npmjs.org/${encodeURIComponent(PACKAGE_NAME)}/latest`;
476
477
  var CHECK_CACHE_MS = 6 * 60 * 60 * 1e3;
477
478
 
@@ -562,7 +563,7 @@ if (!document.querySelector("style[data-plugin-css=" + JSON.stringify(id) + "]")
562
563
  style.textContent = ".d7lz0W_root{color:var(--dsw-alias-label-primary);flex-direction:column;gap:1.25rem;display:flex}.d7lz0W_title{margin:0;font-size:1.05rem}.d7lz0W_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:.8rem}.d7lz0W_warn{color:var(--dsw-alias-state-warn-primary);margin:0;font-size:.8rem}.d7lz0W_ok{color:var(--dsw-alias-state-success-primary);font-size:.8rem}.d7lz0W_block{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:.6rem;flex-direction:column;gap:.5rem;padding:.85rem;display:flex}.d7lz0W_row{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.d7lz0W_row>strong{margin-right:auto}.d7lz0W_input{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);min-width:10rem;color:var(--dsw-alias-label-primary);font:inherit;border-radius:.35rem;flex:14rem;padding:.35rem .5rem;font-size:.85rem}.d7lz0W_button{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;border-radius:.35rem;padding:.35rem .7rem;font-size:.8rem}.d7lz0W_button:disabled{color:var(--dsw-alias-state-idle-primary);cursor:default}.d7lz0W_number{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:5rem;color:var(--dsw-alias-label-primary);font:inherit;border-radius:.35rem;padding:.25rem .4rem;font-size:.8rem}.d7lz0W_select{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);width:auto;max-width:100%;color:var(--dsw-alias-label-primary);font:inherit;border-radius:.35rem;padding:.25rem .4rem;font-size:.8rem}.d7lz0W_list{flex-direction:column;display:flex}.d7lz0W_item{border-top:1px solid var(--dsw-alias-border-l1);align-items:flex-start;gap:.5rem;padding:.45rem .15rem;display:flex}.d7lz0W_item input[type=checkbox]{accent-color:var(--dsw-alias-brand-primary);margin-top:.15rem}.d7lz0W_itemBody{flex-direction:column;gap:.15rem;min-width:0;display:flex}.d7lz0W_itemMain{flex-wrap:wrap;align-items:baseline;gap:.6rem;display:flex}.d7lz0W_itemMeta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:.75rem;font-size:.75rem;display:flex}.d7lz0W_itemModalities{color:var(--dsw-alias-label-secondary);font-size:.75rem}.d7lz0W_name{color:var(--dsw-alias-label-primary)}.d7lz0W_mono{color:var(--dsw-alias-label-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.d7lz0W_badge{color:var(--dsw-alias-brand-primary)}";
563
564
  document.head.appendChild(style);
564
565
  }
565
- var section_default = { "itemBody": "d7lz0W_itemBody", "list": "d7lz0W_list", "itemMeta": "d7lz0W_itemMeta", "mono": "d7lz0W_mono", "number": "d7lz0W_number", "root": "d7lz0W_root", "ok": "d7lz0W_ok", "itemModalities": "d7lz0W_itemModalities", "item": "d7lz0W_item", "name": "d7lz0W_name", "block": "d7lz0W_block", "warn": "d7lz0W_warn", "button": "d7lz0W_button", "hint": "d7lz0W_hint", "select": "d7lz0W_select", "input": "d7lz0W_input", "title": "d7lz0W_title", "badge": "d7lz0W_badge", "row": "d7lz0W_row", "itemMain": "d7lz0W_itemMain" };
566
+ var section_default = { "badge": "d7lz0W_badge", "block": "d7lz0W_block", "button": "d7lz0W_button", "hint": "d7lz0W_hint", "input": "d7lz0W_input", "item": "d7lz0W_item", "itemBody": "d7lz0W_itemBody", "itemMain": "d7lz0W_itemMain", "itemMeta": "d7lz0W_itemMeta", "itemModalities": "d7lz0W_itemModalities", "list": "d7lz0W_list", "mono": "d7lz0W_mono", "name": "d7lz0W_name", "number": "d7lz0W_number", "ok": "d7lz0W_ok", "root": "d7lz0W_root", "row": "d7lz0W_row", "select": "d7lz0W_select", "title": "d7lz0W_title", "warn": "d7lz0W_warn" };
566
567
 
567
568
  // src/client/Section.tsx
568
569
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -948,7 +949,7 @@ function quotaLabel(model, t) {
948
949
  function UpdateBanner({ controller, t, busy, act, update }) {
949
950
  if (update.phase === "idle") return null;
950
951
  const status = update.status;
951
- const notes = `https://www.npmjs.com/package/${encodeURIComponent(PACKAGE_NAME)}`;
952
+ const notes = status?.latest === void 0 ? `https://github.com/${REPOSITORY}/releases` : `https://github.com/${REPOSITORY}/releases/tag/v${status.latest}`;
952
953
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: section_default.block, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: section_default.row, children: [
953
954
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: t("updateTitle") }),
954
955
  update.phase === "checking" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: section_default.hint, children: t("updateChecking") }),
@@ -1335,7 +1336,7 @@ if (!document.querySelector("style[data-plugin-css=" + JSON.stringify(id2) + "]"
1335
1336
  style.textContent = ".mMNkkW_root{align-items:center;display:inline-flex;position:relative}.mMNkkW_trigger{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;white-space:nowrap;border-radius:999px;padding:.35rem .6rem;font-size:.8rem;line-height:1}.mMNkkW_trigger:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.mMNkkW_panel{z-index:20;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-overlay);width:18rem;color:var(--dsw-alias-label-primary);border-radius:.6rem;flex-direction:column;gap:.6rem;padding:.75rem .85rem;display:flex;position:absolute;bottom:calc(100% + .5rem);right:0;box-shadow:0 8px 24px #0000002e}.mMNkkW_window{flex-direction:column;gap:.25rem;display:flex}.mMNkkW_row{justify-content:space-between;gap:.5rem;font-size:.85rem;display:flex}.mMNkkW_hint{color:var(--dsw-alias-label-secondary);margin:0;font-size:.75rem}.mMNkkW_progress{width:100%;height:.35rem;accent-color:var(--dsw-alias-brand-primary)}.mMNkkW_limited{color:var(--dsw-alias-state-warn-primary);font-size:.75rem}.mMNkkW_warning{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-label-primary);border-radius:.4rem;padding:.4rem .5rem;font-size:.75rem}.mMNkkW_retry{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;cursor:pointer;border-radius:.35rem;align-self:flex-start;padding:.25rem .5rem;font-size:.75rem}.mMNkkW_local{border-top:1px solid var(--dsw-alias-border-l1);flex-direction:column;gap:.2rem;padding-top:.5rem;display:flex}";
1336
1337
  document.head.appendChild(style);
1337
1338
  }
1338
- var pill_default = { "hint": "mMNkkW_hint", "local": "mMNkkW_local", "panel": "mMNkkW_panel", "warning": "mMNkkW_warning", "retry": "mMNkkW_retry", "trigger": "mMNkkW_trigger", "window": "mMNkkW_window", "limited": "mMNkkW_limited", "root": "mMNkkW_root", "row": "mMNkkW_row", "progress": "mMNkkW_progress" };
1339
+ var pill_default = { "hint": "mMNkkW_hint", "limited": "mMNkkW_limited", "local": "mMNkkW_local", "panel": "mMNkkW_panel", "progress": "mMNkkW_progress", "retry": "mMNkkW_retry", "root": "mMNkkW_root", "row": "mMNkkW_row", "trigger": "mMNkkW_trigger", "warning": "mMNkkW_warning", "window": "mMNkkW_window" };
1339
1340
 
1340
1341
  // src/client/UsagePill.tsx
1341
1342
  var import_jsx_runtime2 = require("react/jsx-runtime");
package/lib/index.js CHANGED
@@ -45505,7 +45505,7 @@ function createUpdateChecker(deps) {
45505
45505
  }
45506
45506
 
45507
45507
  // src/update/version.ts
45508
- var PLUGIN_VERSION = true ? "0.1.40" : "0.0.0-dev";
45508
+ var PLUGIN_VERSION = true ? "0.1.42" : "0.0.0-dev";
45509
45509
 
45510
45510
  // src/update/service.ts
45511
45511
  import { TypertRemoteService as TypertRemoteService2 } from "@deepseek-ai/dsh-typert-protocol";
@@ -70,12 +70,12 @@ import { getSupportedThinkingLevels } from '@earendil-works/pi-ai/models';
70
70
  import { normalizeContext } from '@earendil-works/pi-ai/utils/transcript';
71
71
  import { attributionHeaders, contentHasImage, LlmAdapter, LlmError, ReasoningEffortId, resolveRetryPolicy, } from '@deepseek-ai/dsh-llm';
72
72
  import { idleWatchdog, timeoutOf } from '@deepseek-ai/dsh-timeout';
73
- import { DISPLAY_NAME, PROVIDER_ID, OpencodeGoCatalog } from "./catalog/index.js";
74
- import { toPiModel } from "./catalog/metadata.js";
75
- import { assertBaseURL } from "./config.js";
76
- import { toPiContext, toStreamChunks } from "./conversion/index.js";
77
- import { isModelEnabled, recommendedIds } from "./models.js";
78
- import { providerHeaders } from "./session-header.js";
73
+ import { DISPLAY_NAME, PROVIDER_ID, OpencodeGoCatalog } from './catalog/index.js';
74
+ import { toPiModel } from './catalog/metadata.js';
75
+ import { assertBaseURL } from './config.js';
76
+ import { toPiContext, toStreamChunks } from './conversion/index.js';
77
+ import { isModelEnabled, recommendedIds } from './models.js';
78
+ import { providerHeaders } from './session-header.js';
79
79
  /**
80
80
  * pi-ai thinking formats that answer an unset effort with an explicit disable.
81
81
  * Every other format omits the parameter and lets the provider decide, so only
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * @module @dan-ai-studio/dshopencodego/catalog/contract
11
11
  */
12
- import { INPUT_MODALITIES } from "./metadata.js";
12
+ import { INPUT_MODALITIES } from './metadata.js';
13
13
  function parseGoQuota(value) {
14
14
  if (value === null || typeof value !== 'object')
15
15
  throw new Error('invalid go quota');
@@ -8,8 +8,8 @@
8
8
  * @module @dan-ai-studio/dshopencodego/catalog/gateway
9
9
  */
10
10
  import { attributionHeaders, LlmError } from '@deepseek-ai/dsh-llm';
11
- import { MODEL_LISTING_MAX_BYTES, METADATA_FETCH_TIMEOUT_MS } from "./constants.js";
12
- import { readBoundedJson } from "./json-response.js";
11
+ import { MODEL_LISTING_MAX_BYTES, METADATA_FETCH_TIMEOUT_MS } from './constants.js';
12
+ import { readBoundedJson } from './json-response.js';
13
13
  /** Read the ids out of a model-listing body. */
14
14
  export function readModelIds(body) {
15
15
  const data = body?.data;
@@ -14,8 +14,8 @@
14
14
  * @module @dan-ai-studio/dshopencodego/catalog/go-doc
15
15
  */
16
16
  import { attributionHeaders, LlmError } from '@deepseek-ai/dsh-llm';
17
- import { METADATA_FETCH_TIMEOUT_MS } from "./constants.js";
18
- import { readBoundedText } from "./json-response.js";
17
+ import { METADATA_FETCH_TIMEOUT_MS } from './constants.js';
18
+ import { readBoundedText } from './json-response.js';
19
19
  /**
20
20
  * Documentation sources, tried in order.
21
21
  *
@@ -29,16 +29,16 @@ import { anthropicMessagesApi } from '@earendil-works/pi-ai/api/anthropic-messag
29
29
  import { openAICompletionsApi } from '@earendil-works/pi-ai/api/openai-completions.lazy';
30
30
  import { openAIResponsesApi } from '@earendil-works/pi-ai/api/openai-responses.lazy';
31
31
  import { attributionHeaders, LlmError } from '@deepseek-ai/dsh-llm';
32
- import { DISPLAY_NAME, MODEL_METADATA_MAX_BYTES, MODEL_METADATA_URL, PROVIDER_ID, METADATA_FETCH_TIMEOUT_MS, } from "./constants.js";
33
- import { fetchModelIds } from "./gateway.js";
34
- import { fetchGoDocument, GO_DOC_URLS } from "./go-doc.js";
35
- import { readBoundedJson } from "./json-response.js";
36
- import { readOnlineMetadata, toPiModel } from "./metadata.js";
37
- import { asWireProtocol } from "./protocol.js";
38
- export { PROVIDER_ID, DISPLAY_NAME, DEFAULT_BASE_URL, CONSOLE_BASE_URL } from "./constants.js";
39
- export { readModelIds, fetchModelIds } from "./gateway.js";
40
- export { readOnlineMetadata, toPiModel, modelBaseURL } from "./metadata.js";
41
- export { decideProtocol, inferProtocol, protocolOfNpm } from "./protocol.js";
32
+ import { DISPLAY_NAME, MODEL_METADATA_MAX_BYTES, MODEL_METADATA_URL, PROVIDER_ID, METADATA_FETCH_TIMEOUT_MS, } from './constants.js';
33
+ import { fetchModelIds } from './gateway.js';
34
+ import { fetchGoDocument, GO_DOC_URLS } from './go-doc.js';
35
+ import { readBoundedJson } from './json-response.js';
36
+ import { readOnlineMetadata, toPiModel } from './metadata.js';
37
+ import { asWireProtocol } from './protocol.js';
38
+ export { PROVIDER_ID, DISPLAY_NAME, DEFAULT_BASE_URL, CONSOLE_BASE_URL } from './constants.js';
39
+ export { readModelIds, fetchModelIds } from './gateway.js';
40
+ export { readOnlineMetadata, toPiModel, modelBaseURL } from './metadata.js';
41
+ export { decideProtocol, inferProtocol, protocolOfNpm } from './protocol.js';
42
42
  /**
43
43
  * The installed catalog, re-pointed at the configured gateway.
44
44
  *
@@ -17,7 +17,7 @@
17
17
  import type { Api, Model, ModelCost, ThinkingLevelMap } from '@earendil-works/pi-ai';
18
18
  import type { ProtocolSource, WireProtocol } from './protocol.ts';
19
19
  /** Input modalities this build can name, in display order. */
20
- export declare const INPUT_MODALITIES: readonly ["text", "image", "audio", "video", "pdf"];
20
+ export declare const INPUT_MODALITIES: readonly ['text', 'image', 'audio', 'video', 'pdf'];
21
21
  /** One input modality a model document may declare. */
22
22
  export type InputModality = (typeof INPUT_MODALITIES)[number];
23
23
  /** Everything this plugin knows about one advertised model. */
@@ -14,8 +14,8 @@
14
14
  *
15
15
  * @module @dan-ai-studio/dshopencodego/catalog/metadata
16
16
  */
17
- import { asWireProtocol, decideProtocol, protocolOfNpm } from "./protocol.js";
18
- import { MODEL_METADATA_PROVIDER } from "./constants.js";
17
+ import { asWireProtocol, decideProtocol, protocolOfNpm } from './protocol.js';
18
+ import { MODEL_METADATA_PROVIDER } from './constants.js';
19
19
  /** Input modalities this build can name, in display order. */
20
20
  export const INPUT_MODALITIES = ['text', 'image', 'audio', 'video', 'pdf'];
21
21
  const LEVELS = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'];
@@ -9,8 +9,8 @@
9
9
  *
10
10
  * @module @dan-ai-studio/dshopencodego/catalog/reading
11
11
  */
12
- import { isModelEnabled, recommendedIds, sortModels } from "../models.js";
13
- import { goQuotaFor } from "../go-limits.js";
12
+ import { isModelEnabled, recommendedIds, sortModels } from '../models.js';
13
+ import { goQuotaFor } from '../go-limits.js';
14
14
  /**
15
15
  * Project one snapshot for the settings page.
16
16
  * @param snapshot - the catalog snapshot, live or retained.
@@ -9,7 +9,7 @@
9
9
  */
10
10
  import { RemoteError, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
11
11
  import { LlmError } from '@deepseek-ai/dsh-llm';
12
- import { catalogReading } from "./reading.js";
12
+ import { catalogReading } from './reading.js';
13
13
  /** Catalog Remote: what the gateway serves, and how each model is called. */
14
14
  export class OpencodeGoCatalogService extends TypertRemoteService {
15
15
  options;
@@ -14,7 +14,7 @@
14
14
  import { RetryPolicySchema } from '@deepseek-ai/dsh-llm';
15
15
  import { MAX_TIMER_DELAY_MS } from '@deepseek-ai/dsh-timeout';
16
16
  import z from '@deepseek-ai/schemastery';
17
- import { DEFAULT_BASE_URL } from "./catalog/constants.js";
17
+ import { DEFAULT_BASE_URL } from './catalog/constants.js';
18
18
  /** Credential reference resolving the OpenCode Go API key. */
19
19
  export const DEFAULT_API_KEY_ENV = 'OPENCODE_GO_API_KEY';
20
20
  /** Requests and pickers share this cache lifetime; explicit discovery revalidates immediately. */
@@ -25,7 +25,7 @@ import { brandString } from '@deepseek-ai/dsh-brand';
25
25
  import * as llm from '@deepseek-ai/dsh-llm';
26
26
  import { contentHasImage, LlmError, requestImageHandleText } from '@deepseek-ai/dsh-llm';
27
27
  import { requestImageDimensions } from '@deepseek-ai/dsh-attachment';
28
- import { toPiAssistant } from "./replay.js";
28
+ import { toPiAssistant } from './replay.js';
29
29
  /** Join the text blocks of one Harness message. */
30
30
  function flattenText(message) {
31
31
  return message.content.filter(block => block.type === 'text').map(block => block.text).join('');
@@ -2,6 +2,6 @@
2
2
  * Harness ⇄ pi-ai conversion.
3
3
  * @module @dan-ai-studio/dshopencodego/conversion
4
4
  */
5
- export { toPiContext } from "./context.js";
6
- export { classifyPiAiError, mapStopReason, mapUsage, toStreamChunks } from "./stream.js";
7
- export { toPiAssistant, toPiReplayState } from "./replay.js";
5
+ export { toPiContext } from './context.js';
6
+ export { classifyPiAiError, mapStopReason, mapUsage, toStreamChunks } from './stream.js';
7
+ export { toPiAssistant, toPiReplayState } from './replay.js';
@@ -10,7 +10,7 @@
10
10
  import { brandString } from '@deepseek-ai/dsh-brand';
11
11
  import { CONTEXT_WINDOW_EXCEEDED_CODE, EMPTY_RESPONSE_CODE, isContextWindowExceededError, isQuotaExceededError, LlmError, } from '@deepseek-ai/dsh-llm';
12
12
  import { isContextOverflow } from '@earendil-works/pi-ai/utils/overflow';
13
- import { toPiReplayState } from "./replay.js";
13
+ import { toPiReplayState } from './replay.js';
14
14
  /**
15
15
  * Map pi-ai usage (reasoning already folded into output).
16
16
  * @param usage - the terminal event's cumulative usage.
@@ -31,19 +31,19 @@ import { credentialRef } from '@deepseek-ai/dsh-credentials';
31
31
  import { launchEnvironmentOf } from '@deepseek-ai/dsh-launch-environment';
32
32
  import * as llm from '@deepseek-ai/dsh-llm';
33
33
  import { LlmError } from '@deepseek-ai/dsh-llm';
34
- import { OpencodeGoAdapter } from "./adapter.js";
35
- import { DISPLAY_NAME, PROVIDER_ID, discoverCatalogModels } from "./catalog/index.js";
36
- import { assertBaseURL, PlainConfig, readConfig } from "./config.js";
37
- import { registerRemotes } from "./remotes.js";
38
- import { OpencodeGoCatalogService } from "./catalog/service.js";
39
- import { OpencodeGoUpdateService } from "./update/index.js";
40
- import { PLUGIN_VERSION } from "./update/index.js";
41
- import { OpencodeGoUsageService, UsageMeter } from "./usage/index.js";
42
- export { OpencodeGoAdapter } from "./adapter.js";
43
- export { DEFAULT_BASE_URL, CONSOLE_BASE_URL, DISPLAY_NAME, PROVIDER_ID, OpencodeGoCatalog, discoverCatalogModels } from "./catalog/index.js";
44
- export { Config, PlainConfig, assertBaseURL, DEFAULT_API_KEY_ENV } from "./config.js";
45
- export { SESSION_HEADER, SESSION_AFFINITY_HEADER, opencodeSessionValue, providerHeaders } from "./session-header.js";
46
- export { isModelEnabled, sortModels } from "./models.js";
34
+ import { OpencodeGoAdapter } from './adapter.js';
35
+ import { DISPLAY_NAME, PROVIDER_ID, discoverCatalogModels } from './catalog/index.js';
36
+ import { assertBaseURL, PlainConfig, readConfig } from './config.js';
37
+ import { registerRemotes } from './remotes.js';
38
+ import { OpencodeGoCatalogService } from './catalog/service.js';
39
+ import { OpencodeGoUpdateService } from './update/index.js';
40
+ import { PLUGIN_VERSION } from './update/index.js';
41
+ import { OpencodeGoUsageService, UsageMeter } from './usage/index.js';
42
+ export { OpencodeGoAdapter } from './adapter.js';
43
+ export { DEFAULT_BASE_URL, CONSOLE_BASE_URL, DISPLAY_NAME, PROVIDER_ID, OpencodeGoCatalog, discoverCatalogModels } from './catalog/index.js';
44
+ export { Config, PlainConfig, assertBaseURL, DEFAULT_API_KEY_ENV } from './config.js';
45
+ export { SESSION_HEADER, SESSION_AFFINITY_HEADER, opencodeSessionValue, providerHeaders } from './session-header.js';
46
+ export { isModelEnabled, sortModels } from './models.js';
47
47
  export const name = 'dshopencodego';
48
48
  export const inject = ['llm'];
49
49
  /** True when a loader handed this plugin its live field references. */
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * @module @dan-ai-studio/dshopencodego/models
10
10
  */
11
- import { goQuotaFor, monthlyRequestsRank } from "./go-limits.js";
11
+ import { goQuotaFor, monthlyRequestsRank } from './go-limits.js';
12
12
  /** How many models the default configuration keeps enabled. */
13
13
  export const DEFAULT_ENABLED_COUNT = 5;
14
14
  /**
@@ -7,9 +7,9 @@
7
7
  *
8
8
  * @module @dan-ai-studio/dshopencodego/remotes
9
9
  */
10
- import { catalogRemote } from "./catalog/contract.js";
11
- import { updateRemote } from "./update/contract.js";
12
- import { usageRemote } from "./usage/contract.js";
10
+ import { catalogRemote } from './catalog/contract.js';
11
+ import { updateRemote } from './update/contract.js';
12
+ import { usageRemote } from './usage/contract.js';
13
13
  /** Every Remote method this package owns, mounted as one contribution. */
14
14
  const contribution = {
15
15
  package: usageRemote.package,
@@ -10,13 +10,16 @@
10
10
  * HMR lifecycle, so it is deliberately not implemented here.
11
11
  *
12
12
  * The check runs only when the settings page asks (page open or manual
13
- * refresh), never on the model-request path, and fails silent: an unreachable
14
- * registry simply hides the banner instead of erroring the page.
13
+ * refresh), never on the model-request path. An unreachable registry is
14
+ * reported as exactly that: `UpdateStatus.checked` stays false so the page
15
+ * says the lookup failed instead of presenting it as "already up to date".
15
16
  *
16
17
  * @module @dan-ai-studio/dshopencodego/update/check
17
18
  */
18
19
  /** This package as addressed on the registry. */
19
20
  export declare const PACKAGE_NAME = "@dan-ai-studio/dshopencodego";
21
+ /** The GitHub repository, used to link a release's own notes. */
22
+ export declare const REPOSITORY = "dan-ai-studio/dshopencodego";
20
23
  /** Document address answering `{ "version": "x.y.z", ... }`. */
21
24
  export declare const REGISTRY_LATEST_URL: string;
22
25
  /** How long one lookup answers for before the registry is asked again. */
@@ -10,13 +10,16 @@
10
10
  * HMR lifecycle, so it is deliberately not implemented here.
11
11
  *
12
12
  * The check runs only when the settings page asks (page open or manual
13
- * refresh), never on the model-request path, and fails silent: an unreachable
14
- * registry simply hides the banner instead of erroring the page.
13
+ * refresh), never on the model-request path. An unreachable registry is
14
+ * reported as exactly that: `UpdateStatus.checked` stays false so the page
15
+ * says the lookup failed instead of presenting it as "already up to date".
15
16
  *
16
17
  * @module @dan-ai-studio/dshopencodego/update/check
17
18
  */
18
19
  /** This package as addressed on the registry. */
19
20
  export const PACKAGE_NAME = '@dan-ai-studio/dshopencodego';
21
+ /** The GitHub repository, used to link a release's own notes. */
22
+ export const REPOSITORY = 'dan-ai-studio/dshopencodego';
20
23
  /** Document address answering `{ "version": "x.y.z", ... }`. */
21
24
  export const REGISTRY_LATEST_URL = `https://registry.npmjs.org/${encodeURIComponent(PACKAGE_NAME)}/latest`;
22
25
  /** How long one lookup answers for before the registry is asked again. */
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @module @dan-ai-studio/dshopencodego/update
5
5
  */
6
- export { PACKAGE_NAME, REGISTRY_LATEST_URL, CHECK_CACHE_MS, CHECK_TIMEOUT_MS } from "./check.js";
7
- export { compareVersions, createUpdateChecker, isUpdateAvailable, parseLatestVersion, parseVersion } from "./check.js";
8
- export { PLUGIN_VERSION } from "./version.js";
9
- export { OpencodeGoUpdateService } from "./service.js";
10
- export { parseUpdateStatus, updateRemote } from "./contract.js";
6
+ export { PACKAGE_NAME, REGISTRY_LATEST_URL, CHECK_CACHE_MS, CHECK_TIMEOUT_MS } from './check.js';
7
+ export { compareVersions, createUpdateChecker, isUpdateAvailable, parseLatestVersion, parseVersion } from './check.js';
8
+ export { PLUGIN_VERSION } from './version.js';
9
+ export { OpencodeGoUpdateService } from './service.js';
10
+ export { parseUpdateStatus, updateRemote } from './contract.js';
@@ -12,7 +12,7 @@
12
12
  * @module @dan-ai-studio/dshopencodego/update/service
13
13
  */
14
14
  import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
15
- import { createUpdateChecker } from "./check.js";
15
+ import { createUpdateChecker } from './check.js';
16
16
  /** Update Remote: the cached registry reading for the settings page. */
17
17
  export class OpencodeGoUpdateService extends TypertRemoteService {
18
18
  check;
@@ -2,7 +2,7 @@
2
2
  * Usage readings for the `opencode-go` route.
3
3
  * @module @dan-ai-studio/dshopencodego/usage
4
4
  */
5
- export { UsageMeter } from "./meter.js";
6
- export { parseGoUsage, readUsageWindows } from "./windows.js";
7
- export { parseGoMeter, parseUsageWindows, usageRemote } from "./contract.js";
8
- export { OpencodeGoUsageService } from "./service.js";
5
+ export { UsageMeter } from './meter.js';
6
+ export { parseGoUsage, readUsageWindows } from './windows.js';
7
+ export { parseGoMeter, parseUsageWindows, usageRemote } from './contract.js';
8
+ export { OpencodeGoUsageService } from './service.js';
@@ -12,8 +12,8 @@
12
12
  import { randomUUID } from 'node:crypto';
13
13
  import { RemoteError, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
14
14
  import { LlmError } from '@deepseek-ai/dsh-llm';
15
- import { assertBaseURL } from "../config.js";
16
- import { readUsageWindows } from "./windows.js";
15
+ import { assertBaseURL } from '../config.js';
16
+ import { readUsageWindows } from './windows.js';
17
17
  /**
18
18
  * Decide what one failed read means for the client.
19
19
  *
@@ -10,7 +10,7 @@
10
10
  * @module @dan-ai-studio/dshopencodego/usage/windows
11
11
  */
12
12
  import { attributionHeaders, LlmError } from '@deepseek-ai/dsh-llm';
13
- import { readBoundedJson } from "../catalog/json-response.js";
13
+ import { readBoundedJson } from '../catalog/json-response.js';
14
14
  /** Response cap: this document is a few hundred bytes. */
15
15
  const USAGE_MAX_BYTES = 1024 * 1024;
16
16
  /** Timeout for one usage read. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dan-ai-studio/dshopencodego",
3
- "version": "0.1.40",
3
+ "version": "0.1.42",
4
4
  "description": "OpenCode Go provider for DeepSeek Harness: live gateway catalog, per-conversation session header, usage",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -145,7 +145,7 @@
145
145
  "oxlint": "^1.88.0",
146
146
  "react": "^18.3.1",
147
147
  "react-dom": "^18.3.1",
148
- "typescript": "^6.0.3",
148
+ "typescript": "^7.0.2",
149
149
  "vitest": "^5.0.5"
150
150
  },
151
151
  "keywords": [