@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 +4 -3
- package/lib/index.js +1 -1
- package/lib/types/adapter.js +6 -6
- package/lib/types/catalog/contract.js +1 -1
- package/lib/types/catalog/gateway.js +2 -2
- package/lib/types/catalog/go-doc.js +2 -2
- package/lib/types/catalog/index.js +10 -10
- package/lib/types/catalog/metadata.d.ts +1 -1
- package/lib/types/catalog/metadata.js +2 -2
- package/lib/types/catalog/reading.js +2 -2
- package/lib/types/catalog/service.js +1 -1
- package/lib/types/config.js +1 -1
- package/lib/types/conversion/context.js +1 -1
- package/lib/types/conversion/index.js +3 -3
- package/lib/types/conversion/stream.js +1 -1
- package/lib/types/index.js +13 -13
- package/lib/types/models.js +1 -1
- package/lib/types/remotes.js +3 -3
- package/lib/types/update/check.d.ts +5 -2
- package/lib/types/update/check.js +5 -2
- package/lib/types/update/index.js +5 -5
- package/lib/types/update/service.js +1 -1
- package/lib/types/usage/index.js +4 -4
- package/lib/types/usage/service.js +2 -2
- package/lib/types/usage/windows.js +1 -1
- package/package.json +2 -2
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 = { "
|
|
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://
|
|
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", "
|
|
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.
|
|
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";
|
package/lib/types/adapter.js
CHANGED
|
@@ -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
|
|
74
|
-
import { toPiModel } from
|
|
75
|
-
import { assertBaseURL } from
|
|
76
|
-
import { toPiContext, toStreamChunks } from
|
|
77
|
-
import { isModelEnabled, recommendedIds } from
|
|
78
|
-
import { providerHeaders } from
|
|
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
|
|
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
|
|
12
|
-
import { readBoundedJson } from
|
|
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
|
|
18
|
-
import { readBoundedText } from
|
|
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
|
|
33
|
-
import { fetchModelIds } from
|
|
34
|
-
import { fetchGoDocument, GO_DOC_URLS } from
|
|
35
|
-
import { readBoundedJson } from
|
|
36
|
-
import { readOnlineMetadata, toPiModel } from
|
|
37
|
-
import { asWireProtocol } from
|
|
38
|
-
export { PROVIDER_ID, DISPLAY_NAME, DEFAULT_BASE_URL, CONSOLE_BASE_URL } from
|
|
39
|
-
export { readModelIds, fetchModelIds } from
|
|
40
|
-
export { readOnlineMetadata, toPiModel, modelBaseURL } from
|
|
41
|
-
export { decideProtocol, inferProtocol, protocolOfNpm } from
|
|
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 [
|
|
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
|
|
18
|
-
import { MODEL_METADATA_PROVIDER } from
|
|
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
|
|
13
|
-
import { goQuotaFor } from
|
|
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
|
|
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;
|
package/lib/types/config.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
6
|
-
export { classifyPiAiError, mapStopReason, mapUsage, toStreamChunks } from
|
|
7
|
-
export { toPiAssistant, toPiReplayState } from
|
|
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
|
|
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.
|
package/lib/types/index.js
CHANGED
|
@@ -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
|
|
35
|
-
import { DISPLAY_NAME, PROVIDER_ID, discoverCatalogModels } from
|
|
36
|
-
import { assertBaseURL, PlainConfig, readConfig } from
|
|
37
|
-
import { registerRemotes } from
|
|
38
|
-
import { OpencodeGoCatalogService } from
|
|
39
|
-
import { OpencodeGoUpdateService } from
|
|
40
|
-
import { PLUGIN_VERSION } from
|
|
41
|
-
import { OpencodeGoUsageService, UsageMeter } from
|
|
42
|
-
export { OpencodeGoAdapter } from
|
|
43
|
-
export { DEFAULT_BASE_URL, CONSOLE_BASE_URL, DISPLAY_NAME, PROVIDER_ID, OpencodeGoCatalog, discoverCatalogModels } from
|
|
44
|
-
export { Config, PlainConfig, assertBaseURL, DEFAULT_API_KEY_ENV } from
|
|
45
|
-
export { SESSION_HEADER, SESSION_AFFINITY_HEADER, opencodeSessionValue, providerHeaders } from
|
|
46
|
-
export { isModelEnabled, sortModels } from
|
|
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. */
|
package/lib/types/models.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module @dan-ai-studio/dshopencodego/models
|
|
10
10
|
*/
|
|
11
|
-
import { goQuotaFor, monthlyRequestsRank } from
|
|
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
|
/**
|
package/lib/types/remotes.js
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module @dan-ai-studio/dshopencodego/remotes
|
|
9
9
|
*/
|
|
10
|
-
import { catalogRemote } from
|
|
11
|
-
import { updateRemote } from
|
|
12
|
-
import { usageRemote } from
|
|
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
|
|
14
|
-
*
|
|
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
|
|
14
|
-
*
|
|
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
|
|
7
|
-
export { compareVersions, createUpdateChecker, isUpdateAvailable, parseLatestVersion, parseVersion } from
|
|
8
|
-
export { PLUGIN_VERSION } from
|
|
9
|
-
export { OpencodeGoUpdateService } from
|
|
10
|
-
export { parseUpdateStatus, updateRemote } from
|
|
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
|
|
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;
|
package/lib/types/usage/index.js
CHANGED
|
@@ -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
|
|
6
|
-
export { parseGoUsage, readUsageWindows } from
|
|
7
|
-
export { parseGoMeter, parseUsageWindows, usageRemote } from
|
|
8
|
-
export { OpencodeGoUsageService } from
|
|
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
|
|
16
|
-
import { readUsageWindows } from
|
|
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
|
|
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.
|
|
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": "^
|
|
148
|
+
"typescript": "^7.0.2",
|
|
149
149
|
"vitest": "^5.0.5"
|
|
150
150
|
},
|
|
151
151
|
"keywords": [
|