dsh-connect-workbuddy 5.15.0 → 5.15.1
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 +39 -0
- package/README.md +1 -1
- package/lib/bin.js +1 -1
- package/lib/client.js +17 -5
- package/lib/{host-heartbeat-KF9F87uw.js → host-heartbeat-891AaZGW.js} +1 -1
- package/lib/index.d.ts +3 -2
- package/lib/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.15.1 (2026-10-30)
|
|
4
|
+
|
|
5
|
+
> **积分读数从「权限切换器旁边」挪到「模型选择器左边」。** 两者原本相隔 8px 且都是
|
|
6
|
+
> 可点元素——想去点「完全权限」,结果点到读数、弹出积分浮层。读数不是操作按钮,
|
|
7
|
+
> 紧贴操作按钮只会制造误触。
|
|
8
|
+
|
|
9
|
+
### 变更
|
|
10
|
+
|
|
11
|
+
- **积分读数改挂 `conversation.input.right`**(同步自 `dsh-connect-trae` 的 issue #71)。
|
|
12
|
+
- **动机**:`conversation.input.left` 渲染在 `div.tools` 的**最末尾**,紧挨
|
|
13
|
+
`div.modes` 里的权限选择器,间距只有 8px;两个都是可点元素,误触后弹出的是
|
|
14
|
+
积分浮层——一个纯读数被当成了操作目标。
|
|
15
|
+
- **新位置**:宿主把 `conversation.input.right` 渲染在 `div.trailing` 的
|
|
16
|
+
`standardControls` 内、`conversation.input.model`(模型选择器)**之前**。
|
|
17
|
+
迁过去后与权限选择器之间隔开整段空白。
|
|
18
|
+
- **宿主要改吗**:不用。`conversation.input.right` 早已是 `kind: list` /
|
|
19
|
+
`scope: session` 的现成座位。
|
|
20
|
+
- **老 profile 无需迁移**:`creditPosition` 的两个取值(`composer` / `stats`)、
|
|
21
|
+
设置名、`order: 4` 全部不变。`composer` 的含义是「带模型选择器的那一行」,
|
|
22
|
+
而 `input.right` 渲染的正是那一行。
|
|
23
|
+
- **「输入框下方」那一档不受影响**:`stats` 仍挂 `conversation.composer.dock`。
|
|
24
|
+
|
|
25
|
+
### 补齐一个测试盲点(本次发现)
|
|
26
|
+
|
|
27
|
+
`tests/host-slot-surface.spec.ts` 的 `injectedSlots()` 只读
|
|
28
|
+
`ctx.slots.inject('…')` 的参数,**不读 `register({ name })`**。而 `name` 才是
|
|
29
|
+
注册表实际用来索引的字段——实测:只把 `register({ name })` 从 `input.right`
|
|
30
|
+
改回 `input.left`,整个文件仍然全绿,而插件会「注入一个座位、注册到另一个座位」。
|
|
31
|
+
|
|
32
|
+
现补一条一致性断言:`inject()` 的座位名与 `register({ name })` 必须相等,
|
|
33
|
+
并带「守卫的守卫」(匹配对数 ≥ 3,防止正则失效后空转)。变异验证:只改
|
|
34
|
+
`register({ name })`,新用例立刻红并点名两个座位。
|
|
35
|
+
|
|
36
|
+
### 测试
|
|
37
|
+
|
|
38
|
+
- 全仓 **2675** 例通过(159 文件),类型检查通过。
|
|
39
|
+
- `tests/host-slot-surface.spec.ts` 的 `CLAIMED_SLOTS` 白名单与其余源码注释同步。
|
|
40
|
+
- 构建产物中 `conversation.input.right` 出现 2 次、`input.left` 出现 0 次。
|
|
41
|
+
|
|
3
42
|
## 5.15.0 (2026-10-30)
|
|
4
43
|
|
|
5
44
|
> 一个「每次开新对话都要重新挑思考强度」的抱怨(issue #179),和它附带的那个更值得追查的现象:
|
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
- **视频生成工具 `workbuddy_draw_video`(国内版 / 国际版,默认关闭,逐区授权)** —— 把 WorkBuddy 的视频能力交给 agent:「帮我把这段描述做成 5 秒视频」,模型自己调用工具,跑完把 **mp4 的本地路径**贴回来(视频是二进制,只回 `file://` 路径并渲染成链接,不塞进对话体)。**它和生图不是一个形状**:视频是**异步任务**,`POST /v2/videos/generations` 只回一个 `taskId`,插件再轮询 `POST /v2/videos/tasks` 直到 `completed`(5 秒一次、上限 10 分钟),最后把产物下载到 `os.tmpdir()/workbuddy-video-gen/`。**同一个工具也做图生视频**:给 `image` 参数(与生图同一套输入形态)就切到 `image-to-video` 标签组并按输入图决定比例,不给就是文生视频——**模式由「有没有图」唯一决定**。其余参数:`seconds`(默认 5,须在该模型 `[min,max]` 内)、`resolution`(不在模型 `resolutions` 内会回落默认值并给出告警)、`aspect_ratio`(仅文生视频,`16:9`/`9:16`/`1:1`)、`negative_prompt`、`enable_audio`。**默认不开启**、逐区勾选「允许模型自主生视频」,不勾时工具**根本不注册**;失败后 60 秒冷却,但参数错、没登录、读不到输入图、以及**上游在建任务之前就退回的 4xx**(它明说没扣积分)这类**一分钱没花**的失败不进冷却——改完参数可以立刻重试,不用白等一分钟;上游若在拒绝文案里报了时长区间(`supported range: 4-15 seconds`),插件会记住它,下次同样的越界值直接在本地拦下。**模型可按模式钉住**:卡片「能力」栏在视频开关下方按文生 / 图生各给一行选择框,写进 `preferredVideoModels`(按区、按标签存);它是**软约束**——显式 `model` 写错照旧报错,钉住的模型若已从目录里消失则静默回落到组内第一个。两个区的模型目录不同(国内区 `kling-video-v3` / `minimax-video-h3`,国际区 `kling-video-v3`),id 不跨区。**实测单价(国内区)**:图生视频 4 秒 57.14(`minimax-video-h3`)/ 68.57(`kling-video-v3`),文生视频 5 秒 71.43 / 128.57 积分;**产物实测**是 H.264 + AAC、24fps 的 `1280x720` 或 `1344x768`(没有 1080p,`resolution: "1080p"` 会被拒并回落默认),视频码率 3.7–11.5 Mbps,秒数以 24fps 帧数为准(请求 5 秒得 5.09–5.17 秒)。取证、协议与联调记录见 [docs/VIDEO_GEN.md](docs/VIDEO_GEN.md)。
|
|
54
54
|
|
|
55
55
|
- **本机账号切换** —— 自动发现 WorkBuddy 桌面端留下的多个登录凭据,可按区域切换账号;Token 不写入 DSH 设置。
|
|
56
|
-
- **对话输入框积分读数(国内版 / 国际版自动切换)** —— 对话输入框左侧工具栏常驻一行可点击的读数(如 `WB CN · 1,072`),**按本会话当前选中的模型自动切换区域**:选中 WB CN 的模型就显示国内版余额,选中 WB AI 的模型就显示国际版余额;用其它 provider 的模型时该读数完全不出现。每 5 分钟自动刷新,也可点开手动刷新。点击读数弹出面板:**按账号列出的余额表格**,点某一行即可切换到该账号(与卡片上的账号选择是同一个设置);**当前不能用的账号会在行内标出原因**(如「被限流」「积分耗尽」),标注口径与账号池表格一致。面板里的余额只在打开时才去查,因此不会让 5 分钟的后台刷新按账号数翻倍。要关掉某一边,就在卡片对应区域的 tab
|
|
56
|
+
- **对话输入框积分读数(国内版 / 国际版自动切换)** —— 对话输入框左侧工具栏常驻一行可点击的读数(如 `WB CN · 1,072`),**按本会话当前选中的模型自动切换区域**:选中 WB CN 的模型就显示国内版余额,选中 WB AI 的模型就显示国际版余额;用其它 provider 的模型时该读数完全不出现。每 5 分钟自动刷新,也可点开手动刷新。点击读数弹出面板:**按账号列出的余额表格**,点某一行即可切换到该账号(与卡片上的账号选择是同一个设置);**当前不能用的账号会在行内标出原因**(如「被限流」「积分耗尽」),标注口径与账号池表格一致。面板里的余额只在打开时才去查,因此不会让 5 分钟的后台刷新按账号数翻倍。要关掉某一边,就在卡片对应区域的 tab 下取消勾选「在输入框工具栏显示积分读数」;该区域的供应商被关闭时,读数不显示、开关也置灰。同一个开关下面还有「显示位置」这一行:默认在输入框工具栏(与模型选择同一行,位于模型选择器左侧、与权限切换器隔开),改成「输入框下方」后读数落到轮次/步数/token 统计那一行——装了别的插件把工具栏座位占掉时用得上。
|
|
57
57
|
|
|
58
58
|
<img src="docs/assets/dsh-connect-workbuddy-composer-credits.png" width="360" alt="对话输入框积分面板:国内版账号余额表格、一键测试按钮与最近刷新时间(账号名已打码)" />
|
|
59
59
|
- **账号池:多账号批量操作与自动换号** —— 把要用的账号勾进池子,即可**签到勾选的账号**、**测试勾选的账号 × 你指定的模型**(默认挑该区域倍率为 0 的免费模型);开启**启用账号池**即同时打开**自动换号**——某个请求在上游失败时,插件会依次用池内其他可用账号重试,直到有一个接手、或全部不可用为止,然后才把错误报给你。成员**默认一个都不含**、必须显式勾选(「本机有登录」不等于「要拿它去签到和花积分」);**开启后由池子的排序决定每一次请求用谁**(可用优先,其次快过期先花、积分高、凭据更新的);失败时依次用池内其他可用账号重试。排序**从不写回你保存的选择**——关掉开关,你选定的账号立刻完全生效。只有请求本身不合法(HTTP 400)不换号:同一个请求体换谁都是 400,重试只会白等。**这个开关只管「插件要不要自己决定」**:关掉它,插件不再替你选账号、也不再替你换号,但**签到与测试仍然可用**(它们是手动动作)。测试走的是与模型行同一套真实体积探测,因此**有真实成本**;**不提供自动签到**——签到会真实领取奖励,只在你点按钮时执行。详见[账号池](#账号池)。
|
package/lib/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { C as WorkBuddyCredentialStore, D as defaultDesktopAuthDirs, E as defaultDesktopAuthCandidates, I as workbuddyOwnAuthPath, M as legacyWorkbuddyOwnAuthPath, Qt as hostPeersInfo, Rt as WORKBUDDY_APP_EXECUTABLE_ENV, S as WORKBUDDY_AUTH_FILE_ENV, V as WorkBuddyUpstreamClient, Wt as findWorkbuddyAppExecutableWithSource, a as readHostHeartbeat, c as WORKBUDDY_CONNECT_VERSION, d as rosterSeenPath, f as piAiRuntimeInfo, m as FALLBACK_WORKBUDDY_MODELS_GLOBAL, o as workbuddyHostHeartbeatPath, p as FALLBACK_WORKBUDDY_MODELS, r as isHeartbeatProcessAlive, u as describeRosterSeenPayload } from "./host-heartbeat-
|
|
2
|
+
import { C as WorkBuddyCredentialStore, D as defaultDesktopAuthDirs, E as defaultDesktopAuthCandidates, I as workbuddyOwnAuthPath, M as legacyWorkbuddyOwnAuthPath, Qt as hostPeersInfo, Rt as WORKBUDDY_APP_EXECUTABLE_ENV, S as WORKBUDDY_AUTH_FILE_ENV, V as WorkBuddyUpstreamClient, Wt as findWorkbuddyAppExecutableWithSource, a as readHostHeartbeat, c as WORKBUDDY_CONNECT_VERSION, d as rosterSeenPath, f as piAiRuntimeInfo, m as FALLBACK_WORKBUDDY_MODELS_GLOBAL, o as workbuddyHostHeartbeatPath, p as FALLBACK_WORKBUDDY_MODELS, r as isHeartbeatProcessAlive, u as describeRosterSeenPayload } from "./host-heartbeat-891AaZGW.js";
|
|
3
3
|
import { readFile } from "node:fs/promises";
|
|
4
4
|
import { realpathSync } from "node:fs";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
package/lib/client.js
CHANGED
|
@@ -9447,7 +9447,8 @@ window.__ModuleLoader__.load({
|
|
|
9447
9447
|
//#endregion
|
|
9448
9448
|
//#region src/client/ComposerCredits.tsx
|
|
9449
9449
|
/**
|
|
9450
|
-
* Credit readout for the composer
|
|
9450
|
+
* Credit readout for the composer row (`conversation.input.right`, rendered
|
|
9451
|
+
* immediately before the model picker).
|
|
9451
9452
|
*
|
|
9452
9453
|
* 参考:dingminhua/dsh-connect-trae(MIT,Copyright (c) 2026 LaoDing)
|
|
9453
9454
|
* — 该项目的 `client/ComposerPoints.tsx`:读数形态(`<区域> · <余额>`)、
|
|
@@ -11925,8 +11926,19 @@ window.__ModuleLoader__.load({
|
|
|
11925
11926
|
}
|
|
11926
11927
|
};
|
|
11927
11928
|
/**
|
|
11928
|
-
* Credit readout in the composer
|
|
11929
|
-
* session-scope list slot).
|
|
11929
|
+
* Credit readout in the composer row (`conversation.input.right`, a
|
|
11930
|
+
* session-scope list slot rendered immediately before the model picker).
|
|
11931
|
+
*
|
|
11932
|
+
* `input.right` rather than `input.left` (ported from dsh-connect-trae's
|
|
11933
|
+
* issue #71): the host renders `input.right` inside `div.trailing`'s
|
|
11934
|
+
* `standardControls`, i.e. IMMEDIATELY BEFORE the model picker, while
|
|
11935
|
+
* `input.left` sits at the very end of `div.tools` — 8px from the
|
|
11936
|
+
* permission selector. Both are clickable, so reaching for "完全权限"
|
|
11937
|
+
* landed on the readout and opened the credit popover. A readout is not an
|
|
11938
|
+
* action; next to the model picker it stops competing with a control the
|
|
11939
|
+
* user is actually aiming at. The `composer` SETTING value keeps its
|
|
11940
|
+
* meaning ("the row that carries the model picker"), so saved profiles
|
|
11941
|
+
* need no migration.
|
|
11930
11942
|
*
|
|
11931
11943
|
* 参考:dingminhua/dsh-connect-trae(MIT,Copyright (c) 2026 LaoDing)
|
|
11932
11944
|
* — 该项目的 `registerComposerPoints`:无条件注册插槽、由 gate 读
|
|
@@ -11944,8 +11956,8 @@ window.__ModuleLoader__.load({
|
|
|
11944
11956
|
*/
|
|
11945
11957
|
const registerComposerCredits = () => {
|
|
11946
11958
|
try {
|
|
11947
|
-
return ctx.slots.inject("conversation.input.
|
|
11948
|
-
name: "conversation.input.
|
|
11959
|
+
return ctx.slots.inject("conversation.input.right", () => ctx.slots.register({
|
|
11960
|
+
name: "conversation.input.right",
|
|
11949
11961
|
id: "dsh-connect-workbuddy-composer-credits",
|
|
11950
11962
|
order: 4,
|
|
11951
11963
|
locale: namespace,
|
|
@@ -7932,7 +7932,7 @@ function describeRosterSeenPayload(raw) {
|
|
|
7932
7932
|
//#endregion
|
|
7933
7933
|
//#region src/version.ts
|
|
7934
7934
|
/** The npm package version this build was produced from. */
|
|
7935
|
-
const WORKBUDDY_CONNECT_VERSION = "5.15.
|
|
7935
|
+
const WORKBUDDY_CONNECT_VERSION = "5.15.1";
|
|
7936
7936
|
//#endregion
|
|
7937
7937
|
//#region src/host-heartbeat.ts
|
|
7938
7938
|
/**
|
package/lib/index.d.ts
CHANGED
|
@@ -3458,7 +3458,8 @@ declare function nextRegionEnabled(value: unknown, region: WorkBuddyWebRegion, e
|
|
|
3458
3458
|
/**
|
|
3459
3459
|
* The two seats the credit readout can occupy (issue #62).
|
|
3460
3460
|
*
|
|
3461
|
-
* `composer` is the composer
|
|
3461
|
+
* `composer` is the composer row (`conversation.input.right`, rendered just
|
|
3462
|
+
* before the model picker); `stats` is
|
|
3462
3463
|
* the ambient dock below the composer card (`conversation.composer.dock`),
|
|
3463
3464
|
* beside the shell's own round/step/token pills. Named as a union rather than a
|
|
3464
3465
|
* boolean because a third seat is plausible and `showAtTop: boolean` would have
|
|
@@ -5049,7 +5050,7 @@ interface WorkBuddyRegionState {
|
|
|
5049
5050
|
*
|
|
5050
5051
|
* Two seats, because the first one is not always available:
|
|
5051
5052
|
*
|
|
5052
|
-
* - `composer` — the composer
|
|
5053
|
+
* - `composer` — the composer row (`conversation.input.right`), shared
|
|
5053
5054
|
* with the shell's own controls. It is the closer, more glanceable seat,
|
|
5054
5055
|
* and it is the default so nothing moves for anyone who does not choose.
|
|
5055
5056
|
* - `stats` — the ambient dock below the composer card
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as parseCreditMultiplier, $t as resolveDshHome, A as isEncryptedCredentialError, At as pickMediaModel, B as WorkBuddyCredentialRejectedError, Bt as deriveAtRestKey, C as WorkBuddyCredentialStore, Ct as IMAGE_TAG_TEXT_TO_IMAGE, D as defaultDesktopAuthDirs, Dt as imageMimeForPath, E as defaultDesktopAuthCandidates, Et as imageDataUrl, F as workbuddyAccountId, Ft as NATIVE_MODALITY_BY_MODEL_ID, G as forceNeutralHead, Gt as isEncryptedFieldWrapper, H as channelGateMemberOf, Ht as fetchAtRestKeyPayload, I as workbuddyOwnAuthPath, It as imageDefaultFor, J as isCredentialRejectedError, Jt as macosNestedAppBundles, K as isContextTooLongBody, Kt as isWorkbuddyBundle, L as CONTEXT_OVERFLOW_MARKER, Lt as nativeModalityOf, M as legacyWorkbuddyOwnAuthPath, Mt as parseQueueAnswer, N as parseWorkBuddyAuth, Nt as queueNoticeText, O as defaultDesktopAuthPath, Ot as isBareBase64Image, P as preferredAccountName, Pt as pruneTempDir, Q as openingEvidenceOfBody, R as CREDENTIAL_REJECTED_CODE, Rt as WORKBUDDY_APP_EXECUTABLE_ENV, S as WORKBUDDY_AUTH_FILE_ENV, St as IMAGE_TAG_IMAGE_TO_IMAGE, T as authFileName, Tt as WorkBuddyImageError, U as classifyUpstreamError, Ut as findWorkbuddyAppExecutable, V as WorkBuddyUpstreamClient, Vt as deriveAtRestKeyId, W as declaredTools, X as knownRegionOf, Xt as readAtRestKey, Y as isFirstMessageGateBody, Yt as openEncryptedField, Z as modelIdOfBody, Zt as workbuddyAppExecutableCandidates, _ as deriveCatalog, _t as WorkBuddyVideoError, a as readHostHeartbeat, at as requestEvidenceOf, b as ENCRYPTED_CREDENTIAL_CODE, bt as resolveVideoParams, c as WORKBUDDY_CONNECT_VERSION, ct as REFUSES_OFF_MODEL_IDS, dt as offDefaultFor, en as withFileLock, et as parseReasoning, f as piAiRuntimeInfo, ft as offRefused, g as applyContextBudgets, gt as VIDEO_TAG_TEXT_TO_VIDEO, h as WorkBuddyCatalog, ht as VIDEO_TAG_IMAGE_TO_VIDEO, i as processStartTimeMs, it as regionOf, j as isVaultAccountId, jt as sniffImageMime, k as hasEncryptedCredentialFields, kt as parseImageDataUrl, l as createFileRosterSeenStore, lt as defaultOffModelIds, m as FALLBACK_WORKBUDDY_MODELS_GLOBAL, mt as withEffectiveOff, n as clearHostHeartbeat, nt as perturbChannelFingerprints, o as workbuddyHostHeartbeatPath, ot as rewriteSessionTitleModel, p as FALLBACK_WORKBUDDY_MODELS, pt as recordRefusal, q as isConversationIdGateBody, qt as macosBundleExecutable, r as isHeartbeatProcessAlive, rt as prepareChatBody, s as writeHostHeartbeat, st as attachBusyLevels, t as WORKBUDDY_HOST_HEARTBEAT_FILENAME, tn as writeFileAtomic, tt as parseUpstreamModel, ut as lastRefusalFor, v as fallbackModelsFor, vt as parseSupportedSecondsRange, w as WorkBuddyEncryptedCredentialError, wt as MAX_INPUT_IMAGE_BYTES, x as WORKBUDDY_AUTH_FILENAME, xt as DEFAULT_IMAGE_SIZE, y as withoutRouters, yt as pickVideoModel, z as WORKBUDDY_FALLBACK_SYSTEM_PROMPT, zt as clearAtRestKeyCache } from "./host-heartbeat-
|
|
1
|
+
import { $ as parseCreditMultiplier, $t as resolveDshHome, A as isEncryptedCredentialError, At as pickMediaModel, B as WorkBuddyCredentialRejectedError, Bt as deriveAtRestKey, C as WorkBuddyCredentialStore, Ct as IMAGE_TAG_TEXT_TO_IMAGE, D as defaultDesktopAuthDirs, Dt as imageMimeForPath, E as defaultDesktopAuthCandidates, Et as imageDataUrl, F as workbuddyAccountId, Ft as NATIVE_MODALITY_BY_MODEL_ID, G as forceNeutralHead, Gt as isEncryptedFieldWrapper, H as channelGateMemberOf, Ht as fetchAtRestKeyPayload, I as workbuddyOwnAuthPath, It as imageDefaultFor, J as isCredentialRejectedError, Jt as macosNestedAppBundles, K as isContextTooLongBody, Kt as isWorkbuddyBundle, L as CONTEXT_OVERFLOW_MARKER, Lt as nativeModalityOf, M as legacyWorkbuddyOwnAuthPath, Mt as parseQueueAnswer, N as parseWorkBuddyAuth, Nt as queueNoticeText, O as defaultDesktopAuthPath, Ot as isBareBase64Image, P as preferredAccountName, Pt as pruneTempDir, Q as openingEvidenceOfBody, R as CREDENTIAL_REJECTED_CODE, Rt as WORKBUDDY_APP_EXECUTABLE_ENV, S as WORKBUDDY_AUTH_FILE_ENV, St as IMAGE_TAG_IMAGE_TO_IMAGE, T as authFileName, Tt as WorkBuddyImageError, U as classifyUpstreamError, Ut as findWorkbuddyAppExecutable, V as WorkBuddyUpstreamClient, Vt as deriveAtRestKeyId, W as declaredTools, X as knownRegionOf, Xt as readAtRestKey, Y as isFirstMessageGateBody, Yt as openEncryptedField, Z as modelIdOfBody, Zt as workbuddyAppExecutableCandidates, _ as deriveCatalog, _t as WorkBuddyVideoError, a as readHostHeartbeat, at as requestEvidenceOf, b as ENCRYPTED_CREDENTIAL_CODE, bt as resolveVideoParams, c as WORKBUDDY_CONNECT_VERSION, ct as REFUSES_OFF_MODEL_IDS, dt as offDefaultFor, en as withFileLock, et as parseReasoning, f as piAiRuntimeInfo, ft as offRefused, g as applyContextBudgets, gt as VIDEO_TAG_TEXT_TO_VIDEO, h as WorkBuddyCatalog, ht as VIDEO_TAG_IMAGE_TO_VIDEO, i as processStartTimeMs, it as regionOf, j as isVaultAccountId, jt as sniffImageMime, k as hasEncryptedCredentialFields, kt as parseImageDataUrl, l as createFileRosterSeenStore, lt as defaultOffModelIds, m as FALLBACK_WORKBUDDY_MODELS_GLOBAL, mt as withEffectiveOff, n as clearHostHeartbeat, nt as perturbChannelFingerprints, o as workbuddyHostHeartbeatPath, ot as rewriteSessionTitleModel, p as FALLBACK_WORKBUDDY_MODELS, pt as recordRefusal, q as isConversationIdGateBody, qt as macosBundleExecutable, r as isHeartbeatProcessAlive, rt as prepareChatBody, s as writeHostHeartbeat, st as attachBusyLevels, t as WORKBUDDY_HOST_HEARTBEAT_FILENAME, tn as writeFileAtomic, tt as parseUpstreamModel, ut as lastRefusalFor, v as fallbackModelsFor, vt as parseSupportedSecondsRange, w as WorkBuddyEncryptedCredentialError, wt as MAX_INPUT_IMAGE_BYTES, x as WORKBUDDY_AUTH_FILENAME, xt as DEFAULT_IMAGE_SIZE, y as withoutRouters, yt as pickVideoModel, z as WORKBUDDY_FALLBACK_SYSTEM_PROMPT, zt as clearAtRestKeyCache } from "./host-heartbeat-891AaZGW.js";
|
|
2
2
|
import z from "@deepseek-ai/schemastery";
|
|
3
3
|
import { appendFile, mkdir, open, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
4
4
|
import { randomBytes, randomUUID, 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": "把本机登录的 WorkBuddy 模型(国内版与国际版)接入 DeepSeek Harness:每次刷新按上游目录自动读取每个模型的积分倍率,支持逐模型图片输入开关、多账号切换与账号池自动换号,并提供每日签到、卡片与输入框里的胶囊积分读数等只读积分概览。",
|
|
5
|
-
"version": "5.15.
|
|
5
|
+
"version": "5.15.1",
|
|
6
6
|
"author": "dingminhua",
|
|
7
7
|
"copyright": "Copyright (c) 2026 LaoDing",
|
|
8
8
|
"license": "MIT",
|