Codex 动画伙伴的公开画廊。
70.4/100
综合分
4,225
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/11 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add crafter-station/petdex该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 23 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包petdex @ 1.4.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 11:41:28
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 74 处,展示前 73 条)
- 读取密钥环境变量packages/discord-bot/src/bot.ts:12
const token = process.env.DISCORD_TOKEN; - 发起网络请求packages/discord-bot/src/commands.ts:53
const res = await fetch(url); - 发起网络请求packages/discord-bot/src/commands.ts:83
const res = await fetch(`${PETDEX_API_BASE}/api/manifest`); - 读取密钥环境变量packages/discord-bot/src/register-commands.ts:12
const token = process.env.DISCORD_TOKEN; - 读取密钥环境变量packages/discord-bot/src/webhook.ts:10
const SECRET = process.env.PETDEX_WEBHOOK_SECRET; - 发起网络请求packages/petdex-cli/src/collections.ts:344
const res = await fetch(url, { - 写入本地文件packages/petdex-cli/src/edit-assets.test.ts:68
await writeFile(spritePath, Buffer.from([0xff, 0xd8, 0xff, 0xe0])); - 删除本地文件递归packages/petdex-cli/src/edit-assets.test.ts:73
await rm(dir, { recursive: true, force: true }); - 读取本地文件packages/petdex-cli/src/edit-assets.ts:350
const file = await stat(filePath); - 读取本地文件packages/petdex-cli/src/edit-assets.ts:357
const buffer = await readFile(filePath); - 写入本地文件packages/petdex-cli/src/telemetry.test.ts:28
mkdirSync(join(tmpHome, ".petdex"), { recursive: true }); - 写入本地文件packages/petdex-cli/src/telemetry.test.ts:29
writeFileSync(petdexConfigPath(), "{ corrupt", "utf8"); - 删除本地文件递归packages/petdex-cli/src/telemetry.test.ts:42
rmSync(tmpHome, { recursive: true, force: true }); - 读取本地文件packages/petdex-cli/src/telemetry.test.ts:53
expect(existsSync(petdexConfigPath())).toBe(false); - 读取本地文件packages/petdex-cli/src/telemetry.test.ts:66
expect(readFileSync(petdexConfigPath(), "utf8")).toBe("{ corrupt"); - 读取本地文件packages/petdex-cli/src/telemetry.ts:79
if (!existsSync(telemetryFile())) return { kind: "missing" }; - 读取本地文件packages/petdex-cli/src/telemetry.ts:82
raw = readFileSync(telemetryFile(), "utf8"); - 写入本地文件packages/petdex-cli/src/telemetry.ts:101
mkdirSync(path.dirname(telemetryFile()), { recursive: true }); - 写入本地文件packages/petdex-cli/src/telemetry.ts:102
writeFileSync(telemetryFile(), `${JSON.stringify(config, null, 2)}\n`); - 执行外部命令来自配置/变量packages/petdex-cli/src/telemetry.ts:233
const child = spawn(process.execPath, ["-e", worker], { - 读取本地文件src/i18n/client-messages.test.ts:46
const source = readFileSync(file, "utf8"); - 读取本地文件src/i18n/client-messages.test.ts:56
for (const entry of readdirSync(dir)) { - 读取本地文件src/i18n/client-messages.test.ts:58
const stat = statSync(path); - 读取密钥环境变量src/lib/aliyun-oss.ts:7
const accessKeyId = process.env.ALIYUN_OSS_ACCESS_KEY_ID; - 读取密钥环境变量src/lib/aliyun-oss.ts:8
const accessKeySecret = process.env.ALIYUN_OSS_ACCESS_KEY_SECRET; - 发起网络请求src/lib/cli-auth.ts:27
const res = await fetch(url, { - 发起网络请求src/lib/color-extract.ts:34
const res = await fetch(spriteUrl); - 发起网络请求src/lib/download-pet-zip.ts:21
const response = await fetch(zipUrl, { - 读取密钥环境变量src/lib/edit-policy.ts:77
if (!process.env.OPENAI_API_KEY && !process.env.AI_API_KEY) return true; - 发起网络请求src/lib/pet-metrics-client.ts:37
const promise = fetch(`/api/pets/${slug}/metrics`, { - 写入本地文件src/lib/pet-sound.ts:217
await writeFile(rawPath, rawBytes); - 删除本地文件src/lib/pet-sound.ts:220
await rm(rawPath, { force: true }); - 读取本地文件src/lib/pet-sound.ts:222
const normalizedStats = await stat(normalizedPath); - 删除本地文件src/lib/pet-sound.ts:224
await rm(normalizedPath, { force: true }); - 删除本地文件src/lib/pet-sound.ts:242
await rm(bestCandidate.normalizedPath, { force: true }); - 删除本地文件src/lib/pet-sound.ts:246
await rm(normalizedPath, { force: true }); - 删除本地文件src/lib/pet-sound.ts:262
await rm(bestCandidate.normalizedPath, { force: true }); - 读取本地文件src/lib/pet-sound.ts:267
const body = await readFile(bestCandidate.normalizedPath); - 删除本地文件递归src/lib/pet-sound.ts:294
await rm(tmpRoot, { recursive: true, force: true }); - 请求外部主机api.elevenlabs.iosrc/lib/pet-sound.ts:336
const res = await fetch("https://api.elevenlabs.io/v1/sound-generation", { - 发起网络请求src/lib/pet-sound.ts:336
const res = await fetch("https://api.elevenlabs.io/v1/sound-generation", { - 读取密钥环境变量src/lib/query-embed.ts:16
process.env.UPSTASH_REDIS_REST_URL && process.env.UPSTASH_REDIS_REST_TOKEN - 发起网络请求src/lib/r2-fetch.ts:17
return fetch(target, { ...init, headers }); - 读取密钥环境变量src/lib/route-cost.test.ts:144
const previousSecret = process.env.PETDEX_ROUTE_COST_SECRET; - 读取密钥环境变量src/lib/route-cost.test.ts:145
const previousTelemetrySecret = process.env.TELEMETRY_RATELIMIT_SECRET; - 读取密钥环境变量src/lib/route-cost.test.ts:146
const previousUpstashToken = process.env.UPSTASH_REDIS_REST_TOKEN; - 读取密钥环境变量src/lib/route-cost.test.ts:150
process.env.PETDEX_ROUTE_COST_SECRET = ""; - 读取密钥环境变量src/lib/route-cost.test.ts:151
process.env.TELEMETRY_RATELIMIT_SECRET = " telemetry-secret "; - 读取密钥环境变量src/lib/route-cost.test.ts:152
process.env.UPSTASH_REDIS_REST_TOKEN = "upstash-token"; - 读取密钥环境变量src/lib/route-cost.ts:143
return firstNonEmpty(process.env.PETDEX_ROUTE_COST_SECRET); - 执行外部命令固定命令src/lib/security.test.ts:231
const shAvailable = spawnSync("sh", ["-c", "exit 0"]).status === 0; - 执行外部命令固定命令src/lib/security.test.ts:250
const r = spawnSync("sh", ["-n"], { input: script, encoding: "utf8" }); - 写入本地文件src/lib/security.test.ts:276
mkdirSync(binDir); - 写入本地文件src/lib/security.test.ts:278
writeFileSync( - 写入本地文件src/lib/security.test.ts:295
chmodSync(curlPath, 0o755); - 执行外部命令固定命令src/lib/security.test.ts:301
const result = spawnSync("sh", [], { - 读取本地文件src/lib/security.test.ts:313
expect(existsSync(marker)).toBe(false); - 读取本地文件src/lib/security.test.ts:314
expect(existsSync(backtickMarker)).toBe(false); - 删除本地文件递归src/lib/security.test.ts:316
rmSync(tempDir, { recursive: true, force: true }); - 读取本地文件src/lib/seo-canonical.test.ts:75
const source = readFileSync(join(REPO_ROOT, rel), "utf8"); - 发起网络请求src/lib/similarity.ts:34
const res = await fetch(spriteUrl); - 读取本地文件src/lib/sql-statements.test.ts:21
const migration = readFileSync( - 读取密钥环境变量src/lib/submission-decisions.ts:355
if (!row.ownerEmail || !process.env.RESEND_API_KEY) return; - 读取密钥环境变量src/lib/submission-decisions.ts:358
const resend = new Resend(process.env.RESEND_API_KEY); - 发起网络请求src/lib/submission-review.ts:971
const res = await fetch(url, { - 读取密钥环境变量src/lib/submissions.ts:124
const resendKey = process.env.RESEND_API_KEY; - 读取密钥环境变量src/lib/takedown.ts:228
if (pet.ownerEmail && process.env.RESEND_API_KEY) { - 读取密钥环境变量src/lib/takedown.ts:230
const resend = new Resend(process.env.RESEND_API_KEY); - 读取密钥环境变量src/lib/wechat-qr-validator.ts:3
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); - 读取本地文件src/proxy.test.ts:9
const source = readFileSync(new URL("./proxy.ts", import.meta.url), "utf8") - 读取本地文件src/proxy.test.ts:48
const body = readFileSync(route, "utf8"); - 发起网络请求src/proxy.ts:267
fetch(new URL("/api/internal/route-cost", req.url), { - 发起网络请求workers/petdex-assets.ts:71
async fetch(request: Request, env: Env): Promise<Response> {
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
涉及外部主机:api.elevenlabs.io
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 动画宠物公开画廊
README
由 DeepSeek 最新模型翻译生成Petdex
Codex 动画伙伴的公开画廊。
一条命令就能浏览、安装和提交宠物。
petdex.dev
· Built with Petdex · Discord · npm
Petdex 是什么
Petdex 由三部分协同组成:
1. 网页画廊,位于 petdex.dev,社区在这里提交、评审并展示 Codex sprite 格式的动画宠物。
2. 命令行工具,一条命令就能把任意宠物装到你的机器上,并直接送进 Codex。
3. 桌面应用,让宠物漂浮在屏幕上,实时响应你编码智能体的活动。
每只宠物就是一个文件夹。每个文件夹就是一条宝可梦图鉴条目。每条条目距离 npx petdex install 只差一步。
快速开始
按这份清单操作,就能装好宠物、在 Codex 里看到它,并连上桌面应用。
1. 安装一只现成的宠物:
npx petdex install boba
你应该会看到 ~/.petdex/pets/boba/,里面有 pet.json 和一张 spritesheet。
2. 从 petdex.dev/download 获取桌面应用。它支持 macOS、Linux 和 Windows。
3. 打开它,然后在宠物上按 Cmd+, 打开 Settings。
在 Pets 下选择你的宠物,在 Agents 下逐个点击连接你的编码智能体。
展开完整文档(README 剩余 1 节)
Petdex
Codex 动画伙伴的公开画廊。
一条命令就能浏览、安装和提交宠物。
petdex.dev
· Built with Petdex · Discord · npm
Petdex 是什么
Petdex 由三部分协同组成:
1. 网页画廊,位于 petdex.dev,社区在这里提交、评审并展示 Codex sprite 格式的动画宠物。
2. 命令行工具,一条命令就能把任意宠物装到你的机器上,并直接送进 Codex。
3. 桌面应用,让宠物漂浮在屏幕上,实时响应你编码智能体的活动。
每只宠物就是一个文件夹。每个文件夹就是一条宝可梦图鉴条目。每条条目距离 npx petdex install 只差一步。
快速开始
按这份清单操作,就能装好宠物、在 Codex 里看到它,并连上桌面应用。
1. 安装一只现成的宠物:
npx petdex install boba
你应该会看到 ~/.petdex/pets/boba/,里面有 pet.json 和一张 spritesheet。
2. 从 petdex.dev/download 获取桌面应用。它支持 macOS、Linux 和 Windows。
3. 打开它,然后在宠物上按 Cmd+, 打开 Settings。
在 Pets 下选择你的宠物,在 Agents 下逐个点击连接你的编码智能体。全程不用碰终端。
宠物会漂浮在工作区上方,你的智能体每调用一次工具,它就播放一次动画。
已登录的创作者还能把审核通过的宠物归入个人合集,入口在个人主页的 Collections 标签页,或者用命令行:
npx petdex collection create --title "My pets" --pets boba,mochi
面向用户
| 你想…… | 这样做 |
| 浏览宠物 | 访问 petdex.dev |
| 安装宠物 | npx petdex install <slug> |
| 切换当前吉祥物 | 打开桌面应用里的 Settings(Cmd+,) |
| 运行桌面悬浮宠物 | 从 petdex.dev/download 下载 |
| 制作宠物 | 在 Codex 里使用 hatch-pet 技能,或用 Petdex 创作工具 自己做一个 |
| 提交宠物 | npx petdex submit ./my-pet/,或通过网页提交器上传 |
| 管理合集 | npx petdex collection list,或使用个人资料页的 Collections 标签页 |
| 加入社区 | Discord |
完整命令行参考:packages/petdex-cli/README.md。
个人合集每个账号上限 10 个。24 只宠物的上限限制的是增长,而不是已存储的行,所以在上限出现之前创建的合集仍然可以改名或缩减,但不能扩充。命令行支持列出、创建、编辑、删除,以及输出 JSON 供自动化使用。
面向构建者
如果你想在 Petdex 之上做东西(桌面客户端、可穿戴设备、SDK、Discord 机器人,什么都行),有两个稳定的接口面:
- HTTP API。 petdex.dev/api/manifest 返回所有已审核通过的宠物,包含 slug、精灵图 URL、动画状态和元数据。
- 宠物包格式。 每只宠物都是一个 pet.json 加一个 spritesheet.{webp,png},按 8x9 网格渲染,每帧 192x208,或使用 v2 的 8x11 网格。
已有 21 个开源和源码可得的项目构建在这两个接口面之上。目录见 petdex.dev/built-with,然后通过 issue 模板提交你的项目。
架构
crafter-station/petdex
├── src/
│ ├── app/[locale]/ Public site: gallery, /pets/<slug>, /collections, /built-with, /community, /create, /download, /submit, /u/<handle>, ...
│ ├── app/api/cli/ CLI endpoints: OAuth config, submit (zip → presigned R2), collection management, dedup check, register
│ ├── app/api/manifest/ Public manifest: every approved pet with its spritesheet URL
│ ├── app/api/admin/ Admin review surface for submissions, edits, collection requests
│ └── lib/db/schema.ts Drizzle schema (Postgres)
├── packages/
│ ├── petdex-cli/ npm petdex catalog client (auth, list, install, submit, edit, collection management)
│ ├── petdex-desktop-native/ Native SDK floating mascot for macOS, Linux and Windows
│ ├── petdex-desktop-windows/ Legacy Tauri Windows implementation (not the release path)
│ └── discord-bot/ Discord.js bot for the Petdex server
├── public/built-with/ Screenshots for the community page
├── public/brand/ Logos, OS icons, Discord icon
└── drizzle/ SQL migrations (Postgres schema history)
Web 技术栈:Next.js 16、React 19、Tailwind、Drizzle、Postgres、Redis、Clerk、R2。
命令行:Bun + TypeScript,以单个 npm 二进制文件发布。通过 Clerk OAuth + PKCE 认证。
桌面端:原生 SDK 应用,内置进程内 Zig 钩子服务器,监听 127.0.0.1:7777。当前发布路径不含 WebView,也不含 Node sidecar。
本地开发
支持两条路径。
| 目标 | 命令 | 准备 |
| 本地全栈 | bun run dev:docker | 需要 Docker 或 Podman,预热约 30s。 |
| 对接真实服务 | bun run dev | 填好 .env.local(仅维护者)。 |
git clone https://github.com/crafter-station/petdex.git
cd petdex
bun install
bun run dev:docker
打开 localhost:3000。完整指南见 CONTRIBUTING.md。
宠物包格式
每只宠物由两个文件组成:
my-pet/
├── pet.json Metadata: name, slug, tags, vibes, kind, frame size, animation states
└── spritesheet.webp 8x9 or v2 8x11 frame grid of 192x208 px each (or .png)
原生渲染器支持九行状态:idle、running-right、running-left、waving、jumping、failed、waiting、running、review。Codex 和受支持的编码智能体会把各自的活动钩子映射到这些状态。v2 8x11 图集还留出两行,供接入的客户端自行使用。
参与贡献
- 提交宠物: petdex.dev/submit 或 npx petdex submit <path>。
- 收录你的项目: 提一个 Built with Petdex issue。
- 修 bug 或加功能: 先读 CONTRIBUTING.md,再提 PR。
- 来聊聊: Discord 有发布频道(#wip、#ship-or-sink)、反馈频道(#cli-feedback)和展示频道(#showcase)。
宠物 IP 与下架
宠物是用户提交的同人作品。Petdex 不对任何底层 IP 主张权利。如果你持有某个角色的权利,希望下架某只宠物,请提交下架请求,我们会在 48 小时内审核。
协议
源代码采用 MIT。宠物素材归提交者所有,遵循其自行声明的协议。
Made by Crafter Station.
Lead: @RaillyHugo.预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
crafter-station/petdex
Codex 动画伙伴的公开画廊。
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1