@dan-ai-studio/dshopencodego 0.1.20 → 0.1.21
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/icon.svg +11 -0
- package/lib/client.js +2 -2
- package/lib/index.js +15 -5
- package/lib/types/adapter.js +32 -3
- package/lib/types/catalog/reading.d.ts +3 -1
- package/lib/types/catalog/reading.js +4 -2
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +30 -27
package/icon.svg
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="OpenCode Go">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
4
|
+
<stop offset="0" stop-color="#1f6feb"/>
|
|
5
|
+
<stop offset="1" stop-color="#0d4196"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<rect x="1.5" y="1.5" width="61" height="61" rx="14" fill="url(#bg)" stroke="#0a2f6b" stroke-width="3"/>
|
|
9
|
+
<path d="M20 21.5 33.5 32 20 42.5" fill="none" stroke="#ffffff" stroke-width="5.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
10
|
+
<path d="M33 21.5 46.5 32 33 42.5" fill="none" stroke="#9ecbff" stroke-width="5.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
11
|
+
</svg>
|
package/lib/client.js
CHANGED
|
@@ -462,7 +462,7 @@ if (!document.querySelector("style[data-plugin-css=" + JSON.stringify(id) + "]")
|
|
|
462
462
|
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)}";
|
|
463
463
|
document.head.appendChild(style);
|
|
464
464
|
}
|
|
465
|
-
var section_default = { "
|
|
465
|
+
var section_default = { "itemBody": "d7lz0W_itemBody", "badge": "d7lz0W_badge", "item": "d7lz0W_item", "itemModalities": "d7lz0W_itemModalities", "row": "d7lz0W_row", "hint": "d7lz0W_hint", "root": "d7lz0W_root", "itemMeta": "d7lz0W_itemMeta", "block": "d7lz0W_block", "mono": "d7lz0W_mono", "button": "d7lz0W_button", "list": "d7lz0W_list", "warn": "d7lz0W_warn", "ok": "d7lz0W_ok", "select": "d7lz0W_select", "itemMain": "d7lz0W_itemMain", "number": "d7lz0W_number", "name": "d7lz0W_name", "title": "d7lz0W_title", "input": "d7lz0W_input" };
|
|
466
466
|
|
|
467
467
|
// src/client/Section.tsx
|
|
468
468
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -963,7 +963,7 @@ if (!document.querySelector("style[data-plugin-css=" + JSON.stringify(id2) + "]"
|
|
|
963
963
|
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}";
|
|
964
964
|
document.head.appendChild(style);
|
|
965
965
|
}
|
|
966
|
-
var pill_default = { "
|
|
966
|
+
var pill_default = { "limited": "mMNkkW_limited", "retry": "mMNkkW_retry", "window": "mMNkkW_window", "row": "mMNkkW_row", "hint": "mMNkkW_hint", "panel": "mMNkkW_panel", "warning": "mMNkkW_warning", "local": "mMNkkW_local", "root": "mMNkkW_root", "progress": "mMNkkW_progress", "trigger": "mMNkkW_trigger" };
|
|
967
967
|
|
|
968
968
|
// src/client/UsagePill.tsx
|
|
969
969
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
package/lib/index.js
CHANGED
|
@@ -1417,6 +1417,14 @@ function withModelLimit(model, limits) {
|
|
|
1417
1417
|
maxTokens: limit.maxTokens ?? model.maxTokens
|
|
1418
1418
|
};
|
|
1419
1419
|
}
|
|
1420
|
+
function stopSequencesFor(model, stop) {
|
|
1421
|
+
if (stop === void 0) return void 0;
|
|
1422
|
+
if (model.api === "openai-completions") return stop;
|
|
1423
|
+
throw new LlmError8(
|
|
1424
|
+
`opencode-go model "${model.id}" speaks ${model.api}, which has no stop-sequence parameter this adapter can reach; drop GenerateOptions.stop for this model`,
|
|
1425
|
+
"UNSUPPORTED_OPTION"
|
|
1426
|
+
);
|
|
1427
|
+
}
|
|
1420
1428
|
var OpencodeGoAdapter = class extends LlmAdapter {
|
|
1421
1429
|
cache;
|
|
1422
1430
|
options;
|
|
@@ -1538,12 +1546,10 @@ var OpencodeGoAdapter = class extends LlmAdapter {
|
|
|
1538
1546
|
async *streamWithSnapshot(options, config, snapshot) {
|
|
1539
1547
|
var _stack = [];
|
|
1540
1548
|
try {
|
|
1541
|
-
if (options.stop !== void 0) {
|
|
1542
|
-
throw new LlmError8("dshopencodego does not support GenerateOptions.stop", "UNSUPPORTED_OPTION");
|
|
1543
|
-
}
|
|
1544
1549
|
const facts = snapshot.facts.get(options.model);
|
|
1545
1550
|
if (facts === void 0) throw new LlmError8(`opencode-go has no model "${options.model}"`, "UNKNOWN_MODEL");
|
|
1546
1551
|
const model = withModelLimit(toPiModel(facts, config.baseURL), config.modelLimits);
|
|
1552
|
+
const stop = stopSequencesFor(model, options.stop);
|
|
1547
1553
|
const ceiling = config.modelLimits[model.id]?.maxTokens;
|
|
1548
1554
|
const maxTokens = options.maxTokens === void 0 || ceiling === null || ceiling === void 0 ? options.maxTokens : Math.min(options.maxTokens, ceiling);
|
|
1549
1555
|
const apiKey = await this.options.resolveApiKey();
|
|
@@ -1579,6 +1585,10 @@ var OpencodeGoAdapter = class extends LlmAdapter {
|
|
|
1579
1585
|
...reasoning === void 0 || reasoning === "off" ? {} : { reasoning },
|
|
1580
1586
|
...options.temperature === void 0 ? {} : { temperature: options.temperature },
|
|
1581
1587
|
...maxTokens === void 0 ? {} : { maxTokens },
|
|
1588
|
+
// `samplingParams` is merged into the request body as-is by the
|
|
1589
|
+
// OpenAI-compatible adapters, and `stop` is Chat Completions' own
|
|
1590
|
+
// stop-sequence field — the one place this control reaches the wire.
|
|
1591
|
+
...stop === void 0 ? {} : { samplingParams: { stop: [...stop] } },
|
|
1582
1592
|
...options.sessionId === void 0 ? {} : { sessionId: String(options.sessionId) },
|
|
1583
1593
|
signal: watchdog.signal,
|
|
1584
1594
|
// The gateway refuses a request without `x-opencode-session`; the
|
|
@@ -1858,7 +1868,7 @@ import { RemoteError, TypertRemoteService } from "@deepseek-ai/dsh-typert-protoc
|
|
|
1858
1868
|
import { LlmError as LlmError9 } from "@deepseek-ai/dsh-llm";
|
|
1859
1869
|
|
|
1860
1870
|
// src/catalog/reading.ts
|
|
1861
|
-
function catalogReading(snapshot, visibility, listingFailure) {
|
|
1871
|
+
function catalogReading(snapshot, visibility, listingFailure, now) {
|
|
1862
1872
|
const documentQuotas = snapshot.documentQuotas;
|
|
1863
1873
|
const rows = [
|
|
1864
1874
|
...[...snapshot.facts.values()].map((fact) => {
|
|
@@ -1892,7 +1902,7 @@ function catalogReading(snapshot, visibility, listingFailure) {
|
|
|
1892
1902
|
const models = rows.map((row) => ({ ...row, recommended: recommended.has(row.id) }));
|
|
1893
1903
|
const enabled = models.filter((model) => isModelEnabled(model, visibility)).length;
|
|
1894
1904
|
return {
|
|
1895
|
-
models: sortModels(models),
|
|
1905
|
+
models: sortModels(models, now),
|
|
1896
1906
|
stale: !snapshot.live,
|
|
1897
1907
|
...!snapshot.live && listingFailure !== void 0 ? { error: listingFailure } : {},
|
|
1898
1908
|
fetchedAtMs: snapshot.fetchedAtMs,
|
package/lib/types/adapter.js
CHANGED
|
@@ -90,6 +90,31 @@ function withModelLimit(model, limits) {
|
|
|
90
90
|
maxTokens: limit.maxTokens ?? model.maxTokens,
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Resolve one request's stop sequences against the model's protocol.
|
|
95
|
+
*
|
|
96
|
+
* The seam's stop control reaches a route only through the provider's own
|
|
97
|
+
* field, and pi-ai models none: its Anthropic options carry no stop sequences
|
|
98
|
+
* and that adapter ignores `samplingParams`, and its Responses options define
|
|
99
|
+
* no stop-sequence parameter at all. Only the OpenAI-compatible adapters merge
|
|
100
|
+
* arbitrary body fields, and `stop` is exactly the field Chat Completions
|
|
101
|
+
* defines, so a completions model can honor it. Every other protocol refuses:
|
|
102
|
+
* silently dropping the sequences would let a caller believe generation halts
|
|
103
|
+
* at a string the model never sees.
|
|
104
|
+
* @param model - the exact model this request will use.
|
|
105
|
+
* @param stop - the caller's stop sequences, when it named any.
|
|
106
|
+
* @returns the sequences to send, or undefined when the caller named none.
|
|
107
|
+
* @throws {LlmError} `UNSUPPORTED_OPTION` for a protocol with no reachable
|
|
108
|
+
* stop-sequence parameter.
|
|
109
|
+
*/
|
|
110
|
+
function stopSequencesFor(model, stop) {
|
|
111
|
+
if (stop === undefined)
|
|
112
|
+
return undefined;
|
|
113
|
+
if (model.api === 'openai-completions')
|
|
114
|
+
return stop;
|
|
115
|
+
throw new LlmError(`opencode-go model "${model.id}" speaks ${model.api}, which has no stop-sequence parameter this adapter can reach;`
|
|
116
|
+
+ ' drop GenerateOptions.stop for this model', 'UNSUPPORTED_OPTION');
|
|
117
|
+
}
|
|
93
118
|
/**
|
|
94
119
|
* The single `opencode-go` route's adapter.
|
|
95
120
|
*
|
|
@@ -238,13 +263,13 @@ export class OpencodeGoAdapter extends LlmAdapter {
|
|
|
238
263
|
async *streamWithSnapshot(options, config, snapshot) {
|
|
239
264
|
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
240
265
|
try {
|
|
241
|
-
if (options.stop !== undefined) {
|
|
242
|
-
throw new LlmError('dshopencodego does not support GenerateOptions.stop', 'UNSUPPORTED_OPTION');
|
|
243
|
-
}
|
|
244
266
|
const facts = snapshot.facts.get(options.model);
|
|
245
267
|
if (facts === undefined)
|
|
246
268
|
throw new LlmError(`opencode-go has no model "${options.model}"`, 'UNKNOWN_MODEL');
|
|
247
269
|
const model = withModelLimit(toPiModel(facts, config.baseURL), config.modelLimits);
|
|
270
|
+
// Resolved before the first await so an unsupported protocol fails the
|
|
271
|
+
// request before any credential is read or any byte is sent.
|
|
272
|
+
const stop = stopSequencesFor(model, options.stop);
|
|
248
273
|
// `defaultMaxTokens` already carries the route's ceiling for a caller that
|
|
249
274
|
// names none, so only a caller's own cap travels, clamped by a configured
|
|
250
275
|
// per-model ceiling when one exists.
|
|
@@ -287,6 +312,10 @@ export class OpencodeGoAdapter extends LlmAdapter {
|
|
|
287
312
|
...reasoning === undefined || reasoning === 'off' ? {} : { reasoning },
|
|
288
313
|
...options.temperature === undefined ? {} : { temperature: options.temperature },
|
|
289
314
|
...maxTokens === undefined ? {} : { maxTokens },
|
|
315
|
+
// `samplingParams` is merged into the request body as-is by the
|
|
316
|
+
// OpenAI-compatible adapters, and `stop` is Chat Completions' own
|
|
317
|
+
// stop-sequence field — the one place this control reaches the wire.
|
|
318
|
+
...stop === undefined ? {} : { samplingParams: { stop: [...stop] } },
|
|
290
319
|
...options.sessionId === undefined ? {} : { sessionId: String(options.sessionId) },
|
|
291
320
|
signal: watchdog.signal,
|
|
292
321
|
// The gateway refuses a request without `x-opencode-session`; the
|
|
@@ -40,7 +40,9 @@ export interface CatalogReading {
|
|
|
40
40
|
* @param snapshot - the catalog snapshot, live or retained.
|
|
41
41
|
* @param visibility - per-model switches; absent entries keep the default.
|
|
42
42
|
* @param listingFailure - the failure message when the listing failed.
|
|
43
|
+
* @param now - the clock the "newly shipped" ordering reads; injected so a
|
|
44
|
+
* reading is a pure function of its inputs rather than of the wall clock.
|
|
43
45
|
* @returns the reading, with unconfigurable ids kept visible so the page can
|
|
44
46
|
* explain them instead of hiding them.
|
|
45
47
|
*/
|
|
46
|
-
export declare function catalogReading(snapshot: CatalogSnapshot, visibility: Readonly<Record<string, boolean>>, listingFailure?: string): CatalogReading;
|
|
48
|
+
export declare function catalogReading(snapshot: CatalogSnapshot, visibility: Readonly<Record<string, boolean>>, listingFailure?: string, now?: number): CatalogReading;
|
|
@@ -16,10 +16,12 @@ import { goQuotaFor } from "../go-limits.js";
|
|
|
16
16
|
* @param snapshot - the catalog snapshot, live or retained.
|
|
17
17
|
* @param visibility - per-model switches; absent entries keep the default.
|
|
18
18
|
* @param listingFailure - the failure message when the listing failed.
|
|
19
|
+
* @param now - the clock the "newly shipped" ordering reads; injected so a
|
|
20
|
+
* reading is a pure function of its inputs rather than of the wall clock.
|
|
19
21
|
* @returns the reading, with unconfigurable ids kept visible so the page can
|
|
20
22
|
* explain them instead of hiding them.
|
|
21
23
|
*/
|
|
22
|
-
export function catalogReading(snapshot, visibility, listingFailure) {
|
|
24
|
+
export function catalogReading(snapshot, visibility, listingFailure, now) {
|
|
23
25
|
const documentQuotas = snapshot.documentQuotas;
|
|
24
26
|
const rows = [
|
|
25
27
|
...[...snapshot.facts.values()].map(fact => {
|
|
@@ -55,7 +57,7 @@ export function catalogReading(snapshot, visibility, listingFailure) {
|
|
|
55
57
|
const models = rows.map(row => ({ ...row, recommended: recommended.has(row.id) }));
|
|
56
58
|
const enabled = models.filter(model => isModelEnabled(model, visibility)).length;
|
|
57
59
|
return {
|
|
58
|
-
models: sortModels(models),
|
|
60
|
+
models: sortModels(models, now),
|
|
59
61
|
stale: !snapshot.live,
|
|
60
62
|
...!snapshot.live && listingFailure !== undefined ? { error: listingFailure } : {},
|
|
61
63
|
fetchedAtMs: snapshot.fetchedAtMs,
|
package/locale/en.json
ADDED
package/locale/zh.json
ADDED
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dan-ai-studio/dshopencodego",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.21",
|
|
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",
|
|
7
|
+
"icon": "./icon.svg",
|
|
7
8
|
"repository": {
|
|
8
9
|
"type": "git",
|
|
9
10
|
"url": "git+https://github.com/dan-ai-studio/dshopencodego.git"
|
|
@@ -27,11 +28,14 @@
|
|
|
27
28
|
"types": "./lib/types/client/index.d.ts",
|
|
28
29
|
"default": "./lib/client.js"
|
|
29
30
|
},
|
|
31
|
+
"./locale/*.json": "./locale/*.json",
|
|
30
32
|
"./package.json": "./package.json"
|
|
31
33
|
},
|
|
32
34
|
"files": [
|
|
33
35
|
"lib",
|
|
34
36
|
"cordis.patch.yml",
|
|
37
|
+
"icon.svg",
|
|
38
|
+
"locale",
|
|
35
39
|
"README.md",
|
|
36
40
|
"README.en.md",
|
|
37
41
|
"LICENSE"
|
|
@@ -63,11 +67,11 @@
|
|
|
63
67
|
"prepack": "npm run build"
|
|
64
68
|
},
|
|
65
69
|
"dependencies": {
|
|
66
|
-
"@deepseek-ai/schemastery": "
|
|
67
|
-
"@earendil-works/pi-ai": "0.
|
|
70
|
+
"@deepseek-ai/schemastery": "~3.18.5-alpha.1",
|
|
71
|
+
"@earendil-works/pi-ai": "~1.0.2"
|
|
68
72
|
},
|
|
69
73
|
"peerDependencies": {
|
|
70
|
-
"@deepseek-ai/cordis": "4.0.2 || 4.0.3 || 4.0.4",
|
|
74
|
+
"@deepseek-ai/cordis": "4.0.2 || 4.0.3 || 4.0.4 || 4.0.5-alpha.1",
|
|
71
75
|
"@deepseek-ai/dsh-api-remotes": ">=0.1.7-alpha.1 <0.2.0 || >=0.2.0-rc.1 <0.3.0",
|
|
72
76
|
"@deepseek-ai/dsh-attachment": ">=0.1.7-alpha.1 <0.2.0 || >=0.2.0-rc.1 <0.3.0",
|
|
73
77
|
"@deepseek-ai/dsh-brand": ">=0.1.7-alpha.1 <0.2.0 || >=0.2.0-rc.1 <0.3.0",
|
|
@@ -107,29 +111,28 @@
|
|
|
107
111
|
}
|
|
108
112
|
},
|
|
109
113
|
"devDependencies": {
|
|
110
|
-
"@deepseek-ai/cordis": "4.0.
|
|
111
|
-
"@deepseek-ai/dsh-api-remotes": "0.2.
|
|
112
|
-
"@deepseek-ai/dsh-attachment": "0.2.
|
|
113
|
-
"@deepseek-ai/dsh-brand": "0.2.
|
|
114
|
-
"@deepseek-ai/dsh-client-locale": "0.2.
|
|
115
|
-
"@deepseek-ai/dsh-client-store": "0.2.
|
|
116
|
-
"@deepseek-ai/dsh-client-ui-conversation": "^0.2.
|
|
117
|
-
"@deepseek-ai/dsh-client-ui-model-selection": "0.2.
|
|
118
|
-
"@deepseek-ai/dsh-client-ui-renderer": "^0.2.
|
|
119
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.2.
|
|
120
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.2.
|
|
121
|
-
"@deepseek-ai/dsh-credentials": "0.2.
|
|
122
|
-
"@deepseek-ai/dsh-fs": "0.2.
|
|
123
|
-
"@deepseek-ai/dsh-
|
|
124
|
-
"@deepseek-ai/dsh-
|
|
125
|
-
"@deepseek-ai/dsh-
|
|
126
|
-
"@deepseek-ai/dsh-
|
|
127
|
-
"@deepseek-ai/dsh-
|
|
128
|
-
"@deepseek-ai/dsh-
|
|
129
|
-
"@deepseek-ai/dsh-
|
|
130
|
-
"@deepseek-ai/dsh-
|
|
131
|
-
"@deepseek-ai/dsh-typert-
|
|
132
|
-
"@deepseek-ai/dsh-typert-registry": "^0.2.0-rc.2",
|
|
114
|
+
"@deepseek-ai/cordis": "4.0.5-alpha.1",
|
|
115
|
+
"@deepseek-ai/dsh-api-remotes": "0.2.1-alpha.2",
|
|
116
|
+
"@deepseek-ai/dsh-attachment": "0.2.1-alpha.2",
|
|
117
|
+
"@deepseek-ai/dsh-brand": "0.2.1-alpha.2",
|
|
118
|
+
"@deepseek-ai/dsh-client-locale": "0.2.1-alpha.2",
|
|
119
|
+
"@deepseek-ai/dsh-client-store": "0.2.1-alpha.2",
|
|
120
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.2.1-alpha.2",
|
|
121
|
+
"@deepseek-ai/dsh-client-ui-model-selection": "0.2.1-alpha.2",
|
|
122
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.2.1-alpha.2",
|
|
123
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.2.1-alpha.2",
|
|
124
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.1-alpha.2",
|
|
125
|
+
"@deepseek-ai/dsh-credentials": "0.2.1-alpha.2",
|
|
126
|
+
"@deepseek-ai/dsh-fs": "0.2.1-alpha.2",
|
|
127
|
+
"@deepseek-ai/dsh-launch-environment": "0.2.1-alpha.2",
|
|
128
|
+
"@deepseek-ai/dsh-llm": "0.2.1-alpha.2",
|
|
129
|
+
"@deepseek-ai/dsh-sandbox": "0.2.1-alpha.2",
|
|
130
|
+
"@deepseek-ai/dsh-scope": "0.2.1-alpha.2",
|
|
131
|
+
"@deepseek-ai/dsh-session": "0.2.1-alpha.2",
|
|
132
|
+
"@deepseek-ai/dsh-settings": "0.2.1-alpha.2",
|
|
133
|
+
"@deepseek-ai/dsh-timeout": "0.2.1-alpha.2",
|
|
134
|
+
"@deepseek-ai/dsh-typert-protocol": "0.2.1-alpha.2",
|
|
135
|
+
"@deepseek-ai/dsh-typert-registry": "^0.2.1-alpha.2",
|
|
133
136
|
"@testing-library/dom": "^10.4.1",
|
|
134
137
|
"@testing-library/react": "^16.3.0",
|
|
135
138
|
"@types/node": "^22.20.0",
|