mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-08 10:40:45 +00:00
A manifest may list `permissions` (doc.read, doc.write, state, effect.render, export.write) and an `api` level. doc.read, doc.write and state follow the capability model proposed in storytold/photocraft#662; the other names are VectorCraft's own. An unknown, reserved, duplicate or wrong-kind name is refused by name. A manifest without the key gets the permissions its kind implies and installs as before. - Install Plug-in... and File > Open show the name, id, version, file SHA-256 and each permission in plain words, with control and bidirectional characters escaped and each string cut to 64 characters. OK installs the module only if it still has the SHA-256 shown; Cancel installs nothing. The heavy-budget prompt and the status line show the escaped name too, and OK keeps the `replace` it was given. - `plugin.install` needs `grant` listing every permission, and `plugin.inspect` reports `needsApproval`. `hash` pins the module: one with another SHA-256 is refused. The grant is kept with the module's hash in the store's `grants.json`, and only that store's grants count while it is attached; the same set does not ask again, more permissions do, and `plugin.remove` forgets it. - The Additional Plug-ins Folder and `plugin.reload` install only plug-ins the attached store has granted and report the others as needing approval. At startup the store skips an ungranted plug-in. - A filter run without doc.read is given no objects; without state it neither reads nor writes `documentData`; without doc.write an output that changes the document is refused and the document is unchanged. Docs: docs/plugins.md, docs/mcp.md, docs/target-app-parity.md.