yuzuha 0.1.5 → 0.2.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 (547) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +171 -115
  3. package/VERSIONING.md +119 -7
  4. package/assets/canvas/Inter-Bold.ttf +0 -0
  5. package/assets/canvas/Inter-Regular.ttf +0 -0
  6. package/assets/canvas/OFL.txt +92 -0
  7. package/assets/canvas/ORIGIN.md +8 -0
  8. package/benchmarks/compare.mjs +8 -2
  9. package/benchmarks/parser.mjs +66 -0
  10. package/benchmarks/performance.mjs +87 -0
  11. package/benchmarks/rate-limits.mjs +138 -0
  12. package/benchmarks/refinement.mjs +99 -0
  13. package/benchmarks/results/rate-limits-comparison.json +273 -0
  14. package/benchmarks/results/v0.1.6/performance-0.1.5.json +205 -0
  15. package/benchmarks/results/v0.1.6/performance-0.1.6.json +263 -0
  16. package/benchmarks/results/v0.1.6/refinement-audio.json +147 -0
  17. package/benchmarks/results/v0.1.6/refinement-final-repeat.json +147 -0
  18. package/benchmarks/results/v0.1.6/refinement-final.json +147 -0
  19. package/benchmarks/results/v0.1.6/refinement-initial.json +117 -0
  20. package/benchmarks/results/v0.1.6/runtime-0.1.5.json +341 -0
  21. package/benchmarks/results/v0.1.6/runtime-0.1.6-refined.json +406 -0
  22. package/benchmarks/results/v0.1.6/runtime-0.1.6-repeat.json +406 -0
  23. package/benchmarks/results/v0.1.6/runtime-0.1.6.json +406 -0
  24. package/benchmarks/results/v0.1.7/parser-comparison.json +170 -0
  25. package/bridges/lavalink/README.md +101 -0
  26. package/bridges/lavalink/application.yml +20 -0
  27. package/bridges/lavalink/build.mjs +38 -0
  28. package/bridges/lavalink/integration.mjs +161 -0
  29. package/bridges/lavalink/results/node22.json +39 -0
  30. package/bridges/lavalink/results/node26.json +39 -0
  31. package/bridges/lavalink/src/AudioController.java +149 -0
  32. package/bridges/lavalink/src/WebmOpus.java +82 -0
  33. package/dist/canvas.d.ts +10 -0
  34. package/dist/canvas.d.ts.map +1 -0
  35. package/dist/canvas.js +11 -0
  36. package/dist/canvas.js.map +1 -0
  37. package/dist/cli/arguments.d.ts +6 -0
  38. package/dist/cli/arguments.d.ts.map +1 -1
  39. package/dist/cli/arguments.js +39 -9
  40. package/dist/cli/arguments.js.map +1 -1
  41. package/dist/cli/bot-template-catalog.d.ts +33 -0
  42. package/dist/cli/bot-template-catalog.d.ts.map +1 -0
  43. package/dist/cli/bot-template-catalog.js +20 -0
  44. package/dist/cli/bot-template-catalog.js.map +1 -0
  45. package/dist/cli/bot-template-commands.d.ts +2 -0
  46. package/dist/cli/bot-template-commands.d.ts.map +1 -0
  47. package/dist/cli/bot-template-commands.js +358 -0
  48. package/dist/cli/bot-template-commands.js.map +1 -0
  49. package/dist/cli/bot-template-content.d.ts +13 -0
  50. package/dist/cli/bot-template-content.d.ts.map +1 -0
  51. package/dist/cli/bot-template-content.js +69 -0
  52. package/dist/cli/bot-template-content.js.map +1 -0
  53. package/dist/cli/bot-template-feature-tests.d.ts +2 -0
  54. package/dist/cli/bot-template-feature-tests.d.ts.map +1 -0
  55. package/dist/cli/bot-template-feature-tests.js +165 -0
  56. package/dist/cli/bot-template-feature-tests.js.map +1 -0
  57. package/dist/cli/bot-template-tests.d.ts +3 -0
  58. package/dist/cli/bot-template-tests.d.ts.map +1 -0
  59. package/dist/cli/bot-template-tests.js +67 -0
  60. package/dist/cli/bot-template-tests.js.map +1 -0
  61. package/dist/cli/bot-templates.d.ts +3 -0
  62. package/dist/cli/bot-templates.d.ts.map +1 -0
  63. package/dist/cli/bot-templates.js +154 -0
  64. package/dist/cli/bot-templates.js.map +1 -0
  65. package/dist/cli/main.d.ts.map +1 -1
  66. package/dist/cli/main.js +13 -3
  67. package/dist/cli/main.js.map +1 -1
  68. package/dist/cli/scaffold.d.ts +3 -1
  69. package/dist/cli/scaffold.d.ts.map +1 -1
  70. package/dist/cli/scaffold.js +26 -8
  71. package/dist/cli/scaffold.js.map +1 -1
  72. package/dist/cli/version.d.ts +1 -3
  73. package/dist/cli/version.d.ts.map +1 -1
  74. package/dist/cli/version.js +1 -6
  75. package/dist/cli/version.js.map +1 -1
  76. package/dist/cli.js +1 -1
  77. package/dist/cli.js.map +1 -1
  78. package/dist/commands/arguments.d.ts.map +1 -1
  79. package/dist/commands/arguments.js +56 -45
  80. package/dist/commands/arguments.js.map +1 -1
  81. package/dist/commands/context.d.ts +44 -10
  82. package/dist/commands/context.d.ts.map +1 -1
  83. package/dist/commands/context.js +80 -27
  84. package/dist/commands/context.js.map +1 -1
  85. package/dist/contracts.d.ts +1 -1
  86. package/dist/contracts.d.ts.map +1 -1
  87. package/dist/contracts.js.map +1 -1
  88. package/dist/domain/canvas.d.ts +240 -0
  89. package/dist/domain/canvas.d.ts.map +1 -0
  90. package/dist/domain/canvas.js +226 -0
  91. package/dist/domain/canvas.js.map +1 -0
  92. package/dist/domain/decimal.d.ts +4 -0
  93. package/dist/domain/decimal.d.ts.map +1 -0
  94. package/dist/domain/decimal.js +84 -0
  95. package/dist/domain/decimal.js.map +1 -0
  96. package/dist/domain/embeds.d.ts +36 -0
  97. package/dist/domain/embeds.d.ts.map +1 -0
  98. package/dist/domain/embeds.js +259 -0
  99. package/dist/domain/embeds.js.map +1 -0
  100. package/dist/domain/message-query.d.ts +39 -0
  101. package/dist/domain/message-query.d.ts.map +1 -0
  102. package/dist/domain/message-query.js +108 -0
  103. package/dist/domain/message-query.js.map +1 -0
  104. package/dist/domain/messages.d.ts +89 -13
  105. package/dist/domain/messages.d.ts.map +1 -1
  106. package/dist/domain/messages.js.map +1 -1
  107. package/dist/domain/music-state.d.ts +3 -0
  108. package/dist/domain/music-state.d.ts.map +1 -0
  109. package/dist/domain/music-state.js +10 -0
  110. package/dist/domain/music-state.js.map +1 -0
  111. package/dist/domain/music.d.ts +199 -0
  112. package/dist/domain/music.d.ts.map +1 -0
  113. package/dist/domain/music.js +2 -0
  114. package/dist/domain/music.js.map +1 -0
  115. package/dist/domain/state-validation.d.ts.map +1 -1
  116. package/dist/domain/state-validation.js +2 -0
  117. package/dist/domain/state-validation.js.map +1 -1
  118. package/dist/domain/state.d.ts +1 -0
  119. package/dist/domain/state.d.ts.map +1 -1
  120. package/dist/domain/state.js.map +1 -1
  121. package/dist/domain/track-queue.d.ts +24 -0
  122. package/dist/domain/track-queue.d.ts.map +1 -0
  123. package/dist/domain/track-queue.js +103 -0
  124. package/dist/domain/track-queue.js.map +1 -0
  125. package/dist/domain/variable-query.d.ts +29 -0
  126. package/dist/domain/variable-query.d.ts.map +1 -0
  127. package/dist/domain/variable-query.js +53 -0
  128. package/dist/domain/variable-query.js.map +1 -0
  129. package/dist/framework/bot.d.ts +17 -2
  130. package/dist/framework/bot.d.ts.map +1 -1
  131. package/dist/framework/bot.js +167 -39
  132. package/dist/framework/bot.js.map +1 -1
  133. package/dist/framework/command-registry.d.ts.map +1 -1
  134. package/dist/framework/command-registry.js +8 -1
  135. package/dist/framework/command-registry.js.map +1 -1
  136. package/dist/framework/events.d.ts +12 -0
  137. package/dist/framework/events.d.ts.map +1 -1
  138. package/dist/framework/events.js.map +1 -1
  139. package/dist/framework/options.d.ts +6 -0
  140. package/dist/framework/options.d.ts.map +1 -1
  141. package/dist/framework/options.js.map +1 -1
  142. package/dist/framework/rate-limits.d.ts +4 -0
  143. package/dist/framework/rate-limits.d.ts.map +1 -1
  144. package/dist/framework/rate-limits.js +31 -15
  145. package/dist/framework/rate-limits.js.map +1 -1
  146. package/dist/framework/reporting.js +1 -1
  147. package/dist/framework/reporting.js.map +1 -1
  148. package/dist/images.d.ts +3 -0
  149. package/dist/images.d.ts.map +1 -0
  150. package/dist/images.js +2 -0
  151. package/dist/images.js.map +1 -0
  152. package/dist/index.d.ts +8 -3
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.js +2 -0
  155. package/dist/index.js.map +1 -1
  156. package/dist/infrastructure/canvas/render.d.ts +3 -0
  157. package/dist/infrastructure/canvas/render.d.ts.map +1 -0
  158. package/dist/infrastructure/canvas/render.js +118 -0
  159. package/dist/infrastructure/canvas/render.js.map +1 -0
  160. package/dist/infrastructure/canvas/worker.mjs +286 -0
  161. package/dist/infrastructure/fluxer/lavalink-bridge.d.ts +34 -0
  162. package/dist/infrastructure/fluxer/lavalink-bridge.d.ts.map +1 -0
  163. package/dist/infrastructure/fluxer/lavalink-bridge.js +250 -0
  164. package/dist/infrastructure/fluxer/lavalink-bridge.js.map +1 -0
  165. package/dist/infrastructure/fluxer/payload.d.ts +6 -1
  166. package/dist/infrastructure/fluxer/payload.d.ts.map +1 -1
  167. package/dist/infrastructure/fluxer/payload.js +58 -19
  168. package/dist/infrastructure/fluxer/payload.js.map +1 -1
  169. package/dist/infrastructure/fluxer/resources/messages.d.ts.map +1 -1
  170. package/dist/infrastructure/fluxer/resources/messages.js +61 -4
  171. package/dist/infrastructure/fluxer/resources/messages.js.map +1 -1
  172. package/dist/infrastructure/fluxer/resources/threads.d.ts.map +1 -1
  173. package/dist/infrastructure/fluxer/resources/threads.js +9 -0
  174. package/dist/infrastructure/fluxer/resources/threads.js.map +1 -1
  175. package/dist/infrastructure/fluxer/resources/users.d.ts.map +1 -1
  176. package/dist/infrastructure/fluxer/resources/users.js +6 -0
  177. package/dist/infrastructure/fluxer/resources/users.js.map +1 -1
  178. package/dist/infrastructure/fluxer/transport.d.ts.map +1 -1
  179. package/dist/infrastructure/fluxer/transport.js +9 -5
  180. package/dist/infrastructure/fluxer/transport.js.map +1 -1
  181. package/dist/infrastructure/fluxer/voice.d.ts +28 -0
  182. package/dist/infrastructure/fluxer/voice.d.ts.map +1 -0
  183. package/dist/infrastructure/fluxer/voice.js +157 -0
  184. package/dist/infrastructure/fluxer/voice.js.map +1 -0
  185. package/dist/infrastructure/images/transform.d.ts +21 -0
  186. package/dist/infrastructure/images/transform.d.ts.map +1 -0
  187. package/dist/infrastructure/images/transform.js +77 -0
  188. package/dist/infrastructure/images/transform.js.map +1 -0
  189. package/dist/infrastructure/images/worker.mjs +28 -0
  190. package/dist/infrastructure/lavalink/audio-stream.d.ts +12 -0
  191. package/dist/infrastructure/lavalink/audio-stream.d.ts.map +1 -0
  192. package/dist/infrastructure/lavalink/audio-stream.js +95 -0
  193. package/dist/infrastructure/lavalink/audio-stream.js.map +1 -0
  194. package/dist/infrastructure/lavalink/node.d.ts +147 -0
  195. package/dist/infrastructure/lavalink/node.d.ts.map +1 -0
  196. package/dist/infrastructure/lavalink/node.js +498 -0
  197. package/dist/infrastructure/lavalink/node.js.map +1 -0
  198. package/dist/infrastructure/lavalink/protocol.d.ts +10 -0
  199. package/dist/infrastructure/lavalink/protocol.d.ts.map +1 -0
  200. package/dist/infrastructure/lavalink/protocol.js +114 -0
  201. package/dist/infrastructure/lavalink/protocol.js.map +1 -0
  202. package/dist/infrastructure/process-budget.d.ts +3 -0
  203. package/dist/infrastructure/process-budget.d.ts.map +1 -0
  204. package/dist/infrastructure/process-budget.js +17 -0
  205. package/dist/infrastructure/process-budget.js.map +1 -0
  206. package/dist/infrastructure/storage/memory.d.ts +2 -0
  207. package/dist/infrastructure/storage/memory.d.ts.map +1 -1
  208. package/dist/infrastructure/storage/memory.js +8 -0
  209. package/dist/infrastructure/storage/memory.js.map +1 -1
  210. package/dist/infrastructure/storage/sqlite.d.ts +4 -0
  211. package/dist/infrastructure/storage/sqlite.d.ts.map +1 -1
  212. package/dist/infrastructure/storage/sqlite.js +53 -3
  213. package/dist/infrastructure/storage/sqlite.js.map +1 -1
  214. package/dist/music.d.ts +12 -0
  215. package/dist/music.d.ts.map +1 -0
  216. package/dist/music.js +6 -0
  217. package/dist/music.js.map +1 -0
  218. package/dist/ports/canvas.d.ts +5 -0
  219. package/dist/ports/canvas.d.ts.map +1 -0
  220. package/dist/ports/canvas.js +2 -0
  221. package/dist/ports/canvas.js.map +1 -0
  222. package/dist/ports/music.d.ts +25 -0
  223. package/dist/ports/music.d.ts.map +1 -0
  224. package/dist/ports/music.js +2 -0
  225. package/dist/ports/music.js.map +1 -0
  226. package/dist/ports/resources/messages.d.ts +17 -7
  227. package/dist/ports/resources/messages.d.ts.map +1 -1
  228. package/dist/ports/resources/messages.js.map +1 -1
  229. package/dist/ports/resources/threads.d.ts +6 -0
  230. package/dist/ports/resources/threads.d.ts.map +1 -1
  231. package/dist/ports/resources/threads.js.map +1 -1
  232. package/dist/ports/resources/users.d.ts +2 -0
  233. package/dist/ports/resources/users.d.ts.map +1 -1
  234. package/dist/ports/resources/users.js.map +1 -1
  235. package/dist/ports/store.d.ts +5 -1
  236. package/dist/ports/store.d.ts.map +1 -1
  237. package/dist/ports/store.js.map +1 -1
  238. package/dist/ports/voice.d.ts +28 -0
  239. package/dist/ports/voice.d.ts.map +1 -0
  240. package/dist/ports/voice.js +2 -0
  241. package/dist/ports/voice.js.map +1 -0
  242. package/dist/scripting/builtins/canvas.d.ts +2 -0
  243. package/dist/scripting/builtins/canvas.d.ts.map +1 -0
  244. package/dist/scripting/builtins/canvas.js +118 -0
  245. package/dist/scripting/builtins/canvas.js.map +1 -0
  246. package/dist/scripting/builtins/embeds.d.ts +1 -2
  247. package/dist/scripting/builtins/embeds.d.ts.map +1 -1
  248. package/dist/scripting/builtins/embeds.js +90 -35
  249. package/dist/scripting/builtins/embeds.js.map +1 -1
  250. package/dist/scripting/builtins/flow.d.ts.map +1 -1
  251. package/dist/scripting/builtins/flow.js +2 -1
  252. package/dist/scripting/builtins/flow.js.map +1 -1
  253. package/dist/scripting/builtins/http.d.ts.map +1 -1
  254. package/dist/scripting/builtins/http.js +59 -0
  255. package/dist/scripting/builtins/http.js.map +1 -1
  256. package/dist/scripting/builtins/index.d.ts.map +1 -1
  257. package/dist/scripting/builtins/index.js +4 -1
  258. package/dist/scripting/builtins/index.js.map +1 -1
  259. package/dist/scripting/builtins/language/decimals.d.ts +2 -0
  260. package/dist/scripting/builtins/language/decimals.d.ts.map +1 -0
  261. package/dist/scripting/builtins/language/decimals.js +9 -0
  262. package/dist/scripting/builtins/language/decimals.js.map +1 -0
  263. package/dist/scripting/builtins/language/index.d.ts.map +1 -1
  264. package/dist/scripting/builtins/language/index.js +6 -0
  265. package/dist/scripting/builtins/language/index.js.map +1 -1
  266. package/dist/scripting/builtins/language/loops.d.ts.map +1 -1
  267. package/dist/scripting/builtins/language/loops.js +69 -7
  268. package/dist/scripting/builtins/language/loops.js.map +1 -1
  269. package/dist/scripting/builtins/language/objects.d.ts.map +1 -1
  270. package/dist/scripting/builtins/language/objects.js +2 -1
  271. package/dist/scripting/builtins/language/objects.js.map +1 -1
  272. package/dist/scripting/builtins/language/regex.d.ts +2 -0
  273. package/dist/scripting/builtins/language/regex.d.ts.map +1 -0
  274. package/dist/scripting/builtins/language/regex.js +17 -0
  275. package/dist/scripting/builtins/language/regex.js.map +1 -0
  276. package/dist/scripting/builtins/language/sort.d.ts +2 -0
  277. package/dist/scripting/builtins/language/sort.d.ts.map +1 -0
  278. package/dist/scripting/builtins/language/sort.js +55 -0
  279. package/dist/scripting/builtins/language/sort.js.map +1 -0
  280. package/dist/scripting/builtins/language/state.d.ts.map +1 -1
  281. package/dist/scripting/builtins/language/state.js +14 -9
  282. package/dist/scripting/builtins/language/state.js.map +1 -1
  283. package/dist/scripting/builtins/messages.js +3 -3
  284. package/dist/scripting/builtins/messages.js.map +1 -1
  285. package/dist/scripting/builtins/native-expressions.d.ts.map +1 -1
  286. package/dist/scripting/builtins/native-expressions.js +3 -1
  287. package/dist/scripting/builtins/native-expressions.js.map +1 -1
  288. package/dist/scripting/builtins/native-messages.d.ts.map +1 -1
  289. package/dist/scripting/builtins/native-messages.js +17 -0
  290. package/dist/scripting/builtins/native-messages.js.map +1 -1
  291. package/dist/scripting/builtins/native-threads.d.ts.map +1 -1
  292. package/dist/scripting/builtins/native-threads.js +8 -0
  293. package/dist/scripting/builtins/native-threads.js.map +1 -1
  294. package/dist/scripting/builtins/native-users.d.ts.map +1 -1
  295. package/dist/scripting/builtins/native-users.js +5 -0
  296. package/dist/scripting/builtins/native-users.js.map +1 -1
  297. package/dist/scripting/builtins/payload.d.ts +4 -1
  298. package/dist/scripting/builtins/payload.d.ts.map +1 -1
  299. package/dist/scripting/builtins/payload.js +127 -5
  300. package/dist/scripting/builtins/payload.js.map +1 -1
  301. package/dist/scripting/builtins/resource-extras.d.ts.map +1 -1
  302. package/dist/scripting/builtins/resource-extras.js +10 -2
  303. package/dist/scripting/builtins/resource-extras.js.map +1 -1
  304. package/dist/scripting/builtins/schedule.js +8 -8
  305. package/dist/scripting/builtins/schedule.js.map +1 -1
  306. package/dist/scripting/builtins/storage.d.ts.map +1 -1
  307. package/dist/scripting/builtins/storage.js +8 -0
  308. package/dist/scripting/builtins/storage.js.map +1 -1
  309. package/dist/scripting/canvas-execution.d.ts +12 -0
  310. package/dist/scripting/canvas-execution.d.ts.map +1 -0
  311. package/dist/scripting/canvas-execution.js +14 -0
  312. package/dist/scripting/canvas-execution.js.map +1 -0
  313. package/dist/scripting/control-flow.d.ts +8 -0
  314. package/dist/scripting/control-flow.d.ts.map +1 -0
  315. package/dist/scripting/control-flow.js +18 -0
  316. package/dist/scripting/control-flow.js.map +1 -0
  317. package/dist/scripting/evaluator.d.ts +4 -0
  318. package/dist/scripting/evaluator.d.ts.map +1 -1
  319. package/dist/scripting/evaluator.js +81 -36
  320. package/dist/scripting/evaluator.js.map +1 -1
  321. package/dist/scripting/parser.d.ts.map +1 -1
  322. package/dist/scripting/parser.js +20 -11
  323. package/dist/scripting/parser.js.map +1 -1
  324. package/dist/scripting/regex-worker.mjs +69 -0
  325. package/dist/scripting/regex.d.ts +19 -0
  326. package/dist/scripting/regex.d.ts.map +1 -0
  327. package/dist/scripting/regex.js +61 -0
  328. package/dist/scripting/regex.js.map +1 -0
  329. package/dist/scripting/registry.d.ts +2 -1
  330. package/dist/scripting/registry.d.ts.map +1 -1
  331. package/dist/scripting/registry.js +9 -2
  332. package/dist/scripting/registry.js.map +1 -1
  333. package/dist/services/attachments.d.ts +10 -0
  334. package/dist/services/attachments.d.ts.map +1 -0
  335. package/dist/services/attachments.js +54 -0
  336. package/dist/services/attachments.js.map +1 -0
  337. package/dist/services/authorization.d.ts +1 -0
  338. package/dist/services/authorization.d.ts.map +1 -1
  339. package/dist/services/authorization.js +10 -0
  340. package/dist/services/authorization.js.map +1 -1
  341. package/dist/services/canvas.d.ts +43 -0
  342. package/dist/services/canvas.d.ts.map +1 -0
  343. package/dist/services/canvas.js +587 -0
  344. package/dist/services/canvas.js.map +1 -0
  345. package/dist/services/http.d.ts.map +1 -1
  346. package/dist/services/http.js +34 -44
  347. package/dist/services/http.js.map +1 -1
  348. package/dist/services/music-player.d.ts +90 -0
  349. package/dist/services/music-player.d.ts.map +1 -0
  350. package/dist/services/music-player.js +475 -0
  351. package/dist/services/music-player.js.map +1 -0
  352. package/dist/services/music.d.ts +50 -0
  353. package/dist/services/music.d.ts.map +1 -0
  354. package/dist/services/music.js +177 -0
  355. package/dist/services/music.js.map +1 -0
  356. package/dist/services/native-data.d.ts +2 -0
  357. package/dist/services/native-data.d.ts.map +1 -1
  358. package/dist/services/native-data.js +3 -0
  359. package/dist/services/native-data.js.map +1 -1
  360. package/dist/services/resource-authorization.d.ts.map +1 -1
  361. package/dist/services/resource-authorization.js +37 -6
  362. package/dist/services/resource-authorization.js.map +1 -1
  363. package/dist/services/scheduler.d.ts +4 -0
  364. package/dist/services/scheduler.d.ts.map +1 -1
  365. package/dist/services/scheduler.js +10 -2
  366. package/dist/services/scheduler.js.map +1 -1
  367. package/dist/services/variables.d.ts +2 -0
  368. package/dist/services/variables.d.ts.map +1 -1
  369. package/dist/services/variables.js +11 -0
  370. package/dist/services/variables.js.map +1 -1
  371. package/dist/shared/package.d.ts +4 -0
  372. package/dist/shared/package.d.ts.map +1 -0
  373. package/dist/shared/package.js +7 -0
  374. package/dist/shared/package.js.map +1 -0
  375. package/dist/testing/music.d.ts +35 -0
  376. package/dist/testing/music.d.ts.map +1 -0
  377. package/dist/testing/music.js +88 -0
  378. package/dist/testing/music.js.map +1 -0
  379. package/dist/testing.d.ts +2 -0
  380. package/dist/testing.d.ts.map +1 -1
  381. package/dist/testing.js +4 -2
  382. package/dist/testing.js.map +1 -1
  383. package/docs/API.md +60 -3
  384. package/docs/ARCHITECTURE.md +22 -3
  385. package/docs/BENCHMARKS.md +230 -2
  386. package/docs/BOT-BASES.md +168 -0
  387. package/docs/CANVAS.md +274 -0
  388. package/docs/CLI.md +43 -5
  389. package/docs/COOKBOOK.md +1 -1
  390. package/docs/EMBEDS.md +153 -0
  391. package/docs/EVENTS.md +8 -0
  392. package/docs/FUNCTION-GAPS.md +54 -34
  393. package/docs/FUNCTIONS.md +62 -9
  394. package/docs/HTTP.md +41 -0
  395. package/docs/IMAGES.md +109 -0
  396. package/docs/INTEGRATIONS.md +69 -0
  397. package/docs/LANGUAGE-EXTENSIONS.md +106 -0
  398. package/docs/LANGUAGE.md +41 -4
  399. package/docs/MUSIC.md +339 -0
  400. package/docs/NATIVE.md +50 -8
  401. package/docs/PARITY-MATRIX.md +952 -0
  402. package/docs/PARITY.md +50 -26
  403. package/docs/PLAN.md +69 -1
  404. package/docs/PROJECT.md +35 -0
  405. package/docs/QUICKSTART.md +89 -48
  406. package/docs/README.md +44 -24
  407. package/docs/REPOSITORY.md +70 -0
  408. package/docs/SCHEDULER.md +17 -0
  409. package/docs/STORAGE.md +52 -1
  410. package/docs/TESTING.md +21 -1
  411. package/docs/TROUBLESHOOTING.md +11 -1
  412. package/docs/VALIDATION.md +222 -4
  413. package/docs/tutorials/DATA.md +100 -0
  414. package/docs/tutorials/FIRST-COMMAND.md +134 -0
  415. package/docs/tutorials/FUNCTION-MODE.md +100 -0
  416. package/docs/tutorials/TESTING.md +84 -0
  417. package/editors/vscode/functions.json +395 -11
  418. package/editors/vscode/package.json +1 -1
  419. package/examples/canvas/fixtures/avatar.png +0 -0
  420. package/examples/canvas/functions/profile.yuzuha +15 -0
  421. package/examples/canvas/functions/ranking.yuzuha +46 -0
  422. package/examples/canvas/functions/welcome.yuzuha +10 -0
  423. package/examples/canvas/output/function-profile.png +0 -0
  424. package/examples/canvas/output/function-ranking.png +0 -0
  425. package/examples/canvas/output/function-welcome.png +0 -0
  426. package/examples/canvas/output/js-profile.png +0 -0
  427. package/examples/canvas/output/js-ranking.png +0 -0
  428. package/examples/canvas/output/js-welcome.png +0 -0
  429. package/examples/canvas/output/profile.png +0 -0
  430. package/examples/canvas/output/ranking.png +0 -0
  431. package/examples/canvas/output/welcome.png +0 -0
  432. package/examples/canvas/profile.d.mts +3 -0
  433. package/examples/canvas/profile.mjs +20 -0
  434. package/examples/canvas/profile.ts +34 -0
  435. package/examples/canvas/ranking.d.mts +5 -0
  436. package/examples/canvas/ranking.mjs +25 -0
  437. package/examples/canvas/ranking.ts +40 -0
  438. package/examples/canvas/render.ts +48 -0
  439. package/examples/canvas/welcome.d.mts +3 -0
  440. package/examples/canvas/welcome.mjs +14 -0
  441. package/examples/canvas/welcome.ts +27 -0
  442. package/examples/embeds/complete-embed-functions.ts +31 -0
  443. package/examples/embeds/complete-embed.ts +33 -0
  444. package/examples/lavalink.ts +55 -0
  445. package/examples/music-offline.ts +25 -0
  446. package/examples/native-voice.ts +26 -0
  447. package/package.json +49 -5
  448. package/src/canvas.ts +20 -0
  449. package/src/cli/arguments.ts +34 -12
  450. package/src/cli/bot-template-catalog.ts +23 -0
  451. package/src/cli/bot-template-commands.ts +357 -0
  452. package/src/cli/bot-template-content.ts +66 -0
  453. package/src/cli/bot-template-feature-tests.ts +159 -0
  454. package/src/cli/bot-template-tests.ts +68 -0
  455. package/src/cli/bot-templates.ts +155 -0
  456. package/src/cli/main.ts +13 -3
  457. package/src/cli/scaffold.ts +29 -8
  458. package/src/cli/version.ts +1 -10
  459. package/src/cli.ts +1 -1
  460. package/src/commands/arguments.ts +48 -41
  461. package/src/commands/context.ts +83 -26
  462. package/src/contracts.ts +1 -1
  463. package/src/domain/canvas.ts +259 -0
  464. package/src/domain/decimal.ts +75 -0
  465. package/src/domain/embeds.ts +218 -0
  466. package/src/domain/message-query.ts +142 -0
  467. package/src/domain/messages.ts +89 -4
  468. package/src/domain/music-state.ts +10 -0
  469. package/src/domain/music.ts +82 -0
  470. package/src/domain/state-validation.ts +1 -0
  471. package/src/domain/state.ts +1 -0
  472. package/src/domain/track-queue.ts +79 -0
  473. package/src/domain/variable-query.ts +58 -0
  474. package/src/framework/bot.ts +141 -34
  475. package/src/framework/command-registry.ts +7 -1
  476. package/src/framework/events.ts +12 -0
  477. package/src/framework/options.ts +6 -0
  478. package/src/framework/rate-limits.ts +25 -11
  479. package/src/framework/reporting.ts +1 -1
  480. package/src/images.ts +2 -0
  481. package/src/index.ts +9 -3
  482. package/src/infrastructure/canvas/render.ts +100 -0
  483. package/src/infrastructure/canvas/worker.mjs +286 -0
  484. package/src/infrastructure/fluxer/lavalink-bridge.ts +200 -0
  485. package/src/infrastructure/fluxer/payload.ts +54 -13
  486. package/src/infrastructure/fluxer/resources/messages.ts +62 -5
  487. package/src/infrastructure/fluxer/resources/threads.ts +9 -0
  488. package/src/infrastructure/fluxer/resources/users.ts +5 -0
  489. package/src/infrastructure/fluxer/transport.ts +9 -5
  490. package/src/infrastructure/fluxer/voice.ts +108 -0
  491. package/src/infrastructure/images/transform.ts +71 -0
  492. package/src/infrastructure/images/worker.mjs +28 -0
  493. package/src/infrastructure/lavalink/audio-stream.ts +71 -0
  494. package/src/infrastructure/lavalink/node.ts +425 -0
  495. package/src/infrastructure/lavalink/protocol.ts +84 -0
  496. package/src/infrastructure/process-budget.ts +17 -0
  497. package/src/infrastructure/storage/memory.ts +10 -0
  498. package/src/infrastructure/storage/sqlite.ts +52 -4
  499. package/src/music.ts +11 -0
  500. package/src/ports/canvas.ts +5 -0
  501. package/src/ports/music.ts +24 -0
  502. package/src/ports/resources/messages.ts +17 -7
  503. package/src/ports/resources/threads.ts +7 -0
  504. package/src/ports/resources/users.ts +2 -0
  505. package/src/ports/store.ts +5 -1
  506. package/src/ports/voice.ts +26 -0
  507. package/src/scripting/builtins/canvas.ts +117 -0
  508. package/src/scripting/builtins/embeds.ts +87 -28
  509. package/src/scripting/builtins/flow.ts +2 -1
  510. package/src/scripting/builtins/http.ts +44 -0
  511. package/src/scripting/builtins/index.ts +4 -1
  512. package/src/scripting/builtins/language/decimals.ts +10 -0
  513. package/src/scripting/builtins/language/index.ts +6 -0
  514. package/src/scripting/builtins/language/loops.ts +57 -8
  515. package/src/scripting/builtins/language/objects.ts +2 -1
  516. package/src/scripting/builtins/language/regex.ts +19 -0
  517. package/src/scripting/builtins/language/sort.ts +50 -0
  518. package/src/scripting/builtins/language/state.ts +14 -7
  519. package/src/scripting/builtins/messages.ts +3 -3
  520. package/src/scripting/builtins/native-expressions.ts +3 -1
  521. package/src/scripting/builtins/native-messages.ts +17 -0
  522. package/src/scripting/builtins/native-threads.ts +7 -0
  523. package/src/scripting/builtins/native-users.ts +5 -0
  524. package/src/scripting/builtins/payload.ts +121 -6
  525. package/src/scripting/builtins/resource-extras.ts +9 -2
  526. package/src/scripting/builtins/schedule.ts +11 -11
  527. package/src/scripting/builtins/storage.ts +7 -0
  528. package/src/scripting/canvas-execution.ts +23 -0
  529. package/src/scripting/control-flow.ts +13 -0
  530. package/src/scripting/evaluator.ts +52 -18
  531. package/src/scripting/parser.ts +23 -10
  532. package/src/scripting/regex-worker.mjs +69 -0
  533. package/src/scripting/regex.ts +63 -0
  534. package/src/scripting/registry.ts +7 -2
  535. package/src/services/attachments.ts +51 -0
  536. package/src/services/authorization.ts +9 -0
  537. package/src/services/canvas.ts +498 -0
  538. package/src/services/http.ts +26 -33
  539. package/src/services/music-player.ts +340 -0
  540. package/src/services/music.ts +146 -0
  541. package/src/services/native-data.ts +5 -0
  542. package/src/services/resource-authorization.ts +37 -6
  543. package/src/services/scheduler.ts +11 -2
  544. package/src/services/variables.ts +11 -0
  545. package/src/shared/package.ts +10 -0
  546. package/src/testing/music.ts +71 -0
  547. package/src/testing.ts +4 -2
