yuzuha 0.1.7 → 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 (284) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +21 -4
  3. package/VERSIONING.md +78 -6
  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/rate-limits.mjs +138 -0
  9. package/benchmarks/results/rate-limits-comparison.json +273 -0
  10. package/bridges/lavalink/README.md +2 -2
  11. package/dist/canvas.d.ts +10 -0
  12. package/dist/canvas.d.ts.map +1 -0
  13. package/dist/canvas.js +11 -0
  14. package/dist/canvas.js.map +1 -0
  15. package/dist/cli/arguments.d.ts +5 -0
  16. package/dist/cli/arguments.d.ts.map +1 -1
  17. package/dist/cli/arguments.js +31 -6
  18. package/dist/cli/arguments.js.map +1 -1
  19. package/dist/cli/bot-template-catalog.d.ts +33 -0
  20. package/dist/cli/bot-template-catalog.d.ts.map +1 -0
  21. package/dist/cli/bot-template-catalog.js +20 -0
  22. package/dist/cli/bot-template-catalog.js.map +1 -0
  23. package/dist/cli/bot-template-commands.d.ts +2 -0
  24. package/dist/cli/bot-template-commands.d.ts.map +1 -0
  25. package/dist/cli/bot-template-commands.js +358 -0
  26. package/dist/cli/bot-template-commands.js.map +1 -0
  27. package/dist/cli/bot-template-content.d.ts +13 -0
  28. package/dist/cli/bot-template-content.d.ts.map +1 -0
  29. package/dist/cli/bot-template-content.js +69 -0
  30. package/dist/cli/bot-template-content.js.map +1 -0
  31. package/dist/cli/bot-template-feature-tests.d.ts +2 -0
  32. package/dist/cli/bot-template-feature-tests.d.ts.map +1 -0
  33. package/dist/cli/bot-template-feature-tests.js +165 -0
  34. package/dist/cli/bot-template-feature-tests.js.map +1 -0
  35. package/dist/cli/bot-template-tests.d.ts +3 -0
  36. package/dist/cli/bot-template-tests.d.ts.map +1 -0
  37. package/dist/cli/bot-template-tests.js +67 -0
  38. package/dist/cli/bot-template-tests.js.map +1 -0
  39. package/dist/cli/bot-templates.d.ts +3 -0
  40. package/dist/cli/bot-templates.d.ts.map +1 -0
  41. package/dist/cli/bot-templates.js +154 -0
  42. package/dist/cli/bot-templates.js.map +1 -0
  43. package/dist/cli/main.d.ts.map +1 -1
  44. package/dist/cli/main.js +7 -1
  45. package/dist/cli/main.js.map +1 -1
  46. package/dist/cli/scaffold.d.ts +3 -1
  47. package/dist/cli/scaffold.d.ts.map +1 -1
  48. package/dist/cli/scaffold.js +26 -8
  49. package/dist/cli/scaffold.js.map +1 -1
  50. package/dist/cli.js +1 -1
  51. package/dist/cli.js.map +1 -1
  52. package/dist/commands/arguments.js +2 -2
  53. package/dist/commands/arguments.js.map +1 -1
  54. package/dist/commands/context.d.ts +11 -0
  55. package/dist/commands/context.d.ts.map +1 -1
  56. package/dist/commands/context.js +13 -0
  57. package/dist/commands/context.js.map +1 -1
  58. package/dist/contracts.d.ts +1 -1
  59. package/dist/contracts.d.ts.map +1 -1
  60. package/dist/contracts.js.map +1 -1
  61. package/dist/domain/canvas.d.ts +240 -0
  62. package/dist/domain/canvas.d.ts.map +1 -0
  63. package/dist/domain/canvas.js +226 -0
  64. package/dist/domain/canvas.js.map +1 -0
  65. package/dist/domain/embeds.d.ts +36 -0
  66. package/dist/domain/embeds.d.ts.map +1 -0
  67. package/dist/domain/embeds.js +259 -0
  68. package/dist/domain/embeds.js.map +1 -0
  69. package/dist/domain/message-query.d.ts +39 -0
  70. package/dist/domain/message-query.d.ts.map +1 -0
  71. package/dist/domain/message-query.js +108 -0
  72. package/dist/domain/message-query.js.map +1 -0
  73. package/dist/domain/messages.d.ts +89 -13
  74. package/dist/domain/messages.d.ts.map +1 -1
  75. package/dist/domain/messages.js.map +1 -1
  76. package/dist/framework/bot.d.ts +2 -1
  77. package/dist/framework/bot.d.ts.map +1 -1
  78. package/dist/framework/bot.js +34 -3
  79. package/dist/framework/bot.js.map +1 -1
  80. package/dist/framework/events.d.ts +12 -0
  81. package/dist/framework/events.d.ts.map +1 -1
  82. package/dist/framework/events.js.map +1 -1
  83. package/dist/framework/options.d.ts +2 -0
  84. package/dist/framework/options.d.ts.map +1 -1
  85. package/dist/framework/options.js.map +1 -1
  86. package/dist/framework/rate-limits.d.ts +1 -0
  87. package/dist/framework/rate-limits.d.ts.map +1 -1
  88. package/dist/framework/rate-limits.js +18 -8
  89. package/dist/framework/rate-limits.js.map +1 -1
  90. package/dist/index.d.ts +4 -3
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +1 -0
  93. package/dist/index.js.map +1 -1
  94. package/dist/infrastructure/canvas/render.d.ts +3 -0
  95. package/dist/infrastructure/canvas/render.d.ts.map +1 -0
  96. package/dist/infrastructure/canvas/render.js +118 -0
  97. package/dist/infrastructure/canvas/render.js.map +1 -0
  98. package/dist/infrastructure/canvas/worker.mjs +286 -0
  99. package/dist/infrastructure/fluxer/payload.d.ts +6 -1
  100. package/dist/infrastructure/fluxer/payload.d.ts.map +1 -1
  101. package/dist/infrastructure/fluxer/payload.js +58 -19
  102. package/dist/infrastructure/fluxer/payload.js.map +1 -1
  103. package/dist/infrastructure/fluxer/resources/messages.d.ts.map +1 -1
  104. package/dist/infrastructure/fluxer/resources/messages.js +61 -4
  105. package/dist/infrastructure/fluxer/resources/messages.js.map +1 -1
  106. package/dist/infrastructure/fluxer/resources/threads.d.ts.map +1 -1
  107. package/dist/infrastructure/fluxer/resources/threads.js +9 -0
  108. package/dist/infrastructure/fluxer/resources/threads.js.map +1 -1
  109. package/dist/infrastructure/fluxer/transport.d.ts.map +1 -1
  110. package/dist/infrastructure/fluxer/transport.js +9 -5
  111. package/dist/infrastructure/fluxer/transport.js.map +1 -1
  112. package/dist/infrastructure/images/transform.d.ts.map +1 -1
  113. package/dist/infrastructure/images/transform.js +14 -9
  114. package/dist/infrastructure/images/transform.js.map +1 -1
  115. package/dist/infrastructure/process-budget.d.ts +3 -0
  116. package/dist/infrastructure/process-budget.d.ts.map +1 -0
  117. package/dist/infrastructure/process-budget.js +17 -0
  118. package/dist/infrastructure/process-budget.js.map +1 -0
  119. package/dist/ports/canvas.d.ts +5 -0
  120. package/dist/ports/canvas.d.ts.map +1 -0
  121. package/dist/ports/canvas.js +2 -0
  122. package/dist/ports/canvas.js.map +1 -0
  123. package/dist/ports/resources/messages.d.ts +17 -7
  124. package/dist/ports/resources/messages.d.ts.map +1 -1
  125. package/dist/ports/resources/messages.js.map +1 -1
  126. package/dist/ports/resources/threads.d.ts +6 -0
  127. package/dist/ports/resources/threads.d.ts.map +1 -1
  128. package/dist/ports/resources/threads.js.map +1 -1
  129. package/dist/scripting/builtins/canvas.d.ts +2 -0
  130. package/dist/scripting/builtins/canvas.d.ts.map +1 -0
  131. package/dist/scripting/builtins/canvas.js +118 -0
  132. package/dist/scripting/builtins/canvas.js.map +1 -0
  133. package/dist/scripting/builtins/embeds.d.ts +1 -2
  134. package/dist/scripting/builtins/embeds.d.ts.map +1 -1
  135. package/dist/scripting/builtins/embeds.js +90 -35
  136. package/dist/scripting/builtins/embeds.js.map +1 -1
  137. package/dist/scripting/builtins/index.d.ts.map +1 -1
  138. package/dist/scripting/builtins/index.js +4 -1
  139. package/dist/scripting/builtins/index.js.map +1 -1
  140. package/dist/scripting/builtins/language/objects.d.ts.map +1 -1
  141. package/dist/scripting/builtins/language/objects.js +2 -1
  142. package/dist/scripting/builtins/language/objects.js.map +1 -1
  143. package/dist/scripting/builtins/language/state.d.ts.map +1 -1
  144. package/dist/scripting/builtins/language/state.js +14 -9
  145. package/dist/scripting/builtins/language/state.js.map +1 -1
  146. package/dist/scripting/builtins/messages.js +3 -3
  147. package/dist/scripting/builtins/messages.js.map +1 -1
  148. package/dist/scripting/builtins/native-expressions.d.ts.map +1 -1
  149. package/dist/scripting/builtins/native-expressions.js +3 -1
  150. package/dist/scripting/builtins/native-expressions.js.map +1 -1
  151. package/dist/scripting/builtins/native-messages.d.ts.map +1 -1
  152. package/dist/scripting/builtins/native-messages.js +17 -0
  153. package/dist/scripting/builtins/native-messages.js.map +1 -1
  154. package/dist/scripting/builtins/native-threads.d.ts.map +1 -1
  155. package/dist/scripting/builtins/native-threads.js +8 -0
  156. package/dist/scripting/builtins/native-threads.js.map +1 -1
  157. package/dist/scripting/builtins/payload.d.ts +4 -1
  158. package/dist/scripting/builtins/payload.d.ts.map +1 -1
  159. package/dist/scripting/builtins/payload.js +127 -5
  160. package/dist/scripting/builtins/payload.js.map +1 -1
  161. package/dist/scripting/builtins/resource-extras.d.ts.map +1 -1
  162. package/dist/scripting/builtins/resource-extras.js +10 -2
  163. package/dist/scripting/builtins/resource-extras.js.map +1 -1
  164. package/dist/scripting/canvas-execution.d.ts +12 -0
  165. package/dist/scripting/canvas-execution.d.ts.map +1 -0
  166. package/dist/scripting/canvas-execution.js +14 -0
  167. package/dist/scripting/canvas-execution.js.map +1 -0
  168. package/dist/scripting/evaluator.d.ts +3 -0
  169. package/dist/scripting/evaluator.d.ts.map +1 -1
  170. package/dist/scripting/evaluator.js +45 -25
  171. package/dist/scripting/evaluator.js.map +1 -1
  172. package/dist/services/attachments.d.ts.map +1 -1
  173. package/dist/services/attachments.js +6 -4
  174. package/dist/services/attachments.js.map +1 -1
  175. package/dist/services/canvas.d.ts +43 -0
  176. package/dist/services/canvas.d.ts.map +1 -0
  177. package/dist/services/canvas.js +587 -0
  178. package/dist/services/canvas.js.map +1 -0
  179. package/dist/services/http.d.ts.map +1 -1
  180. package/dist/services/http.js +34 -44
  181. package/dist/services/http.js.map +1 -1
  182. package/dist/services/resource-authorization.d.ts.map +1 -1
  183. package/dist/services/resource-authorization.js +37 -6
  184. package/dist/services/resource-authorization.js.map +1 -1
  185. package/docs/API.md +13 -2
  186. package/docs/ARCHITECTURE.md +1 -1
  187. package/docs/BENCHMARKS.md +35 -0
  188. package/docs/BOT-BASES.md +168 -0
  189. package/docs/CANVAS.md +274 -0
  190. package/docs/CLI.md +26 -3
  191. package/docs/EMBEDS.md +153 -0
  192. package/docs/FUNCTION-GAPS.md +7 -6
  193. package/docs/FUNCTIONS.md +41 -6
  194. package/docs/HTTP.md +18 -0
  195. package/docs/IMAGES.md +13 -8
  196. package/docs/LANGUAGE.md +37 -0
  197. package/docs/MUSIC.md +3 -3
  198. package/docs/NATIVE.md +36 -3
  199. package/docs/PARITY-MATRIX.md +952 -0
  200. package/docs/PARITY.md +26 -10
  201. package/docs/PLAN.md +40 -1
  202. package/docs/QUICKSTART.md +18 -2
  203. package/docs/README.md +7 -2
  204. package/docs/STORAGE.md +3 -1
  205. package/docs/VALIDATION.md +55 -0
  206. package/editors/vscode/functions.json +248 -8
  207. package/editors/vscode/package.json +1 -1
  208. package/examples/canvas/fixtures/avatar.png +0 -0
  209. package/examples/canvas/functions/profile.yuzuha +15 -0
  210. package/examples/canvas/functions/ranking.yuzuha +46 -0
  211. package/examples/canvas/functions/welcome.yuzuha +10 -0
  212. package/examples/canvas/output/function-profile.png +0 -0
  213. package/examples/canvas/output/function-ranking.png +0 -0
  214. package/examples/canvas/output/function-welcome.png +0 -0
  215. package/examples/canvas/output/js-profile.png +0 -0
  216. package/examples/canvas/output/js-ranking.png +0 -0
  217. package/examples/canvas/output/js-welcome.png +0 -0
  218. package/examples/canvas/output/profile.png +0 -0
  219. package/examples/canvas/output/ranking.png +0 -0
  220. package/examples/canvas/output/welcome.png +0 -0
  221. package/examples/canvas/profile.d.mts +3 -0
  222. package/examples/canvas/profile.mjs +20 -0
  223. package/examples/canvas/profile.ts +34 -0
  224. package/examples/canvas/ranking.d.mts +5 -0
  225. package/examples/canvas/ranking.mjs +25 -0
  226. package/examples/canvas/ranking.ts +40 -0
  227. package/examples/canvas/render.ts +48 -0
  228. package/examples/canvas/welcome.d.mts +3 -0
  229. package/examples/canvas/welcome.mjs +14 -0
  230. package/examples/canvas/welcome.ts +27 -0
  231. package/examples/embeds/complete-embed-functions.ts +31 -0
  232. package/examples/embeds/complete-embed.ts +33 -0
  233. package/package.json +16 -5
  234. package/src/canvas.ts +20 -0
  235. package/src/cli/arguments.ts +26 -7
  236. package/src/cli/bot-template-catalog.ts +23 -0
  237. package/src/cli/bot-template-commands.ts +357 -0
  238. package/src/cli/bot-template-content.ts +66 -0
  239. package/src/cli/bot-template-feature-tests.ts +159 -0
  240. package/src/cli/bot-template-tests.ts +68 -0
  241. package/src/cli/bot-templates.ts +155 -0
  242. package/src/cli/main.ts +7 -1
  243. package/src/cli/scaffold.ts +29 -8
  244. package/src/cli.ts +1 -1
  245. package/src/commands/arguments.ts +3 -3
  246. package/src/commands/context.ts +15 -0
  247. package/src/contracts.ts +1 -1
  248. package/src/domain/canvas.ts +259 -0
  249. package/src/domain/embeds.ts +218 -0
  250. package/src/domain/message-query.ts +142 -0
  251. package/src/domain/messages.ts +89 -4
  252. package/src/framework/bot.ts +30 -5
  253. package/src/framework/events.ts +12 -0
  254. package/src/framework/options.ts +2 -0
  255. package/src/framework/rate-limits.ts +16 -7
  256. package/src/index.ts +5 -3
  257. package/src/infrastructure/canvas/render.ts +100 -0
  258. package/src/infrastructure/canvas/worker.mjs +286 -0
  259. package/src/infrastructure/fluxer/payload.ts +54 -13
  260. package/src/infrastructure/fluxer/resources/messages.ts +62 -5
  261. package/src/infrastructure/fluxer/resources/threads.ts +9 -0
  262. package/src/infrastructure/fluxer/transport.ts +9 -5
  263. package/src/infrastructure/images/transform.ts +13 -8
  264. package/src/infrastructure/process-budget.ts +17 -0
  265. package/src/ports/canvas.ts +5 -0
  266. package/src/ports/resources/messages.ts +17 -7
  267. package/src/ports/resources/threads.ts +7 -0
  268. package/src/scripting/builtins/canvas.ts +117 -0
  269. package/src/scripting/builtins/embeds.ts +87 -28
  270. package/src/scripting/builtins/index.ts +4 -1
  271. package/src/scripting/builtins/language/objects.ts +2 -1
  272. package/src/scripting/builtins/language/state.ts +14 -7
  273. package/src/scripting/builtins/messages.ts +3 -3
  274. package/src/scripting/builtins/native-expressions.ts +3 -1
  275. package/src/scripting/builtins/native-messages.ts +17 -0
  276. package/src/scripting/builtins/native-threads.ts +7 -0
  277. package/src/scripting/builtins/payload.ts +121 -6
  278. package/src/scripting/builtins/resource-extras.ts +9 -2
  279. package/src/scripting/canvas-execution.ts +23 -0
  280. package/src/scripting/evaluator.ts +25 -9
  281. package/src/services/attachments.ts +6 -4
  282. package/src/services/canvas.ts +498 -0
  283. package/src/services/http.ts +26 -33
  284. package/src/services/resource-authorization.ts +37 -6
