Skip to content

market: add Model Office (模型在干嘛) - #874

Open
wang48 wants to merge 1 commit into
magpie-community:mainfrom
wang48:add-model-office
Open

wang48 wants to merge 1 commit into
magpie-community:mainfrom
wang48:add-model-office

Conversation

@wang48

@wang48 wang48 commented Nov 8, 2026 •

Copy link
Copy Markdown

Model Office / 模型在干嘛

Adds the independently maintained magpie-page-model-office page plugin to the market. Source: https://github.com/wang48/model-office

Inspired by Agent Office, with its MIT-licensed session readers reused and credited. This plugin focuses on community anime personifications of models, four offline animated 3D characters, and status-only activity snapshots. It is maintained separately by wang48.

  • DeepSeek uses VRM skeletal animation; Claude, GPT and Gemini use GLB morph animation. Qwen and Kimi remain original-art representations.
  • Local snapshots contain whitelisted state, tool names, model identifiers and counters, not prompts, replies, tool arguments or project paths. The character atlas declares usage:summary.
  • Code is MIT; bundled assets have separate terms. DeepSeek is CC BY-NC-SA 4.0, the three GLB models are CC BY 4.0, and original artwork includes noncommercial restrictions. Credits and licenses are included in the package.
  • Package size is approximately 136 MB because models are bundled for offline loading.

Validation: 31 project tests and 7 local service access checks passed; the plugin was tested in native Magpie. The community registryProblems validator passes for this change.

灵感来自「Agent 办公室(Agent Office)」,保留原作者致谢和代码许可。新增条目提供社区娘化形象及四位动态 3D 角色;素材的非商业限制已在项目文档和包内声明。

Published npm version: https://www.npmjs.com/package/magpie-page-model-office/v/0.1.0

Install: magpie plugin add magpie-page-model-office

The published tarball was downloaded from npm using a separate cache and verified byte-for-byte against the tested local artifact (SHA-256 f30a68d11f98ce40ce2812723ac2b9bfd9bf093528474997ce364ccb07a0bf5e). All four offline model data files and attribution are present; session snapshots are excluded.

@wang48
wang48 marked this pull request as ready for review November 8, 2026 15:52
@yetone

yetone commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

Thanks for this. I read the registry line and the published tarball (magpie-page-model-office 0.1.0 from registry.npmjs.org, read only, not run). It can't be listed in this state:

  1. Size. The tarball is 135.6 MB and unpacks to 217.6 MB (dist.unpackedSize 217,605,617). Every user who installs it from the market downloads all of that. The 3D models alone are 4 files of 37–55 MB (page/assets/models/*-data.js), and the original artwork under page/assets/originals/ adds another 43 MB (six images of 1.7–10.7 MB). Please get the package to a size comparable to other page plugins (load models on demand from a pinned, checksummed source, ship compressed glTF/meshopt, and downscale the artwork for the screen).
  2. Encoded blobs and bundled minified code. The models ship as base64 inside JS (globalThis.ModelGLBData_gpt="Z2xURgIA…"), and page/vrm-runtime.js (875 KB) and page/three.min.js are prebuilt minified bundles. Our contributor rules stop a review on an encoded blob or minified bundle until the maintainer has looked. Ship .glb/.vrm files as binary assets and make the runtime reproducible from pinned versions (three@0.169.0, @pixiv/three-vrm) with the build script in the package.
  3. Work in the plugin host when nothing is open. office.hooks.mjs starts setInterval(tick, 1500) at import, and each tick runs the vendored Agent Office scanner (readdirSync/statSync/readSync over every agent's session folders) and rewrites page/live.js inside the installed package. That runs every 1.5 s for as long as the plugin is installed, on the synchronous fs API in the Bun host that also serves other plugins' requests, even when the page is never opened. Please scan only while the page is open (or on request from the page), asynchronously, and write state outside the package directory, which can be read-only.
  4. Licensing and vendor likeness. Assets are CC BY-NC-SA / non-commercial, and the characters are personifications of Claude, GPT, Gemini, DeepSeek, Qwen and Kimi. Listing them in magpie's market is a call for the maintainer, not a review; I've flagged it.
  5. Registry name should be the English name with the Chinese in the summary, like the other entries (e.g. "Model Office").

The privacy side looks right: publicSession allow-lists state, model, counters and a hashed key, and the page's CSP has connect-src 'none'. I found no network calls in the source.

@yetone

yetone commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

Thanks for building this. It's a fun idea. Speaking for the maintainers, it can't go into the market in its current form. Here's what would change that:

  1. Nothing runs while the page is closed. At the moment the gateway hook starts a 1.5 s setInterval as soon as the plugin loads. Each tick reads every agent's session folders with blocking file reads and rewrites page/live.js inside the installed package. That costs every user CPU and disk all day, even if they never open the page. Please read the state only while the page is open (for example, on a request from the page), and write it somewhere other than the package's own files.
  2. Size. The tarball is 135.6 MB and unpacks to 217.6 MB, mostly 3D models stored as base64 inside JS files. Market plugins are installed by people who just tap a tile, so we need this to be a few MB. Load the models on demand, or ship one small default model and let people add more.
  3. Characters and licences. We can't list characters that personify Claude, GPT, Gemini, DeepSeek, Qwen and Kimi under those vendors' names, or assets under non-commercial licences. Original characters that aren't tied to a vendor's brand are fine.

The privacy side is already good: there are no network calls, the page blocks outgoing connections, and the snapshot only keeps allowed fields. If you rework the three points above, I'll review it again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants