@thestreamcode/dsh-muse-code 0.1.1 → 0.2.0

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/AUTH_CONTRACT.md CHANGED
@@ -1,7 +1,9 @@
1
1
  # Muse auth contract (v1)
2
2
 
3
- This bundle implements the same Meta device-code flow as the other Muse Code
4
- plugins. Change this file and the pinned constants/tests together:
3
+ DeepSeek Harness implements this Meta device-code contract in its shipped pi-ai Meta
4
+ provider (`llm-pi-ai/meta`); this bundle relies on that implementation. The sibling Muse Code
5
+ plugins implement the same flow themselves, so change this file and the pinned values together
6
+ with:
5
7
 
6
8
  - `opencode-muse-auth`
7
9
  - `hermes-muse-code`
@@ -20,6 +22,10 @@ plugins. Change this file and the pinned constants/tests together:
20
22
  | Credential reference | `MUSE_CODE_SUB_TOKEN` |
21
23
  | Inference base URL | `https://api.meta.ai/v1` |
22
24
 
25
+ DeepSeek Harness stores the same sign-in as the OAuth credential record `llm-pi-ai/meta` and
26
+ re-mints its short-lived key, because the pi-ai adapter owns that flow. The pinned
27
+ `MUSE_CODE_SUB_TOKEN` reference describes the sibling plugins' credential, not DSH's.
28
+
23
29
  ## Behaviour
24
30
 
25
31
  - Device flow: request a device code, poll the token endpoint, accept
@@ -27,7 +33,8 @@ plugins. Change this file and the pinned constants/tests together:
27
33
  terminal error or at `expires_in`.
28
34
  - Key mint: exchange the OAuth access token for the account-bound inference
29
35
  key; reject an inactive subscription or a pending payment.
30
- - Persistence: the key is stored through the DSH credential seam under
31
- `MUSE_CODE_SUB_TOKEN`; the OAuth access token stays in memory.
32
- - Any change to this contract bumps `AUTH_CONTRACT_VERSION` in the code and
36
+ - Persistence: the sibling plugins store the key through the DSH credential seam under
37
+ `MUSE_CODE_SUB_TOKEN` and keep the OAuth access token in memory. DeepSeek Harness stores the
38
+ sign-in as the `llm-pi-ai/meta` credential record and renews the key from it.
39
+ - Any change to this contract bumps the version constant in the implementations' code and
33
40
  requires updating the pinned tests in all four repositories.
package/README.md CHANGED
@@ -1,15 +1,17 @@
1
1
  # dsh-muse-code
2
2
 
3
- Muse Code subscription models and device-code sign-in for DeepSeek Harness
3
+ Muse Code (Meta subscription) integration for DeepSeek Harness
4
4
 
