ysk-omni 1.0.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 (1140) hide show
  1. package/.env.example +80 -0
  2. package/LICENSE +21 -0
  3. package/README-ZH.md +51 -0
  4. package/README.md +41 -0
  5. package/dist/app.d.ts +3 -0
  6. package/dist/app.d.ts.map +1 -0
  7. package/dist/app.js +277 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/catalog/curated.d.ts +14 -0
  10. package/dist/catalog/curated.d.ts.map +1 -0
  11. package/dist/catalog/curated.js +30 -0
  12. package/dist/catalog/curated.js.map +1 -0
  13. package/dist/cli/commands/admin-otp.d.ts +10 -0
  14. package/dist/cli/commands/admin-otp.d.ts.map +1 -0
  15. package/dist/cli/commands/admin-otp.js +82 -0
  16. package/dist/cli/commands/admin-otp.js.map +1 -0
  17. package/dist/cli/commands/admin-panel.d.ts +13 -0
  18. package/dist/cli/commands/admin-panel.d.ts.map +1 -0
  19. package/dist/cli/commands/admin-panel.js +98 -0
  20. package/dist/cli/commands/admin-panel.js.map +1 -0
  21. package/dist/cli/commands/admin-sessions.d.ts +6 -0
  22. package/dist/cli/commands/admin-sessions.d.ts.map +1 -0
  23. package/dist/cli/commands/admin-sessions.js +62 -0
  24. package/dist/cli/commands/admin-sessions.js.map +1 -0
  25. package/dist/cli/commands/api-features.d.ts +8 -0
  26. package/dist/cli/commands/api-features.d.ts.map +1 -0
  27. package/dist/cli/commands/api-features.js +136 -0
  28. package/dist/cli/commands/api-features.js.map +1 -0
  29. package/dist/cli/commands/audit.d.ts +7 -0
  30. package/dist/cli/commands/audit.d.ts.map +1 -0
  31. package/dist/cli/commands/audit.js +48 -0
  32. package/dist/cli/commands/audit.js.map +1 -0
  33. package/dist/cli/commands/catalog.d.ts +26 -0
  34. package/dist/cli/commands/catalog.d.ts.map +1 -0
  35. package/dist/cli/commands/catalog.js +223 -0
  36. package/dist/cli/commands/catalog.js.map +1 -0
  37. package/dist/cli/commands/chats.d.ts +10 -0
  38. package/dist/cli/commands/chats.d.ts.map +1 -0
  39. package/dist/cli/commands/chats.js +97 -0
  40. package/dist/cli/commands/chats.js.map +1 -0
  41. package/dist/cli/commands/conversations.d.ts +10 -0
  42. package/dist/cli/commands/conversations.d.ts.map +1 -0
  43. package/dist/cli/commands/conversations.js +68 -0
  44. package/dist/cli/commands/conversations.js.map +1 -0
  45. package/dist/cli/commands/ddos.d.ts +18 -0
  46. package/dist/cli/commands/ddos.d.ts.map +1 -0
  47. package/dist/cli/commands/ddos.js +298 -0
  48. package/dist/cli/commands/ddos.js.map +1 -0
  49. package/dist/cli/commands/docs.d.ts +13 -0
  50. package/dist/cli/commands/docs.d.ts.map +1 -0
  51. package/dist/cli/commands/docs.js +104 -0
  52. package/dist/cli/commands/docs.js.map +1 -0
  53. package/dist/cli/commands/doctor.d.ts +6 -0
  54. package/dist/cli/commands/doctor.d.ts.map +1 -0
  55. package/dist/cli/commands/doctor.js +207 -0
  56. package/dist/cli/commands/doctor.js.map +1 -0
  57. package/dist/cli/commands/key.d.ts +42 -0
  58. package/dist/cli/commands/key.d.ts.map +1 -0
  59. package/dist/cli/commands/key.js +192 -0
  60. package/dist/cli/commands/key.js.map +1 -0
  61. package/dist/cli/commands/logs.d.ts +19 -0
  62. package/dist/cli/commands/logs.d.ts.map +1 -0
  63. package/dist/cli/commands/logs.js +104 -0
  64. package/dist/cli/commands/logs.js.map +1 -0
  65. package/dist/cli/commands/migrate.d.ts +5 -0
  66. package/dist/cli/commands/migrate.d.ts.map +1 -0
  67. package/dist/cli/commands/migrate.js +25 -0
  68. package/dist/cli/commands/migrate.js.map +1 -0
  69. package/dist/cli/commands/models.d.ts +5 -0
  70. package/dist/cli/commands/models.d.ts.map +1 -0
  71. package/dist/cli/commands/models.js +68 -0
  72. package/dist/cli/commands/models.js.map +1 -0
  73. package/dist/cli/commands/open.d.ts +7 -0
  74. package/dist/cli/commands/open.d.ts.map +1 -0
  75. package/dist/cli/commands/open.js +24 -0
  76. package/dist/cli/commands/open.js.map +1 -0
  77. package/dist/cli/commands/queue.d.ts +33 -0
  78. package/dist/cli/commands/queue.d.ts.map +1 -0
  79. package/dist/cli/commands/queue.js +467 -0
  80. package/dist/cli/commands/queue.js.map +1 -0
  81. package/dist/cli/commands/restart.d.ts +8 -0
  82. package/dist/cli/commands/restart.d.ts.map +1 -0
  83. package/dist/cli/commands/restart.js +36 -0
  84. package/dist/cli/commands/restart.js.map +1 -0
  85. package/dist/cli/commands/runtimes.d.ts +9 -0
  86. package/dist/cli/commands/runtimes.d.ts.map +1 -0
  87. package/dist/cli/commands/runtimes.js +87 -0
  88. package/dist/cli/commands/runtimes.js.map +1 -0
  89. package/dist/cli/commands/seed.d.ts +5 -0
  90. package/dist/cli/commands/seed.d.ts.map +1 -0
  91. package/dist/cli/commands/seed.js +22 -0
  92. package/dist/cli/commands/seed.js.map +1 -0
  93. package/dist/cli/commands/settings.d.ts +13 -0
  94. package/dist/cli/commands/settings.d.ts.map +1 -0
  95. package/dist/cli/commands/settings.js +182 -0
  96. package/dist/cli/commands/settings.js.map +1 -0
  97. package/dist/cli/commands/setup.d.ts +6 -0
  98. package/dist/cli/commands/setup.d.ts.map +1 -0
  99. package/dist/cli/commands/setup.js +70 -0
  100. package/dist/cli/commands/setup.js.map +1 -0
  101. package/dist/cli/commands/start.d.ts +9 -0
  102. package/dist/cli/commands/start.d.ts.map +1 -0
  103. package/dist/cli/commands/start.js +140 -0
  104. package/dist/cli/commands/start.js.map +1 -0
  105. package/dist/cli/commands/stats.d.ts +3 -0
  106. package/dist/cli/commands/stats.d.ts.map +1 -0
  107. package/dist/cli/commands/stats.js +83 -0
  108. package/dist/cli/commands/stats.js.map +1 -0
  109. package/dist/cli/commands/status.d.ts +6 -0
  110. package/dist/cli/commands/status.d.ts.map +1 -0
  111. package/dist/cli/commands/status.js +70 -0
  112. package/dist/cli/commands/status.js.map +1 -0
  113. package/dist/cli/commands/stop.d.ts +11 -0
  114. package/dist/cli/commands/stop.d.ts.map +1 -0
  115. package/dist/cli/commands/stop.js +51 -0
  116. package/dist/cli/commands/stop.js.map +1 -0
  117. package/dist/cli/commands/update.d.ts +9 -0
  118. package/dist/cli/commands/update.d.ts.map +1 -0
  119. package/dist/cli/commands/update.js +182 -0
  120. package/dist/cli/commands/update.js.map +1 -0
  121. package/dist/cli/commands/version.d.ts +2 -0
  122. package/dist/cli/commands/version.d.ts.map +1 -0
  123. package/dist/cli/commands/version.js +16 -0
  124. package/dist/cli/commands/version.js.map +1 -0
  125. package/dist/cli/index.d.ts +3 -0
  126. package/dist/cli/index.d.ts.map +1 -0
  127. package/dist/cli/index.js +835 -0
  128. package/dist/cli/index.js.map +1 -0
  129. package/dist/cli/lib/auto-migrate.d.ts +14 -0
  130. package/dist/cli/lib/auto-migrate.d.ts.map +1 -0
  131. package/dist/cli/lib/auto-migrate.js +42 -0
  132. package/dist/cli/lib/auto-migrate.js.map +1 -0
  133. package/dist/cli/lib/db-keys.d.ts +51 -0
  134. package/dist/cli/lib/db-keys.d.ts.map +1 -0
  135. package/dist/cli/lib/db-keys.js +207 -0
  136. package/dist/cli/lib/db-keys.js.map +1 -0
  137. package/dist/cli/lib/env-file.d.ts +14 -0
  138. package/dist/cli/lib/env-file.d.ts.map +1 -0
  139. package/dist/cli/lib/env-file.js +143 -0
  140. package/dist/cli/lib/env-file.js.map +1 -0
  141. package/dist/cli/lib/paths.d.ts +27 -0
  142. package/dist/cli/lib/paths.d.ts.map +1 -0
  143. package/dist/cli/lib/paths.js +87 -0
  144. package/dist/cli/lib/paths.js.map +1 -0
  145. package/dist/cli/lib/pm2-runner.d.ts +14 -0
  146. package/dist/cli/lib/pm2-runner.d.ts.map +1 -0
  147. package/dist/cli/lib/pm2-runner.js +179 -0
  148. package/dist/cli/lib/pm2-runner.js.map +1 -0
  149. package/dist/cli/lib/print-table.d.ts +3 -0
  150. package/dist/cli/lib/print-table.d.ts.map +1 -0
  151. package/dist/cli/lib/print-table.js +29 -0
  152. package/dist/cli/lib/print-table.js.map +1 -0
  153. package/dist/cli/lib/print.d.ts +10 -0
  154. package/dist/cli/lib/print.d.ts.map +1 -0
  155. package/dist/cli/lib/print.js +28 -0
  156. package/dist/cli/lib/print.js.map +1 -0
  157. package/dist/cli/lib/process-mgr.d.ts +23 -0
  158. package/dist/cli/lib/process-mgr.d.ts.map +1 -0
  159. package/dist/cli/lib/process-mgr.js +207 -0
  160. package/dist/cli/lib/process-mgr.js.map +1 -0
  161. package/dist/cli/lib/run-prisma.d.ts +13 -0
  162. package/dist/cli/lib/run-prisma.d.ts.map +1 -0
  163. package/dist/cli/lib/run-prisma.js +99 -0
  164. package/dist/cli/lib/run-prisma.js.map +1 -0
  165. package/dist/cli/lib/runner-info.d.ts +20 -0
  166. package/dist/cli/lib/runner-info.d.ts.map +1 -0
  167. package/dist/cli/lib/runner-info.js +120 -0
  168. package/dist/cli/lib/runner-info.js.map +1 -0
  169. package/dist/cli/lib/runtime-context.d.ts +23 -0
  170. package/dist/cli/lib/runtime-context.d.ts.map +1 -0
  171. package/dist/cli/lib/runtime-context.js +60 -0
  172. package/dist/cli/lib/runtime-context.js.map +1 -0
  173. package/dist/cli/lib/seed-admin.d.ts +17 -0
  174. package/dist/cli/lib/seed-admin.d.ts.map +1 -0
  175. package/dist/cli/lib/seed-admin.js +80 -0
  176. package/dist/cli/lib/seed-admin.js.map +1 -0
  177. package/dist/cli/lib/spinner.d.ts +20 -0
  178. package/dist/cli/lib/spinner.d.ts.map +1 -0
  179. package/dist/cli/lib/spinner.js +72 -0
  180. package/dist/cli/lib/spinner.js.map +1 -0
  181. package/dist/config/constants.d.ts +143 -0
  182. package/dist/config/constants.d.ts.map +1 -0
  183. package/dist/config/constants.js +355 -0
  184. package/dist/config/constants.js.map +1 -0
  185. package/dist/config/cors.d.ts +3 -0
  186. package/dist/config/cors.d.ts.map +1 -0
  187. package/dist/config/cors.js +30 -0
  188. package/dist/config/cors.js.map +1 -0
  189. package/dist/config/database.d.ts +4 -0
  190. package/dist/config/database.d.ts.map +1 -0
  191. package/dist/config/database.js +18 -0
  192. package/dist/config/database.js.map +1 -0
  193. package/dist/config/env.d.ts +48 -0
  194. package/dist/config/env.d.ts.map +1 -0
  195. package/dist/config/env.js +163 -0
  196. package/dist/config/env.js.map +1 -0
  197. package/dist/config/omni-home.d.ts +3 -0
  198. package/dist/config/omni-home.d.ts.map +1 -0
  199. package/dist/config/omni-home.js +16 -0
  200. package/dist/config/omni-home.js.map +1 -0
  201. package/dist/controllers/admin/api-features.handlers.d.ts +6 -0
  202. package/dist/controllers/admin/api-features.handlers.d.ts.map +1 -0
  203. package/dist/controllers/admin/api-features.handlers.js +62 -0
  204. package/dist/controllers/admin/api-features.handlers.js.map +1 -0
  205. package/dist/controllers/admin/audit.handlers.d.ts +5 -0
  206. package/dist/controllers/admin/audit.handlers.d.ts.map +1 -0
  207. package/dist/controllers/admin/audit.handlers.js +79 -0
  208. package/dist/controllers/admin/audit.handlers.js.map +1 -0
  209. package/dist/controllers/admin/auth.handlers.d.ts +8 -0
  210. package/dist/controllers/admin/auth.handlers.d.ts.map +1 -0
  211. package/dist/controllers/admin/auth.handlers.js +56 -0
  212. package/dist/controllers/admin/auth.handlers.js.map +1 -0
  213. package/dist/controllers/admin/catalog.handlers.d.ts +10 -0
  214. package/dist/controllers/admin/catalog.handlers.d.ts.map +1 -0
  215. package/dist/controllers/admin/catalog.handlers.js +170 -0
  216. package/dist/controllers/admin/catalog.handlers.js.map +1 -0
  217. package/dist/controllers/admin/chats.handlers.d.ts +6 -0
  218. package/dist/controllers/admin/chats.handlers.d.ts.map +1 -0
  219. package/dist/controllers/admin/chats.handlers.js +22 -0
  220. package/dist/controllers/admin/chats.handlers.js.map +1 -0
  221. package/dist/controllers/admin/conversations.handlers.d.ts +9 -0
  222. package/dist/controllers/admin/conversations.handlers.d.ts.map +1 -0
  223. package/dist/controllers/admin/conversations.handlers.js +70 -0
  224. package/dist/controllers/admin/conversations.handlers.js.map +1 -0
  225. package/dist/controllers/admin/core.handlers.d.ts +13 -0
  226. package/dist/controllers/admin/core.handlers.d.ts.map +1 -0
  227. package/dist/controllers/admin/core.handlers.js +201 -0
  228. package/dist/controllers/admin/core.handlers.js.map +1 -0
  229. package/dist/controllers/admin/ddos.handlers.d.ts +13 -0
  230. package/dist/controllers/admin/ddos.handlers.d.ts.map +1 -0
  231. package/dist/controllers/admin/ddos.handlers.js +178 -0
  232. package/dist/controllers/admin/ddos.handlers.js.map +1 -0
  233. package/dist/controllers/admin/documents.handlers.d.ts +8 -0
  234. package/dist/controllers/admin/documents.handlers.d.ts.map +1 -0
  235. package/dist/controllers/admin/documents.handlers.js +207 -0
  236. package/dist/controllers/admin/documents.handlers.js.map +1 -0
  237. package/dist/controllers/admin/keys.handlers.d.ts +8 -0
  238. package/dist/controllers/admin/keys.handlers.d.ts.map +1 -0
  239. package/dist/controllers/admin/keys.handlers.js +84 -0
  240. package/dist/controllers/admin/keys.handlers.js.map +1 -0
  241. package/dist/controllers/admin/media.handlers.d.ts +27 -0
  242. package/dist/controllers/admin/media.handlers.d.ts.map +1 -0
  243. package/dist/controllers/admin/media.handlers.js +637 -0
  244. package/dist/controllers/admin/media.handlers.js.map +1 -0
  245. package/dist/controllers/admin/playground.handlers.d.ts +6 -0
  246. package/dist/controllers/admin/playground.handlers.d.ts.map +1 -0
  247. package/dist/controllers/admin/playground.handlers.js +76 -0
  248. package/dist/controllers/admin/playground.handlers.js.map +1 -0
  249. package/dist/controllers/admin/pm2.handlers.d.ts +15 -0
  250. package/dist/controllers/admin/pm2.handlers.d.ts.map +1 -0
  251. package/dist/controllers/admin/pm2.handlers.js +161 -0
  252. package/dist/controllers/admin/pm2.handlers.js.map +1 -0
  253. package/dist/controllers/admin/queue.handlers.d.ts +16 -0
  254. package/dist/controllers/admin/queue.handlers.d.ts.map +1 -0
  255. package/dist/controllers/admin/queue.handlers.js +159 -0
  256. package/dist/controllers/admin/queue.handlers.js.map +1 -0
  257. package/dist/controllers/admin/runtimes.handlers.d.ts +6 -0
  258. package/dist/controllers/admin/runtimes.handlers.d.ts.map +1 -0
  259. package/dist/controllers/admin/runtimes.handlers.js +54 -0
  260. package/dist/controllers/admin/runtimes.handlers.js.map +1 -0
  261. package/dist/controllers/admin/types.d.ts +7 -0
  262. package/dist/controllers/admin/types.d.ts.map +1 -0
  263. package/dist/controllers/admin/types.js +3 -0
  264. package/dist/controllers/admin/types.js.map +1 -0
  265. package/dist/controllers/admin.controller.d.ts +87 -0
  266. package/dist/controllers/admin.controller.d.ts.map +1 -0
  267. package/dist/controllers/admin.controller.js +58 -0
  268. package/dist/controllers/admin.controller.js.map +1 -0
  269. package/dist/controllers/anthropic.controller.d.ts +5 -0
  270. package/dist/controllers/anthropic.controller.d.ts.map +1 -0
  271. package/dist/controllers/anthropic.controller.js +37 -0
  272. package/dist/controllers/anthropic.controller.js.map +1 -0
  273. package/dist/controllers/api-key.controller.d.ts +7 -0
  274. package/dist/controllers/api-key.controller.d.ts.map +1 -0
  275. package/dist/controllers/api-key.controller.js +51 -0
  276. package/dist/controllers/api-key.controller.js.map +1 -0
  277. package/dist/controllers/assistants.controller.d.ts +13 -0
  278. package/dist/controllers/assistants.controller.d.ts.map +1 -0
  279. package/dist/controllers/assistants.controller.js +75 -0
  280. package/dist/controllers/assistants.controller.js.map +1 -0
  281. package/dist/controllers/audio.controller.d.ts +10 -0
  282. package/dist/controllers/audio.controller.d.ts.map +1 -0
  283. package/dist/controllers/audio.controller.js +43 -0
  284. package/dist/controllers/audio.controller.js.map +1 -0
  285. package/dist/controllers/chat.controller.d.ts +5 -0
  286. package/dist/controllers/chat.controller.d.ts.map +1 -0
  287. package/dist/controllers/chat.controller.js +34 -0
  288. package/dist/controllers/chat.controller.js.map +1 -0
  289. package/dist/controllers/document.controller.d.ts +8 -0
  290. package/dist/controllers/document.controller.d.ts.map +1 -0
  291. package/dist/controllers/document.controller.js +54 -0
  292. package/dist/controllers/document.controller.js.map +1 -0
  293. package/dist/controllers/files.controller.d.ts +12 -0
  294. package/dist/controllers/files.controller.d.ts.map +1 -0
  295. package/dist/controllers/files.controller.js +144 -0
  296. package/dist/controllers/files.controller.js.map +1 -0
  297. package/dist/controllers/health.controller.d.ts +6 -0
  298. package/dist/controllers/health.controller.d.ts.map +1 -0
  299. package/dist/controllers/health.controller.js +39 -0
  300. package/dist/controllers/health.controller.js.map +1 -0
  301. package/dist/controllers/images.controller.d.ts +6 -0
  302. package/dist/controllers/images.controller.d.ts.map +1 -0
  303. package/dist/controllers/images.controller.js +66 -0
  304. package/dist/controllers/images.controller.js.map +1 -0
  305. package/dist/controllers/media-assets.controller.d.ts +6 -0
  306. package/dist/controllers/media-assets.controller.d.ts.map +1 -0
  307. package/dist/controllers/media-assets.controller.js +51 -0
  308. package/dist/controllers/media-assets.controller.js.map +1 -0
  309. package/dist/controllers/models.controller.d.ts +7 -0
  310. package/dist/controllers/models.controller.d.ts.map +1 -0
  311. package/dist/controllers/models.controller.js +44 -0
  312. package/dist/controllers/models.controller.js.map +1 -0
  313. package/dist/controllers/responses.controller.d.ts +7 -0
  314. package/dist/controllers/responses.controller.d.ts.map +1 -0
  315. package/dist/controllers/responses.controller.js +83 -0
  316. package/dist/controllers/responses.controller.js.map +1 -0
  317. package/dist/controllers/videos.controller.d.ts +7 -0
  318. package/dist/controllers/videos.controller.d.ts.map +1 -0
  319. package/dist/controllers/videos.controller.js +46 -0
  320. package/dist/controllers/videos.controller.js.map +1 -0
  321. package/dist/dto/admin-auth.dto.d.ts +10 -0
  322. package/dist/dto/admin-auth.dto.d.ts.map +1 -0
  323. package/dist/dto/admin-auth.dto.js +12 -0
  324. package/dist/dto/admin-auth.dto.js.map +1 -0
  325. package/dist/dto/admin.dto.d.ts +153 -0
  326. package/dist/dto/admin.dto.d.ts.map +1 -0
  327. package/dist/dto/admin.dto.js +78 -0
  328. package/dist/dto/admin.dto.js.map +1 -0
  329. package/dist/dto/anthropic-messages.dto.d.ts +77 -0
  330. package/dist/dto/anthropic-messages.dto.d.ts.map +1 -0
  331. package/dist/dto/anthropic-messages.dto.js +65 -0
  332. package/dist/dto/anthropic-messages.dto.js.map +1 -0
  333. package/dist/dto/api-key.dto.d.ts +27 -0
  334. package/dist/dto/api-key.dto.d.ts.map +1 -0
  335. package/dist/dto/api-key.dto.js +15 -0
  336. package/dist/dto/api-key.dto.js.map +1 -0
  337. package/dist/dto/audio.dto.d.ts +64 -0
  338. package/dist/dto/audio.dto.d.ts.map +1 -0
  339. package/dist/dto/audio.dto.js +29 -0
  340. package/dist/dto/audio.dto.js.map +1 -0
  341. package/dist/dto/chat.dto.d.ts +451 -0
  342. package/dist/dto/chat.dto.d.ts.map +1 -0
  343. package/dist/dto/chat.dto.js +116 -0
  344. package/dist/dto/chat.dto.js.map +1 -0
  345. package/dist/dto/conversation.dto.d.ts +286 -0
  346. package/dist/dto/conversation.dto.d.ts.map +1 -0
  347. package/dist/dto/conversation.dto.js +78 -0
  348. package/dist/dto/conversation.dto.js.map +1 -0
  349. package/dist/dto/ddos.dto.d.ts +191 -0
  350. package/dist/dto/ddos.dto.d.ts.map +1 -0
  351. package/dist/dto/ddos.dto.js +57 -0
  352. package/dist/dto/ddos.dto.js.map +1 -0
  353. package/dist/dto/document.dto.d.ts +21 -0
  354. package/dist/dto/document.dto.d.ts.map +1 -0
  355. package/dist/dto/document.dto.js +12 -0
  356. package/dist/dto/document.dto.js.map +1 -0
  357. package/dist/dto/files.dto.d.ts +17 -0
  358. package/dist/dto/files.dto.d.ts.map +1 -0
  359. package/dist/dto/files.dto.js +21 -0
  360. package/dist/dto/files.dto.js.map +1 -0
  361. package/dist/dto/images.dto.d.ts +68 -0
  362. package/dist/dto/images.dto.d.ts.map +1 -0
  363. package/dist/dto/images.dto.js +40 -0
  364. package/dist/dto/images.dto.js.map +1 -0
  365. package/dist/dto/index.d.ts +13 -0
  366. package/dist/dto/index.d.ts.map +1 -0
  367. package/dist/dto/index.js +44 -0
  368. package/dist/dto/index.js.map +1 -0
  369. package/dist/dto/queue.dto.d.ts +126 -0
  370. package/dist/dto/queue.dto.d.ts.map +1 -0
  371. package/dist/dto/queue.dto.js +33 -0
  372. package/dist/dto/queue.dto.js.map +1 -0
  373. package/dist/dto/responses.dto.d.ts +76 -0
  374. package/dist/dto/responses.dto.d.ts.map +1 -0
  375. package/dist/dto/responses.dto.js +139 -0
  376. package/dist/dto/responses.dto.js.map +1 -0
  377. package/dist/dto/videos.dto.d.ts +46 -0
  378. package/dist/dto/videos.dto.d.ts.map +1 -0
  379. package/dist/dto/videos.dto.js +38 -0
  380. package/dist/dto/videos.dto.js.map +1 -0
  381. package/dist/entities/api-key-created.entity.d.ts +6 -0
  382. package/dist/entities/api-key-created.entity.d.ts.map +1 -0
  383. package/dist/entities/api-key-created.entity.js +3 -0
  384. package/dist/entities/api-key-created.entity.js.map +1 -0
  385. package/dist/entities/api-key-public.entity.d.ts +20 -0
  386. package/dist/entities/api-key-public.entity.d.ts.map +1 -0
  387. package/dist/entities/api-key-public.entity.js +3 -0
  388. package/dist/entities/api-key-public.entity.js.map +1 -0
  389. package/dist/entities/api-key.entity.d.ts +21 -0
  390. package/dist/entities/api-key.entity.d.ts.map +1 -0
  391. package/dist/entities/api-key.entity.js +3 -0
  392. package/dist/entities/api-key.entity.js.map +1 -0
  393. package/dist/entities/audit-log-create-input.entity.d.ts +9 -0
  394. package/dist/entities/audit-log-create-input.entity.d.ts.map +1 -0
  395. package/dist/entities/audit-log-create-input.entity.js +3 -0
  396. package/dist/entities/audit-log-create-input.entity.js.map +1 -0
  397. package/dist/entities/audit-log.entity.d.ts +12 -0
  398. package/dist/entities/audit-log.entity.d.ts.map +1 -0
  399. package/dist/entities/audit-log.entity.js +3 -0
  400. package/dist/entities/audit-log.entity.js.map +1 -0
  401. package/dist/entities/chat-request-status.type.d.ts +2 -0
  402. package/dist/entities/chat-request-status.type.d.ts.map +1 -0
  403. package/dist/entities/chat-request-status.type.js +3 -0
  404. package/dist/entities/chat-request-status.type.js.map +1 -0
  405. package/dist/entities/chat-request.entity.d.ts +18 -0
  406. package/dist/entities/chat-request.entity.d.ts.map +1 -0
  407. package/dist/entities/chat-request.entity.js +3 -0
  408. package/dist/entities/chat-request.entity.js.map +1 -0
  409. package/dist/entities/document-public.entity.d.ts +9 -0
  410. package/dist/entities/document-public.entity.d.ts.map +1 -0
  411. package/dist/entities/document-public.entity.js +3 -0
  412. package/dist/entities/document-public.entity.js.map +1 -0
  413. package/dist/entities/document-storage-type.type.d.ts +2 -0
  414. package/dist/entities/document-storage-type.type.d.ts.map +1 -0
  415. package/dist/entities/document-storage-type.type.js +3 -0
  416. package/dist/entities/document-storage-type.type.js.map +1 -0
  417. package/dist/entities/document.entity.d.ts +16 -0
  418. package/dist/entities/document.entity.d.ts.map +1 -0
  419. package/dist/entities/document.entity.js +3 -0
  420. package/dist/entities/document.entity.js.map +1 -0
  421. package/dist/entities/encrypted-payload.entity.d.ts +6 -0
  422. package/dist/entities/encrypted-payload.entity.d.ts.map +1 -0
  423. package/dist/entities/encrypted-payload.entity.js +3 -0
  424. package/dist/entities/encrypted-payload.entity.js.map +1 -0
  425. package/dist/entities/index.d.ts +12 -0
  426. package/dist/entities/index.d.ts.map +1 -0
  427. package/dist/entities/index.js +3 -0
  428. package/dist/entities/index.js.map +1 -0
  429. package/dist/exceptions/error-codes.d.ts +30 -0
  430. package/dist/exceptions/error-codes.d.ts.map +1 -0
  431. package/dist/exceptions/error-codes.js +32 -0
  432. package/dist/exceptions/error-codes.js.map +1 -0
  433. package/dist/exceptions/exception.factory.d.ts +33 -0
  434. package/dist/exceptions/exception.factory.d.ts.map +1 -0
  435. package/dist/exceptions/exception.factory.js +90 -0
  436. package/dist/exceptions/exception.factory.js.map +1 -0
  437. package/dist/exceptions/http.exception.d.ts +28 -0
  438. package/dist/exceptions/http.exception.d.ts.map +1 -0
  439. package/dist/exceptions/http.exception.js +75 -0
  440. package/dist/exceptions/http.exception.js.map +1 -0
  441. package/dist/interfaces/anthropic-message.interface.d.ts +27 -0
  442. package/dist/interfaces/anthropic-message.interface.d.ts.map +1 -0
  443. package/dist/interfaces/anthropic-message.interface.js +4 -0
  444. package/dist/interfaces/anthropic-message.interface.js.map +1 -0
  445. package/dist/interfaces/api-features.type.d.ts +45 -0
  446. package/dist/interfaces/api-features.type.d.ts.map +1 -0
  447. package/dist/interfaces/api-features.type.js +61 -0
  448. package/dist/interfaces/api-features.type.js.map +1 -0
  449. package/dist/interfaces/api-key-mode.type.d.ts +8 -0
  450. package/dist/interfaces/api-key-mode.type.d.ts.map +1 -0
  451. package/dist/interfaces/api-key-mode.type.js +3 -0
  452. package/dist/interfaces/api-key-mode.type.js.map +1 -0
  453. package/dist/interfaces/api-key-role.type.d.ts +3 -0
  454. package/dist/interfaces/api-key-role.type.d.ts.map +1 -0
  455. package/dist/interfaces/api-key-role.type.js +3 -0
  456. package/dist/interfaces/api-key-role.type.js.map +1 -0
  457. package/dist/interfaces/app-settings.type.d.ts +10 -0
  458. package/dist/interfaces/app-settings.type.d.ts.map +1 -0
  459. package/dist/interfaces/app-settings.type.js +3 -0
  460. package/dist/interfaces/app-settings.type.js.map +1 -0
  461. package/dist/interfaces/auth.interface.d.ts +5 -0
  462. package/dist/interfaces/auth.interface.d.ts.map +1 -0
  463. package/dist/interfaces/auth.interface.js +3 -0
  464. package/dist/interfaces/auth.interface.js.map +1 -0
  465. package/dist/interfaces/authenticated-api-key.interface.d.ts +18 -0
  466. package/dist/interfaces/authenticated-api-key.interface.d.ts.map +1 -0
  467. package/dist/interfaces/authenticated-api-key.interface.js +3 -0
  468. package/dist/interfaces/authenticated-api-key.interface.js.map +1 -0
  469. package/dist/interfaces/auto-ban-event.interface.d.ts +11 -0
  470. package/dist/interfaces/auto-ban-event.interface.d.ts.map +1 -0
  471. package/dist/interfaces/auto-ban-event.interface.js +3 -0
  472. package/dist/interfaces/auto-ban-event.interface.js.map +1 -0
  473. package/dist/interfaces/built-engine-request.interface.d.ts +19 -0
  474. package/dist/interfaces/built-engine-request.interface.d.ts.map +1 -0
  475. package/dist/interfaces/built-engine-request.interface.js +3 -0
  476. package/dist/interfaces/built-engine-request.interface.js.map +1 -0
  477. package/dist/interfaces/chat-context.interface.d.ts +9 -0
  478. package/dist/interfaces/chat-context.interface.d.ts.map +1 -0
  479. package/dist/interfaces/chat-context.interface.js +3 -0
  480. package/dist/interfaces/chat-context.interface.js.map +1 -0
  481. package/dist/interfaces/chat-job-payload.interface.d.ts +28 -0
  482. package/dist/interfaces/chat-job-payload.interface.d.ts.map +1 -0
  483. package/dist/interfaces/chat-job-payload.interface.js +3 -0
  484. package/dist/interfaces/chat-job-payload.interface.js.map +1 -0
  485. package/dist/interfaces/chat-list-query.interface.d.ts +16 -0
  486. package/dist/interfaces/chat-list-query.interface.d.ts.map +1 -0
  487. package/dist/interfaces/chat-list-query.interface.js +3 -0
  488. package/dist/interfaces/chat-list-query.interface.js.map +1 -0
  489. package/dist/interfaces/document-context-result.interface.d.ts +7 -0
  490. package/dist/interfaces/document-context-result.interface.d.ts.map +1 -0
  491. package/dist/interfaces/document-context-result.interface.js +3 -0
  492. package/dist/interfaces/document-context-result.interface.js.map +1 -0
  493. package/dist/interfaces/engine-collected-output.interface.d.ts +33 -0
  494. package/dist/interfaces/engine-collected-output.interface.d.ts.map +1 -0
  495. package/dist/interfaces/engine-collected-output.interface.js +3 -0
  496. package/dist/interfaces/engine-collected-output.interface.js.map +1 -0
  497. package/dist/interfaces/engine-json-result.interface.d.ts +7 -0
  498. package/dist/interfaces/engine-json-result.interface.d.ts.map +1 -0
  499. package/dist/interfaces/engine-json-result.interface.js +3 -0
  500. package/dist/interfaces/engine-json-result.interface.js.map +1 -0
  501. package/dist/interfaces/engine-response-meta.interface.d.ts +14 -0
  502. package/dist/interfaces/engine-response-meta.interface.d.ts.map +1 -0
  503. package/dist/interfaces/engine-response-meta.interface.js +3 -0
  504. package/dist/interfaces/engine-response-meta.interface.js.map +1 -0
  505. package/dist/interfaces/engine-run-options.interface.d.ts +66 -0
  506. package/dist/interfaces/engine-run-options.interface.d.ts.map +1 -0
  507. package/dist/interfaces/engine-run-options.interface.js +3 -0
  508. package/dist/interfaces/engine-run-options.interface.js.map +1 -0
  509. package/dist/interfaces/engine-run-result.interface.d.ts +8 -0
  510. package/dist/interfaces/engine-run-result.interface.d.ts.map +1 -0
  511. package/dist/interfaces/engine-run-result.interface.js +3 -0
  512. package/dist/interfaces/engine-run-result.interface.js.map +1 -0
  513. package/dist/interfaces/engine-stream-event.type.d.ts +20 -0
  514. package/dist/interfaces/engine-stream-event.type.d.ts.map +1 -0
  515. package/dist/interfaces/engine-stream-event.type.js +3 -0
  516. package/dist/interfaces/engine-stream-event.type.js.map +1 -0
  517. package/dist/interfaces/engine.interface.d.ts +6 -0
  518. package/dist/interfaces/engine.interface.d.ts.map +1 -0
  519. package/dist/interfaces/engine.interface.js +3 -0
  520. package/dist/interfaces/engine.interface.js.map +1 -0
  521. package/dist/interfaces/execute-completion-options.interface.d.ts +17 -0
  522. package/dist/interfaces/execute-completion-options.interface.d.ts.map +1 -0
  523. package/dist/interfaces/execute-completion-options.interface.js +3 -0
  524. package/dist/interfaces/execute-completion-options.interface.js.map +1 -0
  525. package/dist/interfaces/express.interface.d.ts +13 -0
  526. package/dist/interfaces/express.interface.d.ts.map +1 -0
  527. package/dist/interfaces/express.interface.js +3 -0
  528. package/dist/interfaces/express.interface.js.map +1 -0
  529. package/dist/interfaces/index.d.ts +47 -0
  530. package/dist/interfaces/index.d.ts.map +1 -0
  531. package/dist/interfaces/index.js +7 -0
  532. package/dist/interfaces/index.js.map +1 -0
  533. package/dist/interfaces/install-channel.type.d.ts +2 -0
  534. package/dist/interfaces/install-channel.type.d.ts.map +1 -0
  535. package/dist/interfaces/install-channel.type.js +3 -0
  536. package/dist/interfaces/install-channel.type.js.map +1 -0
  537. package/dist/interfaces/map-completion-options.interface.d.ts +20 -0
  538. package/dist/interfaces/map-completion-options.interface.d.ts.map +1 -0
  539. package/dist/interfaces/map-completion-options.interface.js +3 -0
  540. package/dist/interfaces/map-completion-options.interface.js.map +1 -0
  541. package/dist/interfaces/materialized-document.interface.d.ts +10 -0
  542. package/dist/interfaces/materialized-document.interface.d.ts.map +1 -0
  543. package/dist/interfaces/materialized-document.interface.js +3 -0
  544. package/dist/interfaces/materialized-document.interface.js.map +1 -0
  545. package/dist/interfaces/open-ai-chat-completion-choice.interface.d.ts +25 -0
  546. package/dist/interfaces/open-ai-chat-completion-choice.interface.d.ts.map +1 -0
  547. package/dist/interfaces/open-ai-chat-completion-choice.interface.js +3 -0
  548. package/dist/interfaces/open-ai-chat-completion-choice.interface.js.map +1 -0
  549. package/dist/interfaces/open-ai-chat-completion-chunk.interface.d.ts +51 -0
  550. package/dist/interfaces/open-ai-chat-completion-chunk.interface.d.ts.map +1 -0
  551. package/dist/interfaces/open-ai-chat-completion-chunk.interface.js +3 -0
  552. package/dist/interfaces/open-ai-chat-completion-chunk.interface.js.map +1 -0
  553. package/dist/interfaces/open-ai-chat-completion-request.interface.d.ts +55 -0
  554. package/dist/interfaces/open-ai-chat-completion-request.interface.d.ts.map +1 -0
  555. package/dist/interfaces/open-ai-chat-completion-request.interface.js +3 -0
  556. package/dist/interfaces/open-ai-chat-completion-request.interface.js.map +1 -0
  557. package/dist/interfaces/open-ai-chat-completion.interface.d.ts +21 -0
  558. package/dist/interfaces/open-ai-chat-completion.interface.d.ts.map +1 -0
  559. package/dist/interfaces/open-ai-chat-completion.interface.js +3 -0
  560. package/dist/interfaces/open-ai-chat-completion.interface.js.map +1 -0
  561. package/dist/interfaces/open-ai-chat-message.interface.d.ts +9 -0
  562. package/dist/interfaces/open-ai-chat-message.interface.d.ts.map +1 -0
  563. package/dist/interfaces/open-ai-chat-message.interface.js +3 -0
  564. package/dist/interfaces/open-ai-chat-message.interface.js.map +1 -0
  565. package/dist/interfaces/open-ai-model-list.interface.d.ts +6 -0
  566. package/dist/interfaces/open-ai-model-list.interface.d.ts.map +1 -0
  567. package/dist/interfaces/open-ai-model-list.interface.js +3 -0
  568. package/dist/interfaces/open-ai-model-list.interface.js.map +1 -0
  569. package/dist/interfaces/open-ai-model.interface.d.ts +10 -0
  570. package/dist/interfaces/open-ai-model.interface.d.ts.map +1 -0
  571. package/dist/interfaces/open-ai-model.interface.js +3 -0
  572. package/dist/interfaces/open-ai-model.interface.js.map +1 -0
  573. package/dist/interfaces/open-ai-response.interface.d.ts +32 -0
  574. package/dist/interfaces/open-ai-response.interface.d.ts.map +1 -0
  575. package/dist/interfaces/open-ai-response.interface.js +3 -0
  576. package/dist/interfaces/open-ai-response.interface.js.map +1 -0
  577. package/dist/interfaces/open-ai-role.type.d.ts +2 -0
  578. package/dist/interfaces/open-ai-role.type.d.ts.map +1 -0
  579. package/dist/interfaces/open-ai-role.type.js +3 -0
  580. package/dist/interfaces/open-ai-role.type.js.map +1 -0
  581. package/dist/interfaces/openai.interface.d.ts +11 -0
  582. package/dist/interfaces/openai.interface.d.ts.map +1 -0
  583. package/dist/interfaces/openai.interface.js +3 -0
  584. package/dist/interfaces/openai.interface.js.map +1 -0
  585. package/dist/interfaces/pm2-runtime-config.interface.d.ts +24 -0
  586. package/dist/interfaces/pm2-runtime-config.interface.d.ts.map +1 -0
  587. package/dist/interfaces/pm2-runtime-config.interface.js +3 -0
  588. package/dist/interfaces/pm2-runtime-config.interface.js.map +1 -0
  589. package/dist/interfaces/proxy-ip-config.interface.d.ts +12 -0
  590. package/dist/interfaces/proxy-ip-config.interface.d.ts.map +1 -0
  591. package/dist/interfaces/proxy-ip-config.interface.js +3 -0
  592. package/dist/interfaces/proxy-ip-config.interface.js.map +1 -0
  593. package/dist/interfaces/proxy-ip-source.type.d.ts +7 -0
  594. package/dist/interfaces/proxy-ip-source.type.d.ts.map +1 -0
  595. package/dist/interfaces/proxy-ip-source.type.js +3 -0
  596. package/dist/interfaces/proxy-ip-source.type.js.map +1 -0
  597. package/dist/interfaces/resolved-policy.interface.d.ts +15 -0
  598. package/dist/interfaces/resolved-policy.interface.d.ts.map +1 -0
  599. package/dist/interfaces/resolved-policy.interface.js +3 -0
  600. package/dist/interfaces/resolved-policy.interface.js.map +1 -0
  601. package/dist/interfaces/runner-mode.type.d.ts +2 -0
  602. package/dist/interfaces/runner-mode.type.d.ts.map +1 -0
  603. package/dist/interfaces/runner-mode.type.js +3 -0
  604. package/dist/interfaces/runner-mode.type.js.map +1 -0
  605. package/dist/interfaces/software-check.interface.d.ts +14 -0
  606. package/dist/interfaces/software-check.interface.d.ts.map +1 -0
  607. package/dist/interfaces/software-check.interface.js +3 -0
  608. package/dist/interfaces/software-check.interface.js.map +1 -0
  609. package/dist/interfaces/software-id.type.d.ts +2 -0
  610. package/dist/interfaces/software-id.type.d.ts.map +1 -0
  611. package/dist/interfaces/software-id.type.js +3 -0
  612. package/dist/interfaces/software-id.type.js.map +1 -0
  613. package/dist/interfaces/software-level.type.d.ts +2 -0
  614. package/dist/interfaces/software-level.type.d.ts.map +1 -0
  615. package/dist/interfaces/software-level.type.js +3 -0
  616. package/dist/interfaces/software-level.type.js.map +1 -0
  617. package/dist/interfaces/system-software-report.interface.d.ts +6 -0
  618. package/dist/interfaces/system-software-report.interface.d.ts.map +1 -0
  619. package/dist/interfaces/system-software-report.interface.js +3 -0
  620. package/dist/interfaces/system-software-report.interface.js.map +1 -0
  621. package/dist/interfaces/tracked-connection.interface.d.ts +16 -0
  622. package/dist/interfaces/tracked-connection.interface.d.ts.map +1 -0
  623. package/dist/interfaces/tracked-connection.interface.js +3 -0
  624. package/dist/interfaces/tracked-connection.interface.js.map +1 -0
  625. package/dist/interfaces/update-progress.type.d.ts +16 -0
  626. package/dist/interfaces/update-progress.type.d.ts.map +1 -0
  627. package/dist/interfaces/update-progress.type.js +3 -0
  628. package/dist/interfaces/update-progress.type.js.map +1 -0
  629. package/dist/interfaces/update-result.interface.d.ts +11 -0
  630. package/dist/interfaces/update-result.interface.d.ts.map +1 -0
  631. package/dist/interfaces/update-result.interface.js +3 -0
  632. package/dist/interfaces/update-result.interface.js.map +1 -0
  633. package/dist/interfaces/version-info.interface.d.ts +21 -0
  634. package/dist/interfaces/version-info.interface.d.ts.map +1 -0
  635. package/dist/interfaces/version-info.interface.js +3 -0
  636. package/dist/interfaces/version-info.interface.js.map +1 -0
  637. package/dist/interfaces/version-status.type.d.ts +3 -0
  638. package/dist/interfaces/version-status.type.d.ts.map +1 -0
  639. package/dist/interfaces/version-status.type.js +3 -0
  640. package/dist/interfaces/version-status.type.js.map +1 -0
  641. package/dist/middlewares/auth.middleware.d.ts +13 -0
  642. package/dist/middlewares/auth.middleware.d.ts.map +1 -0
  643. package/dist/middlewares/auth.middleware.js +147 -0
  644. package/dist/middlewares/auth.middleware.js.map +1 -0
  645. package/dist/middlewares/client-ip.middleware.d.ts +11 -0
  646. package/dist/middlewares/client-ip.middleware.d.ts.map +1 -0
  647. package/dist/middlewares/client-ip.middleware.js +19 -0
  648. package/dist/middlewares/client-ip.middleware.js.map +1 -0
  649. package/dist/middlewares/concurrency.middleware.d.ts +6 -0
  650. package/dist/middlewares/concurrency.middleware.d.ts.map +1 -0
  651. package/dist/middlewares/concurrency.middleware.js +16 -0
  652. package/dist/middlewares/concurrency.middleware.js.map +1 -0
  653. package/dist/middlewares/connection-tracker.middleware.d.ts +33 -0
  654. package/dist/middlewares/connection-tracker.middleware.d.ts.map +1 -0
  655. package/dist/middlewares/connection-tracker.middleware.js +99 -0
  656. package/dist/middlewares/connection-tracker.middleware.js.map +1 -0
  657. package/dist/middlewares/error.middleware.d.ts +4 -0
  658. package/dist/middlewares/error.middleware.d.ts.map +1 -0
  659. package/dist/middlewares/error.middleware.js +42 -0
  660. package/dist/middlewares/error.middleware.js.map +1 -0
  661. package/dist/middlewares/index.d.ts +11 -0
  662. package/dist/middlewares/index.d.ts.map +1 -0
  663. package/dist/middlewares/index.js +35 -0
  664. package/dist/middlewares/index.js.map +1 -0
  665. package/dist/middlewares/rate-limit.middleware.d.ts +11 -0
  666. package/dist/middlewares/rate-limit.middleware.d.ts.map +1 -0
  667. package/dist/middlewares/rate-limit.middleware.js +152 -0
  668. package/dist/middlewares/rate-limit.middleware.js.map +1 -0
  669. package/dist/middlewares/request-id.middleware.d.ts +3 -0
  670. package/dist/middlewares/request-id.middleware.d.ts.map +1 -0
  671. package/dist/middlewares/request-id.middleware.js +12 -0
  672. package/dist/middlewares/request-id.middleware.js.map +1 -0
  673. package/dist/middlewares/upload-images.middleware.d.ts +3 -0
  674. package/dist/middlewares/upload-images.middleware.d.ts.map +1 -0
  675. package/dist/middlewares/upload-images.middleware.js +29 -0
  676. package/dist/middlewares/upload-images.middleware.js.map +1 -0
  677. package/dist/middlewares/upload.middleware.d.ts +2 -0
  678. package/dist/middlewares/upload.middleware.d.ts.map +1 -0
  679. package/dist/middlewares/upload.middleware.js +26 -0
  680. package/dist/middlewares/upload.middleware.js.map +1 -0
  681. package/dist/middlewares/validate.middleware.d.ts +6 -0
  682. package/dist/middlewares/validate.middleware.d.ts.map +1 -0
  683. package/dist/middlewares/validate.middleware.js +40 -0
  684. package/dist/middlewares/validate.middleware.js.map +1 -0
  685. package/dist/routes/admin.routes.d.ts +3 -0
  686. package/dist/routes/admin.routes.d.ts.map +1 -0
  687. package/dist/routes/admin.routes.js +136 -0
  688. package/dist/routes/admin.routes.js.map +1 -0
  689. package/dist/routes/index.d.ts +3 -0
  690. package/dist/routes/index.d.ts.map +1 -0
  691. package/dist/routes/index.js +46 -0
  692. package/dist/routes/index.js.map +1 -0
  693. package/dist/routes/v1/api-keys.routes.d.ts +3 -0
  694. package/dist/routes/v1/api-keys.routes.d.ts.map +1 -0
  695. package/dist/routes/v1/api-keys.routes.js +13 -0
  696. package/dist/routes/v1/api-keys.routes.js.map +1 -0
  697. package/dist/routes/v1/assistants.routes.d.ts +3 -0
  698. package/dist/routes/v1/assistants.routes.d.ts.map +1 -0
  699. package/dist/routes/v1/assistants.routes.js +13 -0
  700. package/dist/routes/v1/assistants.routes.js.map +1 -0
  701. package/dist/routes/v1/audio.routes.d.ts +3 -0
  702. package/dist/routes/v1/audio.routes.d.ts.map +1 -0
  703. package/dist/routes/v1/audio.routes.js +14 -0
  704. package/dist/routes/v1/audio.routes.js.map +1 -0
  705. package/dist/routes/v1/chat.routes.d.ts +3 -0
  706. package/dist/routes/v1/chat.routes.d.ts.map +1 -0
  707. package/dist/routes/v1/chat.routes.js +13 -0
  708. package/dist/routes/v1/chat.routes.js.map +1 -0
  709. package/dist/routes/v1/documents.routes.d.ts +3 -0
  710. package/dist/routes/v1/documents.routes.d.ts.map +1 -0
  711. package/dist/routes/v1/documents.routes.js +15 -0
  712. package/dist/routes/v1/documents.routes.js.map +1 -0
  713. package/dist/routes/v1/files.routes.d.ts +3 -0
  714. package/dist/routes/v1/files.routes.d.ts.map +1 -0
  715. package/dist/routes/v1/files.routes.js +16 -0
  716. package/dist/routes/v1/files.routes.js.map +1 -0
  717. package/dist/routes/v1/images.routes.d.ts +3 -0
  718. package/dist/routes/v1/images.routes.d.ts.map +1 -0
  719. package/dist/routes/v1/images.routes.js +14 -0
  720. package/dist/routes/v1/images.routes.js.map +1 -0
  721. package/dist/routes/v1/media-assets.routes.d.ts +3 -0
  722. package/dist/routes/v1/media-assets.routes.d.ts.map +1 -0
  723. package/dist/routes/v1/media-assets.routes.js +12 -0
  724. package/dist/routes/v1/media-assets.routes.js.map +1 -0
  725. package/dist/routes/v1/messages.routes.d.ts +3 -0
  726. package/dist/routes/v1/messages.routes.d.ts.map +1 -0
  727. package/dist/routes/v1/messages.routes.js +13 -0
  728. package/dist/routes/v1/messages.routes.js.map +1 -0
  729. package/dist/routes/v1/models.routes.d.ts +3 -0
  730. package/dist/routes/v1/models.routes.d.ts.map +1 -0
  731. package/dist/routes/v1/models.routes.js +11 -0
  732. package/dist/routes/v1/models.routes.js.map +1 -0
  733. package/dist/routes/v1/responses.routes.d.ts +3 -0
  734. package/dist/routes/v1/responses.routes.d.ts.map +1 -0
  735. package/dist/routes/v1/responses.routes.js +15 -0
  736. package/dist/routes/v1/responses.routes.js.map +1 -0
  737. package/dist/routes/v1/threads.routes.d.ts +3 -0
  738. package/dist/routes/v1/threads.routes.d.ts.map +1 -0
  739. package/dist/routes/v1/threads.routes.js +15 -0
  740. package/dist/routes/v1/threads.routes.js.map +1 -0
  741. package/dist/routes/v1/videos.routes.d.ts +3 -0
  742. package/dist/routes/v1/videos.routes.d.ts.map +1 -0
  743. package/dist/routes/v1/videos.routes.js +14 -0
  744. package/dist/routes/v1/videos.routes.js.map +1 -0
  745. package/dist/server.d.ts +2 -0
  746. package/dist/server.d.ts.map +1 -0
  747. package/dist/server.js +121 -0
  748. package/dist/server.js.map +1 -0
  749. package/dist/services/abuse-guard.service.d.ts +19 -0
  750. package/dist/services/abuse-guard.service.d.ts.map +1 -0
  751. package/dist/services/abuse-guard.service.js +243 -0
  752. package/dist/services/abuse-guard.service.js.map +1 -0
  753. package/dist/services/admin-auth.service.d.ts +32 -0
  754. package/dist/services/admin-auth.service.d.ts.map +1 -0
  755. package/dist/services/admin-auth.service.js +202 -0
  756. package/dist/services/admin-auth.service.js.map +1 -0
  757. package/dist/services/api-features.service.d.ts +15 -0
  758. package/dist/services/api-features.service.d.ts.map +1 -0
  759. package/dist/services/api-features.service.js +92 -0
  760. package/dist/services/api-features.service.js.map +1 -0
  761. package/dist/services/api-key.service.d.ts +52 -0
  762. package/dist/services/api-key.service.d.ts.map +1 -0
  763. package/dist/services/api-key.service.js +296 -0
  764. package/dist/services/api-key.service.js.map +1 -0
  765. package/dist/services/assistants.service.d.ts +130 -0
  766. package/dist/services/assistants.service.d.ts.map +1 -0
  767. package/dist/services/assistants.service.js +329 -0
  768. package/dist/services/assistants.service.js.map +1 -0
  769. package/dist/services/audit.service.d.ts +10 -0
  770. package/dist/services/audit.service.d.ts.map +1 -0
  771. package/dist/services/audit.service.js +38 -0
  772. package/dist/services/audit.service.js.map +1 -0
  773. package/dist/services/chat-admin.service.d.ts +76 -0
  774. package/dist/services/chat-admin.service.d.ts.map +1 -0
  775. package/dist/services/chat-admin.service.js +220 -0
  776. package/dist/services/chat-admin.service.js.map +1 -0
  777. package/dist/services/chat-request-builder.service.d.ts +23 -0
  778. package/dist/services/chat-request-builder.service.d.ts.map +1 -0
  779. package/dist/services/chat-request-builder.service.js +325 -0
  780. package/dist/services/chat-request-builder.service.js.map +1 -0
  781. package/dist/services/chat.service.d.ts +27 -0
  782. package/dist/services/chat.service.d.ts.map +1 -0
  783. package/dist/services/chat.service.js +1088 -0
  784. package/dist/services/chat.service.js.map +1 -0
  785. package/dist/services/conversation.service.d.ts +104 -0
  786. package/dist/services/conversation.service.d.ts.map +1 -0
  787. package/dist/services/conversation.service.js +254 -0
  788. package/dist/services/conversation.service.js.map +1 -0
  789. package/dist/services/ddos-policy.service.d.ts +41 -0
  790. package/dist/services/ddos-policy.service.d.ts.map +1 -0
  791. package/dist/services/ddos-policy.service.js +263 -0
  792. package/dist/services/ddos-policy.service.js.map +1 -0
  793. package/dist/services/document.service.d.ts +62 -0
  794. package/dist/services/document.service.d.ts.map +1 -0
  795. package/dist/services/document.service.js +344 -0
  796. package/dist/services/document.service.js.map +1 -0
  797. package/dist/services/encryption.service.d.ts +8 -0
  798. package/dist/services/encryption.service.d.ts.map +1 -0
  799. package/dist/services/encryption.service.js +34 -0
  800. package/dist/services/encryption.service.js.map +1 -0
  801. package/dist/services/engine-session-map.service.d.ts +11 -0
  802. package/dist/services/engine-session-map.service.d.ts.map +1 -0
  803. package/dist/services/engine-session-map.service.js +59 -0
  804. package/dist/services/engine-session-map.service.js.map +1 -0
  805. package/dist/services/engine-slot.service.d.ts +21 -0
  806. package/dist/services/engine-slot.service.d.ts.map +1 -0
  807. package/dist/services/engine-slot.service.js +55 -0
  808. package/dist/services/engine-slot.service.js.map +1 -0
  809. package/dist/services/hf/client.d.ts +18 -0
  810. package/dist/services/hf/client.d.ts.map +1 -0
  811. package/dist/services/hf/client.js +202 -0
  812. package/dist/services/hf/client.js.map +1 -0
  813. package/dist/services/hf/delete-local.d.ts +5 -0
  814. package/dist/services/hf/delete-local.d.ts.map +1 -0
  815. package/dist/services/hf/delete-local.js +46 -0
  816. package/dist/services/hf/delete-local.js.map +1 -0
  817. package/dist/services/hf/hub-search.d.ts +66 -0
  818. package/dist/services/hf/hub-search.d.ts.map +1 -0
  819. package/dist/services/hf/hub-search.js +272 -0
  820. package/dist/services/hf/hub-search.js.map +1 -0
  821. package/dist/services/hf/record-pull.d.ts +6 -0
  822. package/dist/services/hf/record-pull.d.ts.map +1 -0
  823. package/dist/services/hf/record-pull.js +80 -0
  824. package/dist/services/hf/record-pull.js.map +1 -0
  825. package/dist/services/hf/registry.d.ts +27 -0
  826. package/dist/services/hf/registry.d.ts.map +1 -0
  827. package/dist/services/hf/registry.js +77 -0
  828. package/dist/services/hf/registry.js.map +1 -0
  829. package/dist/services/hf/spec.d.ts +33 -0
  830. package/dist/services/hf/spec.d.ts.map +1 -0
  831. package/dist/services/hf/spec.js +175 -0
  832. package/dist/services/hf/spec.js.map +1 -0
  833. package/dist/services/ip-blacklist.service.d.ts +44 -0
  834. package/dist/services/ip-blacklist.service.d.ts.map +1 -0
  835. package/dist/services/ip-blacklist.service.js +145 -0
  836. package/dist/services/ip-blacklist.service.js.map +1 -0
  837. package/dist/services/media/audio-worker.d.ts +23 -0
  838. package/dist/services/media/audio-worker.d.ts.map +1 -0
  839. package/dist/services/media/audio-worker.js +81 -0
  840. package/dist/services/media/audio-worker.js.map +1 -0
  841. package/dist/services/media/format-convert.d.ts +37 -0
  842. package/dist/services/media/format-convert.d.ts.map +1 -0
  843. package/dist/services/media/format-convert.js +215 -0
  844. package/dist/services/media/format-convert.js.map +1 -0
  845. package/dist/services/media/media-jobs.service.d.ts +46 -0
  846. package/dist/services/media/media-jobs.service.d.ts.map +1 -0
  847. package/dist/services/media/media-jobs.service.js +193 -0
  848. package/dist/services/media/media-jobs.service.js.map +1 -0
  849. package/dist/services/media/media-orchestrator.service.d.ts +53 -0
  850. package/dist/services/media/media-orchestrator.service.d.ts.map +1 -0
  851. package/dist/services/media/media-orchestrator.service.js +228 -0
  852. package/dist/services/media/media-orchestrator.service.js.map +1 -0
  853. package/dist/services/media/media-store.service.d.ts +39 -0
  854. package/dist/services/media/media-store.service.d.ts.map +1 -0
  855. package/dist/services/media/media-store.service.js +154 -0
  856. package/dist/services/media/media-store.service.js.map +1 -0
  857. package/dist/services/media/providers/http-worker.provider.d.ts +9 -0
  858. package/dist/services/media/providers/http-worker.provider.d.ts.map +1 -0
  859. package/dist/services/media/providers/http-worker.provider.js +73 -0
  860. package/dist/services/media/providers/http-worker.provider.js.map +1 -0
  861. package/dist/services/media/providers/media-provider.interface.d.ts +44 -0
  862. package/dist/services/media/providers/media-provider.interface.d.ts.map +1 -0
  863. package/dist/services/media/providers/media-provider.interface.js +4 -0
  864. package/dist/services/media/providers/media-provider.interface.js.map +1 -0
  865. package/dist/services/media/providers/mock.provider.d.ts +8 -0
  866. package/dist/services/media/providers/mock.provider.d.ts.map +1 -0
  867. package/dist/services/media/providers/mock.provider.js +43 -0
  868. package/dist/services/media/providers/mock.provider.js.map +1 -0
  869. package/dist/services/media/providers/stub.provider.d.ts +8 -0
  870. package/dist/services/media/providers/stub.provider.d.ts.map +1 -0
  871. package/dist/services/media/providers/stub.provider.js +14 -0
  872. package/dist/services/media/providers/stub.provider.js.map +1 -0
  873. package/dist/services/media/video-fixture.d.ts +3 -0
  874. package/dist/services/media/video-fixture.d.ts.map +1 -0
  875. package/dist/services/media/video-fixture.js +40 -0
  876. package/dist/services/media/video-fixture.js.map +1 -0
  877. package/dist/services/models.service.d.ts +49 -0
  878. package/dist/services/models.service.d.ts.map +1 -0
  879. package/dist/services/models.service.js +162 -0
  880. package/dist/services/models.service.js.map +1 -0
  881. package/dist/services/pm2-config.d.ts +12 -0
  882. package/dist/services/pm2-config.d.ts.map +1 -0
  883. package/dist/services/pm2-config.js +156 -0
  884. package/dist/services/pm2-config.js.map +1 -0
  885. package/dist/services/pm2.service.d.ts +207 -0
  886. package/dist/services/pm2.service.d.ts.map +1 -0
  887. package/dist/services/pm2.service.js +789 -0
  888. package/dist/services/pm2.service.js.map +1 -0
  889. package/dist/services/policy.service.d.ts +8 -0
  890. package/dist/services/policy.service.d.ts.map +1 -0
  891. package/dist/services/policy.service.js +112 -0
  892. package/dist/services/policy.service.js.map +1 -0
  893. package/dist/services/queue/chat-queue.service.d.ts +107 -0
  894. package/dist/services/queue/chat-queue.service.d.ts.map +1 -0
  895. package/dist/services/queue/chat-queue.service.js +557 -0
  896. package/dist/services/queue/chat-queue.service.js.map +1 -0
  897. package/dist/services/queue/chat-worker.service.d.ts +12 -0
  898. package/dist/services/queue/chat-worker.service.d.ts.map +1 -0
  899. package/dist/services/queue/chat-worker.service.js +136 -0
  900. package/dist/services/queue/chat-worker.service.js.map +1 -0
  901. package/dist/services/queue/fair-claim.d.ts +41 -0
  902. package/dist/services/queue/fair-claim.d.ts.map +1 -0
  903. package/dist/services/queue/fair-claim.js +54 -0
  904. package/dist/services/queue/fair-claim.js.map +1 -0
  905. package/dist/services/queue/job-waiter.d.ts +40 -0
  906. package/dist/services/queue/job-waiter.d.ts.map +1 -0
  907. package/dist/services/queue/job-waiter.js +77 -0
  908. package/dist/services/queue/job-waiter.js.map +1 -0
  909. package/dist/services/queue/queue-backend.factory.d.ts +12 -0
  910. package/dist/services/queue/queue-backend.factory.d.ts.map +1 -0
  911. package/dist/services/queue/queue-backend.factory.js +41 -0
  912. package/dist/services/queue/queue-backend.factory.js.map +1 -0
  913. package/dist/services/queue/queue-backend.interface.d.ts +67 -0
  914. package/dist/services/queue/queue-backend.interface.d.ts.map +1 -0
  915. package/dist/services/queue/queue-backend.interface.js +19 -0
  916. package/dist/services/queue/queue-backend.interface.js.map +1 -0
  917. package/dist/services/queue/queue-policy.service.d.ts +19 -0
  918. package/dist/services/queue/queue-policy.service.d.ts.map +1 -0
  919. package/dist/services/queue/queue-policy.service.js +99 -0
  920. package/dist/services/queue/queue-policy.service.js.map +1 -0
  921. package/dist/services/response-store.service.d.ts +14 -0
  922. package/dist/services/response-store.service.d.ts.map +1 -0
  923. package/dist/services/response-store.service.js +77 -0
  924. package/dist/services/response-store.service.js.map +1 -0
  925. package/dist/services/role-normalize.service.d.ts +5 -0
  926. package/dist/services/role-normalize.service.d.ts.map +1 -0
  927. package/dist/services/role-normalize.service.js +22 -0
  928. package/dist/services/role-normalize.service.js.map +1 -0
  929. package/dist/services/runtimes/echo.d.ts +17 -0
  930. package/dist/services/runtimes/echo.d.ts.map +1 -0
  931. package/dist/services/runtimes/echo.js +40 -0
  932. package/dist/services/runtimes/echo.js.map +1 -0
  933. package/dist/services/runtimes/engine-manager.d.ts +47 -0
  934. package/dist/services/runtimes/engine-manager.d.ts.map +1 -0
  935. package/dist/services/runtimes/engine-manager.js +191 -0
  936. package/dist/services/runtimes/engine-manager.js.map +1 -0
  937. package/dist/services/runtimes/llama-server.d.ts +37 -0
  938. package/dist/services/runtimes/llama-server.d.ts.map +1 -0
  939. package/dist/services/runtimes/llama-server.js +153 -0
  940. package/dist/services/runtimes/llama-server.js.map +1 -0
  941. package/dist/services/runtimes/runtime-catalog.d.ts +49 -0
  942. package/dist/services/runtimes/runtime-catalog.d.ts.map +1 -0
  943. package/dist/services/runtimes/runtime-catalog.js +510 -0
  944. package/dist/services/runtimes/runtime-catalog.js.map +1 -0
  945. package/dist/services/runtimes/runtime-install.d.ts +45 -0
  946. package/dist/services/runtimes/runtime-install.d.ts.map +1 -0
  947. package/dist/services/runtimes/runtime-install.js +159 -0
  948. package/dist/services/runtimes/runtime-install.js.map +1 -0
  949. package/dist/services/runtimes/vllm.d.ts +14 -0
  950. package/dist/services/runtimes/vllm.d.ts.map +1 -0
  951. package/dist/services/runtimes/vllm.js +105 -0
  952. package/dist/services/runtimes/vllm.js.map +1 -0
  953. package/dist/services/settings.service.d.ts +7 -0
  954. package/dist/services/settings.service.d.ts.map +1 -0
  955. package/dist/services/settings.service.js +87 -0
  956. package/dist/services/settings.service.js.map +1 -0
  957. package/dist/services/stats.service.d.ts +104 -0
  958. package/dist/services/stats.service.d.ts.map +1 -0
  959. package/dist/services/stats.service.js +218 -0
  960. package/dist/services/stats.service.js.map +1 -0
  961. package/dist/services/system-health.service.d.ts +15 -0
  962. package/dist/services/system-health.service.d.ts.map +1 -0
  963. package/dist/services/system-health.service.js +259 -0
  964. package/dist/services/system-health.service.js.map +1 -0
  965. package/dist/services/update.service.d.ts +35 -0
  966. package/dist/services/update.service.d.ts.map +1 -0
  967. package/dist/services/update.service.js +449 -0
  968. package/dist/services/update.service.js.map +1 -0
  969. package/dist/services/usage.service.d.ts +49 -0
  970. package/dist/services/usage.service.d.ts.map +1 -0
  971. package/dist/services/usage.service.js +175 -0
  972. package/dist/services/usage.service.js.map +1 -0
  973. package/dist/services/vram-scheduler.d.ts +39 -0
  974. package/dist/services/vram-scheduler.d.ts.map +1 -0
  975. package/dist/services/vram-scheduler.js +84 -0
  976. package/dist/services/vram-scheduler.js.map +1 -0
  977. package/dist/utils/anthropic-mapper.d.ts +20 -0
  978. package/dist/utils/anthropic-mapper.d.ts.map +1 -0
  979. package/dist/utils/anthropic-mapper.js +254 -0
  980. package/dist/utils/anthropic-mapper.js.map +1 -0
  981. package/dist/utils/api-key-crypto.d.ts +10 -0
  982. package/dist/utils/api-key-crypto.d.ts.map +1 -0
  983. package/dist/utils/api-key-crypto.js +52 -0
  984. package/dist/utils/api-key-crypto.js.map +1 -0
  985. package/dist/utils/api-key-id.d.ts +13 -0
  986. package/dist/utils/api-key-id.d.ts.map +1 -0
  987. package/dist/utils/api-key-id.js +51 -0
  988. package/dist/utils/api-key-id.js.map +1 -0
  989. package/dist/utils/async-handler.d.ts +5 -0
  990. package/dist/utils/async-handler.d.ts.map +1 -0
  991. package/dist/utils/async-handler.js +9 -0
  992. package/dist/utils/async-handler.js.map +1 -0
  993. package/dist/utils/client-ip.d.ts +28 -0
  994. package/dist/utils/client-ip.d.ts.map +1 -0
  995. package/dist/utils/client-ip.js +184 -0
  996. package/dist/utils/client-ip.js.map +1 -0
  997. package/dist/utils/engine-event-parse.d.ts +24 -0
  998. package/dist/utils/engine-event-parse.d.ts.map +1 -0
  999. package/dist/utils/engine-event-parse.js +192 -0
  1000. package/dist/utils/engine-event-parse.js.map +1 -0
  1001. package/dist/utils/engine-session.d.ts +25 -0
  1002. package/dist/utils/engine-session.d.ts.map +1 -0
  1003. package/dist/utils/engine-session.js +80 -0
  1004. package/dist/utils/engine-session.js.map +1 -0
  1005. package/dist/utils/file-sniff.d.ts +16 -0
  1006. package/dist/utils/file-sniff.d.ts.map +1 -0
  1007. package/dist/utils/file-sniff.js +151 -0
  1008. package/dist/utils/file-sniff.js.map +1 -0
  1009. package/dist/utils/fs-safe.d.ts +5 -0
  1010. package/dist/utils/fs-safe.d.ts.map +1 -0
  1011. package/dist/utils/fs-safe.js +26 -0
  1012. package/dist/utils/fs-safe.js.map +1 -0
  1013. package/dist/utils/id.d.ts +7 -0
  1014. package/dist/utils/id.d.ts.map +1 -0
  1015. package/dist/utils/id.js +28 -0
  1016. package/dist/utils/id.js.map +1 -0
  1017. package/dist/utils/index.d.ts +14 -0
  1018. package/dist/utils/index.d.ts.map +1 -0
  1019. package/dist/utils/index.js +56 -0
  1020. package/dist/utils/index.js.map +1 -0
  1021. package/dist/utils/ip-match.d.ts +15 -0
  1022. package/dist/utils/ip-match.d.ts.map +1 -0
  1023. package/dist/utils/ip-match.js +133 -0
  1024. package/dist/utils/ip-match.js.map +1 -0
  1025. package/dist/utils/list-sort.d.ts +14 -0
  1026. package/dist/utils/list-sort.d.ts.map +1 -0
  1027. package/dist/utils/list-sort.js +58 -0
  1028. package/dist/utils/list-sort.js.map +1 -0
  1029. package/dist/utils/logger.d.ts +3 -0
  1030. package/dist/utils/logger.d.ts.map +1 -0
  1031. package/dist/utils/logger.js +38 -0
  1032. package/dist/utils/logger.js.map +1 -0
  1033. package/dist/utils/message-content.d.ts +24 -0
  1034. package/dist/utils/message-content.d.ts.map +1 -0
  1035. package/dist/utils/message-content.js +68 -0
  1036. package/dist/utils/message-content.js.map +1 -0
  1037. package/dist/utils/model-allowlist.d.ts +14 -0
  1038. package/dist/utils/model-allowlist.d.ts.map +1 -0
  1039. package/dist/utils/model-allowlist.js +84 -0
  1040. package/dist/utils/model-allowlist.js.map +1 -0
  1041. package/dist/utils/openai-mapper.d.ts +19 -0
  1042. package/dist/utils/openai-mapper.d.ts.map +1 -0
  1043. package/dist/utils/openai-mapper.js +182 -0
  1044. package/dist/utils/openai-mapper.js.map +1 -0
  1045. package/dist/utils/path-safe.d.ts +4 -0
  1046. package/dist/utils/path-safe.d.ts.map +1 -0
  1047. package/dist/utils/path-safe.js +49 -0
  1048. package/dist/utils/path-safe.js.map +1 -0
  1049. package/dist/utils/prisma-bytes.d.ts +8 -0
  1050. package/dist/utils/prisma-bytes.d.ts.map +1 -0
  1051. package/dist/utils/prisma-bytes.js +14 -0
  1052. package/dist/utils/prisma-bytes.js.map +1 -0
  1053. package/dist/utils/request-meta.d.ts +12 -0
  1054. package/dist/utils/request-meta.d.ts.map +1 -0
  1055. package/dist/utils/request-meta.js +26 -0
  1056. package/dist/utils/request-meta.js.map +1 -0
  1057. package/dist/utils/responses-mapper.d.ts +9 -0
  1058. package/dist/utils/responses-mapper.d.ts.map +1 -0
  1059. package/dist/utils/responses-mapper.js +56 -0
  1060. package/dist/utils/responses-mapper.js.map +1 -0
  1061. package/dist/utils/role-normalize.d.ts +9 -0
  1062. package/dist/utils/role-normalize.d.ts.map +1 -0
  1063. package/dist/utils/role-normalize.js +29 -0
  1064. package/dist/utils/role-normalize.js.map +1 -0
  1065. package/dist/utils/ssrf.d.ts +11 -0
  1066. package/dist/utils/ssrf.d.ts.map +1 -0
  1067. package/dist/utils/ssrf.js +114 -0
  1068. package/dist/utils/ssrf.js.map +1 -0
  1069. package/dist/utils/stream.d.ts +7 -0
  1070. package/dist/utils/stream.d.ts.map +1 -0
  1071. package/dist/utils/stream.js +70 -0
  1072. package/dist/utils/stream.js.map +1 -0
  1073. package/dist/utils/vision-remote.d.ts +28 -0
  1074. package/dist/utils/vision-remote.d.ts.map +1 -0
  1075. package/dist/utils/vision-remote.js +206 -0
  1076. package/dist/utils/vision-remote.js.map +1 -0
  1077. package/docs/en/README.md +25 -0
  1078. package/docs/en/admin.md +44 -0
  1079. package/docs/en/api.md +78 -0
  1080. package/docs/en/architecture.md +44 -0
  1081. package/docs/en/catalog.md +30 -0
  1082. package/docs/en/cli.md +180 -0
  1083. package/docs/en/configuration.md +52 -0
  1084. package/docs/en/development.md +49 -0
  1085. package/docs/en/getting-started.md +64 -0
  1086. package/docs/en/keys.md +30 -0
  1087. package/docs/en/media.md +38 -0
  1088. package/docs/en/operations.md +40 -0
  1089. package/docs/en/runtimes.md +20 -0
  1090. package/docs/zh/README.md +25 -0
  1091. package/docs/zh/admin.md +44 -0
  1092. package/docs/zh/api.md +78 -0
  1093. package/docs/zh/architecture.md +44 -0
  1094. package/docs/zh/catalog.md +30 -0
  1095. package/docs/zh/cli.md +180 -0
  1096. package/docs/zh/configuration.md +52 -0
  1097. package/docs/zh/development.md +49 -0
  1098. package/docs/zh/getting-started.md +62 -0
  1099. package/docs/zh/keys.md +30 -0
  1100. package/docs/zh/media.md +38 -0
  1101. package/docs/zh/operations.md +40 -0
  1102. package/docs/zh/runtimes.md +20 -0
  1103. package/package.json +108 -0
  1104. package/prisma/migrations/20260714084159_init_sqlite/migration.sql +106 -0
  1105. package/prisma/migrations/20260714090338_safe_mode_admin/migration.sql +36 -0
  1106. package/prisma/migrations/20260714120000_ip_whitelist_blacklist/migration.sql +19 -0
  1107. package/prisma/migrations/20260714220000_chat_conversations/migration.sql +22 -0
  1108. package/prisma/migrations/20260714230000_conversation_context/migration.sql +6 -0
  1109. package/prisma/migrations/20260715140000_admin_otp_session/migration.sql +29 -0
  1110. package/prisma/migrations/20260715150000_chat_jobs/migration.sql +33 -0
  1111. package/prisma/migrations/20260715161921_api_responses_assistants/migration.sql +80 -0
  1112. package/prisma/migrations/20260716060000_media_assets/migration.sql +25 -0
  1113. package/prisma/migrations/20260716070000_media_jobs/migration.sql +17 -0
  1114. package/prisma/migrations/20260813160000_grok_session_aliases/migration.sql +14 -0
  1115. package/prisma/migrations/20260924180000_api_key_allowed_models/migration.sql +2 -0
  1116. package/prisma/migrations/20260924190000_rename_grok_session_columns/migration.sql +5 -0
  1117. package/prisma/migrations/migration_lock.toml +3 -0
  1118. package/prisma/schema.prisma +391 -0
  1119. package/prisma/seed.ts +71 -0
  1120. package/public/admin/allowed-extensions.js +41 -0
  1121. package/public/admin/app.js +9980 -0
  1122. package/public/admin/assets/logo.svg +37 -0
  1123. package/public/admin/boot.js +2551 -0
  1124. package/public/admin/boot.js.map +1 -0
  1125. package/public/admin/disabled.html +131 -0
  1126. package/public/admin/i18n.js +2442 -0
  1127. package/public/admin/index.html +26 -0
  1128. package/public/admin/styles.css +5764 -0
  1129. package/public/admin/vendor/marked.min.js +6 -0
  1130. package/public/admin/vendor/purify.min.js +3 -0
  1131. package/scripts/api-audit-run.sh +52 -0
  1132. package/scripts/cli-audit-run.sh +214 -0
  1133. package/scripts/generate-allowed-extensions.cjs +23 -0
  1134. package/scripts/install.sh +34 -0
  1135. package/scripts/omni-openai-worker.mjs +144 -0
  1136. package/scripts/postinstall.cjs +5 -0
  1137. package/scripts/prepare.cjs +102 -0
  1138. package/scripts/smoke.sh +32 -0
  1139. package/scripts/start-tiny-media-worker.sh +14 -0
  1140. package/scripts/tiny-media-worker.py +491 -0
