@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.
Files changed (489) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -1
  3. package/dist/audit/index.js +103 -0
  4. package/dist/audit/lexer.js +417 -0
  5. package/dist/audit/project.js +200 -0
  6. package/dist/audit/rules.js +661 -0
  7. package/dist/bootstrap/download.js +229 -0
  8. package/dist/bootstrap/install.js +280 -0
  9. package/dist/bootstrap/pin.js +85 -0
  10. package/dist/bootstrap/pin.json +119 -0
  11. package/dist/bootstrap/zip.js +258 -0
  12. package/dist/cli.js +200 -0
  13. package/dist/confine.js +244 -0
  14. package/dist/content/docs/en/cli.md +768 -0
  15. package/dist/content/docs/en/creator-space.md +78 -0
  16. package/dist/content/docs/en/dev-channel.md +130 -0
  17. package/dist/content/docs/en/elements.md +469 -0
  18. package/dist/content/docs/en/forms.md +328 -0
  19. package/dist/content/docs/en/guide.md +252 -0
  20. package/dist/content/docs/en/index.md +85 -0
  21. package/dist/content/docs/en/limits.md +241 -0
  22. package/dist/content/docs/en/logic.md +446 -0
  23. package/dist/content/docs/en/manifest.md +388 -0
  24. package/dist/content/docs/en/mcp.md +165 -0
  25. package/dist/content/docs/en/package.md +131 -0
  26. package/dist/content/docs/en/publish-a-widget.md +94 -0
  27. package/dist/content/docs/en/publish-keys.md +95 -0
  28. package/dist/content/docs/en/publishing.md +167 -0
  29. package/dist/content/docs/en/reference.md +55 -0
  30. package/dist/content/docs/en/result-shapes.md +332 -0
  31. package/dist/content/docs/en/sdk.md +295 -0
  32. package/dist/content/docs/en/security.md +115 -0
  33. package/dist/content/docs/en/service-reference.md +344 -0
  34. package/dist/content/docs/en/services.md +517 -0
  35. package/dist/content/docs/en/style-properties.md +270 -0
  36. package/dist/content/docs/en/style.md +266 -0
  37. package/dist/content/docs/en/testing.md +400 -0
  38. package/dist/content/docs/en/verified-domain.md +46 -0
  39. package/dist/content/docs/en/view.md +338 -0
  40. package/dist/content/docs/en/widget-listing.md +65 -0
  41. package/dist/content/docs/en/widget-review.md +57 -0
  42. package/dist/content/docs/en/widget-statistics.md +134 -0
  43. package/dist/content/docs/en/widgets.md +76 -0
  44. package/dist/content/docs/fr/cli.md +802 -0
  45. package/dist/content/docs/fr/creator-space.md +83 -0
  46. package/dist/content/docs/fr/dev-channel.md +140 -0
  47. package/dist/content/docs/fr/elements.md +475 -0
  48. package/dist/content/docs/fr/forms.md +341 -0
  49. package/dist/content/docs/fr/guide.md +263 -0
  50. package/dist/content/docs/fr/index.md +90 -0
  51. package/dist/content/docs/fr/limits.md +244 -0
  52. package/dist/content/docs/fr/logic.md +461 -0
  53. package/dist/content/docs/fr/manifest.md +401 -0
  54. package/dist/content/docs/fr/mcp.md +173 -0
  55. package/dist/content/docs/fr/package.md +139 -0
  56. package/dist/content/docs/fr/publish-a-widget.md +101 -0
  57. package/dist/content/docs/fr/publish-keys.md +97 -0
  58. package/dist/content/docs/fr/publishing.md +177 -0
  59. package/dist/content/docs/fr/reference.md +59 -0
  60. package/dist/content/docs/fr/result-shapes.md +333 -0
  61. package/dist/content/docs/fr/sdk.md +301 -0
  62. package/dist/content/docs/fr/security.md +129 -0
  63. package/dist/content/docs/fr/service-reference.md +346 -0
  64. package/dist/content/docs/fr/services.md +540 -0
  65. package/dist/content/docs/fr/style-properties.md +272 -0
  66. package/dist/content/docs/fr/style.md +281 -0
  67. package/dist/content/docs/fr/testing.md +417 -0
  68. package/dist/content/docs/fr/verified-domain.md +49 -0
  69. package/dist/content/docs/fr/view.md +352 -0
  70. package/dist/content/docs/fr/widget-listing.md +69 -0
  71. package/dist/content/docs/fr/widget-review.md +59 -0
  72. package/dist/content/docs/fr/widget-statistics.md +141 -0
  73. package/dist/content/docs/fr/widgets.md +81 -0
  74. package/dist/content/examples/clock/LICENSE +21 -0
  75. package/dist/content/examples/clock/README.md +75 -0
  76. package/dist/content/examples/clock/listing.json +19 -0
  77. package/dist/content/examples/clock/locales/en.json +4 -0
  78. package/dist/content/examples/clock/locales/fr.json +4 -0
  79. package/dist/content/examples/clock/logic.ts +85 -0
  80. package/dist/content/examples/clock/manifest.json +44 -0
  81. package/dist/content/examples/clock/package.json +16 -0
  82. package/dist/content/examples/clock/style.ocss +26 -0
  83. package/dist/content/examples/clock/tests/hidden.scenario.json +68 -0
  84. package/dist/content/examples/clock/tests/load-logic.mjs +22 -0
  85. package/dist/content/examples/clock/tests/logic.test.mjs +89 -0
  86. package/dist/content/examples/clock/tests/options.scenario.json +108 -0
  87. package/dist/content/examples/clock/tests/preview.scenario.json +25 -0
  88. package/dist/content/examples/clock/tests/render.scenario.json +94 -0
  89. package/dist/content/examples/clock/tests/summer-time.scenario.json +74 -0
  90. package/dist/content/examples/clock/tests/ticks.scenario.json +120 -0
  91. package/dist/content/examples/clock/tsconfig.json +16 -0
  92. package/dist/content/examples/clock/view.ocml +8 -0
  93. package/dist/content/examples/countdown/LICENSE +20 -0
  94. package/dist/content/examples/countdown/listing.json +10 -0
  95. package/dist/content/examples/countdown/locales/en.json +15 -0
  96. package/dist/content/examples/countdown/locales/fr.json +15 -0
  97. package/dist/content/examples/countdown/logic.ts +179 -0
  98. package/dist/content/examples/countdown/manifest.json +34 -0
  99. package/dist/content/examples/countdown/package.json +15 -0
  100. package/dist/content/examples/countdown/style.ocss +94 -0
  101. package/dist/content/examples/countdown/tsconfig.json +16 -0
  102. package/dist/content/examples/countdown/view.ocml +42 -0
  103. package/dist/content/examples/fps/LICENSE +21 -0
  104. package/dist/content/examples/fps/README.md +64 -0
  105. package/dist/content/examples/fps/listing.json +19 -0
  106. package/dist/content/examples/fps/locales/en.json +11 -0
  107. package/dist/content/examples/fps/locales/fr.json +11 -0
  108. package/dist/content/examples/fps/logic.ts +64 -0
  109. package/dist/content/examples/fps/manifest.json +30 -0
  110. package/dist/content/examples/fps/package.json +16 -0
  111. package/dist/content/examples/fps/style.ocss +31 -0
  112. package/dist/content/examples/fps/submission.json +8 -0
  113. package/dist/content/examples/fps/tests/label.scenario.json +63 -0
  114. package/dist/content/examples/fps/tests/load-logic.mjs +22 -0
  115. package/dist/content/examples/fps/tests/logic.test.mjs +60 -0
  116. package/dist/content/examples/fps/tests/preview.scenario.json +29 -0
  117. package/dist/content/examples/fps/tests/refused.scenario.json +20 -0
  118. package/dist/content/examples/fps/tests/render.scenario.json +96 -0
  119. package/dist/content/examples/fps/tests/stale.scenario.json +91 -0
  120. package/dist/content/examples/fps/tests/unavailable.scenario.json +111 -0
  121. package/dist/content/examples/fps/tsconfig.json +16 -0
  122. package/dist/content/examples/fps/view.ocml +11 -0
  123. package/dist/content/examples/media/LICENSE +21 -0
  124. package/dist/content/examples/media/README.md +147 -0
  125. package/dist/content/examples/media/listing.json +19 -0
  126. package/dist/content/examples/media/locales/en.json +11 -0
  127. package/dist/content/examples/media/locales/fr.json +11 -0
  128. package/dist/content/examples/media/logic.ts +191 -0
  129. package/dist/content/examples/media/manifest.json +35 -0
  130. package/dist/content/examples/media/package.json +16 -0
  131. package/dist/content/examples/media/style.ocss +148 -0
  132. package/dist/content/examples/media/submission.json +12 -0
  133. package/dist/content/examples/media/tests/covers.scenario.json +144 -0
  134. package/dist/content/examples/media/tests/gesture.scenario.json +173 -0
  135. package/dist/content/examples/media/tests/load-logic.mjs +22 -0
  136. package/dist/content/examples/media/tests/logic.test.mjs +176 -0
  137. package/dist/content/examples/media/tests/marquee.scenario.json +127 -0
  138. package/dist/content/examples/media/tests/preview.scenario.json +52 -0
  139. package/dist/content/examples/media/tests/read-only.scenario.json +53 -0
  140. package/dist/content/examples/media/tests/refused.scenario.json +22 -0
  141. package/dist/content/examples/media/tests/refused.test.mjs +31 -0
  142. package/dist/content/examples/media/tests/render.scenario.json +136 -0
  143. package/dist/content/examples/media/tests/states.scenario.json +257 -0
  144. package/dist/content/examples/media/tests/unavailable.scenario.json +120 -0
  145. package/dist/content/examples/media/tsconfig.json +16 -0
  146. package/dist/content/examples/media/view.ocml +41 -0
  147. package/dist/content/examples/notes/LICENSE +21 -0
  148. package/dist/content/examples/notes/README.md +219 -0
  149. package/dist/content/examples/notes/listing.json +19 -0
  150. package/dist/content/examples/notes/locales/en.json +25 -0
  151. package/dist/content/examples/notes/locales/fr.json +25 -0
  152. package/dist/content/examples/notes/logic.ts +799 -0
  153. package/dist/content/examples/notes/manifest.json +40 -0
  154. package/dist/content/examples/notes/package.json +16 -0
  155. package/dist/content/examples/notes/style.ocss +469 -0
  156. package/dist/content/examples/notes/submission.json +12 -0
  157. package/dist/content/examples/notes/tests/checks.scenario.json +237 -0
  158. package/dist/content/examples/notes/tests/create.scenario.json +260 -0
  159. package/dist/content/examples/notes/tests/delete.scenario.json +342 -0
  160. package/dist/content/examples/notes/tests/drafts.scenario.json +714 -0
  161. package/dist/content/examples/notes/tests/editor.scenario.json +232 -0
  162. package/dist/content/examples/notes/tests/frame.scenario.json +93 -0
  163. package/dist/content/examples/notes/tests/interactive.scenario.json +344 -0
  164. package/dist/content/examples/notes/tests/limits.scenario.json +1351 -0
  165. package/dist/content/examples/notes/tests/load-logic.mjs +22 -0
  166. package/dist/content/examples/notes/tests/logic.test.mjs +514 -0
  167. package/dist/content/examples/notes/tests/preview.scenario.json +99 -0
  168. package/dist/content/examples/notes/tests/read-only.scenario.json +105 -0
  169. package/dist/content/examples/notes/tests/refused.scenario.json +33 -0
  170. package/dist/content/examples/notes/tests/save.scenario.json +378 -0
  171. package/dist/content/examples/notes/tests/states.scenario.json +640 -0
  172. package/dist/content/examples/notes/tests/typing.scenario.json +562 -0
  173. package/dist/content/examples/notes/tests/unavailable.scenario.json +246 -0
  174. package/dist/content/examples/notes/tsconfig.json +16 -0
  175. package/dist/content/examples/notes/view.ocml +154 -0
  176. package/dist/content/examples/performance/LICENSE +21 -0
  177. package/dist/content/examples/performance/README.md +134 -0
  178. package/dist/content/examples/performance/listing.json +19 -0
  179. package/dist/content/examples/performance/locales/en.json +20 -0
  180. package/dist/content/examples/performance/locales/fr.json +20 -0
  181. package/dist/content/examples/performance/logic.ts +210 -0
  182. package/dist/content/examples/performance/manifest.json +83 -0
  183. package/dist/content/examples/performance/package.json +16 -0
  184. package/dist/content/examples/performance/style.ocss +75 -0
  185. package/dist/content/examples/performance/submission.json +12 -0
  186. package/dist/content/examples/performance/tests/fahrenheit.scenario.json +110 -0
  187. package/dist/content/examples/performance/tests/horizontal.scenario.json +96 -0
  188. package/dist/content/examples/performance/tests/load-logic.mjs +22 -0
  189. package/dist/content/examples/performance/tests/logic.test.mjs +226 -0
  190. package/dist/content/examples/performance/tests/menu.scenario.json +170 -0
  191. package/dist/content/examples/performance/tests/no-fps-source.scenario.json +47 -0
  192. package/dist/content/examples/performance/tests/preview.scenario.json +45 -0
  193. package/dist/content/examples/performance/tests/refused.scenario.json +20 -0
  194. package/dist/content/examples/performance/tests/refused.test.mjs +19 -0
  195. package/dist/content/examples/performance/tests/region.scenario.json +89 -0
  196. package/dist/content/examples/performance/tests/render.scenario.json +112 -0
  197. package/dist/content/examples/performance/tests/sources.scenario.json +151 -0
  198. package/dist/content/examples/performance/tests/stale.scenario.json +111 -0
  199. package/dist/content/examples/performance/tests/telemetry-only.scenario.json +44 -0
  200. package/dist/content/examples/performance/tests/thresholds.scenario.json +147 -0
  201. package/dist/content/examples/performance/tests/waiting.scenario.json +105 -0
  202. package/dist/content/examples/performance/tsconfig.json +16 -0
  203. package/dist/content/examples/performance/view.ocml +18 -0
  204. package/dist/content/examples/playervox-journal/LICENSE +21 -0
  205. package/dist/content/examples/playervox-journal/README.md +150 -0
  206. package/dist/content/examples/playervox-journal/listing.json +19 -0
  207. package/dist/content/examples/playervox-journal/locales/en.json +25 -0
  208. package/dist/content/examples/playervox-journal/locales/fr.json +25 -0
  209. package/dist/content/examples/playervox-journal/logic.ts +556 -0
  210. package/dist/content/examples/playervox-journal/manifest.json +19 -0
  211. package/dist/content/examples/playervox-journal/package.json +16 -0
  212. package/dist/content/examples/playervox-journal/style.ocss +142 -0
  213. package/dist/content/examples/playervox-journal/submission.json +12 -0
  214. package/dist/content/examples/playervox-journal/tests/changes.scenario.json +482 -0
  215. package/dist/content/examples/playervox-journal/tests/delete.scenario.json +432 -0
  216. package/dist/content/examples/playervox-journal/tests/frame.scenario.json +169 -0
  217. package/dist/content/examples/playervox-journal/tests/load-logic.mjs +22 -0
  218. package/dist/content/examples/playervox-journal/tests/logic.test.mjs +349 -0
  219. package/dist/content/examples/playervox-journal/tests/paging.scenario.json +428 -0
  220. package/dist/content/examples/playervox-journal/tests/preview.scenario.json +184 -0
  221. package/dist/content/examples/playervox-journal/tests/read-only.scenario.json +157 -0
  222. package/dist/content/examples/playervox-journal/tests/refused.scenario.json +39 -0
  223. package/dist/content/examples/playervox-journal/tests/scale.scenario.json +286 -0
  224. package/dist/content/examples/playervox-journal/tests/signed-out.scenario.json +134 -0
  225. package/dist/content/examples/playervox-journal/tests/states.scenario.json +741 -0
  226. package/dist/content/examples/playervox-journal/tests/unavailable.scenario.json +183 -0
  227. package/dist/content/examples/playervox-journal/tsconfig.json +16 -0
  228. package/dist/content/examples/playervox-journal/view.ocml +52 -0
  229. package/dist/content/examples/playervox-rating/LICENSE +21 -0
  230. package/dist/content/examples/playervox-rating/README.md +166 -0
  231. package/dist/content/examples/playervox-rating/listing.json +19 -0
  232. package/dist/content/examples/playervox-rating/locales/en.json +35 -0
  233. package/dist/content/examples/playervox-rating/locales/fr.json +35 -0
  234. package/dist/content/examples/playervox-rating/logic.ts +581 -0
  235. package/dist/content/examples/playervox-rating/manifest.json +19 -0
  236. package/dist/content/examples/playervox-rating/package.json +16 -0
  237. package/dist/content/examples/playervox-rating/style.ocss +333 -0
  238. package/dist/content/examples/playervox-rating/submission.json +12 -0
  239. package/dist/content/examples/playervox-rating/tests/account.scenario.json +125 -0
  240. package/dist/content/examples/playervox-rating/tests/bounds.scenario.json +73 -0
  241. package/dist/content/examples/playervox-rating/tests/draft.scenario.json +199 -0
  242. package/dist/content/examples/playervox-rating/tests/form.scenario.json +142 -0
  243. package/dist/content/examples/playervox-rating/tests/load-logic.mjs +22 -0
  244. package/dist/content/examples/playervox-rating/tests/logic.test.mjs +346 -0
  245. package/dist/content/examples/playervox-rating/tests/offline.scenario.json +142 -0
  246. package/dist/content/examples/playervox-rating/tests/preview.scenario.json +44 -0
  247. package/dist/content/examples/playervox-rating/tests/publish-keyboard.scenario.json +221 -0
  248. package/dist/content/examples/playervox-rating/tests/publish-pointer.scenario.json +314 -0
  249. package/dist/content/examples/playervox-rating/tests/read-only.scenario.json +70 -0
  250. package/dist/content/examples/playervox-rating/tests/refused.scenario.json +45 -0
  251. package/dist/content/examples/playervox-rating/tests/states.scenario.json +362 -0
  252. package/dist/content/examples/playervox-rating/tsconfig.json +16 -0
  253. package/dist/content/examples/playervox-rating/view.ocml +62 -0
  254. package/dist/content/examples/playervox-reviews/LICENSE +21 -0
  255. package/dist/content/examples/playervox-reviews/README.md +194 -0
  256. package/dist/content/examples/playervox-reviews/listing.json +19 -0
  257. package/dist/content/examples/playervox-reviews/locales/en.json +32 -0
  258. package/dist/content/examples/playervox-reviews/locales/fr.json +32 -0
  259. package/dist/content/examples/playervox-reviews/logic.ts +822 -0
  260. package/dist/content/examples/playervox-reviews/manifest.json +30 -0
  261. package/dist/content/examples/playervox-reviews/package.json +16 -0
  262. package/dist/content/examples/playervox-reviews/style.ocss +260 -0
  263. package/dist/content/examples/playervox-reviews/submission.json +8 -0
  264. package/dist/content/examples/playervox-reviews/tests/account.scenario.json +249 -0
  265. package/dist/content/examples/playervox-reviews/tests/bounds.scenario.json +336 -0
  266. package/dist/content/examples/playervox-reviews/tests/changes.scenario.json +515 -0
  267. package/dist/content/examples/playervox-reviews/tests/filter.scenario.json +400 -0
  268. package/dist/content/examples/playervox-reviews/tests/frame.scenario.json +185 -0
  269. package/dist/content/examples/playervox-reviews/tests/keyboard.scenario.json +188 -0
  270. package/dist/content/examples/playervox-reviews/tests/load-logic.mjs +22 -0
  271. package/dist/content/examples/playervox-reviews/tests/logic.test.mjs +559 -0
  272. package/dist/content/examples/playervox-reviews/tests/offline-start.scenario.json +152 -0
  273. package/dist/content/examples/playervox-reviews/tests/offline.scenario.json +311 -0
  274. package/dist/content/examples/playervox-reviews/tests/paging.scenario.json +497 -0
  275. package/dist/content/examples/playervox-reviews/tests/preview.scenario.json +286 -0
  276. package/dist/content/examples/playervox-reviews/tests/reading.scenario.json +591 -0
  277. package/dist/content/examples/playervox-reviews/tests/refused.scenario.json +54 -0
  278. package/dist/content/examples/playervox-reviews/tests/scale.scenario.json +303 -0
  279. package/dist/content/examples/playervox-reviews/tests/states.scenario.json +700 -0
  280. package/dist/content/examples/playervox-reviews/tests/unavailable.scenario.json +192 -0
  281. package/dist/content/examples/playervox-reviews/tsconfig.json +16 -0
  282. package/dist/content/examples/playervox-reviews/view.ocml +110 -0
  283. package/dist/content/examples/playervox-score/LICENSE +21 -0
  284. package/dist/content/examples/playervox-score/README.md +131 -0
  285. package/dist/content/examples/playervox-score/listing.json +19 -0
  286. package/dist/content/examples/playervox-score/locales/en.json +23 -0
  287. package/dist/content/examples/playervox-score/locales/fr.json +23 -0
  288. package/dist/content/examples/playervox-score/logic.ts +430 -0
  289. package/dist/content/examples/playervox-score/manifest.json +47 -0
  290. package/dist/content/examples/playervox-score/package.json +16 -0
  291. package/dist/content/examples/playervox-score/style.ocss +247 -0
  292. package/dist/content/examples/playervox-score/submission.json +8 -0
  293. package/dist/content/examples/playervox-score/tests/grades.scenario.json +279 -0
  294. package/dist/content/examples/playervox-score/tests/load-logic.mjs +22 -0
  295. package/dist/content/examples/playervox-score/tests/logic.test.mjs +229 -0
  296. package/dist/content/examples/playervox-score/tests/options.scenario.json +302 -0
  297. package/dist/content/examples/playervox-score/tests/preview.scenario.json +68 -0
  298. package/dist/content/examples/playervox-score/tests/pulse.scenario.json +157 -0
  299. package/dist/content/examples/playervox-score/tests/refused.scenario.json +21 -0
  300. package/dist/content/examples/playervox-score/tests/signed-out.scenario.json +46 -0
  301. package/dist/content/examples/playervox-score/tests/states.scenario.json +450 -0
  302. package/dist/content/examples/playervox-score/tests/unavailable.scenario.json +84 -0
  303. package/dist/content/examples/playervox-score/tsconfig.json +16 -0
  304. package/dist/content/examples/playervox-score/view.ocml +51 -0
  305. package/dist/content/examples/session/LICENSE +21 -0
  306. package/dist/content/examples/session/README.md +57 -0
  307. package/dist/content/examples/session/listing.json +19 -0
  308. package/dist/content/examples/session/locales/en.json +3 -0
  309. package/dist/content/examples/session/locales/fr.json +3 -0
  310. package/dist/content/examples/session/logic.ts +26 -0
  311. package/dist/content/examples/session/manifest.json +19 -0
  312. package/dist/content/examples/session/package.json +16 -0
  313. package/dist/content/examples/session/style.ocss +16 -0
  314. package/dist/content/examples/session/submission.json +8 -0
  315. package/dist/content/examples/session/tests/hidden.scenario.json +45 -0
  316. package/dist/content/examples/session/tests/load-logic.mjs +22 -0
  317. package/dist/content/examples/session/tests/logic.test.mjs +37 -0
  318. package/dist/content/examples/session/tests/preview.scenario.json +28 -0
  319. package/dist/content/examples/session/tests/refused.scenario.json +20 -0
  320. package/dist/content/examples/session/tests/refused.test.mjs +16 -0
  321. package/dist/content/examples/session/tests/render.scenario.json +95 -0
  322. package/dist/content/examples/session/tests/ticks.scenario.json +139 -0
  323. package/dist/content/examples/session/tests/unknown.scenario.json +37 -0
  324. package/dist/content/examples/session/tsconfig.json +16 -0
  325. package/dist/content/examples/session/view.ocml +11 -0
  326. package/dist/content/examples/stopwatch/LICENSE +21 -0
  327. package/dist/content/examples/stopwatch/README.md +99 -0
  328. package/dist/content/examples/stopwatch/listing.json +19 -0
  329. package/dist/content/examples/stopwatch/locales/en.json +8 -0
  330. package/dist/content/examples/stopwatch/locales/fr.json +8 -0
  331. package/dist/content/examples/stopwatch/logic.ts +93 -0
  332. package/dist/content/examples/stopwatch/manifest.json +19 -0
  333. package/dist/content/examples/stopwatch/package.json +16 -0
  334. package/dist/content/examples/stopwatch/style.ocss +54 -0
  335. package/dist/content/examples/stopwatch/submission.json +12 -0
  336. package/dist/content/examples/stopwatch/tests/errors.scenario.json +121 -0
  337. package/dist/content/examples/stopwatch/tests/gesture.scenario.json +154 -0
  338. package/dist/content/examples/stopwatch/tests/hidden.scenario.json +57 -0
  339. package/dist/content/examples/stopwatch/tests/hundredths.scenario.json +173 -0
  340. package/dist/content/examples/stopwatch/tests/load-logic.mjs +22 -0
  341. package/dist/content/examples/stopwatch/tests/logic.test.mjs +99 -0
  342. package/dist/content/examples/stopwatch/tests/preview.scenario.json +36 -0
  343. package/dist/content/examples/stopwatch/tests/read-only.scenario.json +42 -0
  344. package/dist/content/examples/stopwatch/tests/read-only.test.mjs +18 -0
  345. package/dist/content/examples/stopwatch/tests/refused.scenario.json +22 -0
  346. package/dist/content/examples/stopwatch/tests/refused.test.mjs +18 -0
  347. package/dist/content/examples/stopwatch/tests/render.scenario.json +105 -0
  348. package/dist/content/examples/stopwatch/tests/states.scenario.json +246 -0
  349. package/dist/content/examples/stopwatch/tests/unknown.scenario.json +40 -0
  350. package/dist/content/examples/stopwatch/tsconfig.json +16 -0
  351. package/dist/content/examples/stopwatch/view.ocml +29 -0
  352. package/dist/content/examples/twitch-chat/LICENSE +21 -0
  353. package/dist/content/examples/twitch-chat/README.md +283 -0
  354. package/dist/content/examples/twitch-chat/listing.json +19 -0
  355. package/dist/content/examples/twitch-chat/locales/en.json +52 -0
  356. package/dist/content/examples/twitch-chat/locales/fr.json +52 -0
  357. package/dist/content/examples/twitch-chat/logic.ts +887 -0
  358. package/dist/content/examples/twitch-chat/manifest.json +33 -0
  359. package/dist/content/examples/twitch-chat/package.json +16 -0
  360. package/dist/content/examples/twitch-chat/style.ocss +544 -0
  361. package/dist/content/examples/twitch-chat/submission.json +12 -0
  362. package/dist/content/examples/twitch-chat/tests/account.scenario.json +325 -0
  363. package/dist/content/examples/twitch-chat/tests/burst.scenario.json +1866 -0
  364. package/dist/content/examples/twitch-chat/tests/channel-refused.scenario.json +372 -0
  365. package/dist/content/examples/twitch-chat/tests/channel.scenario.json +480 -0
  366. package/dist/content/examples/twitch-chat/tests/draft.scenario.json +279 -0
  367. package/dist/content/examples/twitch-chat/tests/fade.scenario.json +269 -0
  368. package/dist/content/examples/twitch-chat/tests/failures.scenario.json +420 -0
  369. package/dist/content/examples/twitch-chat/tests/favorites.scenario.json +376 -0
  370. package/dist/content/examples/twitch-chat/tests/frame.scenario.json +152 -0
  371. package/dist/content/examples/twitch-chat/tests/lifetime.scenario.json +186 -0
  372. package/dist/content/examples/twitch-chat/tests/load-logic.mjs +22 -0
  373. package/dist/content/examples/twitch-chat/tests/logic.test.mjs +1053 -0
  374. package/dist/content/examples/twitch-chat/tests/passive.scenario.json +536 -0
  375. package/dist/content/examples/twitch-chat/tests/preview.scenario.json +147 -0
  376. package/dist/content/examples/twitch-chat/tests/read-only.scenario.json +202 -0
  377. package/dist/content/examples/twitch-chat/tests/read-only.test.mjs +63 -0
  378. package/dist/content/examples/twitch-chat/tests/refused.scenario.json +65 -0
  379. package/dist/content/examples/twitch-chat/tests/refused.test.mjs +43 -0
  380. package/dist/content/examples/twitch-chat/tests/render.scenario.json +347 -0
  381. package/dist/content/examples/twitch-chat/tests/reply.scenario.json +384 -0
  382. package/dist/content/examples/twitch-chat/tests/send-refused.scenario.json +383 -0
  383. package/dist/content/examples/twitch-chat/tests/send.scenario.json +300 -0
  384. package/dist/content/examples/twitch-chat/tests/states.scenario.json +455 -0
  385. package/dist/content/examples/twitch-chat/tests/unavailable.scenario.json +256 -0
  386. package/dist/content/examples/twitch-chat/tests/unread.scenario.json +997 -0
  387. package/dist/content/examples/twitch-chat/tsconfig.json +16 -0
  388. package/dist/content/examples/twitch-chat/view.ocml +141 -0
  389. package/dist/content/examples/warframe-market/LICENSE +21 -0
  390. package/dist/content/examples/warframe-market/README.md +176 -0
  391. package/dist/content/examples/warframe-market/listing.json +19 -0
  392. package/dist/content/examples/warframe-market/locales/en.json +44 -0
  393. package/dist/content/examples/warframe-market/locales/fr.json +44 -0
  394. package/dist/content/examples/warframe-market/logic.ts +1265 -0
  395. package/dist/content/examples/warframe-market/manifest.json +92 -0
  396. package/dist/content/examples/warframe-market/package.json +16 -0
  397. package/dist/content/examples/warframe-market/style.ocss +422 -0
  398. package/dist/content/examples/warframe-market/submission.json +24 -0
  399. package/dist/content/examples/warframe-market/tests/bounds.scenario.json +60 -0
  400. package/dist/content/examples/warframe-market/tests/cached.scenario.json +70 -0
  401. package/dist/content/examples/warframe-market/tests/detail.scenario.json +251 -0
  402. package/dist/content/examples/warframe-market/tests/errors.scenario.json +105 -0
  403. package/dist/content/examples/warframe-market/tests/fixtures.json +295 -0
  404. package/dist/content/examples/warframe-market/tests/load-logic.mjs +22 -0
  405. package/dist/content/examples/warframe-market/tests/logic.test.mjs +505 -0
  406. package/dist/content/examples/warframe-market/tests/no-clipboard.scenario.json +104 -0
  407. package/dist/content/examples/warframe-market/tests/passive.scenario.json +87 -0
  408. package/dist/content/examples/warframe-market/tests/preview.scenario.json +146 -0
  409. package/dist/content/examples/warframe-market/tests/refresh.scenario.json +56 -0
  410. package/dist/content/examples/warframe-market/tests/refused.scenario.json +74 -0
  411. package/dist/content/examples/warframe-market/tests/render.scenario.json +210 -0
  412. package/dist/content/examples/warframe-market/tests/search.scenario.json +189 -0
  413. package/dist/content/examples/warframe-market/tests/unavailable.scenario.json +54 -0
  414. package/dist/content/examples/warframe-market/tsconfig.json +16 -0
  415. package/dist/content/examples/warframe-market/view.ocml +116 -0
  416. package/dist/content/examples/weather/LICENSE +20 -0
  417. package/dist/content/examples/weather/listing.json +10 -0
  418. package/dist/content/examples/weather/locales/en.json +9 -0
  419. package/dist/content/examples/weather/locales/fr.json +9 -0
  420. package/dist/content/examples/weather/logic.ts +62 -0
  421. package/dist/content/examples/weather/manifest.json +51 -0
  422. package/dist/content/examples/weather/package.json +15 -0
  423. package/dist/content/examples/weather/style.ocss +29 -0
  424. package/dist/content/examples/weather/submission.json +17 -0
  425. package/dist/content/examples/weather/tsconfig.json +16 -0
  426. package/dist/content/examples/weather/view.ocml +12 -0
  427. package/dist/content/index.json +3705 -0
  428. package/dist/content/reference/errors.json +1924 -0
  429. package/dist/content/reference/limits.json +1154 -0
  430. package/dist/content/reference/manifest.md +223 -0
  431. package/dist/content/reference/permissions.json +413 -0
  432. package/dist/content/templates/blank/locales/en.json +3 -0
  433. package/dist/content/templates/blank/locales/fr.json +3 -0
  434. package/dist/content/templates/blank/logic.ts +7 -0
  435. package/dist/content/templates/blank/manifest.json +16 -0
  436. package/dist/content/templates/blank/style.ocss +10 -0
  437. package/dist/content/templates/blank/tests/example.scenario.json +10 -0
  438. package/dist/content/templates/blank/view.ocml +6 -0
  439. package/dist/content/templates/chart/locales/en.json +3 -0
  440. package/dist/content/templates/chart/locales/fr.json +3 -0
  441. package/dist/content/templates/chart/logic.ts +27 -0
  442. package/dist/content/templates/chart/manifest.json +16 -0
  443. package/dist/content/templates/chart/style.ocss +27 -0
  444. package/dist/content/templates/chart/tests/example.scenario.json +10 -0
  445. package/dist/content/templates/chart/view.ocml +10 -0
  446. package/dist/content/templates/counter/locales/en.json +4 -0
  447. package/dist/content/templates/counter/locales/fr.json +4 -0
  448. package/dist/content/templates/counter/logic.ts +20 -0
  449. package/dist/content/templates/counter/manifest.json +16 -0
  450. package/dist/content/templates/counter/style.ocss +26 -0
  451. package/dist/content/templates/counter/tests/example.scenario.json +11 -0
  452. package/dist/content/templates/counter/view.ocml +13 -0
  453. package/dist/content/templates/list/locales/en.json +8 -0
  454. package/dist/content/templates/list/locales/fr.json +8 -0
  455. package/dist/content/templates/list/logic.ts +35 -0
  456. package/dist/content/templates/list/manifest.json +16 -0
  457. package/dist/content/templates/list/style.ocss +42 -0
  458. package/dist/content/templates/list/tests/example.scenario.json +10 -0
  459. package/dist/content/templates/list/view.ocml +17 -0
  460. package/dist/content/templates/shared/LICENSE +20 -0
  461. package/dist/content/templates/shared/package.json +14 -0
  462. package/dist/content/templates/shared/tsconfig.json +16 -0
  463. package/dist/content.js +68 -0
  464. package/dist/env.js +156 -0
  465. package/dist/fingerprint.js +32 -0
  466. package/dist/hidden.js +47 -0
  467. package/dist/ids.js +27 -0
  468. package/dist/index.js +82 -0
  469. package/dist/knowledge.js +222 -0
  470. package/dist/npm.js +149 -0
  471. package/dist/prompts.js +47 -0
  472. package/dist/resources.js +82 -0
  473. package/dist/run.js +120 -0
  474. package/dist/server.js +43 -0
  475. package/dist/session.js +205 -0
  476. package/dist/sources.js +218 -0
  477. package/dist/text.js +80 -0
  478. package/dist/texts.js +44 -0
  479. package/dist/tools/audit.js +105 -0
  480. package/dist/tools/build.js +453 -0
  481. package/dist/tools/common.js +122 -0
  482. package/dist/tools/docs.js +196 -0
  483. package/dist/tools/preview.js +87 -0
  484. package/dist/tools/project.js +183 -0
  485. package/dist/tools/setup.js +146 -0
  486. package/dist/tools/submission.js +369 -0
  487. package/dist/version.js +3 -0
  488. package/npm-shrinkwrap.json +402 -0
  489. package/package.json +50 -4