@@ -0,0 +1,273 @@
1
+ {
2
+ "suite": "rate-limits",
3
+ "date": "2026-10-28T20:09:25.493Z",
4
+ "node": "26.11.1",
5
+ "platform": "linux",
6
+ "arch": "x64",
7
+ "cpu": "AMD Ryzen 5 5625U with Radeon Graphics",
8
+ "gc": true,
9
+ "baselineCommit": "a227759f726420471ade044a3cf9600a6359a668",
10
+ "sourceHashes": {
11
+ "baselineImplementation": "6d5afbdbe611053c5da76aed249fd07b57619ef49ea8e6846436b37f7b66ec8a",
12
+ "currentDist": "3cabf7764c867207ab004c80715eed3da01851f4a3dc8d69473f6766a1d5f214",
13
+ "benchmark": "d83dedb37c79bceb79f34cbdef85c7d1cfa1e1e2177a93469a7f799f368b0b37"
14
+ },
15
+ "config": {
16
+ "samples": 15,
17
+ "normalIterations": 90000,
18
+ "loadedIterations": 1000,
19
+ "entries": 25000,
20
+ "warmup": 2000,
21
+ "normalClockStepMs": 0,
22
+ "loadedClockStepMs": 1000,
23
+ "cooldownMs": 1000000000000
24
+ },
25
+ "scope": "Local synthetic workloads; advancing the fake clock simulates sweep boundaries, not wall-clock throughput of a bot.",
26
+ "results": [
27
+ {
28
+ "name": "duplicate/same-tick",
29
+ "iterations": 90000,
30
+ "entries": 0,
31
+ "clockStepMs": 0,
32
+ "baseline": {
33
+ "samplesMs": [
34
+ 83.91935500000001,
35
+ 49.647148999999956,
36
+ 46.578907000000015,
37
+ 64.89664900000002,
38
+ 59.43875000000003,
39
+ 149.84541400000012,
40
+ 82.26912799999991,
41
+ 163.04352800000015,
42
+ 92.97964200000001,
43
+ 89.93167799999992,
44
+ 71.35797899999989,
45
+ 86.62120499999992,
46
+ 81.4883420000001,
47
+ 111.36963100000003,
48
+ 107.39576899999975
49
+ ],
50
+ "medianMs": 83.91935500000001,
51
+ "operationsPerSecond": 1006874.2467154231
52
+ },
53
+ "current": {
54
+ "samplesMs": [
55
+ 65.33013699999998,
56
+ 65.76777299999998,
57
+ 68.74577700000003,
58
+ 92.49239299999999,
59
+ 90.96641699999998,
60
+ 85.40715999999998,
61
+ 122.45374100000004,
62
+ 110.30693700000006,
63
+ 118.19198299999994,
64
+ 98.6882700000001,
65
+ 66.50318500000003,
66
+ 63.0386739999999,
67
+ 97.83453700000018,
68
+ 82.7485029999998,
69
+ 98.24705799999992
70
+ ],
71
+ "medianMs": 90.96641699999998,
72
+ "operationsPerSecond": 1017545.0813643936
73
+ },
74
+ "medianChangePercent": 8.397421548342422
75
+ },
76
+ {
77
+ "name": "cooldown/new-same-tick",
78
+ "iterations": 90000,
79
+ "entries": 0,
80
+ "clockStepMs": 0,
81
+ "baseline": {
82
+ "samplesMs": [
83
+ 76.26297700000032,
84
+ 105.23417800000016,
85
+ 68.56585300000006,
86
+ 65.65111699999989,
87
+ 61.85055000000011,
88
+ 75.65339099999983,
89
+ 54.1539359999997,
90
+ 81.72726899999998,
91
+ 61.59282799999983,
92
+ 98.07456600000023,
93
+ 71.76529000000028,
94
+ 56.5505949999997,
95
+ 46.12922999999955,
96
+ 55.48813400000017,
97
+ 63.09162400000059
98
+ ],
99
+ "medianMs": 65.65111699999989,
100
+ "operationsPerSecond": 1295844.6587036871
101
+ },
102
+ "current": {
103
+ "samplesMs": [
104
+ 81.51407000000017,
105
+ 63.96746699999994,
106
+ 75.52704499999982,
107
+ 82.4113339999999,
108
+ 57.64619800000037,
109
+ 63.558012999999846,
110
+ 71.92145200000004,
111
+ 78.87188400000014,
112
+ 69.16525200000069,
113
+ 59.12997499999983,
114
+ 68.18230799999947,
115
+ 66.30961599999955,
116
+ 54.86582400000043,
117
+ 53.728643000000375,
118
+ 70.16116799999963
119
+ ],
120
+ "medianMs": 68.18230799999947,
121
+ "operationsPerSecond": 1327485.5151196767
122
+ },
123
+ "medianChangePercent": 3.8555185588077467
124
+ },
125
+ {
126
+ "name": "cooldown/active-same-tick",
127
+ "iterations": 90000,
128
+ "entries": 1,
129
+ "clockStepMs": 0,
130
+ "baseline": {
131
+ "samplesMs": [
132
+ 3.773838000000069,
133
+ 7.557694999999512,
134
+ 2.920336000000134,
135
+ 12.369408000000476,
136
+ 5.040439999999762,
137
+ 7.573003000000426,
138
+ 2.8177550000000338,
139
+ 8.712698999999702,
140
+ 4.044573000000128,
141
+ 7.840102000000115,
142
+ 4.649129999999786,
143
+ 8.008205000000089,
144
+ 2.936566999999741,
145
+ 6.5322720000003756,
146
+ 3.3228470000003654
147
+ ],
148
+ "medianMs": 5.040439999999762,
149
+ "operationsPerSecond": 15323692.574036296
150
+ },
151
+ "current": {
152
+ "samplesMs": [
153
+ 4.566175999999359,
154
+ 5.374884000000748,
155
+ 2.831380000000536,
156
+ 4.21688500000073,
157
+ 3.600785999999971,
158
+ 4.88463000000047,
159
+ 4.648248999999851,
160
+ 7.02030300000024,
161
+ 3.1333429999995133,
162
+ 4.500643999999738,
163
+ 3.2256760000000213,
164
+ 3.909281000000192,
165
+ 2.5773169999993115,
166
+ 4.397060999999667,
167
+ 2.6126830000002883
168
+ ],
169
+ "medianMs": 4.21688500000073,
170
+ "operationsPerSecond": 21951470.080194835
171
+ },
172
+ "medianChangePercent": -16.338950567789144
173
+ },
174
+ {
175
+ "name": "duplicate/loaded-clock-steps",
176
+ "iterations": 1000,
177
+ "entries": 25000,
178
+ "clockStepMs": 1000,
179
+ "baseline": {
180
+ "samplesMs": [
181
+ 361.99505599999975,
182
+ 355.2460600000004,
183
+ 350.0663110000005,
184
+ 368.99913000000015,
185
+ 370.921969,
186
+ 406.34873999999945,
187
+ 430.5730600000006,
188
+ 374.76496899999984,
189
+ 347.26566300000013,
190
+ 352.3395070000006,
191
+ 338.9892290000007,
192
+ 314.69447000000036,
193
+ 303.4750060000006,
194
+ 297.1955549999984,
195
+ 285.50690699999905
196
+ ],
197
+ "medianMs": 352.3395070000006,
198
+ "operationsPerSecond": 2852.5886954870602
199
+ },
200
+ "current": {
201
+ "samplesMs": [
202
+ 0.9676440000002913,
203
+ 0.6776340000005803,
204
+ 0.6029939999998533,
205
+ 0.6880330000003596,
206
+ 0.8268820000002961,
207
+ 0.6795369999999821,
208
+ 0.5847809999995661,
209
+ 0.8071250000011787,
210
+ 0.8013640000008309,
211
+ 0.5698929999998654,
212
+ 0.3553920000013022,
213
+ 0.5569680000007793,
214
+ 0.5318719999995665,
215
+ 0.6296839999995427,
216
+ 0.43472099999962666
217
+ ],
218
+ "medianMs": 0.6296839999995427,
219
+ "operationsPerSecond": 1544079.7716897307
220
+ },
221
+ "medianChangePercent": -99.82128487226397
222
+ },
223
+ {
224
+ "name": "cooldown/loaded-clock-steps",
225
+ "iterations": 1000,
226
+ "entries": 25000,
227
+ "clockStepMs": 1000,
228
+ "baseline": {
229
+ "samplesMs": [
230
+ 306.9024509999999,
231
+ 319.3594240000002,
232
+ 305.9474820000014,
233
+ 312.7519620000003,
234
+ 316.2223560000002,
235
+ 349.3831030000001,
236
+ 327.42392800000016,
237
+ 315.6111180000007,
238
+ 332.80778199999986,
239
+ 359.2150520000014,
240
+ 474.99354700000004,
241
+ 500.54385999999977,
242
+ 749.4461710000032,
243
+ 687.014567000002,
244
+ 584.5453280000002
245
+ ],
246
+ "medianMs": 332.80778199999986,
247
+ "operationsPerSecond": 2403.011211041662
248
+ },
249
+ "current": {
250
+ "samplesMs": [
251
+ 0.09151100000053702,
252
+ 0.1589960000001156,
253
+ 0.1722410000002128,
254
+ 0.04131699999925331,
255
+ 0.09268299999894225,
256
+ 0.09826299999986077,
257
+ 0.10341300000072806,
258
+ 0.13637500000004366,
259
+ 0.16836399999920104,
260
+ 0.09549800000058895,
261
+ 0.1668809999991936,
262
+ 0.1653889999997773,
263
+ 0.23648099999991246,
264
+ 0.22697300000072573,
265
+ 0.21500100000048405
266
+ ],
267
+ "medianMs": 0.1589960000001156,
268
+ "operationsPerSecond": 6914398.820681487
269
+ },
270
+ "medianChangePercent": -99.95222587673742
271
+ }
272
+ ]
273
+ }
@@ -17,13 +17,13 @@ npm run music:build-plugin
17
17
  ```
18
18
 
19
19
  O script baixa o Lavalink 4.2.2 oficial, verifica seu SHA-256 e gera
20
- `bridges/lavalink/build/yuzuha-audio-0.1.7.jar`. Para usar uma cópia já baixada:
20
+ `bridges/lavalink/build/yuzuha-audio-0.1.8.jar`. Para usar uma cópia já baixada:
21
21
 
22
22
  ```sh
