@thestreamcode/dsh-muse-code 0.1.0 → 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 +12 -5
- package/README.md +124 -65
- package/client/client.js +151 -0
- package/cordis.patch.yml +11 -64
- package/lib/index.d.ts +168 -23
- package/lib/index.js +381 -34
- package/lib/open-browser.d.ts +10 -0
- package/lib/open-browser.js +38 -0
- package/locale/en.json +6 -0
- package/package.json +14 -3
- package/lib/auth.d.ts +0 -22
- package/lib/auth.js +0 -157
package/AUTH_CONTRACT.md
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# Muse auth contract (v1)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
31
|
-
`MUSE_CODE_SUB_TOKEN
|
|
32
|
-
-
|
|
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
|
|
3
|
+
Muse Code (Meta subscription) integration for DeepSeek Harness
|
|
4
4
|
|
|
5
5
|
[](https://github.com/TheStreamCode/dsh-muse-code/actions/workflows/ci.yml)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](https://github.com/TheStreamCode/dsh-muse-code/releases/latest)
|
|
8
8
|
|
|
9
|
-
DeepSeek Harness (DSH)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
40
|
-
|
|
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
|
|
45
|
-
2. Open **Settings
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
|
|
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.
|
|
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
|
-
-
|
|
94
|
+
- No separate service, CLI, or key file.
|
|
75
95
|
|
|
76
96
|
## Configuration
|
|
77
97
|
|
|
78
98
|
| Setting | Purpose | Default |
|
|
79
99
|
| --- | --- | --- |
|
|
80
|
-
| `
|
|
81
|
-
|
|
|
82
|
-
|
|
|
83
|
-
|
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
###
|
|
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
|
|
107
|
-
|
|
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
|
-
###
|
|
159
|
+
### Meta denies the login, or the subscription is inactive
|
|
110
160
|
|
|
111
|
-
The
|
|
112
|
-
|
|
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
|
-
###
|
|
165
|
+
### Requests fail with 401 after a while
|
|
115
166
|
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
###
|
|
170
|
+
### Upgrading from 0.1.x
|
|
120
171
|
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
|
144
|
-
GitHub Issues using the bug report form. See [SUPPORT.md](SUPPORT.md). The plugin cannot
|
|
145
|
-
|
|
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
|
|
package/client/client.js
ADDED
|
@@ -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
|
|
1
|
+
# Muse Code (Meta subscription) integration for DeepSeek Harness.
|
|
2
2
|
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
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
|
|
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: {}
|