@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,139 @@
1
+ # Le paquet
2
+
3
+ Un widget PlayerVox OverCrow est distribué en un seul fichier,
4
+ `<id>-<version>.ocpkg` : une archive qui réunit le manifeste, la vue
5
+ compilée, le style, un script, les messages, les images et la licence.
6
+ `overcrow-widget package` la construit, et OverCrow la lit avec le code
7
+ même qui l’a construite.
8
+
9
+ ```sh
10
+ overcrow-widget package
11
+ overcrow-widget inspect dist/com.example.my-widget-0.1.0.ocpkg
12
+ ```
13
+
14
+ `package` vérifie le projet, écrit l’archive dans `dist/` et affiche sa
15
+ taille et son SHA-256. `inspect` montre ce qu’un paquet contient et ce
16
+ qu’il demande, tel que le voit un relecteur.
17
+
18
+ ## Ce qu’il contient
19
+
20
+ <!-- generated:package-files -->
21
+ | Chemin | Obligatoire | Limite | Signification |
22
+ | --- | --- | --- | --- |
23
+ | `manifest.json` | oui | 64 Kio | Le manifeste, tel qu’il a été écrit. |
24
+ | `ledger.json` | oui | 64 Kio | Registre canonique du SHA-256 et de la taille de chaque autre entrée, écrit par la CLI. |
25
+ | `logic.js` | oui | 512 Kio | Le seul contenu exécutable : un script ES2023 sans import, expressions compilées de la vue comprises. UTF-8, non vide. |
26
+ | `view.json` | oui | 512 Kio | La vue compilée. Le source `view.ocml` n’est pas embarqué. |
27
+ | `style.ocss` | non | 128 Kio | Source de la feuille de style, analysée par l’hôte au démarrage du widget. UTF-8. |
28
+ | `locales/en.json` | non | 256 Kio | Messages en anglais ; présent si et seulement si `locales/fr.json` l’est, avec les mêmes clés. |
29
+ | `locales/fr.json` | non | 256 Kio | Messages en français. |
30
+ | `LICENSE` | oui | 64 Kio | Texte de la licence du paquet. UTF-8, non vide. |
31
+ | `assets/<path>.{png,jpg,jpeg,webp}` | non | 2 Mio | Images dont la signature correspond à l’extension ; segments en minuscules `[a-z0-9_-]`, au plus 4 sous `assets/`. |
32
+ <!-- /generated:package-files -->
33
+
34
+ Toute autre entrée fait refuser le paquet : un second script, un fichier
35
+ HTML, un module WebAssembly, du code natif, un fichier caché, une autre
36
+ langue. Les fichiers texte sont en UTF-8, sans marque d’ordre d’octets.
37
+
38
+ Tout ce que vous écrivez n’est pas empaqueté tel quel :
39
+
40
+ | Dans le projet | Dans le paquet |
41
+ | --- | --- |
42
+ | `manifest.json` | les mêmes octets |
43
+ | `view.ocml` | `view.json`, la vue compilée ; le fichier source n’est pas livré |
44
+ | `logic.ts` ou `logic.js` | `logic.js` : votre module, le SDK et les expressions compilées de la vue, en un seul script |
45
+ | `style.ocss`, `locales/`, `assets/`, `LICENSE` | les mêmes octets |
46
+ | `package.json`, `tsconfig.json`, `node_modules/`, `listing.json`, `tests/` | non empaquetés |
47
+
48
+ Les images sont des fichiers PNG, JPEG ou WebP placés sous `assets/`, à des
49
+ chemins en minuscules, et le contenu de chaque fichier doit correspondre à
50
+ son extension. La vue en désigne une par `src="assets/logo.png"`, et
51
+ l’aperçu (`preview`) d’une [fiche](publishing.md#la-fiche) est l’une de ces
52
+ images empaquetées.
53
+
54
+ ## Le script
55
+
56
+ `logic.js` est le seul contenu exécutable d’un paquet. L’outil le construit
57
+ à partir de votre module de logique, du SDK qu’il embarque et d’une
58
+ fonction par expression et par gestionnaire de la vue, puis retire ce qui
59
+ ne sert pas et raccourcit les noms locaux. Deux conséquences :
60
+
61
+ - le SDK de votre `node_modules` ne sert qu’à la vérification des types :
62
+ celui qui s’exécute est celui de l’outil, et `inspect` affiche sa
63
+ version ;
64
+ - la vue elle-même ne contient aucun code : `view.json` désigne les
65
+ fonctions de `logic.js` par leur numéro.
66
+
67
+ Un paquet contient des sources qu’OverCrow peut lire et vérifier, jamais de
68
+ bytecode compilé.
69
+
70
+ ## Les mêmes octets à chaque fois
71
+
72
+ L’empaquetage est déterministe : les mêmes sources et la même version de
73
+ l’outil donnent la même archive, octet pour octet, à chaque exécution et
74
+ sur chaque système. C’est ce qui permet à un relecteur de reconstruire
75
+ votre paquet à partir des sources que vous soumettez, puis de comparer.
76
+ C’est aussi ce qui permet au catalogue de désigner un paquet par son
77
+ SHA-256.
78
+
79
+ Pour cela, l’archive n’admet qu’une seule structure, exacte : un zip non
80
+ compressé, aux entrées triées, aux dates fixes et sans champ
81
+ supplémentaire. Écrivez-la avec `overcrow-widget package` ; une archive
82
+ produite par un autre outil zip est refusée.
83
+
84
+ ## Le registre
85
+
86
+ `ledger.json`, écrit par l’outil, liste tous les autres fichiers avec leur
87
+ taille et leur SHA-256. OverCrow le recalcule à partir de l’archive et
88
+ exige les mêmes octets. C’est lui qui lie chaque fichier au paquet : un
89
+ fichier modifié, ajouté ou retiré après l’empaquetage ne correspond plus.
90
+
91
+ ## Comment OverCrow vérifie un paquet
92
+
93
+ OverCrow valide un paquet en entier lors de son admission au catalogue,
94
+ lors de son installation, puis **à chaque démarrage du widget** :
95
+
96
+ 1. la taille de l’archive, sa structure exacte et la somme de contrôle de
97
+ chaque entrée ;
98
+ 2. chaque chemin, comparé à la liste de fichiers ci-dessus et à leurs
99
+ limites de taille, ainsi que la présence des fichiers obligatoires ;
100
+ 3. le registre, octet pour octet ;
101
+ 4. le manifeste, le script, le style, la paire de langues, la licence,
102
+ chaque image et la vue compilée : des éléments connus à des emplacements
103
+ autorisés, des attributs connus dont les valeurs ont le bon type, des
104
+ événements propres à leur élément, des composants utilisés comme ils
105
+ sont déclarés, les limites de la vue, et la présence dans le paquet de
106
+ chaque image statique.
107
+
108
+ Pour un paquet du catalogue, la taille et le SHA-256 de l’archive doivent
109
+ d’abord être ceux qu’indique le catalogue signé, et le manifeste doit être
110
+ identique à celui que liste le catalogue. Un widget dont le paquet échoue à
111
+ l’une de ces vérifications ne démarre pas. `overcrow-widget check` et
112
+ `package` exécutent les mêmes vérifications : vous voyez donc un problème
113
+ avant qu’un utilisateur ne le rencontre.
114
+
115
+ ## Installé depuis le catalogue, ou localement
116
+
117
+ - Un paquet **issu du catalogue signé** est vérifié : c’est ainsi que les
118
+ utilisateurs obtiennent les widgets. Voir
119
+ [publication et revue](publishing.md).
120
+ - Un paquet envoyé par `overcrow-widget dev` est un **paquet de
121
+ développement** : marqué « Unverified », pour la durée de la session
122
+ seulement. Voir [le canal de développement](dev-channel.md).
123
+
124
+ Un paquet qui ne vient pas du catalogue ne peut pas utiliser un ID sous
125
+ `com.playervox`.
126
+
127
+ ## Limites d’un paquet
128
+
129
+ Les tailles de chaque fichier et de l’archive figurent dans les
130
+ [limites](limits.md#fichiers-du-projet-et-paquet). Quand un paquet dépasse
131
+ une limite, `check` indique laquelle :
132
+
133
+ | Code | Problème |
134
+ | --- | --- |
135
+ | `project.file_size` | Un fichier source dépasse sa limite. |
136
+ | `project.entry_limit` | Le projet compte plus de fichiers qu’un paquet ne peut en contenir. |
137
+ | `project.asset_path` | Le chemin d’une image n’est pas en minuscules, est trop profond ou porte une autre extension. |
138
+ | `package.file_size` | Un fichier construit (`logic.js`, `view.json`) dépasse sa limite. |
139
+ | `package.archive_size` | L’archive dépasse 16 Mio. |
@@ -0,0 +1,101 @@
1
+ # Publier un widget
2
+
3
+ Dans l’espace créateurs de PlayerVox OverCrow, à l’adresse
4
+ `creators.playervox.com`, un widget arrive aux joueurs en quatre
5
+ étapes : vous envoyez ses sources, elles sont contrôlées automatiquement,
6
+ PlayerVox les relit, puis la version est publiée dans le catalogue. Cette
7
+ page couvre les deux premières et l’écran qui envoie une version en revue ;
8
+ la [revue](widget-review.md) et la [fiche](widget-listing.md) ont leur
9
+ propre page.
10
+
11
+ ## Avant d’envoyer
12
+
13
+ - L’identifiant de votre widget est réservé dans l’espace créateurs
14
+ ([démarrer](creator-space.md)), et `manifest.json` l’utilise.
15
+ - `overcrow-widget check` passe dans le dossier du widget.
16
+ - La version de `manifest.json` est plus récente que la dernière approuvée :
17
+ `1.2.1` ou plus après `1.2.0`.
18
+
19
+ ## Envoyer les sources
20
+
21
+ Ouvrez le widget dans **Widgets**, puis **Envoyer une version**.
22
+
23
+ - Sur un ordinateur, déposez le dossier du widget sur la page, ou
24
+ choisissez-le. Vous pouvez aussi envoyer un `.zip` du dossier.
25
+ - Sur un téléphone ou une tablette, qui ne savent pas choisir un dossier,
26
+ choisissez le `.zip`.
27
+
28
+ L’espace créateurs lit un dossier avec les mêmes règles que
29
+ `overcrow-widget submit`, sur votre ordinateur, et envoie les mêmes
30
+ fichiers. Il laisse de côté les fichiers et dossiers cachés (`.env`,
31
+ `.git/`…), `node_modules/`, `dist/`, `tests/output/`, `__MACOSX/`, les
32
+ paquets déjà construits, les fichiers de clés, les fichiers système et les
33
+ noms qui ne sont pas en ASCII portable ; la page liste ce qu’il a laissé de
34
+ côté. Un `.zip` est envoyé tel quel. Les bornes et les refus sont ceux des
35
+ [archives de sources](cli.md#archives-de-sources) : 32 Mio pour l’archive,
36
+ 64 Mio et 2 000 fichiers une fois décompressé, 16 niveaux de dossiers, des
37
+ chemins de 255 octets au plus, aucun nom qui ne diffère d’un autre que par
38
+ la casse.
39
+
40
+ - Un `.zip` fait par Windows PowerShell 5.1 (`Compress-Archive`) sépare les
41
+ dossiers par `\` et est refusé aussitôt : déposez plutôt le dossier.
42
+ - Un nom de fichier ou de dossier avec `\ : * ? " < > |` est refusé avant
43
+ tout envoi : Windows ne peut pas l’utiliser. Renommez-le.
44
+ - Un navigateur lit le fichier vers lequel pointe un lien, là où l’outil en
45
+ ligne de commande laisse le lien de côté. Gardez les liens hors du dossier
46
+ du widget.
47
+ - Vos sources restent privées : seuls les relecteurs PlayerVox les lisent,
48
+ et chaque consultation apparaît dans l’espace créateurs.
49
+
50
+ Un éditeur fait au plus 20 envois en 24 heures ; la page dit quand le
51
+ suivant est possible. Si la page se ferme ou si la connexion se coupe
52
+ pendant l’envoi, déposez à nouveau le même dossier : l’envoi reprend, et
53
+ rien n’est compté deux fois.
54
+
55
+ ## Les contrôles
56
+
57
+ Les contrôles prennent environ une minute : le manifeste, le numéro de
58
+ version, le code, la construction du paquet, les permissions, la taille.
59
+ Vous pouvez quitter la page : un e-mail vous prévient quand ils sont finis.
60
+
61
+ - Quand un contrôle échoue, chaque problème est montré dans vos propres
62
+ fichiers, avec la ligne et la correction. Corrigez et envoyez à nouveau ;
63
+ rien n’arrive aux relecteurs.
64
+ - « Problème de notre côté » signifie que PlayerVox n’a pas pu faire les
65
+ contrôles : votre code n’est pas en cause. PlayerVox est prévenu et les
66
+ relance.
67
+
68
+ ## Soumettre pour revue
69
+
70
+ Quand les contrôles passent, la page de la version dit ce qui change pour
71
+ les joueurs :
72
+
73
+ - **Permissions.** Expliquez pourquoi le widget a besoin de chaque
74
+ permission nouvelle ou élargie, avec des mots que les joueurs comprennent.
75
+ Une première version les explique toutes.
76
+ - **Politique de confidentialité.** Obligatoire dès que le widget utilise
77
+ le réseau. L’adresse tapée ici est aussi enregistrée dans la fiche.
78
+ - **Fiche.** Une première version part en revue avec sa fiche, qui demande
79
+ une description en anglais, une licence et un contact d’assistance.
80
+ - **Notes de version**, visibles par les joueurs : facultatives. L’anglais
81
+ vient d’abord ; **Ajouter une langue** en ajoute d’autres, 16 au plus. Dès
82
+ que vous en écrivez, écrivez-les aussi en anglais.
83
+ - **Message pour la revue**, lu seulement par PlayerVox : un compte de test,
84
+ un contexte utile.
85
+
86
+ La page dit aussi quelle revue la version reçoit (rapide ou complète) et ce
87
+ qui a changé depuis la dernière version approuvée. **Soumettre pour revue**
88
+ l’envoie.
89
+
90
+ ## Depuis un terminal ou une CI
91
+
92
+ `overcrow-widget submit` envoie une version avec une clé de publication, et
93
+ s’arrête au même écran quand il manque quelque chose : voir
94
+ [`submit`](cli.md#submit) et [clés de publication et CI](publish-keys.md).
95
+
96
+ ## Après la revue
97
+
98
+ Une version approuvée est publiée sous 24 heures ouvrées. Dans l’espace
99
+ créateurs, vous pouvez ensuite la retirer, ou retirer le widget entier
100
+ (**Réglages**) : il sort du catalogue à la prochaine publication, et les
101
+ copies installées continuent de fonctionner.
@@ -0,0 +1,97 @@
1
+ # Clés de publication et CI
2
+
3
+ Une clé de publication permet à `overcrow-widget submit` d’envoyer les
4
+ versions d’un widget PlayerVox OverCrow depuis un terminal ou une CI, sans
5
+ votre mot de passe.
6
+ Elle ne permet rien d’autre.
7
+
8
+ ## Ce qu’une clé permet
9
+
10
+ - Soumettre des versions d’**un seul** widget, et suivre leurs contrôles.
11
+ Chaque version passe toujours par la revue avant d’arriver aux joueurs.
12
+ - Elle ne permet ni de publier, ni de modifier la fiche, ni d’accéder à
13
+ votre compte ou à vos autres widgets.
14
+ - Elle dure de 1 à 365 jours (90 par défaut). Nous vous prévenons par e-mail
15
+ et dans l’espace créateurs 14 jours avant son expiration.
16
+ - PlayerVox n’en garde qu’une empreinte : la clé est affichée **une seule
17
+ fois**, à sa création.
18
+
19
+ ## Créer une clé
20
+
21
+ Dans l’espace créateurs, **Clés de publication**, **Créer une clé** :
22
+
23
+ 1. Nommez-la d’après l’endroit où elle servira (`GitHub Actions`,
24
+ `Portable`).
25
+ 2. Choisissez le widget et la durée.
26
+ 3. Confirmez avec un code récent de votre application d’authentification.
27
+
28
+ Copiez aussitôt la clé dans les secrets de votre CI : elle commence par
29
+ `ocw_pub_` et ne sera plus jamais affichée. Si vous la perdez, révoquez-la et
30
+ créez-en une autre. Un widget a au plus dix clés actives.
31
+
32
+ ## L’utiliser
33
+
34
+ `overcrow-widget submit` lit la clé dans la variable d’environnement
35
+ `OVERCROW_PUBLISH_KEY`, et seulement là : ne la mettez jamais dans un fichier
36
+ du projet ni dans une ligne de commande.
37
+
38
+ ```sh
39
+ export OVERCROW_PUBLISH_KEY=ocw_pub_…
40
+ overcrow-widget submit
41
+ ```
42
+
43
+ La [commande submit](cli.md#submit) contrôle la version comme le fera
44
+ l’espace créateurs, l’envoie, puis suit ses contrôles, environ une minute.
45
+
46
+ ## Dans GitHub Actions
47
+
48
+ Gardez la clé comme secret du dépôt, `OVERCROW_PUBLISH_KEY`. Ce workflow
49
+ soumet le widget à chaque tag de version :
50
+
51
+ <!-- source: docs/content/examples/weather/.github/workflows/submit.yml -->
52
+ ```yaml
53
+ # Sends the widget to the OverCrow creator space when a version tag is
54
+ # pushed. The publish key is a secret of the repository, and the OverCrow
55
+ # release whose creator tools to use is a variable of the repository.
56
+ name: Submit to OverCrow
57
+
58
+ on:
59
+ push:
60
+ tags: ["v*"]
61
+
62
+ permissions:
63
+ contents: read
64
+
65
+ jobs:
66
+ submit:
67
+ runs-on: ubuntu-24.04
68
+ env:
69
+ OVERCROW_VERSION: ${{ vars.OVERCROW_VERSION }}
70
+ steps:
71
+ - uses: actions/checkout@v4
72
+ - name: Install overcrow-widget
73
+ run: |
74
+ tools="overcrow-creator-tools-$OVERCROW_VERSION-linux-x86_64"
75
+ curl --fail --location --silent --show-error --remote-name \
76
+ "https://github.com/Valhallab/playervox-overcrow-releases/releases/download/v$OVERCROW_VERSION/$tools.zip"
77
+ unzip -q "$tools.zip"
78
+ (cd "$tools" && sha256sum --check --quiet SHA256SUMS)
79
+ install -D -m 755 "$tools"/overcrow-widget-*-linux-x86_64 "$HOME/.local/bin/overcrow-widget"
80
+ echo "$HOME/.local/bin" >> "$GITHUB_PATH"
81
+ - name: Submit to OverCrow
82
+ run: overcrow-widget submit --submission submission.json
83
+ env:
84
+ OVERCROW_PUBLISH_KEY: ${{ secrets.OVERCROW_PUBLISH_KEY }}
85
+ ```
86
+
87
+ La tâche échoue quand les contrôles échouent, avec chaque problème sur la
88
+ ligne de votre fichier. Une version que l’espace créateurs a déjà n’est pas
89
+ renvoyée : `submit` donne son état, et la même tâche peut aussi tourner à
90
+ chaque push sur votre branche principale.
91
+
92
+ ## Révoquer une clé
93
+
94
+ **Révoquer** arrête la clé aussitôt : un envoi en cours avec elle échoue.
95
+ Les versions qu’elle a déjà envoyées restent, mais n’entrent plus seules en
96
+ revue : envoyez-les en revue depuis l’espace créateurs. Révoquez une clé dès
97
+ que vous pensez qu’elle a fuité, puis créez-en une nouvelle.
@@ -0,0 +1,177 @@
1
+ # Publication et revue
2
+
3
+ > **Les pull requests sont fermées.** Les widgets ne sont plus proposés par
4
+ > pull request : ceux de PlayerVox passent déjà par l’espace créateurs
5
+ > OverCrow, et le vôtre y passera à son ouverture. D’ici là, cette page
6
+ > décrit l’admission, la revue et le catalogue que suit un widget.
7
+
8
+ Les widgets atteignent les utilisateurs de PlayerVox OverCrow par le
9
+ catalogue signé des widgets : OverCrow n’installe que ce que liste ce
10
+ catalogue. Cette page va du dossier de sources d’un widget à une version
11
+ listée. Ni une pull request ni une fusion ne publient quoi que ce soit : la
12
+ publication est une étape distincte des mainteneurs, hors de la CI.
13
+
14
+ ## La soumission
15
+
16
+ Une soumission est le dossier de sources d’un widget, placé sous
17
+ `widgets/<dir>/` du
18
+ [dépôt public](https://github.com/Valhallab/playervox-overcrow-releases),
19
+ dans une pull request vers sa branche `candidate` :
20
+
21
+ ```text
22
+ widgets/<dir>/
23
+ manifest.json view.ocml style.ocss? logic.ts | logic.js
24
+ locales/en.json + locales/fr.json? assets/**? LICENSE
25
+ listing.json (marketplace text, never packaged)
26
+ ```
27
+
28
+ Vous soumettez des sources, pas un paquet : le catalogue livre toujours le
29
+ paquet reconstruit à partir des sources relues.
30
+
31
+ Les IDs de paquet sous `com.playervox` sont réservés aux widgets publiés
32
+ par PlayerVox. Utilisez un ID en DNS inversé sous un domaine que vous
33
+ contrôlez, et gardez-le : l’ID est l’identité du widget dans le catalogue.
34
+
35
+ ## La fiche
36
+
37
+ `listing.json` contient ce qu’affiche la marketplace :
38
+
39
+ <!-- source: docs/content/examples/weather/listing.json -->
40
+ ```json
41
+ {
42
+ "author": "Example Studio",
43
+ "spdxLicense": "MIT",
44
+ "sourceUrl": "https://github.com/example/weather-widget",
45
+ "defaultLocale": "en",
46
+ "localizations": [
47
+ { "locale": "en", "name": "Weather", "description": "The temperature of a city, refreshed every 30 minutes." },
48
+ { "locale": "fr", "name": "Météo", "description": "La température d’une ville, actualisée toutes les 30 minutes." }
49
+ ]
50
+ }
51
+ ```
52
+
53
+ <!-- generated:listing-fields -->
54
+ | Champ | Type | Obligatoire | Signification |
55
+ | --- | --- | --- | --- |
56
+ | `author` | texte ≤ 128 octets | oui | Texte brut, sans espaces en début ni en fin, sans `<` ni `>`. |
57
+ | `spdxLicense` | texte ≤ 64 octets | oui | Expression SPDX, faite des caractères `[A-Za-z0-9.+-]`. |
58
+ | `sourceUrl` | texte ≤ 2 Kio | oui | URL HTTPS canonique des sources relues, sans port, requête ni fragment. |
59
+ | `defaultLocale` | `locale` | oui | L’une des localisations. |
60
+ | `localizations` | liste de `Localization` ≤ 16 | oui | `{ locale, name, description }` avec des locales distinctes de la forme `xx` ou `xx-YY` ; nom ≤ 128 octets, description ≤ 512 octets. |
61
+ <!-- /generated:listing-fields -->
62
+
63
+ - `author`, les noms et les descriptions sont du texte brut, sans espace au
64
+ début ni à la fin, sans `<` ni `>` ; les langues sont de la forme `xx` ou
65
+ `xx-YY`, l’une d’elles étant `defaultLocale`.
66
+ - `spdxLicense` est une expression SPDX ; le `LICENSE` du paquet en
67
+ contient le texte. Les widgets PlayerVox sont sous MIT. La politique pour
68
+ les licences des tiers n’est pas encore arrêtée : une expression valide
69
+ est relue, pas approuvée par les métadonnées
70
+ ([licences](../../../LICENSING.md)).
71
+ - `sourceUrl` est une URL HTTPS canonique des sources relues, sans port,
72
+ requête ni fragment.
73
+ - `preview` (facultatif) désigne un PNG empaqueté sous `assets/`, de
74
+ 256 Kio au plus, par exemple `"preview": "assets/preview.png"`. Le
75
+ Centre de contrôle et la marketplace le montrent entier dans un cadre
76
+ 4:3, centré sur la couleur `#1e242e`, à 1,5 pixel par point d’écran au
77
+ plus : rendez le widget à 150 % (`"scale": 1500` dans un scénario) et
78
+ donnez à l’image un format 4:3, il apparaît à sa taille réelle, jamais
79
+ recadré ni agrandi.
80
+
81
+ ## L’admission : lancez-la vous-même
82
+
83
+ ```sh
84
+ overcrow-widget admit widgets/<dir>
85
+ overcrow-widget admit widgets/<dir> --package dist/<id>-<version>.ocpkg
86
+ overcrow-widget admit widgets/<dir> --format json
87
+ ```
88
+
89
+ `admit` est exactement l’admission statique de la marketplace. Elle
90
+ n’exécute jamais votre code ni `tsc` :
91
+
92
+ 1. elle construit le dossier comme le fait `package` : toutes les
93
+ vérifications des sources, du style, de la logique et du paquet, puis le
94
+ lecteur de paquets d’OverCrow lui-même ;
95
+ 2. avec `--package`, la vue compilée de votre archive doit être, octet pour
96
+ octet, le résultat de la compilation de `view.ocml` ;
97
+ 3. elle vérifie les limites du schéma, les IDs réservés, `listing.json`,
98
+ l’aperçu et, pour les widgets PlayerVox, la licence MIT ;
99
+ 4. elle liste pour le relecteur l’autorité que demande le widget :
100
+ capabilities sensibles, chaque route réseau, écritures dans le
101
+ presse-papiers, stockage et événements de jeu.
102
+
103
+ La commande se termine avec le code de sortie 1 quand la soumission serait
104
+ refusée. Ses codes sont listés avec la [commande `admit`](cli.md#admit).
105
+
106
+ Sur une pull request, l’outil d’admission est construit depuis la branche
107
+ de base relue, jamais depuis votre révision, et il lit vos fichiers comme
108
+ des données : votre JavaScript, votre TypeScript, vos commandes de build,
109
+ vos tests et vos scripts n’y sont jamais exécutés. Une pull request ne peut
110
+ pas modifier les outils de l’admission eux-mêmes.
111
+
112
+ ## La revue
113
+
114
+ Un mainteneur lit le rapport d’admission et les sources, puis fusionne dans
115
+ `candidate`. Les relecteurs vérifient :
116
+
117
+ - **L’identité.** Un nouvel ID sous un domaine que l’auteur contrôle. Une
118
+ nouvelle version pour tout changement : les versions publiées sont
119
+ immuables, et une version inférieure à une version listée est refusée.
120
+ - **La reproductibilité.** Le paquet est reconstruit à partir des sources
121
+ relues.
122
+ - **L’autorité.** Chaque capability, surtout les sensibles ; chaque route
123
+ réseau, qui doit servir l’objet annoncé du widget ; les écritures dans le
124
+ presse-papiers, le stockage et les événements de jeu. Voir
125
+ [services et permissions](services.md).
126
+ - **La fiche.** Un texte exact et brut dans chaque langue, une URL de
127
+ sources canonique, un aperçu qui montre le widget.
128
+ - **La licence.** `LICENSE` correspond à `spdxLicense`, et chaque
129
+ ressource, police ou code tiers embarqué garde sa mention.
130
+
131
+ À la fusion, la révision exacte est admise de nouveau, et un reçu lie le
132
+ paquet admis au commit relu. Accepter une soumission ne signe et ne publie
133
+ rien.
134
+
135
+ ## Le catalogue
136
+
137
+ Les mainteneurs préparent le catalogue suivant à partir des révisions
138
+ admises et le signent hors de la CI avec la clé du catalogue, dont la moitié
139
+ publique est dans [`keys/`](../../../keys/). Le catalogue :
140
+
141
+ - liste chaque version avec le SHA-256 et la taille de son paquet ; une
142
+ version publiée ne change jamais, et un changement est une nouvelle
143
+ version ;
144
+ - porte un numéro de séquence strictement croissant et expire au bout de
145
+ 90 jours au plus : OverCrow refuse une séquence plus ancienne et un
146
+ catalogue expiré ;
147
+ - marque `built-in` les widgets de référence PlayerVox (IDs
148
+ `com.playervox.*` uniquement) : ils sont installés sur un nouveau profil
149
+ avec leurs permissions déclarées accordées, sauf pour une mise à jour qui
150
+ en demande davantage.
151
+
152
+ OverCrow vérifie la signature, l’empreinte du paquet, son registre et sa
153
+ vue compilée avant l’installation, puis à chaque démarrage du widget. Voir
154
+ [le paquet](package.md#comment-overcrow-vérifie-un-paquet).
155
+
156
+ ## Mises à jour
157
+
158
+ Une nouvelle version de votre widget est une nouvelle soumission, avec une
159
+ `version` plus élevée : une version publiée n’est jamais remplacée. Une
160
+ mise à jour dont le manifeste demande plus que la version installée (une
161
+ règle réseau, un événement de jeu, une capability, le stockage ou le
162
+ presse-papiers) exige l’accord de l’utilisateur, dans le Centre de
163
+ contrôle, avant de s’exécuter.
164
+
165
+ ## Statuts des versions
166
+
167
+ Chaque version listée a un statut :
168
+
169
+ | Statut | Signification |
170
+ | --- | --- |
171
+ | `verified` | Installable. |
172
+ | `security-suspended` | Soupçonnée de compromission : ni installée ni proposée en mise à jour, et une copie installée est arrêtée. Réversible dans un catalogue ultérieur. |
173
+ | `revoked` | Définitif : plus jamais installée, et une copie installée est arrêtée. |
174
+
175
+ Omettre une version dans un catalogue ne change jamais son statut. La
176
+ signature d’un catalogue ne contourne jamais la validation du paquet, le
177
+ consentement de l’utilisateur ni le sandbox.
@@ -0,0 +1,59 @@
1
+ # Référence
2
+
3
+ La référence des widgets PlayerVox OverCrow liste chaque élément, chaque
4
+ propriété de style, chaque service et chaque fonction du SDK de l’API
5
+ widget v1. Cette page indique où trouver chaque réponse. Les pages de la
6
+ rubrique « Écrire un widget » expliquent comment les parties fonctionnent
7
+ ensemble ; celles qui suivent sont à garder ouvertes pendant que vous
8
+ écrivez.
9
+
10
+ | Question | Page |
11
+ | --- | --- |
12
+ | Que contient `manifest.json` ? | [Le manifeste](manifest.md) |
13
+ | Quels éléments, attributs et événements une vue peut-elle utiliser ? | [Éléments et attributs](elements.md) |
14
+ | Quelles propriétés de style et quelles valeurs sont acceptées ? | [Propriétés de style et tokens](style-properties.md) |
15
+ | Quels tokens du design system et quelles icônes existent ? | [Tokens du design system](style-properties.md#tokens-du-design-system), [icônes](style-properties.md#icônes) |
16
+ | Quelles fonctions `@overcrow/sdk` exporte-t-il ? | [Référence du SDK](sdk.md) |
17
+ | Comment formater les heures, les dates et les nombres ? | [Heure, dates et nombres](sdk.md#heure-dates-et-nombres) |
18
+ | Qu’autorise chaque permission et chaque capability ? | [Services et permissions](services.md) |
19
+ | Quels sont les paramètres et le résultat d’un service ? | [Référence des services](service-reference.md), [formes de résultat](result-shapes.md) |
20
+ | Que signifie un code d’erreur ? | [Erreurs](services.md#erreurs) |
21
+ | Quels champs un intent d’écriture prend-il ? | [Les intents](forms.md#les-intents) |
22
+ | Quelles sont les limites (tailles, nombres, budgets) ? | [Limites](limits.md) |
23
+ | Que fait chaque commande et chaque diagnostic de la CLI ? | [L’outil en ligne de commande](cli.md) |
24
+ | Comment écrire un scénario de test ? | [Tester un widget](testing.md#scénarios) |
25
+ | Que contient un `.ocpkg` ? | [Le paquet](package.md) |
26
+
27
+ ## Comment la référence reste exacte
28
+
29
+ - Les tableaux des éléments, des attributs, des propriétés de style, des
30
+ tokens, des services, des formes de résultat et des limites sont
31
+ **générés à partir du schéma des widgets**, les mêmes tables qu’OverCrow
32
+ et l’outil en ligne de commande compilent dans leurs validateurs. Une
33
+ vérification échoue dès qu’une page diffère du schéma, en anglais ou en
34
+ français.
35
+ - Les **types du SDK** sont générés à partir du même schéma : un élément,
36
+ une icône, une capability ou un paramètre de service erroné est donc une
37
+ erreur TypeScript dans votre logique.
38
+ - La **référence du SDK** est vérifiée par les tests du SDK : chaque export
39
+ de `@overcrow/sdk` y figure.
40
+ - Chaque **exemple de code** de ces pages est un extrait d’un projet que
41
+ l’outil en ligne de commande vérifie, empaquette et admet à chaque
42
+ changement : un template, un widget de référence ou l’un des deux
43
+ exemples.
44
+
45
+ ## Versions
46
+
47
+ Ces pages décrivent l’API widget v1 (`"apiVersion": 1` dans le manifeste)
48
+ et `@overcrow/sdk` 1.0.
49
+
50
+ ## Spécifications pour les implémenteurs
51
+
52
+ Trois spécifications, dans le dépôt public, s’adressent à ceux qui
53
+ implémentent un hôte ou un autre outil plutôt qu’un widget : la
54
+ [référence complète du schéma, générée](../../widget-schema-v1.md), qui
55
+ couvre aussi le protocole entre OverCrow et le processus du widget ainsi que
56
+ les données du catalogue ; le
57
+ [protocole du canal de développement](../../dev-channel.md) ; et le
58
+ [format de l’archive et du catalogue](../../widget-package-v1.md). L’auteur
59
+ d’un widget n’en a pas besoin.