dsh-claude-subscription 0.2.0 → 0.3.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/AGENTS.md +10 -5
- package/LICENSE +20 -20
- package/README.en.md +9 -6
- package/README.md +7 -6
- package/cordis.patch.yml +5 -5
- package/lib/client.js +40 -0
- package/lib/index.js +40 -8
- package/package.json +17 -23
- package/SECURITY.md +0 -31
- package/THIRD_PARTY_NOTICES.md +0 -12
package/AGENTS.md
CHANGED
|
@@ -6,7 +6,7 @@ Use this guide when a user asks an Agent to install, update, verify, or remove
|
|
|
6
6
|
## Safety
|
|
7
7
|
|
|
8
8
|
- Confirm the target DSH profile; use `web` only when it is the user's target.
|
|
9
|
-
- Use the pinned `v0.
|
|
9
|
+
- Use the pinned `v0.3.0` release assets for a first install, never a moving branch.
|
|
10
10
|
- Never print OAuth credentials, account IDs, authorization callbacks, or the
|
|
11
11
|
credential store.
|
|
12
12
|
- Do not start, stop, or restart DSH without explicit permission.
|
|
@@ -16,6 +16,10 @@ Use this guide when a user asks an Agent to install, update, verify, or remove
|
|
|
16
16
|
|
|
17
17
|
## Detect the installation
|
|
18
18
|
|
|
19
|
+
This plugin release supports only DeepSeek Harness `0.1.2-alpha.5`. Run
|
|
20
|
+
`dsh --version` first and stop on any other version; do not upgrade DSH or
|
|
21
|
+
ignore peer dependency warnings without explicit permission.
|
|
22
|
+
|
|
19
23
|
Check whether the plugin is already installed in the target DSH profile. When
|
|
20
24
|
it is already listed, use update or uninstall instead of installing again.
|
|
21
25
|
|
|
@@ -25,7 +29,7 @@ When `dsh`, Node.js, and pnpm are already available, install the pinned npm
|
|
|
25
29
|
package directly:
|
|
26
30
|
|
|
27
31
|
```sh
|
|
28
|
-
dsh plugin --profile web add dsh-claude-subscription@0.
|
|
32
|
+
dsh plugin --profile web add dsh-claude-subscription@0.3.0
|
|
29
33
|
```
|
|
30
34
|
|
|
31
35
|
Update with `dsh plugin --profile web update dsh-claude-subscription`.
|
|
@@ -42,7 +46,7 @@ profile (`desktop`, `web`):
|
|
|
42
46
|
|
|
43
47
|
1. `pnpm pack` the plugin into a tarball (or download the pinned release tarball).
|
|
44
48
|
2. Copy the tarball into the profile directory.
|
|
45
|
-
3. Add `"dsh-claude-subscription": "file:./dsh-claude-subscription-0.
|
|
49
|
+
3. Add `"dsh-claude-subscription": "file:./dsh-claude-subscription-0.3.0.tgz"` to
|
|
46
50
|
the profile's `package.json` `dependencies` and add `dsh-claude-subscription`
|
|
47
51
|
to its `dsh.profile.bundles` array.
|
|
48
52
|
4. Run `pnpm install` in the profile directory.
|
|
@@ -71,8 +75,9 @@ Success requires:
|
|
|
71
75
|
|
|
72
76
|
Do not treat `dsh plugin --profile web peers check` as the completion test.
|
|
73
77
|
If the user authorizes a live check, restart DSH manually, open
|
|
74
|
-
**Settings ->
|
|
75
|
-
|
|
78
|
+
**Settings -> Models**, verify the Anthropic card reports the saved login,
|
|
79
|
+
and check that **Settings -> Claude subscription** loads. Confirm that the
|
|
80
|
+
`anthropic` provider and its Claude models are
|
|
76
81
|
selectable in the model picker. Only when the user explicitly requests a
|
|
77
82
|
quota-consuming live check, ask the Agent to send one short message with a
|
|
78
83
|
Claude model and confirm the reply.
|
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 dsh-claude-subscription contributors
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dsh-claude-subscription contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
package/README.en.md
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# DSH Claude Subscription
|
|
2
2
|
|
|
3
|
-
[](https://github.com/x5427876/dsh-claude-subscription/actions/workflows/ci.yml)
|
|
4
3
|
[](https://www.npmjs.com/package/dsh-claude-subscription)
|
|
5
4
|
[](LICENSE)
|
|
6
5
|
|
|
@@ -16,7 +15,7 @@ DSH's host credential service: no token extraction, no resale, no extra billing.
|
|
|
16
15
|
## What it does
|
|
17
16
|
|
|
18
17
|
- Uses your Claude Pro / Max subscription directly inside DSH, with no Anthropic API key required;
|
|
19
|
-
- Signs in to claude.ai from Settings
|
|
18
|
+
- Signs in to claude.ai from the Anthropic card under **Settings -> Models** or from **Settings -> Claude subscription**, using the official OAuth flow and keeping credentials on the host;
|
|
20
19
|
- Refreshes the access token automatically with the refresh token;
|
|
21
20
|
- Shows sign-in status and token expiry;
|
|
22
21
|
- Shows the **subscription quota**: remaining percentage and reset time for the 5-hour, 7-day, Opus, and Sonnet windows;
|
|
@@ -25,10 +24,13 @@ DSH's host credential service: no token extraction, no resale, no extra billing.
|
|
|
25
24
|
|
|
26
25
|
## Prepare DSH
|
|
27
26
|
|
|
28
|
-
This plugin supports DeepSeek Harness `0.1.
|
|
29
|
-
requires a Claude Pro, Max, Team, or Enterprise subscription.
|
|
27
|
+
This plugin currently supports only DeepSeek Harness `0.1.2-alpha.5` and
|
|
28
|
+
requires a Claude Pro, Max, Team, or Enterprise subscription. DSH remains a
|
|
29
|
+
developer preview; an npm `latest` or `next` release other than
|
|
30
|
+
`0.1.2-alpha.5` is outside this plugin version's supported range.
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
Run `dsh --version` before installation. Do not merely ignore peer dependency
|
|
33
|
+
warnings.
|
|
32
34
|
|
|
33
35
|
## Install
|
|
34
36
|
|
|
@@ -59,7 +61,8 @@ For DSH Desktop, put the `pnpm pack` tarball into
|
|
|
59
61
|
`dsh.profile.bundles` entry in that profile's `package.json`, run
|
|
60
62
|
`pnpm install` there, then restart DSH. After install:
|
|
61
63
|
|
|
62
|
-
1. Open **Settings ->
|
|
64
|
+
1. Open **Settings -> Models** and find Anthropic. Full quota details remain
|
|
65
|
+
under **Settings -> Claude subscription**.
|
|
63
66
|
2. If not signed in, click **Browser sign-in** and authorize on claude.ai.
|
|
64
67
|
3. Pick a Claude model under the `anthropic` provider in the model picker.
|
|
65
68
|
4. Turn on **Composer quota** on the same page when you want it.
|
package/README.md
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# DSH Claude Subscription
|
|
2
2
|
|
|
3
|
-
[](https://github.com/x5427876/dsh-claude-subscription/actions/workflows/ci.yml)
|
|
4
3
|
[](https://www.npmjs.com/package/dsh-claude-subscription)
|
|
5
4
|
[](LICENSE)
|
|
6
5
|
|
|
@@ -16,7 +15,7 @@
|
|
|
16
15
|
## 能做什麼
|
|
17
16
|
|
|
18
17
|
- 在 DSH 中直接使用 Claude Pro / Max 訂閱,不需要 Anthropic API Key;
|
|
19
|
-
-
|
|
18
|
+
- 在**設定 → 模型**的 Anthropic 卡片或**設定 → Claude 訂閱**中,以官方 OAuth 流程登入 claude.ai,憑證保留在 DSH 本機;
|
|
20
19
|
- access token 過期時自動以 refresh token 續期,不需手動處理;
|
|
21
20
|
- 顯示登入狀態;
|
|
22
21
|
- 顯示**訂閱額度**:5 小時、7 天、Opus 與 Sonnet 的剩餘百分比與重置時間;
|
|
@@ -25,10 +24,11 @@
|
|
|
25
24
|
|
|
26
25
|
## 準備 DSH
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
本插件目前僅適配 DeepSeek Harness `0.1.2-alpha.5`,需要一個 Claude Pro、
|
|
28
|
+
Max、Team 或 Enterprise 訂閱帳號。DSH 仍在 developer preview;npm 的
|
|
29
|
+
`latest` / `next` 通道若不是 `0.1.2-alpha.5`,不在本版本的支援範圍。
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
安裝前請先以 `dsh --version` 確認版本;不要只忽略 peer dependency 警告。
|
|
32
32
|
|
|
33
33
|
## 安裝
|
|
34
34
|
|
|
@@ -58,7 +58,8 @@ DSH Desktop(桌面版)時,把 `pnpm pack` 產出的 tarball 放進
|
|
|
58
58
|
`file:` 依賴與 `dsh.profile.bundles` 條目,然後在該目錄執行
|
|
59
59
|
`pnpm install`,最後重啟 DSH。安裝後:
|
|
60
60
|
|
|
61
|
-
1. 開啟 DSH 的**設定 →
|
|
61
|
+
1. 開啟 DSH 的**設定 → 模型**,找到 Anthropic;完整額度資訊仍位於
|
|
62
|
+
**設定 → Claude 訂閱**。
|
|
62
63
|
2. 若尚未登入,按**瀏覽器登入**,在 claude.ai 完成授權。
|
|
63
64
|
3. 在模型選單選擇 `anthropic` provider 下的 Claude 模型。
|
|
64
65
|
4. 需要時,在同一頁打開**輸入框額度**開關。
|
package/cordis.patch.yml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# One plugin owns the Claude subscription provider route, host-only account
|
|
2
|
-
# RPC, and settings surface. It leaves DSH's model and persistent web
|
|
3
|
-
# configuration untouched.
|
|
4
|
-
- insert:
|
|
5
|
-
- id: claude-subscription
|
|
1
|
+
# One plugin owns the Claude subscription provider route, host-only account
|
|
2
|
+
# RPC, and settings surface. It leaves DSH's model and persistent web
|
|
3
|
+
# configuration untouched.
|
|
4
|
+
- insert:
|
|
5
|
+
- id: claude-subscription
|
|
6
6
|
name: 'dsh-claude-subscription'
|
package/lib/client.js
CHANGED
|
@@ -665,6 +665,37 @@ window.__ModuleLoader__.load({
|
|
|
665
665
|
]
|
|
666
666
|
});
|
|
667
667
|
}
|
|
668
|
+
function ClaudeProviderAuth({ provider, rpc, t }) {
|
|
669
|
+
const [account, setAccount] = (0, react.useState)();
|
|
670
|
+
const [error, setError] = (0, react.useState)();
|
|
671
|
+
const isClaude = provider?.provider === PROVIDER;
|
|
672
|
+
(0, react.useEffect)(() => {
|
|
673
|
+
if (!isClaude) return;
|
|
674
|
+
let live = true;
|
|
675
|
+
rpc.call(CHANNEL, "status", {}).then(unwrap).then((next) => {
|
|
676
|
+
if (live) setAccount(next);
|
|
677
|
+
}).catch(() => {
|
|
678
|
+
if (live) setError(t("loadFailed"));
|
|
679
|
+
});
|
|
680
|
+
return () => {
|
|
681
|
+
live = false;
|
|
682
|
+
};
|
|
683
|
+
}, [isClaude, rpc, t]);
|
|
684
|
+
if (!isClaude) return null;
|
|
685
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, {
|
|
686
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AccountCard, {
|
|
687
|
+
rpc,
|
|
688
|
+
t,
|
|
689
|
+
account,
|
|
690
|
+
setAccount,
|
|
691
|
+
onSignedOut: () => void 0
|
|
692
|
+
}), error === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
693
|
+
className: "claudeSubscriptionError",
|
|
694
|
+
role: "alert",
|
|
695
|
+
children: error
|
|
696
|
+
})]
|
|
697
|
+
});
|
|
698
|
+
}
|
|
668
699
|
function ClaudeSection({ preference, rpc, t }) {
|
|
669
700
|
const [account, setAccount] = (0, react.useState)();
|
|
670
701
|
const [error, setError] = (0, react.useState)();
|
|
@@ -746,6 +777,15 @@ window.__ModuleLoader__.load({
|
|
|
746
777
|
t
|
|
747
778
|
})
|
|
748
779
|
}, ClaudeSection));
|
|
780
|
+
ctx.slots.inject("settings.models.provider-card", () => ctx.slots.register({
|
|
781
|
+
name: "settings.models.provider-card",
|
|
782
|
+
key: "llm-pi-ai",
|
|
783
|
+
locale: NS,
|
|
784
|
+
inject: () => ({
|
|
785
|
+
rpc: connection.rpc,
|
|
786
|
+
t
|
|
787
|
+
})
|
|
788
|
+
}, ClaudeProviderAuth));
|
|
749
789
|
ctx.slots.inject("conversation.input.right", () => ctx.slots.register({
|
|
750
790
|
name: "conversation.input.right",
|
|
751
791
|
id: "claude-subscription-quota",
|
package/lib/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { credentialRef } from "@deepseek-ai/dsh-credentials";
|
|
2
|
-
import { LlmError } from "@deepseek-ai/dsh-llm";
|
|
2
|
+
import { LlmError, resolveRetryPolicy } from "@deepseek-ai/dsh-llm";
|
|
3
3
|
import { PiAiAdapter } from "@deepseek-ai/dsh-llm-pi-ai";
|
|
4
|
-
import { settingsNamespace } from "@deepseek-ai/dsh-settings";
|
|
5
4
|
import z from "@deepseek-ai/schemastery";
|
|
6
5
|
import { spawn } from "node:child_process";
|
|
6
|
+
import { access } from "node:fs/promises";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
import { resolve as resolvePath } from "node:path";
|
|
7
9
|
import { anthropicProvider as createAnthropicProvider } from "@earendil-works/pi-ai/providers/anthropic";
|
|
8
10
|
import { createModels } from "@earendil-works/pi-ai";
|
|
9
11
|
//#region src/credential-store.js
|
|
@@ -448,7 +450,21 @@ function anthropicSubscriptionProvider() {
|
|
|
448
450
|
})
|
|
449
451
|
});
|
|
450
452
|
}
|
|
451
|
-
const PI_AI_RUNTIME_VERSION = "0.
|
|
453
|
+
const PI_AI_RUNTIME_VERSION = "0.84.2";
|
|
454
|
+
const PI_AI_AUTH_CONTEXT = Object.freeze({
|
|
455
|
+
async env(name) {
|
|
456
|
+
return process.env[name];
|
|
457
|
+
},
|
|
458
|
+
async fileExists(path) {
|
|
459
|
+
const expanded = path === "~" || path.startsWith("~/") ? resolvePath(homedir(), path.slice(1).replace(/^\//, "")) : path;
|
|
460
|
+
try {
|
|
461
|
+
await access(expanded);
|
|
462
|
+
return true;
|
|
463
|
+
} catch {
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
});
|
|
452
468
|
//#endregion
|
|
453
469
|
//#region src/settings-contract.js
|
|
454
470
|
const SETTINGS_NAMESPACE = "claude-subscription";
|
|
@@ -533,7 +549,7 @@ function createClaudeUsageReader(options) {
|
|
|
533
549
|
const now = options.now ?? Date.now;
|
|
534
550
|
const ttlMs = options.ttlMs ?? DEFAULT_TTL_MS;
|
|
535
551
|
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
536
|
-
const userAgent = options.userAgent ?? "dsh-claude-subscription/0.
|
|
552
|
+
const userAgent = options.userAgent ?? "dsh-claude-subscription/0.3.0";
|
|
537
553
|
let cached;
|
|
538
554
|
let inFlight;
|
|
539
555
|
const load = async (signal) => {
|
|
@@ -673,17 +689,28 @@ function createSubscriptionRpcHandler({ authHandler, usageReader, preferences })
|
|
|
673
689
|
};
|
|
674
690
|
}
|
|
675
691
|
function apply(ctx) {
|
|
676
|
-
const
|
|
692
|
+
const defaultPreferences = Object.freeze({ [QUICK_QUOTA_FIELD]: false });
|
|
693
|
+
let preferenceSource = () => defaultPreferences;
|
|
694
|
+
ctx.settings.installSection(ctx, SETTINGS_NAMESPACE, z.object({ [QUICK_QUOTA_FIELD]: z.boolean().default(false) }), defaultPreferences, {
|
|
695
|
+
setSource: (current) => {
|
|
696
|
+
preferenceSource = current;
|
|
697
|
+
},
|
|
698
|
+
onChange: () => void 0
|
|
699
|
+
});
|
|
677
700
|
const preferences = {
|
|
678
701
|
status: () => ({
|
|
679
|
-
[QUICK_QUOTA_FIELD]:
|
|
702
|
+
[QUICK_QUOTA_FIELD]: preferenceSource()[QUICK_QUOTA_FIELD],
|
|
680
703
|
writable: ctx.settings.writable
|
|
681
704
|
}),
|
|
682
|
-
update: (patch) =>
|
|
705
|
+
update: async (patch) => {
|
|
706
|
+
await ctx.settings.update(SETTINGS_NAMESPACE, patch);
|
|
707
|
+
return preferenceSource();
|
|
708
|
+
}
|
|
683
709
|
};
|
|
684
710
|
const store = new DshOAuthCredentialStore(ctx.credentials, CREDENTIAL_REF);
|
|
685
711
|
const provider = anthropicSubscriptionProvider();
|
|
686
|
-
const
|
|
712
|
+
const auth = Object.freeze({ credentials: store, authContext: PI_AI_AUTH_CONTEXT });
|
|
713
|
+
const authModels = createModels(auth);
|
|
687
714
|
authModels.setProvider(provider);
|
|
688
715
|
const profile = Object.freeze({
|
|
689
716
|
provider: PROVIDER,
|
|
@@ -691,6 +718,10 @@ function apply(ctx) {
|
|
|
691
718
|
piProvider: provider,
|
|
692
719
|
configuredMaxTokens: /* @__PURE__ */ new Map(),
|
|
693
720
|
streamIdleTimeoutMs: 600 * 1e3,
|
|
721
|
+
maxRequestImageBytes: 20 * 1024 * 1024,
|
|
722
|
+
requestImagePixelBudget: 2048 * 2048,
|
|
723
|
+
requestImageMaxBytes: 1024 * 1024,
|
|
724
|
+
retryPolicy: resolveRetryPolicy(void 0, "claude-subscription retryPolicy"),
|
|
694
725
|
cacheRetention: "short",
|
|
695
726
|
transport: "sse"
|
|
696
727
|
});
|
|
@@ -698,6 +729,7 @@ function apply(ctx) {
|
|
|
698
729
|
const resolveAuth = () => authModels.getAuth(PROVIDER);
|
|
699
730
|
const adapter = new PiAiAdapter({
|
|
700
731
|
profiles: () => profiles,
|
|
732
|
+
auth,
|
|
701
733
|
resolveApiKey: async () => {
|
|
702
734
|
let resolved;
|
|
703
735
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-claude-subscription",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"packageManager": "pnpm@11.19.0",
|
|
5
5
|
"description": "Claude Pro/Max subscription for DeepSeek Harness with official Anthropic OAuth login and automatic token refresh",
|
|
6
6
|
"type": "module",
|
|
@@ -18,8 +18,6 @@
|
|
|
18
18
|
"README.en.md",
|
|
19
19
|
"AGENTS.md",
|
|
20
20
|
"LICENSE",
|
|
21
|
-
"SECURITY.md",
|
|
22
|
-
"THIRD_PARTY_NOTICES.md",
|
|
23
21
|
"docs/assets/*.png"
|
|
24
22
|
],
|
|
25
23
|
"dsh": {
|
|
@@ -31,17 +29,17 @@
|
|
|
31
29
|
"@deepseek-ai/dsh-api-remotes",
|
|
32
30
|
"@deepseek-ai/dsh-client-connection",
|
|
33
31
|
"@deepseek-ai/dsh-client-locale",
|
|
34
|
-
"@deepseek-ai/dsh-client-runtime",
|
|
35
32
|
"@deepseek-ai/dsh-client-ui-conversation",
|
|
36
33
|
"@deepseek-ai/dsh-client-ui-model-selection",
|
|
37
34
|
"@deepseek-ai/dsh-client-ui-settings",
|
|
35
|
+
"@deepseek-ai/dsh-client-ui-settings-models",
|
|
38
36
|
"@deepseek-ai/dsh-client-ui-tool"
|
|
39
37
|
],
|
|
40
38
|
"platform": "web"
|
|
41
39
|
}
|
|
42
40
|
},
|
|
43
41
|
"scripts": {
|
|
44
|
-
"build": "
|
|
42
|
+
"build": "node --check lib/index.js && node --check lib/client.js",
|
|
45
43
|
"test": "node --test tests/*.test.mjs",
|
|
46
44
|
"check": "pnpm run test && pnpm run build && pnpm pack --pack-destination .artifacts"
|
|
47
45
|
},
|
|
@@ -65,25 +63,21 @@
|
|
|
65
63
|
"node": "^22.19.0 || >=24.0.0"
|
|
66
64
|
},
|
|
67
65
|
"peerDependencies": {
|
|
68
|
-
"@deepseek-ai/
|
|
69
|
-
"@deepseek-ai/dsh-
|
|
70
|
-
"@deepseek-ai/dsh-
|
|
71
|
-
"@deepseek-ai/dsh-
|
|
72
|
-
"@deepseek-ai/
|
|
73
|
-
"@
|
|
74
|
-
"@deepseek-ai/dsh-client-ui-model-selection": "0.1.0-rc.6 || 0.1.0-rc.7",
|
|
75
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.1.0-rc.6 || 0.1.0-rc.7",
|
|
76
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.6 || 0.1.0-rc.7",
|
|
77
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.6 || 0.1.0-rc.7",
|
|
78
|
-
"@deepseek-ai/dsh-credentials": "0.1.0-rc.6 || 0.1.0-rc.7",
|
|
79
|
-
"@deepseek-ai/dsh-llm": "0.1.0-rc.6 || 0.1.0-rc.7",
|
|
80
|
-
"@deepseek-ai/dsh-llm-pi-ai": "0.1.0-rc.6 || 0.1.0-rc.7",
|
|
81
|
-
"@deepseek-ai/dsh-settings": "0.1.0-rc.6 || 0.1.0-rc.7",
|
|
82
|
-
"@deepseek-ai/schemastery": "3.18.1",
|
|
83
|
-
"@earendil-works/pi-ai": "0.82.1",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.1.2-alpha.5",
|
|
67
|
+
"@deepseek-ai/dsh-credentials": "0.1.2-alpha.5",
|
|
68
|
+
"@deepseek-ai/dsh-llm": "0.1.2-alpha.5",
|
|
69
|
+
"@deepseek-ai/dsh-llm-pi-ai": "0.1.2-alpha.5",
|
|
70
|
+
"@deepseek-ai/schemastery": "^3.18.2",
|
|
71
|
+
"@earendil-works/pi-ai": "^0.84.2",
|
|
84
72
|
"react": "^18.2.0"
|
|
85
73
|
},
|
|
86
|
-
"
|
|
87
|
-
"
|
|
74
|
+
"peerDependenciesMeta": {
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-primitives": { "optional": true },
|
|
76
|
+
"@deepseek-ai/dsh-credentials": { "optional": true },
|
|
77
|
+
"@deepseek-ai/dsh-llm": { "optional": true },
|
|
78
|
+
"@deepseek-ai/dsh-llm-pi-ai": { "optional": true },
|
|
79
|
+
"@deepseek-ai/schemastery": { "optional": true },
|
|
80
|
+
"@earendil-works/pi-ai": { "optional": true },
|
|
81
|
+
"react": { "optional": true }
|
|
88
82
|
}
|
|
89
83
|
}
|
package/SECURITY.md
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# Security policy
|
|
2
|
-
|
|
3
|
-
## Supported version
|
|
4
|
-
|
|
5
|
-
Security fixes are applied to the latest tagged release. DeepSeek Harness is a developer preview, so compatibility fixes may require upgrading both DSH and this bundle.
|
|
6
|
-
|
|
7
|
-
## Reporting a vulnerability
|
|
8
|
-
|
|
9
|
-
Use a private GitHub security advisory at:
|
|
10
|
-
|
|
11
|
-
https://github.com/x5427876/dsh-claude-subscription/security/advisories/new
|
|
12
|
-
|
|
13
|
-
Do not open a public issue containing access tokens, refresh tokens, account identifiers, callback URLs with authorization codes, raw DSH credential data, or private prompts. Include the affected version, operating system, DSH version, a minimal reproduction, and impact. Replace all credentials with unmistakably fake placeholders.
|
|
14
|
-
|
|
15
|
-
## Trust boundary
|
|
16
|
-
|
|
17
|
-
- The plugin runs with the privileges of the DSH host process.
|
|
18
|
-
- OAuth credentials remain in DSH's host credential service.
|
|
19
|
-
- The browser settings client can call only a loopback-authorized, redacted RPC surface.
|
|
20
|
-
- Login links are restricted to the HTTPS `claude.ai` origin before they are returned or opened.
|
|
21
|
-
- Token refresh runs host-side through pi-ai's Anthropic OAuth flow; tokens never enter the browser client.
|
|
22
|
-
- The bundle defines no API-key or cross-provider fallback.
|
|
23
|
-
|
|
24
|
-
Installing any DSH plugin grants its host code access to the services named in its composition. Review the tag or commit you install. Prefer a tagged version or a full commit hash over a moving branch.
|
|
25
|
-
|
|
26
|
-
## Out of scope
|
|
27
|
-
|
|
28
|
-
- availability or policy changes in Claude, claude.ai, Anthropic OAuth, or DeepSeek Harness
|
|
29
|
-
- compromised host machines or compromised DSH installations
|
|
30
|
-
- secrets deliberately pasted into prompts, logs, issues, or screenshots
|
|
31
|
-
- provider billing or quota disputes
|
package/THIRD_PARTY_NOTICES.md
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Third-party notices
|
|
2
|
-
|
|
3
|
-
This project depends on software distributed under its own terms. The dependency lockfile records the exact resolved graph used for the release.
|
|
4
|
-
|
|
5
|
-
| Project | Role | License | Source |
|
|
6
|
-
| --- | --- | --- | --- |
|
|
7
|
-
| DeepSeek Harness packages | Plugin host, client slots, credential and LLM interfaces | MIT | https://github.com/deepseek-ai/deepseek-harness |
|
|
8
|
-
| `@earendil-works/pi-ai` 0.82.1 | Anthropic OAuth (Claude Pro/Max), model catalog, and Messages transport | MIT | https://github.com/earendil-works/pi |
|
|
9
|
-
| React | DSH settings component runtime | MIT | https://github.com/facebook/react |
|
|
10
|
-
| tsdown | Development-time bundler | MIT | https://github.com/rolldown/tsdown |
|
|
11
|
-
|
|
12
|
-
No third-party project endorses this community plugin. See each installed package for its complete license text and transitive dependency notices.
|