23
23
  YUZUHA_LAVALINK_JAR=/caminho/Lavalink.jar npm run music:build-plugin
24
24
  ```
25
25
 
26
- Copie apenas `yuzuha-audio-0.1.7.jar` para o diretório `plugins/` do seu Lavalink.
26
+ Copie apenas `yuzuha-audio-0.1.8.jar` para o diretório `plugins/` do seu Lavalink.
27
27
  Reinicie esse servidor. O [application.yml](application.yml) de exemplo usa
28
28
  `LAVALINK_PASSWORD` no ambiente, limita a saída a 128 conexões e desativa fontes
29
29
  de arquivos/HTTP. Ative os source managers e plugins de busca necessários ao bot.
@@ -0,0 +1,10 @@
1
+ import { CANVAS_LIMITS } from './domain/canvas.js';
2
+ import type { CanvasCreateOptions } from './domain/canvas.js';
3
+ import { CanvasService } from './services/canvas.js';
4
+ import type { CanvasBuilder, CanvasRuntimeOptions } from './services/canvas.js';
5
+ export declare function createCanvas(width: number, height: number, options?: CanvasCreateOptions & CanvasRuntimeOptions): CanvasBuilder;
6
+ export { CanvasService };
7
+ export type { CanvasBuilder, CanvasRuntimeOptions, CanvasHostOptions, CanvasSendOptions } from './services/canvas.js';
8
+ export type * from './domain/canvas.js';
9
+ export { CANVAS_LIMITS };
10
+ //# sourceMappingURL=canvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../src/canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAgB,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAmB,GAAG,oBAAyB,GACvD,aAAa,CAIf;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtH,mBAAmB,oBAAoB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/canvas.js ADDED
@@ -0,0 +1,11 @@
1
+ import { CANVAS_LIMITS } from './domain/canvas.js';
2
+ import { canvasRenderer } from './infrastructure/canvas/render.js';
3
+ import { CanvasService } from './services/canvas.js';
4
+ export function createCanvas(width, height, options = {}) {
5
+ const { scale, background, signal, http, assets, fonts, timeoutMs } = options;
6
+ const service = new CanvasService({ renderer: canvasRenderer, signal, http, assets, fonts, timeoutMs });
7
+ return service.create(width, height, { scale, background });
8
+ }
9
+ export { CanvasService };
10
+ export { CANVAS_LIMITS };
11
+ //# sourceMappingURL=canvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../src/canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,MAAc,EACd,UAAsD,EAAE;IAExD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACxG,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;AAGzB,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { CANVAS_LIMITS } from './domain/canvas.js';\nimport type { CanvasConfig, CanvasCreateOptions } from './domain/canvas.js';\nimport { canvasRenderer } from './infrastructure/canvas/render.js';\nimport { CanvasService } from './services/canvas.js';\nimport type { CanvasBuilder, CanvasRuntimeOptions } from './services/canvas.js';\n\nexport function createCanvas(\n width: number,\n height: number,\n options: CanvasCreateOptions & CanvasRuntimeOptions = {},\n): CanvasBuilder {\n const { scale, background, signal, http, assets, fonts, timeoutMs } = options;\n const service = new CanvasService({ renderer: canvasRenderer, signal, http, assets, fonts, timeoutMs });\n return service.create(width, height, { scale, background });\n}\n\nexport { CanvasService };\nexport type { CanvasBuilder, CanvasRuntimeOptions, CanvasHostOptions, CanvasSendOptions } from './services/canvas.js';\nexport type * from './domain/canvas.js';\nexport { CANVAS_LIMITS };\n"]}
@@ -1,3 +1,4 @@
1
+ import type { BotTemplate } from './bot-template-catalog.js';
1
2
  export declare const usage: string;
2
3
  export type CLIArguments = {
3
4
  action: 'help';
@@ -9,6 +10,7 @@ export type CLIArguments = {
9
10
  language: 'js' | 'ts';
10
11
  functions: boolean;
11
12
  local: boolean;
13
+ template?: BotTemplate;
12
14
  } | {
13
15
  action: 'functions';
14
16
  json: boolean;
@@ -40,6 +42,9 @@ export type CLIArguments = {
40
42
  action: 'check' | 'doctor';
41
43
  input?: string;
42
44
  json: boolean;
45
+ } | {
46
+ action: 'templates';
47
+ json: boolean;
43
48
  } | {
44
49
  action: 'editor';
45
50
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../../src/cli/arguments.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,KAAK,QAgBjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACjE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAChG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACrI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACpE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAChD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IACpG,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAChG;IAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC7D;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GACpB;IAAE,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAqF3D"}
1
+ {"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../../src/cli/arguments.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG7D,eAAO,MAAM,KAAK,QAmBjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACjE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,WAAW,CAAA;CAAE,GACxH;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACrI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACpE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAChD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IACpG,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAChG;IAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC7D;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GACpB;IAAE,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAkG3D"}
@@ -1,8 +1,10 @@
1
1
  import { YuzuhaError } from '../errors.js';
2
+ import { botTemplates, isBotTemplate } from './bot-template-catalog.js';
2
3
  import { NODE_REQUIREMENT, VERSION } from './version.js';
3
4
  export const usage = `Yuzuha ${VERSION}
