dsh-opencode-go 0.1.15 → 0.1.17
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/README.en.md +37 -11
- package/README.md +37 -11
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/docs/development.md +74 -0
- package/docs/independent-package.md +3 -1
- package/docs/verification.md +118 -0
- package/examples/headless.patch.yml +1 -1
- package/lib/client.js +378 -286
- package/lib/index.js +228 -70
- package/lib/types/adapter.d.ts +2 -0
- package/lib/types/catalog.d.ts +14 -4
- package/lib/types/client/ModelEditor.d.ts +4 -1
- package/lib/types/client/Section.d.ts +6 -5
- package/lib/types/client/locales.d.ts +11 -2
- package/lib/types/config.d.ts +1 -1
- package/lib/types/conversion/context.d.ts +1 -1
- package/lib/types/conversion/replay.d.ts +6 -2
- package/lib/types/conversion/stream.d.ts +3 -2
- package/lib/types/index.d.ts +2 -2
- package/lib/types/json-response.d.ts +6 -3
- package/lib/types/metadata-cache.d.ts +12 -0
- package/lib/types/model-metadata.d.ts +4 -2
- package/lib/types/models-contract.d.ts +15 -0
- package/lib/types/provider-identity.d.ts +4 -0
- package/package.json +27 -18
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The OpenCode Go settings
|
|
3
|
-
*
|
|
4
|
-
* the models the gateway currently serves
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* The OpenCode Go settings page. Three cards carry the page's whole order — the
|
|
3
|
+
* connection (the switch that routes the provider plus the API key it
|
|
4
|
+
* authenticates with), the models the gateway currently serves and their
|
|
5
|
+
* capacities, and the adapter tuning fields behind a collapsed disclosure at the
|
|
6
|
+
* foot. The credential reference, the endpoint, and the tuning knobs all live in
|
|
7
|
+
* the `llm-opencode-go` namespace, so every card writes the same document.
|
|
7
8
|
*/
|
|
8
9
|
import type { InjectFace } from '@deepseek-ai/dsh-client-ui-slots';
|
|
9
10
|
import type { OpencodeGoSectionFace } from './section-controller.ts';
|
|
@@ -19,6 +19,7 @@ export declare const en: {
|
|
|
19
19
|
usageRefreshing: string;
|
|
20
20
|
nav: string;
|
|
21
21
|
title: string;
|
|
22
|
+
titleLabel: string;
|
|
22
23
|
intro: string;
|
|
23
24
|
starProject: string;
|
|
24
25
|
starProjectTitle: string;
|
|
@@ -45,7 +46,6 @@ export declare const en: {
|
|
|
45
46
|
modelsSourceUpdated: string;
|
|
46
47
|
modelsRefreshing: string;
|
|
47
48
|
modelsEmpty: string;
|
|
48
|
-
modelsCount: string;
|
|
49
49
|
limitsLabel: string;
|
|
50
50
|
limitsHint: string;
|
|
51
51
|
limitsFilterLabel: string;
|
|
@@ -56,6 +56,15 @@ export declare const en: {
|
|
|
56
56
|
limitsOutput: string;
|
|
57
57
|
capacityDefault: string;
|
|
58
58
|
capacityMissing: string;
|
|
59
|
+
modalityLabel: string;
|
|
60
|
+
modalityText: string;
|
|
61
|
+
modalityImage: string;
|
|
62
|
+
modalityAudio: string;
|
|
63
|
+
modalityVideo: string;
|
|
64
|
+
modalityPdf: string;
|
|
65
|
+
modalityUnknown: string;
|
|
66
|
+
modalitiesSource: string;
|
|
67
|
+
modalitiesForwarding: string;
|
|
59
68
|
visibilityHint: string;
|
|
60
69
|
modelVisibleLabel: string;
|
|
61
70
|
configurationMissing: string;
|
|
@@ -67,7 +76,6 @@ export declare const en: {
|
|
|
67
76
|
deprecatedHint: string;
|
|
68
77
|
newHint: string;
|
|
69
78
|
newBadge: string;
|
|
70
|
-
releasedOn: string;
|
|
71
79
|
releaseSource: string;
|
|
72
80
|
modelDetails: string;
|
|
73
81
|
filterLabel: string;
|
|
@@ -81,6 +89,7 @@ export declare const en: {
|
|
|
81
89
|
limitsEmpty: string;
|
|
82
90
|
limitsContextLabel: string;
|
|
83
91
|
limitsOutputLabel: string;
|
|
92
|
+
advancedSummary: string;
|
|
84
93
|
advancedLabel: string;
|
|
85
94
|
advancedHint: string;
|
|
86
95
|
apiKeyEnvLabel: string;
|
package/lib/types/config.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export type OpencodeGoModelLimits = Record<string, OpencodeGoModelLimit | null>;
|
|
|
32
32
|
export interface OpencodeGoConfig {
|
|
33
33
|
/**
|
|
34
34
|
* Whether this adapter serves its route at all. False withdraws the
|
|
35
|
-
* `opencode-go` route and its models from every picker without unloading the
|
|
35
|
+
* `dsh-opencode-go` route and its models from every picker without unloading the
|
|
36
36
|
* plugin, so the settings page that owns this switch stays reachable to turn
|
|
37
37
|
* it back on. Independent of the credential: a key present while this is
|
|
38
38
|
* false registers nothing.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { GenerateOptions, ImageAttachmentAccessResolver } from '@deepseek-ai/dsh-llm';
|
|
7
7
|
import type { AttachmentStore } from '@deepseek-ai/dsh-attachment';
|
|
8
|
-
import type { Context as PiContext } from '
|
|
8
|
+
import type { Context as PiContext } from 'opencode-go-pi-ai';
|
|
9
9
|
/** Inputs that bind deterministic request images to one current tool execution world. */
|
|
10
10
|
export interface PiImageRequestContext {
|
|
11
11
|
/** Durable provider that resolves request-image bytes and provider-owned host objects. */
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @module dsh-opencode-go/conversion/replay
|
|
9
9
|
*/
|
|
10
10
|
import type { Message, ReplayEnvelope } from '@deepseek-ai/dsh-llm';
|
|
11
|
-
import type { Api, AssistantMessage } from '
|
|
11
|
+
import type { Api, AssistantMessage } from 'opencode-go-pi-ai';
|
|
12
12
|
/** Per-block half of the pi-ai replay envelope, one entry per content block. */
|
|
13
13
|
export type PiAiReplayBlock = {
|
|
14
14
|
type: 'text';
|
|
@@ -26,7 +26,10 @@ export interface PiAiReplayResponse {
|
|
|
26
26
|
kind: 'pi-ai';
|
|
27
27
|
version: 2;
|
|
28
28
|
api: Api;
|
|
29
|
+
/** Requested DSH provider identity, matching the durable assistant source. */
|
|
29
30
|
provider: string;
|
|
31
|
+
/** Native SDK provider when it differs from the DSH route. */
|
|
32
|
+
sdkProvider?: string;
|
|
30
33
|
/** Requested model identity, matching the durable assistant source. */
|
|
31
34
|
model: string;
|
|
32
35
|
/** Provider-reported model; only Anthropic replays it as the native model (reported in `message.model`, not `message.responseModel`). */
|
|
@@ -43,9 +46,10 @@ export interface PiAiReplayResponse {
|
|
|
43
46
|
* removes one.
|
|
44
47
|
* @param message - completed native pi-ai assistant response.
|
|
45
48
|
* @param requestedModel - request identity stored in the assistant source; defaults to the native model.
|
|
49
|
+
* @param requestedProvider - DSH route stored in the assistant source; defaults to the native provider.
|
|
46
50
|
* @returns the versioned lossless-JSON replay projection.
|
|
47
51
|
*/
|
|
48
|
-
export declare function toPiReplayState(message: AssistantMessage, requestedModel?: string): ReplayEnvelope;
|
|
52
|
+
export declare function toPiReplayState(message: AssistantMessage, requestedModel?: string, requestedProvider?: string): ReplayEnvelope;
|
|
49
53
|
/**
|
|
50
54
|
* Convert one durable Harness assistant message into pi-ai history.
|
|
51
55
|
*
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @module dsh-opencode-go/conversion/stream
|
|
9
9
|
*/
|
|
10
10
|
import type { FinishReason, StreamChunk, TokenUsage } from '@deepseek-ai/dsh-llm';
|
|
11
|
-
import type { AssistantMessage, AssistantMessageEvent, Usage as PiUsage } from '
|
|
11
|
+
import type { AssistantMessage, AssistantMessageEvent, Usage as PiUsage } from 'opencode-go-pi-ai';
|
|
12
12
|
/**
|
|
13
13
|
* Map pi-ai usage (reasoning folded into output by pi-ai).
|
|
14
14
|
* @param usage - cumulative usage from the terminal pi-ai event.
|
|
@@ -36,7 +36,8 @@ export declare function mapStopReason(message: AssistantMessage, contextWindow?:
|
|
|
36
36
|
* @param callerSignal - caller cancellation state; an aborted caller makes any
|
|
37
37
|
* in-band terminal error an aborted finish.
|
|
38
38
|
* @param requestedModel - request model identity recorded for durable replay.
|
|
39
|
+
* @param requestedProvider - DSH provider identity recorded for durable replay.
|
|
39
40
|
* @returns the harness chunks, ending with `usage` then `finish`; throws
|
|
40
41
|
* `LlmError` (`STREAM_CLOSED`) if the source ends without a terminal event.
|
|
41
42
|
*/
|
|
42
|
-
export declare function toStreamChunks(events: AsyncIterable<AssistantMessageEvent>, contextWindow?: number, callerSignal?: AbortSignal, requestedModel?: string): AsyncGenerator<StreamChunk>;
|
|
43
|
+
export declare function toStreamChunks(events: AsyncIterable<AssistantMessageEvent>, contextWindow?: number, callerSignal?: AbortSignal, requestedModel?: string, requestedProvider?: string): AsyncGenerator<StreamChunk>;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Dedicated OpenCode Go adapter plugin. Registers one `opencode-go` route
|
|
2
|
+
* Dedicated OpenCode Go adapter plugin. Registers one `dsh-opencode-go` route
|
|
3
3
|
* whose catalog follows the gateway's live model listing and models.dev
|
|
4
4
|
* metadata, and installs the `llm-opencode-go` settings section: the Web UI
|
|
5
5
|
* renders it as its own settings page where the API key and every knob are
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* The credential resolves per request through the credentials seam, falling
|
|
25
25
|
* back to the process environment — the same reference semantics the generic
|
|
26
26
|
* pi-ai adapter uses. The route registers atomically: if another adapter
|
|
27
|
-
*
|
|
27
|
+
* mount already owns `dsh-opencode-go`,
|
|
28
28
|
* the refusal is logged with the reason and everything else this plugin does
|
|
29
29
|
* still works.
|
|
30
30
|
*
|
|
@@ -3,9 +3,12 @@ export declare function transportFailure(error: unknown): string;
|
|
|
3
3
|
/** Keep the endpoint useful in diagnostics without user information or query secrets. */
|
|
4
4
|
export declare function diagnosticURL(raw: string): string;
|
|
5
5
|
/** The caller's signal covers both attempts, the retry delay, and all response reads. */
|
|
6
|
-
export declare function fetchJsonResponse(url: string, init: RequestInit, maxBytes: number): Promise<{
|
|
6
|
+
export declare function fetchJsonResponse(url: string, init: RequestInit, maxBytes: number, encoding?: 'identity' | 'gzip'): Promise<{
|
|
7
7
|
response: Response;
|
|
8
8
|
body: unknown;
|
|
9
9
|
}>;
|
|
10
|
-
/** Fetch
|
|
11
|
-
export declare function readJsonResponse(response: Response, maxBytes: number
|
|
10
|
+
/** Fetch normally decodes HTTP; only negotiated gzip may recover a raw gzip body (#7). */
|
|
11
|
+
export declare function readJsonResponse(response: Response, maxBytes: number, options?: {
|
|
12
|
+
gzip?: boolean;
|
|
13
|
+
signal?: AbortSignal | null;
|
|
14
|
+
}): Promise<unknown>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const MODEL_METADATA_MAX_BYTES: number;
|
|
2
|
+
export interface CachedMetadata {
|
|
3
|
+
readonly body: unknown;
|
|
4
|
+
readonly etag?: string;
|
|
5
|
+
/** Last successful download or HTTP 304 verification. */
|
|
6
|
+
readonly savedAtMs: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function metadataCachePath(): string;
|
|
9
|
+
/** Only persist validators that can safely become an HTTP request header. */
|
|
10
|
+
export declare function metadataETag(value: unknown): string | undefined;
|
|
11
|
+
export declare function readMetadataCache(path: string): Promise<CachedMetadata | undefined>;
|
|
12
|
+
export declare function writeMetadataCache(path: string, value: CachedMetadata): Promise<void>;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/** Convert OpenCode's online models.dev metadata into the SDK's three wire protocols. */
|
|
2
|
-
import type { Api, Model } from '
|
|
2
|
+
import type { Api, Model } from 'opencode-go-pi-ai';
|
|
3
3
|
import { type GoModel } from './models-contract.ts';
|
|
4
4
|
export declare const MODEL_METADATA_URL = "https://models.dev/api.json";
|
|
5
|
+
/** Lifecycle and capability data the online catalog adds to a gateway listing. */
|
|
6
|
+
export type ModelDetails = Pick<GoModel, 'deprecated' | 'releaseDate' | 'inputModalities'>;
|
|
5
7
|
export interface ModelMetadata {
|
|
6
8
|
readonly models: ReadonlyMap<string, Model<Api>>;
|
|
7
|
-
readonly details: ReadonlyMap<string,
|
|
9
|
+
readonly details: ReadonlyMap<string, ModelDetails>;
|
|
8
10
|
readonly errors: ReadonlyMap<string, string>;
|
|
9
11
|
}
|
|
10
12
|
/** Anthropic's SDK appends /v1/messages; the OpenAI SDKs append paths below /v1. */
|
|
@@ -7,9 +7,24 @@ export interface GoModel {
|
|
|
7
7
|
maxTokens?: number;
|
|
8
8
|
deprecated?: boolean;
|
|
9
9
|
releaseDate?: string;
|
|
10
|
+
/** Input modalities models.dev declares, in {@link INPUT_MODALITIES} order. */
|
|
11
|
+
inputModalities?: readonly InputModality[];
|
|
10
12
|
/** Advertised by the gateway but lacking a usable protocol and capability configuration. */
|
|
11
13
|
configurationMissing?: boolean;
|
|
12
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Input modalities this page can name. models.dev uses these same five tokens, so
|
|
17
|
+
* an unknown token is dropped rather than rendered as an untranslatable chip.
|
|
18
|
+
*/
|
|
19
|
+
export declare const INPUT_MODALITIES: readonly ["text", "image", "audio", "video", "pdf"];
|
|
20
|
+
export type InputModality = typeof INPUT_MODALITIES[number];
|
|
21
|
+
/**
|
|
22
|
+
* Normalize one `modalities.input` array into display order.
|
|
23
|
+
* @param value - the raw declaration read from models.dev or from a Host response.
|
|
24
|
+
* @returns the declared modalities in {@link INPUT_MODALITIES} order, or
|
|
25
|
+
* `undefined` when nothing recognizable was declared.
|
|
26
|
+
*/
|
|
27
|
+
export declare function normalizeInputModalities(value: unknown): readonly InputModality[] | undefined;
|
|
13
28
|
/** Last successful check of one catalog source, plus any current refresh failure. */
|
|
14
29
|
export interface GoCatalogSourceStatus {
|
|
15
30
|
readonly updatedAt?: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-opencode-go",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.17",
|
|
4
4
|
"description": "OpenCode Go model provider and settings UI for DeepSeek Harness",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -51,13 +51,18 @@
|
|
|
51
51
|
}
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
|
-
"
|
|
54
|
+
"compile": "node scripts/build.mjs",
|
|
55
|
+
"check:dist": "node scripts/build.mjs --check",
|
|
55
56
|
"typecheck": "tsc -p tsconfig.host.json --noEmit && tsc -p tsconfig.client.json --noEmit",
|
|
56
57
|
"test": "vitest run",
|
|
57
|
-
"
|
|
58
|
-
"
|
|
58
|
+
"pretest": "npm run compile",
|
|
59
|
+
"test:ci": "npm run check:dist && vitest run",
|
|
59
60
|
"verify:installed": "node --expose-internals scripts/installed-smoke.mjs",
|
|
60
|
-
"verify:headless": "node scripts/headless-smoke.mjs"
|
|
61
|
+
"verify:headless": "node scripts/headless-smoke.mjs",
|
|
62
|
+
"prepublishOnly": "npm run check:dist",
|
|
63
|
+
"test:compat": "node scripts/test-compat.mjs",
|
|
64
|
+
"test:install": "node scripts/test-install.mjs",
|
|
65
|
+
"verify": "npm run test:ci && npm run test:compat && npm run test:install"
|
|
61
66
|
},
|
|
62
67
|
"peerDependencies": {
|
|
63
68
|
"@deepseek-ai/cordis": ">=4.0.2",
|
|
@@ -84,15 +89,18 @@
|
|
|
84
89
|
"dependencies": {
|
|
85
90
|
"@deepseek-ai/dsh-brand": "0.1.6-alpha.1",
|
|
86
91
|
"@deepseek-ai/schemastery": "3.18.3",
|
|
87
|
-
"
|
|
92
|
+
"opencode-go-pi-ai": "npm:@earendil-works/pi-ai@0.87.1"
|
|
88
93
|
},
|
|
89
94
|
"devDependencies": {
|
|
90
95
|
"@deepseek-ai/cordis": "4.0.2",
|
|
91
96
|
"@deepseek-ai/cordis-plugin-include": "1.0.7",
|
|
92
97
|
"@deepseek-ai/cordis-plugin-loader": "1.0.3",
|
|
98
|
+
"@deepseek-ai/dsh-agent": "0.1.6-alpha.1",
|
|
99
|
+
"@deepseek-ai/dsh-agent-presets": "0.1.6-alpha.1",
|
|
93
100
|
"@deepseek-ai/dsh-api-gateway": "0.1.6-alpha.1",
|
|
94
101
|
"@deepseek-ai/dsh-api-remotes": "0.1.6-alpha.1",
|
|
95
102
|
"@deepseek-ai/dsh-api-settings-controller": "0.1.6-alpha.1",
|
|
103
|
+
"@deepseek-ai/dsh-atomic-write": "0.1.6-alpha.1",
|
|
96
104
|
"@deepseek-ai/dsh-attachment": "0.1.6-alpha.1",
|
|
97
105
|
"@deepseek-ai/dsh-attachment-local": "0.1.6-alpha.1",
|
|
98
106
|
"@deepseek-ai/dsh-brand": "0.1.6-alpha.1",
|
|
@@ -106,16 +114,29 @@
|
|
|
106
114
|
"@deepseek-ai/dsh-client-ui-slots": "0.1.6-alpha.1",
|
|
107
115
|
"@deepseek-ai/dsh-credentials": "0.1.6-alpha.1",
|
|
108
116
|
"@deepseek-ai/dsh-credentials-local": "0.1.6-alpha.1",
|
|
117
|
+
"@deepseek-ai/dsh-deque": "0.1.6-alpha.1",
|
|
109
118
|
"@deepseek-ai/dsh-fs": "0.1.6-alpha.1",
|
|
110
119
|
"@deepseek-ai/dsh-home-paths": "0.1.6-alpha.1",
|
|
120
|
+
"@deepseek-ai/dsh-invariants": "0.1.6-alpha.1",
|
|
111
121
|
"@deepseek-ai/dsh-launch-environment": "0.1.6-alpha.1",
|
|
112
122
|
"@deepseek-ai/dsh-llm": "0.1.6-alpha.1",
|
|
123
|
+
"@deepseek-ai/dsh-native-command": "0.1.6-alpha.1",
|
|
124
|
+
"@deepseek-ai/dsh-ptc-runtime": "0.1.6-alpha.1",
|
|
125
|
+
"@deepseek-ai/dsh-sandbox": "0.1.6-alpha.1",
|
|
126
|
+
"@deepseek-ai/dsh-sandbox-policy": "0.1.6-alpha.1",
|
|
127
|
+
"@deepseek-ai/dsh-scope": "0.1.6-alpha.1",
|
|
113
128
|
"@deepseek-ai/dsh-session": "0.1.6-alpha.1",
|
|
129
|
+
"@deepseek-ai/dsh-session-projection": "0.1.6-alpha.1",
|
|
114
130
|
"@deepseek-ai/dsh-settings": "0.1.6-alpha.1",
|
|
115
131
|
"@deepseek-ai/dsh-settings-file": "0.1.6-alpha.1",
|
|
132
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.6-alpha.1",
|
|
116
133
|
"@deepseek-ai/dsh-timeout": "0.1.6-alpha.1",
|
|
134
|
+
"@deepseek-ai/dsh-tools": "0.1.6-alpha.1",
|
|
117
135
|
"@deepseek-ai/dsh-typert-protocol": "0.1.6-alpha.1",
|
|
118
136
|
"@deepseek-ai/dsh-typert-registry": "0.1.6-alpha.1",
|
|
137
|
+
"@deepseek-ai/dsh-user-approval": "0.1.6-alpha.1",
|
|
138
|
+
"@deepseek-ai/dsh-util-crypto": "0.1.6-alpha.1",
|
|
139
|
+
"@deepseek-ai/dsh-util-values": "0.1.6-alpha.1",
|
|
119
140
|
"@shikijs/langs": "^4.3.1",
|
|
120
141
|
"@testing-library/dom": "^10.4.2",
|
|
121
142
|
"@testing-library/react": "^16.3.2",
|
|
@@ -127,15 +148,6 @@
|
|
|
127
148
|
"anser": "^2.3.5",
|
|
128
149
|
"clsx": "^2.0.0",
|
|
129
150
|
"diff": "^9.0.0",
|
|
130
|
-
"dsh-attachment-local-v015-rc1": "npm:@deepseek-ai/dsh-attachment-local@0.1.5-rc.1",
|
|
131
|
-
"dsh-attachment-local-v015-rc2": "npm:@deepseek-ai/dsh-attachment-local@0.1.5-rc.2",
|
|
132
|
-
"dsh-attachment-local-v016-alpha2": "npm:@deepseek-ai/dsh-attachment-local@0.1.6-alpha.2",
|
|
133
|
-
"dsh-attachment-v015-rc1": "npm:@deepseek-ai/dsh-attachment@0.1.5-rc.1",
|
|
134
|
-
"dsh-attachment-v015-rc2": "npm:@deepseek-ai/dsh-attachment@0.1.5-rc.2",
|
|
135
|
-
"dsh-attachment-v016-alpha2": "npm:@deepseek-ai/dsh-attachment@0.1.6-alpha.2",
|
|
136
|
-
"dsh-llm-v015-rc1": "npm:@deepseek-ai/dsh-llm@0.1.5-rc.1",
|
|
137
|
-
"dsh-llm-v015-rc2": "npm:@deepseek-ai/dsh-llm@0.1.5-rc.2",
|
|
138
|
-
"dsh-llm-v016-alpha2": "npm:@deepseek-ai/dsh-llm@0.1.6-alpha.2",
|
|
139
151
|
"esbuild": "^0.25.0",
|
|
140
152
|
"immer": "^10.1.1",
|
|
141
153
|
"jsdom": "29.1.1",
|
|
@@ -208,8 +220,5 @@
|
|
|
208
220
|
"opencode-go",
|
|
209
221
|
"llm",
|
|
210
222
|
"cordis"
|
|
211
|
-
],
|
|
212
|
-
"workspaces": [
|
|
213
|
-
"tests/hosts/*"
|
|
214
223
|
]
|
|
215
224
|
}
|