dsh-agent-office 4.2.0 → 4.6.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/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # 智能体办公室 · DSH 插件版
1
+ # Office · DSH 插件版
2
2
 
3
3
  > 非官方第三方插件,与 DeepSeek 官方无隶属或背书关系。
4
4
 
@@ -9,6 +9,8 @@
9
9
 
10
10
  ![全局视角](screenshot.png)
11
11
 
12
+ ![白天主题](screenshot-day.png)
13
+
12
14
  ![单层聚焦](screenshot-focus.png)
13
15
 
14
16
  ## 特性
@@ -21,7 +23,10 @@
21
23
  - 💳 **DeepSeek 余额卡**:读取本机 DSH 登录凭证,查询平台充值钱包余额与赠金(只展示币种/金额,token 不出本机进程);
22
24
  - 🖥️ **显示器状态**:休息/完成时黑屏待机;工作中显示代码编辑器(滚动行 + 光标);工作超过 5 分钟或卡住时显示红色「HIGH LOAD / 执行任务时间过长」告警;
23
25
  - 🐱 **猫猫 Agent(Catora 主题)**:用 catora-cat 的 logo / 表情差分 PNG 做成平面贴图立牌(Three.js Sprite),**永远面向相机**,颜色按 Agent 调色;空闲时用 sleepy 表情 + 飘「Z」睡觉,其他状态用 happy/surprised/dizzy/loved;猫咪用 GSAP 做上下浮动动画,座垫上带随浮动变化的软阴影;
24
- - 🖼️ **自定义猫咪图片**:DSH 设置 →「智能体办公室」上传图片即可替换所有 Agent 头像(本地 localStorage 保存,不上传服务器);
26
+ - 🖼️ **自定义猫咪图片**:DSH 设置 →「Office」上传图片即可替换所有 Agent 头像(本地 localStorage 保存,不上传服务器);
27
+ - 🎚️ **面板不透明度**:DSH 设置 →「Office」可调 HUD 卡片透明度(50%–95%),面板实时跟随;
28
+ - 😅 **状态表情**:正常工作猫猫大汗淋漓;工作超过 5 分钟进入红温,头顶乱线;待机改成两条小缝;
29
+ - 🏢 **双办公室 + MCP 链路**:主楼右侧 Annex 是教室布局:后方讲台,三席面朝讲台——通用工位、备考隔间、题库工位(浮动 OCR / 数据库 / 试卷全息图标);虚线 MCP 链路带流动光点,两端蓝色 ✕ 表示暂未接通;
25
30
 
26
31
  - 🏢 **3D 实时办公室**:Three.js 自绘的错层办公室——每层有工位、显示器、会议桌、白板、服务器机柜、玻璃护栏和吊灯;每个会话是一个简洁的立方体 Agent(按状态做呼吸/浮动脉冲,工作/等待/卡住/待机各有反馈);
27
32
  - 🖱️ **楼层聚焦**:左键点任意楼层(或左侧楼层列表)→ 只显示并看清这一层;右键 /「全局视角」按钮 / `Esc` 回到整栋楼的全局视角;
@@ -56,7 +61,7 @@ DSH="/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh"
56
61
  "$DSH" plugin --profile desktop add github:mayc0202/dsh-agent-office
