dsh-connect-workbuddy 1.0.1 → 1.1.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/CHANGELOG.md +12 -0
- package/README.en.md +9 -2
- package/README.md +9 -2
- package/lib/bin.js +1 -1
- package/lib/client.js +21 -11
- package/lib/{host-heartbeat-Be1hox2i.js → host-heartbeat-C9s6A0pP.js} +1 -1
- package/lib/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.1.0 (2026-08-31)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- **切换账号出错提示**:切换账号后出现错误(如所选账号凭据失效返回 401)时,插件卡片账号信息区(令牌行下方)显示一行小字「出现错误,重新登录 WorkBuddy APP 即可」,提示用户通过重新登录恢复。
|
|
8
|
+
|
|
9
|
+
### Docs
|
|
10
|
+
|
|
11
|
+
- 市场收录对齐当前约定:正式提交 PR [#3812](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/3812) 仅保留 `data/plugins/dingminhua__dsh-connect-workbuddy.yml` 与生成的 README;**移除**对注册表 `data/screenshots.json` 的改动(该文件是旧约定回退,新约定为插件自己仓库根目录声明 `screenshots.json`)。
|
|
12
|
+
- README 与 README.en.md 市场章节补充「收录目录规范」(contributing.md 要点:单文件命名、url 一致、category、描述引号规则、`dsh.bundle` manifest、topic、CI 门槛、README 由脚本生成、每 PR ≤ 3 条)。
|
|
13
|
+
- 新增 `awesome-dsh-plugin-submission/README.md`:市场收录目录的操作说明与当前状态;删除已废弃的 `screenshots-entry.json` 草稿(对应旧约定往注册表加键的做法)。
|
|
14
|
+
|
|
3
15
|
## 1.0.1 (2026-08-30)
|
|
4
16
|
|
|
5
17
|
### Fixes
|
package/README.en.md
CHANGED
|
@@ -92,12 +92,19 @@ dsh plugin --profile desktop add /Users/dmh2002/DshProject/dsh-connect-workbuddy
|
|
|
92
92
|
|
|
93
93
|
## Marketplace listing
|
|
94
94
|
|
|
95
|
-
The plugin ships an installable `dsh.bundle` manifest and is published to npm. Community marketplaces generally sync entries from the [Awesome DSH Plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) registry; the submission draft lives at [`awesome-dsh-plugin-submission/dingminhua__dsh-connect-workbuddy.yml`](awesome-dsh-plugin-submission/dingminhua__dsh-connect-workbuddy.yml).
|
|
95
|
+
The plugin ships an installable `dsh.bundle` manifest and is published to npm. Community marketplaces generally sync entries from the [Awesome DSH Plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) registry; the submission draft lives at [`awesome-dsh-plugin-submission/dingminhua__dsh-connect-workbuddy.yml`](awesome-dsh-plugin-submission/dingminhua__dsh-connect-workbuddy.yml), and the formal submission is PR [#3812](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/3812) (`data/plugins/dingminhua__dsh-connect-workbuddy.yml`, CI and Submission gate green, awaiting maintainer merge).
|
|
96
|
+
|
|
97
|
+
**Listing directory rules** (per [contributing.md](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/blob/main/contributing.md)):
|
|
98
|
+
|
|
99
|
+
- One YAML per plugin: `data/plugins/<owner>__<repo>.yml` with `url` (exactly matching the repo), `name` (`owner/repo`), `category` (one of the valid values; this project uses `model`), and `description.en` (required, ending with a period) / `description.zh` (optional); a description containing `: ` must be quoted.
|
|
100
|
+
- The repo must declare a `dsh.bundle` manifest (here `dsh.bundle.patch: ./cordis.patch.yml`) and carry the `dsh-plugin` topic; the ≥ 10 commits and ≥ 1 day age are checked automatically by CI.
|
|
101
|
+
- Both READMEs (`README.md` / `README.zh.md`) are generated — never edit by hand; after changing the YAML, regenerate with `node scripts/generate-readme.mjs`.
|
|
102
|
+
- At most 3 entries per PR; change only your own entry, never touch other plugins.
|
|
96
103
|
|
|
97
104
|
Marketplace screenshots and GitHub README badges are two separate mechanisms:
|
|
98
105
|
|
|
99
106
|
- **GitHub badges** are produced by the Shields/dshfind image links at the top of this README.
|
|
100
|
-
- **Marketplace screenshots** are
|
|
107
|
+
- **Marketplace screenshots** follow the current convention and are declared in the plugin's own root [`screenshots.json`](screenshots.json) (this project declares its usage-card screenshot there). The registry's `data/screenshots.json` is a legacy fallback and **no longer accepts new keys** (this project removed its edit before submitting).
|
|
101
108
|
- **Marketplace icons/placeholders** follow each marketplace's own display rules; they are not a generic npm `package.json` field nor a README badge.
|
|
102
109
|
|
|
103
110
|
## Known limitations
|
package/README.md
CHANGED
|
@@ -100,12 +100,19 @@ dsh plugin --profile desktop add /Users/dmh2002/DshProject/dsh-connect-workbuddy
|
|
|
100
100
|
|
|
101
101
|
## 市场收录与展示
|
|
102
102
|
|
|
103
|
-
插件已包含可安装的 `dsh.bundle` manifest,并发布到 npm。社区市场通常从 [Awesome DSH Plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) 注册表同步条目;仓库内的提交草稿位于 [`awesome-dsh-plugin-submission/dingminhua__dsh-connect-workbuddy.yml`](awesome-dsh-plugin-submission/dingminhua__dsh-connect-workbuddy.yml)
|
|
103
|
+
插件已包含可安装的 `dsh.bundle` manifest,并发布到 npm。社区市场通常从 [Awesome DSH Plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) 注册表同步条目;仓库内的提交草稿位于 [`awesome-dsh-plugin-submission/dingminhua__dsh-connect-workbuddy.yml`](awesome-dsh-plugin-submission/dingminhua__dsh-connect-workbuddy.yml),正式提交为 PR [#3812](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/3812)(`data/plugins/dingminhua__dsh-connect-workbuddy.yml`,已通过 CI 与 Submission gate,等待维护者合并)。
|
|
104
|
+
|
|
105
|
+
**收录目录规范**(依据 [contributing.md](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/blob/main/contributing.md)):
|
|
106
|
+
|
|
107
|
+
- 每个插件一个 YAML:`data/plugins/<owner>__<repo>.yml`,字段为 `url`(与仓库地址完全一致)、`name`(`owner/repo`)、`category`(有效值之一,本项目为 `model`)、`description.en`(必填,以句号结尾)/ `description.zh`(可选);描述中含 `: ` 必须加引号。
|
|
108
|
+
- 仓库必须声明 `dsh.bundle` manifest(本项目 `dsh.bundle.patch: ./cordis.patch.yml`),且被 `dsh-plugin` topic 标记;提交数 ≥ 10、仓库满 1 天由 CI 自动检查。
|
|
109
|
+
- 两个 README(`README.md` / `README.zh.md`)由脚本生成,不得手工编辑;修改 YAML 后执行 `node scripts/generate-readme.mjs` 重新生成。
|
|
110
|
+
- 一个 PR 最多收录 3 条;只改自己的条目,不动其他插件。
|
|
104
111
|
|
|
105
112
|
市场卡片中的截图与 GitHub README 徽章是两套机制:
|
|
106
113
|
|
|
107
114
|
- **GitHub 徽章**由本 README 顶部的 Shields/dshfind 图片链接生成。
|
|
108
|
-
-
|
|
115
|
+
- **市场截图**按当前约定由**插件自己仓库根目录的 `screenshots.json`** 声明(本项目声明了 [screenshots.json](screenshots.json),含使用界面截图),注册表 `data/screenshots.json` 是旧约定下的回退,**不再添加新键**(本项目已在提交前撤销该文件的改动)。
|
|
109
116
|
- **市场图标/占位图**由具体市场的展示规则决定,并不是 npm `package.json` 的通用字段,也不是 README 徽章。
|
|
110
117
|
|
|
111
118
|
## 已知限制
|
package/lib/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { C as defaultDesktopAuthCandidates, O as workbuddyOwnAuthPath, a as readHostHeartbeat, b as WORKBUDDY_AUTH_FILE_ENV, c as WORKBUDDY_CONNECT_VERSION, g as FALLBACK_WORKBUDDY_MODELS, l as WorkBuddyUpstreamClient, o as workbuddyHostHeartbeatPath, r as isHeartbeatProcessAlive, w as defaultDesktopAuthDirs, x as WorkBuddyCredentialStore } from "./host-heartbeat-
|
|
2
|
+
import { C as defaultDesktopAuthCandidates, O as workbuddyOwnAuthPath, a as readHostHeartbeat, b as WORKBUDDY_AUTH_FILE_ENV, c as WORKBUDDY_CONNECT_VERSION, g as FALLBACK_WORKBUDDY_MODELS, l as WorkBuddyUpstreamClient, o as workbuddyHostHeartbeatPath, r as isHeartbeatProcessAlive, w as defaultDesktopAuthDirs, x as WorkBuddyCredentialStore } from "./host-heartbeat-C9s6A0pP.js";
|
|
3
3
|
import { realpathSync } from "node:fs";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
//#region src/bin.ts
|
package/lib/client.js
CHANGED
|
@@ -82,6 +82,7 @@ window.__ModuleLoader__.load({
|
|
|
82
82
|
.dsm-workbuddy-usage-account{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid var(--dsw-alias-border-l2,#3a3d45);border-radius:14px;background:var(--dsw-alias-bg-layer-2,#24262c)}
|
|
83
83
|
.dsm-workbuddy-usage-account-copy{display:flex;flex-direction:column;gap:3px;min-width:0}
|
|
84
84
|
.dsm-workbuddy-usage-expiry{padding-left:19px;color:var(--dsw-alias-label-tertiary,#9aa0a8);font-size:12px;line-height:18px}
|
|
85
|
+
.dsm-workbuddy-usage-hint{padding-left:19px;color:var(--dsw-alias-label-tertiary,#9aa0a8);font-size:12px;line-height:18px}
|
|
85
86
|
.dsm-workbuddy-account-picker{display:block}
|
|
86
87
|
.dsm-workbuddy-usage-select-wrap{position:relative}
|
|
87
88
|
.dsm-workbuddy-usage-select{appearance:none;width:100%;font:inherit;padding:10px 34px 10px 12px;border:1px solid var(--dsw-alias-border-l2,#3a3d45);border-radius:10px;color:var(--dsw-alias-label-primary,#e6e6e6);background:var(--dsw-alias-bg-layer-3,#2a2c33);cursor:pointer;transition:border-color .15s,box-shadow .15s}
|
|
@@ -463,17 +464,24 @@ window.__ModuleLoader__.load({
|
|
|
463
464
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
464
465
|
className: "dsm-workbuddy-usage-account-copy",
|
|
465
466
|
role: "status",
|
|
466
|
-
children: [
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
467
|
+
children: [
|
|
468
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
469
|
+
className: "dsm-workbuddy-usage-status",
|
|
470
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
471
|
+
"aria-hidden": "true",
|
|
472
|
+
className: "dsm-workbuddy-usage-dot",
|
|
473
|
+
style: dotStyle(status.status)
|
|
474
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: label })]
|
|
475
|
+
}),
|
|
476
|
+
status.status === "signed-in" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
477
|
+
className: "dsm-workbuddy-usage-expiry",
|
|
478
|
+
children: t("row.tokenExpiry", { expiresAt: formatDateTime(status.tokenExpiresAtMs) })
|
|
479
|
+
}) : null,
|
|
480
|
+
status.status === "error" || status.status === "signed-in" && status.creditsError !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
481
|
+
className: "dsm-workbuddy-usage-hint",
|
|
482
|
+
children: t("row.reloginHint")
|
|
483
|
+
}) : null
|
|
484
|
+
]
|
|
477
485
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
478
486
|
type: "button",
|
|
479
487
|
className: "dsm-btn dsm-btn-outline",
|
|
@@ -753,6 +761,7 @@ window.__ModuleLoader__.load({
|
|
|
753
761
|
"row.signedOutHint": "Sign in once in the WorkBuddy desktop app; this plugin follows that sign-in automatically.",
|
|
754
762
|
"row.signedIn": "Signed in: {accountName}",
|
|
755
763
|
"row.tokenExpiry": "Access token expires {expiresAt} (auto-renewal)",
|
|
764
|
+
"row.reloginHint": "If errors occur, sign back in to the WorkBuddy app.",
|
|
756
765
|
"row.requestFailed": "Request failed",
|
|
757
766
|
"row.creditsTotalLabel": "Total remaining credits",
|
|
758
767
|
"row.creditsMonthlyRemain": "Remaining {remain} / {size} · Refreshes {at}",
|
|
@@ -796,6 +805,7 @@ window.__ModuleLoader__.load({
|
|
|
796
805
|
"row.signedOutHint": "在 WorkBuddy 桌面 App 里登录一次即可,插件会自动跟随当前登录的账号。",
|
|
797
806
|
"row.signedIn": "已登录:{accountName}",
|
|
798
807
|
"row.tokenExpiry": "访问令牌 {expiresAt} 过期(自动续期)",
|
|
808
|
+
"row.reloginHint": "出现错误,重新登录 WorkBuddy APP 即可。",
|
|
799
809
|
"row.requestFailed": "请求失败",
|
|
800
810
|
"row.creditsTotalLabel": "总剩余积分",
|
|
801
811
|
"row.creditsMonthlyRemain": "剩余 {remain} / {size} · {at} 刷新",
|
|
@@ -996,7 +996,7 @@ var WorkBuddyUpstreamClient = class {
|
|
|
996
996
|
//#endregion
|
|
997
997
|
//#region src/version.ts
|
|
998
998
|
/** The npm package version this build was produced from. */
|
|
999
|
-
const WORKBUDDY_CONNECT_VERSION = "1.0
|
|
999
|
+
const WORKBUDDY_CONNECT_VERSION = "1.1.0";
|
|
1000
1000
|
//#endregion
|
|
1001
1001
|
//#region src/host-heartbeat.ts
|
|
1002
1002
|
/**
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as defaultDesktopAuthCandidates, D as workbuddyAccountId, E as parseWorkBuddyAuth, O as workbuddyOwnAuthPath, S as authFileName, T as defaultDesktopAuthPath, _ as WorkBuddyCatalog, a as readHostHeartbeat, b as WORKBUDDY_AUTH_FILE_ENV, c as WORKBUDDY_CONNECT_VERSION, d as parseCreditMultiplier, f as parseReasoning, g as FALLBACK_WORKBUDDY_MODELS, h as regionOf, i as processStartTimeMs, l as WorkBuddyUpstreamClient, m as prepareChatBody, n as clearHostHeartbeat, o as workbuddyHostHeartbeatPath, p as parseUpstreamModel, r as isHeartbeatProcessAlive, s as writeHostHeartbeat, t as WORKBUDDY_HOST_HEARTBEAT_FILENAME, u as classifyUpstreamError, v as deriveCatalog, w as defaultDesktopAuthDirs, x as WorkBuddyCredentialStore, y as WORKBUDDY_AUTH_FILENAME } from "./host-heartbeat-
|
|
1
|
+
import { C as defaultDesktopAuthCandidates, D as workbuddyAccountId, E as parseWorkBuddyAuth, O as workbuddyOwnAuthPath, S as authFileName, T as defaultDesktopAuthPath, _ as WorkBuddyCatalog, a as readHostHeartbeat, b as WORKBUDDY_AUTH_FILE_ENV, c as WORKBUDDY_CONNECT_VERSION, d as parseCreditMultiplier, f as parseReasoning, g as FALLBACK_WORKBUDDY_MODELS, h as regionOf, i as processStartTimeMs, l as WorkBuddyUpstreamClient, m as prepareChatBody, n as clearHostHeartbeat, o as workbuddyHostHeartbeatPath, p as parseUpstreamModel, r as isHeartbeatProcessAlive, s as writeHostHeartbeat, t as WORKBUDDY_HOST_HEARTBEAT_FILENAME, u as classifyUpstreamError, v as deriveCatalog, w as defaultDesktopAuthDirs, x as WorkBuddyCredentialStore, y as WORKBUDDY_AUTH_FILENAME } from "./host-heartbeat-C9s6A0pP.js";
|
|
2
2
|
import z from "@deepseek-ai/schemastery";
|
|
3
3
|
import { installSettingsSection, settingsNamespace } from "@deepseek-ai/dsh-settings";
|
|
4
4
|
import { randomBytes, timingSafeEqual } from "node:crypto";
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "dsh-connect-workbuddy",
|
|
3
3
|
"displayName": "DSH Connect WorkBuddy",
|
|
4
4
|
"description": "Connect locally signed-in WorkBuddy models to DeepSeek Harness with a read-only credits overview and model management.",
|
|
5
|
-
"version": "1.0
|
|
5
|
+
"version": "1.1.0",
|
|
6
6
|
"author": "dingminhua",
|
|
7
7
|
"copyright": "Copyright (c) 2026 LaoDing",
|
|
8
8
|
"license": "MIT",
|