@overcrow/mcp 0.0.0 → 0.1.0

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