57
62
  ```
58
63
 
59
- 安装后在「插件」页勾选 **智能体办公室**(或把 `dsh-agent-office` 追加到
64
+ 安装后在「插件」页勾选 **Office**(或把 `dsh-agent-office` 追加到
60
65
  `~/.dsh/profiles/desktop/package.json` 的 `dsh.profile.bundles`),重启 DSH 生效。
61
66
 
62
67
  ### 方式 C:本地目录
package/lib/client.js CHANGED
@@ -1,12 +1,13 @@
1
1
  (() => {
2
2
  /**
3
- * 智能体办公室 —— DSH 客户端半侧。
3
+ * Office —— DSH 客户端半侧。
4
4
  *
5
5
  * 在页面右下角放一个猫头悬浮按钮,点击打开全屏 iframe(/agent-office/)。
6
- * 同时在 DSH 的「设置」里注册一个「智能体办公室」设置分区,用来上传自定义猫咪图片。
6
+ * 同时在 DSH 的「设置」里注册一个「Office」设置分区,用来上传自定义猫咪图片。
7
7
  * 纯 DOM + React 插槽,不依赖宿主 side 的额外接口。
8
8
  */
9
9
  const CUSTOM_FACE_KEY = 'agent-office-custom-face'
10
+ const GLASS_KEY = 'agent-office-ui-opacity'
10
11
  const CAT_BUTTON = 'data:image/png;base64,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'
11
12
 
12
13
  window.__ModuleLoader__.load({
@@ -56,10 +57,17 @@ window.__ModuleLoader__.load({
56
57
  const readCustom = () => {
57
58
  try { return localStorage.getItem(CUSTOM_FACE_KEY) ?? '' } catch { return '' }
58
59
  }
60
+ const readGlass = () => {
61
+ try {
62
+ const value = Number.parseFloat(localStorage.getItem(GLASS_KEY) ?? '')
63
+ return Number.isFinite(value) ? Math.min(95, Math.max(50, Math.round(value))) : 80
64
+ } catch { return 80 }
65
+ }
59
66
  return function NightShiftSettings() {
60
67
  const [preview, setPreview] = useState(readCustom)
61
68
  const [message, setMessage] = useState('')
62
69
  const [busy, setBusy] = useState(false)
70
+ const [glass, setGlass] = useState(readGlass())
63
71
 
64
72
  const choose = async event => {
65
73
  const file = event.target.files?.[0]
@@ -89,6 +97,17 @@ window.__ModuleLoader__.load({
89
97
  setMessage('已恢复默认 Catora 猫咪')
90
98
  }
91
99
 
100
+ const changeGlass = event => {
101
+ const value = Math.min(95, Math.max(50, Number(event.target.value)))
102
+ setGlass(value)
103
+ try { localStorage.setItem(GLASS_KEY, String(value)) } catch {}
104
+ }
105
+
106
+ const resetGlass = () => {
107
+ try { localStorage.removeItem(GLASS_KEY) } catch {}
108
+ setGlass(80)
109
+ }
110
+
92
111
  const titleStyle = { fontSize: 15, fontWeight: 600, margin: '0 0 6px' }
93
112
  const textStyle = { fontSize: 13, lineHeight: 1.6, margin: '0 0 10px', opacity: 0.72 }
94
113
  const buttonStyle = { height: 32, padding: '0 14px', borderRadius: 8, border: '1px solid rgba(127,127,127,.35)', background: 'transparent', color: 'inherit', cursor: 'pointer', fontSize: 13 }
@@ -96,7 +115,7 @@ window.__ModuleLoader__.load({
96
115
  return jsx('div', {
97
116
  style: { padding: '4px 0', maxWidth: 520 },
98
117
  children: [
99
- jsx('h3', { style: titleStyle, children: '智能体办公室' }),
118
+ jsx('h3', { style: titleStyle, children: 'Office' }),
100
119
  jsx('p', { style: textStyle, children: '上传一张图片,替换 3D 面板里所有 Agent 的猫咪头像(本地保存,不会上传到服务器)。' }),
101
120
  preview ? jsx('img', {
102
121
  src: preview,
@@ -105,14 +124,33 @@ window.__ModuleLoader__.load({
105
124
  }) : null,
106
125
  jsx('div', { style: { display: 'flex', gap: 10, alignItems: 'center', flexWrap: 'wrap' }, children: [
107
126
  jsx('label', {
127
+ className: 'ns-setting-btn',
108
128
  style: { ...buttonStyle, display: 'inline-flex', alignItems: 'center', opacity: busy ? 0.6 : 1 },
109
129
  children: [
110
130
  busy ? '处理中…' : '上传图片',
111
131
  jsx('input', { type: 'file', accept: 'image/*', style: { display: 'none' }, onChange: choose, disabled: busy }),
112
132
  ],
113
133
  }),
114
- jsx('button', { type: 'button', style: buttonStyle, onClick: reset, children: '恢复默认猫猫' }),
134
+ jsx('button', { type: 'button', className: 'ns-setting-btn', style: buttonStyle, onClick: reset, children: '恢复默认猫猫' }),
115
135
  ] }),
136
+ jsx('div', {
137
+ style: { marginTop: 18, padding: '14px 16px', border: '1px solid rgba(127,127,127,.28)', borderRadius: 12, background: 'rgba(127,127,127,.06)' },
138
+ children: [
139
+ jsx('div', { style: { display: 'flex', alignItems: 'baseline', justifyContent: 'space-between', gap: 12 }, children: [
140
+ jsx('span', { style: { fontSize: 13, fontWeight: 600 }, children: '卡片不透明度' }),
141
+ jsx('b', { style: { fontSize: 13, fontFamily: 'ui-monospace,monospace' }, children: glass + '%' }),
142
+ ] }),
143
+ jsx('input', {
144
+ type: 'range', min: 50, max: 95, step: 1, value: glass, onChange: changeGlass,
145
+ 'aria-label': '卡片不透明度',
146
+ style: { width: '100%', margin: '10px 0 6px', accentColor: '#087565', cursor: 'pointer' },
147
+ }),
148
+ jsx('div', { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 10 }, children: [
149
+ jsx('span', { style: { ...textStyle, margin: 0, fontSize: 12 }, children: '越低越通透;文字始终保持清晰。' }),
150
+ jsx('button', { type: 'button', className: 'ns-setting-btn', style: { ...buttonStyle, height: 28, padding: '0 10px', flex: 'none' }, onClick: resetGlass, children: '恢复主题默认' }),
151
+ ] }),
152
+ ],
153
+ }),
116
154
  message ? jsx('p', { style: { ...textStyle, marginTop: 10, marginBottom: 0 }, children: message }) : null,
117
155
  ],
118
156
  })
@@ -128,6 +166,7 @@ window.__ModuleLoader__.load({
128
166
  .dsh-ns-host{position:fixed;z-index:1200;right:20px;bottom:20px;display:flex;flex-direction:column;align-items:flex-end;gap:10px;font-family:Inter,system-ui,-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;-webkit-app-region:no-drag}
129
167
  .dsh-ns-pill{position:relative;display:grid;place-items:center;width:52px;height:52px;padding:0;border:0;background:transparent;box-shadow:none;cursor:pointer;transition:transform .15s ease}
130
168
  .dsh-ns-pill:hover{transform:translateY(-2px) scale(1.04)}
169
+ .dsh-ns-pill:active{transform:translateY(0) scale(.96)}
131
170
  .dsh-ns-pill img{width:46px;height:46px;object-fit:contain;display:block;pointer-events:none;filter:drop-shadow(0 6px 14px rgba(0,0,0,.55))}
132
171
  .dsh-ns-eye{position:absolute;width:5px;height:11px;border-radius:50%;background:#0b0e13;pointer-events:none;left:35.8%;top:57.7%;transform:translate(calc(-50% + var(--ex,0px)), calc(-50% + var(--ey,0px)));transition:transform .08s linear}
133
172
  .dsh-ns-eye.right{left:63.5%}
@@ -137,6 +176,11 @@ window.__ModuleLoader__.load({
137
176
  .dsh-ns-overlay iframe{display:block;width:100%;height:100%;border:0;background:#060607}
138
177
  .dsh-ns-close{position:absolute;top:auto;bottom:18px;right:16px;z-index:2;width:34px;height:34px;border-radius:50%;border:1px solid rgba(255,255,255,.18);background:rgba(20,20,23,.86);color:#f2f0ea;font-size:18px;line-height:1;cursor:pointer;backdrop-filter:blur(8px)}
139
178
  .dsh-ns-close:hover{background:rgba(40,40,45,.95)}
179
+ .dsh-ns-close:active,.dsh-ns-open:active{transform:scale(.96)}
180
+ .dsh-ns-close,.dsh-ns-open{transition:background-color .15s ease,transform .12s ease}
181
+ .ns-setting-btn{position:relative;transition:transform .12s ease,background-color .15s ease}
182
+ .ns-setting-btn::before{content:"";position:absolute;inset:-4px;border-radius:10px}
183
+ .ns-setting-btn:active{transform:scale(.96)}
140
184
  .dsh-ns-open{position:absolute;top:auto;bottom:18px;right:58px;z-index:2;height:34px;padding:0 12px;border-radius:999px;border:1px solid rgba(255,255,255,.18);background:rgba(20,20,23,.86);color:#f2f0ea;font-size:12px;font-weight:600;cursor:pointer;backdrop-filter:blur(8px)}
141
185
  .dsh-ns-open:hover{background:rgba(40,40,45,.95)}
142
186
  html[data-fullscreen] .dsh-ns-pill{bottom:12px}
@@ -146,11 +190,11 @@ window.__ModuleLoader__.load({
146
190
  const host = document.createElement('div')
147
191
  host.className = 'dsh-ns-host'
148
192
  host.innerHTML = `