@@ -0,0 +1,2442 @@
1
+ /** Admin i18n — default: system zh* → zh-Hant, else en; manual choice wins. */
2
+ const LANG_KEY = 'gog_admin_lang';
3
+
4
+ const dict = {
5
+ en: {
6
+ brand: 'YSK Omni',
7
+ brandSub: 'Admin Panel',
8
+ loginTitle: 'Admin',
9
+ loginLabel: 'API Key',
10
+ loginOtpLabel: 'One-time login code',
11
+ loginBtn: 'Sign in',
12
+ loginCmdHint: 'Get a key in terminal:',
13
+ loginOtpHint: 'Generate a code in terminal (required every login):',
14
+ loginOtpExpiry: 'Code expires in 5 minutes and can be used only once.',
15
+ loginOtpFail: 'Invalid or expired code',
16
+ loginLostKey: 'Lost old key? Create a new admin key (plaintext is not stored).',
17
+ loginCopy: 'Copy',
18
+ loginCopied: 'Copied',
19
+ needKey: 'Enter API key',
20
+ needOtp: 'Enter the one-time code from the terminal',
21
+ logout: 'Log out',
22
+ shell: {
23
+ menu: 'Open menu',
24
+ closeMenu: 'Close menu',
25
+ },
26
+ nav: {
27
+ dashboard: 'Dashboard',
28
+ chat: 'Chat',
29
+ chats: 'Chat logs',
30
+ keys: 'API Keys',
31
+ documents: 'Documents',
32
+ media: 'Media',
33
+ audit: 'Audit Logs',
34
+ settings: 'Safety',
35
+ apiFeatures: 'API features',
36
+ usage: 'Usage & Limits',
37
+ ddos: 'DDoS Center',
38
+ queue: 'Queue',
39
+ pm2: 'PM2',
40
+ system: 'System',
41
+ },
42
+ queue: {
43
+ title: 'Chat queue',
44
+ subtitle: 'Pause, drain, requeue, and tune concurrency.',
45
+ paused: 'Paused',
46
+ running: 'Consuming',
47
+ drain: 'Drain mode',
48
+ mode: 'Mode',
49
+ modeOff: 'Disabled',
50
+ depth: 'Depth',
51
+ queued: 'Queued',
52
+ leased: 'Leased',
53
+ activeJobs: 'Running',
54
+ dead: 'Dead letter',
55
+ oldest: 'Oldest wait',
56
+ concurrency: 'Per-key / global',
57
+ worker: 'In-process workers',
58
+ workerInstance: 'Worker instance',
59
+ workerInstanceHint: 'This process’s consumer ID (lease owner). Changes on restart.',
60
+ kpiActiveSub: '{n} active in this process',
61
+ consumer: 'Consumer',
62
+ admission: 'Admission',
63
+ accepting: 'Accepting jobs',
64
+ pause: 'Pause',
65
+ resume: 'Resume',
66
+ drainBtn: 'Drain',
67
+ undrain: 'Stop drain',
68
+ savePolicy: 'Save policy',
69
+ refresh: 'Refresh',
70
+ jobs: 'Jobs',
71
+ tabOverview: 'Overview',
72
+ tabJobs: 'Jobs',
73
+ tabPolicy: 'Policy',
74
+ jobsMeta: '{n} matching',
75
+ cancel: 'Cancel',
76
+ requeue: 'Requeue',
77
+ purgeDead: 'Purge DLQ & old jobs',
78
+ purgeTitle: 'Purge finished jobs?',
79
+ purgeConfirm:
80
+ 'Deletes all dead-letter (DLQ) jobs now, plus succeeded / failed / cancelled jobs finished more than 24 hours ago.',
81
+ purgeConfirmBtn: 'Delete',
82
+ purgeDoneTitle: 'Purge complete',
83
+ purgeDoneMsg: 'Deleted {n} job(s).',
84
+ cancelConfirm: 'Cancel this job? If it is running, cancellation is cooperative.',
85
+ empty: 'No jobs match this filter',
86
+ enabled: 'Queue enabled',
87
+ masterOn: 'Queue on',
88
+ masterOff: 'Queue off',
89
+ masterHint: 'Master switch for the durable chat queue. Applies immediately.',
90
+ disabledBanner:
91
+ 'Queue is disabled — new chat requests bypass the queue and run immediately (subject to concurrency limits).',
92
+ globalConcurrency: 'Global concurrency',
93
+ perKeyConcurrency: 'Per-key concurrency',
94
+ maxDepth: 'Max queue depth',
95
+ maxDepthKey: 'Max per key',
96
+ fairness: 'Fairness',
97
+ fifo: 'Global FIFO',
98
+ wrr: 'Weighted round-robin',
99
+ playgroundPriority: 'Playground priority (lower first)',
100
+ defaultPriority: 'Default priority',
101
+ leaseMs: 'Lease (ms)',
102
+ maxWaitMs: 'Max wait (ms)',
103
+ filterTitle: 'Filter jobs',
104
+ filterHint: 'Filter by status. Auto-refreshes.',
105
+ filterStatus: 'Status',
106
+ allStatuses: 'All statuses',
107
+ filterDead: 'Dead letter (DLQ)',
108
+ filterQueued: 'Queued',
109
+ filterRunning: 'Running / leased',
110
+ filterFailed: 'Failed',
111
+ filterSucceeded: 'Succeeded',
112
+ filterCancelled: 'Cancelled',
113
+ errorCol: 'Error',
114
+ priorityBtn: 'Priority',
115
+ priorityPh: 'Priority (0–1000, lower first)',
116
+ dlqTitle: 'Dead letter queue',
117
+ dlqHint: 'Jobs that exhausted retries — requeue or purge when ready.',
118
+ viewDlq: 'View DLQ',
119
+ statusPanel: 'Runtime status',
120
+ statusPanelHint: 'Live consumer, admission, and worker identity. Auto-refreshes every few seconds.',
121
+ policyTitle: 'Queue policy',
122
+ policyHint: 'Pick a scheme or fine-tune values. Save to apply. Editing pauses auto-refresh.',
123
+ presetTitle: 'Policy schemes',
124
+ presetHint: 'One-click presets. Active = matches form · Saved = currently stored.',
125
+ presetRelaxed: 'Relaxed',
126
+ presetBalanced: 'Balanced',
127
+ presetStrict: 'Strict',
128
+ presetCustom: 'Custom',
129
+ presetRelaxedHint:
130
+ 'Higher concurrency and deeper queues — better for multi-key playgrounds and burst traffic.',
131
+ presetBalancedHint:
132
+ 'Default production balance: fair round-robin, moderate depth, one job per key.',
133
+ presetStrictHint:
134
+ 'Tight limits + global FIFO — protects the host when traffic is untrusted or resource is scarce.',
135
+ presetCustomHint: 'Values do not match a built-in scheme. Adjust fields or pick a scheme above.',
136
+ presetActiveLabel: 'Active: {name}',
137
+ presetFormLabel: 'Draft: {name}',
138
+ presetTagActive: 'Active',
139
+ presetTagDraft: 'Draft',
140
+ presetTagSaved: 'Saved',
141
+ hintGlobalConc: 'Max jobs running at once across all keys',
142
+ hintPerKeyConc: 'Max concurrent jobs for a single API key',
143
+ hintMaxDepth: 'Reject new jobs when total queue is full',
144
+ hintMaxDepthKey: 'Reject when this key has too many waiting/running jobs',
145
+ hintFairness: 'WRR shares capacity across keys; FIFO is global order by priority/time',
146
+ hintLease: 'How long a worker holds a job before reclaim',
147
+ hintMaxWait: 'Client wait timeout while queued',
148
+ colJob: 'Job / request',
149
+ colSource: 'Source',
150
+ colStatus: 'Status',
151
+ colModel: 'Model',
152
+ colPri: 'Pri',
153
+ colKey: 'API key',
154
+ colTry: 'Try',
155
+ colTime: 'Queued',
156
+ stQueued: 'queued',
157
+ stLeased: 'leased',
158
+ stRunning: 'running',
159
+ stSucceeded: 'succeeded',
160
+ stFailed: 'failed',
161
+ stDead: 'dead',
162
+ stCancelled: 'cancelled',
163
+ srcV1: 'API',
164
+ srcPlayground: 'Playground',
165
+ kpiDepthSub: '{q} queued · {l} leased',
166
+ kpiQueuedSub: 'Waiting for a worker',
167
+ kpiDeadSub: 'Exhausted attempts',
168
+ kpiOldestSub: 'Head of queue wait',
169
+ wait: 'Wait',
170
+ started: 'Started',
171
+ cancelReq: 'Cancel requested',
172
+ },
173
+ chat: {
174
+ title: 'Chat',
175
+ new: 'New chat',
176
+ send: 'Send',
177
+ stop: 'Stop',
178
+ stopped: 'stopped',
179
+ placeholder: 'Message… (Enter to send, Shift+Enter newline)',
180
+ keyMode: 'API key',
181
+ keySelect: 'API key',
182
+ useSessionKey: 'Signed-in admin key',
183
+ useCustomKey: 'Custom key',
184
+ customKey: 'Key',
185
+ includeReasoning: 'Show reasoning',
186
+ reasoning: 'Thinking',
187
+ needKey: 'Enter or select an API key',
188
+ attach: 'Upload',
189
+ attachLibrary: 'From library',
190
+ attachHint: 'Drop files anywhere on this page, upload, or pick from library',
191
+ dropTitle: 'Drop files to attach',
192
+ dropHint: 'Release to upload — same formats as the attach button',
193
+ formatsLabel: 'Formats',
194
+ formatsHint:
195
+ 'txt, md, csv, json, xml, html, pdf, images (png/jpg/webp/gif), code (js/ts/py/go/rs/java/c/cpp/css/yml/sql/sh…)',
196
+ formatsReject: 'Unsupported type: {name}. Allowed: {formats}',
197
+ libraryTitle: 'Previously uploaded files',
198
+ librarySubtitle: 'Select files owned by the current API key (same formats as upload).',
199
+ librarySearch: 'Search by name…',
200
+ libraryEmpty: 'No matching files for this key',
201
+ libraryAdd: 'Add selected',
202
+ librarySelected: '{n} selected',
203
+ libraryAlready: 'Already attached',
204
+ libraryLoadFail: 'Could not load documents',
205
+ uploading: 'Uploading…',
206
+ uploadFail: 'Upload failed',
207
+ uploadProgress: 'Uploading {name}',
208
+ uploadProgressMulti: 'Uploading {name} ({i}/{n})',
209
+ emptyTitle: 'Start a conversation',
210
+ emptyHint:
211
+ 'Send a message or attach files. Choose an image, video, or speech model to generate media in the conversation.',
212
+ needContent: 'Type a message or attach at least one file',
213
+ tooManyFiles: 'Too many files (max 10 per message)',
214
+ fileOnlyPrompt: 'Please review the attached files.',
215
+ removeFile: 'Remove',
216
+ docs: 'Attachments',
217
+ you: 'You',
218
+ assistant: 'Assistant',
219
+ streaming: 'Streaming…',
220
+ emptyReply: '(empty reply)',
221
+ systemPrompt: 'System prompt',
222
+ systemPlaceholder: 'Optional system instructions for the model…',
223
+ systemHint: 'Sent as a system message on every turn. Not shown in the chat bubbles.',
224
+ history: 'History',
225
+ historyEmpty: 'No saved conversations yet',
226
+ historySearch: 'Search topics…',
227
+ historyOpen: 'Show history',
228
+ historyClose: 'Close history',
229
+ rename: 'Rename',
230
+ renamePh: 'Conversation topic',
231
+ untitled: 'Untitled chat',
232
+ deleteConversation: 'Delete',
233
+ deleteConfirm: 'Delete this conversation? This cannot be undone.',
234
+ saveFail: 'Could not save conversation',
235
+ loadFail: 'Could not load conversation',
236
+ historyPrev: 'Previous',
237
+ historyNext: 'Next',
238
+ historyPage: 'Page {n} / {total}',
239
+ msgs: '{n} messages',
240
+ compress: 'Summarize for context',
241
+ compressConfirm:
242
+ 'Generate a conversation summary for later turns? Your full chat history stays on screen. Only the model context is shortened. This uses one model call.',
243
+ compressing: 'Summarizing…',
244
+ compressNeedMore:
245
+ 'Need at least 3 messages (or 2 long ones) to summarize. Continue chatting, then try again.',
246
+ compressFail: 'Could not create summary',
247
+ compressNeedSummary: 'Create a summary first (Summarize for context).',
248
+ compressedBadge: 'Summary',
249
+ compressOk: 'Summary ready — full history kept. Context mode set to summary.',
250
+ compressBusy: 'Wait for the current reply to finish',
251
+ compressResultTitle: 'Conversation summary',
252
+ compressView: 'View summary',
253
+ summaryMeta: 'Created: {when} · Based on {n} messages',
254
+ ctxPolicyTitle: 'Model context',
255
+ ctxRemark:
256
+ 'Full messages stay visible. This only controls what is sent to the model next.',
257
+ ctxMode: 'Context',
258
+ ctxModeFull: 'Full history',
259
+ ctxModeSummary: 'Summary + recent',
260
+ ctxModeRecent: 'Recent only',
261
+ ctxModeFullLabel: 'Sending full history to the model',
262
+ ctxModeSummaryLabel: 'Sending summary + last {n} messages',
263
+ ctxModeRecentLabel: 'Sending last {n} messages only',
264
+ ctxRecentN: 'Recent N',
265
+ ctxLongHint:
266
+ 'Long thread detected — consider Summary or Recent to reduce tokens and lag.',
267
+ loadOlder: 'Load {n} earlier messages',
268
+ showMore: 'Show more',
269
+ showLess: 'Show less',
270
+ copy: 'Copy',
271
+ copied: 'Copied',
272
+ copyFail: 'Copy failed',
273
+ },
274
+ status: {
275
+ success: 'success',
276
+ error: 'error',
277
+ timeout: 'timeout',
278
+ pending: 'pending',
279
+ active: 'active',
280
+ finished: 'finished',
281
+ online: 'online',
282
+ stopped: 'stopped',
283
+ },
284
+ dash: {
285
+ title: 'Dashboard',
286
+ subtitle: 'Traffic, queue, safety, and protection at a glance.',
287
+ last24: 'Requests (24h)',
288
+ totalChat: 'Total chats',
289
+ success: 'Success',
290
+ errors: 'Errors / timeout',
291
+ docs: 'Documents',
292
+ keys: 'Active keys',
293
+ concurrent: 'Grok concurrency',
294
+ recent: 'Recent API chats',
295
+ empty: 'No data yet',
296
+ emptyModels: 'No model traffic in the last 24h',
297
+ updated: 'Updated',
298
+ refresh: 'Refresh',
299
+ viewAll: 'View all',
300
+ openDdos: 'DDoS center',
301
+ openSettings: 'Safety',
302
+ openQueue: 'Open queue',
303
+ kpi24h: 'Requests (24h)',
304
+ kpi24hSub: '{ok} ok · {err} errors',
305
+ kpiSuccessRate: 'Success rate (24h)',
306
+ kpiSuccessRateSub: 'All-time {all}%',
307
+ kpiErrors: 'Errors (24h)',
308
+ kpiErrorsSub: 'All-time {all}',
309
+ kpiKeys: 'API keys',
310
+ kpiKeysSub: 'Active / total',
311
+ kpiDocs: 'Documents',
312
+ kpiMedia: 'Media assets',
313
+ kpiMediaSub: '{n} in 24h',
314
+ kpiDocsSub: 'Stored files',
315
+ kpiConv: 'Playground threads',
316
+ kpiConvSub: '{n} updated in 24h',
317
+ kpiSessions: 'OTP sessions',
318
+ kpiSessionsSub: 'Active admin logins',
319
+ kpiConcurrent: 'Grok concurrency',
320
+ kpiConcurrentSub: 'Active / max slots',
321
+ kpiQueue: 'Chat queue',
322
+ kpiQueueSub: 'Depth · running / max · dead',
323
+ kpiQueueSubLive: '{run}/{max} run · {dead} dead{wait}',
324
+ kpiQueuePaused: 'Paused',
325
+ kpiQueueDrain: 'Drain',
326
+ kpiQueueOff: 'Disabled',
327
+ kpiSafe: 'Global safe',
328
+ kpiSafeOn: 'On',
329
+ kpiSafeOff: 'Off',
330
+ kpiSafeSub: '{tools} · turns {turns} · {model}',
331
+ kpiSafeSubEmpty: 'Settings unavailable',
332
+ queuePanel: 'Chat queue',
333
+ queueState: 'State',
334
+ queueLive: 'Live',
335
+ qQueued: 'Queued',
336
+ qRunning: 'Running',
337
+ qDead: 'Dead',
338
+ qSucceeded: 'Succeeded',
339
+ qWorker: 'Worker',
340
+ qWorkerActive: 'active slots',
341
+ qOldest: 'oldest wait',
342
+ qUnavailable: 'Queue stats unavailable',
343
+ safety: 'Safety settings',
344
+ globalSafe: 'Global safe mode',
345
+ safeTools: 'Tools',
346
+ safeTurns: 'Max turns',
347
+ safeTimeout: 'Timeout',
348
+ defaultModel: 'Default model',
349
+ safetyHint:
350
+ 'Affects safe-mode keys and forced-safe traffic. Playground OTP sessions use agent mode unless global safe is on.',
351
+ protection: 'Protection',
352
+ autoBan: 'Auto-ban',
353
+ on: 'On',
354
+ off: 'Off',
355
+ ruleAuth: 'Auth',
356
+ ruleRate: '429',
357
+ ruleConn: 'Conn',
358
+ ruleVelocity: 'Velocity',
359
+ bans: 'Blacklist',
360
+ blocked: 'Blocked hits',
361
+ rateHits: 'Rate-limit hits',
362
+ liveConn: 'Live connections',
363
+ proxy: 'Proxy IP',
364
+ hops: 'hops',
365
+ limits: 'Key/IP limits',
366
+ models24h: 'Models (24h)',
367
+ runtime: 'Runtime',
368
+ port: 'Listen port',
369
+ defaultPort: 'default',
370
+ env: 'Environment',
371
+ authMode: 'Admin auth',
372
+ authOtp: 'OTP session',
373
+ encryption: 'Encryption',
374
+ ready: 'Ready',
375
+ notReady: 'Not ready',
376
+ },
377
+ chats: {
378
+ title: 'Chat history',
379
+ total: 'Total',
380
+ decrypt: 'Open a row to view decrypted content.',
381
+ search: 'Search',
382
+ searchPh: 'Request ID, key name, model…',
383
+ filterTitle: 'Search & filters',
384
+ filterHint: 'Filter, then open a row for full detail.',
385
+ status: 'Status',
386
+ allStatus: 'All statuses',
387
+ model: 'Model',
388
+ allModels: 'All models',
389
+ apiKey: 'API key',
390
+ allKeys: 'All keys',
391
+ from: 'From',
392
+ to: 'To',
393
+ mode: 'Mode',
394
+ allModes: 'All modes',
395
+ hasDocs: 'Has attachments',
396
+ filter: 'Apply filters',
397
+ reset: 'Reset',
398
+ request: 'Request',
399
+ prompt: 'Prompt',
400
+ response: 'Response',
401
+ time: 'Time',
402
+ attachments: 'Attachments',
403
+ page: 'Page',
404
+ prev: 'Previous',
405
+ next: 'Next',
406
+ perPage: 'Per page',
407
+ detail: 'Chat detail',
408
+ noAttach: 'No attachments',
409
+ openFile: 'Open / preview',
410
+ close: 'Close',
411
+ copyPrompt: 'Copy prompt',
412
+ copyContent: 'Copy content',
413
+ copySystem: 'Copy system prompt',
414
+ copyRawPrompt: 'Copy raw prompt',
415
+ duration: 'Duration',
416
+ stream: 'Stream',
417
+ reasoning: 'Reasoning / thought',
418
+ content: 'Content (output)',
419
+ raw: 'Raw stored response',
420
+ rawPrompt: 'Raw stored prompt',
421
+ userPrompt: 'User / conversation prompt',
422
+ systemPrompt: 'System prompt',
423
+ systemHint: 'Extracted from the stored prompt (system role messages).',
424
+ noSystem: 'No system prompt in this request.',
425
+ hasSystem: 'Has system',
426
+ none: '(none)',
427
+ file: 'file',
428
+ img: 'img',
429
+ previewFailed: 'Preview failed',
430
+ },
431
+ keys: {
432
+ title: 'API Keys',
433
+ new: 'New key',
434
+ searchPh: 'Name or key prefix…',
435
+ name: 'Name',
436
+ role: 'Role',
437
+ mode: 'Mode',
438
+ rate: 'Rate / min',
439
+ status: 'Status',
440
+ created: 'Created',
441
+ edit: 'Edit',
442
+ revoke: 'Revoke',
443
+ confirmRevoke: 'Revoke this key?',
444
+ empty: 'No keys',
445
+ usage24: '24h use',
446
+ maxTurns: 'Max turns',
447
+ timeoutMs: 'Timeout (ms)',
448
+ ipWhitelist: 'IP whitelist',
449
+ ipWhitelistHint: 'One IP or CIDR per line. Empty = allow all IPs.',
450
+ ipWhitelistCol: 'IP allow',
451
+ ipAll: 'All IPs',
452
+ keyOnce: 'Store this key securely — shown once:',
453
+ roleClient: 'client',
454
+ roleAdmin: 'admin',
455
+ roleClientBadge: 'client',
456
+ roleAdminBadge: 'admin',
457
+ modeSafe: 'safe (external)',
458
+ modeAgent: 'agent (full tools)',
459
+ modeSafeBadge: 'safe',
460
+ modeAgentBadge: 'agent',
461
+ ipCount: '{n} IPs',
462
+ ipPlaceholder: '127.0.0.1\n203.0.113.0/24',
463
+ allowedModels: 'Allowed models',
464
+ allowedModelsHint: 'Select models this key may use. Empty = no restriction. Users list them with GET /v1/models.',
465
+ allowedModelsCol: 'Models',
466
+ modelsAll: 'All models',
467
+ modelsCount: '{n} models',
468
+ modelsExtra: 'Additional model ids',
469
+ modelsExtraHint: 'One model id per line for ids not listed above.',
470
+ modelsPlaceholder: 'org/repo:Q4_K_M',
471
+ },
472
+ docs: {
473
+ title: 'Documents',
474
+ total: 'Total',
475
+ file: 'File',
476
+ mime: 'MIME',
477
+ size: 'Size',
478
+ time: 'Time',
479
+ storage: 'Storage',
480
+ storageDb: 'Database (encrypted)',
481
+ storageFs: 'Filesystem (encrypted)',
482
+ storageHint:
483
+ 'Encrypted storage · DB under {dbMax}, files in {dir} · max {upMax}.',
484
+ download: 'Download',
485
+ downloadFail: 'Download failed',
486
+ binaryPreview:
487
+ 'This is a binary file (e.g. PDF). Preview is not available — please use Download.',
488
+ delete: 'Delete',
489
+ confirmDel: 'Delete this document?',
490
+ detail: 'Document detail',
491
+ preview: 'Preview',
492
+ copy: 'Copy content',
493
+ empty: 'No documents',
494
+ searchPh: 'File name or MIME…',
495
+ page: 'Page',
496
+ prev: 'Previous',
497
+ next: 'Next',
498
+ },
499
+ audit: {
500
+ title: 'Audit logs',
501
+ searchPh: 'Action, resource, IP, key…',
502
+ time: 'Time',
503
+ action: 'Action',
504
+ resource: 'Resource',
505
+ key: 'Key',
506
+ meta: 'Meta',
507
+ empty: 'No logs',
508
+ id: 'ID',
509
+ // keys use _ instead of . so t('audit.actions.xxx') path lookup works
510
+ actions: {
511
+ chat_create: 'Chat create',
512
+ document_upload: 'Document upload',
513
+ document_delete: 'Document delete',
514
+ document_list: 'Document list',
515
+ document_read: 'Document read',
516
+ document_download: 'Document download',
517
+ api_key_create: 'API key create',
518
+ api_key_update: 'API key update',
519
+ api_key_delete: 'API key revoke',
520
+ api_key_list: 'API key list',
521
+ settings_update: 'Settings update',
522
+ chat_admin_view: 'Chat admin view',
523
+ system_update: 'System update',
524
+ system_update_check: 'Update check',
525
+ ip_ban: 'IP ban',
526
+ ip_unban: 'IP unban',
527
+ ddos_policy_update: 'DDoS policy update',
528
+ pm2_start: 'PM2 start',
529
+ pm2_stop: 'PM2 stop',
530
+ pm2_restart: 'PM2 restart',
531
+ pm2_reload: 'PM2 reload',
532
+ pm2_config: 'PM2 config',
533
+ pm2_switch: 'PM2 switch runner',
534
+ playground_chat: 'Playground chat',
535
+ playground_upload: 'Playground upload',
536
+ },
537
+ resources: {
538
+ document: 'Document',
539
+ chat: 'Chat',
540
+ api_key: 'API key',
541
+ settings: 'Settings',
542
+ system: 'System',
543
+ pm2: 'PM2',
544
+ playground: 'Playground',
545
+ ip: 'IP',
546
+ },
547
+ metaStorage: 'Storage',
548
+ metaAsKey: 'As key id',
549
+ metaAsKeyName: 'As key name',
550
+ },
551
+ settings: {
552
+ title: 'Safety settings',
553
+ hint: 'Global safe mode for all keys.',
554
+ globalSafe: 'Global safe mode',
555
+ globalSafeHint: 'On = all keys safe. Off = each key’s own mode.',
556
+ masterOn: 'Safe mode on',
557
+ masterOff: 'Safe mode off',
558
+ disabledBanner: 'Global safe is off — keys use their own safe/agent mode.',
559
+ tools: 'Tools mode',
560
+ toolsHint: 'none: no shell/web/write. readonly: read/search only.',
561
+ toolsNone: 'none',
562
+ toolsReadonly: 'readonly',
563
+ maxTurns: 'Max turns',
564
+ maxTurnsHint: 'Safe-mode steps. Chat 3–6 · API 8–12 · multi-step 15–40.',
565
+ timeout: 'Timeout (ms)',
566
+ timeoutHint: 'Safe-mode deadline. 60s–120s normal · 300s–600s long jobs.',
567
+ defaultModel: 'Default model',
568
+ defaultModelHint: 'When client omits model.',
569
+ modelSource: 'Grok CLI',
570
+ refreshModels: 'Refresh models',
571
+ panel: 'Admin Panel',
572
+ save: 'Save',
573
+ saved: 'Saved',
574
+ guideTitle: 'Presets',
575
+ guideIntro: 'Apply, then tweak if needed.',
576
+ guideApply: 'Apply',
577
+ guideActive: 'Applied',
578
+ guideApplyConfirm: 'Apply “{name}” and save? Current values will be replaced.',
579
+ guideApplied: 'Preset saved',
580
+ chipGlobalOn: 'Safe: On',
581
+ chipGlobalOff: 'Safe: Off',
582
+ scLocalTitle: 'Local playground',
583
+ scLocalDesc: 'Full tools on your machine.',
584
+ scLocalDetail: 'Safe OFF · agent keys.',
585
+ scProdTitle: 'Public API',
586
+ scProdDesc: 'Least privilege for apps/customers.',
587
+ scProdDetail: 'Safe ON · tools none · turns 8–12 · 60–120s.',
588
+ scCodeTitle: 'Coding agent',
589
+ scCodeDesc: 'Trusted host only — edit & run.',
590
+ scCodeDetail: 'Safe OFF · agent keys.',
591
+ scReadTitle: 'Read-only',
592
+ scReadDesc: 'Explain/search code, no writes.',
593
+ scReadDetail: 'Safe ON · tools readonly · turns 8–15 · 120–180s.',
594
+ scChatTitle: 'Q&A only',
595
+ scChatDesc: 'Text answers, no tools.',
596
+ scChatDetail: 'Safe ON · tools none · turns 3–6 · 60s.',
597
+ scLongTitle: 'Long safe tasks',
598
+ scLongDesc: 'Many steps without max-turns fail.',
599
+ scLongDetail: 'Safe ON · none/readonly · turns 20–40 · 300–600s.',
600
+ dangerTitle: 'Danger zone',
601
+ disablePanel: 'Disable Admin Panel',
602
+ disablePanelConfirm:
603
+ 'Disable panel and sign out? Re-enable: ysk-omni admin on',
604
+ disablePanelDone: 'Panel disabled. Re-enable: ysk-omni admin on',
605
+ panelOffHint: 'Turn off here. Re-enable on server: ysk-omni admin on',
606
+ panelStatus: 'Status',
607
+ panelOn: 'On',
608
+ panelOff: 'Off',
609
+ },
610
+ apiFeatures: {
611
+ title: 'API features',
612
+ intro: 'Toggle protocols & capabilities · applies in ~2s · no restart.',
613
+ tabProtocols: 'Protocols',
614
+ tabMedia: 'Media',
615
+ tabCaps: 'Capabilities',
616
+ tabEmu: 'Emulation',
617
+ kpiEnabled: 'Enabled',
618
+ kpiEnabledSub: 'Flags currently on',
619
+ groupMeta: '{on} / {n} enabled',
620
+ groupProtocols: 'Protocol surfaces',
621
+ groupMedia: 'Media APIs (OpenAI-compatible)',
622
+ groupCaps: 'Grok CLI capabilities',
623
+ groupEmu: 'Emulation & safety',
624
+ presetOpen: 'Preset: Open',
625
+ presetLocked: 'Preset: Locked',
626
+ presetDev: 'Preset: Dev',
627
+ presetConfirm:
628
+ 'Apply feature preset “{name}”? This overwrites all API feature flags.',
629
+ flag: {
630
+ openaiChat: 'OpenAI Chat Completions',
631
+ openaiResponses: 'OpenAI Responses',
632
+ anthropicMessages: 'Anthropic Messages',
633
+ imagesApi: 'Images API',
634
+ filesOpenAiAlias: 'Files API alias',
635
+ videoApi: 'Videos API (async jobs)',
636
+ audioApi: 'Audio API (speech / STT)',
637
+ tools: 'Tools / function calling',
638
+ structuredOutput: 'Structured output (--json-schema)',
639
+ vision: 'Vision / image parts (--prompt-json)',
640
+ reasoningEffort: 'Reasoning effort',
641
+ webSearch: 'Web search tools',
642
+ subagents: 'Subagents',
643
+ planMode: 'Plan mode',
644
+ memory: 'Cross-session memory',
645
+ sessionResume: 'Session resume / continue',
646
+ bestOfN: 'best-of-n',
647
+ checkLoop: 'Self-check loop',
648
+ systemOverride: 'System prompt override',
649
+ rules: 'Extra rules',
650
+ permissionMode: 'Permission mode',
651
+ sandbox: 'Sandbox profile',
652
+ usageEstimate: 'Estimate token usage',
653
+ assistantsEmulation: 'Assistants-lite (local)',
654
+ strictSampling: 'Strict sampling (reject temperature…)',
655
+ forceDisableToolsInSafe: 'Force tool limits in safe mode',
656
+ },
657
+ hint: {
658
+ openaiChat: 'POST /v1/chat/completions',
659
+ openaiResponses: 'POST /v1/responses',
660
+ anthropicMessages: 'POST /v1/messages',
661
+ imagesApi: 'POST /v1/images/generations + /edits (agent key)',
662
+ filesOpenAiAlias: 'POST/GET /v1/files → documents + media store',
663
+ videoApi: 'POST /v1/videos + poll GET /v1/videos/:id',
664
+ audioApi: 'POST /v1/audio/speech + /transcriptions (needs provider)',
665
+ tools: 'Maps tools → Grok --tools + system tool list',
666
+ structuredOutput: 'response_format / json_schema',
667
+ vision: 'image_url content parts',
668
+ reasoningEffort: '--reasoning-effort',
669
+ webSearch: 'When off: --disable-web-search',
670
+ subagents: '--no-subagents when off',
671
+ planMode: '--no-plan when off',
672
+ memory: '--experimental-memory',
673
+ sessionResume: '--resume / --continue',
674
+ bestOfN: '--best-of-n (headless)',
675
+ checkLoop: '--check',
676
+ systemOverride: '--system-prompt-override',
677
+ rules: '--rules',
678
+ permissionMode: '--permission-mode',
679
+ sandbox: '--sandbox',
680
+ usageEstimate: 'Fill usage with char/4 estimates',
681
+ assistantsEmulation: 'Local /v1/assistants + /v1/threads',
682
+ strictSampling: '400 if temperature/top_p/stop sent',
683
+ forceDisableToolsInSafe: 'Keep safe-mode tool policy',
684
+ },
685
+ },
686
+ media: {
687
+ title: 'Media library',
688
+ intro: 'Studio, assets, and video jobs. Needs imagesApi / tools (videoApi for video).',
689
+ tabStudio: 'Studio',
690
+ tabAssets: 'Assets',
691
+ tabJobs: 'Jobs',
692
+ kpiAssetsSub: 'Stored media files',
693
+ kpiJobsSub: 'Video generation jobs',
694
+ kpiStudioSub: 'Generate, edit, or image-to-video',
695
+ assets: 'Assets',
696
+ jobs: 'Video jobs',
697
+ empty: 'No media assets yet',
698
+ jobsEmpty: 'No video jobs yet',
699
+ kind: 'Kind',
700
+ bytes: 'Size',
701
+ provider: 'Provider',
702
+ providerPh: 'Provider name…',
703
+ prompt: 'Prompt',
704
+ created: 'Created',
705
+ status: 'Status',
706
+ preview: 'Preview',
707
+ previewUnsupported: 'This format cannot be previewed in the browser. Please download the file.',
708
+ previewFail: 'Failed to load preview',
709
+ previewTruncated: 'preview truncated',
710
+ download: 'Download',
711
+ delete: 'Delete',
712
+ deleteConfirm: 'Soft-delete this media asset?',
713
+ allKinds: 'All kinds',
714
+ searchPh: 'Prompt, filename, MIME, provider, or ID…',
715
+ from: 'From',
716
+ to: 'To',
717
+ generate: 'Generate image',
718
+ generateTitle: 'Generate image',
719
+ studioTitle: 'Media studio',
720
+ studioHint:
721
+ 'Create images, edit existing images, or start image-to-video jobs. Execution limits follow Safety settings. Requires imagesApi and tools (videoApi for video).',
722
+ generateHint:
723
+ 'Uses Grok Imagine tools (image_gen, image_edit, image_to_video).',
724
+ generatePrompt: 'Prompt',
725
+ generatePromptPh: 'Describe the image you want to create…',
726
+ generateSize: 'Size',
727
+ aspectRatio: 'Aspect ratio',
728
+ aspectHint: 'Grok Imagine aspect_ratio values (not OpenAI pixel sizes)',
729
+ generateN: 'Count',
730
+ nHint: 'Grok does not batch n; the gateway runs sequential generations (1–4)',
731
+ generateKey: 'API key',
732
+ generateKeySession: 'Signed-in admin session',
733
+ generateSubmit: 'Generate',
734
+ generateBusy: 'Generating… this may take a minute',
735
+ generateOk: 'Image generated. See the assets list below.',
736
+ generateFail: 'Image generation failed',
737
+ generateNeedPrompt: 'Please enter a prompt',
738
+ modeGenerate: 'Generate',
739
+ modeEdit: 'Edit',
740
+ modeVideo: 'Video',
741
+ modelDefault: 'system default',
742
+ modelEmpty: 'No models reported by Grok CLI',
743
+ modelHint: 'All models from the local Grok CLI; system default is pre-selected',
744
+ editSubmit: 'Edit image',
745
+ editBusy: 'Editing…',
746
+ editOk: 'Image edited. See the assets list below.',
747
+ editNeedImage: 'Select or drop a source image to edit',
748
+ editImage: 'Source image',
749
+ editImageHint: 'Required for image_edit',
750
+ editPromptPh: 'Describe the changes to apply…',
751
+ videoSubmit: 'Create video job',
752
+ videoBusy: 'Queuing video job…',
753
+ videoOk: 'Video job queued. See the Jobs tab.',
754
+ videoDuration: 'Duration',
755
+ videoDurationHint: 'Grok image_to_video supports 6s or 10s only',
756
+ videoSource: 'Source frame (optional)',
757
+ videoSourceHint:
758
+ 'Optional. If omitted, a frame is generated from the prompt first, then animated.',
759
+ videoNoSource: 'Auto-generate frame from prompt',
760
+ videoPromptPh: 'Describe camera motion and the shot…',
761
+ sourceTitle: 'Source image',
762
+ sourceHint:
763
+ 'Drag and drop an image, choose a local file, or pick any image from Documents or Media assets.',
764
+ dropzoneAria: 'Drop zone for source image',
765
+ dropTitle: 'Drop an image here',
766
+ dropHint: 'Or choose a local file / pick from the system library',
767
+ dropTitleVideo: 'Drop a source frame (optional)',
768
+ dropHintVideo:
769
+ 'Optional for video. Empty source generates a frame from the prompt first.',
770
+ pickFile: 'Choose file',
771
+ pickLibrary: 'System library',
772
+ clearSource: 'Clear',
773
+ sourceNeedImage: 'Please provide an image file (PNG, JPEG, WebP, GIF…)',
774
+ sourceKindUpload: 'Upload',
775
+ sourceKindAsset: 'Media asset',
776
+ sourceKindDocument: 'Document',
777
+ libraryTitle: 'Select source file',
778
+ librarySubtitle:
779
+ 'Any image stored in Documents or Media assets on this gateway.',
780
+ libraryTabDocs: 'Documents',
781
+ libraryTabAssets: 'Media assets',
782
+ librarySearch: 'Search by name, MIME, or ID…',
783
+ libraryFormats: 'Images only (PNG, JPEG, WebP, GIF, …)',
784
+ libraryEmpty: 'No matching files',
785
+ librarySelect: 'Use selected',
786
+ libraryLoadFail: 'Failed to load library',
787
+ },
788
+ usage: {
789
+ title: 'Usage & anti-abuse',
790
+ window: 'Window',
791
+ requests: 'Requests',
792
+ success: 'Success',
793
+ errors: 'Errors',
794
+ errorRate: 'Error rate',
795
+ byModel: 'By model',
796
+ byKey: 'Per API key',
797
+ rateLimit: 'Limit / min',
798
+ util: 'Est. utilization',
799
+ limits: 'Gateway limits',
800
+ global: 'Global max / window',
801
+ ipMax: 'Unauth IP max',
802
+ burst: 'Chat burst (10s)',
803
+ block: 'Auth fail block threshold',
804
+ concurrent: 'Grok max concurrent',
805
+ refresh: 'Refresh',
806
+ },
807
+ ddos: {
808
+ title: 'DDoS control center',
809
+ tabPolicy: 'Policy',
810
+ tabLive: 'Traffic',
811
+ tabBlacklist: 'Blacklist',
812
+ tabEvents: 'Events',
813
+ live: 'Live connections',
814
+ recent: 'Recent requests',
815
+ blacklist: 'IP blacklist',
816
+ stats: 'Abuse stats',
817
+ refresh: 'Refresh',
818
+ pause: 'Pause auto-refresh',
819
+ resume: 'Resume auto-refresh',
820
+ ban: 'Ban IP',
821
+ unban: 'Unban',
822
+ banConfirm: 'Ban this IP?',
823
+ banWhitelistWarn: 'This IP is on the auto-ban whitelist. Ban anyway?',
824
+ unbanConfirm: 'Remove this IP from blacklist?',
825
+ ip: 'IP',
826
+ method: 'Method',
827
+ path: 'Path',
828
+ key: 'API key',
829
+ duration: 'Duration',
830
+ state: 'State',
831
+ ua: 'User-Agent',
832
+ reason: 'Reason',
833
+ source: 'Source',
834
+ expires: 'Expires',
835
+ permanent: 'Permanent',
836
+ addBan: 'Add ban',
837
+ ttl: 'TTL',
838
+ ttlPerm: 'Permanent',
839
+ ttl1h: '1 hour',
840
+ ttl24h: '24 hours',
841
+ ttl7d: '7 days',
842
+ activeConn: 'Active',
843
+ rateHits: 'Rate-limit hits',
844
+ blockedHits: 'Blocked hits',
845
+ autoBans: 'Auto bans',
846
+ topIps: 'Top IPs (recent)',
847
+ emptyLive: 'No active connections',
848
+ emptyBan: 'Blacklist is empty',
849
+ emptyEvents: 'No auto-ban events yet',
850
+ reasonPh: 'Optional reason',
851
+ banReasonDefault: 'manual from admin',
852
+ ipPlaceholder: '1.2.3.4',
853
+ policyTitle: 'Protection policy',
854
+ policyHint:
855
+ 'All thresholds are live — no restart. Env values are only the initial defaults.',
856
+ autoOn: 'Auto-judgment ON',
857
+ autoOff: 'Auto-judgment OFF',
858
+ autoBanMaster: 'Enable automatic IP bans',
859
+ autoBanMasterHint: 'When off, rate limits still apply but IPs are never auto-banned.',
860
+ masterOn: 'Auto-ban on',
861
+ masterOff: 'Auto-ban off',
862
+ disabledBanner:
863
+ 'Automatic IP bans are off — rate limits still apply, but IPs will not be auto-blacklisted.',
864
+ presetTitle: 'Policy profile',
865
+ presetHint: 'Pick a profile or edit fields — custom is detected automatically.',
866
+ presetRelaxed: 'Relaxed',
867
+ presetBalanced: 'Balanced',
868
+ presetStrict: 'Strict',
869
+ presetCustom: 'Custom',
870
+ presetActiveLabel: 'Active: {name}',
871
+ presetFormLabel: 'Form: {name} (unsaved)',
872
+ presetTagActive: 'Active',
873
+ presetTagDraft: 'Draft',
874
+ presetTagSaved: 'Saved',
875
+ presetActiveHint: 'Current profile: {name}. Click Save if you changed other fields.',
876
+ presetCustomHint:
877
+ 'Values do not match Relaxed / Balanced / Strict — treated as Custom.',
878
+ presetUnsavedHint:
879
+ 'Form shows {form}; server still has {saved}. Click Save policy to apply.',
880
+ savePolicy: 'Save policy',
881
+ resetPolicy: 'Reset to env defaults',
882
+ policySaved: 'Protection policy saved. Rate limiters reloaded.',
883
+ policyReset: 'Policy reset to environment defaults.',
884
+ confirmReset: 'Reset all DDoS policy fields to .env defaults?',
885
+ sectionProxy: 'Reverse proxy / CDN',
886
+ proxyHint:
887
+ 'When traffic passes through nginx or Cloudflare, enable trust hops so bans, rate limits, and audit logs use the real client IP — not the proxy IP.',
888
+ proxyTrustHops: 'Trusted proxy hops',
889
+ proxyTrustHopsHint:
890
+ '0 = direct only (ignore headers). 1 = nginx or Cloudflare→app. 2 = Cloudflare→nginx→app.',
891
+ proxyIpSource: 'Client IP source',
892
+ proxyIpSourceHint:
893
+ 'auto tries CF-Connecting-IP, then X-Real-IP, then X-Forwarded-For. Use “socket” only for direct connections.',
894
+ proxySrcAuto: 'Auto (recommended)',
895
+ proxySrcCf: 'Cloudflare (CF-Connecting-IP)',
896
+ proxySrcNginx: 'nginx (X-Real-IP)',
897
+ proxySrcXff: 'X-Forwarded-For only',
898
+ proxySrcSocket: 'TCP socket only (no proxy)',
899
+ trustedProxies: 'Trusted proxy IPs / CIDRs',
900
+ trustedProxiesHint:
901
+ 'Only these peers may set CF-Connecting-IP / X-Real-IP / XFF. Default 127.0.0.1 — add your nginx/LB host if remote. Direct clients cannot spoof headers.',
902
+ sectionLimits: 'Rate limits',
903
+ sectionAuth: 'Failed authentication',
904
+ sectionRate: 'Rate-limit abuse (429)',
905
+ sectionConn: 'Connection flood',
906
+ sectionVelocity: 'Request velocity',
907
+ sectionEscalate: 'Repeat offender escalation',
908
+ sectionWhitelist: 'Auto-ban whitelist',
909
+ whitelistHint: 'One IP or CIDR per line. These IPs are never auto-banned.',
910
+ rateWindow: 'Window (sec)',
911
+ rateMaxKey: 'Max / key',
912
+ rateMaxIp: 'Max / IP (no key)',
913
+ burstWindow: 'Burst window (sec)',
914
+ burstMax: 'Burst max',
915
+ enableRule: 'Enabled',
916
+ threshold: 'Threshold',
917
+ windowSec: 'Window (sec)',
918
+ banMin: 'Ban duration (min)',
919
+ escalateAfter: 'Escalate after N auto-bans',
920
+ escalateMin: 'Escalated ban (min)',
921
+ maxConcurrent: 'Max concurrent / IP',
922
+ velocityMax: 'Max requests',
923
+ eventsTitle: 'Recent auto-ban events',
924
+ eventTime: 'When',
925
+ eventSource: 'Rule',
926
+ eventDuration: 'Ban for',
927
+ sources: {
928
+ manual: 'Manual',
929
+ 'auto-auth': 'Auto · auth',
930
+ 'auto-rate': 'Auto · 429',
931
+ 'auto-conn': 'Auto · concurrent',
932
+ 'auto-velocity': 'Auto · velocity',
933
+ 'auto-escalate': 'Auto · escalated',
934
+ },
935
+ },
936
+ pm2: {
937
+ title: 'PM2 control',
938
+ tabRunner: 'Runner',
939
+ tabPort: 'Port',
940
+ tabConfig: 'Config',
941
+ tabLogs: 'Logs',
942
+ status: 'Process status',
943
+ start: 'Start with PM2',
944
+ stop: 'Stop PM2',
945
+ restart: 'Restart',
946
+ reload: 'Reload',
947
+ logs: 'Logs',
948
+ logsHint: 'Error log first',
949
+ clearLogs: 'Clear logs',
950
+ confirmClearLogs:
951
+ 'Clear PM2 and ysk-omni log files? This cannot be undone (files are truncated).',
952
+ logsCleared: 'Cleared {n} log file(s).',
953
+ logsAutoTrim:
954
+ 'Auto-trim over {maxMb} MB → keep last ~{keepKb} KB (on each log read).',
955
+ refresh: 'Refresh',
956
+ confirmStop: 'Stop the PM2 process?',
957
+ confirmRestart: 'Restart under PM2? Port will be handed over cleanly.',
958
+ unavailable: 'PM2 not available',
959
+ disabled: 'PM2 admin is disabled',
960
+ app: 'App name',
961
+ pid: 'PID',
962
+ uptime: 'Uptime',
963
+ memory: 'Memory',
964
+ cpu: 'CPU',
965
+ restarts: 'Restarts',
966
+ portBusy: 'Port in use',
967
+ port: 'Port',
968
+ portTitle: 'Listen port',
969
+ portHint:
970
+ 'HTTP port for the gateway Admin UI and API. Changing the port updates .env and restarts the runner so the new port takes effect.',
971
+ fieldPort: 'Port',
972
+ portDefaultNote: 'Default is 3850. Valid range: 1–65535.',
973
+ savePort: 'Save port & restart',
974
+ useDefaultPort: 'Use default (3850)',
975
+ portInvalid: 'Enter a valid port number (1–65535).',
976
+ confirmPortChange:
977
+ 'Change listen port to {port} and restart the gateway? You will need to open Admin on the new port (e.g. http://localhost:{port}/admin).',
978
+ portChangedMsg: 'Port updated: {from} → {to}.',
979
+ portSavedNeedRestart:
980
+ 'Port {port} saved to .env. Restart the gateway for it to take effect.',
981
+ portAfterRestart:
982
+ 'After restart, open Admin at http://localhost:{port}/admin',
983
+ hint: 'Run with PM2 or detached ysk-omni. Switch anytime here or via CLI.',
984
+ switchTitle: 'Runner',
985
+ switchHint: 'Only one runner should bind the port.',
986
+ currentRunner: 'Current runner',
987
+ runnerPm2: 'PM2',
988
+ runnerGctoac: 'ysk-omni (detached)',
989
+ runnerNone: 'Not running',
990
+ runnerUnknown: 'Unknown / mixed',
991
+ switchToPm2: 'Switch to PM2',
992
+ switchToGctoac: 'Switch to ysk-omni',
993
+ confirmSwitchPm2: 'Switch to PM2? Gateway restarts under PM2 in a few seconds.',
994
+ confirmSwitchGctoac: 'Switch to ysk-omni? Gateway restarts as a detached process in a few seconds.',
995
+ switchScheduled: 'Switch scheduled. Admin will refresh automatically in about 10 seconds.',
996
+ autoRefreshIn: 'This page will reload automatically in {n} seconds…',
997
+ autoRefreshNow: 'Reloading…',
998
+ omniPid: 'ysk-omni PID',
999
+ configTitle: 'PM2 config',
1000
+ configHint: 'Saved to pm2.runtime.json and applied via ecosystem.config.cjs. Save & apply restarts PM2 if it is the active runner.',
1001
+ saveConfig: 'Save & apply',
1002
+ saveOnly: 'Save only',
1003
+ resetConfig: 'Reset defaults',
1004
+ confirmReset: 'Reset PM2 config to defaults?',
1005
+ configSaved: 'Config saved',
1006
+ fieldName: 'App name',
1007
+ fieldScript: 'Script',
1008
+ fieldCwd: 'Working directory (cwd)',
1009
+ fieldInstances: 'Instances',
1010
+ fieldExecMode: 'Exec mode',
1011
+ fieldAutorestart: 'Autorestart',
1012
+ fieldWatch: 'Watch',
1013
+ fieldMaxMem: 'Max memory restart',
1014
+ fieldMaxRestarts: 'Max restarts',
1015
+ fieldMinUptime: 'Min uptime',
1016
+ fieldRestartDelay: 'Restart delay (ms)',
1017
+ fieldBackoff: 'Exp backoff restart delay (ms)',
1018
+ fieldMergeLogs: 'Merge logs',
1019
+ fieldTime: 'Log timestamps',
1020
+ fieldErrorFile: 'Error log file',
1021
+ fieldOutFile: 'Out log file',
1022
+ fieldEnvExtra: 'Extra env (KEY=value per line)',
1023
+ fieldPreferred: 'Preferred runner',
1024
+ empty: 'App not in pm2 list',
1025
+ modeFork: 'fork',
1026
+ modeCluster: 'cluster',
1027
+ phCwd: '(package root)',
1028
+ phInstances: '1 or max',
1029
+ phEnv: 'NODE_ENV=production',
1030
+ statusOnline: 'online',
1031
+ statusErrored: 'errored',
1032
+ statusStopped: 'stopped',
1033
+ // status API message keys
1034
+ msgOk: 'OK',
1035
+ msgDisabled: 'PM2 admin is disabled (PM2_ADMIN_ENABLED=false).',
1036
+ msgBinaryMissing: 'pm2 not found on PATH. Install: npm install -g pm2',
1037
+ msgNotInList:
1038
+ 'App "{app}" is not in the PM2 list — use Start with PM2 or Switch to PM2.',
1039
+ msgPortGctoac:
1040
+ 'Port {port} is held by ysk-omni (pid {pid}). Use “Switch to PM2” to hand over.',
1041
+ msgPortBusy: 'Port {port} is in use (pid {pids}).',
1042
+ msgErrored:
1043
+ 'PM2 process errored — check logs / config, then Restart or fix port conflicts.',
1044
+ msgBothRunners:
1045
+ 'Both runners detected; ysk-omni pid {pid} also holds resources. Prefer one via Switch.',
1046
+ msgError: 'PM2 error: {error}',
1047
+ msgSwitchPm2:
1048
+ 'Switching to PM2… The gateway will restart under PM2 in a few seconds.',
1049
+ msgSwitchGctoac:
1050
+ 'Switching to ysk-omni… The gateway will restart as a detached process in a few seconds.',
1051
+ },
1052
+ system: {
1053
+ title: 'System',
1054
+ tabSoftware: 'Software',
1055
+ tabPackage: 'Package',
1056
+ tabEnv: 'Environment',
1057
+ envHint: 'Runtime env & version snapshot.',
1058
+ checkUpdate: 'Check for updates',
1059
+ oneClick: 'Update package & restart',
1060
+ selfUpdate: 'Package version',
1061
+ selfHint: 'Compare versions · update package restarts the gateway.',
1062
+ current: 'This install',
1063
+ npm: 'npm latest',
1064
+ github: 'GitHub latest',
1065
+ install: 'Install channel',
1066
+ confirmUpdate: 'Update the package and restart the gateway? API will be briefly unavailable.',
1067
+ scheduled: 'Update scheduled. Refresh this page in ~30s.',
1068
+ database: 'Database',
1069
+ grokCli: 'Grok CLI',
1070
+ concurrency: 'Concurrency',
1071
+ runtime: 'Runtime health',
1072
+ software: 'Required software',
1073
+ softwareHint: 'Required tools and installed versions.',
1074
+ softName: 'Software',
1075
+ softLevel: 'Need',
1076
+ softInstalled: 'Installed',
1077
+ softVersion: 'Version',
1078
+ softStatus: 'Status',
1079
+ softDetail: 'Note',
1080
+ levelRequired: 'Required',
1081
+ levelRecommended: 'Recommended',
1082
+ levelOptional: 'Optional',
1083
+ levelBundled: 'Bundled',
1084
+ softOk: 'OK',
1085
+ softMissing: 'Missing',
1086
+ softWarn: 'Warning',
1087
+ envTitle: 'Environment',
1088
+ up: 'Up',
1089
+ down: 'Down',
1090
+ yes: 'Yes',
1091
+ no: 'No',
1092
+ // Version badge meanings (top cards + package panel)
1093
+ badgeUpdate: 'Update available',
1094
+ badgeOk: 'Up to date',
1095
+ badgeAhead: 'Newer than npm',
1096
+ badgeUnknown: 'Unknown',
1097
+ statusHintUpdate: 'A newer published version is available. Use “Update package & restart”.',
1098
+ statusHintOk: 'This install matches the latest known release.',
1099
+ statusHintAhead:
1100
+ 'Local version is newer than npm (typical for git / dev). “Update package” still pulls latest git commits if on the git channel.',
1101
+ statusHintUnknown: 'Could not reach npm/GitHub to compare versions.',
1102
+ checkResult: 'Version check',
1103
+ channelGit: 'git (dev tree)',
1104
+ channelNpmGlobal: 'npm global',
1105
+ channelNpmLocal: 'npm local',
1106
+ channelUnknown: 'unknown',
1107
+ encryption: 'Encryption',
1108
+ ready: 'Ready',
1109
+ notReady: 'Not ready',
1110
+ allRequiredOk: 'All required software present',
1111
+ requiredMissing: 'Some required software is missing',
1112
+ },
1113
+ common: {
1114
+ empty: 'No data',
1115
+ active: 'active',
1116
+ revoked: 'revoked',
1117
+ save: 'Save',
1118
+ cancel: 'Close',
1119
+ loading: 'Loading…',
1120
+ powered: 'Powered by',
1121
+ actions: 'Actions',
1122
+ yes: 'Yes',
1123
+ no: 'No',
1124
+ ok: 'OK',
1125
+ confirm: 'Confirm',
1126
+ notice: 'Notice',
1127
+ confirmTitle: 'Please confirm',
1128
+ dangerTitle: 'Confirm action',
1129
+ apply: 'Apply',
1130
+ reset: 'Reset',
1131
+ search: 'Search',
1132
+ prev: 'Previous',
1133
+ next: 'Next',
1134
+ perPage: 'Per page',
1135
+ pagerTotal: 'Total {n}',
1136
+ pagerPage: 'Page {n} / {total}',
1137
+ filterTitle: 'Search & filters',
1138
+ filterHint: 'Narrow results, then apply',
1139
+ all: 'All',
1140
+ requestFailed: 'Request failed',
1141
+ featureOff: 'Off',
1142
+ ms: '{n} ms',
1143
+ perMin: '{n}/min',
1144
+ minutes: '{n} min',
1145
+ mb: '{n} MB',
1146
+ percent: '{n}%',
1147
+ ipLabel: 'IP',
1148
+ uaLabel: 'UA',
1149
+ httpStatus: 'HTTP',
1150
+ },
1151
+ /** API error.code → user-facing message (Admin SPA) */
1152
+ errors: {
1153
+ unauthorized: 'Invalid or missing credentials. Please sign in again.',
1154
+ forbidden: 'You do not have permission for this action.',
1155
+ not_found: 'The requested resource was not found.',
1156
+ validation_error: 'Invalid request. Please check your input.',
1157
+ rate_limit_exceeded: 'Rate limit exceeded. Please try again later.',
1158
+ concurrency_limit_exceeded: 'Too many concurrent Grok jobs. Please wait and retry.',
1159
+ internal_error: 'An internal server error occurred.',
1160
+ engine_error: 'Grok CLI returned an error.',
1161
+ engine_timeout: 'Grok CLI timed out.',
1162
+ engine_not_available: 'Grok CLI is not available on this server.',
1163
+ document_too_large: 'The document exceeds the maximum allowed size.',
1164
+ document_type_not_allowed: 'This document type is not allowed.',
1165
+ invalid_cwd: 'The working directory is not allowed.',
1166
+ service_unavailable: 'The service is temporarily unavailable.',
1167
+ queue_full: 'The chat queue is full. Please try again later.',
1168
+ queue_draining: 'The chat queue is paused or draining.',
1169
+ queue_wait_timeout: 'Timed out while waiting in the chat queue.',
1170
+ queue_cancelled: 'The chat job was cancelled.',
1171
+ media_not_supported: 'This media feature is not available or is disabled.',
1172
+ media_provider_unavailable: 'The media provider is not available.',
1173
+ media_generation_failed: 'Media generation failed.',
1174
+ media_forbidden:
1175
+ 'Media generation is not allowed for this API key. Use an agent-mode key or an admin session.',
1176
+ feature_disabled: 'This API feature is disabled.',
1177
+ feature: {
1178
+ imagesApi:
1179
+ 'Images API is disabled. Enable it under Admin → API features → Images API.',
1180
+ videoApi:
1181
+ 'Video API is disabled. Enable it under Admin → API features → Videos API.',
1182
+ audioApi:
1183
+ 'Audio API is disabled. Enable it under Admin → API features → Audio API.',
1184
+ tools:
1185
+ 'Tools are disabled. Enable Tools under Admin → API features (required for image generation).',
1186
+ filesOpenAiAlias:
1187
+ 'OpenAI Files API alias is disabled. Enable it under Admin → API features → Files API alias.',
1188
+ },
1189
+ media: {
1190
+ agent_or_admin_required:
1191
+ 'Image generation requires an agent-mode API key or an admin session. Safe-mode keys cannot use image tools.',
1192
+ source_required:
1193
+ 'Provide an image file, a media asset, or a document as the source.',
1194
+ source_must_be_image:
1195
+ 'The selected source must be an image for edit or video generation.',
1196
+ no_image_in_sandbox:
1197
+ 'Grok finished but no image file was found in the sandbox or this run\'s session images/. This is not an imagesApi or API-key problem.',
1198
+ no_video_in_sandbox:
1199
+ 'Grok finished but no video file was found in the sandbox or this run\'s session.',
1200
+ provider_no_edit: 'The current media provider does not support image edits.',
1201
+ },
1202
+ },
1203
+ },
1204
+ 'zh-Hant': {
1205
+ brand: 'YSK Omni',
1206
+ brandSub: '管理面板',
1207
+ loginTitle: '管理員登入',
1208
+ loginLabel: 'API 金鑰',
1209
+ loginOtpLabel: '一次性登入碼',
1210
+ loginBtn: '登入',
1211
+ loginCmdHint: '終端機取得 key:',
1212
+ loginOtpHint: '每次登入請在終端機產生新碼:',
1213
+ loginOtpExpiry: '登入碼 5 分鐘內有效,且只能使用一次。',
1214
+ loginOtpFail: '登入碼無效或已過期',
1215
+ loginLostKey: '舊 key 無法找回(只存 hash),請建立新的 admin key。',
1216
+ loginCopy: '複製',
1217
+ loginCopied: '已複製',
1218
+ needKey: '請輸入 API 金鑰',
1219
+ needOtp: '請輸入終端機產生的一次性登入碼',
1220
+ logout: '登出',
1221
+ shell: {
1222
+ menu: '開啟選單',
1223
+ closeMenu: '關閉選單',
1224
+ },
1225
+ nav: {
1226
+ dashboard: '儀表板',
1227
+ chat: '對話',
1228
+ chats: '對話記錄',
1229
+ keys: 'API 金鑰',
1230
+ documents: '文件',
1231
+ media: '媒體庫',
1232
+ audit: '審計日誌',
1233
+ settings: '安全設定',
1234
+ apiFeatures: 'API 能力',
1235
+ usage: '用量與防護',
1236
+ ddos: 'DDoS 中心',
1237
+ queue: '佇列',
1238
+ pm2: 'PM2',
1239
+ system: '系統狀態',
1240
+ },
1241
+ queue: {
1242
+ title: '對話佇列',
1243
+ subtitle: '暫停、排空、重新入隊,並調整併發。',
1244
+ paused: '已暫停',
1245
+ running: '消費中',
1246
+ drain: '排空模式',
1247
+ mode: '模式',
1248
+ modeOff: '已停用',
1249
+ depth: '佇列深度',
1250
+ queued: '排隊中',
1251
+ leased: '已認領',
1252
+ activeJobs: '執行中',
1253
+ dead: '死信',
1254
+ oldest: '最長等待',
1255
+ concurrency: '每 Key / 全域',
1256
+ worker: '進程內 worker',
1257
+ workerInstance: 'Worker 實例',
1258
+ workerInstanceHint: '本進程消費者 ID(租約持有者)。重啟後會變更。',
1259
+ kpiActiveSub: '本進程進行中 {n} 個',
1260
+ consumer: '消費者',
1261
+ admission: '接單',
1262
+ accepting: '接受新單',
1263
+ pause: '暫停消費',
1264
+ resume: '恢復消費',
1265
+ drainBtn: '排空',
1266
+ undrain: '停止排空',
1267
+ savePolicy: '儲存政策',
1268
+ refresh: '重新整理',
1269
+ jobs: '工作列表',
1270
+ tabOverview: '總覽',
1271
+ tabJobs: '工作列表',
1272
+ tabPolicy: '政策',
1273
+ jobsMeta: '共 {n} 筆',
1274
+ cancel: '取消',
1275
+ requeue: '重新入隊',
1276
+ purgeDead: '清理死信與舊工作',
1277
+ purgeTitle: '確認清理工作?',
1278
+ purgeConfirm:
1279
+ '會立即刪除全部死信(DLQ),以及完成已超過 24 小時的成功/失敗/取消工作。',
1280
+ purgeConfirmBtn: '確認刪除',
1281
+ purgeDoneTitle: '清理完成',
1282
+ purgeDoneMsg: '已刪除 {n} 筆工作。',
1283
+ cancelConfirm: '取消此工作?若正在執行,取消為協作式(cooperative)。',
1284
+ empty: '沒有符合篩選的工作',
1285
+ enabled: '啟用佇列',
1286
+ masterOn: '佇列已開',
1287
+ masterOff: '佇列已關',
1288
+ masterHint: '對話佇列總開關,即時生效。',
1289
+ disabledBanner:
1290
+ '佇列已關閉 — 新對話會跳過排隊、即時執行(仍受併發上限約束)。',
1291
+ globalConcurrency: '全域併發',
1292
+ perKeyConcurrency: '每 Key 併發',
1293
+ maxDepth: '全域佇列上限',
1294
+ maxDepthKey: '每 Key 上限',
1295
+ fairness: '公平策略',
1296
+ fifo: '全域 FIFO',
1297
+ wrr: '加權輪詢',
1298
+ playgroundPriority: 'Playground 優先級(越小越先)',
1299
+ defaultPriority: '預設優先級',
1300
+ leaseMs: '租約(ms)',
1301
+ maxWaitMs: '最長等待(ms)',
1302
+ filterTitle: '篩選工作',
1303
+ filterHint: '依狀態篩選。會自動重新整理。',
1304
+ filterStatus: '狀態',
1305
+ allStatuses: '全部狀態',
1306
+ filterDead: '死信(DLQ)',
1307
+ filterQueued: '排隊中',
1308
+ filterRunning: '執行中 / 已認領',
1309
+ filterFailed: '失敗',
1310
+ filterSucceeded: '成功',
1311
+ filterCancelled: '已取消',
1312
+ errorCol: '錯誤',
1313
+ priorityBtn: '優先級',
1314
+ priorityPh: '優先級(0–1000,越小越先)',
1315
+ dlqTitle: '死信佇列',
1316
+ dlqHint: '已用盡重試次數 — 可重新入隊或清理。',
1317
+ viewDlq: '查看死信',
1318
+ statusPanel: '運行狀態',
1319
+ statusPanelHint: '消費者、接單與 worker 實例即時狀態;每隔數秒自動重新整理。',
1320
+ policyTitle: '佇列政策',
1321
+ policyHint: '可先選方案再微調數值;儲存後生效。編輯時會暫停自動重新整理。',
1322
+ presetTitle: '政策方案',
1323
+ presetHint: '一鍵套用。Active=表單目前值 · Saved=已儲存。',
1324
+ presetRelaxed: '寬鬆',
1325
+ presetBalanced: '均衡',
1326
+ presetStrict: '嚴格',
1327
+ presetCustom: '自訂',
1328
+ presetRelaxedHint:
1329
+ '較高併發、較深佇列 — 適合多 key/Playground 與突發流量。',
1330
+ presetBalancedHint:
1331
+ '預設生產平衡:公平輪詢、中等深度、每 key 同時只跑 1 個。',
1332
+ presetStrictHint:
1333
+ '較低上限 + 全域 FIFO — 流量不可信或主機資源緊張時使用。',
1334
+ presetCustomHint: '數值不符合內建方案。可繼續微調,或於上方選取一個方案。',
1335
+ presetActiveLabel: '目前:{name}',
1336
+ presetFormLabel: '草稿:{name}',
1337
+ presetTagActive: '目前',
1338
+ presetTagDraft: '草稿',
1339
+ presetTagSaved: '已套用',
1340
+ hintGlobalConc: '全域同時執行的工作上限',
1341
+ hintPerKeyConc: '單一 API key 同時執行上限',
1342
+ hintMaxDepth: '佇列總深度滿時拒收新單',
1343
+ hintMaxDepthKey: '該 key 排隊/執行過多時拒收',
1344
+ hintFairness: 'WRR 按 key 輪流;FIFO 按全域優先級與時間',
1345
+ hintLease: 'Worker 持有工作多久未完成會被回收',
1346
+ hintMaxWait: '客戶端排隊最長等待時間',
1347
+ colJob: '工作 / 請求',
1348
+ colSource: '來源',
1349
+ colStatus: '狀態',
1350
+ colModel: '模型',
1351
+ colPri: '優先',
1352
+ colKey: 'API 金鑰',
1353
+ colTry: '嘗試',
1354
+ colTime: '入隊時間',
1355
+ stQueued: '排隊',
1356
+ stLeased: '已認領',
1357
+ stRunning: '執行中',
1358
+ stSucceeded: '成功',
1359
+ stFailed: '失敗',
1360
+ stDead: '死信',
1361
+ stCancelled: '已取消',
1362
+ srcV1: 'API',
1363
+ srcPlayground: 'Playground',
1364
+ kpiDepthSub: '{q} 排隊 · {l} 認領',
1365
+ kpiQueuedSub: '等待 worker',
1366
+ kpiDeadSub: '重試已盡',
1367
+ kpiOldestSub: '隊頭等待時間',
1368
+ wait: '等待',
1369
+ started: '開始',
1370
+ cancelReq: '已請求取消',
1371
+ },
1372
+ chat: {
1373
+ title: '對話',
1374
+ new: '新對話',
1375
+ send: '傳送',
1376
+ stop: '停止',
1377
+ stopped: '已停止',
1378
+ placeholder: '輸入訊息…(Enter 傳送,Shift+Enter 換行)',
1379
+ keyMode: 'API 金鑰',
1380
+ keySelect: 'API 金鑰',
1381
+ useSessionKey: '目前登入的 admin 金鑰',
1382
+ useCustomKey: '自訂金鑰',
1383
+ customKey: '金鑰',
1384
+ includeReasoning: '顯示思考',
1385
+ reasoning: '思考過程',
1386
+ needKey: '請輸入或選擇 API 金鑰',
1387
+ attach: '上傳',
1388
+ attachLibrary: '從已上傳選擇',
1389
+ attachHint: '可於本頁任意位置拖放檔案、上傳,或從已上傳庫挑選',
1390
+ dropTitle: '放開以附加檔案',
1391
+ dropHint: '放開即上傳 — 格式與「上傳」按鈕相同',
1392
+ formatsLabel: '格式',
1393
+ formatsHint:
1394
+ 'txt、md、csv、json、xml、html、pdf、圖片(png/jpg/webp/gif)、程式碼(js/ts/py/go/rs/java/c/cpp/css/yml/sql/sh…)',
1395
+ formatsReject: '不支援的格式:{name}。允許:{formats}',
1396
+ libraryTitle: '已上傳的檔案',
1397
+ librarySubtitle: '選擇目前 API 金鑰名下的檔案(格式與上傳相同)。',
1398
+ librarySearch: '依檔名搜尋…',
1399
+ libraryEmpty: '此金鑰沒有符合的檔案',
1400
+ libraryAdd: '加入所選',
1401
+ librarySelected: '已選 {n} 個',
1402
+ libraryAlready: '已附加',
1403
+ libraryLoadFail: '無法載入檔案列表',
1404
+ uploading: '上傳中…',
1405
+ uploadFail: '上傳失敗',
1406
+ uploadProgress: '正在上傳 {name}',
1407
+ uploadProgressMulti: '正在上傳 {name}({i}/{n})',
1408
+ emptyTitle: '開始對話',
1409
+ emptyHint:
1410
+ '輸入訊息或附加檔案。選擇圖像、影片或語音模型即可在對話中生成媒體。',
1411
+ needContent: '請輸入訊息或至少附加一個檔案',
1412
+ tooManyFiles: '檔案太多(每則訊息最多 10 個)',
1413
+ fileOnlyPrompt: '請查看附加的檔案。',
1414
+ removeFile: '移除',
1415
+ docs: '附件',
1416
+ you: '你',
1417
+ assistant: '助理',
1418
+ streaming: '串流中…',
1419
+ emptyReply: '(無回覆內容)',
1420
+ systemPrompt: '系統提示',
1421
+ systemPlaceholder: '可選:模型系統指示(system 訊息)…',
1422
+ systemHint: '每次傳送會以 system 角色附帶,不會顯示於對話氣泡。',
1423
+ history: '歷史對話',
1424
+ historyEmpty: '尚未有已儲存的對話',
1425
+ historySearch: '搜尋主題…',
1426
+ historyOpen: '顯示歷史',
1427
+ historyClose: '關閉歷史',
1428
+ rename: '重新命名',
1429
+ renamePh: '對話主題',
1430
+ untitled: '未命名對話',
1431
+ deleteConversation: '刪除',
1432
+ deleteConfirm: '確定刪除此對話?此操作無法還原。',
1433
+ saveFail: '無法儲存對話',
1434
+ loadFail: '無法載入對話',
1435
+ historyPrev: '上一頁',
1436
+ historyNext: '下一頁',
1437
+ historyPage: '第 {n} / {total} 頁',
1438
+ msgs: '{n} 則訊息',
1439
+ compress: '產生語境摘要',
1440
+ compressConfirm:
1441
+ '為之後回合產生對話摘要以節省 token?畫面上的完整對話記錄不會被刪除或改寫,只影響傳送給模型的內容。此操作會呼叫模型一次。',
1442
+ compressing: '正在產生摘要…',
1443
+ compressNeedMore:
1444
+ '至少需要 3 則訊息(或 2 則較長內容)才可產生摘要。請先繼續對話再試。',
1445
+ compressFail: '無法產生摘要',
1446
+ compressNeedSummary: '請先按「產生語境摘要」建立摘要。',
1447
+ compressedBadge: '摘要',
1448
+ compressOk: '摘要已就緒(完整記錄仍保留)。已切換為「摘要 + 最近訊息」模式。',
1449
+ compressBusy: '請等待目前回覆完成',
1450
+ compressResultTitle: '對話摘要',
1451
+ compressView: '查看摘要',
1452
+ summaryMeta: '產生時間:{when} · 依據 {n} 則訊息',
1453
+ ctxPolicyTitle: '模型上下文',
1454
+ ctxRemark:
1455
+ '完整訊息仍顯示於對話區。此設定只控制下一次傳送給模型的內容。',
1456
+ ctxMode: '上下文',
1457
+ ctxModeFull: '完整記錄',
1458
+ ctxModeSummary: '摘要 + 最近',
1459
+ ctxModeRecent: '僅最近',
1460
+ ctxModeFullLabel: '目前送出完整對話記錄',
1461
+ ctxModeSummaryLabel: '目前送出摘要 + 最近 {n} 則',
1462
+ ctxModeRecentLabel: '目前只送出最近 {n} 則',
1463
+ ctxRecentN: '最近則數',
1464
+ ctxLongHint:
1465
+ '對話較長 — 建議改用「摘要 + 最近」或「僅最近」,以減少 token 並避免介面卡頓。',
1466
+ loadOlder: '載入較早的 {n} 則訊息',
1467
+ showMore: '顯示更多',
1468
+ showLess: '收合',
1469
+ copy: '複製',
1470
+ copied: '已複製',
1471
+ copyFail: '複製失敗',
1472
+ },
1473
+ status: {
1474
+ success: '成功',
1475
+ error: '錯誤',
1476
+ timeout: '逾時',
1477
+ pending: '處理中',
1478
+ active: '進行中',
1479
+ finished: '已完成',
1480
+ online: '運行中',
1481
+ stopped: '已停止',
1482
+ },
1483
+ dash: {
1484
+ title: '儀表板',
1485
+ subtitle: '流量、佇列、安全與防護一覽。',
1486
+ last24: '最近 24h 請求',
1487
+ totalChat: '總對話',
1488
+ success: '成功',
1489
+ errors: '錯誤/逾時',
1490
+ docs: '文件',
1491
+ keys: '活躍金鑰',
1492
+ concurrent: 'Grok 併發',
1493
+ recent: '最近 API 請求',
1494
+ empty: '暫無資料',
1495
+ emptyModels: '最近 24h 尚無模型用量',
1496
+ updated: '更新於',
1497
+ refresh: '重新整理',
1498
+ viewAll: '查看全部',
1499
+ openDdos: 'DDoS 中心',
1500
+ openSettings: '安全設定',
1501
+ openQueue: '開啟佇列',
1502
+ kpi24h: '請求(24h)',
1503
+ kpi24hSub: '{ok} 成功 · {err} 錯誤',
1504
+ kpiSuccessRate: '成功率(24h)',
1505
+ kpiSuccessRateSub: '全部時間 {all}%',
1506
+ kpiErrors: '錯誤(24h)',
1507
+ kpiErrorsSub: '全部時間 {all}',
1508
+ kpiKeys: 'API 金鑰',
1509
+ kpiKeysSub: '活躍 / 總數',
1510
+ kpiDocs: '文件',
1511
+ kpiMedia: '媒體資產',
1512
+ kpiMediaSub: '24 小時 {n} 個',
1513
+ kpiDocsSub: '已儲存檔案',
1514
+ kpiConv: 'Playground 對話',
1515
+ kpiConvSub: '24h 內更新 {n} 則',
1516
+ kpiSessions: 'OTP 工作階段',
1517
+ kpiSessionsSub: '目前有效的管理員登入',
1518
+ kpiConcurrent: 'Grok 併發',
1519
+ kpiConcurrentSub: '進行中 / 上限',
1520
+ kpiQueue: '對話佇列',
1521
+ kpiQueueSub: '深度 · 執行 / 上限 · 死信',
1522
+ kpiQueueSubLive: '{run}/{max} 執行 · {dead} 死信{wait}',
1523
+ kpiQueuePaused: '已暫停',
1524
+ kpiQueueDrain: '排空',
1525
+ kpiQueueOff: '已停用',
1526
+ kpiSafe: '全域安全',
1527
+ kpiSafeOn: '開',
1528
+ kpiSafeOff: '關',
1529
+ kpiSafeSub: '{tools} · turns {turns} · {model}',
1530
+ kpiSafeSubEmpty: '無法讀取設定',
1531
+ queuePanel: '對話佇列',
1532
+ queueState: '狀態',
1533
+ queueLive: '運作中',
1534
+ qQueued: '排隊中',
1535
+ qRunning: '執行中',
1536
+ qDead: '死信',
1537
+ qSucceeded: '已成功',
1538
+ qWorker: 'Worker',
1539
+ qWorkerActive: '活躍槽',
1540
+ qOldest: '最舊等待',
1541
+ qUnavailable: '無法取得佇列統計',
1542
+ safety: '安全設定',
1543
+ globalSafe: '全域安全模式',
1544
+ safeTools: '工具',
1545
+ safeTurns: '最大 turns',
1546
+ safeTimeout: '逾時',
1547
+ defaultModel: '預設模型',
1548
+ safetyHint:
1549
+ '影響 safe 模式金鑰與強制 safe 的流量。Playground OTP 預設 agent;開啟全域安全後會套用 safe 限制。',
1550
+ protection: '防護狀態',
1551
+ autoBan: '自動封鎖',
1552
+ on: '開',
1553
+ off: '關',
1554
+ ruleAuth: '認證',
1555
+ ruleRate: '429',
1556
+ ruleConn: '並發',
1557
+ ruleVelocity: '速率',
1558
+ bans: '黑名單',
1559
+ blocked: '已攔截',
1560
+ rateHits: '限流次數',
1561
+ liveConn: '即時連線',
1562
+ proxy: '代理 IP',
1563
+ hops: '層數',
1564
+ limits: '金鑰/IP 上限',
1565
+ models24h: '模型用量(24h)',
1566
+ runtime: '運行環境',
1567
+ port: '監聽連接埠',
1568
+ defaultPort: '預設',
1569
+ env: '環境',
1570
+ authMode: '管理登入',
1571
+ authOtp: 'OTP 工作階段',
1572
+ encryption: '加密',
1573
+ ready: '就緒',
1574
+ notReady: '未就緒',
1575
+ },
1576
+ chats: {
1577
+ title: '對話記錄',
1578
+ total: '共',
1579
+ decrypt: '點選列項可查看解密後內容。',
1580
+ search: '搜尋',
1581
+ searchPh: '請求 ID、金鑰名稱、模型…',
1582
+ filterTitle: '搜尋與篩選',
1583
+ filterHint: '篩選後點列項查看詳情。',
1584
+ status: '狀態',
1585
+ allStatus: '全部狀態',
1586
+ model: '模型',
1587
+ allModels: '全部模型',
1588
+ apiKey: 'API 金鑰',
1589
+ allKeys: '全部金鑰',
1590
+ from: '由',
1591
+ to: '至',
1592
+ mode: '模式',
1593
+ allModes: '全部模式',
1594
+ hasDocs: '有附件',
1595
+ filter: '套用篩選',
1596
+ reset: '重設',
1597
+ request: '請求',
1598
+ prompt: '提示',
1599
+ response: '回覆',
1600
+ time: '時間',
1601
+ attachments: '附件',
1602
+ page: '頁',
1603
+ prev: '上一頁',
1604
+ next: '下一頁',
1605
+ perPage: '每頁',
1606
+ detail: '對話詳情',
1607
+ noAttach: '無附件',
1608
+ openFile: '開啟 / 預覽',
1609
+ close: '關閉',
1610
+ copyPrompt: '複製提示',
1611
+ copyContent: '複製內容',
1612
+ copySystem: '複製 system prompt',
1613
+ copyRawPrompt: '複製原始 prompt',
1614
+ duration: '耗時',
1615
+ stream: '串流',
1616
+ reasoning: '思考過程',
1617
+ content: '輸出內容',
1618
+ raw: '原始儲存回覆',
1619
+ rawPrompt: '原始儲存 prompt',
1620
+ userPrompt: '用戶/對話 prompt',
1621
+ systemPrompt: 'System prompt',
1622
+ systemHint: '從已儲存 prompt 中抽出 system 角色內容。',
1623
+ noSystem: '此請求沒有 system prompt。',
1624
+ hasSystem: '有 system',
1625
+ none: '(無)',
1626
+ file: '檔案',
1627
+ img: '圖片',
1628
+ previewFailed: '預覽失敗',
1629
+ },
1630
+ keys: {
1631
+ title: 'API 金鑰',
1632
+ new: '新增金鑰',
1633
+ searchPh: '名稱或 key 前綴…',
1634
+ name: '名稱',
1635
+ role: '角色',
1636
+ mode: '模式',
1637
+ rate: '速率 / 分',
1638
+ status: '狀態',
1639
+ created: '建立',
1640
+ edit: '編輯',
1641
+ revoke: '撤銷',
1642
+ confirmRevoke: '確定撤銷此金鑰?',
1643
+ empty: '暫無',
1644
+ usage24: '24h 用量',
1645
+ maxTurns: '最大 turns',
1646
+ timeoutMs: '逾時 (ms)',
1647
+ ipWhitelist: 'IP 白名單',
1648
+ ipWhitelistHint: '每行一個 IP 或 CIDR。留空 = 不限制 IP。',
1649
+ ipWhitelistCol: 'IP 允許',
1650
+ ipAll: '全部 IP',
1651
+ keyOnce: '請妥善保存(明文只顯示一次):',
1652
+ roleClient: '用戶 (client)',
1653
+ roleAdmin: '管理員 (admin)',
1654
+ roleClientBadge: '用戶',
1655
+ roleAdminBadge: '管理員',
1656
+ modeSafe: 'safe(對外)',
1657
+ modeAgent: 'agent(全能力)',
1658
+ modeSafeBadge: '安全',
1659
+ modeAgentBadge: '代理',
1660
+ ipCount: '{n} 個 IP',
1661
+ ipPlaceholder: '127.0.0.1\n203.0.113.0/24',
1662
+ allowedModels: '可用模型',
1663
+ allowedModelsHint: '勾選此金鑰可使用的模型。留空 = 不限制。用戶可透過 GET /v1/models 查詢可用模型清單。',
1664
+ allowedModelsCol: '模型',
1665
+ modelsAll: '全部模型',
1666
+ modelsCount: '{n} 個模型',
1667
+ modelsExtra: '其他模型 id',
1668
+ modelsExtraHint: '每行一個模型 id,用於上方未列出的識別名稱。',
1669
+ modelsPlaceholder: 'org/repo:Q4_K_M',
1670
+ },
1671
+ docs: {
1672
+ title: '文件',
1673
+ total: '共',
1674
+ file: '檔名',
1675
+ mime: '類型',
1676
+ size: '大小',
1677
+ time: '時間',
1678
+ storage: '儲存位置',
1679
+ storageDb: '資料庫(加密)',
1680
+ storageFs: '檔案系統(加密)',
1681
+ storageHint: '加密儲存 · 小於 {dbMax} 入 DB,其餘於 {dir} · 上限 {upMax}。',
1682
+ download: '下載',
1683
+ downloadFail: '下載失敗',
1684
+ binaryPreview: '此為二進位檔(例如 PDF),無法在此預覽,請使用「下載」。',
1685
+ delete: '刪除',
1686
+ confirmDel: '確定刪除此文件?',
1687
+ detail: '文件詳情',
1688
+ preview: '預覽',
1689
+ copy: '複製內容',
1690
+ empty: '暫無',
1691
+ searchPh: '檔名或 MIME…',
1692
+ page: '頁',
1693
+ prev: '上一頁',
1694
+ next: '下一頁',
1695
+ },
1696
+ audit: {
1697
+ title: '審計日誌',
1698
+ searchPh: '動作、資源、IP、金鑰…',
1699
+ time: '時間',
1700
+ action: '動作',
1701
+ resource: '資源',
1702
+ key: '金鑰',
1703
+ meta: '詳情',
1704
+ empty: '暫無日誌',
1705
+ id: '識別碼',
1706
+ actions: {
1707
+ chat_create: '建立對話',
1708
+ document_upload: '上傳文件',
1709
+ document_delete: '刪除文件',
1710
+ document_list: '列出文件',
1711
+ document_read: '讀取文件',
1712
+ document_download: '下載文件',
1713
+ api_key_create: '建立金鑰',
1714
+ api_key_update: '更新金鑰',
1715
+ api_key_delete: '撤銷金鑰',
1716
+ api_key_list: '列出金鑰',
1717
+ settings_update: '更新設定',
1718
+ chat_admin_view: '管理員查看對話',
1719
+ system_update: '系統更新',
1720
+ system_update_check: '檢查更新',
1721
+ ip_ban: '封鎖 IP',
1722
+ ip_unban: '解除 IP 封鎖',
1723
+ ddos_policy_update: 'DDoS 策略更新',
1724
+ pm2_start: 'PM2 啟動',
1725
+ pm2_stop: 'PM2 停止',
1726
+ pm2_restart: 'PM2 重啟',
1727
+ pm2_reload: 'PM2 重載',
1728
+ pm2_config: 'PM2 設定',
1729
+ pm2_switch: 'PM2 切換 runner',
1730
+ playground_chat: '對話試玩',
1731
+ playground_upload: '試玩上傳',
1732
+ },
1733
+ resources: {
1734
+ document: '文件',
1735
+ chat: '對話',
1736
+ api_key: 'API 金鑰',
1737
+ settings: '設定',
1738
+ system: '系統',
1739
+ pm2: 'PM2',
1740
+ playground: '試玩',
1741
+ ip: 'IP',
1742
+ },
1743
+ metaStorage: '儲存方式',
1744
+ metaAsKey: '代行金鑰 ID',
1745
+ metaAsKeyName: '代行金鑰名稱',
1746
+ },
1747
+ settings: {
1748
+ title: '安全設定',
1749
+ hint: '全域安全模式,套用至所有金鑰。',
1750
+ globalSafe: '全域安全模式',
1751
+ globalSafeHint: '開=全部 safe。關=跟各金鑰自身模式。',
1752
+ masterOn: '安全模式:開',
1753
+ masterOff: '安全模式:關',
1754
+ disabledBanner: '全域安全已關 — 各金鑰用自身 safe/agent 設定。',
1755
+ tools: '工具模式',
1756
+ toolsHint: 'none:禁 shell/上網/寫入。readonly:只讀搜尋。',
1757
+ toolsNone: 'none',
1758
+ toolsReadonly: 'readonly',
1759
+ maxTurns: '最大 turns',
1760
+ maxTurnsHint: 'safe 步數。問答 3–6 · API 8–12 · 多步驟 15–40。',
1761
+ timeout: '逾時(ms)',
1762
+ timeoutHint: 'safe 時限。一般 60–120s · 長任務 300–600s。',
1763
+ defaultModel: '預設模型',
1764
+ defaultModelHint: '客戶端未指定 model 時使用。',
1765
+ modelSource: 'Grok CLI',
1766
+ refreshModels: '重新整理模型',
1767
+ panel: '管理面板',
1768
+ save: '儲存',
1769
+ saved: '已儲存',
1770
+ guideTitle: '建議預設',
1771
+ guideIntro: '套用後可再微調。',
1772
+ guideApply: '套用',
1773
+ guideActive: '已應用',
1774
+ guideApplyConfirm: '套用「{name}」並儲存?會覆寫目前數值。',
1775
+ guideApplied: '已套用',
1776
+ chipGlobalOn: '安全:開',
1777
+ chipGlobalOff: '安全:關',
1778
+ scLocalTitle: '本機試用',
1779
+ scLocalDesc: '本機完整能力。',
1780
+ scLocalDetail: '安全關 · agent 金鑰。',
1781
+ scProdTitle: '對外 API',
1782
+ scProdDesc: '產品端點,最小權限。',
1783
+ scProdDetail: '安全開 · none · turns 8–12 · 60–120s。',
1784
+ scCodeTitle: '程式代理',
1785
+ scCodeDesc: '可信主機改檔/跑指令。',
1786
+ scCodeDetail: '安全關 · agent 金鑰。',
1787
+ scReadTitle: '只讀分析',
1788
+ scReadDesc: '解碼/搜尋,不寫入。',
1789
+ scReadDetail: '安全開 · readonly · turns 8–15 · 120–180s。',
1790
+ scChatTitle: '純問答',
1791
+ scChatDesc: '只回覆文字,不需使用工具。',
1792
+ scChatDetail: '安全開 · none · turns 3–6 · 60s。',
1793
+ scLongTitle: '長任務(safe)',
1794
+ scLongDesc: '多步驟,減少 max turns 失敗。',
1795
+ scLongDetail: '安全開 · none/readonly · turns 20–40 · 300–600s。',
1796
+ dangerTitle: '危險操作',
1797
+ disablePanel: '關閉管理面板',
1798
+ disablePanelConfirm: '關閉面板並登出?重開:ysk-omni admin on',
1799
+ disablePanelDone: '面板已關。重開:ysk-omni admin on',
1800
+ panelOffHint: '此處可關閉。重開請在伺服器執行 ysk-omni admin on。',
1801
+ panelStatus: '狀態',
1802
+ panelOn: '開',
1803
+ panelOff: '關',
1804
+ },
1805
+ apiFeatures: {
1806
+ title: 'API 能力',
1807
+ intro: '開關協議與能力 · 約 2 秒生效 · 無需重啟。',
1808
+ tabProtocols: '協議',
1809
+ tabMedia: '媒體',
1810
+ tabCaps: '能力',
1811
+ tabEmu: '模擬',
1812
+ kpiEnabled: '已啟用',
1813
+ kpiEnabledSub: '目前開啟的開關',
1814
+ groupMeta: '已開 {on} / {n}',
1815
+ groupProtocols: '協議表面',
1816
+ groupMedia: '媒體 API(OpenAI 兼容)',
1817
+ groupCaps: 'Grok CLI 能力',
1818
+ groupEmu: '模擬與安全',
1819
+ presetOpen: '預設:開放',
1820
+ presetLocked: '預設:鎖定',
1821
+ presetDev: '預設:開發',
1822
+ presetConfirm: '套用能力預設「{name}」?會覆寫全部 API 開關。',
1823
+ flag: {
1824
+ openaiChat: 'OpenAI Chat Completions',
1825
+ openaiResponses: 'OpenAI Responses',
1826
+ anthropicMessages: 'Anthropic Messages',
1827
+ imagesApi: 'Images API',
1828
+ filesOpenAiAlias: 'Files API 別名',
1829
+ videoApi: 'Videos API(異步 job)',
1830
+ audioApi: 'Audio API(語音 / STT)',
1831
+ tools: 'Tools / function calling',
1832
+ structuredOutput: '結構化輸出 (--json-schema)',
1833
+ vision: '視覺 / 圖片 (--prompt-json)',
1834
+ reasoningEffort: '推理力度',
1835
+ webSearch: '網絡搜尋工具',
1836
+ subagents: '子代理',
1837
+ planMode: 'Plan 模式',
1838
+ memory: '跨 session 記憶',
1839
+ sessionResume: '恢復 session',
1840
+ bestOfN: 'best-of-n',
1841
+ checkLoop: '自我檢查迴圈',
1842
+ systemOverride: 'System prompt 覆寫',
1843
+ rules: '額外 rules',
1844
+ permissionMode: '權限模式',
1845
+ sandbox: 'Sandbox profile',
1846
+ usageEstimate: '估算 token usage',
1847
+ assistantsEmulation: 'Assistants-lite(本機)',
1848
+ strictSampling: '嚴格採樣(拒絕 temperature…)',
1849
+ forceDisableToolsInSafe: 'Safe 模式強制工具限制',
1850
+ },
1851
+ hint: {
1852
+ openaiChat: 'POST /v1/chat/completions',
1853
+ openaiResponses: 'POST /v1/responses',
1854
+ anthropicMessages: 'POST /v1/messages',
1855
+ imagesApi: 'POST /v1/images/generations + /edits(要 agent key)',
1856
+ filesOpenAiAlias: 'POST/GET /v1/files → documents + media',
1857
+ videoApi: 'POST /v1/videos + poll GET /v1/videos/:id',
1858
+ audioApi: 'POST /v1/audio/speech + /transcriptions(要 provider)',
1859
+ tools: '映射 tools → Grok --tools',
1860
+ structuredOutput: 'response_format / json_schema',
1861
+ vision: 'image_url content parts',
1862
+ reasoningEffort: '--reasoning-effort',
1863
+ webSearch: '關閉時加 --disable-web-search',
1864
+ subagents: '關閉時 --no-subagents',
1865
+ planMode: '關閉時 --no-plan',
1866
+ memory: '--experimental-memory',
1867
+ sessionResume: '--resume / --continue',
1868
+ bestOfN: '--best-of-n',
1869
+ checkLoop: '--check',
1870
+ systemOverride: '--system-prompt-override',
1871
+ rules: '--rules',
1872
+ permissionMode: '--permission-mode',
1873
+ sandbox: '--sandbox',
1874
+ usageEstimate: 'usage 用字元/4 估算',
1875
+ assistantsEmulation: '本機 /v1/assistants + /v1/threads',
1876
+ strictSampling: '帶 temperature 等則 400',
1877
+ forceDisableToolsInSafe: '維持 safe 工具政策',
1878
+ },
1879
+ },
1880
+ media: {
1881
+ title: '媒體庫',
1882
+ intro: '工作室、資產與影片工作。需 imagesApi/tools(影片另需 videoApi)。',
1883
+ tabStudio: '工作室',
1884
+ tabAssets: '資產',
1885
+ tabJobs: '工作',
1886
+ kpiAssetsSub: '已儲存的媒體檔案',
1887
+ kpiJobsSub: '影片生成工作',
1888
+ kpiStudioSub: '生成、編輯或圖生影片',
1889
+ assets: '資產',
1890
+ jobs: '影片工作',
1891
+ empty: '尚無媒體資產',
1892
+ jobsEmpty: '尚無影片工作',
1893
+ kind: '類型',
1894
+ bytes: '大小',
1895
+ provider: '提供者',
1896
+ providerPh: '提供者名稱…',
1897
+ prompt: '提示詞',
1898
+ created: '建立時間',
1899
+ status: '狀態',
1900
+ preview: '預覽',
1901
+ previewUnsupported: '瀏覽器無法預覽此格式,請下載檔案後開啟。',
1902
+ previewFail: '無法載入預覽',
1903
+ previewTruncated: '預覽已截斷',
1904
+ download: '下載',
1905
+ delete: '刪除',
1906
+ deleteConfirm: '確定要軟刪除此媒體資產?',
1907
+ allKinds: '全部類型',
1908
+ searchPh: '提示詞、檔名、MIME、提供者或 ID…',
1909
+ from: '開始日期',
1910
+ to: '結束日期',
1911
+ generate: '生成圖片',
1912
+ generateTitle: '生成圖片',
1913
+ studioTitle: '媒體工作室',
1914
+ studioHint:
1915
+ '可生成圖片、編輯既有圖片,或建立圖生影片工作。執行限制依循安全設定。需啟用 imagesApi 與 tools(影片另需 videoApi)。',
1916
+ generateHint: '透過 Grok Imagine 工具(image_gen、image_edit、image_to_video)。',
1917
+ generatePrompt: '提示詞',
1918
+ generatePromptPh: '描述你想生成的圖像…',
1919
+ generateSize: '尺寸',
1920
+ aspectRatio: '長寬比',
1921
+ aspectHint: '採用 Grok Imagine 的 aspect_ratio(非 OpenAI 像素尺寸)',
1922
+ generateN: '數量',
1923
+ nHint: 'Grok 不支援批量 n;閘道會依序執行 1–4 次',
1924
+ generateKey: 'API 金鑰',
1925
+ generateKeySession: '目前登入的管理員工作階段',
1926
+ generateSubmit: '生成',
1927
+ generateBusy: '正在生成,可能需要一分鐘…',
1928
+ generateOk: '已生成圖像,請見下方資產列表。',
1929
+ generateFail: '圖像生成失敗',
1930
+ generateNeedPrompt: '請輸入提示詞',
1931
+ modeGenerate: '生成',
1932
+ modeEdit: '編輯',
1933
+ modeVideo: '影片',
1934
+ modelDefault: '系統預設',
1935
+ modelEmpty: '本機 Grok CLI 未回報模型',
1936
+ modelHint: '列出本機 Grok CLI 全部模型,並預選系統預設',
1937
+ editSubmit: '編輯圖像',
1938
+ editBusy: '正在編輯…',
1939
+ editOk: '已編輯圖像,請見下方資產列表。',
1940
+ editNeedImage: '請選擇或拖放來源圖像後再編輯',
1941
+ editImage: '來源圖像',
1942
+ editImageHint: 'image_edit 必須提供來源圖像',
1943
+ editPromptPh: '描述要套用的變更…',
1944
+ videoSubmit: '建立影片工作',
1945
+ videoBusy: '正在將影片工作加入佇列…',
1946
+ videoOk: '影片工作已加入佇列,請見「影片工作」分頁。',
1947
+ videoDuration: '時長',
1948
+ videoDurationHint: 'Grok image_to_video 僅支援 6 秒或 10 秒',
1949
+ videoSource: '來源幀(選填)',
1950
+ videoSourceHint: '選填。若未提供,會先依提示詞生成畫面,再進行動畫。',
1951
+ videoNoSource: '自動依提示詞生成畫面',
1952
+ videoPromptPh: '描述鏡頭運動與畫面內容…',
1953
+ sourceTitle: '來源圖像',
1954
+ sourceHint: '可拖放圖像、選擇本機檔案,或從文件庫/媒體資產中挑選任一圖像。',
1955
+ dropzoneAria: '來源圖像拖放區',
1956
+ dropTitle: '將圖像拖放至此',
1957
+ dropHint: '亦可選擇本機檔案,或從系統庫挑選',
1958
+ dropTitleVideo: '拖放來源幀(選填)',
1959
+ dropHintVideo: '影片可選填來源。未指定時,會先依提示詞生成畫面。',
1960
+ pickFile: '選擇檔案',
1961
+ pickLibrary: '系統庫',
1962
+ clearSource: '清除',
1963
+ sourceNeedImage: '請提供圖像檔(PNG、JPEG、WebP、GIF 等)',
1964
+ sourceKindUpload: '上傳',
1965
+ sourceKindAsset: '媒體資產',
1966
+ sourceKindDocument: '文件',
1967
+ libraryTitle: '選擇來源檔案',
1968
+ librarySubtitle: '可選取本閘道「文件」或「媒體資產」中的任一圖像。',
1969
+ libraryTabDocs: '文件',
1970
+ libraryTabAssets: '媒體資產',
1971
+ librarySearch: '依名稱、MIME 或 ID 搜尋…',
1972
+ libraryFormats: '僅圖像(PNG、JPEG、WebP、GIF 等)',
1973
+ libraryEmpty: '沒有符合的檔案',
1974
+ librarySelect: '使用所選',
1975
+ libraryLoadFail: '無法載入檔案庫',
1976
+ },
1977
+ usage: {
1978
+ title: '用量與防濫用',
1979
+ window: '統計區間',
1980
+ requests: '請求數',
1981
+ success: '成功',
1982
+ errors: '錯誤',
1983
+ errorRate: '錯誤率',
1984
+ byModel: '按模型',
1985
+ byKey: '按 API 金鑰',
1986
+ rateLimit: '上限 / 分',
1987
+ util: '估計使用率',
1988
+ limits: 'Gateway 限流設定',
1989
+ global: '全域上限 / 視窗',
1990
+ ipMax: '未認證 IP 上限',
1991
+ burst: '對話短窗 burst(10s)',
1992
+ block: '認證失敗封鎖門檻',
1993
+ concurrent: 'Grok 最大併發',
1994
+ refresh: '重新整理',
1995
+ },
1996
+ ddos: {
1997
+ title: 'DDoS 控制中心',
1998
+ tabPolicy: '政策',
1999
+ tabLive: '流量',
2000
+ tabBlacklist: '黑名單',
2001
+ tabEvents: '事件',
2002
+ live: '即時連線',
2003
+ recent: '最近請求',
2004
+ blacklist: 'IP 黑名單',
2005
+ stats: '濫用統計',
2006
+ refresh: '重新整理',
2007
+ pause: '暫停自動刷新',
2008
+ resume: '恢復自動刷新',
2009
+ ban: '封鎖 IP',
2010
+ unban: '解除封鎖',
2011
+ banConfirm: '確定封鎖此 IP?',
2012
+ banWhitelistWarn: '此 IP 在自動封鎖白名單內。仍要手動封鎖?',
2013
+ unbanConfirm: '確定從黑名單移除此 IP?',
2014
+ ip: 'IP',
2015
+ method: '方法',
2016
+ path: '路徑',
2017
+ key: 'API 金鑰',
2018
+ duration: '耗時',
2019
+ state: '狀態',
2020
+ ua: '瀏覽器識別 (UA)',
2021
+ reason: '原因',
2022
+ source: '來源',
2023
+ expires: '到期',
2024
+ permanent: '永久',
2025
+ addBan: '新增封鎖',
2026
+ ttl: '有效期',
2027
+ ttlPerm: '永久',
2028
+ ttl1h: '1 小時',
2029
+ ttl24h: '24 小時',
2030
+ ttl7d: '7 日',
2031
+ activeConn: '進行中',
2032
+ rateHits: '限流次數',
2033
+ blockedHits: '已封鎖攔截',
2034
+ autoBans: '自動封鎖',
2035
+ topIps: '熱門 IP(最近)',
2036
+ emptyLive: '目前無進行中連線',
2037
+ emptyBan: '黑名單為空',
2038
+ emptyEvents: '尚無自動封鎖事件',
2039
+ reasonPh: '可選原因',
2040
+ banReasonDefault: '管理員手動封鎖',
2041
+ ipPlaceholder: '1.2.3.4',
2042
+ policyTitle: '防護策略',
2043
+ policyHint: '所有門檻即時生效,無需重啟。環境變數僅作為初始預設值。',
2044
+ autoOn: '自動判斷:開',
2045
+ autoOff: '自動判斷:關',
2046
+ autoBanMaster: '啟用自動封鎖 IP',
2047
+ autoBanMasterHint: '關閉後仍會限流,但不會自動加入黑名單。',
2048
+ masterOn: '自動封鎖:開',
2049
+ masterOff: '自動封鎖:關',
2050
+ disabledBanner:
2051
+ '自動封鎖已關閉 — 仍會限流,但 IP 不會被自動加入黑名單。',
2052
+ presetTitle: '防護方案',
2053
+ presetHint: '點選預設方案,或自行改數值;系統會自動判斷是否為自訂。',
2054
+ presetRelaxed: '寬鬆',
2055
+ presetBalanced: '均衡',
2056
+ presetStrict: '嚴格',
2057
+ presetCustom: '自訂',
2058
+ presetActiveLabel: '目前:{name}',
2059
+ presetFormLabel: '表單:{name}(未儲存)',
2060
+ presetTagActive: '使用中',
2061
+ presetTagDraft: '草稿',
2062
+ presetTagSaved: '已儲存',
2063
+ presetActiveHint: '目前方案:{name}。若改動其他欄位請按「儲存策略」。',
2064
+ presetCustomHint: '目前數值不屬於寬鬆/均衡/嚴格,已判定為「自訂」。',
2065
+ presetUnsavedHint:
2066
+ '表單顯示「{form}」,伺服器仍為「{saved}」。請按「儲存策略」先套用。',
2067
+ savePolicy: '儲存策略',
2068
+ resetPolicy: '重設為環境預設',
2069
+ policySaved: '防護策略已儲存,限流器已重新載入。',
2070
+ policyReset: '已重設為環境變數預設值。',
2071
+ confirmReset: '確定將所有 DDoS 策略欄位重設為 .env 預設?',
2072
+ sectionProxy: '反向代理 / CDN',
2073
+ proxyHint:
2074
+ '流量經 nginx 或 Cloudflare 時,請設定信任層數,令封鎖、限流、審計日誌使用真實用戶 IP,而非代理伺服器 IP。',
2075
+ proxyTrustHops: '信任代理層數',
2076
+ proxyTrustHopsHint:
2077
+ '0 = 直連(忽略 header)。1 = nginx 或 Cloudflare→應用。2 = Cloudflare→nginx→應用。',
2078
+ proxyIpSource: '客戶端 IP 來源',
2079
+ proxyIpSourceHint:
2080
+ 'auto 會依序嘗試 CF-Connecting-IP、X-Real-IP、X-Forwarded-For。僅直連時先選「socket」。',
2081
+ proxySrcAuto: '自動(建議)',
2082
+ proxySrcCf: 'Cloudflare(CF-Connecting-IP)',
2083
+ proxySrcNginx: 'nginx(X-Real-IP)',
2084
+ proxySrcXff: '僅 X-Forwarded-For',
2085
+ proxySrcSocket: '僅 TCP socket(無代理)',
2086
+ trustedProxies: '可信代理 IP / CIDR',
2087
+ trustedProxiesHint:
2088
+ '只有這些 peer 才可設定 CF-Connecting-IP / X-Real-IP / XFF。預設 127.0.0.1(本機 nginx)。遠端代理請加入其 IP。直連客戶無法偽造 header。',
2089
+ sectionLimits: '限流',
2090
+ sectionAuth: '失敗認證',
2091
+ sectionRate: '限流濫用(429)',
2092
+ sectionConn: '連線洪水',
2093
+ sectionVelocity: '請求速率',
2094
+ sectionEscalate: '累犯升級',
2095
+ sectionWhitelist: '自動封鎖白名單',
2096
+ whitelistHint: '每行一個 IP 或 CIDR。白名單 IP 永不被自動封鎖。',
2097
+ rateWindow: '視窗(秒)',
2098
+ rateMaxKey: '金鑰上限',
2099
+ rateMaxIp: '未認證 IP 上限',
2100
+ burstWindow: 'Burst 視窗(秒)',
2101
+ burstMax: 'Burst 上限',
2102
+ enableRule: '啟用',
2103
+ threshold: '門檻',
2104
+ windowSec: '視窗(秒)',
2105
+ banMin: '封鎖時長(分)',
2106
+ escalateAfter: '累計自動封鎖 N 次後升級',
2107
+ escalateMin: '升級後封鎖(分)',
2108
+ maxConcurrent: '每 IP 最大並發',
2109
+ velocityMax: '最大請求數',
2110
+ eventsTitle: '最近自動封鎖事件',
2111
+ eventTime: '時間',
2112
+ eventSource: '規則',
2113
+ eventDuration: '封鎖時長',
2114
+ sources: {
2115
+ manual: '手動',
2116
+ 'auto-auth': '自動 · 認證',
2117
+ 'auto-rate': '自動 · 429',
2118
+ 'auto-conn': '自動 · 並發',
2119
+ 'auto-velocity': '自動 · 速率',
2120
+ 'auto-escalate': '自動 · 升級',
2121
+ },
2122
+ },
2123
+ pm2: {
2124
+ title: 'PM2 控制',
2125
+ tabRunner: '運行方式',
2126
+ tabPort: '連接埠',
2127
+ tabConfig: '設定',
2128
+ tabLogs: '日誌',
2129
+ status: '進程狀態',
2130
+ start: '用 PM2 啟動',
2131
+ stop: '停止 PM2',
2132
+ restart: '重啟',
2133
+ reload: '重載',
2134
+ logs: '日誌',
2135
+ logsHint: '優先顯示錯誤日誌',
2136
+ clearLogs: '清除日誌',
2137
+ confirmClearLogs: '確定清除 PM2 與 ysk-omni 日誌檔?此操作無法復原(檔案會被清空)。',
2138
+ logsCleared: '已清除 {n} 個日誌檔。',
2139
+ logsAutoTrim: '超過 {maxMb} MB 會自動裁剪,只保留最後約 {keepKb} KB(每次讀取日誌時檢查)。',
2140
+ refresh: '重新整理',
2141
+ confirmStop: '確定停止 PM2 進程?',
2142
+ confirmRestart: '確定以 PM2 重啟?會妥善移交 port。',
2143
+ unavailable: 'PM2 不可用',
2144
+ disabled: '已停用 PM2 管理',
2145
+ app: '應用名稱',
2146
+ pid: '進程 ID',
2147
+ uptime: '運行時間',
2148
+ memory: '記憶體',
2149
+ cpu: 'CPU',
2150
+ restarts: '重啟次數',
2151
+ portBusy: '連接埠佔用中',
2152
+ port: '連接埠',
2153
+ portTitle: '監聽連接埠',
2154
+ portHint:
2155
+ 'Gateway Admin 與 API 的 HTTP 連接埠。更改後會寫入 .env 並重啟進程,新連接埠才會生效。',
2156
+ fieldPort: '連接埠',
2157
+ portDefaultNote: '預設為 3850。有效範圍:1–65535。',
2158
+ savePort: '儲存連接埠並重啟',
2159
+ useDefaultPort: '使用預設(3850)',
2160
+ portInvalid: '請輸入有效連接埠(1–65535)。',
2161
+ confirmPortChange:
2162
+ '將監聽連接埠改為 {port} 並重啟 Gateway?之後請用新連接埠開啟 Admin(例如 http://localhost:{port}/admin)。',
2163
+ portChangedMsg: '連接埠已更新:{from} → {to}。',
2164
+ portSavedNeedRestart: '連接埠 {port} 已寫入 .env。請重啟後才會生效。',
2165
+ portAfterRestart: '重啟後請開啟 http://localhost:{port}/admin',
2166
+ hint: '可用 PM2 或 ysk-omni 運行,可在此或 CLI 切換。',
2167
+ switchTitle: '運行方式',
2168
+ switchHint: '同一時間只應有一個進程綁定連接埠。',
2169
+ currentRunner: '目前 runner',
2170
+ runnerPm2: 'PM2',
2171
+ runnerGctoac: 'ysk-omni(獨立進程)',
2172
+ runnerNone: '未運行',
2173
+ runnerUnknown: '未知/混合',
2174
+ switchToPm2: '切換到 PM2',
2175
+ switchToGctoac: '切換到 ysk-omni',
2176
+ confirmSwitchPm2: '確定切換到 PM2?gateway 會在數秒內以 PM2 重啟。',
2177
+ confirmSwitchGctoac: '確定切換到 ysk-omni?gateway 會在數秒內以獨立進程重啟。',
2178
+ switchScheduled: '已排程切換。管理面板將在約 10 秒後自動重新整理。',
2179
+ autoRefreshIn: '本頁將於 {n} 秒後自動重新載入…',
2180
+ autoRefreshNow: '正在重新載入…',
2181
+ omniPid: 'ysk-omni 進程 ID',
2182
+ configTitle: 'PM2 設定',
2183
+ configHint: '儲存至 pm2.runtime.json,經 ecosystem.config.cjs 套用。若目前用 PM2 運行,「儲存並套用」會重啟 PM2。',
2184
+ saveConfig: '儲存並套用',
2185
+ saveOnly: '只儲存',
2186
+ resetConfig: '還原預設',
2187
+ confirmReset: '確定將 PM2 設定還原為預設?',
2188
+ configSaved: '設定已儲存',
2189
+ fieldName: '應用名稱',
2190
+ fieldScript: '啟動腳本',
2191
+ fieldCwd: '工作目錄 (cwd)',
2192
+ fieldInstances: '實例數',
2193
+ fieldExecMode: '執行模式',
2194
+ fieldAutorestart: '自動重啟',
2195
+ fieldWatch: '檔案監視 (Watch)',
2196
+ fieldMaxMem: '記憶體上限重啟',
2197
+ fieldMaxRestarts: '最大重啟次數',
2198
+ fieldMinUptime: '最短運行時間',
2199
+ fieldRestartDelay: '重啟延遲 (ms)',
2200
+ fieldBackoff: '指數退避延遲 (ms)',
2201
+ fieldMergeLogs: '合併日誌',
2202
+ fieldTime: '日誌時間戳',
2203
+ fieldErrorFile: '錯誤日誌檔',
2204
+ fieldOutFile: '輸出日誌檔',
2205
+ fieldEnvExtra: '額外環境變數(每行 KEY=value)',
2206
+ fieldPreferred: '偏好 runner',
2207
+ empty: 'pm2 列表中找不到此應用',
2208
+ modeFork: 'fork',
2209
+ modeCluster: 'cluster',
2210
+ phCwd: '(套件根目錄)',
2211
+ phInstances: '1 或 max',
2212
+ phEnv: 'NODE_ENV=production',
2213
+ statusOnline: '運行中',
2214
+ statusErrored: '錯誤',
2215
+ statusStopped: '已停止',
2216
+ msgOk: '正常',
2217
+ msgDisabled: 'PM2 管理已停用(PM2_ADMIN_ENABLED=false)。',
2218
+ msgBinaryMissing: '找不到 pm2,請執行:npm install -g pm2',
2219
+ msgNotInList:
2220
+ '應用「{app}」不在 PM2 列表中 — 請用「用 PM2 啟動」或「切換到 PM2」。',
2221
+ msgPortGctoac:
2222
+ '連接埠 {port} 正由 ysk-omni 佔用(pid {pid})。請按「切換到 PM2」移交。',
2223
+ msgPortBusy: '連接埠 {port} 被佔用(pid {pids})。',
2224
+ msgErrored:
2225
+ 'PM2 進程出錯 — 請查日誌/設定,然後重啟或處理連接埠衝突。',
2226
+ msgBothRunners:
2227
+ '偵測到兩個 runner;ysk-omni pid {pid} 仍佔用資源。請用「切換」只保留一個。',
2228
+ msgError: 'PM2 錯誤:{error}',
2229
+ msgSwitchPm2: '正在切換至 PM2… Gateway 將於數秒內以 PM2 重新啟動。',
2230
+ msgSwitchGctoac:
2231
+ '正在切換至 ysk-omni… Gateway 將於數秒內以獨立進程重新啟動。',
2232
+ },
2233
+ system: {
2234
+ title: '系統狀態',
2235
+ tabSoftware: '軟件',
2236
+ tabPackage: '套件',
2237
+ tabEnv: '環境',
2238
+ envHint: '運行環境與版本快照。',
2239
+ checkUpdate: '檢查更新',
2240
+ oneClick: '更新套件並重啟',
2241
+ selfUpdate: '套件版本',
2242
+ selfHint: '對比版本 · 更新套件會重啟 gateway。',
2243
+ current: '本機版本',
2244
+ npm: 'npm 最新版',
2245
+ github: 'GitHub 最新版',
2246
+ install: '安裝渠道',
2247
+ confirmUpdate: '確定更新套件並重啟 gateway?期間 API 會短暫中斷。',
2248
+ scheduled: '已排程更新,請約 30 秒後重新整理頁面。',
2249
+ database: '資料庫',
2250
+ grokCli: 'Grok CLI',
2251
+ concurrency: '併發',
2252
+ runtime: '運行狀態',
2253
+ software: '系統軟件',
2254
+ softwareHint: '所需軟件與已安裝版本。',
2255
+ softName: '軟件',
2256
+ softLevel: '需求',
2257
+ softInstalled: '已安裝',
2258
+ softVersion: '版本',
2259
+ softStatus: '狀態',
2260
+ softDetail: '說明',
2261
+ levelRequired: '必須',
2262
+ levelRecommended: '建議',
2263
+ levelOptional: '可選',
2264
+ levelBundled: '內建',
2265
+ softOk: '正常',
2266
+ softMissing: '未安裝',
2267
+ softWarn: '注意',
2268
+ envTitle: '環境變數',
2269
+ up: '正常',
2270
+ down: '異常',
2271
+ yes: '是',
2272
+ no: '否',
2273
+ badgeUpdate: '有新版本',
2274
+ badgeOk: '已是最新',
2275
+ badgeAhead: '新於 npm',
2276
+ badgeUnknown: '無法比較',
2277
+ statusHintUpdate: '發佈庫有較新版本,可按「更新套件並重啟」。',
2278
+ statusHintOk: '本機版本與目前已知最新發佈版一致。',
2279
+ statusHintAhead:
2280
+ '本機版本比 npm 新(常見於 git/開發版)。若是 git 安裝,「更新套件」仍可拉取最新 commits。',
2281
+ statusHintUnknown: '無法連上 npm/GitHub,未能比較版本。',
2282
+ checkResult: '版本檢查結果',
2283
+ channelGit: 'git(開發目錄)',
2284
+ channelNpmGlobal: 'npm 全域',
2285
+ channelNpmLocal: 'npm 本地',
2286
+ channelUnknown: '未知',
2287
+ encryption: '加密',
2288
+ ready: '就緒',
2289
+ notReady: '未就緒',
2290
+ allRequiredOk: '必須軟件齊全',
2291
+ requiredMissing: '有必須軟件缺失',
2292
+ },
2293
+ common: {
2294
+ empty: '暫無資料',
2295
+ active: '啟用',
2296
+ revoked: '已撤銷',
2297
+ save: '儲存',
2298
+ cancel: '關閉',
2299
+ loading: '載入中…',
2300
+ powered: '技術支援',
2301
+ actions: '操作',
2302
+ yes: '是',
2303
+ no: '否',
2304
+ ok: '確定',
2305
+ confirm: '確定',
2306
+ notice: '提示',
2307
+ confirmTitle: '請確認',
2308
+ dangerTitle: '確認操作',
2309
+ apply: '套用',
2310
+ reset: '重設',
2311
+ search: '搜尋',
2312
+ prev: '上一頁',
2313
+ next: '下一頁',
2314
+ perPage: '每頁',
2315
+ pagerTotal: '共 {n} 筆',
2316
+ pagerPage: '第 {n} / {total} 頁',
2317
+ filterTitle: '搜尋與篩選',
2318
+ filterHint: '設定條件後按「套用」',
2319
+ featureOff: '已關閉',
2320
+ all: '全部',
2321
+ requestFailed: '請求失敗',
2322
+ ms: '{n} 毫秒',
2323
+ perMin: '{n}/分',
2324
+ minutes: '{n} 分鐘',
2325
+ mb: '{n} MB',
2326
+ percent: '{n}%',
2327
+ ipLabel: 'IP',
2328
+ uaLabel: 'UA',
2329
+ httpStatus: 'HTTP',
2330
+ },
2331
+ /** API error.code → 使用者可見訊息(管理面板) */
2332
+ errors: {
2333
+ unauthorized: '憑證無效或缺失,請重新登入。',
2334
+ forbidden: '你沒有執行此操作的權限。',
2335
+ not_found: '找不到請求的資源。',
2336
+ validation_error: '請求無效,請檢查輸入內容。',
2337
+ rate_limit_exceeded: '已超過速率限制,請稍後再試。',
2338
+ concurrency_limit_exceeded: 'Grok 並行工作過多,請稍候再試。',
2339
+ internal_error: '伺服器發生內部錯誤。',
2340
+ engine_error: 'Grok CLI 回傳錯誤。',
2341
+ engine_timeout: 'Grok CLI 執行逾時。',
2342
+ engine_not_available: '此伺服器無法使用 Grok CLI。',
2343
+ document_too_large: '文件大小超過允許上限。',
2344
+ document_type_not_allowed: '不允許此文件類型。',
2345
+ invalid_cwd: '不允許使用此工作目錄。',
2346
+ service_unavailable: '服務暫時無法使用。',
2347
+ queue_full: '對話佇列已滿,請稍後再試。',
2348
+ queue_draining: '對話佇列已暫停或正在排空。',
2349
+ queue_wait_timeout: '在對話佇列中等待逾時。',
2350
+ queue_cancelled: '對話工作已取消。',
2351
+ media_not_supported: '此媒體功能不可用或已停用。',
2352
+ media_provider_unavailable: '媒體提供者不可用。',
2353
+ media_generation_failed: '媒體生成失敗。',
2354
+ media_forbidden:
2355
+ '此 API 金鑰不允許生成媒體。請使用 agent 模式金鑰或管理員工作階段。',
2356
+ feature_disabled: '此 API 功能已停用。',
2357
+ feature: {
2358
+ imagesApi:
2359
+ 'Images API 已停用。請至「管理 → API 能力 → Images API」啟用。',
2360
+ videoApi:
2361
+ 'Video API 已停用。請至「管理 → API 能力 → Videos API」啟用。',
2362
+ audioApi:
2363
+ 'Audio API 已停用。請至「管理 → API 能力 → Audio API」啟用。',
2364
+ tools:
2365
+ 'Tools 已停用。請至「管理 → API 能力」啟用 Tools(圖像生成需要)。',
2366
+ filesOpenAiAlias:
2367
+ 'OpenAI Files API 別名已停用。請至「管理 → API 能力 → Files API 別名」啟用。',
2368
+ },
2369
+ media: {
2370
+ agent_or_admin_required:
2371
+ '圖像生成需要 agent 模式 API 金鑰或管理員工作階段。安全模式金鑰無法使用圖像工具。',
2372
+ source_required: '請提供圖像檔、媒體資產或文件作為來源。',
2373
+ source_must_be_image: '編輯或生成影片時,來源必須為圖像。',
2374
+ no_image_in_sandbox:
2375
+ 'Grok 已結束,但沙箱及今次 run 對應的 session images/ 均未找到圖像檔。這不是 imagesApi 或 API 金鑰問題。',
2376
+ no_video_in_sandbox:
2377
+ 'Grok 已結束,但沙箱及今次 run 對應的 session 均未找到影片檔。',
2378
+ provider_no_edit: '目前媒體提供者不支援圖像編輯。',
2379
+ },
2380
+ },
2381
+ },
2382
+ };
2383
+
2384
+ function detectLocale() {
2385
+ const saved = localStorage.getItem(LANG_KEY);
2386
+ if (saved === 'en' || saved === 'zh-Hant') return saved;
2387
+ const nav = (navigator.language || navigator.userLanguage || 'en').toLowerCase();
2388
+ if (nav.startsWith('zh')) return 'zh-Hant';
2389
+ return 'en';
2390
+ }
2391
+
2392
+ let locale = detectLocale();
2393
+
2394
+ export function getLocale() {
2395
+ return locale;
2396
+ }
2397
+
2398
+ export function setLocale(next) {
2399
+ if (next !== 'en' && next !== 'zh-Hant') return;
2400
+ locale = next;
2401
+ localStorage.setItem(LANG_KEY, next);
2402
+ }
2403
+
2404
+ export function t(path) {
2405
+ const parts = path.split('.');
2406
+ let cur = dict[locale] || dict.en;
2407
+ for (const p of parts) {
2408
+ if (cur && typeof cur === 'object' && p in cur) cur = cur[p];
2409
+ else {
2410
+ cur = dict.en;
2411
+ for (const q of parts) {
2412
+ if (cur && typeof cur === 'object' && q in cur) cur = cur[q];
2413
+ else return path;
2414
+ }
2415
+ break;
2416
+ }
2417
+ }
2418
+ return typeof cur === 'string' ? cur : path;
2419
+ }
2420
+
2421
+ /** True if path resolves to a real string (not missing key). */
2422
+ export function hasT(path) {
2423
+ return t(path) !== path;
2424
+ }
2425
+
2426
+ /** t() with {name} placeholders: tf('keys.ipCount', { n: 3 }) */
2427
+ export function tf(path, vars = {}) {
2428
+ let s = t(path);
2429
+ for (const [k, v] of Object.entries(vars)) {
2430
+ s = s.replaceAll(`{${k}}`, String(v));
2431
+ }
2432
+ return s;
2433
+ }
2434
+
2435
+ export function langSwitchHtml() {
2436
+ const aria = locale === 'zh-Hant' ? '語言' : 'Language';
2437
+ return `
2438
+ <div class="lang-switch" role="group" aria-label="${aria}">
2439
+ <button type="button" data-lang="en" class="${locale === 'en' ? 'is-active' : ''}">EN</button>
2440
+ <button type="button" data-lang="zh-Hant" class="${locale === 'zh-Hant' ? 'is-active' : ''}">中文</button>
2441
+ </div>`;
2442
+ }