4
5
 
5
- yuzuha init <diretório> [--js | --ts] [--functions] [--local] Cria um projeto de bot
6
+ yuzuha init <diretório> [--js | --ts] [--functions] [--local] [--template nome] Cria um projeto de bot
7
+ yuzuha templates [--json] Lista bases de bots e comandos
6
8
  yuzuha check [config ou diretório] [--json] Valida comandos sem login
7
9
  yuzuha functions [--json] [--category nome] [--search termo] Lista funções e assinaturas
8
10
  yuzuha lint <arquivo|diretório> [--json] [--catalog arquivo] Valida texto sem importar
@@ -14,6 +16,8 @@ yuzuha editor Mostra o caminho da extensão VS Code
14
16
  yuzuha run [config] Carrega .env e conecta
15
17
  yuzuha dev [config] Recarrega comandos ao editar
16
18
 
19
+ Bases: ${Object.keys(botTemplates).join(', ')}.
20
+
17
21
  Config padrão: yuzuha.config.ts ou yuzuha.config.js. Node ${NODE_REQUIREMENT}.
18
22
  init usa o pacote npm; --local vincula a instalação atual para desenvolvimento.
19
23
  `;
@@ -35,15 +39,36 @@ export function parseArguments(args) {
35
39
  fail();
36
40
  return { action };
37
41
  }
42
+ if (action === 'templates') {
43
+ if (rest.length > 1 || (rest.length === 1 && rest[0] !== '--json'))
44
+ fail();
45
+ return { action, json: rest[0] === '--json' };
46
+ }
38
47
  if (action === 'init') {
39
48
  const [directory, ...flags] = rest;
40
49
  if (!directory)
41
- return fail('Use init <diretório> [--js | --ts] [--functions] [--local].');
42
- if (directory.startsWith('-') || flags.some(flag => !['--js', '--ts', '--functions', '--local'].includes(flag))
43
- || new Set(flags).size !== flags.length || flags.filter(flag => flag === '--js' || flag === '--ts').length > 1) {
44
- fail('Use init <diretório> [--js | --ts] [--functions] [--local].');
50
+ return fail('Use init <diretório> [--js | --ts] [--functions] [--local] [--template nome].');
51
+ if (directory.startsWith('-'))
52
+ fail();
53
+ let language, functions = false, local = false, template;
54
+ for (let i = 0; i < flags.length; i++) {
55
+ const flag = flags[i];
56
+ if ((flag === '--js' || flag === '--ts') && language === undefined)
57
+ language = flag === '--js' ? 'js' : 'ts';
58
+ else if (flag === '--functions' && !functions)
59
+ functions = true;
60
+ else if (flag === '--local' && !local)
61
+ local = true;
62
+ else if (flag === '--template' && template === undefined) {
63
+ const value = flags[++i];
64
+ if (!isBotTemplate(value))
65
+ return fail(`Escolha --template ${Object.keys(botTemplates).join(' | ')}.`);
66
+ template = value;
67
+ }
68
+ else
69
+ fail();
45
70
  }
46
- return { action, directory, language: flags.includes('--js') ? 'js' : 'ts', functions: flags.includes('--functions'), local: flags.includes('--local') };
71
+ return { action, directory, language: language ?? 'ts', functions, local, ...(template ? { template } : {}) };
47
72
  }
48
73
  if (action === 'functions') {
49
74
  let json = false, category, search, catalog = false, config, pluginsOnly = false;
@@ -1 +1 @@
1
- {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../src/cli/arguments.ts"],"names":[],"mappings":"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","sourcesContent":["import { YuzuhaError } from '../errors.js';\nimport { NODE_REQUIREMENT, VERSION } from './version.js';\n\nexport const usage = `Yuzuha ${VERSION}\n\nyuzuha init <diretório> [--js | --ts] [--functions] [--local] Cria um projeto de bot\nyuzuha check [config ou diretório] [--json] Valida comandos sem login\nyuzuha functions [--json] [--category nome] [--search termo] Lista funções e assinaturas\nyuzuha lint <arquivo|diretório> [--json] [--catalog arquivo] Valida texto sem importar\nyuzuha test <cenários.json> [--json] Executa cenários offline\nyuzuha data <stats|cleanup|backup|restore> <store> [opções] Manutenção offline\nyuzuha functions --catalog [--config arquivo] Exporta catálogo JSON\nyuzuha doctor [config] [--json] Diagnostica ambiente e configuração sem login\nyuzuha editor Mostra o caminho da extensão VS Code\nyuzuha run [config] Carrega .env e conecta\nyuzuha dev [config] Recarrega comandos ao editar\n\nConfig padrão: yuzuha.config.ts ou yuzuha.config.js. Node ${NODE_REQUIREMENT}.\ninit usa o pacote npm; --local vincula a instalação atual para desenvolvimento.\n`;\n\nexport type CLIArguments = { action: 'help' } | { action: 'version' }\n | { action: 'init'; directory: string; language: 'js' | 'ts'; functions: boolean; local: boolean }\n | { action: 'functions'; json: boolean; category?: string; search?: string; catalog?: boolean; config?: string; pluginsOnly?: boolean }\n | { action: 'lint'; input: string; json: boolean; catalogs: string[] }\n | { action: 'test'; input: string; json: boolean }\n | { action: 'data'; operation: 'stats' | 'cleanup' | 'backup' | 'restore'; input: string; json: boolean;\n limit?: number; cursor?: string; file?: string; policy?: 'replace' | 'merge'; apply: boolean }\n | { action: 'check' | 'doctor'; input?: string; json: boolean }\n | { action: 'editor' }\n | { action: 'run' | 'dev'; input?: string };\n\nexport function parseArguments(args: string[]): CLIArguments {\n const [action, ...rest] = args;\n const fail = (message = 'Argumentos inválidos.'): never => { throw new YuzuhaError('USAGE', `${message}\\n${usage}`); };\n if (!action || action === 'help' || action === '--help') {\n if (rest.length) fail();\n return { action: 'help' };\n }\n if (action === '--version') { if (rest.length) fail(); return { action: 'version' }; }\n if (action === 'editor') { if (rest.length) fail(); return { action }; }\n if (action === 'init') {\n const [directory, ...flags] = rest;\n if (!directory) return fail('Use init <diretório> [--js | --ts] [--functions] [--local].');\n if (directory.startsWith('-') || flags.some(flag => !['--js', '--ts', '--functions', '--local'].includes(flag))\n || new Set(flags).size !== flags.length || flags.filter(flag => flag === '--js' || flag === '--ts').length > 1) {\n fail('Use init <diretório> [--js | --ts] [--functions] [--local].');\n }\n return { action, directory, language: flags.includes('--js') ? 'js' : 'ts', functions: flags.includes('--functions'), local: flags.includes('--local') };\n }\n if (action === 'functions') {\n let json = false, category: string | undefined, search: string | undefined, catalog = false, config: string | undefined, pluginsOnly = false;\n for (let i = 0; i < rest.length; i++) {\n if (rest[i] === '--json' && !json) json = true;\n else if (rest[i] === '--catalog' && !catalog) catalog = true;\n else if (rest[i] === '--plugins-only' && !pluginsOnly) pluginsOnly = true;\n else if (rest[i] === '--category' && !category && rest[i + 1] && !rest[i + 1]!.startsWith('-')) category = rest[++i];\n else if (rest[i] === '--search' && search === undefined && rest[i + 1] && !rest[i + 1]!.startsWith('-')) {\n search = rest[++i]!.trim().replace(/^\\$/, '').trim();\n if (!search) fail('--search exige um termo não vazio.');\n } else if (rest[i] === '--config' && !config && rest[i + 1] && !rest[i + 1]!.startsWith('-')) config = rest[++i];\n else fail();\n }\n if (config && !catalog) fail('--config exige functions --catalog.');\n if (pluginsOnly && (!catalog || !config)) fail('--plugins-only exige --catalog e --config explícito.');\n return { action, json, category, ...(search === undefined ? {} : { search }), ...(catalog ? { catalog } : {}), ...(config ? { config } : {}), ...(pluginsOnly ? { pluginsOnly } : {}) };\n }\n if (action === 'lint' || action === 'test') {\n let input: string | undefined, json = false;\n const catalogs: string[] = [];\n for (let i = 0; i < rest.length; i++) {\n const value = rest[i]!;\n if (value === '--json' && !json) json = true;\n else if (action === 'lint' && value === '--catalog' && rest[i + 1] && !rest[i + 1]!.startsWith('-')) catalogs.push(rest[++i]!);\n else if (!value.startsWith('-') && !input) input = value;\n else fail();\n }\n if (!input) fail(`Use ${action} <arquivo ou diretório>.`);\n return action === 'lint' ? { action, input: input!, json, catalogs } : { action, input: input!, json };\n }\n if (action === 'data') {\n const [operation, input, ...flags] = rest;\n if (!['stats', 'cleanup', 'backup', 'restore'].includes(operation ?? '') || !input || input.startsWith('-')) fail('Use data <stats|cleanup|backup|restore> <store>.');\n let json = false, apply = false, limit: number | undefined, cursor: string | undefined, file: string | undefined, policy: 'replace' | 'merge' | undefined;\n for (let i = 0; i < flags.length; i++) {\n const flag = flags[i]!;\n const next = () => {\n const value = flags[++i];\n if (value === undefined || value.startsWith('--')) return fail('Opção exige um valor.');\n return value;\n };\n if (flag === '--json' && !json) json = true;\n else if (flag === '--apply' && operation === 'restore' && !apply) apply = true;\n else if (flag === '--limit' && operation === 'cleanup' && limit === undefined) {\n const raw = next(); limit = Number(raw);\n if (!/^\\d+$/.test(raw) || !Number.isSafeInteger(limit) || limit < 1 || limit > 10000) fail('Limite deve estar entre 1 e 10000.');\n } else if (flag === '--cursor' && operation === 'cleanup' && cursor === undefined) cursor = next();\n else if (flag === '--file' && ['backup', 'restore'].includes(operation!) && file === undefined) file = next();\n else if (flag === '--policy' && operation === 'restore' && policy === undefined) {\n const value = next(); if (value !== 'replace' && value !== 'merge') fail('Política deve ser replace ou merge.'); policy = value as 'replace' | 'merge';\n } else fail();\n }\n if (operation === 'restore' && !file) fail('Restauração exige --file <backup.json>.');\n return { action, operation: operation as 'stats' | 'cleanup' | 'backup' | 'restore', input: input!, json, apply,\n ...(limit === undefined ? {} : { limit }), ...(cursor === undefined ? {} : { cursor }),\n ...(file === undefined ? {} : { file }), ...(policy === undefined ? {} : { policy }) };\n }\n if (action === 'check' || action === 'doctor' || action === 'run' || action === 'dev') {\n let input: string | undefined, json = false;\n for (const value of rest) {\n if ((action === 'check' || action === 'doctor') && value === '--json' && !json) json = true;\n else if (!value.startsWith('-') && !input) input = value;\n else fail();\n }\n return action === 'check' || action === 'doctor' ? { action, input, json } : { action, input };\n }\n return fail(`Comando desconhecido: ${action}.`);\n}\n"]}
1
+ {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../src/cli/arguments.ts"],"names":[],"mappings":"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","sourcesContent":["import { YuzuhaError } from '../errors.js';\nimport { botTemplates, isBotTemplate } from './bot-template-catalog.js';\nimport type { BotTemplate } from './bot-template-catalog.js';\nimport { NODE_REQUIREMENT, VERSION } from './version.js';\n\nexport const usage = `Yuzuha ${VERSION}\n\nyuzuha init <diretório> [--js | --ts] [--functions] [--local] [--template nome] Cria um projeto de bot\nyuzuha templates [--json] Lista bases de bots e comandos\nyuzuha check [config ou diretório] [--json] Valida comandos sem login\nyuzuha functions [--json] [--category nome] [--search termo] Lista funções e assinaturas\nyuzuha lint <arquivo|diretório> [--json] [--catalog arquivo] Valida texto sem importar\nyuzuha test <cenários.json> [--json] Executa cenários offline\nyuzuha data <stats|cleanup|backup|restore> <store> [opções] Manutenção offline\nyuzuha functions --catalog [--config arquivo] Exporta catálogo JSON\nyuzuha doctor [config] [--json] Diagnostica ambiente e configuração sem login\nyuzuha editor Mostra o caminho da extensão VS Code\nyuzuha run [config] Carrega .env e conecta\nyuzuha dev [config] Recarrega comandos ao editar\n\nBases: ${Object.keys(botTemplates).join(', ')}.\n\nConfig padrão: yuzuha.config.ts ou yuzuha.config.js. Node ${NODE_REQUIREMENT}.\ninit usa o pacote npm; --local vincula a instalação atual para desenvolvimento.\n`;\n\nexport type CLIArguments = { action: 'help' } | { action: 'version' }\n | { action: 'init'; directory: string; language: 'js' | 'ts'; functions: boolean; local: boolean; template?: BotTemplate }\n | { action: 'functions'; json: boolean; category?: string; search?: string; catalog?: boolean; config?: string; pluginsOnly?: boolean }\n | { action: 'lint'; input: string; json: boolean; catalogs: string[] }\n | { action: 'test'; input: string; json: boolean }\n | { action: 'data'; operation: 'stats' | 'cleanup' | 'backup' | 'restore'; input: string; json: boolean;\n limit?: number; cursor?: string; file?: string; policy?: 'replace' | 'merge'; apply: boolean }\n | { action: 'check' | 'doctor'; input?: string; json: boolean }\n | { action: 'templates'; json: boolean }\n | { action: 'editor' }\n | { action: 'run' | 'dev'; input?: string };\n\nexport function parseArguments(args: string[]): CLIArguments {\n const [action, ...rest] = args;\n const fail = (message = 'Argumentos inválidos.'): never => { throw new YuzuhaError('USAGE', `${message}\\n${usage}`); };\n if (!action || action === 'help' || action === '--help') {\n if (rest.length) fail();\n return { action: 'help' };\n }\n if (action === '--version') { if (rest.length) fail(); return { action: 'version' }; }\n if (action === 'editor') { if (rest.length) fail(); return { action }; }\n if (action === 'templates') {\n if (rest.length > 1 || (rest.length === 1 && rest[0] !== '--json')) fail();\n return { action, json: rest[0] === '--json' };\n }\n if (action === 'init') {\n const [directory, ...flags] = rest;\n if (!directory) return fail('Use init <diretório> [--js | --ts] [--functions] [--local] [--template nome].');\n if (directory.startsWith('-')) fail();\n let language: 'js' | 'ts' | undefined, functions = false, local = false, template: BotTemplate | undefined;\n for (let i = 0; i < flags.length; i++) {\n const flag = flags[i];\n if ((flag === '--js' || flag === '--ts') && language === undefined) language = flag === '--js' ? 'js' : 'ts';\n else if (flag === '--functions' && !functions) functions = true;\n else if (flag === '--local' && !local) local = true;\n else if (flag === '--template' && template === undefined) {\n const value = flags[++i];\n if (!isBotTemplate(value)) return fail(`Escolha --template ${Object.keys(botTemplates).join(' | ')}.`);\n template = value;\n } else fail();\n }\n return { action, directory, language: language ?? 'ts', functions, local, ...(template ? { template } : {}) };\n }\n if (action === 'functions') {\n let json = false, category: string | undefined, search: string | undefined, catalog = false, config: string | undefined, pluginsOnly = false;\n for (let i = 0; i < rest.length; i++) {\n if (rest[i] === '--json' && !json) json = true;\n else if (rest[i] === '--catalog' && !catalog) catalog = true;\n else if (rest[i] === '--plugins-only' && !pluginsOnly) pluginsOnly = true;\n else if (rest[i] === '--category' && !category && rest[i + 1] && !rest[i + 1]!.startsWith('-')) category = rest[++i];\n else if (rest[i] === '--search' && search === undefined && rest[i + 1] && !rest[i + 1]!.startsWith('-')) {\n search = rest[++i]!.trim().replace(/^\\$/, '').trim();\n if (!search) fail('--search exige um termo não vazio.');\n } else if (rest[i] === '--config' && !config && rest[i + 1] && !rest[i + 1]!.startsWith('-')) config = rest[++i];\n else fail();\n }\n if (config && !catalog) fail('--config exige functions --catalog.');\n if (pluginsOnly && (!catalog || !config)) fail('--plugins-only exige --catalog e --config explícito.');\n return { action, json, category, ...(search === undefined ? {} : { search }), ...(catalog ? { catalog } : {}), ...(config ? { config } : {}), ...(pluginsOnly ? { pluginsOnly } : {}) };\n }\n if (action === 'lint' || action === 'test') {\n let input: string | undefined, json = false;\n const catalogs: string[] = [];\n for (let i = 0; i < rest.length; i++) {\n const value = rest[i]!;\n if (value === '--json' && !json) json = true;\n else if (action === 'lint' && value === '--catalog' && rest[i + 1] && !rest[i + 1]!.startsWith('-')) catalogs.push(rest[++i]!);\n else if (!value.startsWith('-') && !input) input = value;\n else fail();\n }\n if (!input) fail(`Use ${action} <arquivo ou diretório>.`);\n return action === 'lint' ? { action, input: input!, json, catalogs } : { action, input: input!, json };\n }\n if (action === 'data') {\n const [operation, input, ...flags] = rest;\n if (!['stats', 'cleanup', 'backup', 'restore'].includes(operation ?? '') || !input || input.startsWith('-')) fail('Use data <stats|cleanup|backup|restore> <store>.');\n let json = false, apply = false, limit: number | undefined, cursor: string | undefined, file: string | undefined, policy: 'replace' | 'merge' | undefined;\n for (let i = 0; i < flags.length; i++) {\n const flag = flags[i]!;\n const next = () => {\n const value = flags[++i];\n if (value === undefined || value.startsWith('--')) return fail('Opção exige um valor.');\n return value;\n };\n if (flag === '--json' && !json) json = true;\n else if (flag === '--apply' && operation === 'restore' && !apply) apply = true;\n else if (flag === '--limit' && operation === 'cleanup' && limit === undefined) {\n const raw = next(); limit = Number(raw);\n if (!/^\\d+$/.test(raw) || !Number.isSafeInteger(limit) || limit < 1 || limit > 10000) fail('Limite deve estar entre 1 e 10000.');\n } else if (flag === '--cursor' && operation === 'cleanup' && cursor === undefined) cursor = next();\n else if (flag === '--file' && ['backup', 'restore'].includes(operation!) && file === undefined) file = next();\n else if (flag === '--policy' && operation === 'restore' && policy === undefined) {\n const value = next(); if (value !== 'replace' && value !== 'merge') fail('Política deve ser replace ou merge.'); policy = value as 'replace' | 'merge';\n } else fail();\n }\n if (operation === 'restore' && !file) fail('Restauração exige --file <backup.json>.');\n return { action, operation: operation as 'stats' | 'cleanup' | 'backup' | 'restore', input: input!, json, apply,\n ...(limit === undefined ? {} : { limit }), ...(cursor === undefined ? {} : { cursor }),\n ...(file === undefined ? {} : { file }), ...(policy === undefined ? {} : { policy }) };\n }\n if (action === 'check' || action === 'doctor' || action === 'run' || action === 'dev') {\n let input: string | undefined, json = false;\n for (const value of rest) {\n if ((action === 'check' || action === 'doctor') && value === '--json' && !json) json = true;\n else if (!value.startsWith('-') && !input) input = value;\n else fail();\n }\n return action === 'check' || action === 'doctor' ? { action, input, json } : { action, input };\n }\n return fail(`Comando desconhecido: ${action}.`);\n}\n"]}
@@ -0,0 +1,33 @@
1
+ export declare const botTemplates: {
2
+ readonly simple: {
3
+ readonly description: "Bot pequeno com ajuda, informações, avatar e ping.";
4
+ readonly paths: string[];
5
+ };
6
+ readonly multifunctional: {
7
+ readonly description: "Todos os conjuntos: moderação, comunidade, economia, diversão e utilidades.";
8
+ readonly paths: readonly string[];
9
+ };
10
+ readonly moderation: {
11
+ readonly description: "Ban, kick, timeout, unban e consulta de casos com autorização compartilhada.";
12
+ readonly paths: readonly string[];
13
+ };
14
+ readonly community: {
15
+ readonly description: "Regras configuráveis, sugestões e enquetes com votos persistentes por canal.";
16
+ readonly paths: readonly string[];
17
+ };
18
+ readonly economy: {
19
+ readonly description: "Moedas virtuais por servidor: saldo, diário, trabalho e transferências atômicas.";
20
+ readonly paths: readonly string[];
21
+ };
22
+ readonly entertainment: {
23
+ readonly description: "Dados, moeda, escolha entre opções e bola 8.";
24
+ readonly paths: readonly string[];
25
+ };
26
+ readonly utility: {
27
+ readonly description: "Informações, notas pessoais com subcomandos e conversão de datas para UTC.";
28
+ readonly paths: readonly string[];
29
+ };
30
+ };
31
+ export type BotTemplate = keyof typeof botTemplates;
32
+ export declare function isBotTemplate(value: unknown): value is BotTemplate;
33
+ //# sourceMappingURL=bot-template-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-template-catalog.d.ts","sourceRoot":"","sources":["../../src/cli/bot-template-catalog.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQf,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,YAAY,CAAC;AAEpD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE"}
@@ -0,0 +1,20 @@
1
+ const general = ['general/ping', 'general/help', 'general/about', 'utilities/avatar'];
2
+ const information = ['utilities/profile', 'utilities/server'];
3
+ const moderation = ['moderation/ban', 'moderation/kick', 'moderation/timeout', 'moderation/unban', 'moderation/case'];
4
+ const community = ['community/rules', 'community/suggestions', 'community/poll'];
5
+ const economy = ['economy/balance', 'economy/daily', 'economy/work', 'economy/pay'];
6
+ const fun = ['fun/dice', 'fun/coin', 'fun/choose', 'fun/eightball'];
7
+ const utilities = ['utilities/notes', 'utilities/timestamp'];
8
+ export const botTemplates = {
9
+ simple: { description: 'Bot pequeno com ajuda, informações, avatar e ping.', paths: general },
10
+ multifunctional: { description: 'Todos os conjuntos: moderação, comunidade, economia, diversão e utilidades.', paths: [...general, ...information, ...moderation, ...community, ...economy, ...fun, ...utilities] },
11
+ moderation: { description: 'Ban, kick, timeout, unban e consulta de casos com autorização compartilhada.', paths: [...general, ...information, ...moderation] },
12
+ community: { description: 'Regras configuráveis, sugestões e enquetes com votos persistentes por canal.', paths: [...general, ...information, ...community] },
13
+ economy: { description: 'Moedas virtuais por servidor: saldo, diário, trabalho e transferências atômicas.', paths: [...general, ...information, ...economy] },
14
+ entertainment: { description: 'Dados, moeda, escolha entre opções e bola 8.', paths: [...general, ...information, ...fun] },
15
+ utility: { description: 'Informações, notas pessoais com subcomandos e conversão de datas para UTC.', paths: [...general, ...information, ...utilities] },
16
+ };
17
+ export function isBotTemplate(value) {
18
+ return typeof value === 'string' && Object.hasOwn(botTemplates, value);
19
+ }
20
+ //# sourceMappingURL=bot-template-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-template-catalog.js","sourceRoot":"","sources":["../../src/cli/bot-template-catalog.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;AACtF,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;AAC9D,MAAM,UAAU,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AACtH,MAAM,SAAS,GAAG,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,gBAAgB,CAAC,CAAC;AACjF,MAAM,OAAO,GAAG,CAAC,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;AACpF,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;AACpE,MAAM,SAAS,GAAG,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE,EAAE,WAAW,EAAE,oDAAoD,EAAE,KAAK,EAAE,OAAO,EAAE;IAC7F,eAAe,EAAE,EAAE,WAAW,EAAE,6EAA6E,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,SAAS,CAAC,EAAE;IACnN,UAAU,EAAE,EAAE,WAAW,EAAE,8EAA8E,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,UAAU,CAAC,EAAE;IAC/J,SAAS,EAAE,EAAE,WAAW,EAAE,8EAA8E,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC,EAAE;IAC7J,OAAO,EAAE,EAAE,WAAW,EAAE,kFAAkF,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,EAAE;IAC7J,aAAa,EAAE,EAAE,WAAW,EAAE,8CAA8C,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,GAAG,CAAC,EAAE;IAC3H,OAAO,EAAE,EAAE,WAAW,EAAE,4EAA4E,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC,EAAE;CACjJ,CAAC;AAIX,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACzE,CAAC","sourcesContent":["const general = ['general/ping', 'general/help', 'general/about', 'utilities/avatar'];\nconst information = ['utilities/profile', 'utilities/server'];\nconst moderation = ['moderation/ban', 'moderation/kick', 'moderation/timeout', 'moderation/unban', 'moderation/case'];\nconst community = ['community/rules', 'community/suggestions', 'community/poll'];\nconst economy = ['economy/balance', 'economy/daily', 'economy/work', 'economy/pay'];\nconst fun = ['fun/dice', 'fun/coin', 'fun/choose', 'fun/eightball'];\nconst utilities = ['utilities/notes', 'utilities/timestamp'];\n\nexport const botTemplates = {\n simple: { description: 'Bot pequeno com ajuda, informações, avatar e ping.', paths: general },\n multifunctional: { description: 'Todos os conjuntos: moderação, comunidade, economia, diversão e utilidades.', paths: [...general, ...information, ...moderation, ...community, ...economy, ...fun, ...utilities] },\n moderation: { description: 'Ban, kick, timeout, unban e consulta de casos com autorização compartilhada.', paths: [...general, ...information, ...moderation] },\n community: { description: 'Regras configuráveis, sugestões e enquetes com votos persistentes por canal.', paths: [...general, ...information, ...community] },\n economy: { description: 'Moedas virtuais por servidor: saldo, diário, trabalho e transferências atômicas.', paths: [...general, ...information, ...economy] },\n entertainment: { description: 'Dados, moeda, escolha entre opções e bola 8.', paths: [...general, ...information, ...fun] },\n utility: { description: 'Informações, notas pessoais com subcomandos e conversão de datas para UTC.', paths: [...general, ...information, ...utilities] },\n} as const;\n\nexport type BotTemplate = keyof typeof botTemplates;\n\nexport function isBotTemplate(value: unknown): value is BotTemplate {\n return typeof value === 'string' && Object.hasOwn(botTemplates, value);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const extraCommands: Record<string, string>;
2
+ //# sourceMappingURL=bot-template-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-template-commands.d.ts","sourceRoot":"","sources":["../../src/cli/bot-template-commands.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoWhD,CAAC"}