package/CHANGELOG.md CHANGED
@@ -21,6 +21,86 @@ documentos. Veja a [política completa](VERSIONING.md).
21
21
 
22
22
  </details>
23
23
 
24
+ ## v0.2.0 · 02/11/2026
25
+
26
+ Embeds completos em uma API só, nos modos nativo e function mode, com uma matriz automática de paridade com o SDK. Esta atualização da biblioteca Yuzuha foi preparada em 02/11/2026 (v0.2.0); a tag Git `v0.2.0` aponta para esta versão.
27
+
28
+ - `Embed` aceita `url`, `timestamp`, `author` com ícone e link, `footer.iconURL`, texto alternativo em imagem e miniatura, e `fields[].inline` opcional. Na função `$color` e em `$embedFromObject`, a cor aceita `#RRGGBB`, tupla `r,g,b` ou nome simples; o tipo `Embed` nativo continua recebendo número. `embed()` valida um embed tipado na API nativa e `yuzuha/sdk` continua expondo o `EmbedBuilder` do SDK.
29
+ - Mensagens aceitam até 10 embeds, `tts`, `stickerIds`, `flags`, `allowedMentions` e `reply` na API nativa. O padrão continua sem menções e sem ping ao autor respondido. Relaxar menções exige `MentionEveryone` do autor, e TTS exige `SendTtsMessages`.
30
+ - Catorze funções novas: `$url`, `$embedTimestamp`, `$author`, `$footerIcon`, `$imageAlt`, `$thumbnailAlt`, `$fields`, `$addField`, `$removeField`, `$editField`, `$embedFromObject`, `$embeds`, `$addEmbed` e `$messageOptions`. `$field` aceita valor vazio quando é inline.
31
+ - `$fetchMessage` e `$messages` devolvem `embeds` normalizados, com `type`, `provider`, `video`, `audio`, `nsfw` e `children` somente leitura.
32
+ - Mudança incompatível: `MessageInfo.embeds` é obrigatório para implementações próprias de `MessagesResources`. Objetos de mensagem em script rejeitam chaves desconhecidas, que antes viravam embed sem validação. Veja [VERSIONING.md](VERSIONING.md#migrar-para-020).
33
+ - `npm run docs:generate` gera [PARITY-MATRIX.md](docs/PARITY-MATRIX.md), que classifica cada export do SDK como coberto por script, coberto pelo código nativo, só-SDK ou lacuna. Um teste falha quando o SDK ganha export sem área.
34
+ - Catálogo do function mode: de 322 para **336** funções. [FUNCTION-GAPS.md](docs/FUNCTION-GAPS.md) foi atualizado com a contagem real.
35
+
36
+ ## v0.1.9 · 29/10/2026
37
+
38
+ Composição opcional de cartões para comandos, eventos e function mode, com fontes locais e renderização isolada. Esta atualização da biblioteca Yuzuha foi preparada em 29/10/2026 (v0.1.9).
39
+
40
+ - `yuzuha/canvas` oferece builder tipado para texto, imagens, avatares, formas, gradientes, sombras, badges e progresso. A raiz e o function mode continuam importáveis sem instalar `@napi-rs/canvas`; o backend carrega somente no processo filho durante a renderização.
41
+ - `ctx.canvas.send` e `bot.contextEvent` permitem anexar imagens em comandos e eventos sem mensagem. O canal é explícito quando o evento não o fornece.
42
+ - Doze funções `$canvas*` mantêm cenas privadas por execução e elevam o catálogo canônico de 310 para **322**. Quotas, cancelamento e limites atravessam `$try`.
43
+ - Inter 4.1 Regular e Bold acompanham os arquivos originais e a licença OFL. Fontes próprias podem vir de bytes, aliases configurados ou HTTP submetido à política do contexto.
44
+ - Canvas e Sharp compartilham no máximo dois processos simultâneos, sem fila implícita. Canvas não depende de Sharp; `yuzuha/images` preserva seu contrato.
45
+ - Perfil, boas-vindas e ranking têm versões JS, TS e function mode e geram nove PNGs offline. O tarball verifica imports sem os peers e renderização real com Canvas sem Sharp.
46
+ - SDK 3.3.0, Node >=22.13 e schema persistido 2 permanecem compatíveis.
47
+
48
+ ## v0.1.8 · 28/10/2026
49
+
50
+ Bases de bots, buscas e páginas do Fluxer.js, com autorização compartilhada e correções de limites, streams e cooldowns. Esta atualização da biblioteca Yuzuha foi preparada em 28/10/2026 (v0.1.8).
51
+
52
+ - A CLI oferece sete bases JS/TS com `templates` e `init --template`: simple, multifunctional, moderation, community, economy, entertainment e utility. A multifuncional reúne 24 comandos raiz; os projetos incluem configuração, exemplos e testes offline. O scaffold padrão e `--functions` continuam disponíveis.
53
+ - A distribuição preserva o modo executável da CLI e testa a instalação, os tipos e o dispatch dos 14 pares de base/linguagem a partir do tarball.
54
+ - Quatro funções novas levam o catálogo de 306 a **310**: `$searchMessagesAdvanced`, `$pinnedMessagesPage`, `$reactionUsersPage` e `$threadMember`. Seus recursos e tipos também estão disponíveis na API nativa.
55
+ - A busca aceita filtros de conteúdo, frases, autores, canais, menções, anexos, IDs e ordenação sem exigir texto. A validação é compartilhada entre scripts e adaptador, copia arrays e limita as opções a 32 KiB; a busca anterior continua disponível, incluindo cursor vazio.
56
+ - Páginas de fixadas preservam ordem de fixação, timestamps, `hasMore` e cursor ISO. Páginas de reações preservam `hasMore`/`nextAfter`, incluindo respostas legadas em array. A consulta individual de membros de threads inclui flags e metadados de mute, com o autor do contexto como padrão nos scripts.
57
+ - Mutações de emojis e stickers pelo contexto exigem `ManageExpressions` de autor e bot no servidor atual. Criar emoji verifica as permissões antes do download e revalida antes de criar o recurso. Guards não são capturados por `$try`.
58
+ - `$jsonEncode` preserva guards, limites, cancelamento, controle de loops e `PartialModerationError`. Incrementos, remoções/inclusões em arrays e atualizações por caminho verificam a saída antes do commit, preservando valor, TTL e ausência quando recusados.
59
+ - O prazo cooperativo do runtime usa relógio monotônico. Esperas externas sobrepostas ou aninhadas descontam seu intervalo uma única vez, sem conceder tempo duplicado.
60
+ - HTTP valida sub-redes IPv4/IPv6, inclusive IPv4 mapeado, link-local e redes especiais. Literais IPv6 públicos funcionam sem consulta DNS; credenciais na URL e corpos em GET/HEAD são recusados.
61
+ - Redirects preservam os métodos conforme o padrão Fetch e removem cabeçalhos de conteúdo quando descartam o corpo. Respostas binárias copiam chunks reutilizados; cancelamento libera readers mesmo quando a fonte não conclui a limpeza.
62
+ - Anexos por stream mantêm os metadados validados durante a leitura e não deixam um timeout agendado quando a fonte já está bloqueada por outro reader.
63
+ - Deduplicação de mensagens e consultas de cooldown ativo deixam de varrer o mapa de cooldowns. A coleta considera vencimentos e pressão de capacidade; renovação e admissão reutilizam entradas expiradas, mantendo o teto de 100 mil. Flags malformadas geram `GuardError` antes do handler.
64
+ - Um benchmark reproduzível compara a implementação anterior e a atual com amostras intercaladas. O ganho é localizado na manutenção removida; cenários comuns tiveram resultados mistos, registrados sem alegação de aceleração geral.
65
+ - Referências, catálogo do editor, guias e consumidores JS/TS acompanham os novos contratos. O SDK continua fixado em 3.3.0, o schema persistido em 2 e os sete entrypoints permanecem disponíveis.
66
+ - **Adaptação de integrações:** implementações completas próprias de `MessagesResources` devem acrescentar `pinnedPage` e `reactionUsersPage`; `ThreadsResources` deve acrescentar `member`. Comandos antes autorizados apenas pelo bot podem receber `GuardError` nas mutações de expressões. Apesar da numeração patch, esta entrega altera esses contratos; veja [VERSIONING.md](VERSIONING.md) antes de atualizar.
67
+
68
+ ## v0.1.7 · 23/10/2026
69
+
70
+ Loops controláveis, comparadores de arrays, regex isolada, decimais exatos e busca pela CLI, com o conteúdo preparado na 0.1.6. Esta atualização da biblioteca Yuzuha foi preparada em 23/10/2026 (v0.1.7).
71
+
72
+ - `yuzuha functions --search <termo>` filtra nomes, aliases e descrições por trecho, sem distinguir maiúsculas e minúsculas. Aceita `$` inicial e combina com categoria, JSON, exportação de catálogo e filtros de plugins, preservando a ordem dos resultados.
73
+ - Buscas sem resultados encerram com sucesso e retornam uma mensagem no terminal ou uma lista vazia em JSON. Termos vazios, ausentes ou repetidos são recusados; categorias desconhecidas continuam sendo erros.
74
+ - Consultas paginadas de variáveis por prefixo, com TTL e cursor; índice SQLite derivado do snapshot e invalidado por trigger. Streaming UTF-8 em scripts, com backpressure, controle de loop e cancelamento.
75
+ - `yuzuha/images` adiciona transformação opcional de PNG/JPEG/WebP com Sharp em processos limitados e canceláveis. `ctx.sendStream` lê anexos com orçamento e prazo antes do upload de bytes exigido pelo SDK.
76
+ - Auditoria de integrações documenta configuração de shards já suportada pelo core, gerenciamento externo de processos e ausência de contratos para componentes/comandos de aplicação.
77
+ - Tarefas aceitam prioridade persistida; `globalConcurrency` coordena claims no store compartilhado, preservando o limite local.
78
+ - **18 funções novas**, totalizando **306**: `guildFeatures`, `leaveGuild`, `while`, `break`, `continue`, `arraySortWith`, `sortLeft`, `sortRight`, `regexTest`, `regexMatch`, `regexReplace`, `decimal`, `decimalCompare`, `decimalRound`, `queryVars`, `httpStream`, `httpChunk` e `httpChunkIndex`.
79
+ - `ctx.guildFeatures()` copia as features do servidor; `ctx.leaveGuild()` só permite a saída solicitada pelo dono do servidor, com a mesma autorização nos scripts. Ports customizados antigos continuam válidos; ausência do recurso retorna `NATIVE_UNAVAILABLE`.
80
+ - Loops restauram o contexto ao sair; `break` e `continue` atravessam `$try` e afetam o corpo do loop mais próximo. Comparadores usam ordenação estável e orçamento compartilhado. Decimais retornam texto e usam até 1000 dígitos, sem perda por `Number`.
81
+ - Regex roda em workers limitados, com cancelamento, prazo e limites de entrada, correspondências e saída. O worker é incluído no tarball e não executa JavaScript fornecido pelo script.
82
+ - Inclui as otimizações de dispatch, runtime e estado, as APIs nativas de música, a integração Lavalink v4 e a ponte de áudio descritas na entrada 0.1.6. SDK 3.3.0, schema 2 e imports anteriores permanecem compatíveis.
83
+ - Erros do gateway e de shards chegam aos hooks `onError`/`onLog` mesmo sem listeners do usuário. Os listeners padrão permanecem ativos durante o encerramento e preservam os listeners de clients injetados.
84
+ - O parser salta trechos de texto comum mantendo offsets, escapes e diagnósticos. A limpeza de `$httpStream` não bloqueia o comando quando a fonte deixa o cancelamento pendente.
85
+ - Biblioteca e CLI voltam à raiz do repositório, com instalação npm, guias Markdown e exemplos incluídos no pacote. O site fica arquivado para uma etapa futura.
86
+
87
+ ## v0.1.6 · 22/10/2026
88
+
89
+ Dispatch, argumentos, runtime e leituras de estado mais rápidos, com ferramentas nativas para música e integração Lavalink v4. Esta atualização da biblioteca Yuzuha foi preparada em 22/10/2026 (v0.1.6).
90
+
91
+ - Deduplicação usa uma fila circular de 10000 entradas; mensagens ignoradas seguem um caminho curto. Prefixos estáticos são reaproveitados, o sinal de encerramento é compartilhado e serviços, mapas de argumentos e variáveis do contexto são criados sob demanda.
92
+ - Registro individual de comandos valida conflitos antes de inserir, sem copiar todo o catálogo. Carga e recarga continuam atômicas. Argumentos simples usam tokenização por trechos; o caminho de aspas/apóstrofos evita inspecionar repetidamente a palavra em construção. Escapes, flags e erros de entrada são preservados.
93
+ - Parser acumula trechos de texto; evaluator evita promises para literais e resolve funções com cache fraco por AST. A validação continua ativa para ASTs externos ou editados, com ordem, tipos, guards, orçamento e falhas parciais preservados.
94
+ - Leituras pontuais em memória e JSON copiam somente o valor solicitado e respeitam TTL e ordenação das transações. Stores próprios conservam o caminho anterior; `readVariable` é uma capacidade opcional. SQLite reutiliza statements sem alterar schema, WAL ou validação antes do commit.
95
+ - `yuzuha/music` entrega cliente Lavalink v4 com REST/WebSocket autenticados, retomada de sessão, reconexão limitada, cancelamento, limite de respostas/requisições, cache LRU com orçamento de bytes e compartilhamento de buscas simultâneas.
96
+ - Gerenciador de música com distribuição de novos players entre nodes disponíveis, filas limitadas por servidor, avanço automático, loop, pause, skip, stop, seek, volume e filtros. Controles e eventos são serializados; falhas de PATCH preservam as faixas pendentes.
97
+ - Sessões Lavalink perdidas são reconstruídas com concorrência limitada, posição, pausa, filtros e renovação de voz. Sessões retomadas preservam a reprodução; eventos aguardam a confirmação do handshake. Respostas antigas não alteram a fila.
98
+ - Filas permitem remover, mover, embaralhar e consultar páginas sem copiar todo o catálogo. Controles pendentes são limitados por player; eventos de fim mantêm capacidade reservada. Nodes consideram CPU, players e frames ao distribuir carga; saídas pelo plugin ignoram os contadores de voz Discord, evitando perda falsa no balanceamento.
99
+ - Buscas com signals distintos compartilham a requisição, com cancelamento por chamada e aborto quando todos desistem. Decode de faixas/lotes e diagnósticos de cache/rede completam a API; parsing de flags evita mapas e objetos temporários por valor.
100
+ - `FluxerVoice` carrega `@fluxerjs/voice` opcionalmente para áudio WebM/Opus nativo. `ctx.voice` e `ctx.music` recebem serviços configurados e participam do encerramento.
101
+ - `FluxerLavalinkBridge` e o plugin `yuzuha-audio` conectam a saída Opus do Lavalink 4.2.2 ao SDK do Fluxer. Mantêm uma publicação entre faixas, pausa, seek e filtros; transmissão incremental, limites, cancelamento e reconexão liberam os recursos por servidor. A integração local usa áudio e decoder reais, com publicação LiveKit simulada.
102
+ - `MockMusicBackend`, `mockTrack`, exemplo offline, guia de música e benchmarks adicionais acompanham a versão. Relatórios anteriores/atuais e método estão em [BENCHMARKS.md](docs/BENCHMARKS.md). SDK 3.3.0, schema 2 e 288 funções de script permanecem compatíveis.
103
+
24
104
  ## v0.1.5 · 22/10/2026
25
105
 
26
106
  Subcomandos e flags tipadas, ajuda derivada das definições e testes nativos com relógio controlável, com projetos gerados prontos para compartilhar. Esta atualização da biblioteca Yuzuha foi preparada em 22/10/2026 (v0.1.5).
package/README.md CHANGED
@@ -1,159 +1,215 @@
1
1
  # Yuzuha
2
2
 
3
- Framework para bots do Fluxer: a ergonomia que falta no Fluxer.js, com comandos
4
- tipados, guards, estado, moderação, agendamentos e testes offline. Function mode
5
- (scripts no estilo ForgeScript) é opcional. Versão **0.1.5**.
3
+ Framework TypeScript para bots do [Fluxer](https://fluxer.app), com comandos
4
+ tipados em JavaScript/TypeScript e uma linguagem opcional de scripts.
5
+ Os dois modos compartilham permissões, moderação, estado e recursos.
6
6
 
7
- ```ts
8
- import { arg, defineCommand, Yuzuha } from 'yuzuha';
7
+ O Yuzuha usa **Fluxer.js 3.3.0**. Você continua tendo acesso ao client original
8
+ por `bot.client` e aos exports do SDK em `yuzuha/sdk`.
9
9
 
10
- const bot = new Yuzuha({ name: 'meu-bot', prefix: '!' });
10
+ [0.2.0](CHANGELOG.md) · Node **22.13+** · ESM · [MIT](LICENSE)
11
11
 
12
- bot.command(defineCommand({
13
- name: 'ban',
14
- description: 'Bane um membro e registra um caso.',
15
- args: {
16
- membro: arg.user().required(),
17
- motivo: arg.text().rest(),
18
- },
19
- async run(ctx) {
20
- const caso = await ctx.mod.ban(ctx.args.get('membro'), {
21
- reason: ctx.args.get('motivo') ?? '',
22
- });
23
- await ctx.reply(`Membro banido. Caso #${caso.id}.`);
24
- },
25
- }));
12
+ [Começar](#começar) · [Comandos](#escrever-comandos) · [Recursos](#recursos) · [Testes](#testar-sem-token) · [Documentação](#documentação)
13
+
14
+ ## Começar
15
+
16
+ ### Criar um bot
17
+
18
+ ```sh
19
+ npx yuzuha@0.2.0 init ./meu-bot --ts
20
+ cd meu-bot
21
+ npm install
22
+ npm run check
23
+ npm run typecheck
24
+ npm test
25
+ cp .env.example .env
26
+ ```
27
+
28
+ Preencha `FLUXER_BOT_TOKEN` no `.env` e inicie o bot:
26
29
 
27
- await bot.login();
30
+ ```sh
31
+ npm run dev
28
32
  ```
29
33
 
30
- Uso: `!ban @membro spam no chat`. `ctx.mod.ban` verifica permissões e hierarquia,
31
- executa o banimento e registra o caso. O token vem de `FLUXER_BOT_TOKEN`.
32
- `bot.client` continua sendo o client real do Fluxer.js.
34
+ O projeto inclui três comandos, configuração e um teste offline. Para JavaScript,
35
+ troque `--ts` por `--js` e omita `typecheck`. Acrescente `--functions` ao `init`
36
+ para incluir um comando de exemplo com scripts.
37
+
38
+ `npm run check`, `npm run typecheck` e `npm test` validam o projeto sem conectar o bot.
39
+ `npm run dev` conecta e recarrega os arquivos de comando ao editar;
40
+ `npm start` executa sem recarga automática.
33
41
 
34
- ## O que o Yuzuha adiciona ao Fluxer.js
42
+ ### Usar em um projeto existente
43
+
44
+ ```sh
45
+ npm install yuzuha@0.2.0
46
+ ```
35
47
 
36
- - Comandos com prefixos, subcomandos, flags e argumentos tipados, cooldowns e permissões.
37
- - Ajuda com uso, escolhas e exemplos a partir das definições dos comandos.
38
- - Guards, middleware, plugins, eventos tipados e recarga de comandos sem reiniciar.
39
- - Moderação compartilhada (ban, kick, timeout, unban) com casos por servidor.
40
- - Recursos prontos: usuários, cargos, canais, mensagens, convites, webhooks,
41
- emojis, stickers, threads e fóruns, incluindo reações, membros de threads,
42
- posição de cargos/canais e categorias.
43
- - Estado em memória, JSON ou SQLite, com transações e variáveis por escopo.
44
- - Agendamentos persistentes com cron, fuso IANA, concorrência e retry com jitter.
45
- - HTTP textual/binário, streaming e multipart, com limites e políticas por comando.
46
- - `createTestBot`, relógio controlável, `MockTransport` e stores isolados para testar sem token.
47
- - Transações entre chaves, agendamentos editáveis com pausa/retry e apelidos com autorização compartilhada.
48
- - Limpeza de expirados, estatísticas e backup/restauração versionados com simulação.
49
- - `doctor`, lint JSON, cenários offline, catálogos de plugins e extensão VS Code.
50
- - SDK `@fluxerjs/core` **3.3.0** reexportado em `yuzuha/sdk`, sem esconder o original.
48
+ Use `"type": "module"` no `package.json`. O [guia inicial](docs/QUICKSTART.md)
49
+ mostra como configurar o bot e carregar comandos.
51
50
 
52
- Não é um fork do Fluxer.js nem um wrapper de todos os métodos do SDK. O que não
53
- estiver no framework continua acessível por `bot.client` e pelos tipos originais.
51
+ ## Escrever comandos
54
52
 
55
- ## Function mode (opcional)
53
+ Salve **uma das versões** abaixo em `commands/eco.ts` (`.js` para JavaScript).
54
+ Ambas respondem a `!eco Olá, Yuzuha!` com `Olá, Yuzuha!`.
56
55
 
57
- Quem preferir a sintaxe curta do ForgeScript pode usar `yuzuha/functions`. O
58
- runtime é ativado quando um comando com `code` ou um evento de script é registrado.
56
+ ### JavaScript / TypeScript
59
57
 
60
58
  ```ts
61
- import { script } from 'yuzuha/functions';
62
- import { Yuzuha } from 'yuzuha';
59
+ import { arg, defineCommand } from 'yuzuha';
60
+
61
+ export default defineCommand({
62
+ name: 'eco',
63
+ description: 'Repete o texto informado.',
64
+ args: { texto: arg.text().rest().required() },
65
+ async run(ctx) {
66
+ await ctx.reply(ctx.args.get('texto'));
67
+ },
68
+ });
69
+ ```
70
+
71
+ Schemas `arg.*` inferem os tipos de argumentos e flags. Você também pode declarar
72
+ subcomandos, checks e middleware. O [guia nativo](docs/NATIVE.md) cobre esses
73
+ contratos, eventos, moderação e persistência.
74
+
75
+ ### Function mode do Yuzuha
63
76
 
64
- const bot = new Yuzuha({ prefix: '!' });
77
+ ```ts
78
+ import { script } from 'yuzuha/functions';
65
79
 
66
- bot.command(script({
67
- name: 'ban',
68
- code: '$modBan[$mentioned[1];$messageSlice[1]]$reply[Membro banido. Caso #$caseID.]',
69
- }));
80
+ export default script({
81
+ name: 'eco',
82
+ description: 'Repete o texto informado.',
83
+ code: '$reply[$messageSlice[0]]',
84
+ });
70
85
  ```
71
86
 
72
- Os dois modos compartilham guards, estado, moderação e recursos. São
73
- **288 funções** com referência gerada, ou use `bot.enableFunctions()` para
74
- pré-carregar o runtime.
87
+ O function mode tem **336 funções** para mensagens, guards, moderação, variáveis,
88
+ JSON, arrays, loops, eventos e agendamentos. O runtime é ativado ao registrar um
89
+ comando com `code` ou um evento de script.
75
90
 
76
- `bot.scriptEvent()` registra scripts para entrada/saída de membros, edição/exclusão
77
- de mensagens e reações. O contexto preserva os dados disponíveis do evento e exige
78
- um canal real para enviar respostas. Veja [eventos](docs/EVENTS.md).
91
+ As funções seguem as assinaturas e regras do runtime do Yuzuha. Consulte a
92
+ [linguagem](docs/LANGUAGE.md), as [assinaturas das funções](docs/FUNCTIONS.md)
93
+ e a [cobertura](docs/PARITY.md).
79
94
 
80
- ## Instalar pelo npm
95
+ ## Recursos
81
96
 
82
- Requer Node **22.13 ou mais recente**. O pacote é ESM; use `"type": "module"`
83
- no `package.json` do seu projeto.
97
+ | Área | O que está disponível |
98
+ |---|---|
99
+ | Comandos | Prefixos, aliases, subcomandos, argumentos e flags tipadas, cooldowns e ajuda gerada dos metadados |
100
+ | Extensões | Plugins, eventos, checks, middleware e recarga atômica de comandos |
101
+ | Moderação | Ban, kick, timeout, unban e moderação de voz, com permissões, hierarquia e casos por servidor |
102
+ | Fluxer | Usuários, membros, cargos, canais, mensagens, reações, anexos, threads, convites, webhooks e expressões |
103
+ | Dados | Memória, JSON e SQLite; TTL, transações, limpeza e backup/restauração com simulação |
104
+ | Agendamentos | Tarefas persistentes, cron, fusos IANA, pausa/retomada, histórico e retry |
105
+ | HTTP | Texto, bytes, streaming e multipart, com limites, cancelamento e políticas por comando |
106
+ | Canvas | Cartões com texto, avatares, imagens, gradientes, badges e progresso; peer nativo opcional |
107
+ | Música | Lavalink v4 com plugin e ponte de áudio para Fluxer, recuperação, filas editáveis, loop, seek, volume e filtros |
108
+ | Desenvolvimento | CLI, autocomplete e diagnósticos no VS Code, mocks e relógio controlável para testes |
109
+
110
+ ## Testar sem token
111
+
112
+ O scaffold já inclui um teste executável com `npm test`. Para testar o comando
113
+ `eco` acima, crie `test/eco.test.ts` (`.js` para JavaScript):
84
114
 
85
- ```sh
86
- npm install yuzuha@0.1.5
115
+ ```ts
116
+ import test from 'node:test';
117
+ import assert from 'node:assert/strict';
118
+ import { createTestBot } from 'yuzuha/testing';
119
+ import eco from '../commands/eco.js';
120
+
121
+ test('eco responde com o texto informado', async t => {
122
+ const fixture = createTestBot({ commands: [eco] });
123
+ t.after(() => fixture.destroy());
124
+
125
+ assert.equal(await fixture.send('!eco Olá, Yuzuha!'), 'success');
126
+ assert.equal(fixture.messages.at(-1)?.payload.content, 'Olá, Yuzuha!');
127
+ });
87
128
  ```
88
129
 
89
- Para gerar um bot novo:
130
+ `createTestBot` usa transporte e recursos simulados, com estado isolado. O relógio
131
+ controlável permite testar cooldown, TTL e tarefas sem aguardar tempo real.
132
+ Veja fixtures, stores e cenários na [documentação de testes](docs/TESTING.md).
90
133
 
91
- ```sh
92
- npx yuzuha@0.1.5 init ./meu-bot --ts
93
- cd meu-bot
94
- npm install
95
- npm run check
96
- npm run typecheck
97
- npm test
98
- cp .env.example .env
99
- ```
134
+ ## CLI
135
+
136
+ Execute estes comandos no diretório do seu bot:
137
+
138
+ | Comando | Uso |
139
+ |---|---|
140
+ | `npx yuzuha check` | Validar configuração e comandos sem login |
141
+ | `npx yuzuha doctor` | Diagnosticar ambiente, configuração e store |
142
+ | `npx yuzuha lint commands --json` | Analisar scripts sem importar módulos |
143
+ | `npx yuzuha functions --category moderation` | Consultar funções e assinaturas |
144
+ | `npx yuzuha functions --search mensagem` | Buscar funções por nome, alias ou descrição |
145
+ | `npx yuzuha editor` | Encontrar a extensão VS Code incluída no pacote |
100
146
 
101
- `init` declara a dependência npm e gera um teste offline. O projeto pode ser
102
- movido e compartilhado sem depender do caminho da instalação que o criou.
103
- Para JavaScript, use `--js` e omita `typecheck`.
104
- Para acrescentar um exemplo de script, use `--functions`.
147
+ `check` importa configurações e comandos JS/TS de confiança; a verificação de
148
+ tipos é feita por `npm run typecheck`. A [referência da CLI](docs/CLI.md) também cobre
149
+ catálogos de plugins, cenários offline e manutenção de dados.
105
150
 
106
- Preencha `FLUXER_BOT_TOKEN` no `.env` e execute `npm run dev`.
151
+ ## Documentação
152
+
153
+ O [índice completo](docs/README.md) reúne os guias e as referências.
154
+
155
+ | Quero… | Ler |
156
+ |---|---|
157
+ | Criar e configurar um bot | [Guia inicial](docs/QUICKSTART.md) |
158
+ | Programar em JS/TS | [Guia nativo](docs/NATIVE.md), [framework](docs/FRAMEWORK.md) e [API](docs/API.md) |
159
+ | Criar um bot de música | [Lavalink, filas e voz Fluxer](docs/MUSIC.md) |
160
+ | Medir performance | [Benchmarks e comparações com a 0.1.5](docs/BENCHMARKS.md) |
161
+ | Compor cartões e imagens | [Canvas](docs/CANVAS.md) e [transformações de imagem](docs/IMAGES.md) |
162
+ | Escrever scripts `$...` | [Linguagem](docs/LANGUAGE.md) e [referência de funções](docs/FUNCTIONS.md) |
163
+ | Copiar exemplos | [Receitas](docs/COOKBOOK.md) e [código de exemplo](examples) |
164
+ | Usar o editor ou diagnosticar um erro | [VS Code](docs/EDITOR.md) e [problemas comuns](docs/TROUBLESHOOTING.md) |
165
+ | Entender a cobertura | [Paridade](docs/PARITY.md) e [funções ausentes](docs/FUNCTION-GAPS.md) |
166
+ | Conferir mudanças e validação | [Changelog](CHANGELOG.md), [versionamento](VERSIONING.md) e [evidências](docs/VALIDATION.md) |
107
167
 
108
- ## Desenvolver a biblioteca localmente
168
+ ## Desenvolver a biblioteca
169
+
170
+ Na cópia do repositório:
109
171
 
110
172
  ```sh
111
- cd ~/Projects/yuzuha
173
+ git clone https://github.com/horizzon3507/yuzuha.git
174
+ cd yuzuha
112
175
  npm ci
113
- npm run build
114
- node dist/cli.js init ~/Projects/meu-bot --ts --local
115
- cd ~/Projects/meu-bot
116
- npm install
117
176
  npm run check
118
- npm run typecheck
119
- cp .env.example .env
177
+ npm run smoke:package
120
178
  ```
121
179
 
122
- O scaffold desse fluxo usa a biblioteca local. O
123
- [guia inicial](docs/QUICKSTART.md) explica instalação e configuração.
124
-
125
- ## Experimentar sem token
180
+ Para experimentar os exemplos offline:
126
181
 
127
182
  ```sh
128
183
  npx tsx examples/offline.ts
129
184
  npx tsx examples/function-mode.ts
130
- node dist/cli.js check examples/yuzuha.config.js --json
131
- node dist/cli.js functions --category moderation
132
185
  ```
133
186
 
134
- Os exemplos usam `MockTransport`; nenhuma ação chega ao Fluxer. `check` importa
135
- config e comandos JS/TS de confiança, valida os scripts e não chama `login`.
136
- Ele não substitui o typecheck do TypeScript.
187
+ Para gerar um bot que use sua instalação local da biblioteca:
137
188
 
138
- ## Documentação
189
+ ```sh
190
+ node dist/cli.js init ../meu-bot-local --ts --local
191
+ ```
139
192
 
140
- Comece pelo [índice da documentação](docs/README.md).
193
+ O `init` usa a dependência npm por padrão; `--local` aponta para a instalação
194
+ que executa a CLI. Veja [contribuição](CONTRIBUTING.md) para as regras de código
195
+ e as verificações do projeto.
141
196
 
142
- | Preciso de… | Documento |
143
- |---|---|
144
- | Criar meu primeiro bot JS ou TS | [Guia inicial](docs/QUICKSTART.md) |
145
- | Programar comandos, eventos e plugins | [Guia nativo JS/TS](docs/NATIVE.md) |
146
- | Escrever scripts `$...` | [Function mode](docs/LANGUAGE.md) e [referência](docs/FUNCTIONS.md) |
147
- | Saber quais funções de script existem | [Lacunas auditadas](docs/FUNCTION-GAPS.md) |
148
- | Usar comandos, contexto e extensões | [Framework](docs/FRAMEWORK.md) e [API](docs/API.md) |
149
- | Copiar exemplos completos | [Receitas](docs/COOKBOOK.md) |
150
- | Usar a linha de comando | [CLI](docs/CLI.md) |
151
- | Entender módulos e dependências | [Arquitetura](docs/ARCHITECTURE.md) |
152
- | Escolher persistência e tratar falhas | [Estado e execução](docs/STORAGE.md) |
153
- | Diagnosticar ou testar | [Problemas comuns](docs/TROUBLESHOOTING.md) e [testes](docs/TESTING.md) |
154
- | Usar autocomplete e diagnóstico offline | [Editor e doctor](docs/EDITOR.md) |
155
- | Medir dispatch, runtime e memória | [Benchmarks](docs/BENCHMARKS.md) |
156
- | Ver evidência local | [Validação](docs/VALIDATION.md) |
157
-
158
- As mudanças estão no [changelog](CHANGELOG.md); a política de versões está em
159
- [VERSIONING.md](VERSIONING.md). Leia [CONTRIBUTING.md](CONTRIBUTING.md) para contribuir.
197
+ Transformações opcionais de imagens e entrada de anexos por stream estão em
198
+ [IMAGES.md](docs/IMAGES.md); consultas por prefixo e cursor em
199
+ [STORAGE.md](docs/STORAGE.md), e limites das integrações em
200
+ [INTEGRATIONS.md](docs/INTEGRATIONS.md).
201
+
202
+ ### Bases de bots
203
+
204
+ Sete opções: `simple`, `multifunctional`, `moderation`, `community`, `economy`,
205
+ `entertainment` e `utility`. Na cópia local compilada:
206
+
207
+ ```sh
208
+ node dist/cli.js templates
209
+ node dist/cli.js init ../bot-comunidade --template community --ts --local
210
+ ```
211
+
212
+ A multifuncional reúne 24 comandos raiz com embeds e subcomandos, incluindo
213
+ moderação com casos, regras, sugestões, enquetes, moedas virtuais, diversão
214
+ e notas pessoais em DM. Todas as bases aceitam JS/TS e `--functions`, com README
215
+ e testes offline próprios. Veja [BOT-BASES.md](docs/BOT-BASES.md).
package/VERSIONING.md CHANGED
@@ -1,16 +1,16 @@
1
1
  # Versionamento
2
2
 
3
3
  O Yuzuha aplica o formato Hory ao histórico e usa **SemVer simples** no pacote.
4
- A versão desta atualização é **0.1.5**.
4
+ A versão desta atualização é **0.2.0**.
5
5
 
6
6
  ## Pacote e histórico
7
7
 
8
8
  | Lugar | Formato nesta versão |
9
9
  |---|---|
10
- | `package.json` e raiz do `package-lock.json` | `0.1.5` |
11
- | Pacote npm e saída de `yuzuha --version` | `0.1.5` |
12
- | Título do changelog | `## v0.1.5 · 22/10/2026` |
13
- | Eventual tag Git | `v0.1.5` |
10
+ | `package.json` e entrada raiz de `package-lock.json` | `0.2.0` |
11
+ | Pacote npm e saída de `yuzuha --version` | `0.2.0` |
12
+ | Título do changelog | `## v0.2.0 · 02/11/2026` |
13
+ | Tag Git | `v0.2.0` |
14
14
 
15
15
  O SDK e a CLI pertencem ao mesmo pacote. Para bibliotecas, a convenção Hory mantém
16
16
  SemVer sem `m`, sem seções por superfície e sem sufixos de canal.
@@ -30,7 +30,8 @@ estivermos em `0.x`. Ao chegar a `1.0.0`, mudanças incompatíveis exigem major;
30
30
  novas funcionalidades compatíveis, minor; correções compatíveis, patch.
31
31
 
32
32
  Os exports públicos são `yuzuha`, `yuzuha/functions`, `yuzuha/sdk`,
33
- `yuzuha/testing` e `yuzuha/tooling`. A organização interna de `src/` não cria estabilidade de deep
33
+ `yuzuha/testing`, `yuzuha/tooling`, `yuzuha/music`, `yuzuha/images` e
34
+ `yuzuha/canvas`. A organização interna de `src/` não cria estabilidade de deep
34
35
  imports. Schema persistido,
35
36
  gramática e funções documentadas também fazem parte da compatibilidade.
36
37
 
@@ -40,6 +41,117 @@ gerado por `init` pertence ao consumidor e não precisa acompanhar a biblioteca.
40
41
 
41
42
  ## Preparar uma atualização
42
43
 
44
+ ### Migrar para 0.2.0
45
+
46
+ A 0.2.0 acrescenta campos a `Embed` (`url`, `timestamp`, `author`, `footer.iconURL`,
47
+ alt text em imagem e miniatura), `allowedMentions`, `tts`, `stickerIds`, `flags` e
48
+ `reply` em `Payload`, além de 14 funções de script e a leitura normalizada de embeds
49
+ em `$fetchMessage` e `$messages`. Os exports públicos continuam os mesmos.
50
+
51
+ Há duas mudanças de contrato, por isso a versão é minor na série `0.x`:
52
+
53
+ - `MessageInfo.embeds` passou a ser obrigatório. Quem implementa `MessagesResources`
54
+ própria deve devolver `embeds` (use `[]` se não houver embeds).
55
+ - Objetos de mensagem em script (`$reply`, `$sendMessage`, `$editMessage`) aceitam
56
+ somente as chaves `content`, `embeds`, `tts`, `stickerIds`, `flags` e `allowedMentions`.
57
+ Antes, qualquer objeto virava embed sem validação; agora campos desconhecidos são erro.
58
+
59
+ Menções só relaxam com a permissão `MentionEveryone` do autor, e TTS exige
60
+ `SendTtsMessages`. O padrão continua sem menções e sem ping ao autor respondido.
61
+
62
+ ```sh
63
+ npm install yuzuha@0.2.0
64
+ ```
65
+
66
+ ### Migrar para 0.1.9
67
+
68
+ A 0.1.9 acrescenta `yuzuha/canvas`, `ctx.canvas` e `bot.contextEvent`, além de
69
+ 12 funções de script da categoria `canvas`. O pacote continua utilizável sem
70
+ Canvas; para renderizar, instale `@napi-rs/canvas@^1.0.13`. Sem o peer, somente
71
+ a chamada de renderização falha com `CANVAS_DEPENDENCY`. Sharp continua sendo
72
+ opcional e independente. O envio usa `resources.messages.sendBytes` e eventos
73
+ sem canal precisam fornecer `channelID` em `ctx.canvas.send`.
74
+
75
+ `CanvasConfig` pode registrar bytes de assets e fontes TTF/OTF. As respostas
76
+ HTTP continuam sujeitas à política e ao limite configurado no bot. Canvas e
77
+ transformações Sharp compartilham duas vagas de processo. O schema persistido
78
+ permanece em 2 e o SDK em 3.3.0; não há migração de dados.
79
+
80
+ ```sh
81
+ npm install yuzuha@0.1.9 @napi-rs/canvas@^1.0.13
82
+ ```
83
+
84
+ Veja [CANVAS.md](docs/CANVAS.md) para opções, limites, fontes e exemplos. A
85
+ extensão incluída acompanha a versão 0.1.9.
86
+
87
+ ### Migrar para 0.1.8
88
+
89
+ A 0.1.8 é uma exceção pontual à regra de versões minor para mudanças de
90
+ contrato na série 0.x. Embora use numeração patch, requer adaptação de
91
+ implementações completas próprias de `Resources` e revisão das autorizações
92
+ de comandos. A regra de compatibilidade acima continua valendo para as
93
+ próximas versões.
94
+
95
+ - Acrescente `messages.pinnedPage`, `messages.reactionUsersPage` e
96
+ `threads.member` aos adaptadores completos. Os tipos de retorno são
97
+ `PinnedMessagesPage`, `ReactionUsersPage` e `ThreadMemberDetails`, exportados
98
+ pela raiz. `mockResources` continua aceitando overrides parciais.
99
+ - Mutações de emojis/stickers por `ctx.resources.expressions` exigem
100
+ `ManageExpressions` de autor e bot no servidor do contexto. Código confiável
101
+ que precisa operar diretamente com a autoridade do bot continua usando
102
+ `bot.resources` ou `bot.client` explicitamente.
103
+ - HTTP recusa credenciais embutidas na URL, corpos GET/HEAD e destinos nas
104
+ redes locais/especiais bloqueadas, incluindo IPv4 mapeado em IPv6. Use
105
+ `Authorization` para autenticação; rede privada exige `allowPrivate: true`
106
+ explícito. Redirects 301/302 preservam PUT/PATCH/DELETE e 303 preserva HEAD;
107
+ cabeçalhos de conteúdo são removidos quando o corpo é descartado.
108
+ - As opções de busca recebem validação compartilhada de tipos, IDs, cursores
109
+ e limites. Texto é opcional na API nativa e em `$searchMessagesAdvanced`;
110
+ `$searchMessages` mantém sua assinatura e aceita cursor vazio.
111
+ - O catálogo passa a 310 funções. Imports, SDK 3.3.0 e schema 2 permanecem;
112
+ não há migração de dados em disco. As sete bases da CLI são aditivas e não
113
+ reescrevem projetos existentes. A extensão incluída acompanha a versão 0.1.8.
114
+
115
+ ### Migrar para 0.1.7
116
+
117
+ A distribuição 0.1.7 inclui o conteúdo preparado na 0.1.6 e acrescenta
118
+ `yuzuha functions --search <termo>`. A busca combina com os filtros e formatos
119
+ existentes sem alterar imports anteriores, schema 2 ou SDK 3.3.0.
120
+ A linguagem recebe 18 funções, chegando a 306. `GuildInfo.features` e
121
+ `UsersResources.leaveGuild` são opcionais para preservar recursos customizados;
122
+ os novos auxiliares do contexto recusam recursos ausentes explicitamente.
123
+ O port `Store.queryVariables` também é opcional; memória/JSON mantêm fallback
124
+ por snapshot. SQLite cria um índice derivado automaticamente na primeira consulta,
125
+ sem alterar schema 2. Prioridade padrão é zero e capacidade compartilhada só é
126
+ ativada com `globalConcurrency`. `yuzuha/images` requer instalar Sharp; o restante
127
+ da biblioteca continua independente dele. Não há mudanças obrigatórias nos bots
128
+ existentes.
129
+ As instruções da 0.1.6 abaixo continuam aplicáveis ao atualizar da 0.1.5.
130
+
131
+ ### Migrar para 0.1.6
132
+
133
+ Imports, schema 2, SDK 3.3.0 e 288 funções permanecem disponíveis. Os serviços do
134
+ contexto e seus mapas são inicializados sob demanda; as referências devolvidas
135
+ continuam estáveis por contexto. Mensagens ignoradas não criam uma execução.
136
+ O sinal de cancelamento pode ser compartilhado entre comandos do mesmo bot;
137
+ não dependa de sua identidade para correlacionar execuções: use `executionID`.
138
+
139
+ `Store.readVariable` é opcional e deve retornar uma cópia isolada, respeitar a
140
+ ordenação das transações e avaliar o callback de relógio `now` dentro da leitura,
141
+ após aguardar operações anteriores. `undefined` indica
142
+ ausente/expirado; `null` continua sendo um valor JSON válido. Não há migração de
143
+ disco. SQLite conserva validação do estado completo antes de cada commit.
144
+
145
+ `yuzuha/music` é um import adicional. Configure `music`/`voice` explicitamente;
146
+ o bot encerra os serviços fornecidos e o chamador fecha os nodes Lavalink.
147
+ `@fluxerjs/voice` é um peer opcional carregado em `join`. Para áudio Lavalink no
148
+ Fluxer, configure `FluxerLavalinkBridge` e instale o plugin `yuzuha-audio` fornecido
149
+ pelo Yuzuha no servidor; veja [MUSIC.md](docs/MUSIC.md).
150
+ Não há wrappers de música no function mode nesta versão.
151
+
152
+ Benchmarks agora exigem a versão exata do Node e o mesmo modo de GC, suíte e
153
+ carga. Relatórios de outro runtime devem ser executados novamente antes de comparar.
154
+
43
155
  ### Migrar para 0.1.5
44
156
 
45
157
  Imports, argumentos posicionais e comandos existentes continuam disponíveis.
@@ -133,7 +245,7 @@ externos para idempotência. Veja [NATIVE.md](docs/NATIVE.md) e
133
245
 
134
246
  ### Procedimento
135
247
 
136
- 1. Atualize manifest e lockfile para a mesma versão.
248
+ 1. Atualize `package.json` e regenere `package-lock.json` para a mesma versão.
137
249
  2. Acrescente a entrada no [CHANGELOG.md](CHANGELOG.md), com data real e mudanças verificáveis.
138
250
  3. Atualize migração, cobertura e documentação quando o contrato mudar.
139
251
  4. Rode `npm run check` e `npm run smoke:package` e registre a evidência.
Binary file
Binary file