@@ -0,0 +1,94 @@
1
+ # Publish a widget
2
+
3
+ In the creator space of PlayerVox OverCrow, at
4
+ `creators.playervox.com`, a widget reaches players in four steps:
5
+ you send its sources, they are checked automatically, PlayerVox reviews
6
+ them, then the version is published in the catalog. This page covers the
7
+ first two and the screen that sends a version to review; the
8
+ [review](widget-review.md) and the [listing](widget-listing.md) have their
9
+ own pages.
10
+
11
+ ## Before you send
12
+
13
+ - Your widget's ID is reserved in the creator space
14
+ ([getting started](creator-space.md)), and `manifest.json` uses it.
15
+ - `overcrow-widget check` passes in the widget's folder.
16
+ - The version in `manifest.json` is newer than the last approved one:
17
+ `1.2.1` or higher after `1.2.0`.
18
+
19
+ ## Send the sources
20
+
21
+ Open the widget in **Widgets**, then **Submit a version**.
22
+
23
+ - On a computer, drop the widget's folder on the page, or choose it. You
24
+ can also send a `.zip` of the folder.
25
+ - On a phone or a tablet, which cannot pick a folder, choose the `.zip`.
26
+
27
+ The creator space reads a folder with the same rules as
28
+ `overcrow-widget submit`, on your computer, and sends the same files. It
29
+ leaves out hidden files and folders (`.env`, `.git/`…), `node_modules/`,
30
+ `dist/`, `tests/output/`, `__MACOSX/`, built packages, key files, system
31
+ files and names that are not portable ASCII; the page lists what it left
32
+ out. A `.zip` is sent as it is. The bounds and the refusals are those of
33
+ [source archives](cli.md#source-archives): 32 MiB for the archive, 64 MiB and
34
+ 2,000 files once uncompressed, 16 levels of folders, paths of 255 bytes at
35
+ most, no two names that differ only by case.
36
+
37
+ - A `.zip` made by Windows PowerShell 5.1 (`Compress-Archive`) separates
38
+ folders with `\` and is refused at once: drop the folder instead.
39
+ - A file or folder name with `\ : * ? " < > |` is refused before anything
40
+ is sent: Windows cannot use it. Rename it.
41
+ - A browser reads the file a link points to, where the command-line tool
42
+ leaves the link out. Keep links out of the widget's folder.
43
+ - Your sources stay private: only PlayerVox reviewers read them, and every
44
+ access shows in the creator space.
45
+
46
+ A publisher sends at most 20 submissions in 24 hours; the page says when
47
+ the next one is possible. If the page is closed or the connection drops
48
+ while sending, drop the same folder again: the submission resumes, and
49
+ nothing is counted twice.
50
+
51
+ ## The checks
52
+
53
+ The checks take about a minute: the manifest, the version number, the code,
54
+ the package build, the permissions, the size. You can leave the page: an
55
+ e-mail tells you when they end.
56
+
57
+ - When a check fails, each problem is shown in your own files, with the
58
+ line and the correction. Fix it and send again; nothing reaches the
59
+ reviewers.
60
+ - "Problem on our side" means PlayerVox could not run the checks: your
61
+ code is not the cause. PlayerVox is told and runs them again.
62
+
63
+ ## Submit for review
64
+
65
+ When the checks pass, the version page says what changes for players:
66
+
67
+ - **Permissions.** Explain why the widget needs each new or widened
68
+ permission, in words players understand. A first version explains all of
69
+ them.
70
+ - **Privacy policy.** Required as soon as the widget uses the network. The
71
+ address typed here is saved into the listing too.
72
+ - **Listing.** A first version goes to review with its listing, which needs
73
+ an English description, a license and a support contact.
74
+ - **Release notes**, shown to players: optional. English comes first;
75
+ **Add a language** adds others, 16 at most. When you write any, write
76
+ them in English too.
77
+ - **Message for the review**, read only by PlayerVox: a test account,
78
+ useful context.
79
+
80
+ The page also says which review the version gets (quick or full) and what
81
+ changed since the last approved version. **Submit for review** sends it.
82
+
83
+ ## From a terminal or a CI job
84
+
85
+ `overcrow-widget submit` sends a version with a publish key, and stops at
86
+ the same screen when something is missing: see [`submit`](cli.md#submit) and
87
+ [publish keys and CI](publish-keys.md).
88
+
89
+ ## After the review
90
+
91
+ An approved version is published within 24 business hours. In the creator
92
+ space you can then withdraw it, or the whole widget (**Settings**): it
93
+ leaves the catalog at the next publication, and installed copies keep
94
+ working.
@@ -0,0 +1,95 @@
1
+ # Publish keys and CI
2
+
3
+ A publish key lets `overcrow-widget submit` send versions of one
4
+ PlayerVox OverCrow widget from a terminal or a CI job, without your
5
+ password. It can do nothing else.
6
+
7
+ ## What a key can do
8
+
9
+ - Submit versions of **one** widget, and follow their checks. Every version
10
+ still goes through the review before players get it.
11
+ - It can neither publish, nor change the listing, nor reach your account or
12
+ your other widgets.
13
+ - It lasts 1 to 365 days (90 by default). We remind you by e-mail and in
14
+ the creator space 14 days before it expires.
15
+ - PlayerVox keeps only a digest of it: the key is shown **once**, when you
16
+ create it.
17
+
18
+ ## Create a key
19
+
20
+ In the creator space, **Publish keys**, **Create a key**:
21
+
22
+ 1. Name it after where it will live (`GitHub Actions`, `Laptop`).
23
+ 2. Choose the widget and the lifetime.
24
+ 3. Confirm with a fresh code of your authenticator app.
25
+
26
+ Copy the key at once into your CI's secrets: it starts with `ocw_pub_` and
27
+ will never be shown again. If you lose it, revoke it and create another
28
+ one. A widget has at most ten active keys.
29
+
30
+ ## Use it
31
+
32
+ `overcrow-widget submit` reads the key from the environment variable
33
+ `OVERCROW_PUBLISH_KEY`, and only there: never put it in a file of your
34
+ project or in a command line.
35
+
36
+ ```sh
37
+ export OVERCROW_PUBLISH_KEY=ocw_pub_…
38
+ overcrow-widget submit
39
+ ```
40
+
41
+ The [submit command](cli.md#submit) checks the version as the creator space
42
+ will, sends it, then follows its checks, about a minute.
43
+
44
+ ## In GitHub Actions
45
+
46
+ Keep the key as a secret of the repository, `OVERCROW_PUBLISH_KEY`. This
47
+ workflow submits the widget on every version tag:
48
+
49
+ <!-- source: docs/content/examples/weather/.github/workflows/submit.yml -->
50
+ ```yaml
51
+ # Sends the widget to the OverCrow creator space when a version tag is
52
+ # pushed. The publish key is a secret of the repository, and the OverCrow
53
+ # release whose creator tools to use is a variable of the repository.
54
+ name: Submit to OverCrow
55
+
56
+ on:
57
+ push:
58
+ tags: ["v*"]
59
+
60
+ permissions:
61
+ contents: read
62
+
63
+ jobs:
64
+ submit:
65
+ runs-on: ubuntu-24.04
66
+ env:
67
+ OVERCROW_VERSION: ${{ vars.OVERCROW_VERSION }}
68
+ steps:
69
+ - uses: actions/checkout@v4
70
+ - name: Install overcrow-widget
71
+ run: |
72
+ tools="overcrow-creator-tools-$OVERCROW_VERSION-linux-x86_64"
73
+ curl --fail --location --silent --show-error --remote-name \
74
+ "https://github.com/Valhallab/playervox-overcrow-releases/releases/download/v$OVERCROW_VERSION/$tools.zip"
75
+ unzip -q "$tools.zip"
76
+ (cd "$tools" && sha256sum --check --quiet SHA256SUMS)
77
+ install -D -m 755 "$tools"/overcrow-widget-*-linux-x86_64 "$HOME/.local/bin/overcrow-widget"
78
+ echo "$HOME/.local/bin" >> "$GITHUB_PATH"
79
+ - name: Submit to OverCrow
80
+ run: overcrow-widget submit --submission submission.json
81
+ env:
82
+ OVERCROW_PUBLISH_KEY: ${{ secrets.OVERCROW_PUBLISH_KEY }}
83
+ ```
84
+
85
+ The job fails when the checks fail, with each problem on the line of your
86
+ file. A version the creator space already has is not sent again: `submit`
87
+ reports its state, so the same job may also run on every push to your main
88
+ branch.
89
+
90
+ ## Revoke a key
91
+
92
+ **Revoke** stops the key at once: an upload in progress with it fails.
93
+ Versions it already sent stay, but no longer enter review on their own:
94
+ send them to review from the creator space. Revoke a key as soon as you
95
+ think it leaked, then create a new one.
@@ -0,0 +1,167 @@
1
+ # Publishing and review
2
+
3
+ > **Pull requests are closed.** Widgets are no longer proposed by pull
4
+ > request: PlayerVox's own widgets already go through the OverCrow creator
5
+ > space, and yours will when it opens. Until then, this page describes the
6
+ > admission, the review and the catalog a widget goes through.
7
+
8
+ Widgets reach PlayerVox OverCrow users through the signed widget catalog:
9
+ OverCrow installs only what that catalog lists. This page goes from a
10
+ widget's source directory to a listed version. Neither a pull request nor a
11
+ merge publishes anything: publication is a separate step of the maintainers,
12
+ outside CI.
13
+
14
+ ## The submission
15
+
16
+ A submission is a widget source directory under `widgets/<dir>/` of the
17
+ [public repository](https://github.com/Valhallab/playervox-overcrow-releases),
18
+ in a pull request to its `candidate` branch:
19
+
20
+ ```text
21
+ widgets/<dir>/
22
+ manifest.json view.ocml style.ocss? logic.ts | logic.js
23
+ locales/en.json + locales/fr.json? assets/**? LICENSE
24
+ listing.json (marketplace text, never packaged)
25
+ ```
26
+
27
+ You submit sources, not a package: the catalog always ships the package
28
+ rebuilt from the reviewed sources.
29
+
30
+ Package IDs under `com.playervox` are reserved for widgets published by
31
+ PlayerVox. Use a reverse-DNS ID under a domain you control, and keep it:
32
+ the ID is the widget's identity in the catalog.
33
+
34
+ ## The listing
35
+
36
+ `listing.json` holds what the marketplace shows:
37
+
38
+ <!-- source: docs/content/examples/weather/listing.json -->
39
+ ```json
40
+ {
41
+ "author": "Example Studio",
42
+ "spdxLicense": "MIT",
43
+ "sourceUrl": "https://github.com/example/weather-widget",
44
+ "defaultLocale": "en",
45
+ "localizations": [
46
+ { "locale": "en", "name": "Weather", "description": "The temperature of a city, refreshed every 30 minutes." },
47
+ { "locale": "fr", "name": "Météo", "description": "La température d’une ville, actualisée toutes les 30 minutes." }
48
+ ]
49
+ }
50
+ ```
51
+
52
+ <!-- generated:listing-fields -->
53
+ | Field | Type | Required | Meaning |
54
+ | --- | --- | --- | --- |
55
+ | `author` | text ≤ 128 bytes | yes | Plain text, trimmed, without `<` or `>`. |
56
+ | `spdxLicense` | text ≤ 64 bytes | yes | SPDX expression characters `[A-Za-z0-9.+-]`. |
57
+ | `sourceUrl` | text ≤ 2 KiB | yes | Canonical HTTPS URL of the reviewed source, without port, query or fragment. |
58
+ | `defaultLocale` | `locale` | yes | One of the localizations. |
59
+ | `localizations` | list of `Localization` ≤ 16 | yes | `{ locale, name, description }` with distinct `xx` or `xx-YY` locales; name ≤ 128 bytes, description ≤ 512 bytes. |
60
+ <!-- /generated:listing-fields -->
61
+
62
+ - `author`, names and descriptions are plain, trimmed text without `<` or
63
+ `>`; locales are `xx` or `xx-YY`, one of them `defaultLocale`.
64
+ - `spdxLicense` is an SPDX expression; the package's `LICENSE` holds its
65
+ text. PlayerVox widgets use MIT. The policy for third-party licenses is
66
+ not decided yet: a valid expression is reviewed, not approved by the
67
+ metadata ([licensing](../../../LICENSING.md)).
68
+ - `sourceUrl` is a canonical HTTPS URL of the reviewed source, without
69
+ port, query or fragment.
70
+ - `preview` (optional) names a PNG packaged under `assets/`, at most
71
+ 256 KiB, for example `"preview": "assets/preview.png"`. The Control
72
+ Center and the marketplace show it whole in a 4:3 box, centred on the
73
+ colour `#1e242e`, at 1.5 pixels per screen point at most: render the
74
+ widget at 150 % (`"scale": 1500` in a scenario) and give the image a 4:3
75
+ shape, and it appears at its real size, never cropped or enlarged.
76
+
77
+ ## Admission: run it yourself
78
+
79
+ ```sh
80
+ overcrow-widget admit widgets/<dir>
81
+ overcrow-widget admit widgets/<dir> --package dist/<id>-<version>.ocpkg
82
+ overcrow-widget admit widgets/<dir> --format json
83
+ ```
84
+
85
+ `admit` is exactly the static admission of the marketplace. It never runs
86
+ your code or `tsc`:
87
+
88
+ 1. it builds the directory as `package` does: every source, style, logic
89
+ and package check, then OverCrow's own package reader;
90
+ 2. with `--package`, your archive's compiled view must be byte for byte
91
+ what `view.ocml` compiles to;
92
+ 3. it checks the schema bounds, the reserved IDs, `listing.json`, the
93
+ preview and, for PlayerVox widgets, the MIT license;
94
+ 4. it lists the authority the widget requests for the reviewer: sensitive
95
+ capabilities, every network route, clipboard writes, storage and game
96
+ events.
97
+
98
+ The command ends with status 1 when the submission would be refused. Its
99
+ codes are listed with the [`admit` command](cli.md#admit).
100
+
101
+ On a pull request, the admission tool is built from the reviewed base
102
+ branch, never from your revision, and it reads your files as data: your
103
+ JavaScript, TypeScript, build commands, tests and scripts are never
104
+ executed there. A pull request may not change the tools of the admission
105
+ themselves.
106
+
107
+ ## Review
108
+
109
+ A maintainer reads the admission report and the source, then merges into
110
+ `candidate`. Reviewers check:
111
+
112
+ - **Identity.** A new ID under a domain the author controls. A new version
113
+ for any change: published versions are immutable, and a version lower
114
+ than a listed one is refused.
115
+ - **Reproducibility.** The package is rebuilt from the reviewed sources.
116
+ - **Authority.** Every capability, above all the sensitive ones; every
117
+ network route, which must serve the widget's stated purpose; clipboard
118
+ writes, storage and game events. See
119
+ [services and permissions](services.md).
120
+ - **Listing.** Exact, plain text in every locale; a canonical source URL; a
121
+ preview that shows the widget.
122
+ - **License.** `LICENSE` matches `spdxLicense`, and every bundled asset,
123
+ font or third-party code keeps its notice.
124
+
125
+ On the merge, the exact revision is admitted again and a receipt binds the
126
+ admitted package to the reviewed commit. Accepting a submission signs and
127
+ publishes nothing.
128
+
129
+ ## The catalog
130
+
131
+ The maintainers prepare the next catalog from admitted revisions and sign it
132
+ outside CI with the catalog key, whose public half is in
133
+ [`keys/`](../../../keys/). The catalog:
134
+
135
+ - lists each version with the SHA-256 and the size of its package; a
136
+ published version never changes, and a change is a new version;
137
+ - carries a strictly increasing sequence number and expires after at most
138
+ 90 days: OverCrow refuses an older sequence and an expired catalog;
139
+ - tags PlayerVox reference widgets `built-in` (only `com.playervox.*` IDs):
140
+ they are installed on a new profile with their declared permissions
141
+ granted, except for an update that asks for more.
142
+
143
+ OverCrow verifies the signature, the package digest, its ledger and its
144
+ compiled view before installing, and again each time it starts the widget.
145
+ See [the package](package.md#how-overcrow-checks-a-package).
146
+
147
+ ## Updates
148
+
149
+ A new version of your widget is a new submission with a higher `version`:
150
+ a published version is never replaced. An update whose manifest asks for
151
+ more than the installed version (a network rule, a game event, a
152
+ capability, storage or the clipboard) needs the user's approval in the
153
+ Control Center before it runs.
154
+
155
+ ## Version statuses
156
+
157
+ Each listed version has a status:
158
+
159
+ | Status | Meaning |
160
+ | --- | --- |
161
+ | `verified` | Installable. |
162
+ | `security-suspended` | Suspected of compromise; not installed or updated to, and an installed copy is stopped. Reversible in a later catalog. |
163
+ | `revoked` | Permanent: never installed again, and an installed copy is stopped. |
164
+
165
+ Omitting a version from a catalog never changes its status. A catalog
166
+ signature never bypasses package validation, the user's consent or the
167
+ sandbox.
@@ -0,0 +1,55 @@
1
+ # Reference
2
+
3
+ The reference of PlayerVox OverCrow widgets lists every element, style
4
+ property, service and SDK function of widget API v1. This page says where
5
+ each answer is. The pages of "Write a widget" explain how the parts work
6
+ together; the pages below are the ones to keep open while you write.
7
+
8
+ | Question | Page |
9
+ | --- | --- |
10
+ | What goes in `manifest.json`? | [The manifest](manifest.md) |
11
+ | Which elements, attributes and events can a view use? | [Elements and attributes](elements.md) |
12
+ | Which style properties and values are accepted? | [Style properties and tokens](style-properties.md) |
13
+ | Which design tokens and icons exist? | [Design tokens](style-properties.md#design-tokens), [icons](style-properties.md#icons) |
14
+ | Which functions does `@overcrow/sdk` export? | [SDK reference](sdk.md) |
15
+ | How do I format times, dates and numbers? | [Time, dates and numbers](sdk.md#time-dates-and-numbers) |
16
+ | What does each permission and capability allow? | [Services and permissions](services.md) |
17
+ | What are the parameters and the result of a service? | [Service reference](service-reference.md), [result shapes](result-shapes.md) |
18
+ | What does an error code mean? | [Errors](services.md#errors) |
19
+ | Which fields does a write intent take? | [The intents](forms.md#the-intents) |
20
+ | What are the limits (sizes, counts, budgets)? | [Limits](limits.md) |
21
+ | What does each command and diagnostic of the CLI do? | [The command-line tool](cli.md) |
22
+ | How is a test scenario written? | [Testing a widget](testing.md#scenarios) |
23
+ | What is inside a `.ocpkg`? | [The package](package.md) |
24
+
25
+ ## How the reference stays exact
26
+
27
+ - The tables of elements, attributes, style properties, tokens, services,
28
+ result shapes and limits are **generated from the widget schema**, the
29
+ same tables that OverCrow and the command-line tool compile into their
30
+ validators. A check fails when a page differs from the schema, in English
31
+ or in French.
32
+ - The **SDK types** are generated from the same schema, so a wrong element,
33
+ icon, capability or service parameter is a TypeScript error in your
34
+ logic.
35
+ - The **SDK reference** is checked by the SDK's tests: every export of
36
+ `@overcrow/sdk` is listed there.
37
+ - Every **code example** of these pages is an excerpt of a project that the
38
+ command-line tool checks, packages and admits on each change: a template,
39
+ a reference widget or one of the two examples.
40
+
41
+ ## Versions
42
+
43
+ These pages describe widget API v1 (`"apiVersion": 1` in the manifest) and
44
+ `@overcrow/sdk` 1.0.
45
+
46
+ ## Specifications for implementers
47
+
48
+ Three specifications, in the public repository, are written for those who
49
+ implement a host or another tool rather than a widget: the complete
50
+ [generated schema reference](../../widget-schema-v1.md), which also covers
51
+ the protocol between OverCrow and the widget's process and the catalog's
52
+ payloads; the
53
+ [wire protocol of the development channel](../../dev-channel.md); and the
54
+ [archive and catalog format](../../widget-package-v1.md). A widget author
55
+ does not need them.