@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,388 @@
|
|
|
1
|
+
# The manifest
|
|
2
|
+
|
|
3
|
+
`manifest.json` tells PlayerVox OverCrow what a widget is before any of its
|
|
4
|
+
code runs: its identity and version, its names, the sizes it supports, the
|
|
5
|
+
permissions it asks for and the rows it adds to its options menu. You write
|
|
6
|
+
it by hand; it is packaged exactly as written.
|
|
7
|
+
|
|
8
|
+
The file is one strict JSON object. A byte-order mark, a duplicate key,
|
|
9
|
+
trailing data or an unknown field rejects it: there is no field that
|
|
10
|
+
OverCrow ignores.
|
|
11
|
+
|
|
12
|
+
## A complete example
|
|
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` writes this file; `{{id}}` and `{{name}}` are the
|
|
35
|
+
values it fills in. A manifest with permissions and a 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
|
+
## Fields
|
|
76
|
+
|
|
77
|
+
<!-- generated:manifest-fields -->
|
|
78
|
+
| Field | Type | Required | Meaning |
|
|
79
|
+
| --- | --- | --- | --- |
|
|
80
|
+
| `schemaVersion` | integer 1 to 1 | yes | Manifest document version. |
|
|
81
|
+
| `apiVersion` | integer 1 to 1 | yes | Widget API version; selects this schema. |
|
|
82
|
+
| `id` | `widget ID` | yes | Widget ID, from 3 bytes to 128 bytes: at least two dot-separated segments of `[a-z0-9-]`, each at most 63 bytes and not starting or ending with `-`; `<handle>.<name>` with the publisher's handle, or a domain the publisher verified, reversed, then a name. `com.playervox` and `com.playervox.*` are reserved for packages signed by PlayerVox. |
|
|
83
|
+
| `version` | `version` | yes | SemVer 2.0.0 `MAJOR.MINOR.PATCH[-PRERELEASE]` in canonical form, at most 64 bytes; build metadata is rejected. |
|
|
84
|
+
| `name` | `WidgetName` | yes | Localized widget name shown by the host. |
|
|
85
|
+
| `sizing` | `Sizing` | yes | Size and fit rules applied by the widget's frame. |
|
|
86
|
+
| `vm` | `VmRequest` | no | VM budget request; absent means the defaults. |
|
|
87
|
+
| `permissions` | `Permissions` | no | Requested permissions; absent means none. |
|
|
88
|
+
| `wrapper` | `wrapper` | no | Widget rows of the host options menu. |
|
|
89
|
+
| `requires` | `host features` | no | Distinct host data sources the widget cannot work without, as in a `wrapper.menu` row's `requires`. On a machine that lacks one, the host neither starts nor shows the widget and keeps its layout; the widget comes back when the source does. |
|
|
90
|
+
<!-- /generated:manifest-fields -->
|
|
91
|
+
|
|
92
|
+
### Identity and version
|
|
93
|
+
|
|
94
|
+
- **`id`** is the widget's identity everywhere: in the catalog, in the
|
|
95
|
+
user's profile, in its storage. It is `<handle>.<name>`, your publisher
|
|
96
|
+
handle in the OverCrow creator space and a name (`nova.lol-timers`), or,
|
|
97
|
+
once you verified a domain, that domain reversed and a name
|
|
98
|
+
(`gg.nova.lol-timers`). An ID is final: it is never given to another
|
|
99
|
+
widget, even after yours is removed. `nova`, `example`, `yourhandle` and
|
|
100
|
+
`yourname` are example handles that nobody can publish under, and IDs
|
|
101
|
+
under `com.playervox` are reserved for widgets published by PlayerVox.
|
|
102
|
+
- **`version`** is a semantic version. A published version never changes:
|
|
103
|
+
any change to a published widget is a new, higher version.
|
|
104
|
+
- **`schemaVersion`** and **`apiVersion`** are both `1`.
|
|
105
|
+
|
|
106
|
+
### Names
|
|
107
|
+
|
|
108
|
+
`name` gives the name OverCrow shows in its widget list and menus, in
|
|
109
|
+
English and in French. Both are required. A name shows as written: no
|
|
110
|
+
control character and no invisible or text-direction character, such as
|
|
111
|
+
U+200B (zero-width space) or U+202E (right-to-left override). Menu labels
|
|
112
|
+
follow the same rule.
|
|
113
|
+
|
|
114
|
+
<!-- generated:manifest-name -->
|
|
115
|
+
| Field | Type | Required | Meaning |
|
|
116
|
+
| --- | --- | --- | --- |
|
|
117
|
+
| `en` | `name text` | yes | English name. |
|
|
118
|
+
| `fr` | `name text` | yes | French name. |
|
|
119
|
+
<!-- /generated:manifest-name -->
|
|
120
|
+
|
|
121
|
+
## Sizes
|
|
122
|
+
|
|
123
|
+
`sizing` says how large the widget is when the user adds it, how small and
|
|
124
|
+
how large the user may resize it, and whether OverCrow can fit its frame to
|
|
125
|
+
its content. Lengths are logical pixels at 100 % scale; the user's content
|
|
126
|
+
scale (50 % to 175 %) multiplies them.
|
|
127
|
+
|
|
128
|
+
<!-- generated:manifest-sizing -->
|
|
129
|
+
| Field | Type | Required | Meaning |
|
|
130
|
+
| --- | --- | --- | --- |
|
|
131
|
+
| `fit` | `none` \| `both` \| `height` | yes | Content fitting the widget supports: `both` axes, `height` only, or `none`. Manual resizing is always available. |
|
|
132
|
+
| `defaultMode` | `fit` \| `manual` | no | Mode of a newly placed widget; default `fit` when `fit` is not `none`, else `manual`. `fit` with `fit: none` is rejected. |
|
|
133
|
+
| `preferred` | `Dimensions` | yes | Initial size; within `min` and `max`. |
|
|
134
|
+
| `min` | `Dimensions` | yes | Smallest size. |
|
|
135
|
+
| `max` | `Dimensions` | yes | Largest size. |
|
|
136
|
+
<!-- /generated:manifest-sizing -->
|
|
137
|
+
|
|
138
|
+
Each of `preferred`, `min` and `max` is a pair of dimensions, with
|
|
139
|
+
`min` ≤ `preferred` ≤ `max` on both axes:
|
|
140
|
+
|
|
141
|
+
<!-- generated:manifest-dimensions -->
|
|
142
|
+
| Field | Type | Required | Meaning |
|
|
143
|
+
| --- | --- | --- | --- |
|
|
144
|
+
| `width` | integer 1 to 4096 | yes | Logical pixels. |
|
|
145
|
+
| `height` | integer 1 to 4096 | yes | Logical pixels. |
|
|
146
|
+
<!-- /generated:manifest-dimensions -->
|
|
147
|
+
|
|
148
|
+
With `fit: "both"`, OverCrow sizes the frame to what the view needs, in
|
|
149
|
+
both directions: the Clock grows when the user turns the seconds on. With
|
|
150
|
+
`fit: "height"`, the user chooses the width and the height follows the
|
|
151
|
+
content. With `fit: "none"`, the frame keeps the size the user gave it and
|
|
152
|
+
the view fills it. The user can always resize by hand.
|
|
153
|
+
|
|
154
|
+
<!-- source: widgets/clock/manifest.json -->
|
|
155
|
+
```json
|
|
156
|
+
"sizing": {
|
|
157
|
+
"fit": "both",
|
|
158
|
+
"preferred": { "width": 110, "height": 60 },
|
|
159
|
+
"min": { "width": 40, "height": 24 },
|
|
160
|
+
"max": { "width": 480, "height": 240 }
|
|
161
|
+
},
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Permissions
|
|
165
|
+
|
|
166
|
+
A widget gets nothing it has not declared here, and a declaration grants
|
|
167
|
+
nothing by itself: the user consents first, in the Control Center.
|
|
168
|
+
[Services and permissions](services.md) explains each permission and what
|
|
169
|
+
it allows.
|
|
170
|
+
|
|
171
|
+
<!-- generated:manifest-permissions -->
|
|
172
|
+
| Field | Type | Required | Meaning |
|
|
173
|
+
| --- | --- | --- | --- |
|
|
174
|
+
| `network` | list of `NetworkRule` ≤ 32 | no | Distinct network rules. |
|
|
175
|
+
| `storage` | boolean | no | Host key-value storage; default `false`. |
|
|
176
|
+
| `clipboardWrite` | boolean | no | Clipboard text writes; default `false`. |
|
|
177
|
+
| `gameEvents` | list of `game event` ≤ 32 | no | Distinct `overcrow.game.<name>.v1` event names. |
|
|
178
|
+
| `capabilities` | `capability names` | no | Distinct capabilities of the schema. |
|
|
179
|
+
<!-- /generated:manifest-permissions -->
|
|
180
|
+
|
|
181
|
+
<!-- source: widgets/stopwatch/manifest.json -->
|
|
182
|
+
```json
|
|
183
|
+
"permissions": {
|
|
184
|
+
"capabilities": ["stopwatch.read", "stopwatch.control"]
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
A network rule is an object of its own; its fields are described with
|
|
189
|
+
[network rules](services.md#network-rules).
|
|
190
|
+
|
|
191
|
+
## The options menu
|
|
192
|
+
|
|
193
|
+
Every widget has an options menu, opened from its frame. OverCrow puts its
|
|
194
|
+
own rows first: opacity, content size, fit to content and, when the widget
|
|
195
|
+
needs one, its account. Visibility in Passive mode is the eye in the
|
|
196
|
+
widget's toolbar, not a menu row. `wrapper.menu` adds yours below them:
|
|
197
|
+
toggles, sliders, choices, actions and groups, each with a label in both
|
|
198
|
+
languages.
|
|
199
|
+
|
|
200
|
+
The menu is as wide as its widest row, from 248 to 320 points. Beyond, a
|
|
201
|
+
label ends with "…" and shows whole in a tooltip; a choice shows its
|
|
202
|
+
current value on at most 120 points. Keep labels short, in both languages.
|
|
203
|
+
|
|
204
|
+
<!-- source: widgets/clock/manifest.json -->
|
|
205
|
+
```json
|
|
206
|
+
"wrapper": {
|
|
207
|
+
"menu": [
|
|
208
|
+
{
|
|
209
|
+
"type": "toggle",
|
|
210
|
+
"id": "show-seconds",
|
|
211
|
+
"label": { "en": "Show seconds", "fr": "Afficher les secondes" },
|
|
212
|
+
"default": false
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"type": "toggle",
|
|
216
|
+
"id": "show-date",
|
|
217
|
+
"label": { "en": "Show date", "fr": "Afficher la date" },
|
|
218
|
+
"default": true
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"type": "choice",
|
|
222
|
+
"id": "date-format",
|
|
223
|
+
"label": { "en": "Date format", "fr": "Format de date" },
|
|
224
|
+
"visibleWhen": "show-date",
|
|
225
|
+
"choices": [
|
|
226
|
+
{ "value": "day-month-year", "label": { "en": "dd/mm/yyyy", "fr": "jj/mm/aaaa" } },
|
|
227
|
+
{ "value": "year-month-day", "label": { "en": "yyyy-mm-dd", "fr": "aaaa-mm-jj" } },
|
|
228
|
+
{ "value": "month-day-year", "label": { "en": "mm/dd/yyyy", "fr": "mm/jj/aaaa" } }
|
|
229
|
+
],
|
|
230
|
+
"default": "day-month-year"
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
OverCrow draws the rows, stores their values in the user's profile and
|
|
237
|
+
gives them to the logic: read a value with `option(id, fallback)`, and
|
|
238
|
+
follow changes with `onHost`. An `action` row has no value: it calls the
|
|
239
|
+
handler you registered with `onMenu`. See
|
|
240
|
+
[the options menu in the logic](logic.md#the-options-menu).
|
|
241
|
+
|
|
242
|
+
A menu row can set one of its declared values or send its action, nothing
|
|
243
|
+
else: it cannot grant a permission or open a link, and choosing a row is
|
|
244
|
+
not a [user action](services.md#calls-that-need-a-user-action) that allows
|
|
245
|
+
a protected service call.
|
|
246
|
+
|
|
247
|
+
### Fields of every row
|
|
248
|
+
|
|
249
|
+
<!-- generated:menu-row-fields -->
|
|
250
|
+
| Field | Type | Required | Meaning |
|
|
251
|
+
| --- | --- | --- | --- |
|
|
252
|
+
| `type` | `toggle` \| `slider` \| `choice` \| `action` \| `group` | yes | Row type. |
|
|
253
|
+
| `id` | identifier ≤ 48 bytes | yes | Unique among all rows of the widget; key of the stored value. |
|
|
254
|
+
| `label` | `MenuLabel` | yes | Localized row label. |
|
|
255
|
+
| `icon` | Lucide icon name | no | Leading icon from the host list, drawn by the host. |
|
|
256
|
+
| `visibleWhen` | identifier ≤ 48 bytes | no | ID of a `toggle` row declared earlier; this row is shown only while that toggle is on. |
|
|
257
|
+
| `requires` | `fps` \| `telemetry.cpuTemperature` \| `telemetry.gpuTemperature` | no | Host data source; the host hides the row when it cannot supply it. |
|
|
258
|
+
<!-- /generated:menu-row-fields -->
|
|
259
|
+
|
|
260
|
+
A row with `visibleWhen` shows only while the named toggle is on: the
|
|
261
|
+
Clock's date format appears when the date does. A row with `requires` is
|
|
262
|
+
hidden on a machine that cannot supply that data, as the Performance
|
|
263
|
+
widget's temperature rows are:
|
|
264
|
+
|
|
265
|
+
<!-- source: widgets/performance/manifest.json -->
|
|
266
|
+
```json
|
|
267
|
+
"requires": "telemetry.cpuTemperature",
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
A `group` row opens a side flyout with its own rows; the Performance
|
|
271
|
+
widget keeps its five metric toggles under one row:
|
|
272
|
+
|
|
273
|
+
<!-- source: widgets/performance/manifest.json -->
|
|
274
|
+
```json
|
|
275
|
+
"type": "group",
|
|
276
|
+
"id": "shown-values",
|
|
277
|
+
"label": { "en": "Shown values", "fr": "Valeurs affichées" },
|
|
278
|
+
"rows": [
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Row types
|
|
282
|
+
|
|
283
|
+
<!-- generated:menu-row-types -->
|
|
284
|
+
### `toggle`
|
|
285
|
+
|
|
286
|
+
Boolean switch.
|
|
287
|
+
|
|
288
|
+
| Field | Type | Required | Meaning |
|
|
289
|
+
| --- | --- | --- | --- |
|
|
290
|
+
| `default` | boolean | yes | Initial value. |
|
|
291
|
+
|
|
292
|
+
### `slider`
|
|
293
|
+
|
|
294
|
+
Bounded number; `step` > 0, `step` ≤ `max - min`, at most 10000 steps, `default` within range.
|
|
295
|
+
|
|
296
|
+
| Field | Type | Required | Meaning |
|
|
297
|
+
| --- | --- | --- | --- |
|
|
298
|
+
| `min` | number -1000000 to 1000000 | yes | Lower bound. |
|
|
299
|
+
| `max` | number -1000000 to 1000000 | yes | Upper bound, greater than `min`. |
|
|
300
|
+
| `step` | number -1000000 to 1000000 | yes | Increment. |
|
|
301
|
+
| `default` | number -1000000 to 1000000 | yes | Initial value. |
|
|
302
|
+
|
|
303
|
+
### `choice`
|
|
304
|
+
|
|
305
|
+
One value among declared choices.
|
|
306
|
+
|
|
307
|
+
| Field | Type | Required | Meaning |
|
|
308
|
+
| --- | --- | --- | --- |
|
|
309
|
+
| `choices` | list of `MenuChoice` ≤ 16 | yes | At least 2 choices. |
|
|
310
|
+
| `default` | identifier ≤ 48 bytes | yes | Value of one declared choice. |
|
|
311
|
+
|
|
312
|
+
### `action`
|
|
313
|
+
|
|
314
|
+
Calls the handler registered with `onMenu`, with the row ID. Not a user action.
|
|
315
|
+
|
|
316
|
+
### `group`
|
|
317
|
+
|
|
318
|
+
Side flyout holding non-group rows.
|
|
319
|
+
|
|
320
|
+
| Field | Type | Required | Meaning |
|
|
321
|
+
| --- | --- | --- | --- |
|
|
322
|
+
| `rows` | list of `MenuRow` ≤ 16 | yes | At least one row; a `group` is not allowed here. |
|
|
323
|
+
<!-- /generated:menu-row-types -->
|
|
324
|
+
|
|
325
|
+
### Labels and choices
|
|
326
|
+
|
|
327
|
+
A `label` is an object with both languages:
|
|
328
|
+
|
|
329
|
+
<!-- generated:menu-label -->
|
|
330
|
+
| Field | Type | Required | Meaning |
|
|
331
|
+
| --- | --- | --- | --- |
|
|
332
|
+
| `en` | `label text` | yes | English label. |
|
|
333
|
+
| `fr` | `label text` | yes | French label. |
|
|
334
|
+
<!-- /generated:menu-label -->
|
|
335
|
+
|
|
336
|
+
Each entry of `choices` is a value and its label:
|
|
337
|
+
|
|
338
|
+
<!-- generated:menu-choice -->
|
|
339
|
+
| Field | Type | Required | Meaning |
|
|
340
|
+
| --- | --- | --- | --- |
|
|
341
|
+
| `value` | identifier ≤ 48 bytes | yes | Stored value; unique within the row. |
|
|
342
|
+
| `label` | `MenuLabel` | yes | Localized choice label. |
|
|
343
|
+
<!-- /generated:menu-choice -->
|
|
344
|
+
|
|
345
|
+
## Required data sources
|
|
346
|
+
|
|
347
|
+
`requires` at the top level lists data sources the widget cannot work
|
|
348
|
+
without, with the same names as a row's `requires`. On a machine that lacks
|
|
349
|
+
one, OverCrow neither starts nor shows the widget and keeps its place in the
|
|
350
|
+
layout; the widget comes back when the source does. Use it for a widget
|
|
351
|
+
that has nothing to show otherwise, such as a frame-rate counter without a
|
|
352
|
+
frame-rate source. For a single optional value, prefer a row's `requires`.
|
|
353
|
+
|
|
354
|
+
## A larger memory budget
|
|
355
|
+
|
|
356
|
+
The logic runs with a heap of 16 MiB. A widget that needs more asks for it
|
|
357
|
+
with `vm`; nothing else about the VM's budgets can be changed.
|
|
358
|
+
|
|
359
|
+
<!-- generated:manifest-vm -->
|
|
360
|
+
| Field | Type | Required | Meaning |
|
|
361
|
+
| --- | --- | --- | --- |
|
|
362
|
+
| `heapMiB` | integer 16 to 48 | yes | QuickJS heap ceiling in MiB, from 16 MiB to 48 MiB. The VM process ceiling (64 MiB) does not change. |
|
|
363
|
+
<!-- /generated:manifest-vm -->
|
|
364
|
+
|
|
365
|
+
The memory ceiling of the widget's process stays the same, so a larger heap
|
|
366
|
+
leaves less room for everything else. Ask for it only when
|
|
367
|
+
`overcrow-widget dev` shows the widget stopping with `resource_limit`.
|
|
368
|
+
|
|
369
|
+
## How the manifest is checked
|
|
370
|
+
|
|
371
|
+
`overcrow-widget check` validates the manifest with the validator OverCrow
|
|
372
|
+
itself runs, and points at the member it refuses:
|
|
373
|
+
|
|
374
|
+
```text
|
|
375
|
+
error[manifest.sizing]: `sizing` is out of bounds or inconsistent
|
|
376
|
+
--> manifest.json:7:3
|
|
377
|
+
|
|
|
378
|
+
7 | "sizing": {
|
|
379
|
+
| ^
|
|
380
|
+
= help: `min` <= `preferred` <= `max`, each within the schema's widget size bounds
|
|
381
|
+
check: 1 error(s), 0 warning(s)
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
OverCrow validates it again when the package is admitted to the catalog,
|
|
385
|
+
when it is installed and each time the widget starts. A new version whose
|
|
386
|
+
manifest asks for more than the previous one (a network rule, a game event,
|
|
387
|
+
a capability, storage or the clipboard) waits until the user approves it
|
|
388
|
+
in the Control Center before it replaces the installed version.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# MCP
|
|
2
|
+
|
|
3
|
+
PlayerVox OverCrow has a server for AI assistants: `@overcrow/mcp`. Add it
|
|
4
|
+
to Claude Code, Claude Desktop, Cursor, VS Code or Codex, and your
|
|
5
|
+
assistant can create a widget, check it, test it, audit it, package it and
|
|
6
|
+
prepare its submission. You need Node.js 22.18 or later, nothing else: the
|
|
7
|
+
server installs the OverCrow tools it needs by itself.
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
claude mcp add overcrow -- npx -y @overcrow/mcp
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Then ask: "Create an OverCrow widget that shows…".
|
|
14
|
+
|
|
15
|
+
## Add the server
|
|
16
|
+
|
|
17
|
+
Open your widgets folder in the assistant, then add the server.
|
|
18
|
+
|
|
19
|
+
### In one command
|
|
20
|
+
|
|
21
|
+
**Claude Code**, from that folder:
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
claude mcp add overcrow -- npx -y @overcrow/mcp
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Codex**:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
codex mcp add overcrow -- npx -y @overcrow/mcp
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**VS Code**: [install in 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), or:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
code --add-mcp '{"name":"overcrow","command":"npx","args":["-y","@overcrow/mcp"]}'
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### With a configuration file
|
|
40
|
+
|
|
41
|
+
**Cursor**: a `.cursor/mcp.json` file in the folder.
|
|
42
|
+
|
|
43
|
+
<!-- source: mcp/examples/cursor-mcp.json -->
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"mcpServers": {
|
|
47
|
+
"overcrow": {
|
|
48
|
+
"command": "npx",
|
|
49
|
+
"args": ["-y", "@overcrow/mcp"]
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**VS Code**: a `.vscode/mcp.json` file in the folder.
|
|
56
|
+
|
|
57
|
+
<!-- source: mcp/examples/vscode-mcp.json -->
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"servers": {
|
|
61
|
+
"overcrow": {
|
|
62
|
+
"type": "stdio",
|
|
63
|
+
"command": "npx",
|
|
64
|
+
"args": ["-y", "@overcrow/mcp"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Claude Desktop** starts its servers outside your folders: name your
|
|
71
|
+
widgets folder with `--root` in `claude_desktop_config.json` (Settings,
|
|
72
|
+
Developer, Edit Config), then restart Claude Desktop.
|
|
73
|
+
|
|
74
|
+
<!-- source: mcp/examples/claude_desktop_config.json -->
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"mcpServers": {
|
|
78
|
+
"overcrow": {
|
|
79
|
+
"command": "npx",
|
|
80
|
+
"args": ["-y", "@overcrow/mcp", "--root", "C:\\Users\\you\\Documents\\widgets"]
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## What the server does
|
|
87
|
+
|
|
88
|
+
- **The first time**, it downloads the OverCrow creator tools of your
|
|
89
|
+
computer (the [command-line tool](cli.md) and the runtime that plays the
|
|
90
|
+
[tests](testing.md), about 15 MB) from OverCrow's GitHub release. It
|
|
91
|
+
checks every file against the digests written in the server, then keeps
|
|
92
|
+
them in its own folder (`~/.cache/overcrow-mcp`, or
|
|
93
|
+
`%LOCALAPPDATA%\overcrow-mcp` on Windows). Nothing goes on your `PATH`,
|
|
94
|
+
and no administrator right is needed.
|
|
95
|
+
- **Then** your assistant works with its tools, in this order: create the
|
|
96
|
+
widget from a template, install the SDK (it asks you first), check, test
|
|
97
|
+
(it sees the images that differ), audit, package, prepare the
|
|
98
|
+
submission.
|
|
99
|
+
- **The widget ID** is final. Your assistant asks you for it: your
|
|
100
|
+
publisher handle in the OverCrow creator space and a name
|
|
101
|
+
(`nova.lol-timers`), or a domain you can verify
|
|
102
|
+
(`gg.nova.lol-timers`).
|
|
103
|
+
- **The submission**: the server checks everything the creator space asks
|
|
104
|
+
for, then writes the ZIP of your widget's sources to `dist/`, without
|
|
105
|
+
`node_modules`, `dist`, hidden files or keys, and lists what it left out.
|
|
106
|
+
It also lists the texts to write: why the widget needs each permission,
|
|
107
|
+
the release notes and the description in English and French. Your
|
|
108
|
+
assistant drafts them with you.
|
|
109
|
+
- **The audit** scores the widget out of 100 for security and for
|
|
110
|
+
lightness, with a fix and an example from a
|
|
111
|
+
[reference widget](widgets.md) for each finding: unused permissions,
|
|
112
|
+
network rules that are too broad, secrets, clipboard writes without a
|
|
113
|
+
user action, fast timers, network polling, lists that never stop
|
|
114
|
+
growing, large responses read in one turn, heavy images.
|
|
115
|
+
- **The documentation** of this site, in English and French, and the
|
|
116
|
+
sources of the reference widgets come with the server: your assistant
|
|
117
|
+
reads them without network access.
|
|
118
|
+
|
|
119
|
+
## What it does not do
|
|
120
|
+
|
|
121
|
+
- It never sends, signs or publishes anything. You send the ZIP and the
|
|
122
|
+
texts in the OverCrow creator space, at creators.playervox.com.
|
|
123
|
+
- It does not install your widget in OverCrow: trying it in a game is the
|
|
124
|
+
[development channel](dev-channel.md) of the command-line tool.
|
|
125
|
+
- It sends nothing about you: no telemetry, no account.
|
|
126
|
+
|
|
127
|
+
## Security
|
|
128
|
+
|
|
129
|
+
- **Your folders only.** The server works in the folder open in your
|
|
130
|
+
assistant (or the ones given with `--root`). It refuses a system folder,
|
|
131
|
+
your whole home folder, hidden folders, and links that lead outside.
|
|
132
|
+
- **No command of its own choice.** The server runs the OverCrow
|
|
133
|
+
command-line tool and npm, nothing else, never through a shell.
|
|
134
|
+
- **Checked downloads.** It downloads only the pinned files from GitHub,
|
|
135
|
+
and checks them before use. npm installs only `@overcrow/sdk` and
|
|
136
|
+
TypeScript, with install scripts disabled, and their integrity is
|
|
137
|
+
checked against the published packages.
|
|
138
|
+
- **You confirm.** Installing packages and replacing reference images
|
|
139
|
+
need your agreement.
|
|
140
|
+
- **Your files are data.** What the tools return from your files is
|
|
141
|
+
marked as data: a text inside a widget cannot give orders to your
|
|
142
|
+
assistant through the server. Still read what your assistant changes,
|
|
143
|
+
and approve its actions as you usually do.
|
|
144
|
+
|
|
145
|
+
## Offline
|
|
146
|
+
|
|
147
|
+
Download `overcrow-creator-tools-VERSION-PLATFORM.zip` of your platform
|
|
148
|
+
from OverCrow's GitHub release once, put it in your widgets folder, and ask
|
|
149
|
+
your assistant to run `setup` with it (`zipPath`). Or start the server with
|
|
150
|
+
`--tools-zip` and the path of the file. The file must be exactly the one
|
|
151
|
+
the server pins.
|
|
152
|
+
|
|
153
|
+
## Supported computers
|
|
154
|
+
|
|
155
|
+
Checking, testing and packaging need Windows x64 or Linux x86-64. On
|
|
156
|
+
macOS and on ARM, the server still gives the documentation, the
|
|
157
|
+
explanations and the audit.
|
|
158
|
+
|
|
159
|
+
## If something goes wrong
|
|
160
|
+
|
|
161
|
+
- **"not tied to a published OverCrow release"**: update the server with
|
|
162
|
+
`npx -y @overcrow/mcp@latest`.
|
|
163
|
+
- **Behind a proxy**: set `HTTPS_PROXY` in the server's environment.
|
|
164
|
+
- **"cannot work in /"** (often Claude Desktop): add `--root` and your
|
|
165
|
+
widgets folder.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# The package
|
|
2
|
+
|
|
3
|
+
A PlayerVox OverCrow widget is distributed as one file, `<id>-<version>.ocpkg`:
|
|
4
|
+
an archive of the manifest, the compiled view, the style, one script, the
|
|
5
|
+
messages, the images and the license. `overcrow-widget package` builds it,
|
|
6
|
+
and OverCrow reads it with the same code that built it.
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
overcrow-widget package
|
|
10
|
+
overcrow-widget inspect dist/com.example.my-widget-0.1.0.ocpkg
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`package` checks the project, writes the archive to `dist/` and prints its
|
|
14
|
+
size and its SHA-256. `inspect` shows what a package holds and what it asks
|
|
15
|
+
for, as a reviewer sees it.
|
|
16
|
+
|
|
17
|
+
## What goes in
|
|
18
|
+
|
|
19
|
+
<!-- generated:package-files -->
|
|
20
|
+
| Path | Required | Limit | Meaning |
|
|
21
|
+
| --- | --- | --- | --- |
|
|
22
|
+
| `manifest.json` | yes | 64 KiB | The manifest, as written. |
|
|
23
|
+
| `ledger.json` | yes | 64 KiB | Canonical SHA-256 and byte ledger of every other entry, written by the CLI. |
|
|
24
|
+
| `logic.js` | yes | 512 KiB | The only executable content: one ES2023 script without imports, compiled expressions of the view included. UTF-8, not empty. |
|
|
25
|
+
| `view.json` | yes | 512 KiB | Compiled view. The `view.ocml` source is not shipped. |
|
|
26
|
+
| `style.ocss` | no | 128 KiB | Style sheet source, parsed by the host when the widget starts. UTF-8. |
|
|
27
|
+
| `locales/en.json` | no | 256 KiB | English messages; present if and only if `locales/fr.json` is, with the same keys. |
|
|
28
|
+
| `locales/fr.json` | no | 256 KiB | French messages. |
|
|
29
|
+
| `LICENSE` | yes | 64 KiB | License text of the package. UTF-8, not empty. |
|
|
30
|
+
| `assets/<path>.{png,jpg,jpeg,webp}` | no | 2 MiB | Images whose signature matches the extension; lowercase `[a-z0-9_-]` segments, at most 4 below `assets/`. |
|
|
31
|
+
<!-- /generated:package-files -->
|
|
32
|
+
|
|
33
|
+
Any other entry rejects the package: a second script, an HTML file, a
|
|
34
|
+
WebAssembly module, native code, a hidden file, another locale. Text files
|
|
35
|
+
are UTF-8, without a byte-order mark.
|
|
36
|
+
|
|
37
|
+
What you write is not all packaged as it is:
|
|
38
|
+
|
|
39
|
+
| In the project | In the package |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| `manifest.json` | the same bytes |
|
|
42
|
+
| `view.ocml` | `view.json`, the compiled view; the source is not shipped |
|
|
43
|
+
| `logic.ts` or `logic.js` | `logic.js`: your module, the SDK and the compiled expressions of the view, in one script |
|
|
44
|
+
| `style.ocss`, `locales/`, `assets/`, `LICENSE` | the same bytes |
|
|
45
|
+
| `package.json`, `tsconfig.json`, `node_modules/`, `listing.json`, `tests/` | not packaged |
|
|
46
|
+
|
|
47
|
+
Images are PNG, JPEG or WebP files under `assets/`, in lowercase paths, and
|
|
48
|
+
the content of each file must match its extension. The view names one as
|
|
49
|
+
`src="assets/logo.png"`, and the `preview` of a
|
|
50
|
+
[listing](publishing.md#the-listing) is one of those packaged images.
|
|
51
|
+
|
|
52
|
+
## The script
|
|
53
|
+
|
|
54
|
+
`logic.js` is the only executable content of a package. The tool builds it
|
|
55
|
+
from your logic module, the SDK it embeds and one function per expression
|
|
56
|
+
and handler of the view, then removes what is unused and shortens local
|
|
57
|
+
names. Two consequences:
|
|
58
|
+
|
|
59
|
+
- the SDK in your `node_modules` is used for type checking only: the one
|
|
60
|
+
that runs is the tool's, and `inspect` shows its version;
|
|
61
|
+
- the view itself carries no code: `view.json` refers to the functions of
|
|
62
|
+
`logic.js` by number.
|
|
63
|
+
|
|
64
|
+
A package holds source that OverCrow can read and check, never compiled
|
|
65
|
+
bytecode.
|
|
66
|
+
|
|
67
|
+
## The same bytes every time
|
|
68
|
+
|
|
69
|
+
Packaging is deterministic: the same sources and the same version of the
|
|
70
|
+
tool give the same archive, byte for byte, on every run and every system.
|
|
71
|
+
That is what lets a reviewer rebuild your package from the sources you
|
|
72
|
+
submit and compare, and what lets the catalog name a package by its
|
|
73
|
+
SHA-256.
|
|
74
|
+
|
|
75
|
+
For that, the archive has one exact layout: an uncompressed zip, with its
|
|
76
|
+
entries sorted, fixed dates and no extra field. Use `overcrow-widget
|
|
77
|
+
package` to write it; an archive made with another zip tool is refused.
|
|
78
|
+
|
|
79
|
+
## The ledger
|
|
80
|
+
|
|
81
|
+
`ledger.json`, written by the tool, lists every other file with its size
|
|
82
|
+
and its SHA-256. OverCrow recomputes it from the archive and requires the
|
|
83
|
+
same bytes. It is what ties each file to the package: a file changed,
|
|
84
|
+
added or removed after packaging no longer matches.
|
|
85
|
+
|
|
86
|
+
## How OverCrow checks a package
|
|
87
|
+
|
|
88
|
+
OverCrow validates a package in full when it is admitted to the catalog,
|
|
89
|
+
when it is installed, and again **each time the widget starts**:
|
|
90
|
+
|
|
91
|
+
1. the size of the archive, its exact layout and the checksum of each
|
|
92
|
+
entry;
|
|
93
|
+
2. every path, against the list of files above and their size limits, and
|
|
94
|
+
the required files;
|
|
95
|
+
3. the ledger, byte for byte;
|
|
96
|
+
4. the manifest, the script, the style, the pair of locales, the license,
|
|
97
|
+
each image, and the compiled view: known elements in allowed places,
|
|
98
|
+
known attributes with values of the right type, events of their element,
|
|
99
|
+
components used as declared, the bounds of the view, and each static
|
|
100
|
+
image present in the package.
|
|
101
|
+
|
|
102
|
+
For a package of the catalog, the size and the SHA-256 of the archive must
|
|
103
|
+
first equal what the signed catalog says, and the manifest must equal the
|
|
104
|
+
one the catalog lists. A widget whose package fails any of these does not
|
|
105
|
+
start. `overcrow-widget check` and `package` run the same checks, so you
|
|
106
|
+
see a problem before a user does.
|
|
107
|
+
|
|
108
|
+
## Installed from the catalog, or locally
|
|
109
|
+
|
|
110
|
+
- A package **from the signed catalog** is verified: this is how users get
|
|
111
|
+
widgets. See [publishing and review](publishing.md).
|
|
112
|
+
- A package sent by `overcrow-widget dev` is a **development package**:
|
|
113
|
+
marked "Unverified", for the session only. See
|
|
114
|
+
[the development channel](dev-channel.md).
|
|
115
|
+
|
|
116
|
+
A package that does not come from the catalog cannot use an ID under
|
|
117
|
+
`com.playervox`.
|
|
118
|
+
|
|
119
|
+
## Limits of a package
|
|
120
|
+
|
|
121
|
+
The sizes of each file and of the archive are in
|
|
122
|
+
[limits](limits.md#project-files-and-package). When a package is over a
|
|
123
|
+
bound, `check` says which:
|
|
124
|
+
|
|
125
|
+
| Code | Problem |
|
|
126
|
+
| --- | --- |
|
|
127
|
+
| `project.file_size` | A source file is larger than its limit. |
|
|
128
|
+
| `project.entry_limit` | The project has more files than a package may hold. |
|
|
129
|
+
| `project.asset_path` | An image's path is not lowercase, is too deep or has another extension. |
|
|
130
|
+
| `package.file_size` | A built file (`logic.js`, `view.json`) is larger than its limit. |
|
|
131
|
+
| `package.archive_size` | The archive is larger than 16 MiB. |
|