# Vendored from lnkiai/m3e-canvas | | | | --- | --- | | upstream | https://github.com/lnkiai/m3e-canvas.git | | ref | `main` | | commit | `5c83ac6f437153b4df4d2348c4f94c4ff71b864a` | | dated | 2026-09-05 | | licence | MIT — see `LICENSE` beside this file | | vendored | 2026-09-05 by `scripts/vendor.sh` | **Do not edit anything in this directory.** Officer's changes live outside it, reached through `web/adapter.ts`. Editing here makes the next `vendor.sh` run either clobber the change or produce a diff nobody can read. ## What was taken, and what was not Taken: `lib/`, `components/`, upstream's `app/page.tsx` as `Canvas.tsx`, and `globals.css`. Not taken: `app/layout.tsx` — a Next.js route shell with no meaning here. `lib/ai.ts` and `components/AiPanel.tsx` ARE taken even though Officer does not use them. They keep model-provider API keys in `localStorage`, which is not how anything here should work — but `Canvas.tsx` references them throughout, so removing them would mean editing vendored code. A faithful copy carrying an unused module beats a doctored one that cannot be re-vendored. They are inert without a key, and the shell does not surface them. ## The one edit `vendor.sh` makes Every `@/lib/…` and `@/components/…` import is rewritten to a relative path. This platform already binds `@/*` to `src/apps/officer-web` and `@/components/*` to its own shared components, so an unrewritten import resolves to the WRONG module rather than failing — silent breakage. The rewrite is deterministic, so a re-vendor produces a readable diff of upstream's real changes.