149
- <button type="button" class="dsh-ns-pill" aria-label="打开智能体办公室" title="打开智能体办公室"><img alt="" /><span class="dsh-ns-eye left"></span><span class="dsh-ns-eye right"></span></button>
193
+ <button type="button" class="dsh-ns-pill" aria-label="打开 Office" title="打开 Office"><img alt="" /><span class="dsh-ns-eye left"></span><span class="dsh-ns-eye right"></span></button>
150
194
  <section class="dsh-ns-overlay" hidden>
151
195
  <button type="button" class="dsh-ns-open">在新标签打开</button>
152
196
  <button type="button" class="dsh-ns-close" aria-label="关闭">×</button>
153
- <iframe title="智能体办公室 3D 面板"></iframe>
197
+ <iframe title="Office 3D 面板"></iframe>
154
198
  </section>
155
199
  `
156
200
  document.body.append(host)
@@ -191,7 +235,7 @@ window.__ModuleLoader__.load({
191
235
  host.querySelector('.dsh-ns-close').addEventListener('click', close)
192
236
  host.querySelector('.dsh-ns-open').addEventListener('click', () => window.open('/agent-office/', '_blank', 'noopener'))
193
237
 
194
- // 在 DSH 设置中注册「智能体办公室」分区:上传自定义猫咪图片
238
+ // 在 DSH 设置中注册「Office」分区:上传自定义猫咪图片
195
239
  if (react && jsx && ctx?.slots?.inject) {
196
240
  try {
197
241
  const SettingsSection = makeSettingsSection(react, jsx)
@@ -200,7 +244,7 @@ window.__ModuleLoader__.load({
200
244
  name: 'settings.section',
201
245
  id: 'agent-office',
202
246
  order: 36,
203
- label: () => '智能体办公室',
247
+ label: () => 'Office',
204
248
  inject: () => ({}),
205
249
  }, SettingsSection)
206
250
  })