{"_id":"@dsh-pet/ui-pet","_rev":"4-1419dc3a69c3f08c77d15b0f878a6eb3","name":"@dsh-pet/ui-pet","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.1":{"name":"@dsh-pet/ui-pet","version":"0.1.1","license":"MIT","_id":"@dsh-pet/ui-pet@0.1.1","maintainers":[{"name":"xiaoming-meng","email":"547783781@qq.com"}],"dsh":{"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout"],"platform":"web"}},"dist":{"shasum":"558e4920e9498d4f8cc6198d9bab3638045c0c46","tarball":"https://registry.npmjs.org/@dsh-pet/ui-pet/-/ui-pet-0.1.1.tgz","fileCount":37,"integrity":"sha512-vu1fwWNnz4wMlCmVge4eJI0bweC0YMWi36cc679cU4QgON/r5N6Rd2zg5SDI8J2+qrwjPzm2MZ9nYCvcWMouvw==","signatures":[{"sig":"MEYCIQCxTwEfrfyVWaeNjXzfHP/bS80DFgE0sVQ+Dgc2180b4QIhAIVo1k16wqBpXcnSrkfI65QXaPd+GM0Hz2fTqHoNwLKs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":303357},"main":"lib/types/index.js","type":"module","_from":"file:dsh-pet-ui-pet-0.1.1.tgz","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/types/index.js"},"./src/*":"./src/*","./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/types/invariant.js"},"./package.json":"./package.json"},"scripts":{"build":"tsc -p tsconfig.json","bundle":"tsdown"},"_npmUser":{"name":"xiaoming-meng","email":"547783781@qq.com"},"_resolved":"/private/var/folders/31/rs_6v4n50xdfgg141z_fv9ch0000gn/T/3d3483f0733c91d5fe7dfd3c9058a8d0/dsh-pet-ui-pet-0.1.1.tgz","_integrity":"sha512-vu1fwWNnz4wMlCmVge4eJI0bweC0YMWi36cc679cU4QgON/r5N6Rd2zg5SDI8J2+qrwjPzm2MZ9nYCvcWMouvw==","_npmVersion":"10.9.3","description":"Pet-raising companion surface for DeepSeek Harness: the pet docked above the composer that levels from token use and accepts an uploaded spritesheet","directories":{},"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"29.1.1","react":"^18.2.0","tsdown":"^0.22.2","vitest":"^4.1.8","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"~18.3.1","lightningcss":"^1.32.0","@dsh-pet/host":"^0.1.1","@types/react-dom":"~18.3.0","@deepseek-ai/cordis":"^4.0.1","@testing-library/react":"^16.3.2","@deepseek-ai/dsh-invariants":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-slots":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-layout":"0.1.1-rc.2","@deepseek-ai/dsh-client-test-runtime":"0.1.1-rc.2"},"peerDependencies":{"react":"^18.2.0","@dsh-pet/host":"0.1.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-invariants":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-slots":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-layout":"0.1.1-rc.2"},"_npmOperationalInternal":{"tmp":"tmp/ui-pet_0.1.1_1787581617333_0.7299308055848204","host":"s3://npm-registry-packages-npm-production"},"deprecated":"merged into @dsh-pet/pet"},"0.2.0":{"name":"@dsh-pet/ui-pet","version":"0.2.0","license":"MIT","_id":"@dsh-pet/ui-pet@0.2.0","maintainers":[{"name":"xiaoming-meng","email":"547783781@qq.com"}],"dsh":{"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout"],"platform":"web"}},"dist":{"shasum":"a96c8f158db6babbacd3d0b3d39db5534ee03f5b","tarball":"https://registry.npmjs.org/@dsh-pet/ui-pet/-/ui-pet-0.2.0.tgz","fileCount":40,"integrity":"sha512-Za7pwh3UXxizMYp92AmwYXSrkFX+a/pCdZHXD5ORY/oBxV3NYUIDNGr8a8Xy2BhGUvOf+3bslA2OJw9AWczXww==","signatures":[{"sig":"MEUCIQDV6m4wTuorBQDQn73d6dTXD+ehrw0aw6Cb439HkafqGwIgOdMmOaMtSJ19jAyvVuQEEaLSxs758RyGheVa+NJwBc4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348485},"main":"lib/types/index.js","type":"module","_from":"file:dsh-pet-ui-pet-0.2.0.tgz","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/types/index.js"},"./src/*":"./src/*","./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/types/invariant.js"},"./package.json":"./package.json"},"scripts":{"build":"tsc -p tsconfig.json","bundle":"tsdown"},"_npmUser":{"name":"xiaoming-meng","email":"547783781@qq.com"},"_resolved":"/private/var/folders/31/rs_6v4n50xdfgg141z_fv9ch0000gn/T/128d4ef928c2615aac5f14732f68c4aa/dsh-pet-ui-pet-0.2.0.tgz","_integrity":"sha512-Za7pwh3UXxizMYp92AmwYXSrkFX+a/pCdZHXD5ORY/oBxV3NYUIDNGr8a8Xy2BhGUvOf+3bslA2OJw9AWczXww==","_npmVersion":"10.9.3","description":"Pet-raising companion surface for DeepSeek Harness: the pet docked above the composer that levels from token use and accepts an uploaded spritesheet","directories":{},"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"29.1.1","react":"^18.2.0","tsdown":"^0.22.2","vitest":"^4.1.8","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"~18.3.1","lightningcss":"^1.32.0","@dsh-pet/host":"^0.2.0","@types/react-dom":"~18.3.0","@deepseek-ai/cordis":"^4.0.1","@testing-library/react":"^16.3.2","@deepseek-ai/dsh-invariants":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-slots":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-layout":"0.1.1-rc.2","@deepseek-ai/dsh-client-test-runtime":"0.1.1-rc.2"},"peerDependencies":{"react":"^18.2.0","@dsh-pet/host":"0.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-invariants":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-slots":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-layout":"0.1.1-rc.2"},"_npmOperationalInternal":{"tmp":"tmp/ui-pet_0.2.0_1787638672038_0.813164285456077","host":"s3://npm-registry-packages-npm-production"},"deprecated":"merged into @dsh-pet/pet"},"0.2.1":{"name":"@dsh-pet/ui-pet","version":"0.2.1","license":"MIT","_id":"@dsh-pet/ui-pet@0.2.1","maintainers":[{"name":"xiaoming-meng","email":"547783781@qq.com"}],"dsh":{"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout"],"platform":"web"}},"dist":{"shasum":"47cdb663d15a1471e565a0330798d1323789e0b8","tarball":"https://registry.npmjs.org/@dsh-pet/ui-pet/-/ui-pet-0.2.1.tgz","fileCount":40,"integrity":"sha512-aElaIGYD48k1+cXtP2TnfdZ2s/zm4FXMx/dsZhFJLma0YXSVo4xXCucQfRjMURexlSBu9/DQqPnaQurB5jb2Mw==","signatures":[{"sig":"MEQCIBJPJUtfZHIbGoFBXYcICQumVnjeL8RqlQF7YbNb0IT5AiBLSs3LEw1/rzFYnZJgUWndTbzyR/OZ6Q/Q1Kt2AqcP7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":346450},"main":"lib/types/index.js","type":"module","_from":"file:dsh-pet-ui-pet-0.2.1.tgz","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/types/index.js"},"./src/*":"./src/*","./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/types/invariant.js"},"./package.json":"./package.json"},"scripts":{"build":"tsc -p tsconfig.json","bundle":"tsdown"},"_npmUser":{"name":"xiaoming-meng","email":"547783781@qq.com"},"_resolved":"/private/var/folders/31/rs_6v4n50xdfgg141z_fv9ch0000gn/T/4a6347f509773fc0c1f32a3c2ef51dfe/dsh-pet-ui-pet-0.2.1.tgz","_integrity":"sha512-aElaIGYD48k1+cXtP2TnfdZ2s/zm4FXMx/dsZhFJLma0YXSVo4xXCucQfRjMURexlSBu9/DQqPnaQurB5jb2Mw==","_npmVersion":"10.9.3","description":"Pet-raising companion surface for DeepSeek Harness: the pet docked above the composer that levels from token use and accepts an uploaded spritesheet","directories":{},"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"29.1.1","react":"^18.2.0","tsdown":"^0.22.2","vitest":"^4.1.8","react-dom":"^18.2.0","typescript":"^6.0.3","@types/react":"~18.3.1","lightningcss":"^1.32.0","@dsh-pet/host":"^0.2.1","@types/react-dom":"~18.3.0","@deepseek-ai/cordis":"^4.0.1","@testing-library/react":"^16.3.2","@deepseek-ai/dsh-invariants":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-slots":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-layout":"0.1.1-rc.2","@deepseek-ai/dsh-client-test-runtime":"0.1.1-rc.2"},"peerDependencies":{"react":"^18.2.0","@dsh-pet/host":"0.2.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-invariants":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-slots":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-layout":"0.1.1-rc.2"},"_npmOperationalInternal":{"tmp":"tmp/ui-pet_0.2.1_1787639282774_0.9256080185251105","host":"s3://npm-registry-packages-npm-production"},"deprecated":"merged into @dsh-pet/pet"}},"time":{"created":"2026-08-24T14:26:57.090Z","modified":"2026-08-25T07:02:29.029Z","0.1.1":"2026-08-24T14:26:57.518Z","0.2.0":"2026-08-25T06:17:52.205Z","0.2.1":"2026-08-25T06:28:02.917Z"},"license":"MIT","description":"Pet-raising companion surface for DeepSeek Harness: the pet docked above the composer that levels from token use and accepts an uploaded spritesheet","maintainers":[{"name":"xiaoming-meng","email":"547783781@qq.com"}],"readme":"# @deepseek-ai/dsh-client-ui-pet\n\n[English](README.md) | 中文\n\n宠物插件的浏览器半边：位于 `conversation.input.dock` 栏内的 dock，用于渲染[宿主机服务](../dsh-pet)所拥有的宠物。它轮询 `/pet/state`，播放上传的精灵表单（无上传时显示阶段 emoji），展示等级/经验/货币条，并支持外观道具购买/装备与精灵表单上传——全部通过同源 fetch 走宿主机的四个 `/pet/*` webServer 路由。\n\n该 dock 不持有 store、也不订阅事件；实时状态来自轮询，每个变异动词都是普通 fetch。宿主未挂载时 `/pet/*` 路由 404，dock 渲染空白而非报错。`PetCompanion` 是展示组件（注入动词 + 语言 seat）；`PetDock` 是位于插槽内、转发运行时套件与动词的薄适配层，沿用了 GoalBar/GoalDock 的拆分。\n\n## 接线\n\n```yaml\n- id: ui-pet\n  name: '@deepseek-ai/dsh-client-ui-pet'\n```\n\n在同一组合中同时挂载宿主包 `@deepseek-ai/dsh-pet`，使 `/pet/*` 路由存在；否则 dock 保持休眠。\n\n## 行为\n\n- 每隔数秒轮询一次宠物状态，并在每次成功变异后刷新。\n- 通过 `background-position` 渲染当前阶段的精灵帧；当 manifest 含多帧时按定时器推进。\n- 仅对可负担且未拥有的外观道具启用 `buy`，对已拥有的道具启用 `equip`/`unequip`；已拥有但买不起的道具保持 `disabled`。\n- 上传 data URL 与可选 manifest；非法或超限图片会以 banner 呈现宿主机的拒绝码。\n\n帧切割为纯函数并有单测（`./client/spritesheet.ts` 的 `framePosition`/`stageFrames`）；dock 动作由 jsdom 组件 spec 覆盖。\n\n## Model Experience\n\n### 本地宠物 UI\n\n#### 模型看到什么\n\n无。dock 仅供用户可见：无工具、提示词、面向模型的上下文或 Session 事件。它只读取宿主宠物状态，从不向模型请求注入任何输入。\n\n#### Token 影响\n\n零。dock 的后台轮询与变异是对 `/pet/*` 的浏览器 fetch；它们之所以能促成新的 `assistant/message` 奖励，靠的是宿主机服务中独立的 token 用量监听，而非此处发起的模型调用。\n\n#### KV 缓存影响\n\n独立。轮询与渲染不触碰模型请求前缀，不会使 provider 缓存条目失效。\n\n## Known Limitations and Deferred Work\n\n- **轮询而非推送** —— dock 按定时器并在变异后刷新；没有宠物状态的实时推送，其它标签页的货币变化要到下一次轮询才可见。\n- **依赖宿主包** —— 没有 `@deepseek-ai/dsh-pet` 时路由 404、dock 休眠；不存在独立或离线的宠物。\n- **单宠物单客户端** —— 宿主只持有一个全局宠物行，因此所有查看者看到的是同一只宠物，无按用户的状态。","readmeFilename":"README.zh.md"}