@overcrow/mcp 0.0.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +91 -1
- package/dist/audit/index.js +103 -0
- package/dist/audit/lexer.js +417 -0
- package/dist/audit/project.js +200 -0
- package/dist/audit/rules.js +661 -0
- package/dist/bootstrap/download.js +229 -0
- package/dist/bootstrap/install.js +280 -0
- package/dist/bootstrap/pin.js +85 -0
- package/dist/bootstrap/pin.json +119 -0
- package/dist/bootstrap/zip.js +258 -0
- package/dist/cli.js +200 -0
- package/dist/confine.js +244 -0
- package/dist/content/docs/en/cli.md +768 -0
- package/dist/content/docs/en/creator-space.md +78 -0
- package/dist/content/docs/en/dev-channel.md +130 -0
- package/dist/content/docs/en/elements.md +469 -0
- package/dist/content/docs/en/forms.md +328 -0
- package/dist/content/docs/en/guide.md +252 -0
- package/dist/content/docs/en/index.md +85 -0
- package/dist/content/docs/en/limits.md +241 -0
- package/dist/content/docs/en/logic.md +446 -0
- package/dist/content/docs/en/manifest.md +388 -0
- package/dist/content/docs/en/mcp.md +165 -0
- package/dist/content/docs/en/package.md +131 -0
- package/dist/content/docs/en/publish-a-widget.md +94 -0
- package/dist/content/docs/en/publish-keys.md +95 -0
- package/dist/content/docs/en/publishing.md +167 -0
- package/dist/content/docs/en/reference.md +55 -0
- package/dist/content/docs/en/result-shapes.md +332 -0
- package/dist/content/docs/en/sdk.md +295 -0
- package/dist/content/docs/en/security.md +115 -0
- package/dist/content/docs/en/service-reference.md +344 -0
- package/dist/content/docs/en/services.md +517 -0
- package/dist/content/docs/en/style-properties.md +270 -0
- package/dist/content/docs/en/style.md +266 -0
- package/dist/content/docs/en/testing.md +400 -0
- package/dist/content/docs/en/verified-domain.md +46 -0
- package/dist/content/docs/en/view.md +338 -0
- package/dist/content/docs/en/widget-listing.md +65 -0
- package/dist/content/docs/en/widget-review.md +57 -0
- package/dist/content/docs/en/widget-statistics.md +134 -0
- package/dist/content/docs/en/widgets.md +76 -0
- package/dist/content/docs/fr/cli.md +802 -0
- package/dist/content/docs/fr/creator-space.md +83 -0
- package/dist/content/docs/fr/dev-channel.md +140 -0
- package/dist/content/docs/fr/elements.md +475 -0
- package/dist/content/docs/fr/forms.md +341 -0
- package/dist/content/docs/fr/guide.md +263 -0
- package/dist/content/docs/fr/index.md +90 -0
- package/dist/content/docs/fr/limits.md +244 -0
- package/dist/content/docs/fr/logic.md +461 -0
- package/dist/content/docs/fr/manifest.md +401 -0
- package/dist/content/docs/fr/mcp.md +173 -0
- package/dist/content/docs/fr/package.md +139 -0
- package/dist/content/docs/fr/publish-a-widget.md +101 -0
- package/dist/content/docs/fr/publish-keys.md +97 -0
- package/dist/content/docs/fr/publishing.md +177 -0
- package/dist/content/docs/fr/reference.md +59 -0
- package/dist/content/docs/fr/result-shapes.md +333 -0
- package/dist/content/docs/fr/sdk.md +301 -0
- package/dist/content/docs/fr/security.md +129 -0
- package/dist/content/docs/fr/service-reference.md +346 -0
- package/dist/content/docs/fr/services.md +540 -0
- package/dist/content/docs/fr/style-properties.md +272 -0
- package/dist/content/docs/fr/style.md +281 -0
- package/dist/content/docs/fr/testing.md +417 -0
- package/dist/content/docs/fr/verified-domain.md +49 -0
- package/dist/content/docs/fr/view.md +352 -0
- package/dist/content/docs/fr/widget-listing.md +69 -0
- package/dist/content/docs/fr/widget-review.md +59 -0
- package/dist/content/docs/fr/widget-statistics.md +141 -0
- package/dist/content/docs/fr/widgets.md +81 -0
- package/dist/content/examples/clock/LICENSE +21 -0
- package/dist/content/examples/clock/README.md +75 -0
- package/dist/content/examples/clock/listing.json +19 -0
- package/dist/content/examples/clock/locales/en.json +4 -0
- package/dist/content/examples/clock/locales/fr.json +4 -0
- package/dist/content/examples/clock/logic.ts +85 -0
- package/dist/content/examples/clock/manifest.json +44 -0
- package/dist/content/examples/clock/package.json +16 -0
- package/dist/content/examples/clock/style.ocss +26 -0
- package/dist/content/examples/clock/tests/hidden.scenario.json +68 -0
- package/dist/content/examples/clock/tests/load-logic.mjs +22 -0
- package/dist/content/examples/clock/tests/logic.test.mjs +89 -0
- package/dist/content/examples/clock/tests/options.scenario.json +108 -0
- package/dist/content/examples/clock/tests/preview.scenario.json +25 -0
- package/dist/content/examples/clock/tests/render.scenario.json +94 -0
- package/dist/content/examples/clock/tests/summer-time.scenario.json +74 -0
- package/dist/content/examples/clock/tests/ticks.scenario.json +120 -0
- package/dist/content/examples/clock/tsconfig.json +16 -0
- package/dist/content/examples/clock/view.ocml +8 -0
- package/dist/content/examples/countdown/LICENSE +20 -0
- package/dist/content/examples/countdown/listing.json +10 -0
- package/dist/content/examples/countdown/locales/en.json +15 -0
- package/dist/content/examples/countdown/locales/fr.json +15 -0
- package/dist/content/examples/countdown/logic.ts +179 -0
- package/dist/content/examples/countdown/manifest.json +34 -0
- package/dist/content/examples/countdown/package.json +15 -0
- package/dist/content/examples/countdown/style.ocss +94 -0
- package/dist/content/examples/countdown/tsconfig.json +16 -0
- package/dist/content/examples/countdown/view.ocml +42 -0
- package/dist/content/examples/fps/LICENSE +21 -0
- package/dist/content/examples/fps/README.md +64 -0
- package/dist/content/examples/fps/listing.json +19 -0
- package/dist/content/examples/fps/locales/en.json +11 -0
- package/dist/content/examples/fps/locales/fr.json +11 -0
- package/dist/content/examples/fps/logic.ts +64 -0
- package/dist/content/examples/fps/manifest.json +30 -0
- package/dist/content/examples/fps/package.json +16 -0
- package/dist/content/examples/fps/style.ocss +31 -0
- package/dist/content/examples/fps/submission.json +8 -0
- package/dist/content/examples/fps/tests/label.scenario.json +63 -0
- package/dist/content/examples/fps/tests/load-logic.mjs +22 -0
- package/dist/content/examples/fps/tests/logic.test.mjs +60 -0
- package/dist/content/examples/fps/tests/preview.scenario.json +29 -0
- package/dist/content/examples/fps/tests/refused.scenario.json +20 -0
- package/dist/content/examples/fps/tests/render.scenario.json +96 -0
- package/dist/content/examples/fps/tests/stale.scenario.json +91 -0
- package/dist/content/examples/fps/tests/unavailable.scenario.json +111 -0
- package/dist/content/examples/fps/tsconfig.json +16 -0
- package/dist/content/examples/fps/view.ocml +11 -0
- package/dist/content/examples/media/LICENSE +21 -0
- package/dist/content/examples/media/README.md +147 -0
- package/dist/content/examples/media/listing.json +19 -0
- package/dist/content/examples/media/locales/en.json +11 -0
- package/dist/content/examples/media/locales/fr.json +11 -0
- package/dist/content/examples/media/logic.ts +191 -0
- package/dist/content/examples/media/manifest.json +35 -0
- package/dist/content/examples/media/package.json +16 -0
- package/dist/content/examples/media/style.ocss +148 -0
- package/dist/content/examples/media/submission.json +12 -0
- package/dist/content/examples/media/tests/covers.scenario.json +144 -0
- package/dist/content/examples/media/tests/gesture.scenario.json +173 -0
- package/dist/content/examples/media/tests/load-logic.mjs +22 -0
- package/dist/content/examples/media/tests/logic.test.mjs +176 -0
- package/dist/content/examples/media/tests/marquee.scenario.json +127 -0
- package/dist/content/examples/media/tests/preview.scenario.json +52 -0
- package/dist/content/examples/media/tests/read-only.scenario.json +53 -0
- package/dist/content/examples/media/tests/refused.scenario.json +22 -0
- package/dist/content/examples/media/tests/refused.test.mjs +31 -0
- package/dist/content/examples/media/tests/render.scenario.json +136 -0
- package/dist/content/examples/media/tests/states.scenario.json +257 -0
- package/dist/content/examples/media/tests/unavailable.scenario.json +120 -0
- package/dist/content/examples/media/tsconfig.json +16 -0
- package/dist/content/examples/media/view.ocml +41 -0
- package/dist/content/examples/notes/LICENSE +21 -0
- package/dist/content/examples/notes/README.md +219 -0
- package/dist/content/examples/notes/listing.json +19 -0
- package/dist/content/examples/notes/locales/en.json +25 -0
- package/dist/content/examples/notes/locales/fr.json +25 -0
- package/dist/content/examples/notes/logic.ts +799 -0
- package/dist/content/examples/notes/manifest.json +40 -0
- package/dist/content/examples/notes/package.json +16 -0
- package/dist/content/examples/notes/style.ocss +469 -0
- package/dist/content/examples/notes/submission.json +12 -0
- package/dist/content/examples/notes/tests/checks.scenario.json +237 -0
- package/dist/content/examples/notes/tests/create.scenario.json +260 -0
- package/dist/content/examples/notes/tests/delete.scenario.json +342 -0
- package/dist/content/examples/notes/tests/drafts.scenario.json +714 -0
- package/dist/content/examples/notes/tests/editor.scenario.json +232 -0
- package/dist/content/examples/notes/tests/frame.scenario.json +93 -0
- package/dist/content/examples/notes/tests/interactive.scenario.json +344 -0
- package/dist/content/examples/notes/tests/limits.scenario.json +1351 -0
- package/dist/content/examples/notes/tests/load-logic.mjs +22 -0
- package/dist/content/examples/notes/tests/logic.test.mjs +514 -0
- package/dist/content/examples/notes/tests/preview.scenario.json +99 -0
- package/dist/content/examples/notes/tests/read-only.scenario.json +105 -0
- package/dist/content/examples/notes/tests/refused.scenario.json +33 -0
- package/dist/content/examples/notes/tests/save.scenario.json +378 -0
- package/dist/content/examples/notes/tests/states.scenario.json +640 -0
- package/dist/content/examples/notes/tests/typing.scenario.json +562 -0
- package/dist/content/examples/notes/tests/unavailable.scenario.json +246 -0
- package/dist/content/examples/notes/tsconfig.json +16 -0
- package/dist/content/examples/notes/view.ocml +154 -0
- package/dist/content/examples/performance/LICENSE +21 -0
- package/dist/content/examples/performance/README.md +134 -0
- package/dist/content/examples/performance/listing.json +19 -0
- package/dist/content/examples/performance/locales/en.json +20 -0
- package/dist/content/examples/performance/locales/fr.json +20 -0
- package/dist/content/examples/performance/logic.ts +210 -0
- package/dist/content/examples/performance/manifest.json +83 -0
- package/dist/content/examples/performance/package.json +16 -0
- package/dist/content/examples/performance/style.ocss +75 -0
- package/dist/content/examples/performance/submission.json +12 -0
- package/dist/content/examples/performance/tests/fahrenheit.scenario.json +110 -0
- package/dist/content/examples/performance/tests/horizontal.scenario.json +96 -0
- package/dist/content/examples/performance/tests/load-logic.mjs +22 -0
- package/dist/content/examples/performance/tests/logic.test.mjs +226 -0
- package/dist/content/examples/performance/tests/menu.scenario.json +170 -0
- package/dist/content/examples/performance/tests/no-fps-source.scenario.json +47 -0
- package/dist/content/examples/performance/tests/preview.scenario.json +45 -0
- package/dist/content/examples/performance/tests/refused.scenario.json +20 -0
- package/dist/content/examples/performance/tests/refused.test.mjs +19 -0
- package/dist/content/examples/performance/tests/region.scenario.json +89 -0
- package/dist/content/examples/performance/tests/render.scenario.json +112 -0
- package/dist/content/examples/performance/tests/sources.scenario.json +151 -0
- package/dist/content/examples/performance/tests/stale.scenario.json +111 -0
- package/dist/content/examples/performance/tests/telemetry-only.scenario.json +44 -0
- package/dist/content/examples/performance/tests/thresholds.scenario.json +147 -0
- package/dist/content/examples/performance/tests/waiting.scenario.json +105 -0
- package/dist/content/examples/performance/tsconfig.json +16 -0
- package/dist/content/examples/performance/view.ocml +18 -0
- package/dist/content/examples/playervox-journal/LICENSE +21 -0
- package/dist/content/examples/playervox-journal/README.md +150 -0
- package/dist/content/examples/playervox-journal/listing.json +19 -0
- package/dist/content/examples/playervox-journal/locales/en.json +25 -0
- package/dist/content/examples/playervox-journal/locales/fr.json +25 -0
- package/dist/content/examples/playervox-journal/logic.ts +556 -0
- package/dist/content/examples/playervox-journal/manifest.json +19 -0
- package/dist/content/examples/playervox-journal/package.json +16 -0
- package/dist/content/examples/playervox-journal/style.ocss +142 -0
- package/dist/content/examples/playervox-journal/submission.json +12 -0
- package/dist/content/examples/playervox-journal/tests/changes.scenario.json +482 -0
- package/dist/content/examples/playervox-journal/tests/delete.scenario.json +432 -0
- package/dist/content/examples/playervox-journal/tests/frame.scenario.json +169 -0
- package/dist/content/examples/playervox-journal/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-journal/tests/logic.test.mjs +349 -0
- package/dist/content/examples/playervox-journal/tests/paging.scenario.json +428 -0
- package/dist/content/examples/playervox-journal/tests/preview.scenario.json +184 -0
- package/dist/content/examples/playervox-journal/tests/read-only.scenario.json +157 -0
- package/dist/content/examples/playervox-journal/tests/refused.scenario.json +39 -0
- package/dist/content/examples/playervox-journal/tests/scale.scenario.json +286 -0
- package/dist/content/examples/playervox-journal/tests/signed-out.scenario.json +134 -0
- package/dist/content/examples/playervox-journal/tests/states.scenario.json +741 -0
- package/dist/content/examples/playervox-journal/tests/unavailable.scenario.json +183 -0
- package/dist/content/examples/playervox-journal/tsconfig.json +16 -0
- package/dist/content/examples/playervox-journal/view.ocml +52 -0
- package/dist/content/examples/playervox-rating/LICENSE +21 -0
- package/dist/content/examples/playervox-rating/README.md +166 -0
- package/dist/content/examples/playervox-rating/listing.json +19 -0
- package/dist/content/examples/playervox-rating/locales/en.json +35 -0
- package/dist/content/examples/playervox-rating/locales/fr.json +35 -0
- package/dist/content/examples/playervox-rating/logic.ts +581 -0
- package/dist/content/examples/playervox-rating/manifest.json +19 -0
- package/dist/content/examples/playervox-rating/package.json +16 -0
- package/dist/content/examples/playervox-rating/style.ocss +333 -0
- package/dist/content/examples/playervox-rating/submission.json +12 -0
- package/dist/content/examples/playervox-rating/tests/account.scenario.json +125 -0
- package/dist/content/examples/playervox-rating/tests/bounds.scenario.json +73 -0
- package/dist/content/examples/playervox-rating/tests/draft.scenario.json +199 -0
- package/dist/content/examples/playervox-rating/tests/form.scenario.json +142 -0
- package/dist/content/examples/playervox-rating/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-rating/tests/logic.test.mjs +346 -0
- package/dist/content/examples/playervox-rating/tests/offline.scenario.json +142 -0
- package/dist/content/examples/playervox-rating/tests/preview.scenario.json +44 -0
- package/dist/content/examples/playervox-rating/tests/publish-keyboard.scenario.json +221 -0
- package/dist/content/examples/playervox-rating/tests/publish-pointer.scenario.json +314 -0
- package/dist/content/examples/playervox-rating/tests/read-only.scenario.json +70 -0
- package/dist/content/examples/playervox-rating/tests/refused.scenario.json +45 -0
- package/dist/content/examples/playervox-rating/tests/states.scenario.json +362 -0
- package/dist/content/examples/playervox-rating/tsconfig.json +16 -0
- package/dist/content/examples/playervox-rating/view.ocml +62 -0
- package/dist/content/examples/playervox-reviews/LICENSE +21 -0
- package/dist/content/examples/playervox-reviews/README.md +194 -0
- package/dist/content/examples/playervox-reviews/listing.json +19 -0
- package/dist/content/examples/playervox-reviews/locales/en.json +32 -0
- package/dist/content/examples/playervox-reviews/locales/fr.json +32 -0
- package/dist/content/examples/playervox-reviews/logic.ts +822 -0
- package/dist/content/examples/playervox-reviews/manifest.json +30 -0
- package/dist/content/examples/playervox-reviews/package.json +16 -0
- package/dist/content/examples/playervox-reviews/style.ocss +260 -0
- package/dist/content/examples/playervox-reviews/submission.json +8 -0
- package/dist/content/examples/playervox-reviews/tests/account.scenario.json +249 -0
- package/dist/content/examples/playervox-reviews/tests/bounds.scenario.json +336 -0
- package/dist/content/examples/playervox-reviews/tests/changes.scenario.json +515 -0
- package/dist/content/examples/playervox-reviews/tests/filter.scenario.json +400 -0
- package/dist/content/examples/playervox-reviews/tests/frame.scenario.json +185 -0
- package/dist/content/examples/playervox-reviews/tests/keyboard.scenario.json +188 -0
- package/dist/content/examples/playervox-reviews/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-reviews/tests/logic.test.mjs +559 -0
- package/dist/content/examples/playervox-reviews/tests/offline-start.scenario.json +152 -0
- package/dist/content/examples/playervox-reviews/tests/offline.scenario.json +311 -0
- package/dist/content/examples/playervox-reviews/tests/paging.scenario.json +497 -0
- package/dist/content/examples/playervox-reviews/tests/preview.scenario.json +286 -0
- package/dist/content/examples/playervox-reviews/tests/reading.scenario.json +591 -0
- package/dist/content/examples/playervox-reviews/tests/refused.scenario.json +54 -0
- package/dist/content/examples/playervox-reviews/tests/scale.scenario.json +303 -0
- package/dist/content/examples/playervox-reviews/tests/states.scenario.json +700 -0
- package/dist/content/examples/playervox-reviews/tests/unavailable.scenario.json +192 -0
- package/dist/content/examples/playervox-reviews/tsconfig.json +16 -0
- package/dist/content/examples/playervox-reviews/view.ocml +110 -0
- package/dist/content/examples/playervox-score/LICENSE +21 -0
- package/dist/content/examples/playervox-score/README.md +131 -0
- package/dist/content/examples/playervox-score/listing.json +19 -0
- package/dist/content/examples/playervox-score/locales/en.json +23 -0
- package/dist/content/examples/playervox-score/locales/fr.json +23 -0
- package/dist/content/examples/playervox-score/logic.ts +430 -0
- package/dist/content/examples/playervox-score/manifest.json +47 -0
- package/dist/content/examples/playervox-score/package.json +16 -0
- package/dist/content/examples/playervox-score/style.ocss +247 -0
- package/dist/content/examples/playervox-score/submission.json +8 -0
- package/dist/content/examples/playervox-score/tests/grades.scenario.json +279 -0
- package/dist/content/examples/playervox-score/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-score/tests/logic.test.mjs +229 -0
- package/dist/content/examples/playervox-score/tests/options.scenario.json +302 -0
- package/dist/content/examples/playervox-score/tests/preview.scenario.json +68 -0
- package/dist/content/examples/playervox-score/tests/pulse.scenario.json +157 -0
- package/dist/content/examples/playervox-score/tests/refused.scenario.json +21 -0
- package/dist/content/examples/playervox-score/tests/signed-out.scenario.json +46 -0
- package/dist/content/examples/playervox-score/tests/states.scenario.json +450 -0
- package/dist/content/examples/playervox-score/tests/unavailable.scenario.json +84 -0
- package/dist/content/examples/playervox-score/tsconfig.json +16 -0
- package/dist/content/examples/playervox-score/view.ocml +51 -0
- package/dist/content/examples/session/LICENSE +21 -0
- package/dist/content/examples/session/README.md +57 -0
- package/dist/content/examples/session/listing.json +19 -0
- package/dist/content/examples/session/locales/en.json +3 -0
- package/dist/content/examples/session/locales/fr.json +3 -0
- package/dist/content/examples/session/logic.ts +26 -0
- package/dist/content/examples/session/manifest.json +19 -0
- package/dist/content/examples/session/package.json +16 -0
- package/dist/content/examples/session/style.ocss +16 -0
- package/dist/content/examples/session/submission.json +8 -0
- package/dist/content/examples/session/tests/hidden.scenario.json +45 -0
- package/dist/content/examples/session/tests/load-logic.mjs +22 -0
- package/dist/content/examples/session/tests/logic.test.mjs +37 -0
- package/dist/content/examples/session/tests/preview.scenario.json +28 -0
- package/dist/content/examples/session/tests/refused.scenario.json +20 -0
- package/dist/content/examples/session/tests/refused.test.mjs +16 -0
- package/dist/content/examples/session/tests/render.scenario.json +95 -0
- package/dist/content/examples/session/tests/ticks.scenario.json +139 -0
- package/dist/content/examples/session/tests/unknown.scenario.json +37 -0
- package/dist/content/examples/session/tsconfig.json +16 -0
- package/dist/content/examples/session/view.ocml +11 -0
- package/dist/content/examples/stopwatch/LICENSE +21 -0
- package/dist/content/examples/stopwatch/README.md +99 -0
- package/dist/content/examples/stopwatch/listing.json +19 -0
- package/dist/content/examples/stopwatch/locales/en.json +8 -0
- package/dist/content/examples/stopwatch/locales/fr.json +8 -0
- package/dist/content/examples/stopwatch/logic.ts +93 -0
- package/dist/content/examples/stopwatch/manifest.json +19 -0
- package/dist/content/examples/stopwatch/package.json +16 -0
- package/dist/content/examples/stopwatch/style.ocss +54 -0
- package/dist/content/examples/stopwatch/submission.json +12 -0
- package/dist/content/examples/stopwatch/tests/errors.scenario.json +121 -0
- package/dist/content/examples/stopwatch/tests/gesture.scenario.json +154 -0
- package/dist/content/examples/stopwatch/tests/hidden.scenario.json +57 -0
- package/dist/content/examples/stopwatch/tests/hundredths.scenario.json +173 -0
- package/dist/content/examples/stopwatch/tests/load-logic.mjs +22 -0
- package/dist/content/examples/stopwatch/tests/logic.test.mjs +99 -0
- package/dist/content/examples/stopwatch/tests/preview.scenario.json +36 -0
- package/dist/content/examples/stopwatch/tests/read-only.scenario.json +42 -0
- package/dist/content/examples/stopwatch/tests/read-only.test.mjs +18 -0
- package/dist/content/examples/stopwatch/tests/refused.scenario.json +22 -0
- package/dist/content/examples/stopwatch/tests/refused.test.mjs +18 -0
- package/dist/content/examples/stopwatch/tests/render.scenario.json +105 -0
- package/dist/content/examples/stopwatch/tests/states.scenario.json +246 -0
- package/dist/content/examples/stopwatch/tests/unknown.scenario.json +40 -0
- package/dist/content/examples/stopwatch/tsconfig.json +16 -0
- package/dist/content/examples/stopwatch/view.ocml +29 -0
- package/dist/content/examples/twitch-chat/LICENSE +21 -0
- package/dist/content/examples/twitch-chat/README.md +283 -0
- package/dist/content/examples/twitch-chat/listing.json +19 -0
- package/dist/content/examples/twitch-chat/locales/en.json +52 -0
- package/dist/content/examples/twitch-chat/locales/fr.json +52 -0
- package/dist/content/examples/twitch-chat/logic.ts +887 -0
- package/dist/content/examples/twitch-chat/manifest.json +33 -0
- package/dist/content/examples/twitch-chat/package.json +16 -0
- package/dist/content/examples/twitch-chat/style.ocss +544 -0
- package/dist/content/examples/twitch-chat/submission.json +12 -0
- package/dist/content/examples/twitch-chat/tests/account.scenario.json +325 -0
- package/dist/content/examples/twitch-chat/tests/burst.scenario.json +1866 -0
- package/dist/content/examples/twitch-chat/tests/channel-refused.scenario.json +372 -0
- package/dist/content/examples/twitch-chat/tests/channel.scenario.json +480 -0
- package/dist/content/examples/twitch-chat/tests/draft.scenario.json +279 -0
- package/dist/content/examples/twitch-chat/tests/fade.scenario.json +269 -0
- package/dist/content/examples/twitch-chat/tests/failures.scenario.json +420 -0
- package/dist/content/examples/twitch-chat/tests/favorites.scenario.json +376 -0
- package/dist/content/examples/twitch-chat/tests/frame.scenario.json +152 -0
- package/dist/content/examples/twitch-chat/tests/lifetime.scenario.json +186 -0
- package/dist/content/examples/twitch-chat/tests/load-logic.mjs +22 -0
- package/dist/content/examples/twitch-chat/tests/logic.test.mjs +1053 -0
- package/dist/content/examples/twitch-chat/tests/passive.scenario.json +536 -0
- package/dist/content/examples/twitch-chat/tests/preview.scenario.json +147 -0
- package/dist/content/examples/twitch-chat/tests/read-only.scenario.json +202 -0
- package/dist/content/examples/twitch-chat/tests/read-only.test.mjs +63 -0
- package/dist/content/examples/twitch-chat/tests/refused.scenario.json +65 -0
- package/dist/content/examples/twitch-chat/tests/refused.test.mjs +43 -0
- package/dist/content/examples/twitch-chat/tests/render.scenario.json +347 -0
- package/dist/content/examples/twitch-chat/tests/reply.scenario.json +384 -0
- package/dist/content/examples/twitch-chat/tests/send-refused.scenario.json +383 -0
- package/dist/content/examples/twitch-chat/tests/send.scenario.json +300 -0
- package/dist/content/examples/twitch-chat/tests/states.scenario.json +455 -0
- package/dist/content/examples/twitch-chat/tests/unavailable.scenario.json +256 -0
- package/dist/content/examples/twitch-chat/tests/unread.scenario.json +997 -0
- package/dist/content/examples/twitch-chat/tsconfig.json +16 -0
- package/dist/content/examples/twitch-chat/view.ocml +141 -0
- package/dist/content/examples/warframe-market/LICENSE +21 -0
- package/dist/content/examples/warframe-market/README.md +176 -0
- package/dist/content/examples/warframe-market/listing.json +19 -0
- package/dist/content/examples/warframe-market/locales/en.json +44 -0
- package/dist/content/examples/warframe-market/locales/fr.json +44 -0
- package/dist/content/examples/warframe-market/logic.ts +1265 -0
- package/dist/content/examples/warframe-market/manifest.json +92 -0
- package/dist/content/examples/warframe-market/package.json +16 -0
- package/dist/content/examples/warframe-market/style.ocss +422 -0
- package/dist/content/examples/warframe-market/submission.json +24 -0
- package/dist/content/examples/warframe-market/tests/bounds.scenario.json +60 -0
- package/dist/content/examples/warframe-market/tests/cached.scenario.json +70 -0
- package/dist/content/examples/warframe-market/tests/detail.scenario.json +251 -0
- package/dist/content/examples/warframe-market/tests/errors.scenario.json +105 -0
- package/dist/content/examples/warframe-market/tests/fixtures.json +295 -0
- package/dist/content/examples/warframe-market/tests/load-logic.mjs +22 -0
- package/dist/content/examples/warframe-market/tests/logic.test.mjs +505 -0
- package/dist/content/examples/warframe-market/tests/no-clipboard.scenario.json +104 -0
- package/dist/content/examples/warframe-market/tests/passive.scenario.json +87 -0
- package/dist/content/examples/warframe-market/tests/preview.scenario.json +146 -0
- package/dist/content/examples/warframe-market/tests/refresh.scenario.json +56 -0
- package/dist/content/examples/warframe-market/tests/refused.scenario.json +74 -0
- package/dist/content/examples/warframe-market/tests/render.scenario.json +210 -0
- package/dist/content/examples/warframe-market/tests/search.scenario.json +189 -0
- package/dist/content/examples/warframe-market/tests/unavailable.scenario.json +54 -0
- package/dist/content/examples/warframe-market/tsconfig.json +16 -0
- package/dist/content/examples/warframe-market/view.ocml +116 -0
- package/dist/content/examples/weather/LICENSE +20 -0
- package/dist/content/examples/weather/listing.json +10 -0
- package/dist/content/examples/weather/locales/en.json +9 -0
- package/dist/content/examples/weather/locales/fr.json +9 -0
- package/dist/content/examples/weather/logic.ts +62 -0
- package/dist/content/examples/weather/manifest.json +51 -0
- package/dist/content/examples/weather/package.json +15 -0
- package/dist/content/examples/weather/style.ocss +29 -0
- package/dist/content/examples/weather/submission.json +17 -0
- package/dist/content/examples/weather/tsconfig.json +16 -0
- package/dist/content/examples/weather/view.ocml +12 -0
- package/dist/content/index.json +3705 -0
- package/dist/content/reference/errors.json +1924 -0
- package/dist/content/reference/limits.json +1154 -0
- package/dist/content/reference/manifest.md +223 -0
- package/dist/content/reference/permissions.json +413 -0
- package/dist/content/templates/blank/locales/en.json +3 -0
- package/dist/content/templates/blank/locales/fr.json +3 -0
- package/dist/content/templates/blank/logic.ts +7 -0
- package/dist/content/templates/blank/manifest.json +16 -0
- package/dist/content/templates/blank/style.ocss +10 -0
- package/dist/content/templates/blank/tests/example.scenario.json +10 -0
- package/dist/content/templates/blank/view.ocml +6 -0
- package/dist/content/templates/chart/locales/en.json +3 -0
- package/dist/content/templates/chart/locales/fr.json +3 -0
- package/dist/content/templates/chart/logic.ts +27 -0
- package/dist/content/templates/chart/manifest.json +16 -0
- package/dist/content/templates/chart/style.ocss +27 -0
- package/dist/content/templates/chart/tests/example.scenario.json +10 -0
- package/dist/content/templates/chart/view.ocml +10 -0
- package/dist/content/templates/counter/locales/en.json +4 -0
- package/dist/content/templates/counter/locales/fr.json +4 -0
- package/dist/content/templates/counter/logic.ts +20 -0
- package/dist/content/templates/counter/manifest.json +16 -0
- package/dist/content/templates/counter/style.ocss +26 -0
- package/dist/content/templates/counter/tests/example.scenario.json +11 -0
- package/dist/content/templates/counter/view.ocml +13 -0
- package/dist/content/templates/list/locales/en.json +8 -0
- package/dist/content/templates/list/locales/fr.json +8 -0
- package/dist/content/templates/list/logic.ts +35 -0
- package/dist/content/templates/list/manifest.json +16 -0
- package/dist/content/templates/list/style.ocss +42 -0
- package/dist/content/templates/list/tests/example.scenario.json +10 -0
- package/dist/content/templates/list/view.ocml +17 -0
- package/dist/content/templates/shared/LICENSE +20 -0
- package/dist/content/templates/shared/package.json +14 -0
- package/dist/content/templates/shared/tsconfig.json +16 -0
- package/dist/content.js +68 -0
- package/dist/env.js +156 -0
- package/dist/fingerprint.js +32 -0
- package/dist/hidden.js +47 -0
- package/dist/ids.js +27 -0
- package/dist/index.js +82 -0
- package/dist/knowledge.js +222 -0
- package/dist/npm.js +149 -0
- package/dist/prompts.js +47 -0
- package/dist/resources.js +82 -0
- package/dist/run.js +120 -0
- package/dist/server.js +43 -0
- package/dist/session.js +205 -0
- package/dist/sources.js +218 -0
- package/dist/text.js +80 -0
- package/dist/texts.js +44 -0
- package/dist/tools/audit.js +105 -0
- package/dist/tools/build.js +453 -0
- package/dist/tools/common.js +122 -0
- package/dist/tools/docs.js +196 -0
- package/dist/tools/preview.js +87 -0
- package/dist/tools/project.js +183 -0
- package/dist/tools/setup.js +146 -0
- package/dist/tools/submission.js +369 -0
- package/dist/version.js +3 -0
- package/npm-shrinkwrap.json +402 -0
- package/package.json +50 -4
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
# Le manifeste
|
|
2
|
+
|
|
3
|
+
`manifest.json` dit à PlayerVox OverCrow ce qu’est un widget avant que son
|
|
4
|
+
code ne s’exécute : son identité et sa version, ses noms, les tailles qu’il
|
|
5
|
+
accepte, les permissions qu’il demande et les lignes qu’il ajoute à son menu
|
|
6
|
+
d’options. Vous l’écrivez à la main ; il est empaqueté tel quel.
|
|
7
|
+
|
|
8
|
+
Le fichier est un seul objet JSON strict. Une marque d’ordre des octets, une
|
|
9
|
+
clé en double, des données après l’objet ou un champ inconnu le font
|
|
10
|
+
refuser : OverCrow n’ignore aucun champ.
|
|
11
|
+
|
|
12
|
+
## Un exemple complet
|
|
13
|
+
|
|
14
|
+
<!-- source: templates/counter/manifest.json -->
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"schemaVersion": 1,
|
|
18
|
+
"apiVersion": 1,
|
|
19
|
+
"id": "{{id}}",
|
|
20
|
+
"version": "0.1.0",
|
|
21
|
+
"name": {
|
|
22
|
+
"en": "{{name}}",
|
|
23
|
+
"fr": "{{name}}"
|
|
24
|
+
},
|
|
25
|
+
"sizing": {
|
|
26
|
+
"fit": "none",
|
|
27
|
+
"preferred": { "width": 200, "height": 96 },
|
|
28
|
+
"min": { "width": 140, "height": 72 },
|
|
29
|
+
"max": { "width": 640, "height": 640 }
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`overcrow-widget init` écrit ce fichier ; `{{id}}` et `{{name}}` sont les
|
|
35
|
+
valeurs qu’il remplit. Voici un manifeste avec des permissions et un menu :
|
|
36
|
+
|
|
37
|
+
<!-- source: docs/content/examples/countdown/manifest.json -->
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"schemaVersion": 1,
|
|
41
|
+
"apiVersion": 1,
|
|
42
|
+
"id": "nova.countdown",
|
|
43
|
+
"version": "1.0.0",
|
|
44
|
+
"name": { "en": "Countdown", "fr": "Compte à rebours" },
|
|
45
|
+
"sizing": {
|
|
46
|
+
"fit": "none",
|
|
47
|
+
"preferred": { "width": 220, "height": 190 },
|
|
48
|
+
"min": { "width": 180, "height": 160 },
|
|
49
|
+
"max": { "width": 480, "height": 400 }
|
|
50
|
+
},
|
|
51
|
+
"permissions": {
|
|
52
|
+
"storage": true
|
|
53
|
+
},
|
|
54
|
+
"wrapper": {
|
|
55
|
+
"menu": [
|
|
56
|
+
{
|
|
57
|
+
"type": "toggle",
|
|
58
|
+
"id": "show-rounds",
|
|
59
|
+
"label": { "en": "Show finished rounds", "fr": "Afficher les tours terminés" },
|
|
60
|
+
"icon": "circle-check",
|
|
61
|
+
"default": true
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"type": "action",
|
|
65
|
+
"id": "reset-rounds",
|
|
66
|
+
"label": { "en": "Reset the rounds", "fr": "Remettre les tours à zéro" },
|
|
67
|
+
"icon": "rotate-ccw",
|
|
68
|
+
"visibleWhen": "show-rounds"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Champs
|
|
76
|
+
|
|
77
|
+
<!-- generated:manifest-fields -->
|
|
78
|
+
| Champ | Type | Obligatoire | Signification |
|
|
79
|
+
| --- | --- | --- | --- |
|
|
80
|
+
| `schemaVersion` | entier de 1 à 1 | oui | Version du document de manifeste. |
|
|
81
|
+
| `apiVersion` | entier de 1 à 1 | oui | Version de l’API des widgets ; elle sélectionne ce schéma. |
|
|
82
|
+
| `id` | `widget ID` | oui | ID du widget, de 3 octets à 128 octets : au moins deux segments de `[a-z0-9-]` séparés par des points, chacun d’au plus 63 octets, sans `-` au début ni à la fin ; `<pseudo>.<nom>` avec le pseudo de l’éditeur, ou un domaine vérifié de l’éditeur, inversé, suivi d’un nom. `com.playervox` et `com.playervox.*` sont réservés aux paquets signés par PlayerVox. |
|
|
83
|
+
| `version` | `version` | oui | SemVer 2.0.0 `MAJOR.MINOR.PATCH[-PRERELEASE]` sous sa forme canonique, d’au plus 64 octets ; les métadonnées de build sont refusées. |
|
|
84
|
+
| `name` | `WidgetName` | oui | Nom localisé du widget, affiché par l’hôte. |
|
|
85
|
+
| `sizing` | `Sizing` | oui | Règles de taille et d’ajustement appliquées par le cadre du widget. |
|
|
86
|
+
| `vm` | `VmRequest` | non | Budget demandé pour la VM ; absent, les valeurs par défaut s’appliquent. |
|
|
87
|
+
| `permissions` | `Permissions` | non | Permissions demandées ; absent, aucune. |
|
|
88
|
+
| `wrapper` | `wrapper` | non | Lignes du widget dans le menu d’options de l’hôte. |
|
|
89
|
+
| `requires` | `host features` | non | Sources de données de l’hôte, distinctes, sans lesquelles le widget ne peut pas fonctionner, comme le `requires` d’une ligne de `wrapper.menu`. Sur une machine à laquelle il en manque une, l’hôte ne démarre ni n’affiche le widget et conserve sa place ; le widget revient quand la source revient. |
|
|
90
|
+
<!-- /generated:manifest-fields -->
|
|
91
|
+
|
|
92
|
+
### Identité et version
|
|
93
|
+
|
|
94
|
+
- **`id`** est l’identité du widget partout : dans le catalogue, dans le
|
|
95
|
+
profil de l’utilisateur, dans son stockage. Il s’écrit `<pseudo>.<nom>`,
|
|
96
|
+
votre pseudo d’éditeur dans l’espace créateurs d’OverCrow et un nom
|
|
97
|
+
(`nova.lol-timers`), ou, une fois un domaine vérifié, ce domaine inversé
|
|
98
|
+
et un nom (`gg.nova.lol-timers`). Un ID est définitif : il n’est jamais
|
|
99
|
+
donné à un autre widget, même après la suppression du vôtre. `nova`,
|
|
100
|
+
`example`, `yourhandle` et `yourname` sont des pseudos d’exemple sous
|
|
101
|
+
lesquels personne ne peut publier, et les ID sous `com.playervox` sont
|
|
102
|
+
réservés aux widgets publiés par PlayerVox.
|
|
103
|
+
- **`version`** est une version sémantique. Une version publiée ne change
|
|
104
|
+
jamais : toute modification d’un widget publié est une nouvelle version,
|
|
105
|
+
supérieure.
|
|
106
|
+
- **`schemaVersion`** et **`apiVersion`** valent tous deux `1`.
|
|
107
|
+
|
|
108
|
+
### Noms
|
|
109
|
+
|
|
110
|
+
`name` donne le nom qu’OverCrow affiche dans sa liste de widgets et dans ses
|
|
111
|
+
menus, en anglais et en français. Les deux sont obligatoires. Un nom
|
|
112
|
+
s’affiche tel qu’il est écrit : ni caractère de contrôle, ni caractère
|
|
113
|
+
invisible ou de sens d’écriture, comme U+200B (espace sans chasse) ou
|
|
114
|
+
U+202E (forçage de droite à gauche). Les libellés du menu suivent la même
|
|
115
|
+
règle.
|
|
116
|
+
|
|
117
|
+
<!-- generated:manifest-name -->
|
|
118
|
+
| Champ | Type | Obligatoire | Signification |
|
|
119
|
+
| --- | --- | --- | --- |
|
|
120
|
+
| `en` | `name text` | oui | Nom en anglais. |
|
|
121
|
+
| `fr` | `name text` | oui | Nom en français. |
|
|
122
|
+
<!-- /generated:manifest-name -->
|
|
123
|
+
|
|
124
|
+
## Tailles
|
|
125
|
+
|
|
126
|
+
`sizing` indique la taille du widget quand l’utilisateur l’ajoute, jusqu’où
|
|
127
|
+
celui-ci peut le réduire et l’agrandir, et si OverCrow peut ajuster son
|
|
128
|
+
cadre à son contenu. Les longueurs sont en pixels logiques, à une échelle de
|
|
129
|
+
100 % ; l’échelle du contenu choisie par l’utilisateur (de 50 % à 175 %)
|
|
130
|
+
les multiplie.
|
|
131
|
+
|
|
132
|
+
<!-- generated:manifest-sizing -->
|
|
133
|
+
| Champ | Type | Obligatoire | Signification |
|
|
134
|
+
| --- | --- | --- | --- |
|
|
135
|
+
| `fit` | `none` \| `both` \| `height` | oui | Ajustement au contenu que le widget accepte : sur les deux axes (`both`), en hauteur seulement (`height`) ou aucun (`none`). Le redimensionnement manuel reste toujours possible. |
|
|
136
|
+
| `defaultMode` | `fit` \| `manual` | non | Mode d’un widget nouvellement placé ; par défaut `fit` quand `fit` n’est pas `none`, sinon `manual`. `fit` avec `fit: none` est refusé. |
|
|
137
|
+
| `preferred` | `Dimensions` | oui | Taille initiale ; entre `min` et `max`. |
|
|
138
|
+
| `min` | `Dimensions` | oui | Plus petite taille. |
|
|
139
|
+
| `max` | `Dimensions` | oui | Plus grande taille. |
|
|
140
|
+
<!-- /generated:manifest-sizing -->
|
|
141
|
+
|
|
142
|
+
`preferred`, `min` et `max` sont chacun une paire de dimensions, avec
|
|
143
|
+
`min` ≤ `preferred` ≤ `max` sur les deux axes :
|
|
144
|
+
|
|
145
|
+
<!-- generated:manifest-dimensions -->
|
|
146
|
+
| Champ | Type | Obligatoire | Signification |
|
|
147
|
+
| --- | --- | --- | --- |
|
|
148
|
+
| `width` | entier de 1 à 4096 | oui | Pixels logiques. |
|
|
149
|
+
| `height` | entier de 1 à 4096 | oui | Pixels logiques. |
|
|
150
|
+
<!-- /generated:manifest-dimensions -->
|
|
151
|
+
|
|
152
|
+
Avec `fit: "both"`, OverCrow donne au cadre la taille dont la vue a besoin,
|
|
153
|
+
dans les deux directions : l’Horloge grandit quand l’utilisateur active les
|
|
154
|
+
secondes. Avec `fit: "height"`, l’utilisateur choisit la largeur et la
|
|
155
|
+
hauteur suit le contenu. Avec `fit: "none"`, le cadre garde la taille que
|
|
156
|
+
l’utilisateur lui a donnée et la vue le remplit. L’utilisateur peut toujours
|
|
157
|
+
redimensionner à la main.
|
|
158
|
+
|
|
159
|
+
<!-- source: widgets/clock/manifest.json -->
|
|
160
|
+
```json
|
|
161
|
+
"sizing": {
|
|
162
|
+
"fit": "both",
|
|
163
|
+
"preferred": { "width": 110, "height": 60 },
|
|
164
|
+
"min": { "width": 40, "height": 24 },
|
|
165
|
+
"max": { "width": 480, "height": 240 }
|
|
166
|
+
},
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Permissions
|
|
170
|
+
|
|
171
|
+
Un widget n’obtient rien qu’il n’ait déclaré ici, et une déclaration
|
|
172
|
+
n’accorde rien à elle seule : l’utilisateur donne d’abord son accord, dans
|
|
173
|
+
le Centre de contrôle.
|
|
174
|
+
[Services et permissions](services.md) explique chaque permission et ce
|
|
175
|
+
qu’elle autorise.
|
|
176
|
+
|
|
177
|
+
<!-- generated:manifest-permissions -->
|
|
178
|
+
| Champ | Type | Obligatoire | Signification |
|
|
179
|
+
| --- | --- | --- | --- |
|
|
180
|
+
| `network` | liste de `NetworkRule` ≤ 32 | non | Règles réseau, distinctes. |
|
|
181
|
+
| `storage` | booléen | non | Stockage clé-valeur tenu par l’hôte ; `false` par défaut. |
|
|
182
|
+
| `clipboardWrite` | booléen | non | Écriture de texte dans le presse-papiers ; `false` par défaut. |
|
|
183
|
+
| `gameEvents` | liste de `game event` ≤ 32 | non | Noms d’événements `overcrow.game.<name>.v1`, distincts. |
|
|
184
|
+
| `capabilities` | `capability names` | non | Capabilities du schéma, distinctes. |
|
|
185
|
+
<!-- /generated:manifest-permissions -->
|
|
186
|
+
|
|
187
|
+
<!-- source: widgets/stopwatch/manifest.json -->
|
|
188
|
+
```json
|
|
189
|
+
"permissions": {
|
|
190
|
+
"capabilities": ["stopwatch.read", "stopwatch.control"]
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Une règle réseau est un objet à part entière ; ses champs sont décrits avec
|
|
195
|
+
les [règles réseau](services.md#règles-réseau).
|
|
196
|
+
|
|
197
|
+
## Le menu d’options
|
|
198
|
+
|
|
199
|
+
Chaque widget a un menu d’options, ouvert depuis son cadre. OverCrow y place
|
|
200
|
+
d’abord ses propres lignes : opacité, taille du contenu, ajustement au
|
|
201
|
+
contenu et, si le widget en a besoin, son compte. La visibilité en mode
|
|
202
|
+
passif est l’œil de la barre d’outils du widget, pas une ligne du menu.
|
|
203
|
+
`wrapper.menu` ajoute les vôtres en dessous : bascules, curseurs, choix,
|
|
204
|
+
actions et groupes, chacun avec un libellé dans les deux langues.
|
|
205
|
+
|
|
206
|
+
Le menu prend la largeur de sa ligne la plus large, de 248 à 320 points.
|
|
207
|
+
Au-delà, un libellé se termine par « … » et s’affiche en entier dans une
|
|
208
|
+
infobulle ; un choix montre sa valeur sur 120 points au plus. Gardez des
|
|
209
|
+
libellés courts, dans les deux langues.
|
|
210
|
+
|
|
211
|
+
<!-- source: widgets/clock/manifest.json -->
|
|
212
|
+
```json
|
|
213
|
+
"wrapper": {
|
|
214
|
+
"menu": [
|
|
215
|
+
{
|
|
216
|
+
"type": "toggle",
|
|
217
|
+
"id": "show-seconds",
|
|
218
|
+
"label": { "en": "Show seconds", "fr": "Afficher les secondes" },
|
|
219
|
+
"default": false
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"type": "toggle",
|
|
223
|
+
"id": "show-date",
|
|
224
|
+
"label": { "en": "Show date", "fr": "Afficher la date" },
|
|
225
|
+
"default": true
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"type": "choice",
|
|
229
|
+
"id": "date-format",
|
|
230
|
+
"label": { "en": "Date format", "fr": "Format de date" },
|
|
231
|
+
"visibleWhen": "show-date",
|
|
232
|
+
"choices": [
|
|
233
|
+
{ "value": "day-month-year", "label": { "en": "dd/mm/yyyy", "fr": "jj/mm/aaaa" } },
|
|
234
|
+
{ "value": "year-month-day", "label": { "en": "yyyy-mm-dd", "fr": "aaaa-mm-jj" } },
|
|
235
|
+
{ "value": "month-day-year", "label": { "en": "mm/dd/yyyy", "fr": "mm/jj/aaaa" } }
|
|
236
|
+
],
|
|
237
|
+
"default": "day-month-year"
|
|
238
|
+
}
|
|
239
|
+
]
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
OverCrow dessine les lignes, enregistre leurs valeurs dans le profil de
|
|
244
|
+
l’utilisateur et les donne à la logique : lisez une valeur avec
|
|
245
|
+
`option(id, fallback)` et suivez les changements avec `onHost`. Une ligne
|
|
246
|
+
`action` n’a pas de valeur : elle appelle le gestionnaire que vous avez
|
|
247
|
+
enregistré avec `onMenu`. Voir
|
|
248
|
+
[le menu d’options dans la logique](logic.md#le-menu-doptions).
|
|
249
|
+
|
|
250
|
+
Une ligne du menu peut fixer l’une de ses valeurs déclarées ou envoyer son
|
|
251
|
+
action, rien d’autre. Elle ne peut ni accorder une permission ni ouvrir un
|
|
252
|
+
lien, et choisir une ligne n’est pas une
|
|
253
|
+
[action de l’utilisateur](services.md#les-appels-qui-demandent-une-action-de-lutilisateur)
|
|
254
|
+
qui autorise un appel de service protégé.
|
|
255
|
+
|
|
256
|
+
### Champs communs à toutes les lignes
|
|
257
|
+
|
|
258
|
+
<!-- generated:menu-row-fields -->
|
|
259
|
+
| Champ | Type | Obligatoire | Signification |
|
|
260
|
+
| --- | --- | --- | --- |
|
|
261
|
+
| `type` | `toggle` \| `slider` \| `choice` \| `action` \| `group` | oui | Type de la ligne. |
|
|
262
|
+
| `id` | identifiant ≤ 48 octets | oui | Unique parmi toutes les lignes du widget ; clé de la valeur enregistrée. |
|
|
263
|
+
| `label` | `MenuLabel` | oui | Libellé localisé de la ligne. |
|
|
264
|
+
| `icon` | nom d’icône Lucide | non | Icône placée devant le libellé, prise dans la liste de l’hôte et dessinée par lui. |
|
|
265
|
+
| `visibleWhen` | identifiant ≤ 48 octets | non | ID d’une ligne `toggle` déclarée plus haut ; cette ligne n’est affichée que tant que cette bascule est activée. |
|
|
266
|
+
| `requires` | `fps` \| `telemetry.cpuTemperature` \| `telemetry.gpuTemperature` | non | Source de données de l’hôte ; l’hôte masque la ligne quand il ne peut pas la fournir. |
|
|
267
|
+
<!-- /generated:menu-row-fields -->
|
|
268
|
+
|
|
269
|
+
Une ligne dotée de `visibleWhen` ne s’affiche que tant que la bascule nommée
|
|
270
|
+
est activée : le format de date de l’Horloge apparaît quand la date est
|
|
271
|
+
affichée. Une ligne dotée de `requires` est masquée sur une machine qui ne
|
|
272
|
+
peut pas fournir cette donnée, comme les lignes de température du widget
|
|
273
|
+
Performances :
|
|
274
|
+
|
|
275
|
+
<!-- source: widgets/performance/manifest.json -->
|
|
276
|
+
```json
|
|
277
|
+
"requires": "telemetry.cpuTemperature",
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Une ligne `group` ouvre un sous-menu latéral avec ses propres lignes ; le
|
|
281
|
+
widget Performances range ses cinq bascules de mesures sous une seule ligne :
|
|
282
|
+
|
|
283
|
+
<!-- source: widgets/performance/manifest.json -->
|
|
284
|
+
```json
|
|
285
|
+
"type": "group",
|
|
286
|
+
"id": "shown-values",
|
|
287
|
+
"label": { "en": "Shown values", "fr": "Valeurs affichées" },
|
|
288
|
+
"rows": [
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Types de ligne
|
|
292
|
+
|
|
293
|
+
<!-- generated:menu-row-types -->
|
|
294
|
+
### `toggle`
|
|
295
|
+
|
|
296
|
+
Bascule booléenne.
|
|
297
|
+
|
|
298
|
+
| Champ | Type | Obligatoire | Signification |
|
|
299
|
+
| --- | --- | --- | --- |
|
|
300
|
+
| `default` | booléen | oui | Valeur initiale. |
|
|
301
|
+
|
|
302
|
+
### `slider`
|
|
303
|
+
|
|
304
|
+
Nombre borné ; `step` > 0, `step` ≤ `max - min`, au plus 10000 pas, `default` dans l’intervalle.
|
|
305
|
+
|
|
306
|
+
| Champ | Type | Obligatoire | Signification |
|
|
307
|
+
| --- | --- | --- | --- |
|
|
308
|
+
| `min` | nombre de -1000000 à 1000000 | oui | Borne inférieure. |
|
|
309
|
+
| `max` | nombre de -1000000 à 1000000 | oui | Borne supérieure, plus grande que `min`. |
|
|
310
|
+
| `step` | nombre de -1000000 à 1000000 | oui | Pas. |
|
|
311
|
+
| `default` | nombre de -1000000 à 1000000 | oui | Valeur initiale. |
|
|
312
|
+
|
|
313
|
+
### `choice`
|
|
314
|
+
|
|
315
|
+
Une valeur parmi les choix déclarés.
|
|
316
|
+
|
|
317
|
+
| Champ | Type | Obligatoire | Signification |
|
|
318
|
+
| --- | --- | --- | --- |
|
|
319
|
+
| `choices` | liste de `MenuChoice` ≤ 16 | oui | Au moins 2 choix. |
|
|
320
|
+
| `default` | identifiant ≤ 48 octets | oui | Valeur de l’un des choix déclarés. |
|
|
321
|
+
|
|
322
|
+
### `action`
|
|
323
|
+
|
|
324
|
+
Appelle le gestionnaire enregistré par `onMenu` avec l’ID de la ligne. Ce n’est pas une action de l’utilisateur.
|
|
325
|
+
|
|
326
|
+
### `group`
|
|
327
|
+
|
|
328
|
+
Sous-menu latéral qui contient des lignes autres que des groupes.
|
|
329
|
+
|
|
330
|
+
| Champ | Type | Obligatoire | Signification |
|
|
331
|
+
| --- | --- | --- | --- |
|
|
332
|
+
| `rows` | liste de `MenuRow` ≤ 16 | oui | Au moins une ligne ; un `group` n’y est pas admis. |
|
|
333
|
+
<!-- /generated:menu-row-types -->
|
|
334
|
+
|
|
335
|
+
### Libellés et choix
|
|
336
|
+
|
|
337
|
+
Un `label` est un objet qui porte les deux langues :
|
|
338
|
+
|
|
339
|
+
<!-- generated:menu-label -->
|
|
340
|
+
| Champ | Type | Obligatoire | Signification |
|
|
341
|
+
| --- | --- | --- | --- |
|
|
342
|
+
| `en` | `label text` | oui | Libellé en anglais. |
|
|
343
|
+
| `fr` | `label text` | oui | Libellé en français. |
|
|
344
|
+
<!-- /generated:menu-label -->
|
|
345
|
+
|
|
346
|
+
Chaque entrée de `choices` est une valeur et son libellé :
|
|
347
|
+
|
|
348
|
+
<!-- generated:menu-choice -->
|
|
349
|
+
| Champ | Type | Obligatoire | Signification |
|
|
350
|
+
| --- | --- | --- | --- |
|
|
351
|
+
| `value` | identifiant ≤ 48 octets | oui | Valeur enregistrée ; unique dans la ligne. |
|
|
352
|
+
| `label` | `MenuLabel` | oui | Libellé localisé du choix. |
|
|
353
|
+
<!-- /generated:menu-choice -->
|
|
354
|
+
|
|
355
|
+
## Sources de données indispensables
|
|
356
|
+
|
|
357
|
+
Au premier niveau du manifeste, `requires` liste les sources de données sans
|
|
358
|
+
lesquelles le widget ne peut pas fonctionner, avec les mêmes noms que le
|
|
359
|
+
`requires` d’une ligne. Sur une machine à laquelle il en manque une,
|
|
360
|
+
OverCrow ne démarre pas le widget, ne l’affiche pas et conserve sa place
|
|
361
|
+
dans la disposition ; le widget revient quand la source revient.
|
|
362
|
+
Utilisez-le pour un widget qui n’a rien d’autre à afficher, comme un
|
|
363
|
+
compteur d’images par seconde sans source de fréquence d’images. Pour une
|
|
364
|
+
seule valeur facultative, préférez le `requires` d’une ligne.
|
|
365
|
+
|
|
366
|
+
## Un budget de mémoire plus grand
|
|
367
|
+
|
|
368
|
+
La logique s’exécute avec un tas de 16 Mio. Un widget qui a besoin de plus
|
|
369
|
+
le demande avec `vm` ; aucun autre budget de la VM ne peut être modifié.
|
|
370
|
+
|
|
371
|
+
<!-- generated:manifest-vm -->
|
|
372
|
+
| Champ | Type | Obligatoire | Signification |
|
|
373
|
+
| --- | --- | --- | --- |
|
|
374
|
+
| `heapMiB` | entier de 16 à 48 | oui | Plafond du tas QuickJS en Mio, de 16 Mio à 48 Mio. Le plafond du processus de la VM (64 Mio) ne change pas. |
|
|
375
|
+
<!-- /generated:manifest-vm -->
|
|
376
|
+
|
|
377
|
+
Le plafond de mémoire du processus du widget reste le même : un tas plus
|
|
378
|
+
grand laisse donc moins de place à tout le reste. Ne le demandez que si
|
|
379
|
+
`overcrow-widget dev` montre que le widget s’arrête avec `resource_limit`.
|
|
380
|
+
|
|
381
|
+
## Comment le manifeste est vérifié
|
|
382
|
+
|
|
383
|
+
`overcrow-widget check` valide le manifeste avec le validateur qu’OverCrow
|
|
384
|
+
exécute lui-même, et désigne le membre qu’il refuse :
|
|
385
|
+
|
|
386
|
+
```text
|
|
387
|
+
error[manifest.sizing]: `sizing` is out of bounds or inconsistent
|
|
388
|
+
--> manifest.json:7:3
|
|
389
|
+
|
|
|
390
|
+
7 | "sizing": {
|
|
391
|
+
| ^
|
|
392
|
+
= help: `min` <= `preferred` <= `max`, each within the schema's widget size bounds
|
|
393
|
+
check: 1 error(s), 0 warning(s)
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
OverCrow le valide de nouveau quand le paquet est admis dans le catalogue,
|
|
397
|
+
quand il est installé et à chaque démarrage du widget. Une nouvelle version
|
|
398
|
+
dont le manifeste demande plus que la précédente (une règle réseau, un
|
|
399
|
+
événement de jeu, une capability, le stockage ou le presse-papiers) attend
|
|
400
|
+
que l’utilisateur l’approuve dans le Centre de contrôle avant de remplacer
|
|
401
|
+
la version installée.
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# MCP
|
|
2
|
+
|
|
3
|
+
PlayerVox OverCrow a un serveur pour les assistants IA : `@overcrow/mcp`.
|
|
4
|
+
Ajoutez-le à Claude Code, Claude Desktop, Cursor, VS Code ou Codex, et votre
|
|
5
|
+
assistant peut créer un widget, le vérifier, le tester, l’auditer,
|
|
6
|
+
l’empaqueter et préparer sa soumission. Il vous faut Node.js 22.18 ou plus
|
|
7
|
+
récent, rien d’autre : le serveur installe lui-même les outils OverCrow dont
|
|
8
|
+
il a besoin.
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
claude mcp add overcrow -- npx -y @overcrow/mcp
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Demandez ensuite : « Crée un widget OverCrow qui affiche… ».
|
|
15
|
+
|
|
16
|
+
## Ajouter le serveur
|
|
17
|
+
|
|
18
|
+
Ouvrez votre dossier de widgets dans l’assistant, puis ajoutez le serveur.
|
|
19
|
+
|
|
20
|
+
### En une commande
|
|
21
|
+
|
|
22
|
+
**Claude Code**, depuis ce dossier :
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
claude mcp add overcrow -- npx -y @overcrow/mcp
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Codex** :
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
codex mcp add overcrow -- npx -y @overcrow/mcp
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**VS Code** : [installer dans VS Code](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522overcrow%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522-y%2522%252C%2522%2540overcrow%252Fmcp%2522%255D%257D), ou :
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
code --add-mcp '{"name":"overcrow","command":"npx","args":["-y","@overcrow/mcp"]}'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Avec un fichier de configuration
|
|
41
|
+
|
|
42
|
+
**Cursor** : un fichier `.cursor/mcp.json` dans le dossier.
|
|
43
|
+
|
|
44
|
+
<!-- source: mcp/examples/cursor-mcp.json -->
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"mcpServers": {
|
|
48
|
+
"overcrow": {
|
|
49
|
+
"command": "npx",
|
|
50
|
+
"args": ["-y", "@overcrow/mcp"]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**VS Code** : un fichier `.vscode/mcp.json` dans le dossier.
|
|
57
|
+
|
|
58
|
+
<!-- source: mcp/examples/vscode-mcp.json -->
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"servers": {
|
|
62
|
+
"overcrow": {
|
|
63
|
+
"type": "stdio",
|
|
64
|
+
"command": "npx",
|
|
65
|
+
"args": ["-y", "@overcrow/mcp"]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Claude Desktop** lance ses serveurs hors de vos dossiers : indiquez votre
|
|
72
|
+
dossier de widgets avec `--root` dans `claude_desktop_config.json`
|
|
73
|
+
(Paramètres, Développeur, Modifier la configuration), puis redémarrez
|
|
74
|
+
Claude Desktop.
|
|
75
|
+
|
|
76
|
+
<!-- source: mcp/examples/claude_desktop_config.json -->
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"mcpServers": {
|
|
80
|
+
"overcrow": {
|
|
81
|
+
"command": "npx",
|
|
82
|
+
"args": ["-y", "@overcrow/mcp", "--root", "C:\\Users\\you\\Documents\\widgets"]
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Ce que fait le serveur
|
|
89
|
+
|
|
90
|
+
- **La première fois**, il télécharge les outils créateurs OverCrow de
|
|
91
|
+
votre ordinateur ([l’outil en ligne de commande](cli.md) et le runtime
|
|
92
|
+
qui joue les [tests](testing.md), environ 15 Mo) depuis la release GitHub
|
|
93
|
+
d’OverCrow. Il vérifie chaque fichier avec les empreintes inscrites dans
|
|
94
|
+
le serveur, puis les garde dans son propre dossier
|
|
95
|
+
(`~/.cache/overcrow-mcp`, ou `%LOCALAPPDATA%\overcrow-mcp` sous Windows).
|
|
96
|
+
Rien ne s’ajoute à votre `PATH`, et aucun droit d’administrateur n’est
|
|
97
|
+
nécessaire.
|
|
98
|
+
- **Ensuite**, votre assistant travaille avec ses outils, dans cet ordre :
|
|
99
|
+
créer le widget depuis un modèle, installer le SDK (il vous le demande
|
|
100
|
+
d’abord), vérifier, tester (il voit les images qui diffèrent), auditer,
|
|
101
|
+
empaqueter, préparer la soumission.
|
|
102
|
+
- **L’identifiant du widget** est définitif. Votre assistant vous le
|
|
103
|
+
demande : votre pseudo d’éditeur dans l’espace créateurs d’OverCrow et un
|
|
104
|
+
nom (`nova.lol-timers`), ou un domaine que vous pouvez vérifier
|
|
105
|
+
(`gg.nova.lol-timers`).
|
|
106
|
+
- **La soumission** : le serveur vérifie tout ce que demande l’espace
|
|
107
|
+
créateurs, puis écrit le zip des sources de votre widget dans `dist/`,
|
|
108
|
+
sans `node_modules`, `dist`, fichiers cachés ni clés, et liste ce qu’il a
|
|
109
|
+
laissé de côté. Il liste aussi les textes à écrire : pourquoi le widget a
|
|
110
|
+
besoin de chaque permission, les notes de version et la description en
|
|
111
|
+
français et en anglais. Votre assistant les rédige avec vous.
|
|
112
|
+
- **L’audit** note le widget sur 100 pour la sécurité et pour la légèreté,
|
|
113
|
+
avec pour chaque constat une correction et un exemple tiré d’un
|
|
114
|
+
[widget de référence](widgets.md) : permissions inutilisées, règles
|
|
115
|
+
réseau trop larges, secrets, écritures dans le presse-papiers sans action
|
|
116
|
+
de l’utilisateur, minuteurs rapides, interrogation répétée du réseau,
|
|
117
|
+
listes qui grandissent sans fin, grosses réponses lues en un seul tour,
|
|
118
|
+
images lourdes.
|
|
119
|
+
- **La documentation** de ce site, en français et en anglais, et les
|
|
120
|
+
sources des widgets de référence viennent avec le serveur : votre
|
|
121
|
+
assistant les lit sans accès au réseau.
|
|
122
|
+
|
|
123
|
+
## Ce qu’il ne fait pas
|
|
124
|
+
|
|
125
|
+
- Il n’envoie, ne signe et ne publie jamais rien. Vous envoyez le zip et
|
|
126
|
+
les textes dans l’espace créateurs d’OverCrow, à l’adresse creators.playervox.com.
|
|
127
|
+
- Il n’installe pas votre widget dans OverCrow : l’essayer en jeu passe par
|
|
128
|
+
le [canal de développement](dev-channel.md) de l’outil en ligne de
|
|
129
|
+
commande.
|
|
130
|
+
- Il n’envoie rien sur vous : ni télémétrie, ni compte.
|
|
131
|
+
|
|
132
|
+
## Sécurité
|
|
133
|
+
|
|
134
|
+
- **Vos dossiers seulement.** Le serveur travaille dans le dossier ouvert
|
|
135
|
+
dans votre assistant (ou ceux donnés avec `--root`). Il refuse un dossier
|
|
136
|
+
système, votre dossier personnel entier, les dossiers cachés et les liens
|
|
137
|
+
qui mènent ailleurs.
|
|
138
|
+
- **Aucune commande de son choix.** Le serveur lance l’outil en ligne de
|
|
139
|
+
commande d’OverCrow et npm, rien d’autre, jamais à travers un shell.
|
|
140
|
+
- **Téléchargements vérifiés.** Il ne télécharge que les fichiers épinglés
|
|
141
|
+
depuis GitHub, et les vérifie avant de s’en servir. npm n’installe que
|
|
142
|
+
`@overcrow/sdk` et TypeScript, sans scripts d’installation, et leur
|
|
143
|
+
intégrité est comparée à celle des paquets publiés.
|
|
144
|
+
- **Vous confirmez.** Installer des paquets et remplacer des images de
|
|
145
|
+
référence demandent votre accord.
|
|
146
|
+
- **Vos fichiers sont des données.** Ce que les outils renvoient de vos
|
|
147
|
+
fichiers est marqué comme donnée : un texte placé dans un widget ne peut
|
|
148
|
+
pas donner d’ordres à votre assistant par le serveur. Relisez tout de même
|
|
149
|
+
ce que votre assistant modifie, et validez ses actions comme d’habitude.
|
|
150
|
+
|
|
151
|
+
## Hors ligne
|
|
152
|
+
|
|
153
|
+
Téléchargez une fois depuis la release GitHub d’OverCrow le fichier
|
|
154
|
+
`overcrow-creator-tools-VERSION-PLATFORME.zip` de votre plateforme,
|
|
155
|
+
placez-le dans votre dossier de widgets, et demandez à votre assistant de
|
|
156
|
+
lancer `setup` avec ce fichier (`zipPath`). Ou lancez le serveur avec
|
|
157
|
+
`--tools-zip` et le chemin du fichier. Le fichier doit être exactement celui
|
|
158
|
+
que le serveur épingle.
|
|
159
|
+
|
|
160
|
+
## Ordinateurs pris en charge
|
|
161
|
+
|
|
162
|
+
Vérifier, tester et empaqueter demandent Windows x64 ou Linux x86-64. Sous
|
|
163
|
+
macOS et sur ARM, le serveur donne quand même la documentation, les
|
|
164
|
+
explications et l’audit.
|
|
165
|
+
|
|
166
|
+
## En cas de problème
|
|
167
|
+
|
|
168
|
+
- **« not tied to a published OverCrow release »** : mettez le serveur à
|
|
169
|
+
jour avec `npx -y @overcrow/mcp@latest`.
|
|
170
|
+
- **Derrière un proxy** : définissez `HTTPS_PROXY` dans l’environnement du
|
|
171
|
+
serveur.
|
|
172
|
+
- **« cannot work in / »** (souvent Claude Desktop) : ajoutez `--root` et
|
|
173
|
+
votre dossier de widgets.
|