From 936330d663d4e927f72ea5ba5d4d28a92a678802 Mon Sep 17 00:00:00 2001 From: hitalin Date: Thu, 15 Oct 2026 20:13:44 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix(plugins):=20meta.json=20=E3=81=AE=20per?= =?UTF-8?q?missions=20=E3=82=92=20NoteDeck=20=E3=81=AE=E6=A8=A9=E9=99=90?= =?UTF-8?q?=E3=82=AD=E3=83=BC=E3=81=A7=E6=9B=B8=E3=81=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 9 件のプラグインが meta.json の permissions に Misskey 本家のスコープ (write:notes など) を書いていた。meta.json の permissions は NoteDeck の 権限キーで書く決まりなので、契約チェックが呼び出しから導いた値に揃える。 本家向けのスコープは plugin.is のヘッダに残っているので、本家での動作は 変わらない。契約チェックの警告 9 件が 0 件になる。 Co-Authored-By: Claude Opus 5.5 --- public/registry/index.json | 12 +++---- public/registry/plugins.json | 31 ++++++------------- .../registry/plugins/block-checker/meta.json | 2 +- public/registry/plugins/block-combo/meta.json | 2 +- public/registry/plugins/dominator/meta.json | 2 +- .../plugins/federation-checker/meta.json | 2 +- .../plugins/misskey-translate/meta.json | 2 +- public/registry/plugins/pakuru/meta.json | 2 +- .../plugins/reaction-piggyback/meta.json | 2 +- .../plugins/same-emoji-react/meta.json | 2 +- .../registry/plugins/smart-delete/meta.json | 2 +- public/registry/queries.json | 2 +- public/registry/skills.json | 6 ++-- public/registry/themes.json | 2 +- public/registry/widgets.json | 2 +- 15 files changed, 31 insertions(+), 42 deletions(-) diff --git a/public/registry/index.json b/public/registry/index.json index 999d0c2..ad5e29e 100644 --- a/public/registry/index.json +++ b/public/registry/index.json @@ -1,24 +1,24 @@ { "version": 1, - "updatedAt": "2026-10-13T12:57:05.708Z", + "updatedAt": "2026-10-15T11:13:19.388Z", "plugins": { "count": 41, - "updatedAt": "2026-10-13T12:57:05.708Z" + "updatedAt": "2026-10-15T11:13:19.388Z" }, "themes": { "count": 77, - "updatedAt": "2026-10-13T12:57:05.708Z" + "updatedAt": "2026-10-15T11:13:19.388Z" }, "widgets": { "count": 64, - "updatedAt": "2026-10-13T12:57:05.708Z" + "updatedAt": "2026-10-15T11:13:19.388Z" }, "skills": { "count": 44, - "updatedAt": "2026-10-13T12:57:05.708Z" + "updatedAt": "2026-10-15T11:13:19.388Z" }, "queries": { "count": 35, - "updatedAt": "2026-10-13T12:57:05.708Z" + "updatedAt": "2026-10-15T11:13:19.388Z" } } diff --git a/public/registry/plugins.json b/public/registry/plugins.json index 9a3ec52..fc441e9 100644 --- a/public/registry/plugins.json +++ b/public/registry/plugins.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-13T12:57:05.708Z", + "updatedAt": "2026-10-15T11:13:19.388Z", "plugins": [ { "id": "ai-actions", @@ -704,10 +704,10 @@ } }, "permissions": [ - "read:account", - "read:drive", - "write:notes", - "write:drive" + "account.read", + "drive.read", + "drive.write", + "notes.write" ], "iconUrl": "https://store.notedeck.io/registry/plugins/smart-delete/icon.svg", "contract": { @@ -822,9 +822,6 @@ "description": "Scan a user's Crime Coefficient (spam tendency / trust score) from the user menu and see the breakdown. The scoring maps X's public tweepcred algorithm onto Misskey; it is computed entirely inside the client, with nothing sent externally or published." } }, - "permissions": [ - "read:account" - ], "iconUrl": "https://store.notedeck.io/registry/plugins/dominator/icon.svg", "contract": { "runsOn": [ @@ -1021,7 +1018,7 @@ } }, "permissions": [ - "read:account" + "account.read" ], "iconUrl": "https://store.notedeck.io/registry/plugins/misskey-translate/icon.svg", "contract": { @@ -1075,7 +1072,7 @@ } }, "permissions": [ - "write:notes" + "notes.write" ], "iconUrl": "https://store.notedeck.io/registry/plugins/pakuru/icon.svg", "contract": { @@ -1127,9 +1124,6 @@ "description": "Check from the user menu whether a user has blocked you. Also shows your follow relationship and whether you block or mute them. Whether they mute you cannot be checked, by Misskey's design." } }, - "permissions": [ - "read:account" - ], "iconUrl": "https://store.notedeck.io/registry/plugins/block-checker/icon.svg", "contract": { "runsOn": [ @@ -1180,9 +1174,7 @@ } }, "permissions": [ - "read:account", - "write:blocks", - "write:mutes" + "account.write" ], "iconUrl": "https://store.notedeck.io/registry/plugins/block-combo/icon.svg", "contract": { @@ -1239,7 +1231,7 @@ } }, "permissions": [ - "write:reactions" + "notes.react" ], "iconUrl": "https://store.notedeck.io/registry/plugins/reaction-piggyback/icon.svg", "contract": { @@ -1501,7 +1493,7 @@ } }, "permissions": [ - "write:reactions" + "notes.react" ], "iconUrl": "https://store.notedeck.io/registry/plugins/same-emoji-react/icon.svg", "contract": { @@ -2040,9 +2032,6 @@ "description": "Check federation status with a user's server from the user menu. Shows your server's blocks / suspended delivery / silencing, delivery success, and last received time together, and can also open a two-way check on misspace." } }, - "permissions": [ - "read:federation" - ], "iconUrl": "https://store.notedeck.io/registry/plugins/federation-checker/icon.svg", "contract": { "runsOn": [ diff --git a/public/registry/plugins/block-checker/meta.json b/public/registry/plugins/block-checker/meta.json index 6d44412..bcf0bc2 100644 --- a/public/registry/plugins/block-checker/meta.json +++ b/public/registry/plugins/block-checker/meta.json @@ -9,6 +9,6 @@ "category": "moderation", "capabilities": ["misskey-api"], "tags": ["block", "mute", "relation", "moderation"], - "permissions": ["read:account"], + "permissions": [], "minNoteDeckVersion": "1.8.0" } diff --git a/public/registry/plugins/block-combo/meta.json b/public/registry/plugins/block-combo/meta.json index d9f79ce..4780df3 100644 --- a/public/registry/plugins/block-combo/meta.json +++ b/public/registry/plugins/block-combo/meta.json @@ -9,6 +9,6 @@ "category": "moderation", "capabilities": ["misskey-api"], "tags": ["block", "mute", "unfollow", "burokai", "moderation"], - "permissions": ["read:account", "write:blocks", "write:mutes"], + "permissions": ["account.write"], "minNoteDeckVersion": "1.8.0" } diff --git a/public/registry/plugins/dominator/meta.json b/public/registry/plugins/dominator/meta.json index db28592..c7a0c19 100644 --- a/public/registry/plugins/dominator/meta.json +++ b/public/registry/plugins/dominator/meta.json @@ -9,6 +9,6 @@ "category": "moderation", "capabilities": ["misskey-api"], "tags": ["score", "spam", "trust", "psycho-pass", "moderation"], - "permissions": ["read:account"], + "permissions": [], "minNoteDeckVersion": "1.8.0" } diff --git a/public/registry/plugins/federation-checker/meta.json b/public/registry/plugins/federation-checker/meta.json index 77a09e2..91e6ad2 100644 --- a/public/registry/plugins/federation-checker/meta.json +++ b/public/registry/plugins/federation-checker/meta.json @@ -9,6 +9,6 @@ "category": "moderation", "capabilities": ["misskey-api"], "tags": ["federation", "instance", "block", "moderation"], - "permissions": ["read:federation"], + "permissions": [], "minNoteDeckVersion": "1.8.0" } diff --git a/public/registry/plugins/misskey-translate/meta.json b/public/registry/plugins/misskey-translate/meta.json index fd7925c..7c10db3 100644 --- a/public/registry/plugins/misskey-translate/meta.json +++ b/public/registry/plugins/misskey-translate/meta.json @@ -9,6 +9,6 @@ "category": "utility", "capabilities": ["misskey-api"], "tags": ["translate", "i18n", "note-action"], - "permissions": ["read:account"], + "permissions": ["account.read"], "minNoteDeckVersion": "1.8.0" } diff --git a/public/registry/plugins/pakuru/meta.json b/public/registry/plugins/pakuru/meta.json index 819069c..efb7b92 100644 --- a/public/registry/plugins/pakuru/meta.json +++ b/public/registry/plugins/pakuru/meta.json @@ -9,6 +9,6 @@ "category": "other", "capabilities": ["misskey-api"], "tags": ["fun", "classic", "pakuru", "numberquote"], - "permissions": ["write:notes"], + "permissions": ["notes.write"], "minNoteDeckVersion": "1.8.0" } diff --git a/public/registry/plugins/reaction-piggyback/meta.json b/public/registry/plugins/reaction-piggyback/meta.json index 315ef58..a4932b4 100644 --- a/public/registry/plugins/reaction-piggyback/meta.json +++ b/public/registry/plugins/reaction-piggyback/meta.json @@ -9,6 +9,6 @@ "category": "utility", "capabilities": ["misskey-api", "misskey-account"], "tags": ["emoji", "reaction", "custom-emoji", "remote"], - "permissions": ["write:reactions"], + "permissions": ["notes.react"], "minNoteDeckVersion": "1.8.0" } diff --git a/public/registry/plugins/same-emoji-react/meta.json b/public/registry/plugins/same-emoji-react/meta.json index fc6d6cb..970caf2 100644 --- a/public/registry/plugins/same-emoji-react/meta.json +++ b/public/registry/plugins/same-emoji-react/meta.json @@ -9,6 +9,6 @@ "category": "utility", "capabilities": ["misskey-api", "misskey-account"], "tags": ["emoji", "reaction", "custom-emoji", "twemoji"], - "permissions": ["write:reactions"], + "permissions": ["notes.react"], "minNoteDeckVersion": "1.8.0" } diff --git a/public/registry/plugins/smart-delete/meta.json b/public/registry/plugins/smart-delete/meta.json index 83168e5..1ded9a1 100644 --- a/public/registry/plugins/smart-delete/meta.json +++ b/public/registry/plugins/smart-delete/meta.json @@ -9,6 +9,6 @@ "category": "utility", "capabilities": ["misskey-api"], "tags": ["delete", "drive", "cleanup", "attachment", "privacy"], - "permissions": ["read:account", "read:drive", "write:notes", "write:drive"], + "permissions": ["account.read", "drive.read", "drive.write", "notes.write"], "minNoteDeckVersion": "1.8.0" } diff --git a/public/registry/queries.json b/public/registry/queries.json index 7e20639..ca44851 100644 --- a/public/registry/queries.json +++ b/public/registry/queries.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-13T12:57:05.708Z", + "updatedAt": "2026-10-15T11:13:19.388Z", "queries": [ { "id": "bot-only", diff --git a/public/registry/skills.json b/public/registry/skills.json index 838a319..459458a 100644 --- a/public/registry/skills.json +++ b/public/registry/skills.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-13T12:57:05.708Z", + "updatedAt": "2026-10-15T11:13:19.388Z", "skills": [ { "id": "aiscript-surgeon", @@ -558,8 +558,8 @@ "sourceUrl": "https://store.notedeck.io/registry/skills/account-accent/skill.md", "apiUrl": "https://store.notedeck.io/registry/skills/account-accent/api.json", "sha512": "562e7dedd6dc62c8af672222b66ccecb5be92f491835d5d82f6f227243dc01af49dca4993203f00e2592eaf4f8dc082b2288ff58dea95de1107cd7c7b696aa29", - "createdAt": "2026-10-13T12:57:09.792Z", - "updatedAt": "2026-10-13T12:57:09.792Z", + "createdAt": "2026-10-13T21:57:29+09:00", + "updatedAt": "2026-10-13T21:57:29+09:00", "locales": { "en": { "name": "Per-account Colors", diff --git a/public/registry/themes.json b/public/registry/themes.json index 42b4bfc..624adb1 100644 --- a/public/registry/themes.json +++ b/public/registry/themes.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-13T12:57:05.708Z", + "updatedAt": "2026-10-15T11:13:19.388Z", "themes": [ { "id": "adwaita-dark", diff --git a/public/registry/widgets.json b/public/registry/widgets.json index bfed112..8a44879 100644 --- a/public/registry/widgets.json +++ b/public/registry/widgets.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-13T12:57:05.708Z", + "updatedAt": "2026-10-15T11:13:19.388Z", "widgets": [ { "id": "aiscript-health", From 96872d4948fe745363ad6944d8ad68adb06dd561 Mon Sep 17 00:00:00 2001 From: hitalin Date: Thu, 15 Oct 2026 20:19:47 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat(store):=20=E6=9C=AC=E5=AE=B6=20Misskey?= =?UTF-8?q?=20Web=20=E3=81=A7=E3=82=82=E5=8B=95=E3=81=8F=E3=83=97=E3=83=A9?= =?UTF-8?q?=E3=82=B0=E3=82=A4=E3=83=B3=E3=81=AF=E3=80=81=E6=9C=AC=E5=AE=B6?= =?UTF-8?q?=E3=81=8C=E6=B1=82=E3=82=81=E3=82=8B=E3=82=B9=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=97=E3=82=92=E8=A9=B3=E7=B4=B0=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=81=AB=E5=88=A5=E3=81=AB=E5=87=BA=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit meta.json の permissions を NoteDeck の権限キーに揃えると、両対応の プラグインで「本家ではどのスコープを求められるか」が詳細ページから 消えてしまう。plugin.is のメタブロックの permissions を契約情報の misskeyScopes として導出し、runsOn に misskey-web を含むプラグインでは 「Misskey Web scopes」として Permissions とは別の枠に表示する。 Co-Authored-By: Claude Opus 5.5 --- public/registry/index.json | 12 +-- public/registry/plugins.json | 183 +++++++++++++++++++++++--------- public/registry/queries.json | 2 +- public/registry/skills.json | 2 +- public/registry/themes.json | 2 +- public/registry/widgets.json | 2 +- scripts/lib/derive-contract.mjs | 17 +++ src/pages/PluginDetail.vue | 7 ++ src/types/index.ts | 2 + 9 files changed, 168 insertions(+), 61 deletions(-) diff --git a/public/registry/index.json b/public/registry/index.json index ad5e29e..ca44d0c 100644 --- a/public/registry/index.json +++ b/public/registry/index.json @@ -1,24 +1,24 @@ { "version": 1, - "updatedAt": "2026-10-15T11:13:19.388Z", + "updatedAt": "2026-10-15T11:17:46.820Z", "plugins": { "count": 41, - "updatedAt": "2026-10-15T11:13:19.388Z" + "updatedAt": "2026-10-15T11:17:46.820Z" }, "themes": { "count": 77, - "updatedAt": "2026-10-15T11:13:19.388Z" + "updatedAt": "2026-10-15T11:17:46.820Z" }, "widgets": { "count": 64, - "updatedAt": "2026-10-15T11:13:19.388Z" + "updatedAt": "2026-10-15T11:17:46.820Z" }, "skills": { "count": 44, - "updatedAt": "2026-10-15T11:13:19.388Z" + "updatedAt": "2026-10-15T11:17:46.820Z" }, "queries": { "count": 35, - "updatedAt": "2026-10-15T11:13:19.388Z" + "updatedAt": "2026-10-15T11:17:46.820Z" } } diff --git a/public/registry/plugins.json b/public/registry/plugins.json index fc441e9..ddbe100 100644 --- a/public/registry/plugins.json +++ b/public/registry/plugins.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-15T11:13:19.388Z", + "updatedAt": "2026-10-15T11:17:46.820Z", "plugins": [ { "id": "ai-actions", @@ -57,7 +57,11 @@ "user_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "ai.invoke", + "drafts.write" + ] } }, { @@ -121,7 +125,8 @@ "command" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -173,7 +178,10 @@ "note_action" ], "external": true, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "vault.use" + ] } }, { @@ -215,7 +223,8 @@ "note_post_interruptor" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -258,7 +267,8 @@ "note_post_interruptor" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -308,7 +318,10 @@ "note_action" ], "external": true, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "network.external" + ] } }, { @@ -361,7 +374,8 @@ "on:notification:new" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -405,7 +419,8 @@ "user_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -448,7 +463,8 @@ "post_form_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -505,7 +521,8 @@ "mkApi": [], "hooks": [], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -557,7 +574,8 @@ "command" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -612,7 +630,8 @@ "on:note:new" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -670,7 +689,8 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -694,7 +714,7 @@ "apiUrl": "https://store.notedeck.io/registry/plugins/smart-delete/api.json", "sha512": "bba0644c86ac0c45dbaf9349e029a698c7344e5a4c86f3bf10eb857b5455ece86c0d6b5eb1f0b7dfd38d3ab1175b71d10935fb756617838aa5673bfa65374504", "createdAt": "2026-07-20T09:16:14+09:00", - "updatedAt": "2026-09-25T18:20:03+09:00", + "updatedAt": "2026-10-15T20:13:44+09:00", "authorUrl": "https://github.com/hitalin", "license": "MIT", "locales": { @@ -733,7 +753,13 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "read:account", + "read:drive", + "write:drive", + "write:notes" + ] } }, { @@ -789,7 +815,8 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -813,7 +840,7 @@ "apiUrl": "https://store.notedeck.io/registry/plugins/dominator/api.json", "sha512": "cc9af17a82161008c7bb8a9f41e80f8de27e84e26c93839e95f5d465112dfe5ddcac598f6f88cd20f00fc79a77d41f5af77ef4a91289ed72dec0a1f9fbfa0f35", "createdAt": "2026-07-14T13:43:33+09:00", - "updatedAt": "2026-09-25T18:20:03+09:00", + "updatedAt": "2026-10-15T20:13:44+09:00", "authorUrl": "https://github.com/hitalin", "license": "MIT", "locales": { @@ -839,7 +866,10 @@ "user_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "read:account" + ] } }, { @@ -883,7 +913,8 @@ "note_view_interruptor" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -934,7 +965,10 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "memos.write" + ] } }, { @@ -986,7 +1020,10 @@ "note_action" ], "external": true, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "vault.use" + ] } }, { @@ -1008,7 +1045,7 @@ "apiUrl": "https://store.notedeck.io/registry/plugins/misskey-translate/api.json", "sha512": "99162928e722cb4abbb6512c3c1b8c20dd3f46a84af56fe9c0bdde135fb8da7de01205409083108f58f99dc5a887a8e2b7f64a15681468d73419b0069378834a", "createdAt": "2026-10-12T17:16:47+09:00", - "updatedAt": "2026-10-12T17:16:47+09:00", + "updatedAt": "2026-10-15T20:13:44+09:00", "authorUrl": "https://github.com/hitalin", "license": "MIT", "locales": { @@ -1039,7 +1076,10 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "read:account" + ] } }, { @@ -1062,7 +1102,7 @@ "apiUrl": "https://store.notedeck.io/registry/plugins/pakuru/api.json", "sha512": "1075e1d86a32040c67800dd0d9732b1fa27750b3f7a13b0815a65433a745e2d635aef6d793e68ba69dee5bb1cc0e66e301a1a9f37b895a93904bd8f10b3faa8d", "createdAt": "2026-07-13T22:03:54+09:00", - "updatedAt": "2026-09-25T18:20:03+09:00", + "updatedAt": "2026-10-15T20:13:44+09:00", "authorUrl": "https://github.com/hitalin", "license": "MIT", "locales": { @@ -1092,7 +1132,10 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "write:notes" + ] } }, { @@ -1115,7 +1158,7 @@ "apiUrl": "https://store.notedeck.io/registry/plugins/block-checker/api.json", "sha512": "e4fe2a6260892a7eba7439aeb716d2d914e9dd84dfcfe7d1c91aca8646ce86608deccc65353d43bd1e3cb2b519d61b6b98eade937dc328f022595ed302191a36", "createdAt": "2026-07-16T07:08:20+09:00", - "updatedAt": "2026-09-25T18:20:03+09:00", + "updatedAt": "2026-10-15T20:13:44+09:00", "authorUrl": "https://github.com/hitalin", "license": "MIT", "locales": { @@ -1140,7 +1183,10 @@ "user_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "read:account" + ] } }, { @@ -1164,7 +1210,7 @@ "apiUrl": "https://store.notedeck.io/registry/plugins/block-combo/api.json", "sha512": "2af88eca65cd26993f5326d8f1c279d0b5bc2eff083be24114b6d345a594e894f6c405d6fbff6dbd0930c7c8bcc21272354adff15de9107daaf12a28bf946c39", "createdAt": "2026-07-17T07:17:06+09:00", - "updatedAt": "2026-09-25T18:20:03+09:00", + "updatedAt": "2026-10-15T20:13:44+09:00", "authorUrl": "https://github.com/hitalin", "license": "MIT", "locales": { @@ -1197,7 +1243,12 @@ "user_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "read:account", + "write:blocks", + "write:mutes" + ] } }, { @@ -1221,7 +1272,7 @@ "apiUrl": "https://store.notedeck.io/registry/plugins/reaction-piggyback/api.json", "sha512": "f237acfb9f0532b64caecfdd1817691810064d8a844e613ac36269e38577a1a64d71903261aa0952dbfcb284c27e64dff224356629a7cfdff612324c5a8a507c", "createdAt": "2026-08-12T13:30:08+09:00", - "updatedAt": "2026-09-25T18:20:03+09:00", + "updatedAt": "2026-10-15T20:13:44+09:00", "authorUrl": "https://github.com/hitalin", "license": "MIT", "locales": { @@ -1252,7 +1303,10 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "write:reactions" + ] } }, { @@ -1309,7 +1363,8 @@ "user_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1354,7 +1409,8 @@ "post_form_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1416,7 +1472,8 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1459,7 +1516,8 @@ "note_view_interruptor" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1483,7 +1541,7 @@ "apiUrl": "https://store.notedeck.io/registry/plugins/same-emoji-react/api.json", "sha512": "5c6deb32aaf324f5a0699f99f88a6d481b96f71e0e1b77932f13f60b264faf0b4b923e657caa78328c25042c3b0e8d464428d097bb6a316bf1d301f9cdae567e", "createdAt": "2026-08-12T13:21:58+09:00", - "updatedAt": "2026-09-25T18:20:03+09:00", + "updatedAt": "2026-10-15T20:13:44+09:00", "authorUrl": "https://github.com/hitalin", "license": "MIT", "locales": { @@ -1514,7 +1572,10 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "write:reactions" + ] } }, { @@ -1557,7 +1618,8 @@ "post_form_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1601,7 +1663,8 @@ "post_form_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1656,7 +1719,10 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "clipboard" + ] } }, { @@ -1714,7 +1780,8 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1761,7 +1828,8 @@ "post_form_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1804,7 +1872,8 @@ "note_post_interruptor" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1857,7 +1926,8 @@ "mkApi": [], "hooks": [], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1905,7 +1975,8 @@ "user_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -1949,7 +2020,8 @@ "note_post_interruptor" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [] } }, { @@ -2000,7 +2072,10 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "files.export" + ] } }, { @@ -2023,7 +2098,7 @@ "apiUrl": "https://store.notedeck.io/registry/plugins/federation-checker/api.json", "sha512": "66791625edc52f7bd27cf4b95654216e7643c525e156f5f550f5b92cb29084dca45213b511b16616879334d245f9194906ac0a6a22c81048e8a440bf512eb323", "createdAt": "2026-07-16T07:49:09+09:00", - "updatedAt": "2026-09-25T18:20:03+09:00", + "updatedAt": "2026-10-15T20:13:44+09:00", "authorUrl": "https://github.com/hitalin", "license": "MIT", "locales": { @@ -2049,7 +2124,10 @@ "user_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "read:federation" + ] } }, { @@ -2103,7 +2181,10 @@ "note_action" ], "external": false, - "unresolved": [] + "unresolved": [], + "misskeyScopes": [ + "clipboard" + ] } } ] diff --git a/public/registry/queries.json b/public/registry/queries.json index ca44851..724e044 100644 --- a/public/registry/queries.json +++ b/public/registry/queries.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-15T11:13:19.388Z", + "updatedAt": "2026-10-15T11:17:46.820Z", "queries": [ { "id": "bot-only", diff --git a/public/registry/skills.json b/public/registry/skills.json index 459458a..d64efef 100644 --- a/public/registry/skills.json +++ b/public/registry/skills.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-15T11:13:19.388Z", + "updatedAt": "2026-10-15T11:17:46.820Z", "skills": [ { "id": "aiscript-surgeon", diff --git a/public/registry/themes.json b/public/registry/themes.json index 624adb1..c4ea883 100644 --- a/public/registry/themes.json +++ b/public/registry/themes.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-15T11:13:19.388Z", + "updatedAt": "2026-10-15T11:17:46.820Z", "themes": [ { "id": "adwaita-dark", diff --git a/public/registry/widgets.json b/public/registry/widgets.json index 8a44879..3932ec0 100644 --- a/public/registry/widgets.json +++ b/public/registry/widgets.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-15T11:13:19.388Z", + "updatedAt": "2026-10-15T11:17:46.820Z", "widgets": [ { "id": "aiscript-health", diff --git a/scripts/lib/derive-contract.mjs b/scripts/lib/derive-contract.mjs index 6a31566..c95745c 100644 --- a/scripts/lib/derive-contract.mjs +++ b/scripts/lib/derive-contract.mjs @@ -349,6 +349,22 @@ export function computeProfile(keys, permissionPresets) { * @param {object} [meta] meta.json (plugins / widgets)。skills は frontmatter を source から読むので省略可 * @param {object} [contract] 契約スナップショット (既定: scripts/contract/notedeck-contract.json) */ +// プラグインのメタブロック (`### { … }`) の permissions = 本家 Misskey Web が +// トークン発行時に求めるスコープ。NoteDeck の permission key とは別の語彙なので +// meta.json の permissions とは混ぜず、詳細ページで別に見せる。読めなければ [] +function misskeyScopesOf(source) { + let ast + try { + ast = Parser.parse(source) + } catch { + return [] + } + const meta = ast.find((n) => n.type === 'meta' && n.name == null) + const perms = meta?.value?.type === 'obj' ? meta.value.value.get('permissions') : undefined + if (perms?.type !== 'arr') return [] + return sortedUnique(perms.value.filter((v) => v.type === 'str').map((v) => v.value)) +} + export function deriveContract(kind, source, meta = {}, contract = (defaultContract ??= loadContract())) { const k = normalizeKind(kind) const issues = [] @@ -444,6 +460,7 @@ export function deriveContract(kind, source, meta = {}, contract = (defaultContr hooks: sortedUnique(analysis.hooks), external: analysis.external, unresolved: [...analysis.unresolved], + ...(k === 'plugin' ? { misskeyScopes: misskeyScopesOf(source) } : {}), issues, ...(analysis.parseError ? { parseError: analysis.parseError } : {}), } diff --git a/src/pages/PluginDetail.vue b/src/pages/PluginDetail.vue index 4c154fe..2433ae0 100644 --- a/src/pages/PluginDetail.vue +++ b/src/pages/PluginDetail.vue @@ -178,6 +178,13 @@ function openMisskeyInstall() { :empty-text="t.detail.noPermissions" /> + + diff --git a/src/types/index.ts b/src/types/index.ts index 3f16d3d..c72341b 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -131,6 +131,8 @@ export interface ItemContract { external: boolean // 設定由来の宛先など、静的に判定できなかった呼び出し unresolved: string[] + // プラグインのみ: 本家 Misskey Web がトークン発行時に求めるスコープ (メタブロックの permissions) + misskeyScopes?: string[] } // NoteDeck のカラムフィルタクエリ (notedeck#783)。