5
5
  [![CI](https://github.com/TheStreamCode/dsh-muse-code/actions/workflows/ci.yml/badge.svg)](https://github.com/TheStreamCode/dsh-muse-code/actions/workflows/ci.yml)
6
6
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
7
7
  [![Release](https://img.shields.io/github/v/release/TheStreamCode/dsh-muse-code)](https://github.com/TheStreamCode/dsh-muse-code/releases/latest)
8
8
 
9
- DeepSeek Harness (DSH) bundle that serves Meta Muse Code models through a Muse Code
10
- subscription and adds a native device-code login flow. No API key is copied by hand: the
11
- plugin runs Meta's device login, mints the account-bound inference key, and stores it in the
12
- DSH credential store.
9
+ DeepSeek Harness (DSH) already ships Meta's Muse Code subscription as the pi-ai `meta`
10
+ provider (`https://api.meta.ai/v1`, OpenAI Responses) together with its device-code sign-in
11
+ flow (`llm-pi-ai/meta`). This bundle connects that provider to the surfaces a user works in:
12
+ it declares the route so the provider appears under **Settings → Models** and in the model
13
+ picker, and it adds the `/muse-login` command that runs the shipped sign-in. No key is copied
14
+ by hand and no provider code is duplicated.
13
15
 
14
16
  > **Unofficial and experimental.** This plugin uses a Muse Code subscription credential from
15
17
  > DeepSeek Harness. Meta's terms limit that credential to Muse Code, so this use may not be
@@ -36,90 +38,143 @@ From a local checkout:
36
38
  dsh plugin --profile desktop add link:C:\path\to\dsh-muse-code
37
39
  ```
38
40
 
39
- The bundle inserts its route and auth plugin through `cordis.patch.yml`; no manual profile
40
- edit is required. Restart DSH if the profile does not pick up the bundle immediately.
41
+ The bundle inserts one integration row through `cordis.patch.yml`; no manual profile edit is
42
+ required. On the first boot it declares the `meta` provider route in the `llm-pi-ai` settings
43
+ section — the same write the Models page performs when a provider is added by hand — and adds the
44
+ Sign in control and the `/muse-login` command. Restart DSH after installing or upgrading the
45
+ bundle.
41
46
 
42
47
  ## Quick start
43
48
 
44
- 1. Install the bundle with the command above.
45
- 2. Open **Settings**, select **Authorization** (the credential and sign-in surface), then
46
- **Muse Code (subscription)**.
47
- 3. Open the printed Meta URL, enter the printed code, and approve the login.
48
- 4. Select the `muse-code` provider and a Muse model in the DSH model picker, for example
49
- `muse-code/muse-spark-1.3`.
50
-
51
- The plugin commits the minted key as the `MUSE_CODE_SUB_TOKEN` credential, and the route
52
- reads it per request, so the key never appears in a configuration file.
49
+ 1. Install the bundle and restart DSH.
50
+ 2. Open **Settings → Models** and find **Muse Code (Meta subscription)**. Its models are the
51
+ ones DSH's Meta catalog advertises: Muse Spark 1.1, 1.2, and 1.3, plus their `-contributor`
52
+ variants.
53
+ 3. Press **Sign in** in the Muse Code area of that page. The Host starts DSH's Meta device-code
54
+ flow, opens the verification page in your default browser, and shows the code to confirm.
55
+ Without the page (CLI or a page that cannot reach the Host), run `/muse-login` in any chat and
56
+ follow the printed URL and code instead.
57
+ 4. Confirm the code on Meta's page and approve the login. DSH stores the credential and keeps it
58
+ fresh; the Muse Code models are selectable as soon as Meta confirms.
59
+ 5. Pick a Muse model in the model picker, for example `Muse Spark 1.3`.
60
+
61
+ The credential lives in the DSH credential store as the `llm-pi-ai/meta` record. It is never
62
+ written to `cordis.patch.yml`, which carries only the route's display name.
63
+
64
+ ## Where the sign-in lives
65
+
66
+ DSH 0.2.1 exposes no generic Remote method for starting a provider OAuth flow, so the Settings
67
+ page cannot call the authorization seam directly. The bundle therefore registers an exact local
68
+ Web route (`POST /muse-code/login`) on the Host's own HTTP server; the **Sign in** control under
69
+ Settings → Models calls it, and the Host both opens the verification page and answers with the
70
+ code and the instructions. The same flow is available as the `/muse-login` command for the
71
+ composer, CLI surfaces, or a page whose origin cannot reach the Host.
53
72
 
54
73
  ## Features
55
74
 
56
- - Adds a `muse-code` model route through a second `@deepseek-ai/dsh-llm-pi-ai` instance
57
- (`api: openai-responses`, `baseURL: https://api.meta.ai/v1`), so the existing `llm-pi-ai`
58
- configuration is not replaced.
59
- - Registers the **Muse Code (subscription)** authorization flow: Meta device login, key
60
- mint, and credential commit.
61
- - Stores the key in the DSH credential store under `MUSE_CODE_SUB_TOKEN` and reads it through
62
- `apiKeyEnv`.
63
- - Serves `muse-spark-1.3`, `muse-spark-1.2`, `muse-wonder-1.0`, and `muse-wonder-full-1.0`
64
- with text and image input, a 1,048,576-token context window, and reasoning-effort mapping
65
- from `minimal` to `max`.
66
- - Accepts an explicit `MUSE_CODE_SUB_TOKEN` environment variable instead of the stored
67
- credential.
75
+ - Declares the shipped `meta` provider route in the `llm-pi-ai` settings section, labeled
76
+ **Muse Code (Meta subscription)**, so Settings → Models and the model picker show it. An
77
+ existing `meta` profile is left untouched.
78
+ - Adds a **Sign in** control under Settings → Models, backed by the local
79
+ `POST /muse-code/login` route, and the `/muse-login` chat command. Both start DSH's own
80
+ device-code flow (`llm-pi-ai/meta`), open the verification page in the default browser, and
81
+ return the code so the surface can show it.
82
+ - Leaves credential handling to DSH: the shipped flow stores the sign-in as an OAuth credential
83
+ record and re-mints Meta's short-lived inference key automatically, so the route keeps
84
+ working after the key rotates.
85
+ - Serves the models DSH advertises for the Meta provider, with text and image input, a
86
+ 1,048,576-token context window, and the reasoning levels each model supports.
68
87
 
69
88
  ## Requirements
70
89
 
71
- - DeepSeek Harness `0.2.1-rc.2` or newer.
90
+ - DeepSeek Harness `0.2.1-rc.3` (verified) or newer, with the pi-ai `meta` provider. A DSH build
91
+ without it cannot serve the subscription.
72
92
  - Node.js 20 or newer on the DSH host; CI runs Node.js 20, 22, and 24.
73
93
  - A Meta account with an active Muse Code subscription.
74
- - The plugin needs no separate service and no third-party CLI.
94
+ - No separate service, CLI, or key file.
75
95
 
76
96
  ## Configuration
77
97
 
78
98
  | Setting | Purpose | Default |
79
99
  | --- | --- | --- |
80
- | `MUSE_CODE_SUB_TOKEN` | Inference key read by the `muse-code` route through `apiKeyEnv`. An explicit value wins over the stored credential. | from the authorization flow |
81
- | `muse-code` provider | Provider entry added by `cordis.patch.yml`; select it in the DSH model picker. | enabled after install |
82
- | Model id | Model served by the route; availability depends on the subscription plan. | `muse-spark-1.3` |
83
- | Reasoning effort | Maps DSH effort levels to Meta's wire vocabulary. | provider default |
100
+ | `meta` provider route | Declared by the bundle in the `llm-pi-ai` settings section; shown under Settings → Models and in the model picker. | declared on first boot |
101
+ | **Sign in** control | Starts the shipped Meta device-code flow from Settings → Models, opens the browser, and shows the code. Backed by `POST /muse-code/login` on the local Host. | available after install |
102
+ | `/muse-login` | The same sign-in from a chat or CLI surface, printing the URL and code. | available after install |
103
+ | `META_API_KEY` | Optional Meta Model API key that DSH's Meta provider accepts instead of the subscription sign-in. | unset |
104
+ | Model | Any model the Meta provider advertises; availability depends on the subscription plan. | `muse-spark-1.3` |
84
105
 
85
- ## Privacy and security
106
+ The `MUSE_CODE_SUB_TOKEN` reference from the 0.1.x releases is no longer used by this bundle;
107
+ see the upgrade note under Troubleshooting.
86
108
 
87
- The subscription key is stored only in the DSH credential store under `MUSE_CODE_SUB_TOKEN`;
88
- it is never written to a configuration file, and the OAuth access token stays in memory. The
89
- plugin talks only to `auth.meta.com` for the device login and `api.meta.ai` for key minting and
90
- inference. Do not share credential caches or exported keys.
109
+ ## Privacy and security
91
110
 
92
- To remove access, delete the `MUSE_CODE_SUB_TOKEN` credential from the DSH credential store or
93
- sign out of the authorization record, then remove the bundle:
94
-
95
- ```bash
96
- dsh plugin --profile desktop remove @thestreamcode/dsh-muse-code
97
- ```
111
+ - The bundle itself calls no endpoint and stores no secret. The sign-in, the credential record,
112
+ and the inference requests belong to DSH: requests go to `https://api.meta.ai/v1`, and the
113
+ verification page is opened on `https://auth.meta.com`.
114
+ - The local `POST /muse-code/login` route only starts that flow and answers with the verification
115
+ URL and the one-time code; it transmits no credential and is reachable only on the Host's own
116
+ loopback listener.
117
+ - The stored credential is the `llm-pi-ai/meta` record in the DSH credential store. It never
118
+ appears in configuration or logs.
119
+ - To remove access, remove the bundle, remove the declared provider from **Settings → Models**
120
+ (or from the profile's `cordis.patch.yml`), and delete the `llm-pi-ai/meta` record while DSH
121
+ is stopped (the file is `$DSH_HOME/.credentials.yaml`), or run the sign-in again to replace
122
+ it. Removing the bundle alone stops the route but leaves the record and the declaration in
123
+ place.
98
124
 
99
125
  See [SECURITY.md](SECURITY.md) for vulnerability reporting and
100
- [AUTH_CONTRACT.md](AUTH_CONTRACT.md) for the pinned login contract.
126
+ [AUTH_CONTRACT.md](AUTH_CONTRACT.md) for the pinned login contract that DSH implements.
101
127
 
102
128
  ## Troubleshooting
103
129
 
104
- ### The provider does not appear in the model picker
130
+ ### Nothing named Muse Code appears under Settings → Models
131
+
132
+ The bundle was not loaded by the active profile, or the profile lacks the `llm-pi-ai` adapter.
133
+ Re-run the install command for the same profile, restart DSH, and check the startup output for
134
+ `did not activate` warnings. A DSH build without the pi-ai Meta provider cannot serve the
135
+ subscription; update DSH.
136
+
137
+ ### `/muse-login` is not offered in the composer
138
+
139
+ The command needs the DSH command and authorization services, which UI-less compositions do not
140
+ mount, or the bundle is inactive. Restart DSH after installing; in a headless profile the
141
+ command surface does not exist by design.
142
+
143
+ ### The sign-in reports that no Meta sign-in flow is registered
144
+
145
+ This DSH build does not ship the Meta provider. Update to DeepSeek Harness `0.2.1-rc.3` or newer,
146
+ restart, and retry.
147
+
148
+ ### The Sign in control reports that it cannot reach the Host
149
+
150
+ The Settings page's origin cannot reach the local Web route — some Desktop and non-loopback
151
+ deployments carry HTTP through a bridge. Use `/muse-login` in a chat instead; it starts the same
152
+ flow.
153
+
154
+ ### The browser did not open
105
155
 
106
- The bundle was not loaded by the active profile. Re-run the install command with the same
107
- profile, restart DSH, and check that `cordis.patch.yml` is part of the installed bundle.
156
+ The Host opens it best-effort through the platform's URI handler. Both the control and the
157
+ command print the verification URL and the code, so open the URL manually and enter the code.
108
158
 
109
- ### Muse Code subscription is inactive for this account
159
+ ### Meta denies the login, or the subscription is inactive
110
160
 
111
- The signed-in account has no active Muse Code subscription, or the subscription lapsed.
112
- Renew it, or sign in with the account that holds the subscription.
161
+ The account has no active Muse Code subscription, the code expired, or the approval was
162
+ declined. Start the sign-in again (Sign in control or `/muse-login`) and approve the new code
163
+ before it expires.
113
164
 
114
- ### The device login expires or is denied
165
+ ### Requests fail with 401 after a while
115
166
 
116
- Start the authorization flow again and approve the printed code before the expiry printed by
117
- the flow. The login completes in your own browser on Meta's authorization page.
167
+ DSH re-mints the inference key from the stored session. When Meta ends that session, run the
168
+ sign-in again (Sign in control or `/muse-login`) to sign in and replace the record.
118
169
 
119
- ### Requests fail with 401 after a subscription change
170
+ ### Upgrading from 0.1.x
120
171
 
121
- The stored key was revoked or rotated. Remove the `MUSE_CODE_SUB_TOKEN` credential, run the
122
- authorization flow again, and restart DSH if a running process cached the old value.
172
+ 0.1.x inserted a second `@deepseek-ai/dsh-llm-pi-ai` instance, which DSH refuses to activate
173
+ (each instance declares the whole provider catalog), so its route never appeared and its
174
+ device-code flow had no surface. Reinstall the bundle and restart DSH: the new version declares
175
+ the shipped `meta` route instead. The stale `MUSE_CODE_SUB_TOKEN` credential and its
176
+ `dsh-muse-code/subscription` record can be deleted from the DSH credential store; nothing reads
177
+ them any more.
123
178
 
124
179
  ## Development
125
180
 
@@ -133,16 +188,20 @@ npm run typecheck
133
188
  npm test
134
189
  ```
135
190
 
136
- `npm test` builds `lib/` and runs the `node:test` suite. `lib/` is committed because DSH
137
- bundle installs from Git may not run a build; regenerate it with `npm run build` after any
138
- source change. The offline tests cover the device flow, the credential wiring, and the plugin
139
- manifest; no Meta account is needed.
191
+ `npm test` builds `lib/` and runs the `node:test` suite. `lib/` is committed because DSH bundle
192
+ installs from Git may not run a build; regenerate it with `npm run build` after any source
193
+ change. The Client half is `client/client.js`, a hand-written browser classic script kept outside
194
+ the TypeScript output on purpose: DSH concatenates client artifacts into plain script bundles, so
195
+ an `export`/`import` statement there breaks the Web boot. The suite parses that file with classic
196
+ script grammar and registers its Models footer contribution. The offline tests cover the sign-in
197
+ command, the route declaration, the Client half, and the plugin manifest; no Meta account is
198
+ needed.
140
199
 
141
200
  ## Support
142
201
 
143
- Usage questions and workflows belong in GitHub Discussions; reproducible defects belong in
144
- GitHub Issues using the bug report form. See [SUPPORT.md](SUPPORT.md). The plugin cannot
145
- obtain, restore, or protect a Meta account, subscription, or credential.
202
+ Usage questions and workflows belong to GitHub Discussions; reproducible defects belong to
203
+ GitHub Issues using the bug report form. See [SUPPORT.md](SUPPORT.md). The plugin cannot obtain,
204
+ restore, or protect a Meta account, subscription, or credential.
146
205
 
147
206
  ## Contributing
148
207
 
@@ -0,0 +1,151 @@
1
+ // Web client half of the Muse Code integration.
2
+ //
3
+ // The Settings > Models page renders the plugins footer seat after the provider
4
+ // rows. This module adds the Sign in control there: it calls the Host's exact
5
+ // `/muse-code/login` route, which starts the shipped Meta device-code flow,
6
+ // opens the verification page in the default browser, and answers with the code
7
+ // and the instructions to show next to the button.
8
+ //
9
+ // This file is a browser CLASSIC SCRIPT, not an ES module: DSH concatenates
10
+ // client artifacts into plain script bundles, so an `export` statement here
11
+ // breaks the whole bundle ("Unexpected token 'export'"). It therefore lives
12
+ // outside the TypeScript source tree: tsc would emit `export {}` for an
13
+ // ES-module file. The loader registers a lazy factory whose id is the package
14
+ // name; React comes from the browser module table.
15
+
16
+ const PACKAGE_ID = "@thestreamcode/dsh-muse-code"
17
+ const HINT_ID = "dsh-muse-code-sign-in"
18
+ const LOGIN_ROUTE = "/muse-code/login"
19
+ const REQUEST_TIMEOUT_MS = 25_000
20
+
21
+ const loader = globalThis.__ModuleLoader__
22
+
23
+ /** Loopback origin of the Host that owns this page, when it is discoverable. */
24
+ function hostOrigin() {
25
+ const transport = globalThis.__DSH_TRANSPORT__
26
+ const base = transport && typeof transport.streamBaseUrl === "string" ? transport.streamBaseUrl : ""
27
+ if (/^https?:\/\//i.test(base)) return base.replace(/\/+$/, "")
28
+ const origin = globalThis.location && globalThis.location.origin
29
+ if (typeof origin === "string" && /^https?:\/\//i.test(origin)) return origin.replace(/\/+$/, "")
30
+ return ""
31
+ }
32
+
33
+ loader?.load({
34
+ id: PACKAGE_ID,
35
+ factory(require) {
36
+ const React = require("react")
37
+ const h = React.createElement
38
+
39
+ function MuseCodeSignIn() {
40
+ const [state, setState] = React.useState({ status: "idle", text: "" })
41
+ const origin = hostOrigin()
42
+
43
+ async function signIn() {
44
+ setState({ status: "running", text: "" })
45
+ const controller = typeof AbortController === "function" ? new AbortController() : undefined
46
+ const timer = controller === undefined ? undefined : setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS)
47
+ try {
48
+ const response = await fetch(`${origin}${LOGIN_ROUTE}`, {
49
+ method: "POST",
50
+ headers: { accept: "application/json" },
51
+ ...(controller === undefined ? {} : { signal: controller.signal }),
52
+ })
53
+ const payload = await response.json().catch(() => null)
54
+ if (payload && typeof payload.text === "string" && payload.text.length > 0) {
55
+ setState({ status: payload.ok === true ? "success" : "error", text: payload.text })
56
+ return
57
+ }
58
+ setState({
59
+ status: "error",
60
+ text: `Sign-in failed (HTTP ${response.status}). Run /muse-login in a chat instead.`,
61
+ })
62
+ } catch {
63
+ setState({
64
+ status: "error",
65
+ text: "Could not reach the Host. Run /muse-login in a chat instead.",
66
+ })
67
+ } finally {
68
+ if (timer !== undefined) clearTimeout(timer)
69
+ }
70
+ }
71
+
72
+ const style = {
73
+ display: "flex",
74
+ flexDirection: "column",
75
+ gap: "0.5rem",
76
+ margin: 0,
77
+ fontSize: "0.875rem",
78
+ lineHeight: 1.5,
79
+ color: "var(--dsw-alias-text-secondary)",
80
+ }
81
+ const children = [
82
+ h(
83
+ "p",
84
+ { key: "title", style: { margin: 0 } },
85
+ "Muse Code (Meta subscription): ",
86
+ origin.length > 0
87
+ ? "sign in here once; the provider then appears in the model picker."
88
+ : "run /muse-login in any chat to sign in.",
89
+ ),
90
+ ]
91
+ if (origin.length > 0) {
92
+ children.push(
93
+ h(
94
+ "div",
95
+ { key: "actions", style: { display: "flex", alignItems: "center", gap: "0.75rem" } },
96
+ h(
97
+ "button",
98
+ {
99
+ type: "button",
100
+ onClick: signIn,
101
+ disabled: state.status === "running",
102
+ style: {
103
+ padding: "0.375rem 0.875rem",
104
+ borderRadius: "0.5rem",
105
+ border: "1px solid var(--dsw-alias-border-secondary)",
106
+ background: "var(--dsw-alias-bg-interactive)",
107
+ color: "var(--dsw-alias-text-primary)",
108
+ cursor: state.status === "running" ? "progress" : "pointer",
109
+ fontSize: "0.875rem",
110
+ },
111
+ },
112
+ state.status === "running" ? "Starting sign-in…" : "Sign in",
113
+ ),
114
+ h(
115
+ "span",
116
+ { "aria-live": "polite" },
117
+ state.status === "idle" ? "" : state.text,
118
+ ),
119
+ h(
120
+ "a",
121
+ {
122
+ href: `${origin}${LOGIN_ROUTE}`,
123
+ target: "_blank",
124
+ rel: "noreferrer",
125
+ style: { fontSize: "0.8rem" },
126
+ },
127
+ "Open the sign-in page",
128
+ ),
129
+ ),
130
+ )
131
+ }
132
+ return h("div", { style }, children)
133
+ }
134
+
135
+ return {
136
+ inject: ["slots"],
137
+ apply(ctx) {
138
+ ctx.slots.inject("settings.models.footer", () =>
139
+ ctx.slots.register(
140
+ {
141
+ name: "settings.models.footer",
142
+ id: HINT_ID,
143
+ order: 10,
144
+ },
145
+ MuseCodeSignIn,
146
+ ),
147
+ )
148
+ },
149
+ }
150
+ },
151
+ })
package/cordis.patch.yml CHANGED
@@ -1,68 +1,15 @@
1
- # Muse Code subscription provider for DeepSeek Harness.
1
+ # Muse Code (Meta subscription) integration for DeepSeek Harness.
2
2
  #
3
- # A second pi-ai adapter instance serves the `muse-code` route, so the
4
- # existing `llm-pi-ai` provider configuration is not replaced. The auth
5
- # plugin registers the device-code flow and stores the minted key under the
6
- # MUSE_CODE_SUB_TOKEN credential reference used by apiKeyEnv.
3
+ # DeepSeek Harness already ships the provider and its sign-in: the pi-ai catalog
4
+ # serves the `meta` route (https://api.meta.ai/v1) and registers the
5
+ # `llm-pi-ai/meta` authorization flow. This bundle inserts only its integration
6
+ # plugin, which declares that route in the `llm-pi-ai` settings section and adds
7
+ # the `/muse-login` command.
8
+ #
9
+ # Do not insert a second `@deepseek-ai/dsh-llm-pi-ai` row here: every instance
10
+ # declares the whole installed provider catalog, so the extra instance cannot
11
+ # activate ("configurable provider ... is already declared").
7
12
  - insert:
8
- - id: muse-code-llm
9
- name: '@deepseek-ai/dsh-llm-pi-ai'
10
- config:
11
- providers:
12
- muse-code:
13
- displayName: Muse Code (subscription)
14
- apiKeyEnv: MUSE_CODE_SUB_TOKEN
15
- api: openai-responses
16
- baseURL: https://api.meta.ai/v1
17
- models:
18
- - id: muse-spark-1.3
19
- name: Muse Spark 1.3
20
- contextWindow: 1048576
21
- maxTokens: 131072
22
- input: [text, image]
23
- reasoningEfforts:
24
- minimal: minimal
25
- low: low
26
- medium: medium
27
- high: high
28
- xhigh: xhigh
29
- max: max
30
- - id: muse-spark-1.2
31
- name: Muse Spark 1.2
32
- contextWindow: 1048576
33
- maxTokens: 131072
34
- input: [text, image]
35
- reasoningEfforts:
36
- minimal: minimal
37
- low: low
38
- medium: medium
39
- high: high
40
- xhigh: xhigh
41
- max: max
42
- - id: muse-wonder-1.0
43
- name: Muse Wonder 1.0
44
- contextWindow: 1048576
45
- maxTokens: 131072
46
- input: [text, image]
47
- reasoningEfforts:
48
- minimal: minimal
49
- low: low
50
- medium: medium
51
- high: high
52
- xhigh: xhigh
53
- max: max
54
- - id: muse-wonder-full-1.0
55
- name: Muse Wonder Full 1.0
56
- contextWindow: 1048576
57
- maxTokens: 131072
58
- input: [text, image]
59
- reasoningEfforts:
60
- minimal: minimal
61
- low: low
62
- medium: medium
63
- high: high
64
- xhigh: xhigh
65
- max: max
66
- - id: muse-code-auth
13
+ - id: muse-code
67
14
  name: '@thestreamcode/dsh-muse-code'
68
15
  config: {}