First release. The version was '0.1.0', which is not what anything here reads: a release is a tag, the catalogue compares tags for difference rather than order, and every other plugin names its tag in the manifest. The repository was also private, which would have registered a clone URL that answers 401 to everyone who is not on this machine — the failure that reads as 'the plugin is broken' rather than 'the catalogue is wrong'. It is public now.
55 lines
2.5 KiB
TypeScript
55 lines
2.5 KiB
TypeScript
import type { PluginManifest } from '@@/plugins/manifest';
|
|
|
|
// Sketch a Material 3 screen, and hand the prompt to the agent.
|
|
//
|
|
// ── What this is, and what it is not ──
|
|
//
|
|
// The editor is [M3E Canvas](https://github.com/lnkiai/m3e-canvas), MIT, vendored under `web/vendor/`
|
|
// and re-copied by `scripts/vendor.sh`. Officer contributes none of the drawing, none of the Material
|
|
// 3 vocabulary and none of the prompt wording — that is upstream's work and there is no wish to fork
|
|
// its direction.
|
|
//
|
|
// What Officer contributes is the last step. Upstream's export button writes the prompt to the
|
|
// clipboard for you to paste into a coding tool. Here it opens a chat session with the prompt already
|
|
// in it, pointed at a directory on this machine, and the agent writes the app. That is the whole
|
|
// reason this plugin exists; everything else is hosting.
|
|
//
|
|
// ── Why the permission is grantable ──
|
|
//
|
|
// A design is a document, like a note or a dashboard. There is no credential involved, nothing here
|
|
// reaches another machine, and a member sketching a screen is exactly the case this should serve. So
|
|
// it is grantable, and documents are scoped per user by the schema rather than by a filter someone
|
|
// has to remember.
|
|
//
|
|
// The one owner-only corner is `/_handoff`, which starts an agent session. Spawning an agent runs as
|
|
// the owner and can write to the owner's disk, so it is not a thing to hand out with a drawing tool.
|
|
export const manifest: PluginManifest = {
|
|
publisher: 'officerdev',
|
|
// The release tag, not semver — `marketplace-sync.ts` publishes what a tag names and the catalogue
|
|
// compares tags for difference rather than order, so `0.1.0` here would disagree with every other
|
|
// plugin and with the thing that actually gets published.
|
|
version: '2026.09.05.01',
|
|
platform: '>=1.0.0',
|
|
|
|
label: 'Canvas',
|
|
summary: 'Sketch a Material 3 screen, and hand the prompt to the agent',
|
|
icon: 'PenTool',
|
|
color: '#6750A4', // Material 3's own primary, since the whole editor is drawn in that vocabulary
|
|
|
|
permissions: [
|
|
{
|
|
key: 'm3e-canvas',
|
|
label: 'Canvas',
|
|
description: 'Sketch Material 3 screens and turn them into prompts',
|
|
ownerOnly: ['/_handoff'],
|
|
},
|
|
],
|
|
|
|
// `motion` is the only thing the platform does not already have — `html-to-image` is present at the
|
|
// same version upstream asks for, and React is React. These are INTERSECTED across every installed
|
|
// plugin into one `plugins/node_modules/`, so the range is upstream's own rather than tightened.
|
|
npmDependencies: {
|
|
motion: '^13.1.1',
|
|
},
|
|
};
|