libre-webui 0.21.3 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (945) hide show
  1. package/README.md +308 -328
  2. package/backend/dist/cli/migrateSqliteToPostgres.d.ts +2 -0
  3. package/backend/dist/cli/migrateSqliteToPostgres.d.ts.map +1 -0
  4. package/backend/dist/cli/migrateSqliteToPostgres.js +113 -0
  5. package/backend/dist/cli/migrateSqliteToPostgres.js.map +1 -0
  6. package/backend/dist/cli/recoveryBackup.d.ts +3 -0
  7. package/backend/dist/cli/recoveryBackup.d.ts.map +1 -0
  8. package/backend/dist/cli/recoveryBackup.js +251 -0
  9. package/backend/dist/cli/recoveryBackup.js.map +1 -0
  10. package/backend/dist/cli/recoveryInventory.d.ts +2 -0
  11. package/backend/dist/cli/recoveryInventory.d.ts.map +1 -0
  12. package/backend/dist/cli/recoveryInventory.js +109 -0
  13. package/backend/dist/cli/recoveryInventory.js.map +1 -0
  14. package/backend/dist/db.d.ts +27 -0
  15. package/backend/dist/db.d.ts.map +1 -1
  16. package/backend/dist/db.js +333 -16
  17. package/backend/dist/db.js.map +1 -1
  18. package/backend/dist/env.d.ts.map +1 -1
  19. package/backend/dist/env.js +12 -2
  20. package/backend/dist/env.js.map +1 -1
  21. package/backend/dist/index.d.ts.map +1 -1
  22. package/backend/dist/index.js +235 -47
  23. package/backend/dist/index.js.map +1 -1
  24. package/backend/dist/main.d.ts +2 -0
  25. package/backend/dist/main.d.ts.map +1 -0
  26. package/backend/dist/main.js +137 -0
  27. package/backend/dist/main.js.map +1 -0
  28. package/backend/dist/middleware/auth.d.ts.map +1 -1
  29. package/backend/dist/middleware/auth.js +7 -3
  30. package/backend/dist/middleware/auth.js.map +1 -1
  31. package/backend/dist/middleware/chatCancellationAdmission.d.ts +7 -0
  32. package/backend/dist/middleware/chatCancellationAdmission.d.ts.map +1 -0
  33. package/backend/dist/middleware/chatCancellationAdmission.js +17 -0
  34. package/backend/dist/middleware/chatCancellationAdmission.js.map +1 -0
  35. package/backend/dist/middleware/coordinatedRateLimit.d.ts +18 -0
  36. package/backend/dist/middleware/coordinatedRateLimit.d.ts.map +1 -0
  37. package/backend/dist/middleware/coordinatedRateLimit.js +52 -0
  38. package/backend/dist/middleware/coordinatedRateLimit.js.map +1 -0
  39. package/backend/dist/middleware/sharedRateLimit.d.ts +26 -0
  40. package/backend/dist/middleware/sharedRateLimit.d.ts.map +1 -0
  41. package/backend/dist/middleware/sharedRateLimit.js +99 -0
  42. package/backend/dist/middleware/sharedRateLimit.js.map +1 -0
  43. package/backend/dist/models/personaModel.d.ts +1 -26
  44. package/backend/dist/models/personaModel.d.ts.map +1 -1
  45. package/backend/dist/models/personaModel.js +54 -247
  46. package/backend/dist/models/personaModel.js.map +1 -1
  47. package/backend/dist/models/userModel.d.ts +23 -66
  48. package/backend/dist/models/userModel.d.ts.map +1 -1
  49. package/backend/dist/models/userModel.js +110 -187
  50. package/backend/dist/models/userModel.js.map +1 -1
  51. package/backend/dist/persistence/chatGenerationTypes.d.ts +24 -0
  52. package/backend/dist/persistence/chatGenerationTypes.d.ts.map +1 -0
  53. package/backend/dist/persistence/chatGenerationTypes.js +7 -0
  54. package/backend/dist/persistence/chatGenerationTypes.js.map +1 -0
  55. package/backend/dist/persistence/extensionTypes.d.ts +185 -0
  56. package/backend/dist/persistence/extensionTypes.d.ts.map +1 -0
  57. package/backend/dist/persistence/extensionTypes.js +13 -0
  58. package/backend/dist/persistence/extensionTypes.js.map +1 -0
  59. package/backend/dist/persistence/identityDeletionTypes.d.ts +16 -0
  60. package/backend/dist/persistence/identityDeletionTypes.d.ts.map +1 -0
  61. package/backend/dist/persistence/identityDeletionTypes.js +7 -0
  62. package/backend/dist/persistence/identityDeletionTypes.js.map +1 -0
  63. package/backend/dist/persistence/index.d.ts +48 -0
  64. package/backend/dist/persistence/index.d.ts.map +1 -0
  65. package/backend/dist/persistence/index.js +159 -0
  66. package/backend/dist/persistence/index.js.map +1 -0
  67. package/backend/dist/persistence/postgresConfig.d.ts +32 -0
  68. package/backend/dist/persistence/postgresConfig.d.ts.map +1 -0
  69. package/backend/dist/persistence/postgresConfig.js +91 -0
  70. package/backend/dist/persistence/postgresConfig.js.map +1 -0
  71. package/backend/dist/persistence/postgresCoreMigration.d.ts +8 -0
  72. package/backend/dist/persistence/postgresCoreMigration.d.ts.map +1 -0
  73. package/backend/dist/persistence/postgresCoreMigration.js +179 -0
  74. package/backend/dist/persistence/postgresCoreMigration.js.map +1 -0
  75. package/backend/dist/persistence/postgresDatabase.d.ts +40 -0
  76. package/backend/dist/persistence/postgresDatabase.d.ts.map +1 -0
  77. package/backend/dist/persistence/postgresDatabase.js +148 -0
  78. package/backend/dist/persistence/postgresDatabase.js.map +1 -0
  79. package/backend/dist/persistence/postgresExtensionMigration.d.ts +4 -0
  80. package/backend/dist/persistence/postgresExtensionMigration.d.ts.map +1 -0
  81. package/backend/dist/persistence/postgresExtensionMigration.js +143 -0
  82. package/backend/dist/persistence/postgresExtensionMigration.js.map +1 -0
  83. package/backend/dist/persistence/postgresExtensionRepositories.d.ts +6 -0
  84. package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -0
  85. package/backend/dist/persistence/postgresExtensionRepositories.js +550 -0
  86. package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -0
  87. package/backend/dist/persistence/postgresImportState.d.ts +9 -0
  88. package/backend/dist/persistence/postgresImportState.d.ts.map +1 -0
  89. package/backend/dist/persistence/postgresImportState.js +64 -0
  90. package/backend/dist/persistence/postgresImportState.js.map +1 -0
  91. package/backend/dist/persistence/postgresMigrationRegistry.d.ts +4 -0
  92. package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -0
  93. package/backend/dist/persistence/postgresMigrationRegistry.js +33 -0
  94. package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -0
  95. package/backend/dist/persistence/postgresMigrationTypes.d.ts +24 -0
  96. package/backend/dist/persistence/postgresMigrationTypes.d.ts.map +1 -0
  97. package/backend/dist/persistence/postgresMigrationTypes.js +7 -0
  98. package/backend/dist/persistence/postgresMigrationTypes.js.map +1 -0
  99. package/backend/dist/persistence/postgresMigrations.d.ts +15 -0
  100. package/backend/dist/persistence/postgresMigrations.d.ts.map +1 -0
  101. package/backend/dist/persistence/postgresMigrations.js +333 -0
  102. package/backend/dist/persistence/postgresMigrations.js.map +1 -0
  103. package/backend/dist/persistence/postgresPersistence.d.ts +17 -0
  104. package/backend/dist/persistence/postgresPersistence.d.ts.map +1 -0
  105. package/backend/dist/persistence/postgresPersistence.js +332 -0
  106. package/backend/dist/persistence/postgresPersistence.js.map +1 -0
  107. package/backend/dist/persistence/postgresPluginDefinitionMigration.d.ts +4 -0
  108. package/backend/dist/persistence/postgresPluginDefinitionMigration.d.ts.map +1 -0
  109. package/backend/dist/persistence/postgresPluginDefinitionMigration.js +40 -0
  110. package/backend/dist/persistence/postgresPluginDefinitionMigration.js.map +1 -0
  111. package/backend/dist/persistence/postgresResourceRepositories.d.ts +7 -0
  112. package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -0
  113. package/backend/dist/persistence/postgresResourceRepositories.js +776 -0
  114. package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -0
  115. package/backend/dist/persistence/postgresSchemaInspector.d.ts +14 -0
  116. package/backend/dist/persistence/postgresSchemaInspector.d.ts.map +1 -0
  117. package/backend/dist/persistence/postgresSchemaInspector.js +817 -0
  118. package/backend/dist/persistence/postgresSchemaInspector.js.map +1 -0
  119. package/backend/dist/persistence/resourceTypes.d.ts +207 -0
  120. package/backend/dist/persistence/resourceTypes.d.ts.map +1 -0
  121. package/backend/dist/persistence/resourceTypes.js +38 -0
  122. package/backend/dist/persistence/resourceTypes.js.map +1 -0
  123. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts +4 -0
  124. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -0
  125. package/backend/dist/persistence/sqliteExtensionRepositories.js +494 -0
  126. package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -0
  127. package/backend/dist/persistence/sqliteMigrations.d.ts +93 -0
  128. package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -0
  129. package/backend/dist/persistence/sqliteMigrations.js +2232 -0
  130. package/backend/dist/persistence/sqliteMigrations.js.map +1 -0
  131. package/backend/dist/persistence/sqlitePersistence.d.ts +23 -0
  132. package/backend/dist/persistence/sqlitePersistence.d.ts.map +1 -0
  133. package/backend/dist/persistence/sqlitePersistence.js +596 -0
  134. package/backend/dist/persistence/sqlitePersistence.js.map +1 -0
  135. package/backend/dist/persistence/sqliteResourceRepositories.d.ts +4 -0
  136. package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -0
  137. package/backend/dist/persistence/sqliteResourceRepositories.js +663 -0
  138. package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -0
  139. package/backend/dist/persistence/sqliteSyncExecutor.d.ts +5 -0
  140. package/backend/dist/persistence/sqliteSyncExecutor.d.ts.map +1 -0
  141. package/backend/dist/persistence/sqliteSyncExecutor.js +19 -0
  142. package/backend/dist/persistence/sqliteSyncExecutor.js.map +1 -0
  143. package/backend/dist/persistence/sqliteToPostgresMigration.d.ts +80 -0
  144. package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -0
  145. package/backend/dist/persistence/sqliteToPostgresMigration.js +1543 -0
  146. package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -0
  147. package/backend/dist/persistence/types.d.ts +131 -0
  148. package/backend/dist/persistence/types.d.ts.map +1 -0
  149. package/backend/dist/persistence/types.js +18 -0
  150. package/backend/dist/persistence/types.js.map +1 -0
  151. package/backend/dist/persistence/voiceProfileNameLookup.d.ts +9 -0
  152. package/backend/dist/persistence/voiceProfileNameLookup.d.ts.map +1 -0
  153. package/backend/dist/persistence/voiceProfileNameLookup.js +15 -0
  154. package/backend/dist/persistence/voiceProfileNameLookup.js.map +1 -0
  155. package/backend/dist/platform/coordination/index.d.ts +7 -0
  156. package/backend/dist/platform/coordination/index.d.ts.map +1 -0
  157. package/backend/dist/platform/coordination/index.js +24 -0
  158. package/backend/dist/platform/coordination/index.js.map +1 -0
  159. package/backend/dist/platform/coordination/localCoordinator.d.ts +49 -0
  160. package/backend/dist/platform/coordination/localCoordinator.d.ts.map +1 -0
  161. package/backend/dist/platform/coordination/localCoordinator.js +380 -0
  162. package/backend/dist/platform/coordination/localCoordinator.js.map +1 -0
  163. package/backend/dist/platform/coordination/redisCoordinator.d.ts +83 -0
  164. package/backend/dist/platform/coordination/redisCoordinator.d.ts.map +1 -0
  165. package/backend/dist/platform/coordination/redisCoordinator.js +726 -0
  166. package/backend/dist/platform/coordination/redisCoordinator.js.map +1 -0
  167. package/backend/dist/platform/coordination/service.d.ts +11 -0
  168. package/backend/dist/platform/coordination/service.d.ts.map +1 -0
  169. package/backend/dist/platform/coordination/service.js +55 -0
  170. package/backend/dist/platform/coordination/service.js.map +1 -0
  171. package/backend/dist/platform/coordination/sharedAdmission.d.ts +53 -0
  172. package/backend/dist/platform/coordination/sharedAdmission.d.ts.map +1 -0
  173. package/backend/dist/platform/coordination/sharedAdmission.js +194 -0
  174. package/backend/dist/platform/coordination/sharedAdmission.js.map +1 -0
  175. package/backend/dist/platform/coordination/types.d.ts +76 -0
  176. package/backend/dist/platform/coordination/types.d.ts.map +1 -0
  177. package/backend/dist/platform/coordination/types.js +32 -0
  178. package/backend/dist/platform/coordination/types.js.map +1 -0
  179. package/backend/dist/platform/events/durableEventGateway.d.ts +54 -0
  180. package/backend/dist/platform/events/durableEventGateway.d.ts.map +1 -0
  181. package/backend/dist/platform/events/durableEventGateway.js +262 -0
  182. package/backend/dist/platform/events/durableEventGateway.js.map +1 -0
  183. package/backend/dist/platform/events/index.d.ts +3 -0
  184. package/backend/dist/platform/events/index.d.ts.map +1 -0
  185. package/backend/dist/platform/events/index.js +8 -0
  186. package/backend/dist/platform/events/index.js.map +1 -0
  187. package/backend/dist/platform/events/service.d.ts +8 -0
  188. package/backend/dist/platform/events/service.d.ts.map +1 -0
  189. package/backend/dist/platform/events/service.js +25 -0
  190. package/backend/dist/platform/events/service.js.map +1 -0
  191. package/backend/dist/platform/jobs/chatGenerationEnqueuer.d.ts +3 -0
  192. package/backend/dist/platform/jobs/chatGenerationEnqueuer.d.ts.map +1 -0
  193. package/backend/dist/platform/jobs/chatGenerationEnqueuer.js +55 -0
  194. package/backend/dist/platform/jobs/chatGenerationEnqueuer.js.map +1 -0
  195. package/backend/dist/platform/jobs/documentIngestionEnqueuer.d.ts +3 -0
  196. package/backend/dist/platform/jobs/documentIngestionEnqueuer.d.ts.map +1 -0
  197. package/backend/dist/platform/jobs/documentIngestionEnqueuer.js +38 -0
  198. package/backend/dist/platform/jobs/documentIngestionEnqueuer.js.map +1 -0
  199. package/backend/dist/platform/jobs/domainJobContracts.d.ts +30 -0
  200. package/backend/dist/platform/jobs/domainJobContracts.d.ts.map +1 -0
  201. package/backend/dist/platform/jobs/domainJobContracts.js +53 -0
  202. package/backend/dist/platform/jobs/domainJobContracts.js.map +1 -0
  203. package/backend/dist/platform/jobs/domainJobHandlers.d.ts +11 -0
  204. package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -0
  205. package/backend/dist/platform/jobs/domainJobHandlers.js +617 -0
  206. package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -0
  207. package/backend/dist/platform/jobs/durableEventIdentity.d.ts +8 -0
  208. package/backend/dist/platform/jobs/durableEventIdentity.d.ts.map +1 -0
  209. package/backend/dist/platform/jobs/durableEventIdentity.js +33 -0
  210. package/backend/dist/platform/jobs/durableEventIdentity.js.map +1 -0
  211. package/backend/dist/platform/jobs/durableJobRuntime.d.ts +57 -0
  212. package/backend/dist/platform/jobs/durableJobRuntime.d.ts.map +1 -0
  213. package/backend/dist/platform/jobs/durableJobRuntime.js +131 -0
  214. package/backend/dist/platform/jobs/durableJobRuntime.js.map +1 -0
  215. package/backend/dist/platform/jobs/durableJobRuntimeBackend.d.ts +28 -0
  216. package/backend/dist/platform/jobs/durableJobRuntimeBackend.d.ts.map +1 -0
  217. package/backend/dist/platform/jobs/durableJobRuntimeBackend.js +62 -0
  218. package/backend/dist/platform/jobs/durableJobRuntimeBackend.js.map +1 -0
  219. package/backend/dist/platform/jobs/durableJobService.d.ts +85 -0
  220. package/backend/dist/platform/jobs/durableJobService.d.ts.map +1 -0
  221. package/backend/dist/platform/jobs/durableJobService.js +726 -0
  222. package/backend/dist/platform/jobs/durableJobService.js.map +1 -0
  223. package/backend/dist/platform/jobs/durableJobTypes.d.ts +195 -0
  224. package/backend/dist/platform/jobs/durableJobTypes.d.ts.map +1 -0
  225. package/backend/dist/platform/jobs/durableJobTypes.js +72 -0
  226. package/backend/dist/platform/jobs/durableJobTypes.js.map +1 -0
  227. package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts +87 -0
  228. package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts.map +1 -0
  229. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js +429 -0
  230. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js.map +1 -0
  231. package/backend/dist/platform/jobs/identityDeletionEnqueuer.d.ts +3 -0
  232. package/backend/dist/platform/jobs/identityDeletionEnqueuer.d.ts.map +1 -0
  233. package/backend/dist/platform/jobs/identityDeletionEnqueuer.js +36 -0
  234. package/backend/dist/platform/jobs/identityDeletionEnqueuer.js.map +1 -0
  235. package/backend/dist/platform/jobs/index.d.ts +18 -0
  236. package/backend/dist/platform/jobs/index.d.ts.map +1 -0
  237. package/backend/dist/platform/jobs/index.js +34 -0
  238. package/backend/dist/platform/jobs/index.js.map +1 -0
  239. package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.d.ts +4 -0
  240. package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.d.ts.map +1 -0
  241. package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.js +25 -0
  242. package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.js.map +1 -0
  243. package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.d.ts +4 -0
  244. package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.d.ts.map +1 -0
  245. package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.js +23 -0
  246. package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.js.map +1 -0
  247. package/backend/dist/platform/jobs/postgresDurableJobMigration.d.ts +11 -0
  248. package/backend/dist/platform/jobs/postgresDurableJobMigration.d.ts.map +1 -0
  249. package/backend/dist/platform/jobs/postgresDurableJobMigration.js +106 -0
  250. package/backend/dist/platform/jobs/postgresDurableJobMigration.js.map +1 -0
  251. package/backend/dist/platform/jobs/postgresDurableJobRepository.d.ts +88 -0
  252. package/backend/dist/platform/jobs/postgresDurableJobRepository.d.ts.map +1 -0
  253. package/backend/dist/platform/jobs/postgresDurableJobRepository.js +1185 -0
  254. package/backend/dist/platform/jobs/postgresDurableJobRepository.js.map +1 -0
  255. package/backend/dist/platform/jobs/postgresDurableJobService.d.ts +86 -0
  256. package/backend/dist/platform/jobs/postgresDurableJobService.d.ts.map +1 -0
  257. package/backend/dist/platform/jobs/postgresDurableJobService.js +696 -0
  258. package/backend/dist/platform/jobs/postgresDurableJobService.js.map +1 -0
  259. package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts +53 -0
  260. package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts.map +1 -0
  261. package/backend/dist/platform/jobs/postgresDurableJobWorker.js +393 -0
  262. package/backend/dist/platform/jobs/postgresDurableJobWorker.js.map +1 -0
  263. package/backend/dist/platform/jobs/resourceDeletionEnqueuer.d.ts +3 -0
  264. package/backend/dist/platform/jobs/resourceDeletionEnqueuer.d.ts.map +1 -0
  265. package/backend/dist/platform/jobs/resourceDeletionEnqueuer.js +43 -0
  266. package/backend/dist/platform/jobs/resourceDeletionEnqueuer.js.map +1 -0
  267. package/backend/dist/platform/jobs/sqliteDurableJobRepository.d.ts +166 -0
  268. package/backend/dist/platform/jobs/sqliteDurableJobRepository.d.ts.map +1 -0
  269. package/backend/dist/platform/jobs/sqliteDurableJobRepository.js +1008 -0
  270. package/backend/dist/platform/jobs/sqliteDurableJobRepository.js.map +1 -0
  271. package/backend/dist/platform/jobs/videoGenerationEnqueuer.d.ts +4 -0
  272. package/backend/dist/platform/jobs/videoGenerationEnqueuer.d.ts.map +1 -0
  273. package/backend/dist/platform/jobs/videoGenerationEnqueuer.js +46 -0
  274. package/backend/dist/platform/jobs/videoGenerationEnqueuer.js.map +1 -0
  275. package/backend/dist/platform/jobs/workExecutionEnqueuer.d.ts +3 -0
  276. package/backend/dist/platform/jobs/workExecutionEnqueuer.d.ts.map +1 -0
  277. package/backend/dist/platform/jobs/workExecutionEnqueuer.js +38 -0
  278. package/backend/dist/platform/jobs/workExecutionEnqueuer.js.map +1 -0
  279. package/backend/dist/platform/ollamaRuntimeConfig.d.ts +40 -0
  280. package/backend/dist/platform/ollamaRuntimeConfig.d.ts.map +1 -0
  281. package/backend/dist/platform/ollamaRuntimeConfig.js +72 -0
  282. package/backend/dist/platform/ollamaRuntimeConfig.js.map +1 -0
  283. package/backend/dist/platform/recovery/backupArchive.d.ts +120 -0
  284. package/backend/dist/platform/recovery/backupArchive.d.ts.map +1 -0
  285. package/backend/dist/platform/recovery/backupArchive.js +842 -0
  286. package/backend/dist/platform/recovery/backupArchive.js.map +1 -0
  287. package/backend/dist/platform/recovery/index.d.ts +3 -0
  288. package/backend/dist/platform/recovery/index.d.ts.map +1 -0
  289. package/backend/dist/platform/recovery/index.js +8 -0
  290. package/backend/dist/platform/recovery/index.js.map +1 -0
  291. package/backend/dist/platform/recovery/teamBackupArchive.d.ts +98 -0
  292. package/backend/dist/platform/recovery/teamBackupArchive.d.ts.map +1 -0
  293. package/backend/dist/platform/recovery/teamBackupArchive.js +1203 -0
  294. package/backend/dist/platform/recovery/teamBackupArchive.js.map +1 -0
  295. package/backend/dist/platform/runtimeConfig.d.ts +70 -0
  296. package/backend/dist/platform/runtimeConfig.d.ts.map +1 -0
  297. package/backend/dist/platform/runtimeConfig.js +205 -0
  298. package/backend/dist/platform/runtimeConfig.js.map +1 -0
  299. package/backend/dist/platform/storage/aesGcmKeyring.d.ts +26 -0
  300. package/backend/dist/platform/storage/aesGcmKeyring.d.ts.map +1 -0
  301. package/backend/dist/platform/storage/aesGcmKeyring.js +135 -0
  302. package/backend/dist/platform/storage/aesGcmKeyring.js.map +1 -0
  303. package/backend/dist/platform/storage/blobReferenceRepository.d.ts +36 -0
  304. package/backend/dist/platform/storage/blobReferenceRepository.d.ts.map +1 -0
  305. package/backend/dist/platform/storage/blobReferenceRepository.js +117 -0
  306. package/backend/dist/platform/storage/blobReferenceRepository.js.map +1 -0
  307. package/backend/dist/platform/storage/blobStore.d.ts +111 -0
  308. package/backend/dist/platform/storage/blobStore.d.ts.map +1 -0
  309. package/backend/dist/platform/storage/blobStore.js +46 -0
  310. package/backend/dist/platform/storage/blobStore.js.map +1 -0
  311. package/backend/dist/platform/storage/documentVectorIndex.d.ts +44 -0
  312. package/backend/dist/platform/storage/documentVectorIndex.d.ts.map +1 -0
  313. package/backend/dist/platform/storage/documentVectorIndex.js +110 -0
  314. package/backend/dist/platform/storage/documentVectorIndex.js.map +1 -0
  315. package/backend/dist/platform/storage/durableBlobQuotaPolicy.d.ts +82 -0
  316. package/backend/dist/platform/storage/durableBlobQuotaPolicy.d.ts.map +1 -0
  317. package/backend/dist/platform/storage/durableBlobQuotaPolicy.js +583 -0
  318. package/backend/dist/platform/storage/durableBlobQuotaPolicy.js.map +1 -0
  319. package/backend/dist/platform/storage/index.d.ts +19 -0
  320. package/backend/dist/platform/storage/index.d.ts.map +1 -0
  321. package/backend/dist/platform/storage/index.js +35 -0
  322. package/backend/dist/platform/storage/index.js.map +1 -0
  323. package/backend/dist/platform/storage/localEncryptedBlobStore.d.ts +120 -0
  324. package/backend/dist/platform/storage/localEncryptedBlobStore.d.ts.map +1 -0
  325. package/backend/dist/platform/storage/localEncryptedBlobStore.js +1205 -0
  326. package/backend/dist/platform/storage/localEncryptedBlobStore.js.map +1 -0
  327. package/backend/dist/platform/storage/personaMemoryIndexing.d.ts +12 -0
  328. package/backend/dist/platform/storage/personaMemoryIndexing.d.ts.map +1 -0
  329. package/backend/dist/platform/storage/personaMemoryIndexing.js +25 -0
  330. package/backend/dist/platform/storage/personaMemoryIndexing.js.map +1 -0
  331. package/backend/dist/platform/storage/pgVectorStore.d.ts +37 -0
  332. package/backend/dist/platform/storage/pgVectorStore.d.ts.map +1 -0
  333. package/backend/dist/platform/storage/pgVectorStore.js +493 -0
  334. package/backend/dist/platform/storage/pgVectorStore.js.map +1 -0
  335. package/backend/dist/platform/storage/platformDomainRepositories.d.ts +244 -0
  336. package/backend/dist/platform/storage/platformDomainRepositories.d.ts.map +1 -0
  337. package/backend/dist/platform/storage/platformDomainRepositories.js +7 -0
  338. package/backend/dist/platform/storage/platformDomainRepositories.js.map +1 -0
  339. package/backend/dist/platform/storage/platformStorageRuntime.d.ts +35 -0
  340. package/backend/dist/platform/storage/platformStorageRuntime.d.ts.map +1 -0
  341. package/backend/dist/platform/storage/platformStorageRuntime.js +299 -0
  342. package/backend/dist/platform/storage/platformStorageRuntime.js.map +1 -0
  343. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts +4 -0
  344. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts.map +1 -0
  345. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js +1017 -0
  346. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js.map +1 -0
  347. package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.d.ts +4 -0
  348. package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.d.ts.map +1 -0
  349. package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.js +40 -0
  350. package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.js.map +1 -0
  351. package/backend/dist/platform/storage/resourceContentCleanup.d.ts +29 -0
  352. package/backend/dist/platform/storage/resourceContentCleanup.d.ts.map +1 -0
  353. package/backend/dist/platform/storage/resourceContentCleanup.js +100 -0
  354. package/backend/dist/platform/storage/resourceContentCleanup.js.map +1 -0
  355. package/backend/dist/platform/storage/resourceDeletionLifecycle.d.ts +14 -0
  356. package/backend/dist/platform/storage/resourceDeletionLifecycle.d.ts.map +1 -0
  357. package/backend/dist/platform/storage/resourceDeletionLifecycle.js +31 -0
  358. package/backend/dist/platform/storage/resourceDeletionLifecycle.js.map +1 -0
  359. package/backend/dist/platform/storage/s3EncryptedBlobStore.d.ts +140 -0
  360. package/backend/dist/platform/storage/s3EncryptedBlobStore.d.ts.map +1 -0
  361. package/backend/dist/platform/storage/s3EncryptedBlobStore.js +1309 -0
  362. package/backend/dist/platform/storage/s3EncryptedBlobStore.js.map +1 -0
  363. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts +71 -0
  364. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts.map +1 -0
  365. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js +766 -0
  366. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js.map +1 -0
  367. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts +4 -0
  368. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts.map +1 -0
  369. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js +1037 -0
  370. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js.map +1 -0
  371. package/backend/dist/platform/storage/sqliteToTeamStorageMigration.d.ts +25 -0
  372. package/backend/dist/platform/storage/sqliteToTeamStorageMigration.d.ts.map +1 -0
  373. package/backend/dist/platform/storage/sqliteToTeamStorageMigration.js +1292 -0
  374. package/backend/dist/platform/storage/sqliteToTeamStorageMigration.js.map +1 -0
  375. package/backend/dist/platform/storage/storageFactory.d.ts +83 -0
  376. package/backend/dist/platform/storage/storageFactory.d.ts.map +1 -0
  377. package/backend/dist/platform/storage/storageFactory.js +530 -0
  378. package/backend/dist/platform/storage/storageFactory.js.map +1 -0
  379. package/backend/dist/platform/storage/storageSchemaContracts.d.ts +22 -0
  380. package/backend/dist/platform/storage/storageSchemaContracts.d.ts.map +1 -0
  381. package/backend/dist/platform/storage/storageSchemaContracts.js +299 -0
  382. package/backend/dist/platform/storage/storageSchemaContracts.js.map +1 -0
  383. package/backend/dist/platform/storage/vectorStore.d.ts +117 -0
  384. package/backend/dist/platform/storage/vectorStore.d.ts.map +1 -0
  385. package/backend/dist/platform/storage/vectorStore.js +40 -0
  386. package/backend/dist/platform/storage/vectorStore.js.map +1 -0
  387. package/backend/dist/platform/workPersistence/index.d.ts +9 -0
  388. package/backend/dist/platform/workPersistence/index.d.ts.map +1 -0
  389. package/backend/dist/platform/workPersistence/index.js +14 -0
  390. package/backend/dist/platform/workPersistence/index.js.map +1 -0
  391. package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.d.ts +9 -0
  392. package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.d.ts.map +1 -0
  393. package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.js +47 -0
  394. package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.js.map +1 -0
  395. package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.d.ts +3 -0
  396. package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.d.ts.map +1 -0
  397. package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.js +28 -0
  398. package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.js.map +1 -0
  399. package/backend/dist/platform/workPersistence/postgresWorkMigration.d.ts +3 -0
  400. package/backend/dist/platform/workPersistence/postgresWorkMigration.d.ts.map +1 -0
  401. package/backend/dist/platform/workPersistence/postgresWorkMigration.js +101 -0
  402. package/backend/dist/platform/workPersistence/postgresWorkMigration.js.map +1 -0
  403. package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts +79 -0
  404. package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts.map +1 -0
  405. package/backend/dist/platform/workPersistence/postgresWorkPersistence.js +521 -0
  406. package/backend/dist/platform/workPersistence/postgresWorkPersistence.js.map +1 -0
  407. package/backend/dist/platform/workPersistence/service.d.ts +6 -0
  408. package/backend/dist/platform/workPersistence/service.d.ts.map +1 -0
  409. package/backend/dist/platform/workPersistence/service.js +27 -0
  410. package/backend/dist/platform/workPersistence/service.js.map +1 -0
  411. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts +77 -0
  412. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts.map +1 -0
  413. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js +463 -0
  414. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js.map +1 -0
  415. package/backend/dist/platform/workPersistence/types.d.ts +159 -0
  416. package/backend/dist/platform/workPersistence/types.d.ts.map +1 -0
  417. package/backend/dist/platform/workPersistence/types.js +13 -0
  418. package/backend/dist/platform/workPersistence/types.js.map +1 -0
  419. package/backend/dist/platform/workPersistence/workExecutionTypes.d.ts +13 -0
  420. package/backend/dist/platform/workPersistence/workExecutionTypes.d.ts.map +1 -0
  421. package/backend/dist/platform/workPersistence/workExecutionTypes.js +7 -0
  422. package/backend/dist/platform/workPersistence/workExecutionTypes.js.map +1 -0
  423. package/backend/dist/platform/workPersistence/workMessageContentCodec.d.ts +8 -0
  424. package/backend/dist/platform/workPersistence/workMessageContentCodec.d.ts.map +1 -0
  425. package/backend/dist/platform/workPersistence/workMessageContentCodec.js +25 -0
  426. package/backend/dist/platform/workPersistence/workMessageContentCodec.js.map +1 -0
  427. package/backend/dist/platform/workPersistence/workTextSafety.d.ts +3 -0
  428. package/backend/dist/platform/workPersistence/workTextSafety.d.ts.map +1 -0
  429. package/backend/dist/platform/workPersistence/workTextSafety.js +8 -0
  430. package/backend/dist/platform/workPersistence/workTextSafety.js.map +1 -0
  431. package/backend/dist/routes/agentCli.js +1 -1
  432. package/backend/dist/routes/agentCli.js.map +1 -1
  433. package/backend/dist/routes/artifacts.d.ts.map +1 -1
  434. package/backend/dist/routes/artifacts.js +2 -1
  435. package/backend/dist/routes/artifacts.js.map +1 -1
  436. package/backend/dist/routes/auth.d.ts.map +1 -1
  437. package/backend/dist/routes/auth.js +64 -18
  438. package/backend/dist/routes/auth.js.map +1 -1
  439. package/backend/dist/routes/chat.d.ts.map +1 -1
  440. package/backend/dist/routes/chat.js +519 -85
  441. package/backend/dist/routes/chat.js.map +1 -1
  442. package/backend/dist/routes/documents.d.ts.map +1 -1
  443. package/backend/dist/routes/documents.js +134 -28
  444. package/backend/dist/routes/documents.js.map +1 -1
  445. package/backend/dist/routes/embeddings.d.ts.map +1 -1
  446. package/backend/dist/routes/embeddings.js +2 -1
  447. package/backend/dist/routes/embeddings.js.map +1 -1
  448. package/backend/dist/routes/health.d.ts +3 -0
  449. package/backend/dist/routes/health.d.ts.map +1 -0
  450. package/backend/dist/routes/health.js +52 -0
  451. package/backend/dist/routes/health.js.map +1 -0
  452. package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
  453. package/backend/dist/routes/huggingfaceHub.js +2 -1
  454. package/backend/dist/routes/huggingfaceHub.js.map +1 -1
  455. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  456. package/backend/dist/routes/imageGen.js +42 -10
  457. package/backend/dist/routes/imageGen.js.map +1 -1
  458. package/backend/dist/routes/jobs.d.ts +3 -0
  459. package/backend/dist/routes/jobs.d.ts.map +1 -0
  460. package/backend/dist/routes/jobs.js +126 -0
  461. package/backend/dist/routes/jobs.js.map +1 -0
  462. package/backend/dist/routes/libreClaw.d.ts.map +1 -1
  463. package/backend/dist/routes/libreClaw.js +10 -7
  464. package/backend/dist/routes/libreClaw.js.map +1 -1
  465. package/backend/dist/routes/media.d.ts.map +1 -1
  466. package/backend/dist/routes/media.js +523 -77
  467. package/backend/dist/routes/media.js.map +1 -1
  468. package/backend/dist/routes/notes.d.ts.map +1 -1
  469. package/backend/dist/routes/notes.js +21 -21
  470. package/backend/dist/routes/notes.js.map +1 -1
  471. package/backend/dist/routes/ollama.d.ts.map +1 -1
  472. package/backend/dist/routes/ollama.js +40 -12
  473. package/backend/dist/routes/ollama.js.map +1 -1
  474. package/backend/dist/routes/personas.d.ts.map +1 -1
  475. package/backend/dist/routes/personas.js +4 -2
  476. package/backend/dist/routes/personas.js.map +1 -1
  477. package/backend/dist/routes/plugins.d.ts.map +1 -1
  478. package/backend/dist/routes/plugins.js +79 -51
  479. package/backend/dist/routes/plugins.js.map +1 -1
  480. package/backend/dist/routes/preferences.d.ts.map +1 -1
  481. package/backend/dist/routes/preferences.js +290 -25
  482. package/backend/dist/routes/preferences.js.map +1 -1
  483. package/backend/dist/routes/search.d.ts.map +1 -1
  484. package/backend/dist/routes/search.js +23 -14
  485. package/backend/dist/routes/search.js.map +1 -1
  486. package/backend/dist/routes/stt.d.ts +9 -0
  487. package/backend/dist/routes/stt.d.ts.map +1 -0
  488. package/backend/dist/routes/stt.js +217 -0
  489. package/backend/dist/routes/stt.js.map +1 -0
  490. package/backend/dist/routes/systemDiagnostics.d.ts.map +1 -1
  491. package/backend/dist/routes/systemDiagnostics.js +2 -1
  492. package/backend/dist/routes/systemDiagnostics.js.map +1 -1
  493. package/backend/dist/routes/tts.d.ts.map +1 -1
  494. package/backend/dist/routes/tts.js +577 -28
  495. package/backend/dist/routes/tts.js.map +1 -1
  496. package/backend/dist/routes/users.d.ts.map +1 -1
  497. package/backend/dist/routes/users.js +16 -25
  498. package/backend/dist/routes/users.js.map +1 -1
  499. package/backend/dist/routes/work.d.ts.map +1 -1
  500. package/backend/dist/routes/work.js +167 -113
  501. package/backend/dist/routes/work.js.map +1 -1
  502. package/backend/dist/services/agentAccessService.d.ts +2 -2
  503. package/backend/dist/services/agentAccessService.d.ts.map +1 -1
  504. package/backend/dist/services/agentAccessService.js +5 -14
  505. package/backend/dist/services/agentAccessService.js.map +1 -1
  506. package/backend/dist/services/agentCliService.d.ts +3 -2
  507. package/backend/dist/services/agentCliService.d.ts.map +1 -1
  508. package/backend/dist/services/agentCliService.js +44 -16
  509. package/backend/dist/services/agentCliService.js.map +1 -1
  510. package/backend/dist/services/assistantCompletionService.d.ts +2 -1
  511. package/backend/dist/services/assistantCompletionService.d.ts.map +1 -1
  512. package/backend/dist/services/assistantCompletionService.js +7 -3
  513. package/backend/dist/services/assistantCompletionService.js.map +1 -1
  514. package/backend/dist/services/authService.d.ts +7 -2
  515. package/backend/dist/services/authService.d.ts.map +1 -1
  516. package/backend/dist/services/authService.js +23 -10
  517. package/backend/dist/services/authService.js.map +1 -1
  518. package/backend/dist/services/chatGenerationService.d.ts +5 -4
  519. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  520. package/backend/dist/services/chatGenerationService.js +23 -17
  521. package/backend/dist/services/chatGenerationService.js.map +1 -1
  522. package/backend/dist/services/chatRequestService.d.ts +4 -3
  523. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  524. package/backend/dist/services/chatRequestService.js +3 -3
  525. package/backend/dist/services/chatRequestService.js.map +1 -1
  526. package/backend/dist/services/chatService.d.ts +66 -16
  527. package/backend/dist/services/chatService.d.ts.map +1 -1
  528. package/backend/dist/services/chatService.js +402 -111
  529. package/backend/dist/services/chatService.js.map +1 -1
  530. package/backend/dist/services/codexOAuthService.d.ts +2 -2
  531. package/backend/dist/services/codexOAuthService.d.ts.map +1 -1
  532. package/backend/dist/services/codexOAuthService.js +63 -7
  533. package/backend/dist/services/codexOAuthService.js.map +1 -1
  534. package/backend/dist/services/dataArchiveService.d.ts +88 -0
  535. package/backend/dist/services/dataArchiveService.d.ts.map +1 -0
  536. package/backend/dist/services/dataArchiveService.js +1027 -0
  537. package/backend/dist/services/dataArchiveService.js.map +1 -0
  538. package/backend/dist/services/documentService.d.ts +67 -14
  539. package/backend/dist/services/documentService.d.ts.map +1 -1
  540. package/backend/dist/services/documentService.js +938 -193
  541. package/backend/dist/services/documentService.js.map +1 -1
  542. package/backend/dist/services/durableChatCompletion.d.ts +16 -0
  543. package/backend/dist/services/durableChatCompletion.d.ts.map +1 -0
  544. package/backend/dist/services/durableChatCompletion.js +34 -0
  545. package/backend/dist/services/durableChatCompletion.js.map +1 -0
  546. package/backend/dist/services/durableChatGenerationService.d.ts +19 -0
  547. package/backend/dist/services/durableChatGenerationService.d.ts.map +1 -0
  548. package/backend/dist/services/durableChatGenerationService.js +341 -0
  549. package/backend/dist/services/durableChatGenerationService.js.map +1 -0
  550. package/backend/dist/services/embeddingService.d.ts +1 -1
  551. package/backend/dist/services/embeddingService.d.ts.map +1 -1
  552. package/backend/dist/services/embeddingService.js +16 -13
  553. package/backend/dist/services/embeddingService.js.map +1 -1
  554. package/backend/dist/services/encryptionService.d.ts +28 -1
  555. package/backend/dist/services/encryptionService.d.ts.map +1 -1
  556. package/backend/dist/services/encryptionService.js +131 -51
  557. package/backend/dist/services/encryptionService.js.map +1 -1
  558. package/backend/dist/services/followUpService.d.ts +1 -1
  559. package/backend/dist/services/followUpService.d.ts.map +1 -1
  560. package/backend/dist/services/followUpService.js +1 -1
  561. package/backend/dist/services/followUpService.js.map +1 -1
  562. package/backend/dist/services/galleryService.d.ts +38 -37
  563. package/backend/dist/services/galleryService.d.ts.map +1 -1
  564. package/backend/dist/services/galleryService.js +356 -251
  565. package/backend/dist/services/galleryService.js.map +1 -1
  566. package/backend/dist/services/healthService.d.ts +65 -0
  567. package/backend/dist/services/healthService.d.ts.map +1 -0
  568. package/backend/dist/services/healthService.js +379 -0
  569. package/backend/dist/services/healthService.js.map +1 -0
  570. package/backend/dist/services/legacyCiphertextIntegrity.d.ts +40 -0
  571. package/backend/dist/services/legacyCiphertextIntegrity.d.ts.map +1 -0
  572. package/backend/dist/services/legacyCiphertextIntegrity.js +406 -0
  573. package/backend/dist/services/legacyCiphertextIntegrity.js.map +1 -0
  574. package/backend/dist/services/mediaGenerationJobService.d.ts +27 -5
  575. package/backend/dist/services/mediaGenerationJobService.d.ts.map +1 -1
  576. package/backend/dist/services/mediaGenerationJobService.js +185 -55
  577. package/backend/dist/services/mediaGenerationJobService.js.map +1 -1
  578. package/backend/dist/services/memoryService.d.ts +7 -83
  579. package/backend/dist/services/memoryService.d.ts.map +1 -1
  580. package/backend/dist/services/memoryService.js +428 -573
  581. package/backend/dist/services/memoryService.js.map +1 -1
  582. package/backend/dist/services/memoryUtils.d.ts.map +1 -1
  583. package/backend/dist/services/memoryUtils.js +8 -1
  584. package/backend/dist/services/memoryUtils.js.map +1 -1
  585. package/backend/dist/services/modelAccessService.d.ts +3 -3
  586. package/backend/dist/services/modelAccessService.d.ts.map +1 -1
  587. package/backend/dist/services/modelAccessService.js +8 -16
  588. package/backend/dist/services/modelAccessService.js.map +1 -1
  589. package/backend/dist/services/mutationEngineService.d.ts +0 -7
  590. package/backend/dist/services/mutationEngineService.d.ts.map +1 -1
  591. package/backend/dist/services/mutationEngineService.js +7 -78
  592. package/backend/dist/services/mutationEngineService.js.map +1 -1
  593. package/backend/dist/services/ollamaService.d.ts +4 -4
  594. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  595. package/backend/dist/services/ollamaService.js +62 -31
  596. package/backend/dist/services/ollamaService.js.map +1 -1
  597. package/backend/dist/services/personaService.d.ts.map +1 -1
  598. package/backend/dist/services/personaService.js +19 -54
  599. package/backend/dist/services/personaService.js.map +1 -1
  600. package/backend/dist/services/pluginActivationService.d.ts +6 -5
  601. package/backend/dist/services/pluginActivationService.d.ts.map +1 -1
  602. package/backend/dist/services/pluginActivationService.js +36 -76
  603. package/backend/dist/services/pluginActivationService.js.map +1 -1
  604. package/backend/dist/services/pluginAudioGenerationService.d.ts +11 -6
  605. package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -1
  606. package/backend/dist/services/pluginAudioGenerationService.js +74 -16
  607. package/backend/dist/services/pluginAudioGenerationService.js.map +1 -1
  608. package/backend/dist/services/pluginCacheInvalidation.d.ts +38 -0
  609. package/backend/dist/services/pluginCacheInvalidation.d.ts.map +1 -0
  610. package/backend/dist/services/pluginCacheInvalidation.js +198 -0
  611. package/backend/dist/services/pluginCacheInvalidation.js.map +1 -0
  612. package/backend/dist/services/pluginCapabilityRegistryService.d.ts +3 -3
  613. package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
  614. package/backend/dist/services/pluginCapabilityRegistryService.js +11 -7
  615. package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
  616. package/backend/dist/services/pluginCredentialsService.d.ts +9 -8
  617. package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
  618. package/backend/dist/services/pluginCredentialsService.js +48 -89
  619. package/backend/dist/services/pluginCredentialsService.js.map +1 -1
  620. package/backend/dist/services/pluginEmbeddingService.d.ts +8 -7
  621. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
  622. package/backend/dist/services/pluginEmbeddingService.js +13 -11
  623. package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
  624. package/backend/dist/services/pluginImageGenerationService.d.ts +10 -8
  625. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  626. package/backend/dist/services/pluginImageGenerationService.js +119 -14
  627. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  628. package/backend/dist/services/pluginSTTService.d.ts +47 -0
  629. package/backend/dist/services/pluginSTTService.d.ts.map +1 -0
  630. package/backend/dist/services/pluginSTTService.js +199 -0
  631. package/backend/dist/services/pluginSTTService.js.map +1 -0
  632. package/backend/dist/services/pluginService.d.ts +94 -40
  633. package/backend/dist/services/pluginService.d.ts.map +1 -1
  634. package/backend/dist/services/pluginService.js +833 -275
  635. package/backend/dist/services/pluginService.js.map +1 -1
  636. package/backend/dist/services/pluginTTSService.d.ts +26 -8
  637. package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
  638. package/backend/dist/services/pluginTTSService.js +277 -25
  639. package/backend/dist/services/pluginTTSService.js.map +1 -1
  640. package/backend/dist/services/pluginUsageService.d.ts +4 -4
  641. package/backend/dist/services/pluginUsageService.d.ts.map +1 -1
  642. package/backend/dist/services/pluginUsageService.js +44 -93
  643. package/backend/dist/services/pluginUsageService.js.map +1 -1
  644. package/backend/dist/services/pluginVariablesService.d.ts +14 -7
  645. package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
  646. package/backend/dist/services/pluginVariablesService.js +116 -81
  647. package/backend/dist/services/pluginVariablesService.js.map +1 -1
  648. package/backend/dist/services/pluginVideoGenerationService.d.ts +19 -8
  649. package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -1
  650. package/backend/dist/services/pluginVideoGenerationService.js +116 -20
  651. package/backend/dist/services/pluginVideoGenerationService.js.map +1 -1
  652. package/backend/dist/services/preferencesService.d.ts +31 -21
  653. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  654. package/backend/dist/services/preferencesService.js +104 -102
  655. package/backend/dist/services/preferencesService.js.map +1 -1
  656. package/backend/dist/services/recoveryInventoryService.d.ts +244 -0
  657. package/backend/dist/services/recoveryInventoryService.d.ts.map +1 -0
  658. package/backend/dist/services/recoveryInventoryService.js +1436 -0
  659. package/backend/dist/services/recoveryInventoryService.js.map +1 -0
  660. package/backend/dist/services/simpleGitHubOAuth.js +3 -3
  661. package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
  662. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
  663. package/backend/dist/services/simpleHuggingFaceOAuth.js +3 -3
  664. package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
  665. package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -1
  666. package/backend/dist/services/systemDiagnosticsService.js +2 -2
  667. package/backend/dist/services/systemDiagnosticsService.js.map +1 -1
  668. package/backend/dist/services/systemSettingsService.d.ts +5 -0
  669. package/backend/dist/services/systemSettingsService.d.ts.map +1 -0
  670. package/backend/dist/services/systemSettingsService.js +24 -0
  671. package/backend/dist/services/systemSettingsService.js.map +1 -0
  672. package/backend/dist/services/titleGenerationService.d.ts +1 -1
  673. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  674. package/backend/dist/services/titleGenerationService.js +1 -1
  675. package/backend/dist/services/titleGenerationService.js.map +1 -1
  676. package/backend/dist/services/voiceProfileService.d.ts +44 -0
  677. package/backend/dist/services/voiceProfileService.d.ts.map +1 -0
  678. package/backend/dist/services/voiceProfileService.js +195 -0
  679. package/backend/dist/services/voiceProfileService.js.map +1 -0
  680. package/backend/dist/services/webSearchService.d.ts +7 -7
  681. package/backend/dist/services/webSearchService.d.ts.map +1 -1
  682. package/backend/dist/services/webSearchService.js +40 -35
  683. package/backend/dist/services/webSearchService.js.map +1 -1
  684. package/backend/dist/services/websocketTicketService.d.ts +39 -0
  685. package/backend/dist/services/websocketTicketService.d.ts.map +1 -0
  686. package/backend/dist/services/websocketTicketService.js +183 -0
  687. package/backend/dist/services/websocketTicketService.js.map +1 -0
  688. package/backend/dist/services/workAccessService.d.ts +3 -3
  689. package/backend/dist/services/workAccessService.d.ts.map +1 -1
  690. package/backend/dist/services/workAccessService.js +8 -16
  691. package/backend/dist/services/workAccessService.js.map +1 -1
  692. package/backend/dist/services/workAdminService.d.ts +3 -3
  693. package/backend/dist/services/workAdminService.d.ts.map +1 -1
  694. package/backend/dist/services/workAdminService.js +4 -4
  695. package/backend/dist/services/workAdminService.js.map +1 -1
  696. package/backend/dist/services/workAgentService.d.ts +25 -1
  697. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  698. package/backend/dist/services/workAgentService.js +294 -126
  699. package/backend/dist/services/workAgentService.js.map +1 -1
  700. package/backend/dist/services/workEventService.d.ts +15 -2
  701. package/backend/dist/services/workEventService.d.ts.map +1 -1
  702. package/backend/dist/services/workEventService.js +201 -3
  703. package/backend/dist/services/workEventService.js.map +1 -1
  704. package/backend/dist/services/workKubernetesDriver.d.ts +8 -7
  705. package/backend/dist/services/workKubernetesDriver.d.ts.map +1 -1
  706. package/backend/dist/services/workKubernetesDriver.js +65 -21
  707. package/backend/dist/services/workKubernetesDriver.js.map +1 -1
  708. package/backend/dist/services/workModelProviderService.d.ts +2 -2
  709. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  710. package/backend/dist/services/workModelProviderService.js +38 -34
  711. package/backend/dist/services/workModelProviderService.js.map +1 -1
  712. package/backend/dist/services/workPolicyService.d.ts +7 -7
  713. package/backend/dist/services/workPolicyService.d.ts.map +1 -1
  714. package/backend/dist/services/workPolicyService.js +50 -51
  715. package/backend/dist/services/workPolicyService.js.map +1 -1
  716. package/backend/dist/services/workPreviewProxyService.d.ts +8 -8
  717. package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -1
  718. package/backend/dist/services/workPreviewProxyService.js +47 -44
  719. package/backend/dist/services/workPreviewProxyService.js.map +1 -1
  720. package/backend/dist/services/workRuntimeDriver.d.ts +21 -18
  721. package/backend/dist/services/workRuntimeDriver.d.ts.map +1 -1
  722. package/backend/dist/services/workRuntimeDriver.js +69 -20
  723. package/backend/dist/services/workRuntimeDriver.js.map +1 -1
  724. package/backend/dist/services/workRuntimeService.d.ts +18 -13
  725. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  726. package/backend/dist/services/workRuntimeService.js +438 -194
  727. package/backend/dist/services/workRuntimeService.js.map +1 -1
  728. package/backend/dist/services/workRuntimeShared.d.ts +2 -0
  729. package/backend/dist/services/workRuntimeShared.d.ts.map +1 -1
  730. package/backend/dist/services/workRuntimeShared.js.map +1 -1
  731. package/backend/dist/services/workTaskService.d.ts +42 -36
  732. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  733. package/backend/dist/services/workTaskService.js +445 -350
  734. package/backend/dist/services/workTaskService.js.map +1 -1
  735. package/backend/dist/services/workTerminalService.d.ts +1 -1
  736. package/backend/dist/services/workTerminalService.d.ts.map +1 -1
  737. package/backend/dist/services/workTerminalService.js +33 -6
  738. package/backend/dist/services/workTerminalService.js.map +1 -1
  739. package/backend/dist/storage.d.ts +72 -40
  740. package/backend/dist/storage.d.ts.map +1 -1
  741. package/backend/dist/storage.js +312 -660
  742. package/backend/dist/storage.js.map +1 -1
  743. package/backend/dist/types/index.d.ts +28 -0
  744. package/backend/dist/types/index.d.ts.map +1 -1
  745. package/backend/dist/types/index.js.map +1 -1
  746. package/backend/dist/types/work.d.ts +7 -2
  747. package/backend/dist/types/work.d.ts.map +1 -1
  748. package/backend/dist/utils/chatCancellation.d.ts +48 -0
  749. package/backend/dist/utils/chatCancellation.d.ts.map +1 -0
  750. package/backend/dist/utils/chatCancellation.js +152 -0
  751. package/backend/dist/utils/chatCancellation.js.map +1 -0
  752. package/backend/dist/utils/chatDocumentContext.d.ts +1 -1
  753. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  754. package/backend/dist/utils/chatDocumentContext.js +11 -5
  755. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  756. package/backend/dist/utils/chatStreamCoalescer.d.ts +15 -0
  757. package/backend/dist/utils/chatStreamCoalescer.d.ts.map +1 -0
  758. package/backend/dist/utils/chatStreamCoalescer.js +59 -0
  759. package/backend/dist/utils/chatStreamCoalescer.js.map +1 -0
  760. package/backend/dist/utils/dataDirectory.d.ts +49 -0
  761. package/backend/dist/utils/dataDirectory.d.ts.map +1 -0
  762. package/backend/dist/utils/dataDirectory.js +291 -0
  763. package/backend/dist/utils/dataDirectory.js.map +1 -0
  764. package/backend/dist/utils/generationUtils.d.ts.map +1 -1
  765. package/backend/dist/utils/generationUtils.js +18 -6
  766. package/backend/dist/utils/generationUtils.js.map +1 -1
  767. package/backend/dist/utils/jwt.d.ts.map +1 -1
  768. package/backend/dist/utils/jwt.js +2 -3
  769. package/backend/dist/utils/jwt.js.map +1 -1
  770. package/backend/dist/utils/ollamaModelDefaults.d.ts.map +1 -1
  771. package/backend/dist/utils/ollamaModelDefaults.js +2 -7
  772. package/backend/dist/utils/ollamaModelDefaults.js.map +1 -1
  773. package/backend/dist/utils/ollamaStreaming.d.ts +2 -1
  774. package/backend/dist/utils/ollamaStreaming.d.ts.map +1 -1
  775. package/backend/dist/utils/ollamaStreaming.js +49 -11
  776. package/backend/dist/utils/ollamaStreaming.js.map +1 -1
  777. package/backend/dist/utils/pluginConnectionVariables.d.ts.map +1 -1
  778. package/backend/dist/utils/pluginConnectionVariables.js +11 -3
  779. package/backend/dist/utils/pluginConnectionVariables.js.map +1 -1
  780. package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
  781. package/backend/dist/utils/pluginDefinitionTrust.js +4 -3
  782. package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
  783. package/backend/dist/utils/pluginStreaming.d.ts +2 -1
  784. package/backend/dist/utils/pluginStreaming.d.ts.map +1 -1
  785. package/backend/dist/utils/pluginStreaming.js +5 -1
  786. package/backend/dist/utils/pluginStreaming.js.map +1 -1
  787. package/backend/dist/utils/pluginUpload.d.ts +1 -0
  788. package/backend/dist/utils/pluginUpload.d.ts.map +1 -1
  789. package/backend/dist/utils/pluginUpload.js +14 -4
  790. package/backend/dist/utils/pluginUpload.js.map +1 -1
  791. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  792. package/backend/dist/utils/pluginValidation.js +29 -1
  793. package/backend/dist/utils/pluginValidation.js.map +1 -1
  794. package/backend/dist/utils/sttAudioUpload.d.ts +24 -0
  795. package/backend/dist/utils/sttAudioUpload.d.ts.map +1 -0
  796. package/backend/dist/utils/sttAudioUpload.js +500 -0
  797. package/backend/dist/utils/sttAudioUpload.js.map +1 -0
  798. package/backend/dist/utils/ttsVoiceCloneUpload.d.ts +34 -0
  799. package/backend/dist/utils/ttsVoiceCloneUpload.d.ts.map +1 -0
  800. package/backend/dist/utils/ttsVoiceCloneUpload.js +224 -0
  801. package/backend/dist/utils/ttsVoiceCloneUpload.js.map +1 -0
  802. package/backend/dist/utils/websocketMessages.d.ts +2 -1
  803. package/backend/dist/utils/websocketMessages.d.ts.map +1 -1
  804. package/backend/dist/utils/websocketMessages.js +16 -2
  805. package/backend/dist/utils/websocketMessages.js.map +1 -1
  806. package/backend/dist/websocketServer.d.ts +4 -1
  807. package/backend/dist/websocketServer.d.ts.map +1 -1
  808. package/backend/dist/websocketServer.js +290 -44
  809. package/backend/dist/websocketServer.js.map +1 -1
  810. package/backend/dist/workTerminalServer.d.ts +9 -0
  811. package/backend/dist/workTerminalServer.d.ts.map +1 -1
  812. package/backend/dist/workTerminalServer.js +221 -52
  813. package/backend/dist/workTerminalServer.js.map +1 -1
  814. package/backend/dist/worker.d.ts +2 -0
  815. package/backend/dist/worker.d.ts.map +1 -0
  816. package/backend/dist/worker.js +250 -0
  817. package/backend/dist/worker.js.map +1 -0
  818. package/backend/package.json +19 -9
  819. package/bin/cli.js +126 -99
  820. package/bin/runtime-paths.js +108 -0
  821. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  822. package/frontend/dist/artifact-runtime/framer-motion.js +5 -5
  823. package/frontend/dist/artifact-runtime/lucide-react.js +1 -1
  824. package/frontend/dist/assets/index-Jtx9Amhz.js +16 -0
  825. package/frontend/dist/assets/index-kxtZQLV6.css +1 -0
  826. package/frontend/dist/assets/{markdown-math-ClQbWekD.css → markdown-math-ClTedVi7.css} +1 -1
  827. package/frontend/dist/index.html +18 -18
  828. package/frontend/dist/js/{ArtifactContainer-Dy2Q0iIL.js → ArtifactContainer-fZegtmva.js} +1 -1
  829. package/frontend/dist/js/{ArtifactDemoPage-K79dWshB.js → ArtifactDemoPage-BDBXYv9l.js} +1 -1
  830. package/frontend/dist/js/{ArtifactSandboxFrame-DhqLNUtY.js → ArtifactSandboxFrame-BN16NtKe.js} +3 -3
  831. package/frontend/dist/js/{ArtifactSlideOutPanel-Cl8JG7bz.js → ArtifactSlideOutPanel-x1fS85Ww.js} +1 -1
  832. package/frontend/dist/js/{Button-CTXHujOd.js → Button-BV44cTnj.js} +1 -1
  833. package/frontend/dist/js/ChatPage-C_pXh7WN.js +23 -0
  834. package/frontend/dist/js/{FirstTimeSetup-kHhRzGJ8.js → FirstTimeSetup-oRrlZnBm.js} +1 -1
  835. package/frontend/dist/js/GalleryPage-CV_vbE7X.js +1 -0
  836. package/frontend/dist/js/{HomePage-C1L8WAXL.js → HomePage-P-e7Huco.js} +1 -1
  837. package/frontend/dist/js/{LibreClawPage-Dyua8IUu.js → LibreClawPage-Cee06SUM.js} +1 -1
  838. package/frontend/dist/js/{ModelManagerModals-CuMRGUd-.js → ModelManagerModals-D7jIT3v1.js} +1 -1
  839. package/frontend/dist/js/{ModelSelector-CqHc-Ln4.js → ModelSelector-DXucbvrz.js} +1 -1
  840. package/frontend/dist/js/ModelsPage-C3_fZpMM.js +2 -0
  841. package/frontend/dist/js/NotesPage-rEIPWGIb.js +1 -0
  842. package/frontend/dist/js/{OptimizedSyntaxHighlighter-CWYUn9Oe.js → OptimizedSyntaxHighlighter-XwqZEoTf.js} +1 -1
  843. package/frontend/dist/js/{PersonasPage-D_6WBCH5.js → PersonasPage-BXtepFuD.js} +2 -2
  844. package/frontend/dist/js/PluginUsagePage-hhu8cxsu.js +1 -0
  845. package/frontend/dist/js/RichMessageContent-DkiEvdSg.js +3 -0
  846. package/frontend/dist/js/SettingsModal-BNxCtJ51.js +1 -0
  847. package/frontend/dist/js/{SettingsToggle-DLHlCDBl.js → SettingsToggle-WTa0rgvY.js} +1 -1
  848. package/frontend/dist/js/{SystemPage-BMWEet9e.js → SystemPage-BvvKFuoG.js} +1 -1
  849. package/frontend/dist/js/UserManagementPage-BccyR7si.js +1 -0
  850. package/frontend/dist/js/WorkPage-BgxrvY3I.js +6 -0
  851. package/frontend/dist/js/api-BvPDxsUQ.js +14 -0
  852. package/frontend/dist/js/appStore-DRSSjaHn.js +2 -0
  853. package/frontend/dist/js/ar-xTSvTq05.js +2 -0
  854. package/frontend/dist/js/authStore-BVykIRec.js +4 -0
  855. package/frontend/dist/js/{babel-CmENXdZw.js → babel-D24oDI9y.js} +1 -1
  856. package/frontend/dist/js/bn-iYAsohEA.js +2 -0
  857. package/frontend/dist/js/chatStore-UPp5TV_t.js +3 -0
  858. package/frontend/dist/js/{config-DkV1ka7I.js → config-BTlPm-cZ.js} +1 -1
  859. package/frontend/dist/js/cs-YBHN88Hb.js +2 -0
  860. package/frontend/dist/js/da-D7qlLy_k.js +2 -0
  861. package/frontend/dist/js/de-DV671k2c.js +2 -0
  862. package/frontend/dist/js/es-kyBgzNq-.js +2 -0
  863. package/frontend/dist/js/{estree-D5KP-qbw.js → estree-CfYahF_d.js} +1 -1
  864. package/frontend/dist/js/fr-Cw1vut7I.js +2 -0
  865. package/frontend/dist/js/hi-DWEFC024.js +2 -0
  866. package/frontend/dist/js/{html-Cm9c2akd.js → html-BJsDX1UZ.js} +1 -1
  867. package/frontend/dist/js/id-DlMHjjy0.js +2 -0
  868. package/frontend/dist/js/is-B9E_a7dG.js +2 -0
  869. package/frontend/dist/js/it-DawmVbLC.js +2 -0
  870. package/frontend/dist/js/ja-DmVvwY3W.js +2 -0
  871. package/frontend/dist/js/ko-DzOPpkVs.js +2 -0
  872. package/frontend/dist/js/{markdown-B2u7CnKN.js → markdown-GLyuUNig.js} +1 -1
  873. package/frontend/dist/js/markdown-core-BmPPZiuD.js +31 -0
  874. package/frontend/dist/js/{markdown-math-B7FlYsmr.js → markdown-math-mH7AZ_mb.js} +6 -6
  875. package/frontend/dist/js/{messageCodeStyles-DalG2j6U.js → messageCodeStyles-BHddEFP1.js} +1 -1
  876. package/frontend/dist/js/ms-DpsaOPht.js +2 -0
  877. package/frontend/dist/js/nl-B1d8W22n.js +2 -0
  878. package/frontend/dist/js/pl-nCncRVgt.js +2 -0
  879. package/frontend/dist/js/{postcss-B5WIGhAY.js → postcss-Bx9CTcIc.js} +1 -1
  880. package/frontend/dist/js/pt-DHw8fGuu.js +2 -0
  881. package/frontend/dist/js/{react-vendor-DPNXrO-8.js → react-vendor-C5yShNlM.js} +1 -1
  882. package/frontend/dist/js/{router-vendor-Ca9zqOqT.js → router-vendor-CbPDks39.js} +1 -1
  883. package/frontend/dist/js/ru-Derl_YP_.js +2 -0
  884. package/frontend/dist/js/{standalone-Dwm1daef.js → standalone-Dh56V0YW.js} +1 -1
  885. package/frontend/dist/js/sv-pJAfBVo0.js +2 -0
  886. package/frontend/dist/js/{syntax-highlight-Ca9bHsaz.js → syntax-highlight-3EEX6CGL.js} +3 -3
  887. package/frontend/dist/js/th-C_7fIGnk.js +2 -0
  888. package/frontend/dist/js/tr-CPqsJvaP.js +2 -0
  889. package/frontend/dist/js/{typescript-CwieSptM.js → typescript-DRy7A9w4.js} +1 -1
  890. package/frontend/dist/js/{ui-BnDZpjfc.js → ui-CuY4IifA.js} +2 -2
  891. package/frontend/dist/js/ui-vendor-D3Ahl1x5.js +177 -0
  892. package/frontend/dist/js/uk-3o8P_kFi.js +2 -0
  893. package/frontend/dist/js/{useTranslation-CXY69qNk.js → useTranslation-C3ei3mJq.js} +1 -1
  894. package/frontend/dist/js/{utils-BM0_0iFj.js → utils-CuC1beTY.js} +1 -1
  895. package/frontend/dist/js/{utils-vendor-1zob7nK9.js → utils-vendor-BBa8OxtB.js} +1 -1
  896. package/frontend/dist/js/vi-Dv6N7OVD.js +2 -0
  897. package/frontend/dist/js/{workApi-BOS7crs9.js → workApi-DHuYNHLf.js} +2 -2
  898. package/frontend/dist/js/{yaml-QD4znPfZ.js → yaml-DioTxVLA.js} +1 -1
  899. package/frontend/dist/js/zh-qg5iqtPi.js +2 -0
  900. package/package.json +16 -5
  901. package/plugins/huggingface.json +12 -3
  902. package/plugins/llama-cpp.json +18 -6
  903. package/plugins/longcat-audiodit.json +114 -0
  904. package/plugins/openai.json +18 -0
  905. package/frontend/dist/assets/index-BBpNbfKW.js +0 -16
  906. package/frontend/dist/assets/index-BLATyFmD.css +0 -1
  907. package/frontend/dist/js/ChatPage-BBayfMLS.js +0 -16
  908. package/frontend/dist/js/GalleryPage-By8VI39Q.js +0 -1
  909. package/frontend/dist/js/ModelsPage-ODeXhDDk.js +0 -2
  910. package/frontend/dist/js/NotesPage-CApzDjOq.js +0 -1
  911. package/frontend/dist/js/PluginUsagePage-kutS6SOd.js +0 -1
  912. package/frontend/dist/js/RichMessageContent-g6WT75Te.js +0 -3
  913. package/frontend/dist/js/SettingsModal-B7z51BCx.js +0 -1
  914. package/frontend/dist/js/UserManagementPage-D08lM51c.js +0 -1
  915. package/frontend/dist/js/WorkPage-DdVLefsK.js +0 -6
  916. package/frontend/dist/js/api-CLEmGcEh.js +0 -14
  917. package/frontend/dist/js/appStore-CGdhvp9P.js +0 -2
  918. package/frontend/dist/js/ar-BTmB2WVm.js +0 -2
  919. package/frontend/dist/js/authStore-Dh3beEOq.js +0 -4
  920. package/frontend/dist/js/bn-CQnH7YVT.js +0 -2
  921. package/frontend/dist/js/chatStore-CDeYWL_q.js +0 -3
  922. package/frontend/dist/js/cs-oTTZkQXr.js +0 -2
  923. package/frontend/dist/js/da-Br0gB6J6.js +0 -2
  924. package/frontend/dist/js/de-DE2iztTF.js +0 -2
  925. package/frontend/dist/js/es-DgthfVtl.js +0 -2
  926. package/frontend/dist/js/fr-BjxjFwPh.js +0 -2
  927. package/frontend/dist/js/hi-D1q7E-9N.js +0 -2
  928. package/frontend/dist/js/id-CDJZqLTF.js +0 -2
  929. package/frontend/dist/js/is-BU7Um_Tq.js +0 -2
  930. package/frontend/dist/js/it-CdAxr8P_.js +0 -2
  931. package/frontend/dist/js/ja-BLbQwz9u.js +0 -2
  932. package/frontend/dist/js/ko-CY5lpkAe.js +0 -2
  933. package/frontend/dist/js/markdown-core-DHnR5Hw8.js +0 -16
  934. package/frontend/dist/js/ms-tQ8AYXEQ.js +0 -2
  935. package/frontend/dist/js/nl-CRNi2oWT.js +0 -2
  936. package/frontend/dist/js/pl-CWtFRS_W.js +0 -2
  937. package/frontend/dist/js/pt-C7SPoLF8.js +0 -2
  938. package/frontend/dist/js/ru-Dz4AX8xc.js +0 -2
  939. package/frontend/dist/js/sv-ETy5-boa.js +0 -2
  940. package/frontend/dist/js/th-DpuMqvxU.js +0 -2
  941. package/frontend/dist/js/tr-C-1AYAqg.js +0 -2
  942. package/frontend/dist/js/ui-vendor-xUzKqAXI.js +0 -177
  943. package/frontend/dist/js/uk-CyS680gr.js +0 -2
  944. package/frontend/dist/js/vi-BG8HuiTz.js +0 -2
  945. package/frontend/dist/js/zh-NCs2mkHj.js +0 -2
@@ -1,16 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{d as t,f as n}from"./markdown-core-DHnR5Hw8.js";import{n as r}from"./react-vendor-DPNXrO-8.js";import{d as i,f as a,u as o}from"./router-vendor-Ca9zqOqT.js";import{t as s}from"./useTranslation-CXY69qNk.js";import{i as c,n as l,o as u,r as d,t as f}from"./utils-BM0_0iFj.js";import{_ as p,a as m,c as h,i as g,l as _,n as v,r as y,t as b}from"./chatStore-CDeYWL_q.js";import{A as x,B as S,D as C,En as w,Et as T,F as E,Ft as D,G as O,Jt as k,Kt as ee,N as te,Nt as A,P as j,R as M,St as N,T as P,Tn as F,Tt as I,Wt as ne,Yt as L,_n as re,a as ie,bn as R,c as ae,d as oe,fn as se,g as ce,h as le,ht as z,in as B,j as ue,lt as V,mt as de,n as H,nt as fe,o as pe,on as me,pn as he,q as ge,r as U,rn as _e,rt as ve,sn as ye,t as W,tt as be,v as xe,x as Se}from"./ui-vendor-xUzKqAXI.js";import{i as Ce,t as G}from"./logger-DSXjF4ye.js";import{S as K,a as q,b as we,d as Te,g as Ee,i as De,l as Oe,n as ke,p as Ae,u as je,v as Me}from"./api-CLEmGcEh.js";import{n as Ne,r as J}from"./authStore-Dh3beEOq.js";import{t as Y}from"./appStore-CGdhvp9P.js";import{i as Pe,r as Fe,t as Ie}from"./welcomePrompts-to5mv_gx.js";import{l as Le}from"./messageCodeStyles-DalG2j6U.js";import{t as X}from"./Button-CTXHujOd.js";import{d as Re,f as ze,l as Be}from"./ui-BnDZpjfc.js";import{l as Ve}from"../assets/index-BBpNbfKW.js";import{c as He,s as Ue}from"./ArtifactSandboxFrame-DhqLNUtY.js";import{t as We}from"./ArtifactContainer-Dy2Q0iIL.js";import{t as Ge}from"./ModelSelector-CqHc-Ln4.js";var Ke=r(),Z=e(n(),1),Q=t(),qe=({statistics:e,className:t=``})=>{let[n,r]=(0,Z.useState)(!1),{t:i}=s(),a=e=>{if(e==null)return`N/A`;let t=e/1e6;return t<1e3?`${Math.round(t)}ms`:`${(t/1e3).toFixed(2)}s`},o=e=>e?`${e.toFixed(1)} t/s`:`N/A`,c=e.prompt_eval_count||0,l=e.eval_count||0,u=c+l,d=a(e.total_duration),f=o(e.tokens_per_second);return(0,Q.jsxs)(`div`,{className:`text-xs text-gray-500 dark:text-dark-500 mt-2 ${t}`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-4 mb-1`,children:[(0,Q.jsxs)(`span`,{className:`flex items-center gap-1 text-gray-600 dark:text-dark-600`,children:[(0,Q.jsx)(de,{size:12,className:`text-primary-500`}),l,` tokens`]}),(0,Q.jsx)(`span`,{className:`text-gray-500 dark:text-dark-500`,children:f}),(0,Q.jsx)(`span`,{className:`text-gray-500 dark:text-dark-500`,children:d}),e.model&&(0,Q.jsx)(`span`,{className:`text-gray-400 dark:text-dark-400 bg-gray-100 dark:bg-dark-200 px-2 py-0.5 rounded-full truncate max-w-32 sm:max-w-48`,title:e.model,children:e.model})]}),(0,Q.jsxs)(`button`,{onClick:()=>r(!n),className:`flex items-center gap-1 text-gray-400 dark:text-dark-400 hover:text-gray-600 dark:hover:text-dark-600 transition-colors`,children:[n?(0,Q.jsx)(me,{size:12}):(0,Q.jsx)(B,{size:12,className:`rtl:rotate-180`}),(0,Q.jsx)(`span`,{children:i(`generationStats.details`)})]}),n&&(0,Q.jsxs)(`div`,{className:`mt-2 p-3 bg-gray-50 dark:bg-dark-100 border border-gray-200 dark:border-dark-300 rounded-lg text-xs space-y-2`,children:[(0,Q.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-2`,children:[(0,Q.jsxs)(`div`,{className:`text-gray-700 dark:text-dark-700`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-gray-800 dark:text-dark-800`,children:i(`generationStats.promptTokens`)}),` `,c]}),(0,Q.jsxs)(`div`,{className:`text-gray-700 dark:text-dark-700`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-gray-800 dark:text-dark-800`,children:i(`generationStats.generatedTokens`)}),` `,l]}),(0,Q.jsxs)(`div`,{className:`text-gray-700 dark:text-dark-700`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-gray-800 dark:text-dark-800`,children:i(`generationStats.totalTokens`)}),` `,u]}),(0,Q.jsxs)(`div`,{className:`text-gray-700 dark:text-dark-700`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-gray-800 dark:text-dark-800`,children:i(`generationStats.speed`)}),` `,f]}),(0,Q.jsxs)(`div`,{className:`text-gray-700 dark:text-dark-700`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-gray-800 dark:text-dark-800`,children:i(`generationStats.promptEval`)}),` `,a(e.prompt_eval_duration)]}),(0,Q.jsxs)(`div`,{className:`text-gray-700 dark:text-dark-700`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-gray-800 dark:text-dark-800`,children:i(`generationStats.generation`)}),` `,a(e.eval_duration)]}),(0,Q.jsxs)(`div`,{className:`text-gray-700 dark:text-dark-700`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-gray-800 dark:text-dark-800`,children:i(`generationStats.modelLoad`)}),` `,a(e.load_duration)]}),(0,Q.jsxs)(`div`,{className:`text-gray-700 dark:text-dark-700`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-gray-800 dark:text-dark-800`,children:i(`generationStats.totalTime`)}),` `,d]})]}),e.created_at&&(0,Q.jsxs)(`div`,{className:`pt-2 border-t border-gray-200 dark:border-dark-300 text-gray-600 dark:text-dark-600`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-gray-800 dark:text-dark-800`,children:i(`generationStats.generatedAt`)}),` `,new Date(e.created_at).toLocaleTimeString()]})]})]})},Je=G(`components:ttsbutton`),Ye=null,Xe=null,Ze=0,Qe=3e5;async function $e(e=!1){let t=Date.now();return!e&&Ye!==null&&t-Ze<Qe?Ye:Xe||(Xe=(async()=>{try{let e=await q.getModels();return e.success&&e.data&&e.data.length>0?(Ye=e.data,Ze=t,e.data):(Ye=[],Ze=t,[])}catch{return Ye=[],Ze=t,[]}finally{Xe=null}})(),Xe)}function et(e){return e.split(/(?<=[.!?]["']?\s)|(?<=[.!?]["']?$)/).map(e=>e.trim()).filter(e=>e.length>0)}var tt=({text:e,className:t,size:n=`sm`})=>{let{t:r}=s(),{preferences:i}=Y(),[a,o]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)(!1),[u,d]=(0,Z.useState)(null),[p,m]=(0,Z.useState)([]),[h,g]=(0,Z.useState)(null),_=(0,Z.useRef)(null),v=(0,Z.useRef)(!1),y=(0,Z.useRef)([]),b=(0,Z.useRef)(0);(0,Z.useEffect)(()=>{let e=!0;return(async()=>{let t=await $e(),n=ke(t,i.ttsSettings?.model,i.ttsSettings?.pluginId);i.ttsSettings?.model&&!n&&(t=await $e(!0)),e&&(m(t),g(t.length>0))})(),()=>{e=!1}},[i.ttsSettings?.model,i.ttsSettings?.pluginId]);let x=(0,Z.useCallback)(async(e,t,n,i,a,o)=>{let s=await q.generateBase64({model:t,pluginId:n,input:e,voice:i,speed:a,response_format:o});if(!s.success||!s.data?.audio)throw Error(s.message||r(`ttsButton.generateFailed`));let c=`data:${s.data.mimeType};base64,${s.data.audio}`,l=new Audio(c);return _.current=l,new Promise((e,t)=>{l.onended=()=>{_.current=null,e()},l.onerror=()=>{_.current=null,t(Error(r(`ttsButton.playbackFailed`)))},l.play().catch(t)})},[r]),S=(0,Z.useCallback)(async(e,t,n,r,i,a)=>{y.current=e,b.current=0,v.current=!1;let o=null,s=async e=>{try{let o=await q.generateBase64({model:t,pluginId:n,input:e,voice:r,speed:i,response_format:a});return!o.success||!o.data?.audio?null:{audioUrl:`data:${o.data.mimeType};base64,${o.data.audio}`,mimeType:o.data.mimeType}}catch{return null}};e.length>0&&(o=s(e[0]));for(let t=0;t<e.length&&!v.current;t++){b.current=t;try{let n=await o;if(v.current)break;if(o=t+1<e.length?s(e[t+1]):null,!n){Je.warn(`Failed to generate audio for sentence ${t+1}, skipping`);continue}let r=new Audio(n.audioUrl);_.current=r,await new Promise((e,t)=>{r.onended=()=>{_.current=null,e()},r.onerror=()=>{_.current=null,e()},r.play().catch(()=>{e()})})}catch(e){Je.error(`Error playing sentence ${t+1}:`,e)}}},[]),C=(0,Z.useCallback)(()=>{v.current=!0,_.current&&(_.current.pause(),_.current.currentTime=0,_.current=null),o(!1),l(!1)},[]),w=async()=>{if(!c){if(a){C();return}l(!0),d(null),v.current=!1;try{let t=i.ttsSettings,n=De(p,t?.model,t?.pluginId),a=n?.model||t?.model||`tts-1`,s=n?.plugin||t?.pluginId,c=n?.model===t?.model&&(!t?.pluginId||n?.plugin===t.pluginId)?t?.voice||n?.config?.default_voice||`alloy`:n?.config?.default_voice||`alloy`,u=t?.speed||1,f=n?.config?.default_format;if(t?.streamSentences){let t=et(e);if(t.length===0)throw Error(r(`ttsButton.generateFailed`));l(!1),o(!0),await S(t,a,s,c,u,f),v.current||o(!1)}else await x(e,a,s,c,u,f),l(!1),o(!0),_.current&&(_.current.onended=()=>{o(!1),_.current=null},_.current.onerror=()=>{d(r(`ttsButton.playbackFailed`)),o(!1),_.current=null})}catch(e){let t=e instanceof Error?e.message:r(`ttsButton.generateFailed`);d(t),Je.error(`TTS error:`,e),o(!1),l(!1)}}};if((0,Z.useEffect)(()=>()=>{v.current=!0,_.current&&(_.current.pause(),_.current=null)},[]),h===!1||h===null)return null;let T={sm:`h-6 w-6 p-1`,md:`h-8 w-8 p-1.5`,lg:`h-10 w-10 p-2`},E={sm:`h-3.5 w-3.5`,md:`h-4 w-4`,lg:`h-5 w-5`};return(0,Q.jsx)(`button`,{onClick:w,disabled:c||!e,title:u||r(a?`ttsButton.stopSpeaking`:c?`ttsButton.generatingSpeech`:`ttsButton.readAloud`),className:f(`rounded-full transition-all duration-200`,`hover:bg-gray-100 dark:hover:bg-dark-200`,`focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-1`,`disabled:opacity-50 disabled:cursor-not-allowed`,u?`text-red-500 dark:text-red-400`:a?`text-primary-600 dark:text-primary-400 bg-primary-50 dark:bg-primary-900/20`:`text-gray-500 dark:text-gray-400`,T[n],t),children:c?(0,Q.jsx)(V,{className:f(E[n],`animate-spin`)}):a?(0,Q.jsx)(Se,{className:E[n]}):u?(0,Q.jsx)(ie,{className:E[n]}):(0,Q.jsx)(pe,{className:E[n]})})},$=new Map;function nt(e,t,n=``){let r=$.get(e);if(n){if((!r||r.state===`none`)&&($.set(e,{state:`open`,startedAt:Date.now()}),!t))return;let n=$.get(e);t&&n?.state===`open`&&$.set(e,{state:`done`,durationMs:Date.now()-n.startedAt});return}if(r&&r.state!==`open`||!t)return;let i=u(t);if(!r){i.thinkingComplete?$.set(e,{state:`none`}):$.set(e,{state:`open`,startedAt:Date.now()});return}i.thinkingComplete&&$.set(e,{state:`done`,durationMs:Date.now()-r.startedAt})}function rt(e){let t=$.get(e);if(t){if(t.state===`done`)return t.durationMs;if(t.state===`open`)return Date.now()-t.startedAt}}function it(e){let t=$.get(e);if($.delete(e),t){if(t.state===`done`)return t.durationMs;if(t.state===`open`)return Date.now()-t.startedAt}}function at(e){let t=e/1e3;if(t<.95)return`${Math.max(.1,Math.round(t*10)/10)}s`;if(t<60)return`${Math.round(t)}s`;let n=Math.floor(t/60),r=Math.round(t%60);return r>0?`${n}m ${r}s`:`${n}m`}var ot=/```([^\n`]*)\n([\s\S]*?)\n```/g,st=/^(?:%%|flowchart|graph|sequenceDiagram|classDiagram|stateDiagram(?:-v2)?|erDiagram|journey|gantt|pie|mindmap|timeline|gitGraph|quadrantChart|requirementDiagram|sankey-beta|xychart-beta|block-beta|architecture-beta|packet-beta|kanban|radar-beta|treemap-beta|C4Context)\b/i,ct=/[\w@./-]+\.(?:html?|css|mjs|js|jsx|ts|tsx|svg|json|py)/i,lt=[`html`,`react`,`svg`,`mermaid`,`chart`,`code`,`text`,`json`],ut=[{regex:/<artifact\s+type="([^"]+)"\s+title="([^"]+)"[^>]*>([\s\S]*?)<\/artifact>/gi,extract:e=>({type:yt(e[1]),title:dt(e[2]).trim()||`Artifact`,content:e[3].trim()})},{regex:/<artifact\s+type="([^"]+)"[^>]*>([\s\S]*?)<\/artifact>/gi,extract:e=>{let t=yt(e[1]);return{type:t,title:`${t.toUpperCase()} Artifact`,content:e[2].trim()}}}];function dt(e){if(typeof document<`u`){let t=document.createElement(`div`);return t.innerHTML=e,t.textContent||t.innerText||``}return pt(ft(e))}function ft(e){return e.replace(/&(lt|gt|quot|apos|#39);/gi,(e,t)=>{switch(t.toLowerCase()){case`lt`:return`<`;case`gt`:return`>`;case`quot`:return`"`;case`apos`:case`#39`:return`'`;default:return``}}).replace(/&amp;/gi,`&`)}function pt(e){let t=``,n=!1,r=null;for(let i=0;i<e.length;i+=1){let a=e[i];if(n){if(r){a===r&&(r=null);continue}if(a===`"`||a===`'`){r=a;continue}a===`>`&&(n=!1);continue}if(a===`<`){let t=e[i+1];if(t&&/[!/A-Za-z?]/.test(t)){n=!0;continue}}t+=a}return t}function mt(e){let t=e.match(/<title[^>]*>([\s\S]*?)<\/title>/i);if(t)return dt(t[1]).trim()||null;let n=e.match(/<h1[^>]*>([\s\S]*?)<\/h1>/i);return n&&dt(n[1]).trim()||null}function ht(e){for(let t of[/export\s+default\s+(?:function|class)\s+([A-Z]\w*)/,/export\s+default\s+([A-Z]\w*)\s*(?:;|$)/m,/(?:function|class)\s+([A-Z]\w*)/,/const\s+([A-Z]\w*)\s*[:=]/,/(?:function|const|class)\s+(\w+)/]){let n=e.match(t);if(n)return n[1]}return null}function gt(e){let t=e.match(/^\s*title\s+(.+)$/im);if(t)return t[1].trim();let n=e.trim().match(/^([A-Za-z][\w-]*)/);if(!n)return null;let r=n[1].replace(/-(?:beta|v2)$/i,``).replace(/([a-z])([A-Z])/g,`$1 $2`);return`${r.charAt(0).toUpperCase()}${r.slice(1)}`}function _t(e){if(e.includes(`def main(`))return`Python Script`;let t=e.match(/class\s+(\w+)/);if(t)return`${t[1]} Class`;let n=e.match(/def\s+(\w+)/);return n&&n[1]!==`__init__`?`${n[1]} Function`:null}function vt(e){let t=e.match(/function\s+(\w+)/);if(t)return`${t[1]} Function`;let n=e.match(/(?:const|let)\s+(\w+)\s*=/);return n?n[1]:null}function yt(e){let t=e.trim().toLowerCase();return lt.includes(t)?t:`text`}function bt(e){if(!e)return;let t=e.trim().toLowerCase().replace(/^\./,``).replace(/[,:;]+$/,``);switch(t){case`htm`:case`html`:return`html`;case`js`:case`mjs`:case`javascript`:return`javascript`;case`jsx`:case`tsx`:case`react`:return`react`;case`ts`:case`typescript`:return`typescript`;case`py`:case`python`:return`python`;case`css`:case`svg`:case`json`:return t;default:return t||void 0}}function xt(e){let t=[],n=new RegExp(ot),r;for(;(r=n.exec(e))!==null;){let n=r[1].trim(),i=St(n,wt(e,r.index));t.push({raw:r[0],info:n,content:r[2].trim(),start:r.index,end:r.index+r[0].length,language:i.language,fileName:i.fileName})}return t}function St(e,t){let n=Ct(e)||t,r=e.split(/\s+/).filter(Boolean)[0]?.replace(/[{}[\]()]/g,``);return{language:(r&&!ct.test(r)&&!r.includes(`=`)?bt(r):void 0)||bt(Et(n)),fileName:n}}function Ct(e){let t=e.match(/(?:file(?:name)?|path|name)\s*=\s*["']?([^"'\s]+)["']?/i);if(t&&ct.test(t[1]))return Tt(t[1]);let n=e.match(ct);return n?Tt(n[0]):void 0}function wt(e,t){let n=e.slice(Math.max(0,t-180),t).split(`
2
- `).slice(-3).reverse();for(let e of n){let t=e.trim().replace(/^#{1,6}\s*/,``).replace(/^[-*]\s*/,``).replace(/[::]\s*$/,``).match(ct);if(t)return Tt(t[0])}}function Tt(e){return e.replace(/^["'`]+|["'`:]+$/g,``)}function Et(e){return e?.match(/\.([a-z0-9]+)$/i)?.[1]}function Dt(e){return e?.split(/[\\/]/).pop()}function Ot(e){let t=Dt(e);if(!t)return null;let n=t.replace(/\.[^.]+$/,``);return/^(index|main|app)$/i.test(n)?null:n.replace(/[-_]+/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function kt(e){let t=Date.now();return{...e,id:`artifact-${t}-${Math.random().toString(36).slice(2,11)}`,createdAt:t,updatedAt:t}}function At(e){let t=bt(e.language)||bt(Et(e.fileName));switch(t){case`html`:return{type:`html`,title:mt(e.content)||Ot(e.fileName)||`HTML Document`};case`svg`:return{type:`svg`,title:Ot(e.fileName)||`SVG Image`};case`react`:return{type:`react`,title:ht(e.content)||Ot(e.fileName)||`React Component`,language:`jsx`};case`mermaid`:return{type:`mermaid`,title:gt(e.content)||`Diagram`,language:`mermaid`};case`json`:return{type:`json`,title:Ot(e.fileName)||`JSON Data`};case`python`:return{type:`code`,title:_t(e.content)||Ot(e.fileName)||`Python Code`,language:`python`};case`css`:return{type:`code`,title:Ot(e.fileName)||`CSS Styles`,language:`css`};case`javascript`:return{type:`code`,title:vt(e.content)||Ot(e.fileName)||`JavaScript Code`,language:`javascript`};case`typescript`:return{type:`code`,title:Ot(e.fileName)||`TypeScript Code`,language:`typescript`};default:return t?{type:`code`,title:Ot(e.fileName)||`${t.toUpperCase()} Code`,language:t}:null}}function jt(e){return(bt(e.language)||bt(Et(e.fileName)))===`html`}function Mt(e){return(bt(e.language)||bt(Et(e.fileName)))===`css`}function Nt(e){return(bt(e.language)||bt(Et(e.fileName)))===`javascript`}function Pt(e){let t=xt(e),n=t.filter(jt);if(n.length===0)return null;let r=t.filter(Mt),i=t.filter(Nt);if(r.length===0&&i.length===0)return null;let a=n.find(e=>/(^|[/\\])index\.html?$/i.test(e.fileName||``))||n[0],o=Ft(a.content,r,i),s=He(o,r.map(e=>e.content),i.map(e=>e.content));return Bt(s,`html`)?{artifact:kt({type:`html`,title:mt(s)||Ot(a.fileName)||`Interactive HTML App`,description:`Bundled generated HTML, CSS, and JavaScript files into one runnable artifact.`,content:s}),ranges:[a,...r,...i]}:null}function Ft(e,t,n){let r=e;for(let e of t){let t=Dt(e.fileName);t&&(r=r.replace(RegExp(`<link\\b[^>]*href=["'][^"']*${zt(t)}["'][^>]*>`,`gi`),``))}for(let e of n){let t=Dt(e.fileName);t&&(r=r.replace(RegExp(`<script\\b[^>]*src=["'][^"']*${zt(t)}["'][^>]*>\\s*<\\/script>`,`gi`),``))}return r}function It(e){let t=/<!doctype\s+html|<html[\s>]/i.exec(e);if(!t||t.index===void 0)return null;let n=xt(e);if(Lt(t.index,n))return null;let r=t.index,i=/<\/html>/gi;i.lastIndex=r;let a=i.exec(e),o=a?a.index+a[0].length:e.length,s=e.slice(r,o).trim();return Bt(s,`html`)?{artifact:kt({type:`html`,title:mt(s)||`HTML Document`,content:s}),ranges:[{start:r,end:o}]}:null}function Lt(e,t){return t.some(t=>e>=t.start&&e<=t.end)}function Rt(e,t){return[...t].sort((e,t)=>t.start-e.start).reduce((e,t)=>`${e.slice(0,t.start)}${e.slice(t.end)}`,e)}function zt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Bt(e,t){if(t===`html`){let t=e.trim(),n=/<[^>]+>/.test(t),r=/<(canvas|script|style|button|form|input|select|textarea|video|audio)\b/i.test(t)||/\bon(?:click|input|submit|keydown|keyup|mousemove)=/i.test(t);return n&&(Ue(t)||t.length>160||r)}if(t===`svg`)return/<svg[^>]*>/.test(e);if(t===`react`)return/<[A-Za-z][^>]*>/.test(e)&&/\b(?:export\s+default|return\s*[(<]|=>\s*[(<]|createRoot|render\s*\()/.test(e);if(t===`mermaid`)return st.test(e.trim());if(t===`json`)try{return JSON.parse(e),e.trim().length>100}catch{return!1}if(t===`code`){let t=e.split(`
3
- `).length,n=e.trim().length,r=/function|class|def |import |from |const |let |var |if |for |while |try |catch/.test(e);return(n>500||t>15)&&r}return e.trim().length>200}function Vt(e){let t=[],n=e;for(let e of ut){e.regex.lastIndex=0;let r=[],i;for(;(i=e.regex.exec(n))!==null;){let n=e.extract(i);Bt(n.content,n.type)&&(t.push(kt({type:n.type,title:n.title,content:n.content})),r.push({start:i.index,end:i.index+i[0].length}))}n=Rt(n,r)}let r=Pt(n);for(;r;)t.push(r.artifact),n=Rt(n,r.ranges),r=Pt(n);let i=It(n);i&&(t.push(i.artifact),n=Rt(n,i.ranges));let a=xt(n),o=[];for(let e of a){let n=At(e);!n||!Bt(e.content,n.type)||(t.push(kt({type:n.type,title:n.title,content:e.content,language:n.language})),o.push(e))}return n=Rt(n,o),{content:n.trim(),artifacts:t}}var Ht=G(`components:chat-message`);function Ut({role:e,user:t,personaAvatar:n}){let[r,i]=(0,Z.useState)(null);if(e===`assistant`){let e=n?.trim()||``,t=e.startsWith(`data:`)&&e!==r?e:``;return(0,Q.jsx)(`div`,{role:`img`,"aria-label":`Libre WebUI`,"data-testid":`chat-assistant-avatar`,className:`mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full border border-black/[0.07] bg-white text-gray-900 shadow-sm dark:border-white/[0.09] dark:bg-dark-200 dark:text-dark-950`,children:t?(0,Q.jsx)(`img`,{src:t,alt:``,className:`h-full w-full object-cover`,onError:()=>i(e)}):e?(0,Q.jsx)(`span`,{"aria-hidden":`true`,className:`text-base leading-none`,children:e}):(0,Q.jsx)(Ve,{label:null,className:`h-4 w-4`})})}let a=t?.username||`User`,o=t?.avatar?.trim()||``,s=!!o&&o!==r;return(0,Q.jsx)(`div`,{role:s?void 0:`img`,"aria-label":s?void 0:a,"data-testid":`chat-user-avatar`,className:f(`mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full`,s?`border border-black/[0.07] bg-white dark:border-white/[0.09] dark:bg-dark-200`:`bg-gray-950 text-white dark:bg-white dark:text-gray-950`),title:a,children:s?(0,Q.jsx)(`img`,{src:o,alt:a,className:`h-full w-full object-cover`,onError:()=>i(o)}):t?.username?(0,Q.jsx)(`span`,{"aria-hidden":`true`,className:`text-xs font-medium uppercase leading-none`,children:t.username.charAt(0)}):(0,Q.jsx)(ae,{"aria-hidden":`true`,className:`h-4 w-4`})})}var Wt=({message:e,isStreaming:t=!1,className:n,isLastAssistantMessage:r=!1,onRegenerate:i,onEditResend:a})=>{let{t:o,i18n:c}=s(),l=e.role===`user`,p=e.role===`system`,{preferences:m}=Y(),{user:h}=Ne(),{setSystemMessage:g,getCurrentPersona:_,currentSession:v,rateMessage:y}=b(),S=_(),[C,w]=(0,Z.useState)(!1),[T,D]=(0,Z.useState)(e.content),[k,te]=(0,Z.useState)(null),[A,j]=(0,Z.useState)(!1),[N,P]=(0,Z.useState)(!1),[F,I]=(0,Z.useState)(!1),[ne,L]=(0,Z.useState)(!1),[re,ie]=(0,Z.useState)(!1),R=(0,Z.useRef)(null),ae=(0,Z.useRef)(t),oe=(0,Z.useRef)(!1),z=async()=>{try{await navigator.clipboard.writeText(e.content),Le(`success`),ie(!0),setTimeout(()=>ie(!1),2e3)}catch(e){Ht.error(`Failed to copy message:`,e)}},{thinkingContent:B,thinkingStreaming:ue,parsedContent:V,artifacts:de}=(0,Z.useMemo)(()=>{if(l||p||!e.content&&!e.thinking)return{thinkingContent:null,thinkingStreaming:!1,parsedContent:e.content,artifacts:e.artifacts||[]};let n=e.thinking?{thinking:e.thinking,content:e.content,thinkingComplete:!!e.content||!t}:u(e.content),r=n.content,i=t&&!n.thinkingComplete;if(e.artifacts&&e.artifacts.length>0)return{thinkingContent:n.thinking,thinkingStreaming:i,parsedContent:r,artifacts:e.artifacts};if(!t){let e=Vt(r);return{thinkingContent:n.thinking,thinkingStreaming:i,parsedContent:e.content,artifacts:e.artifacts}}return{thinkingContent:n.thinking,thinkingStreaming:i,parsedContent:r,artifacts:[]}},[e.content,e.thinking,e.artifacts,l,p,t]),fe=ue?void 0:e.statistics?.thinking_duration_ms??rt(e.id);(0,Z.useEffect)(()=>{let e=ae.current&&!t;return ae.current=t,e&&!oe.current&&!l&&!p&&V&&m.ttsSettings?.enabled&&m.ttsSettings?.autoPlay&&(oe.current=!0,(async()=>{L(!0);try{let e=await q.getModels(),t=e.success&&e.data?e.data:[],n=m.ttsSettings,r=De(t,n?.model,n?.pluginId),i=ke(t,n?.model,n?.pluginId),a=await q.generateBase64({model:r?.model||n?.model||`tts-1`,pluginId:r?.plugin||n?.pluginId,input:V,voice:i?n?.voice||r?.config?.default_voice||`alloy`:r?.config?.default_voice||`alloy`,speed:n?.speed||1,response_format:r?.config?.default_format});if(a.success&&a.data?.audio){let e=`data:${a.data.mimeType};base64,${a.data.audio}`,t=new Audio(e);R.current=t,t.onended=()=>{L(!1),R.current=null},t.onerror=()=>{L(!1),R.current=null},await t.play()}}catch(e){Ht.error(`Auto-play TTS failed:`,e),L(!1)}})()),()=>{R.current&&(R.current.pause(),R.current=null)}},[t,l,p,V,m.ttsSettings]);let pe=()=>p?o(`chatMessage.system`):l?m.showUsername&&h?.username?h.username:o(`chatMessage.you`):S?.name?S.name:e.model||o(`chatMessage.assistant`),he=()=>{w(!0),D(e.content)},ge=async()=>{j(!0);try{g(T),w(!1),Ht.debug(`✅ System message updated:`,T)}catch(e){Ht.error(`Failed to save system message:`,e)}finally{j(!1)}},U=()=>{w(!1),D(e.content)},ve=()=>{let t=T.trim();w(!1),!(!t||t===e.content)&&a?.(e.id,t)},W=t=>{v&&y(v.id,e.id,e.rating===t?void 0:t)},be=(e,t=100)=>e.length<=t?e:e.substring(0,t)+`...`,xe=p&&e.content.length>100;return(0,Q.jsxs)(`div`,{className:f(`group flex py-1.5 transition-colors sm:py-2`,l?`justify-end`:`justify-start`,n),children:[(0,Q.jsxs)(`div`,{className:f(`flex min-w-0 gap-2.5 sm:gap-3`,l?`max-w-[85%] sm:max-w-[70%]`:`w-full`),children:[!l&&!p&&(0,Q.jsx)(Ut,{role:`assistant`,personaAvatar:S?.avatar}),(0,Q.jsxs)(`div`,{className:f(`min-w-0 flex-1`,l?`flex flex-col items-end`:p?`py-1.5`:`py-0.5`),children:[!l&&!p&&(0,Q.jsxs)(`div`,{className:`mb-1 flex items-center gap-2`,children:[(0,Q.jsx)(`span`,{dir:`auto`,className:`text-[11px] font-semibold uppercase tracking-[0.08em] text-gray-700 rtl:tracking-normal dark:text-dark-700`,children:pe()}),e.model&&S?.name&&(0,Q.jsx)(`span`,{dir:`ltr`,className:`max-w-32 truncate rounded-full bg-gray-100 px-2 py-0.5 text-[10px] text-gray-500 dark:bg-dark-200 dark:text-dark-600 sm:max-w-48`,title:e.model,children:e.model}),(0,Q.jsx)(`span`,{dir:`auto`,className:`text-[10px] tabular-nums text-gray-400 dark:text-dark-500`,children:d(e.timestamp,c.language)})]}),(0,Q.jsxs)(`div`,{className:f(!l&&!p&&`text-[0.9375rem] leading-[1.65] text-gray-800 dark:text-dark-800`),children:[e.images&&e.images.length>0&&(0,Q.jsx)(`div`,{className:`mb-1.5 grid max-w-lg grid-cols-2 gap-1.5 sm:grid-cols-3`,children:e.images.map((e,t)=>(0,Q.jsx)(`div`,{className:`aspect-square overflow-hidden rounded-xl border border-black/[0.06] bg-gray-100 dark:border-white/[0.08] dark:bg-gray-800`,children:(0,Q.jsx)(`img`,{src:e,alt:`Uploaded image ${t+1}`,className:`w-full h-full object-cover cursor-pointer hover:opacity-90 transition-opacity`,onClick:()=>te(e)})},t))}),l?C?(0,Q.jsxs)(`div`,{className:`w-full min-w-[min(28rem,80vw)] rounded-2xl border border-black/[0.08] bg-white p-2 shadow-sm dark:border-white/[0.08] dark:bg-dark-100`,children:[(0,Q.jsx)(`textarea`,{dir:`auto`,value:T,onChange:e=>D(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey?(e.preventDefault(),ve()):e.key===`Escape`&&U()},autoFocus:!0,className:`min-h-[72px] w-full resize-y rounded-xl border-none bg-transparent p-2 text-[0.9375rem] leading-relaxed text-gray-900 focus:outline-none dark:text-dark-900`}),(0,Q.jsxs)(`div`,{className:`flex items-center justify-end gap-1.5 px-1 pb-1`,children:[(0,Q.jsx)(`button`,{onClick:U,className:`rounded-lg px-2.5 py-1 text-xs text-gray-500 transition-colors hover:bg-gray-100 dark:text-dark-600 dark:hover:bg-dark-200`,children:o(`chatMessage.cancelEditing`)}),(0,Q.jsx)(`button`,{onClick:ve,className:`rounded-lg bg-gray-900 px-2.5 py-1 text-xs text-white transition-colors hover:bg-gray-700 dark:bg-dark-300 dark:hover:bg-dark-400`,children:o(`chatMessage.saveAndSubmit`)})]})]}):(0,Q.jsx)(`div`,{className:`rounded-2xl rounded-ee-md border border-black/[0.06] bg-gray-900 px-3.5 py-2 text-white shadow-sm dark:border-white/[0.07] dark:bg-dark-300`,children:(0,Q.jsx)(`p`,{dir:`auto`,className:`whitespace-pre-wrap text-[0.9375rem] leading-relaxed`,children:e.content})}):p?(0,Q.jsxs)(`div`,{className:`relative z-0 rounded-2xl border border-black/[0.06] bg-white/55 p-3 dark:border-white/[0.06] dark:bg-dark-200/45`,children:[(0,Q.jsxs)(`div`,{className:`mb-2 flex items-center justify-between text-[10px] font-semibold uppercase tracking-[0.12em] text-gray-500 dark:text-dark-500`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,Q.jsx)(x,{className:`h-2.5 w-2.5 opacity-50`}),o(`chatMessage.system`)]}),(0,Q.jsx)(`div`,{className:`flex items-center gap-1`,children:C?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`button`,{onClick:ge,disabled:A,className:`rounded-lg p-1.5 transition-colors hover:bg-gray-100 disabled:opacity-50 dark:hover:bg-dark-300`,title:o(`chatMessage.saveChanges`),children:(0,Q.jsx)(E,{className:`h-3 w-3 text-green-600 dark:text-green-400`})}),(0,Q.jsx)(`button`,{onClick:U,disabled:A,className:`rounded-lg p-1.5 transition-colors hover:bg-gray-100 disabled:opacity-50 dark:hover:bg-dark-300`,title:o(`chatMessage.cancelEditing`),children:(0,Q.jsx)(H,{className:`h-3 w-3 text-red-600 dark:text-red-400`})})]}):(0,Q.jsx)(`button`,{onClick:he,className:`rounded-lg p-1.5 transition-colors hover:bg-gray-100 dark:hover:bg-dark-300`,title:o(`chatMessage.editSystemMessage`),children:(0,Q.jsx)(O,{className:`h-3 w-3 text-gray-600 dark:text-gray-400`})})})]}),C?(0,Q.jsx)(`textarea`,{dir:`auto`,value:T,onChange:e=>D(e.target.value),className:`min-h-[100px] w-full resize-none rounded-xl border border-black/[0.08] bg-white p-3 text-sm text-gray-900 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-primary-500 dark:border-white/[0.08] dark:bg-dark-100 dark:text-dark-900 dark:focus:ring-primary-400`,placeholder:o(`chatMessage.systemMessagePlaceholder`),disabled:A}):(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`p`,{dir:`auto`,className:`whitespace-pre-wrap text-xs leading-relaxed text-gray-500 dark:text-dark-600`,children:N?e.content:be(e.content)}),xe&&(0,Q.jsx)(`button`,{onClick:()=>P(!N),className:`mt-2 flex items-center gap-1 text-xs text-gray-400 transition-colors hover:text-gray-900 dark:text-dark-500 dark:hover:text-dark-900`,children:N?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(_e,{className:`h-3 w-3`}),o(`chatMessage.showLess`)]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(me,{className:`h-3 w-3`}),o(`chatMessage.showMore`)]})})]})]}):(0,Q.jsxs)(`div`,{className:`relative`,children:[(B||ue)&&(0,Q.jsxs)(`div`,{className:`mb-3 border-s border-gray-200 ps-3 dark:border-dark-300`,children:[(0,Q.jsxs)(`button`,{onClick:()=>I(!F),className:`flex items-center gap-1.5 text-xs text-gray-500 transition-colors hover:text-gray-900 dark:text-dark-600 dark:hover:text-dark-900`,children:[(0,Q.jsx)(se,{className:f(`h-3.5 w-3.5`,ue&&`animate-pulse-subtle motion-reduce:animate-none`)}),ue?(0,Q.jsxs)(`span`,{className:`animate-shimmer bg-gradient-to-r from-gray-400 via-gray-900 to-gray-400 bg-[length:200%_100%] bg-clip-text font-medium text-transparent motion-reduce:animate-none motion-reduce:bg-none motion-reduce:text-gray-500 dark:from-dark-500 dark:via-dark-900 dark:to-dark-500 motion-reduce:dark:text-dark-600`,children:[o(`chatMessage.thinking`),`…`]}):(0,Q.jsx)(`span`,{className:`font-medium`,children:fe===void 0?o(`chatMessage.thinking`):o(`chatMessage.thoughtFor`,{duration:at(fe)})}),F?(0,Q.jsx)(_e,{className:`h-3.5 w-3.5`}):(0,Q.jsx)(me,{className:`h-3.5 w-3.5`})]}),F&&B&&(0,Q.jsx)(`div`,{className:`mt-2 rounded-xl bg-gray-100/60 p-2.5 dark:bg-dark-200/60`,children:(0,Q.jsx)(`p`,{dir:`auto`,className:`whitespace-pre-wrap text-[13px] leading-relaxed text-gray-600 dark:text-dark-700`,children:B})})]}),(0,Q.jsx)(Be,{content:V,isStreaming:t})]}),!l&&!p&&de.length>0&&(0,Q.jsx)(`div`,{className:`mt-3`,children:(0,Q.jsx)(We,{artifacts:de})}),!l&&!p&&Array.isArray(e.providerMetadata?.webSearchSources)&&e.providerMetadata.webSearchSources.length>0&&(0,Q.jsxs)(`div`,{className:`mt-2.5 flex flex-wrap items-center gap-1.5`,children:[(0,Q.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-[0.12em] text-gray-400 dark:text-dark-500 rtl:tracking-normal`,children:o(`chat.message.sources`,`Sources`)}),e.providerMetadata.webSearchSources.map((e,t)=>typeof e?.url==`string`?(0,Q.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,dir:`ltr`,className:`inline-flex max-w-[220px] items-center gap-1 rounded-full border border-gray-200 bg-gray-50 px-2 py-0.5 text-[11px] text-gray-600 transition-colors hover:border-primary-300 hover:text-primary-600 dark:border-dark-300 dark:bg-dark-200 dark:text-dark-700 dark:hover:text-primary-400`,title:e.title||e.url,children:[(0,Q.jsx)(`span`,{className:`tabular-nums`,children:t+1}),(0,Q.jsx)(`span`,{className:`truncate`,children:(()=>{try{return new URL(e.url).hostname.replace(/^www\./,``)}catch{return e.url}})()})]},`${e.url}-${t}`):null)]}),!l&&!p&&e.statistics&&(0,Q.jsx)(`div`,{className:`mt-2`,children:(0,Q.jsx)(qe,{statistics:e.statistics})}),!p&&!t&&(0,Q.jsxs)(`div`,{className:f(`flex items-center gap-0.5 text-gray-400 dark:text-dark-500`,`sm:opacity-0 sm:transition-opacity sm:duration-150 sm:group-hover:opacity-100 sm:group-focus-within:opacity-100`,l?`mt-1 justify-end`:`mt-1`),children:[l&&(0,Q.jsxs)(`span`,{dir:`auto`,className:`me-1 text-[10px] tabular-nums`,title:d(e.timestamp,c.language),children:[pe(),` ·`,` `,d(e.timestamp,c.language)]}),!l&&V&&(0,Q.jsx)(tt,{text:V,size:`sm`,className:f(`transition-colors`,ne&&`bg-primary-50 text-primary-600 dark:bg-primary-900/20 dark:text-primary-400`)}),l&&a&&!C&&(0,Q.jsx)(`button`,{onClick:()=>{D(e.content),w(!0)},className:`flex h-7 w-7 items-center justify-center rounded-full transition-colors hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-dark-200 dark:hover:text-dark-800`,title:o(`chatMessage.edit`),children:(0,Q.jsx)(O,{className:`h-3.5 w-3.5`})}),(0,Q.jsx)(`button`,{onClick:z,className:`flex h-7 w-7 items-center justify-center rounded-full transition-colors hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-dark-200 dark:hover:text-dark-800`,title:o(re?`chatMessage.copied`:`chatMessage.copyMessage`),children:re?(0,Q.jsx)(ye,{className:`h-3.5 w-3.5 text-green-500`}):(0,Q.jsx)(ee,{className:`h-3.5 w-3.5`})}),!l&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`button`,{onClick:()=>W(1),className:f(`flex h-7 w-7 items-center justify-center rounded-full transition-colors hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-dark-200 dark:hover:text-dark-800`,e.rating===1&&`text-primary-600 dark:text-primary-400`),title:o(`chatMessage.goodResponse`),"aria-pressed":e.rating===1,children:(0,Q.jsx)(le,{className:`h-3.5 w-3.5`,fill:e.rating===1?`currentColor`:`none`})}),(0,Q.jsx)(`button`,{onClick:()=>W(-1),className:f(`flex h-7 w-7 items-center justify-center rounded-full transition-colors hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-dark-200 dark:hover:text-dark-800`,e.rating===-1&&`text-red-500 dark:text-red-400`),title:o(`chatMessage.badResponse`),"aria-pressed":e.rating===-1,children:(0,Q.jsx)(ce,{className:`h-3.5 w-3.5`,fill:e.rating===-1?`currentColor`:`none`})})]}),!l&&r&&i&&(0,Q.jsx)(`button`,{onClick:i,className:`flex h-7 w-7 items-center justify-center rounded-full transition-colors hover:bg-gray-100 hover:text-gray-800 dark:hover:bg-dark-200 dark:hover:text-dark-800`,title:o(`chatMessage.regenerateResponse`),children:(0,Q.jsx)(M,{className:`h-3.5 w-3.5`})})]})]})]}),l&&(0,Q.jsx)(Ut,{role:`user`,user:h??null})]}),k&&(0,Ke.createPortal)((0,Q.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":o(`chatMessage.fullSizeImage`),className:`fixed inset-0 z-[9999] flex items-center justify-center bg-black/85 p-6 backdrop-blur-md`,onClick:()=>te(null),children:[(0,Q.jsx)(`button`,{className:`absolute end-6 top-6 rounded-full border border-white/15 bg-white/10 p-3 text-white transition-colors hover:bg-white/20`,onClick:e=>{e.stopPropagation(),te(null)},children:(0,Q.jsx)(H,{className:`h-7 w-7`})}),(0,Q.jsx)(`img`,{src:k,alt:o(`chatMessage.fullSizeImage`),className:`max-h-[90vh] max-w-[90vw] rounded-2xl object-contain shadow-2xl`,onClick:e=>e.stopPropagation()})]}),document.body)]})},Gt=()=>typeof window<`u`&&window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,Kt=220,qt=e=>{let t=e.slice(0,880).replace(/```(?:\w+)?\s*([\s\S]*?)```/g,`$1`).replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`).replace(/<[^>]+>/g,` `).replace(/[#>*_~`|]/g,` `).replace(/\s+/g,` `).trim();return t.length>Kt?`${t.slice(0,219).trimEnd()}…`:t},Jt=Z.memo(function({items:e,activeId:t,onSelect:n}){let{t:r}=s(),i=(0,Z.useRef)(null),a=(0,Z.useRef)(null),o=(0,Z.useRef)(new Map),[c,l]=(0,Z.useState)(null),[u,d]=(0,Z.useState)(0),p=(0,Z.useCallback)((e,t)=>{let n=i.current;if(!n)return;let r=n.getBoundingClientRect(),a=t.getBoundingClientRect();d(a.top-r.top+a.height/2),l(e)},[]),m=(0,Z.useCallback)(t=>{let r=e[t],i=r?o.current.get(r.id):void 0;!r||!i||(i.focus(),p(r.id,i),n(r.id))},[e,n,p]);if((0,Z.useEffect)(()=>{if(!t)return;let e=a.current,n=o.current.get(t);if(!e||!n)return;let r=e.getBoundingClientRect(),i=n.getBoundingClientRect(),s=null;i.top<r.top?s=e.scrollTop-(r.top-i.top)-8:i.bottom>r.bottom&&(s=e.scrollTop+(i.bottom-r.bottom)+8),s!==null&&e.scrollTo({top:s,behavior:Gt()?`auto`:`smooth`})},[t]),e.length<3)return null;let h=Math.max(0,e.findIndex(e=>e.id===t)),g=e[h]?.id,_=e.findIndex(e=>e.id===c),v=_>=0?e[_]:null,y=_>=0?`conversation-history-preview-${_}`:void 0;return(0,Q.jsxs)(`nav`,{ref:i,"data-testid":`conversation-history-rail`,"aria-label":r(`chatHistory.label`),className:`pointer-events-none absolute top-1/2 z-20 hidden h-[min(58vh,30rem)] w-7 -translate-y-1/2 lg:block xl:w-9`,style:{insetInlineStart:`max(0.25rem, calc(50% - 27rem))`},onPointerLeave:()=>{i.current?.contains(document.activeElement)||l(null)},children:[(0,Q.jsx)(`ol`,{ref:a,className:`pointer-events-auto flex h-full min-h-0 flex-col overflow-y-auto py-2 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&>li:first-child]:mt-auto [&>li:last-child]:mb-auto`,children:e.map((t,a)=>{let s=t.id===g,u=Math.abs(a-h),d=c===t.id?y:void 0;return(0,Q.jsx)(`li`,{className:`flex h-4 flex-none items-center`,children:(0,Q.jsx)(`button`,{ref:e=>{e?o.current.set(t.id,e):o.current.delete(t.id)},type:`button`,"data-testid":`conversation-history-marker`,"aria-current":s?`location`:void 0,"aria-describedby":d,"aria-label":r(`chatHistory.jumpToTurn`,{index:a+1,total:e.length}),tabIndex:a===h?0:-1,className:f(`group flex h-4 w-7 items-center outline-none xl:w-9`,`focus-visible:ring-2 focus-visible:ring-primary-500/45 focus-visible:ring-offset-2 focus-visible:ring-offset-canvas`,`rounded-sm`),onClick:()=>n(t.id),onPointerEnter:e=>p(t.id,e.currentTarget),onFocus:e=>p(t.id,e.currentTarget),onBlur:()=>{window.requestAnimationFrame(()=>{i.current?.contains(document.activeElement)||l(null)})},onKeyDown:t=>{if(t.key===`Escape`){l(null);return}let n=null;t.key===`ArrowDown`?n=Math.min(e.length-1,a+1):t.key===`ArrowUp`?n=Math.max(0,a-1):t.key===`Home`?n=0:t.key===`End`&&(n=e.length-1),n!==null&&(t.preventDefault(),m(n))},children:(0,Q.jsx)(`span`,{"aria-hidden":`true`,className:f(`block h-0.5 rounded-full transition-[width,background-color,opacity] duration-150 motion-reduce:transition-none`,s?`w-6 bg-ink xl:w-7`:u===1?`w-3.5 bg-ink-subtle opacity-80 group-hover:w-5 group-hover:bg-ink-muted group-hover:opacity-100 group-focus-visible:w-5`:`w-2.5 bg-line-strong opacity-70 group-hover:w-5 group-hover:bg-ink-muted group-hover:opacity-100 group-focus-visible:w-5`)})})},t.id)})}),v&&(0,Q.jsx)(`div`,{id:y,role:`tooltip`,className:f(`pointer-events-none absolute start-full ms-2 w-72 -translate-y-1/2`,`overflow-hidden rounded-xl border border-line bg-surface-overlay/95 shadow-overlay backdrop-blur-xl`,`animate-fade-in motion-reduce:animate-none`),style:{top:`clamp(3.5rem, ${u}px, calc(100% - 3.5rem))`},children:(0,Q.jsxs)(`div`,{className:`px-3.5 py-3`,children:[(0,Q.jsx)(`p`,{dir:`auto`,className:`truncate text-[13px] font-semibold leading-5 text-ink`,children:qt(v.prompt)}),v.response&&(0,Q.jsx)(`p`,{dir:`auto`,className:`mt-1 line-clamp-3 text-xs leading-5 text-ink-muted`,children:qt(v.response)})]})})]})}),Yt=({messages:e,isStreaming:t=!1,streamingMessage:n,streamingThinking:r,streamingMessageId:i,isLastAssistantMessage:a=!1,onRegenerate:o,onSelectBranch:s,className:c})=>{if(e.length===1){let s=e[0],l=t&&i===s.id,u=l?{...s,content:n??s.content,thinking:r||s.thinking}:s;return(0,Q.jsx)(Wt,{message:u,isStreaming:l,isLastAssistantMessage:a,onRegenerate:o,className:c})}return(0,Q.jsxs)(`div`,{className:f(`relative py-2`,c),children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-1.5 pb-3 text-[10px] font-medium uppercase tracking-[0.12em] text-gray-400 dark:text-dark-500`,children:[(0,Q.jsx)(I,{className:`h-3 w-3`}),(0,Q.jsxs)(`span`,{children:[e.length,` variants`]})]}),(0,Q.jsx)(`div`,{className:`grid grid-cols-1 gap-3 md:grid-cols-2`,children:e.map((e,c)=>{let l=e.isActive!==!1,u=t&&i===e.id,d=u?{...e,content:n??e.content,thinking:r||e.thinking}:e;return(0,Q.jsxs)(`div`,{className:f(`relative overflow-hidden rounded-2xl border bg-white/45 transition-colors duration-150 dark:bg-dark-200/35`,l||u?`border-primary-500/30 ring-1 ring-primary-500/10 dark:border-primary-400/30`:`border-black/[0.07] hover:bg-white/80 dark:border-white/[0.07] dark:hover:bg-dark-200/70`,!l&&!u&&`cursor-pointer`),role:!l&&!u?`button`:void 0,tabIndex:!l&&!u?0:void 0,onClick:()=>!l&&!u&&s?.(e.id),onKeyDown:t=>{!l&&!u&&(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),s?.(e.id))},children:[(0,Q.jsxs)(`div`,{className:f(`flex items-center justify-between border-b px-3 py-2 text-[10px] font-medium uppercase tracking-[0.12em]`,l||u?`border-primary-500/10 bg-primary-50/50 text-primary-600 dark:border-primary-400/10 dark:bg-primary-900/10 dark:text-primary-400`:`border-black/[0.05] text-gray-400 dark:border-white/[0.05] dark:text-dark-500`),children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Q.jsx)(`span`,{className:`font-medium`,children:c+1}),u&&(0,Q.jsx)(`span`,{className:`text-[10px] opacity-70 animate-pulse`,children:`generating...`})]}),l&&!u&&(0,Q.jsx)(ye,{className:`h-3 w-3`}),!l&&!u&&(0,Q.jsx)(`span`,{className:`text-[10px] opacity-50`,children:`select`})]}),(0,Q.jsx)(`div`,{className:f(!l&&!u&&`opacity-75`),children:(0,Q.jsx)(Wt,{message:d,isStreaming:u,isLastAssistantMessage:a&&(l||u),onRegenerate:l&&!t?o:void 0,className:`px-3 pb-3 !text-sm`})})]},e.id)})})]})},Xt={web_search:j,web_fetch:N,exec:xe,browser:N,Read:D,Write:D,Edit:D,image:z,memory_search:ne,memory_get:ne,working:U,thinking:U,default:U},Zt={web_search:`Searching the web`,web_fetch:`Fetching page`,exec:`Running command`,browser:`Using browser`,Read:`Reading file`,Write:`Writing file`,Edit:`Editing file`,image:`Analyzing image`,memory_search:`Searching memory`,memory_get:`Reading memory`,cron:`Managing schedule`,message:`Sending message`,tts:`Generating speech`,nodes:`Checking devices`,sessions_spawn:`Spawning agent`,canvas:`Rendering canvas`,process:`Managing process`,working:`Using tools`,thinking:`Thinking`},Qt=({tools:e,className:t})=>{if(e.length===0)return null;let n=e.filter(e=>e.phase!==`result`&&e.phase!==`done`);return n.length===0?null:(0,Q.jsx)(`div`,{className:f(`flex flex-col gap-1 py-2 px-1`,t),children:n.map(e=>{let t=Xt[e.name]||Xt.default,n=Zt[e.name]||`Using ${e.name}`,r=e.phase===`result`;return(0,Q.jsxs)(`div`,{className:f(`flex items-center gap-2 text-sm transition-all duration-300`,r?`text-green-600 dark:text-green-400 opacity-60`:`text-gray-500 dark:text-gray-400`),children:[(0,Q.jsx)(`div`,{className:f(`flex items-center justify-center w-5 h-5`,!r&&`animate-spin-slow`),children:(0,Q.jsx)(t,{className:`h-3.5 w-3.5`})}),(0,Q.jsx)(`span`,{className:`text-xs font-medium`,children:r?`✓ ${n}`:`${n}…`}),!r&&(0,Q.jsxs)(`div`,{className:`flex gap-0.5`,children:[(0,Q.jsx)(`div`,{className:`w-1 h-1 bg-current rounded-full animate-bounce`,style:{animationDelay:`0ms`}}),(0,Q.jsx)(`div`,{className:`w-1 h-1 bg-current rounded-full animate-bounce`,style:{animationDelay:`150ms`}}),(0,Q.jsx)(`div`,{className:`w-1 h-1 bg-current rounded-full animate-bounce`,style:{animationDelay:`300ms`}})]})]},e.toolCallId)})})};G(`components:chat-messages`);var $t=e=>e.messages.find(e=>e.isActive===!0)||e.messages.find(e=>e.isActive!==!1)||e.messages[0],en=()=>typeof window<`u`&&window.matchMedia(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`,tn=e=>Math.min(120,e*.28),nn=({messages:e,streamingMessage:t,streamingThinking:n,streamingMessageId:r,isStreaming:i=!1,toolActivities:a=[],className:o,onRegenerate:c,onSelectBranch:l,onEditResend:u,followUpSuggestions:d,onFollowUpSelect:p})=>{let{t:m}=s(),h=(0,Z.useRef)(null),g=(0,Z.useRef)(void 0),_=(0,Z.useRef)(null),v=(0,Z.useRef)(null),y=(0,Z.useRef)(new Map),b=(0,Z.useRef)(null),x=(0,Z.useRef)(0),S=(0,Z.useRef)(!1),C=(0,Z.useRef)(!1),[w,T]=(0,Z.useState)(!1),E=(0,Z.useMemo)(()=>{let t=[],n=new Set,r=[...e].sort((e,t)=>e.role===`system`&&t.role!==`system`?-1:t.role===`system`&&e.role!==`system`?1:e.parentId===t.parentId?(e.branchIndex||0)-(t.branchIndex||0):e.timestamp-t.timestamp);for(let i of r){if(n.has(i.id))continue;let r=i.parentId;if(r){let a=t.findIndex(e=>e.id===r);if(a>=0)t[a].messages.push(i);else{let a=e.find(e=>e.id===r);a&&!n.has(r)?(t.push({id:r,messages:[a,i],messageIndex:t.length}),n.add(r)):t.push({id:i.id,messages:[i],messageIndex:t.length})}n.add(i.id)}else{let r=e.filter(e=>e.parentId===i.id);r.length>0?(t.push({id:i.id,messages:[i,...r],messageIndex:t.length}),n.add(i.id),r.forEach(e=>n.add(e.id))):(t.push({id:i.id,messages:[i],messageIndex:t.length}),n.add(i.id))}}return t.sort((e,t)=>{let n=e.messages[0],r=t.messages[0];return n.role===`system`&&r.role!==`system`?-1:r.role===`system`&&n.role!==`system`?1:n.timestamp-r.timestamp})},[e]),D=(0,Z.useMemo)(()=>{let e=[];for(let t=0;t<E.length;t++){let n=E[t],r=$t(n);if(r.role!==`user`)continue;let i;for(let e=t+1;e<E.length;e++){let t=$t(E[e]);if(t.role===`user`)break;if(t.role===`assistant`){i=t.content;break}}e.push({id:n.id,prompt:r.content,response:i})}return e},[E]),O=D.map(e=>e.id).join(``),k=(0,Z.useMemo)(()=>O?O.split(``):[],[O]),ee=(0,Z.useMemo)(()=>new Set(k),[k]),[te,A]=(0,Z.useState)(null),j=(0,Z.useCallback)(()=>{let e=_.current;if(!e||k.length===0){A(null);return}let t=e.scrollHeight-e.scrollTop-e.clientHeight,n=Math.min(x.current,k.length-1);if(t<=2)n=k.length-1;else{let t=e.scrollTop+tn(e.clientHeight);for(;n<k.length-1;){let e=y.current.get(k[n+1]);if(!e||e.offsetTop>t)break;n++}for(;n>0;){let e=y.current.get(k[n]);if(!e||e.offsetTop<=t)break;n--}}x.current=n;let r=k[n];A(e=>e===r?e:r)},[k]),M=(0,Z.useCallback)(()=>{b.current===null&&(b.current=window.requestAnimationFrame(()=>{b.current=null,j()}))},[j]),N=(0,Z.useCallback)(()=>{let t=_.current;if(g.current&&clearTimeout(g.current),S.current=!1,g.current=void 0,!t)return;let n=t.scrollHeight-t.scrollTop-t.clientHeight<100;C.current=!n,T(!n&&e.length>0),M()},[e.length,M]),F=(0,Z.useCallback)(()=>{g.current&&clearTimeout(g.current),g.current=setTimeout(N,180)},[N]),I=(0,Z.useCallback)((e=!1)=>{C.current&&!e||h.current?.scrollIntoView({behavior:en()})},[]),ne=(0,Z.useCallback)(()=>{let t=_.current;if(!t)return;let{scrollTop:n,scrollHeight:r,clientHeight:i}=t,a=r-n-i,o=a<100;if(S.current){C.current=!0,T(!o&&e.length>0),M(),F();return}C.current=!o,T(!o&&e.length>0),a<=2&&k.length>0?(x.current=k.length-1,A(k[k.length-1])):M()},[k,e.length,F,M]),L=(0,Z.useCallback)(e=>{let t=_.current,n=y.current.get(e);if(!t||!n)return;let r=en();S.current=!0,C.current=!0,t.scrollTo({top:Math.max(0,n.offsetTop-tn(t.clientHeight)),behavior:r}),M(),r===`auto`?N():F()},[N,F,M]),re=(0,Z.useRef)(e.length);if((0,Z.useEffect)(()=>{e.length>re.current&&!C.current&&I(),re.current=e.length},[e.length,I]),(0,Z.useEffect)(()=>{i&&(t||n)&&!C.current&&requestAnimationFrame(()=>{let e=_.current;e&&(e.scrollTop=e.scrollHeight)})},[i,t,n]),(0,Z.useEffect)(()=>{M();let e=v.current,t=_.current,n=typeof ResizeObserver>`u`?null:new ResizeObserver(M);return e&&n?.observe(e),t&&n?.observe(t),window.addEventListener(`resize`,M),()=>{n?.disconnect(),window.removeEventListener(`resize`,M)}},[O,M]),(0,Z.useEffect)(()=>()=>{b.current!==null&&(window.cancelAnimationFrame(b.current),b.current=null)},[]),(0,Z.useEffect)(()=>()=>{g.current&&clearTimeout(g.current)},[]),e.length===0&&!i)return(0,Q.jsx)(`div`,{className:f(`flex-1 flex items-center justify-center p-6 sm:p-10`,o),children:(0,Q.jsxs)(`div`,{className:`max-w-sm text-center text-gray-500 dark:text-dark-600`,children:[(0,Q.jsx)(`div`,{className:`mx-auto mb-5 flex h-11 w-11 items-center justify-center rounded-2xl border border-black/[0.06] bg-surface/70 text-gray-500 shadow-sm dark:border-white/[0.07] dark:bg-dark-200/70 dark:text-dark-600`,children:(0,Q.jsx)(P,{className:`h-4 w-4`})}),(0,Q.jsx)(`h3`,{className:`mb-2 text-lg font-medium tracking-[-0.02em] text-gray-900 dark:text-dark-900 sm:text-xl`,children:m(`chatMessage.startConversation`)}),(0,Q.jsx)(`p`,{className:`px-4 text-sm leading-relaxed`,children:m(`chatMessage.startConversationDescription`)})]})});let ie=-1;for(let e=E.length-1;e>=0;e--)if(E[e].messages.some(e=>e.role===`assistant`)){ie=e;break}return(0,Q.jsxs)(`div`,{className:f(`relative min-h-0 flex-1`,o),style:{WebkitAppRegion:`no-drag`},children:[(0,Q.jsx)(`div`,{ref:_,"data-testid":`chat-scroll-viewport`,onScroll:ne,className:f(`h-full overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600`,`scrollbar-track-transparent hover:scrollbar-thumb-gray-400 dark:hover:scrollbar-thumb-gray-500`,`overscroll-behavior-y-contain`,`[-webkit-overflow-scrolling:touch]`),style:{WebkitOverflowScrolling:`touch`,overscrollBehaviorY:`contain`},children:(0,Q.jsxs)(`div`,{ref:v,className:`mx-auto w-full min-w-0 max-w-3xl px-4 sm:px-6 md:px-8`,children:[E.map((e,a)=>{let o=a===ie,s=ee.has(e.id),d=i&&e.messages.some(e=>e.id===r),f;if(e.messages.length===1){let s=e.messages[0],l=i&&s.id===r,d=l?{...s,content:t??s.content,thinking:n||s.thinking}:s;f=(0,Q.jsx)(Wt,{message:d,isStreaming:l,isLastAssistantMessage:o,onRegenerate:o?c:void 0,onEditResend:i?void 0:u,className:a===0?`mt-3 sm:mt-4`:``})}else f=(0,Q.jsx)(Yt,{messages:e.messages,isStreaming:d,streamingMessage:t,streamingThinking:n,streamingMessageId:r||void 0,isLastAssistantMessage:o,onRegenerate:o?c:void 0,onSelectBranch:l,className:a===0?`mt-3 sm:mt-4`:``});return(0,Q.jsx)(`div`,{ref:t=>{s&&(t?y.current.set(e.id,t):y.current.delete(e.id))},"data-testid":s?`conversation-turn-anchor`:void 0,"data-history-id":s?e.id:void 0,children:f},e.id)}),i&&a.length>0&&(0,Q.jsx)(Qt,{tools:a,className:`px-0`}),!i&&d&&d.length>0&&p&&(0,Q.jsxs)(`div`,{className:`mt-1 pb-2`,children:[(0,Q.jsx)(`p`,{className:`mb-1 text-[11px] font-semibold uppercase tracking-[0.08em] text-gray-500 dark:text-dark-500`,children:m(`chat.followUp`)}),(0,Q.jsx)(`div`,{className:`flex flex-col`,children:d.map(e=>(0,Q.jsx)(`button`,{onClick:()=>p(e),dir:`auto`,className:`border-t border-gray-100 py-2 text-start text-[0.9rem] leading-relaxed text-gray-600 transition-colors hover:text-gray-900 dark:border-dark-200 dark:text-dark-600 dark:hover:text-dark-900`,children:e},e))})]}),(0,Q.jsx)(`div`,{ref:h,className:`h-4 sm:h-6`})]})}),(0,Q.jsx)(Jt,{items:D,activeId:te,onSelect:L}),w&&(0,Q.jsxs)(`button`,{onClick:()=>{S.current=!1,g.current&&(clearTimeout(g.current),g.current=void 0),C.current=!1,h.current?.scrollIntoView({behavior:en()}),T(!1)},className:f(`absolute bottom-4 left-1/2 -translate-x-1/2 z-10`,`flex items-center justify-center gap-1.5`,`px-3.5 py-2 rounded-full`,`bg-surface/90 dark:bg-dark-200/90`,`border border-black/[0.07] dark:border-white/[0.08]`,`shadow-[0_8px_28px_rgba(15,23,42,0.12)] backdrop-blur-xl`,`text-gray-600 dark:text-dark-600`,`hover:bg-surface-raised dark:hover:bg-dark-200`,`hover:text-gray-900 dark:hover:text-dark-800`,`transition-colors duration-150`),title:m(`chatMessage.scrollToBottom`),children:[(0,Q.jsx)(R,{className:`h-4 w-4`}),(0,Q.jsx)(`span`,{className:`text-xs font-medium`,children:m(`chatMessage.newMessages`)})]})]})};function rn(e){let t=(e.match(/```/g)||[]).length,n=t%2==1,r=null;if(n){let t=e.lastIndexOf("```");if(t!==-1){let n=e.slice(t+3).match(/^(\w+)/);n&&(r=n[1])}}return{hasCodeBlocks:t>0,isInCodeBlock:n,language:r}}var an=Z.forwardRef(({value:e,onChange:t,className:n,placeholder:r,disabled:i,onKeyDown:a,dir:o=`auto`,...s},c)=>{let{hasCodeBlocks:l,isInCodeBlock:u,language:d}=(0,Z.useMemo)(()=>rn(e),[e]);return(0,Q.jsxs)(`div`,{className:`relative w-full`,children:[(0,Q.jsx)(`textarea`,{ref:c,value:e,onChange:t,onKeyDown:a,placeholder:r,disabled:i,dir:o,className:f(`w-full resize-none transition-all duration-200`,u&&[`font-mono text-[13px]`,`bg-gray-50 dark:bg-dark-100/50`,`rounded-lg`],n),...s}),l&&(0,Q.jsx)(`div`,{className:`absolute end-0 top-0 pointer-events-none flex items-center gap-1`,children:(0,Q.jsxs)(`div`,{className:f(`flex items-center gap-1 px-1.5 py-0.5 rounded-md text-[10px] font-medium`,`bg-gray-100 dark:bg-dark-200`,`text-gray-500 dark:text-gray-400`,`border border-gray-200/50 dark:border-dark-300/50`,u&&`animate-pulse`),children:[(0,Q.jsx)(L,{className:`h-3 w-3`}),d&&(0,Q.jsx)(`span`,{children:d}),!d&&u&&(0,Q.jsx)(`span`,{children:`code`})]})})]})});an.displayName=`CodeAwareTextarea`;var on=G(`components:media-upload`),sn=({images:e,onImagesChange:t,maxImages:n=5,sessionId:r,onDocumentUploaded:i,disabled:a=!1,className:o})=>{let{t:c}=s(),l=(0,Z.useRef)(null),[u,d]=(0,Z.useState)(!1),[p,m]=(0,Z.useState)(!1),[h,g]=(0,Z.useState)([]),_=async e=>{if(!(!e||a))for(let t=0;t<e.length;t++){let n=e[t];n.type.startsWith(`image/`)?await v(n):n.type.includes(`pdf`)||n.type.includes(`text`)?await y(n):w.error(`File type not supported: ${n.name}`)}},v=async r=>{if(n-e.length<=0){w.error(`Maximum ${n} images allowed`);return}if(r.size>10485760){w.error(`Image ${r.name} is too large (max 10MB)`);return}let i=new FileReader;i.onload=n=>{n.target?.result&&t([...e,n.target.result])},i.readAsDataURL(r)},y=async e=>{if(e.size>10485760){w.error(`File size must be less than 10MB`);return}m(!0);try{let t=await we.uploadDocument(e,r);if(t.success&&t.data){let n=t.data;g(e=>[...e,n]),i?.(n),w.success(`Document "${e.name}" uploaded`)}else w.error(t.error||`Failed to upload document`)}catch(e){on.error(`Document upload error:`,e),w.error(`Failed to upload document`)}finally{m(!1)}},b=e=>{e.preventDefault(),a||d(!0)},x=e=>{e.preventDefault(),d(!1)},S=e=>{e.preventDefault(),d(!1),a||_(e.dataTransfer.files)},C=n=>{t(e.filter((e,t)=>t!==n))},T=async e=>{try{let t=await we.deleteDocument(e);t.success?(g(t=>t.filter(t=>t.id!==e)),w.success(`Document removed`)):w.error(t.error||`Failed to remove document`)}catch(e){on.error(`Error removing document:`,e),w.error(`Failed to remove document`)}},E=e=>{if(e===0)return`0 B`;let t=1024,n=[`B`,`KB`,`MB`,`GB`],r=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/t**r).toFixed(1))+` `+n[r]},O=e.length>0||h.length>0;return(0,Q.jsxs)(`div`,{className:f(`space-y-3`,o),children:[(0,Q.jsxs)(`div`,{className:f(`border-2 border-dashed rounded-xl p-6 transition-all duration-200 cursor-pointer`,`border-gray-300 dark:border-gray-600`,`hover:border-primary-400 dark:hover:border-primary-500`,u&&`border-primary-500 dark:border-primary-400 bg-primary-50/50 dark:bg-primary-900/10`,a&&`opacity-50 cursor-not-allowed`),onDragOver:b,onDragLeave:x,onDrop:S,onClick:()=>!a&&l.current?.click(),children:[(0,Q.jsx)(`input`,{ref:l,type:`file`,multiple:!0,accept:`image/*,.pdf,.txt`,onChange:e=>{_(e.target.files),e.target.value=``},className:`hidden`,disabled:a}),(0,Q.jsxs)(`div`,{className:`flex flex-col items-center text-center`,children:[p?(0,Q.jsx)(V,{className:`h-8 w-8 text-gray-400 dark:text-gray-500 mb-2 animate-spin`}):(0,Q.jsx)(oe,{className:`h-8 w-8 text-gray-400 dark:text-gray-500 mb-2`}),(0,Q.jsxs)(`p`,{className:`text-sm text-gray-700 dark:text-gray-300`,children:[c(`chat.mediaUpload.dropImagesHere`),` `,(0,Q.jsx)(`span`,{className:`text-primary-600 dark:text-primary-400 font-medium`,children:c(`chat.mediaUpload.browse`)})]}),(0,Q.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:c(`chat.mediaUpload.supportedFormats`)})]})]}),O&&(0,Q.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[e.map((e,t)=>(0,Q.jsxs)(`div`,{className:`relative group w-16 h-16 rounded-lg overflow-hidden bg-gray-100 dark:bg-gray-800 border border-gray-200 dark:border-gray-700`,children:[(0,Q.jsx)(`img`,{src:e,alt:`Upload ${t+1}`,className:`w-full h-full object-cover`}),(0,Q.jsx)(`button`,{onClick:e=>{e.stopPropagation(),C(t)},className:`absolute top-0.5 right-0.5 p-0.5 rounded-full bg-black/60 hover:bg-black/80 text-white opacity-0 group-hover:opacity-100 transition-opacity`,children:(0,Q.jsx)(H,{className:`h-3 w-3`})})]},`img-${t}`)),h.map(e=>(0,Q.jsxs)(`div`,{className:`relative group flex items-center gap-2 px-3 py-2 rounded-lg bg-gray-100 dark:bg-gray-800 border border-gray-200 dark:border-gray-700`,children:[e.fileType===`pdf`?(0,Q.jsx)(D,{className:`w-4 h-4 text-red-500 flex-shrink-0`}):(0,Q.jsx)(A,{className:`w-4 h-4 text-blue-500 flex-shrink-0`}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`p`,{className:`text-xs font-medium text-gray-900 dark:text-gray-100 truncate max-w-[100px]`,children:e.filename}),(0,Q.jsx)(`p`,{className:`text-[10px] text-gray-500 dark:text-gray-400`,children:E(e.size)})]}),(0,Q.jsx)(`button`,{onClick:t=>{t.stopPropagation(),T(e.id)},className:`p-0.5 rounded-full hover:bg-gray-200 dark:hover:bg-gray-700 text-gray-500 hover:text-red-500 transition-colors`,children:(0,Q.jsx)(H,{className:`h-3 w-3`})})]},e.id))]})]})},cn=G(`components:document-indicator`),ln=({sessionId:e,className:t=``})=>{let{t:n}=s(),[r,i]=(0,Z.useState)([]),[a,o]=(0,Z.useState)(!1),[c,u]=(0,Z.useState)(null),d=(0,Z.useRef)(null),f=(0,Z.useCallback)(async()=>{try{let t=await we.getDocuments();t.success&&t.data&&i(t.data.filter(t=>e&&t.sessionId===e||!t.sessionId&&!t.collectionId))}catch(e){cn.error(`Failed to load documents:`,e)}},[e]);if((0,Z.useEffect)(()=>{f();let e=()=>void f();return window.addEventListener(`libre:documents-updated`,e),()=>window.removeEventListener(`libre:documents-updated`,e)},[f]),(0,Z.useEffect)(()=>{if(!a)return;let e=e=>{d.current?.contains(e.target)||(o(!1),u(null))};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[a]),r.length===0)return null;let p=async e=>{u(null);try{let t=await we.deleteDocument(e);if(!t.success)throw Error(t.error);window.dispatchEvent(new Event(`libre:documents-updated`))}catch(e){cn.error(`Failed to delete document:`,e),F.error(n(`settings.documents.library.deleteFailed`))}},m=r.reduce((e,t)=>e+t.size,0);return(0,Q.jsxs)(`div`,{ref:d,className:`relative inline-block ${t}`,children:[a&&(0,Q.jsxs)(`div`,{className:`absolute bottom-full left-0 z-50 mb-2 w-80 max-w-[85vw] rounded-xl border border-gray-200 bg-white p-2 shadow-lg dark:border-dark-300 dark:bg-dark-100`,children:[(0,Q.jsx)(`p`,{className:`px-2 pb-1.5 pt-1 text-xs font-medium text-gray-500 dark:text-dark-600`,children:n(`chat.documents.title`)}),(0,Q.jsx)(`div`,{className:`max-h-56 overflow-y-auto`,children:r.map(e=>(0,Q.jsx)(`div`,{className:`flex items-center gap-2 rounded-lg px-2 py-1.5 hover:bg-gray-50 dark:hover:bg-dark-200`,children:c===e.id?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`p`,{className:`min-w-0 flex-1 truncate text-xs text-red-700 dark:text-red-300`,children:n(`settings.documents.library.deleteConfirm`,{name:e.filename})}),(0,Q.jsx)(`button`,{onClick:()=>void p(e.id),className:`shrink-0 text-xs font-medium text-red-600 underline underline-offset-2 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300`,children:n(`common.delete`)}),(0,Q.jsx)(`button`,{onClick:()=>u(null),className:`shrink-0 text-xs text-gray-500 hover:text-gray-700 dark:text-dark-600 dark:hover:text-dark-800`,children:n(`common.cancel`)})]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(D,{className:`h-3.5 w-3.5 shrink-0 text-gray-400 dark:text-dark-500`}),(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Q.jsx)(`p`,{className:`truncate text-xs text-gray-900 dark:text-dark-900`,children:e.filename}),(0,Q.jsxs)(`p`,{className:`text-[10px] text-gray-400 dark:text-dark-500`,children:[l(e.size),` · `,e.sessionId?n(`settings.documents.library.chatScope`):n(`settings.documents.library.everyChatScope`)]})]}),(0,Q.jsx)(`button`,{onClick:()=>u(e.id),className:`shrink-0 text-gray-400 transition-colors hover:text-red-500 dark:text-dark-500`,title:n(`common.delete`),children:(0,Q.jsx)(H,{className:`h-3.5 w-3.5`})})]})},e.id))})]}),(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>{o(e=>!e),u(null)},className:`
4
- inline-flex items-center space-x-1 px-2 py-1
5
- bg-blue-50 dark:bg-blue-900/20
6
- border border-blue-200 dark:border-blue-800
7
- rounded-md text-xs
8
- transition-colors hover:bg-blue-100 dark:hover:bg-blue-900/40
9
- `,title:`${n(`chat.documents.title`)} - ${l(m)}`,children:[(0,Q.jsx)(re,{className:`w-3 h-3 text-blue-600 dark:text-blue-400`}),(0,Q.jsxs)(`span`,{className:`text-blue-700 dark:text-blue-300 font-medium`,children:[r.length,` doc`,r.length===1?``:`s`]})]})]})},un=G(`components:structured-output`),dn=[{key:`none`,value:null},{key:`json`,value:`json`},{key:`list`,value:{type:`object`,properties:{items:{type:`array`,items:{type:`string`}}},required:[`items`]}},{key:`summary`,value:{type:`object`,properties:{title:{type:`string`},summary:{type:`string`},key_points:{type:`array`,items:{type:`string`}}},required:[`title`,`summary`,`key_points`]}},{key:`analysis`,value:{type:`object`,properties:{analysis:{type:`string`},pros:{type:`array`,items:{type:`string`}},cons:{type:`array`,items:{type:`string`}},recommendation:{type:`string`}},required:[`analysis`,`pros`,`cons`,`recommendation`]}},{key:`custom`,value:`custom`}],fn=({format:e,onFormatChange:t,className:n})=>{let{t:r}=s(),[i,a]=(0,Z.useState)(!1),[o,c]=(0,Z.useState)(``),l=()=>dn.map(e=>({key:e.key,label:r(`chat.structuredOutput.${e.key}`),value:e.value,description:r(`chat.structuredOutput.${e.key}Description`)})),u=()=>{let t=l();return e===null?t[0]:e===`json`?t[1]:typeof e==`object`?t.find(t=>typeof t.value==`object`&&JSON.stringify(t.value)===JSON.stringify(e))||{key:`customSchema`,label:r(`chat.structuredOutput.custom`),value:e,description:r(`chat.structuredOutput.customSchema`)}:t[0]},d=e=>{let n=l().find(t=>t.label===e);if(n){if(n.value===`custom`){a(!0);return}a(!1),t(n.value)}};return(0,Q.jsxs)(`div`,{className:f(`space-y-3`,n),children:[(0,Q.jsx)(`div`,{className:`flex items-center justify-between`,children:(0,Q.jsxs)(`div`,{className:`flex items-center`,children:[(0,Q.jsx)(x,{className:`h-4 w-4 text-gray-500 mr-2`}),(0,Q.jsx)(`span`,{className:`text-sm font-medium text-gray-700 dark:text-gray-300`,children:r(`chat.structuredOutput.title`)})]})}),(0,Q.jsx)(Re,{value:u().label,onChange:e=>d(e.target.value),options:l().map(e=>({value:e.label,label:e.label}))}),(0,Q.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400`,children:u().description}),i&&(0,Q.jsxs)(`div`,{className:`space-y-3`,children:[(0,Q.jsx)(ze,{value:o,onChange:e=>c(e.target.value),placeholder:`{
10
- "type": "object",
11
- "properties": {
12
- "field1": { "type": "string" },
13
- "field2": { "type": "number" }
14
- },
15
- "required": ["field1"]
16
- }`,rows:8,className:`font-mono text-sm`}),(0,Q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Q.jsx)(X,{onClick:()=>{try{t(JSON.parse(o)),a(!1)}catch(e){un.error(`Invalid JSON schema:`,e)}},size:`sm`,disabled:!o.trim(),children:r(`chat.structuredOutput.applySchema`)}),(0,Q.jsx)(X,{onClick:()=>{a(!1),c(``)},variant:`outline`,size:`sm`,children:r(`chat.structuredOutput.cancel`)})]})]}),(()=>{let e=u();return!e.value||e.value===`json`?null:(0,Q.jsxs)(`div`,{className:`mt-3 p-3 bg-gray-50 dark:bg-gray-800 rounded-md`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center mb-2`,children:[(0,Q.jsx)(k,{className:`h-4 w-4 text-gray-500 mr-2`}),(0,Q.jsx)(`span`,{className:`text-sm font-medium text-gray-700 dark:text-gray-300`,children:r(`chat.structuredOutput.schemaPreview`)})]}),(0,Q.jsx)(`pre`,{className:`text-xs text-gray-700 dark:text-gray-300 overflow-x-auto`,children:JSON.stringify(e.value,null,2)})]})})(),e&&(0,Q.jsxs)(`div`,{className:`flex items-center text-xs text-green-600 dark:text-green-400`,children:[(0,Q.jsx)(D,{className:`h-3 w-3 mr-1`}),r(`chat.structuredOutput.enabled`)]})]})},pn=G(`components:chat-input`),mn=()=>{if(typeof window>`u`)return;let e=window;return e.SpeechRecognition||e.webkitSpeechRecognition},hn=({onSendMessage:e,onStopGeneration:t,disabled:n=!1})=>{let{t:r,i18n:i}=s(),[a,o]=(0,Z.useState)(``),[c,l]=(0,Z.useState)(!1),u=(0,Z.useRef)(null),d=(0,Z.useRef)(``),p=(0,Z.useMemo)(()=>!!mn(),[]),[g,x]=(0,Z.useState)([]),[C,w]=(0,Z.useState)(null),[T,E]=(0,Z.useState)(!1),[O,k]=(0,Z.useState)(!1),[ee,A]=(0,Z.useState)(!1),[j,M]=(0,Z.useState)(!1);(0,Z.useEffect)(()=>{let e=!1;return Me.getConfig().then(t=>{!e&&t.success&&t.data&&A(t.data.allowed)}).catch(()=>{}),()=>{e=!0}},[]);let[P,I]=(0,Z.useState)(null),[ne,L]=(0,Z.useState)(!1),[ie,R]=(0,Z.useState)([]),[ae,oe]=(0,Z.useState)(!1),[se,ce]=(0,Z.useState)(!1),[le,B]=(0,Z.useState)(null),[ue,de]=(0,Z.useState)(!1),H=(0,Z.useRef)(null),pe=(0,Z.useRef)(null),{isGenerating:me,setBackgroundImage:U}=Y(),_e=Y(e=>e.preferences.imageGenSettings?.enabled===!0),ve=_e&&ue,{currentSession:W,models:xe}=b(),Ce=(0,Z.useRef)(null),G=(0,Z.useMemo)(()=>({model:W?.personaId?`persona:${W.personaId}`:W?.model||``,providerType:W?.providerType,providerId:W?.providerId}),[W?.model,W?.personaId,W?.providerId,W?.providerType]),q=(0,Z.useMemo)(()=>_(xe,G),[xe,G]),Te=G.model?m(q,G):``,De=h(xe,G);(0,Z.useEffect)(()=>{let e=!1;return _e&&(async()=>{try{let t=await Ee.getPlugins();if(e)return;de(!!(t.success&&t.data&&t.data.length>0))}catch{if(e)return;de(!1)}})(),()=>{e=!0}},[_e]),(0,Z.useEffect)(()=>{if(!O)return;let e=e=>{H.current&&!H.current.contains(e.target)&&(k(!1),I(null))};return window.addEventListener(`mousedown`,e),()=>window.removeEventListener(`mousedown`,e)},[O]);let ke=()=>{k(!1),I(null),L(!1)};(0,Z.useEffect)(()=>{if(!ne)return;let e=!1;return we.getCollections().then(t=>{!e&&t.success&&t.data&&R(t.data)}).catch(()=>{}),()=>{e=!0}},[ne]);let Ae=W?.settings?.knowledgeCollectionIds??[],je=async e=>{if(!W)return;let t=Ae.includes(e)?Ae.filter(t=>t!==e):[...Ae,e],n={...W.settings,knowledgeCollectionIds:t.length>0?t:void 0};if(b.setState(e=>({currentSession:e.currentSession?.id===W.id?{...e.currentSession,settings:n}:e.currentSession,sessions:e.sessions.map(e=>e.id===W.id?{...e,settings:n}:e)})),!W.isPrivate)try{await K.updateSession(W.id,{settings:n})}catch(e){pn.error(`Failed to update knowledge collections:`,e),F.error(r(`chat.input.menu.attachFailed`))}};(0,Z.useEffect)(()=>()=>{u.current?.stop()},[]);let Ne=()=>{if(c){u.current?.stop();return}let e=mn();if(!e)return;let t=new e;t.lang=i.language,t.continuous=!0,t.interimResults=!0,d.current=a,t.onresult=e=>{let t=``;for(let n=0;n<e.results.length;n++)t+=e.results[n][0]?.transcript??``;let n=d.current;o(n?`${n} ${t.trim()}`:t.trim())},t.onend=()=>{u.current=null,l(!1)},t.onerror=()=>{u.current=null,l(!1)},u.current=t;try{t.start(),l(!0)}catch(e){pn.error(`Failed to start dictation:`,e),u.current=null}},J=async e=>{let t=e.target.files?.[0];if(e.target.value=``,t){ke(),ce(!0);try{let e=await we.uploadDocument(t,W?.id);e.success?(F.success(r(`chat.input.menu.documentAttached`)),window.dispatchEvent(new Event(`libre:documents-updated`))):F.error(e.error||r(`chat.input.menu.attachFailed`))}catch(e){pn.error(`Document upload failed:`,e),F.error(r(`chat.input.menu.attachFailed`))}finally{ce(!1)}}},Pe=async()=>{let e=P?.trim();if(!(!e||ae)){oe(!0);try{let t=await we.fetchWebpage(e,W?.id);t.success?(F.success(r(`chat.input.menu.webpageAttached`)),window.dispatchEvent(new Event(`libre:documents-updated`)),ke()):F.error(t.error||r(`chat.input.menu.attachFailed`))}catch(e){let t=e?.response?.data?.error||r(`chat.input.menu.attachFailed`);pn.error(`Webpage attach failed:`,e),F.error(t)}finally{oe(!1)}}},Fe=t=>{if(t.preventDefault(),!(!a.trim()||me)){if(!De){F.error(r(`chat.model.selectBeforeSending`));return}e(a.trim(),g.length>0?g:void 0,C||void 0,ee&&j?!0:void 0),o(``),x([])}},Ie=e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Fe(e))},Le=()=>{t()};(0,Z.useEffect)(()=>{let e=Ce.current;e&&(e.style.height=`auto`,e.style.height=a?`${Math.min(e.scrollHeight,200)}px`:``)},[a]),(0,Z.useEffect)(()=>{(async()=>{if(W?.personaId)try{let e=await Oe.getPersona(W.personaId);if(e.success&&e.data)B(e.data);else{pn.warn(`Persona ${W.personaId} not found, clearing reference`),B(null);let{setCurrentSession:e}=b.getState();e({...W,personaId:void 0})}}catch(e){if(pn.error(`Failed to load current persona:`,e),B(null),W){let{setCurrentSession:e}=b.getState();e({...W,personaId:void 0})}}else B(null)})()},[W?.personaId]);let Re=async e=>{let t=y(q,e.target.value);if(t&&W)try{if(t.model.startsWith(`persona:`)){let e=t.model.slice(8),n=await Oe.getPersona(e);if(!n.success||!n.data){F.error(r(`chat.persona.loadFailed`));return}let i=n.data,a=await K.updateSession(W.id,{personaId:e,model:t.model,providerType:`ollama`,providerId:null});if(a.success&&a.data){let{sessions:e}=b.getState(),t=e.map(e=>e.id===W.id?a.data:e);b.setState({sessions:t,currentSession:a.data}),i.background&&U(i.background),F.success(r(`chat.persona.applied`))}}else{let e=await K.updateSession(W.id,{model:t.model,providerType:t.providerType,providerId:(t.providerType===`plugin`||t.providerType===`agent`)&&t.providerId||null,personaId:null});if(e.success&&e.data){let{sessions:t}=b.getState(),n=t.map(t=>t.id===W.id?e.data:t);b.setState({sessions:n,currentSession:e.data}),U(null),F.success(r(`chat.model.updated`))}}}catch(e){pn.error(`Failed to update session:`,e),F.error(r(`chat.toasts.updateFailed`))}},ze=g.length>0||C!==null;return(0,Q.jsx)(`div`,{className:`pointer-events-none`,children:(0,Q.jsxs)(`div`,{className:`pointer-events-auto mx-auto w-full max-w-3xl px-4 sm:px-6 md:px-8`,children:[T&&(0,Q.jsxs)(`div`,{className:`mb-2 animate-slide-up rounded-2xl border border-black/[0.07] bg-surface/90 p-4 shadow-[0_12px_40px_rgba(15,23,42,0.08)] backdrop-blur-xl dark:border-white/[0.08] dark:bg-dark-200/90`,children:[(0,Q.jsx)(sn,{images:g,onImagesChange:x,maxImages:5,sessionId:W?.id,disabled:n}),(0,Q.jsx)(fn,{format:C,onFormatChange:w})]}),(0,Q.jsxs)(`div`,{className:`pb-2.5 pt-1.5 sm:pb-3`,children:[(0,Q.jsx)(`form`,{onSubmit:Fe,children:(0,Q.jsxs)(`div`,{className:f(`flex items-end gap-2 rounded-[1.35rem] border p-2 transition-[border-color,box-shadow,background-color] duration-200`,`bg-surface/[0.92] dark:bg-dark-200/[0.92] backdrop-blur-xl`,`border-black/[0.08] dark:border-white/[0.09]`,`shadow-[0_1px_2px_rgba(0,0,0,0.03),0_14px_42px_rgba(15,23,42,0.08)]`,`focus-within:border-primary-500/35 focus-within:shadow-[0_1px_2px_rgba(0,0,0,0.03),0_18px_52px_rgba(15,23,42,0.11)]`),children:[(0,Q.jsxs)(`div`,{ref:H,className:`relative flex-shrink-0`,children:[(0,Q.jsx)(X,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>{if(T){E(!1);return}k(e=>!e),I(null)},className:f(`h-9 w-9 sm:h-10 sm:w-10 !p-0 rounded-full flex-shrink-0`,`text-gray-500 dark:text-dark-600 hover:bg-gray-100 dark:hover:bg-dark-300`,`transition-colors duration-150 touch-manipulation`,ze&&`text-primary-600 dark:text-primary-400`,(T||O)&&`bg-gray-100 dark:bg-dark-300`),title:r(`chat.input.attachments`),children:se||ae?(0,Q.jsx)(V,{className:`h-4 w-4 animate-spin`}):ze?(0,Q.jsxs)(`div`,{className:`relative flex items-center justify-center`,children:[(0,Q.jsx)(ge,{className:`h-4 w-4`}),(0,Q.jsx)(`div`,{className:`absolute -top-0.5 -end-0.5 h-2 w-2 bg-primary-500 dark:bg-primary-400 rounded-full ring-2 ring-white dark:ring-dark-50`})]}):T?(0,Q.jsx)(be,{className:`h-4 w-4`}):(0,Q.jsx)(S,{className:`h-4 w-4`})}),O&&(0,Q.jsx)(`div`,{className:`absolute bottom-full start-0 z-30 mb-2 w-64 rounded-2xl border border-black/[0.08] bg-surface/95 p-1.5 shadow-[0_16px_48px_rgba(15,23,42,0.16)] backdrop-blur-xl animate-scale-in dark:border-white/[0.09] dark:bg-dark-100/95`,children:ne?(0,Q.jsxs)(`div`,{className:`p-1`,children:[(0,Q.jsx)(`p`,{className:`mb-1 px-1.5 text-[11px] font-medium text-gray-500 dark:text-dark-600`,children:r(`chat.input.menu.attachKnowledge`)}),ie.length===0?(0,Q.jsx)(`p`,{className:`px-1.5 pb-1 text-[12px] text-gray-400 dark:text-dark-500`,children:r(`chat.input.menu.noCollections`)}):ie.map(e=>{let t=Ae.includes(e.id);return(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>void je(e.id),className:f(`flex w-full items-center justify-between gap-2 rounded-xl px-2.5 py-2 text-start text-[13px] text-gray-700 hover:bg-gray-100 dark:text-dark-800 dark:hover:bg-dark-200`,t&&`text-primary-600 dark:text-primary-400`),"aria-pressed":t,children:[(0,Q.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,Q.jsx)(re,{className:`h-4 w-4 shrink-0`}),(0,Q.jsx)(`span`,{className:`truncate`,children:e.name})]}),t&&(0,Q.jsx)(ye,{className:`h-3.5 w-3.5 shrink-0`})]},e.id)}),(0,Q.jsx)(`button`,{type:`button`,onClick:()=>L(!1),className:`mt-1 w-full rounded-lg border-t border-gray-100 px-2.5 py-1.5 text-start text-xs text-gray-500 hover:bg-gray-100 dark:border-dark-300 dark:text-dark-600 dark:hover:bg-dark-200`,children:r(`common.back`)})]}):P===null?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>{E(!0),ke()},className:`flex w-full items-center gap-2.5 rounded-xl px-2.5 py-2 text-start text-[13px] text-gray-700 hover:bg-gray-100 dark:text-dark-800 dark:hover:bg-dark-200`,children:[(0,Q.jsx)(z,{className:`h-4 w-4 text-gray-500 dark:text-dark-600`}),r(`chat.input.menu.uploadImages`)]}),(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>pe.current?.click(),className:`flex w-full items-center gap-2.5 rounded-xl px-2.5 py-2 text-start text-[13px] text-gray-700 hover:bg-gray-100 dark:text-dark-800 dark:hover:bg-dark-200`,children:[(0,Q.jsx)(D,{className:`h-4 w-4 text-gray-500 dark:text-dark-600`}),r(`chat.input.menu.attachDocument`)]}),(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>I(``),className:`flex w-full items-center gap-2.5 rounded-xl px-2.5 py-2 text-start text-[13px] text-gray-700 hover:bg-gray-100 dark:text-dark-800 dark:hover:bg-dark-200`,children:[(0,Q.jsx)(N,{className:`h-4 w-4 text-gray-500 dark:text-dark-600`}),r(`chat.input.menu.attachWebpage`)]}),(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>L(!0),className:`flex w-full items-center justify-between gap-2.5 rounded-xl px-2.5 py-2 text-start text-[13px] text-gray-700 hover:bg-gray-100 dark:text-dark-800 dark:hover:bg-dark-200`,children:[(0,Q.jsxs)(`span`,{className:`flex items-center gap-2.5`,children:[(0,Q.jsx)(re,{className:`h-4 w-4 text-gray-500 dark:text-dark-600`}),r(`chat.input.menu.attachKnowledge`)]}),Ae.length>0&&(0,Q.jsx)(`span`,{className:`rounded-full bg-primary-50 px-1.5 text-[10px] font-medium tabular-nums text-primary-600 dark:bg-primary-900/20 dark:text-primary-400`,children:Ae.length})]}),(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>{E(!0),ke()},className:`flex w-full items-center gap-2.5 rounded-xl px-2.5 py-2 text-start text-[13px] text-gray-700 hover:bg-gray-100 dark:text-dark-800 dark:hover:bg-dark-200`,children:[(0,Q.jsx)(he,{className:`h-4 w-4 text-gray-500 dark:text-dark-600`}),r(`chat.input.menu.structuredOutput`)]})]}):(0,Q.jsxs)(`div`,{className:`p-1.5`,children:[(0,Q.jsx)(`label`,{className:`mb-1.5 block text-[11px] font-medium text-gray-500 dark:text-dark-600`,children:r(`chat.input.menu.attachWebpage`)}),(0,Q.jsx)(`input`,{type:`url`,value:P,onChange:e=>I(e.target.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),Pe()):e.key===`Escape`&&I(null)},placeholder:`https://…`,autoFocus:!0,dir:`ltr`,className:`w-full rounded-lg border border-black/[0.08] bg-white px-2.5 py-1.5 text-[13px] text-gray-900 placeholder:text-gray-400 focus:border-primary-500/40 focus:outline-none dark:border-white/[0.08] dark:bg-dark-50 dark:text-dark-900`}),(0,Q.jsxs)(`div`,{className:`mt-2 flex justify-end gap-1.5`,children:[(0,Q.jsx)(`button`,{type:`button`,onClick:()=>I(null),className:`rounded-lg px-2.5 py-1 text-xs text-gray-500 hover:bg-gray-100 dark:text-dark-600 dark:hover:bg-dark-200`,children:r(`common.cancel`)}),(0,Q.jsx)(`button`,{type:`button`,onClick:()=>void Pe(),disabled:!P.trim()||ae,className:`rounded-lg bg-gray-900 px-2.5 py-1 text-xs text-white hover:bg-gray-700 disabled:opacity-50 dark:bg-dark-300 dark:hover:bg-dark-400`,children:ae?(0,Q.jsx)(V,{className:`h-3.5 w-3.5 animate-spin`}):r(`chat.input.menu.attach`)})]})]})}),(0,Q.jsx)(`input`,{ref:pe,type:`file`,accept:`.pdf,.txt,application/pdf,text/plain`,className:`hidden`,onChange:e=>void J(e)})]}),(0,Q.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,Q.jsx)(an,{ref:Ce,value:a,onChange:e=>o(e.target.value),onKeyDown:Ie,placeholder:r(`chat.input.placeholder`),disabled:n,className:`!m-0 block min-h-9 max-h-[160px] resize-none !rounded-none !border-0 !bg-transparent !px-1.5 !py-1.5 sm:!min-h-10 sm:!py-2 max-[768px]:!min-h-11 max-[768px]:!py-[10.5px] !shadow-none scrollbar-thin scrollbar-thumb-gray-300 placeholder:text-gray-400 focus:!border-0 focus:!bg-transparent focus:!shadow-none focus:!ring-0 dark:scrollbar-thumb-dark-400 dark:placeholder:text-dark-500 text-[0.9375rem] leading-relaxed touch-manipulation`,rows:1})}),(0,Q.jsxs)(`div`,{className:`flex flex-shrink-0 items-center gap-1 sm:gap-2`,children:[W&&q.length>0&&(0,Q.jsx)(`div`,{className:`hidden sm:block`,children:(0,Q.jsx)(Ge,{models:q,selectedModel:Te,onModelChange:Re,getModelValue:v,currentPersona:le,className:`min-w-[150px] max-w-[230px]`,compact:!0,showImageGen:ve})}),ee&&(0,Q.jsx)(X,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>M(e=>!e),className:f(`h-9 w-9 sm:h-10 sm:w-10 p-0 rounded-full flex-shrink-0 flex items-center justify-center`,`text-gray-500 dark:text-dark-600 hover:bg-gray-100 dark:hover:bg-dark-300`,`transition-colors duration-150 touch-manipulation`,j&&`bg-primary-50 text-primary-600 dark:bg-primary-900/25 dark:text-primary-400`),title:r(j?`chat.input.webSearchOn`:`chat.input.webSearchOff`),"aria-pressed":j,children:(0,Q.jsx)(N,{className:`h-4 w-4`})}),p&&(0,Q.jsx)(X,{type:`button`,variant:`ghost`,size:`sm`,onClick:Ne,className:f(`h-9 w-9 sm:h-10 sm:w-10 p-0 rounded-full flex-shrink-0 flex items-center justify-center`,`text-gray-500 dark:text-dark-600 hover:bg-gray-100 dark:hover:bg-dark-300`,`transition-colors duration-150 touch-manipulation`,c&&`bg-red-50 text-red-500 animate-pulse dark:bg-red-900/20 dark:text-red-400`),title:r(c?`chat.input.voiceStop`:`chat.input.voiceInput`),"aria-pressed":c,children:(0,Q.jsx)(fe,{className:`h-4 w-4`})}),me?(0,Q.jsx)(X,{type:`button`,variant:`ghost`,size:`sm`,onClick:Le,className:f(`h-9 w-9 sm:h-10 sm:w-10 p-0 rounded-full flex-shrink-0 flex items-center justify-center`,`bg-red-50 dark:bg-red-900/20`,`text-red-500 dark:text-red-400`,`hover:bg-red-100 dark:hover:bg-red-900/30`,`transition-colors duration-150 touch-manipulation`),title:r(`chat.input.stopGeneration`),children:(0,Q.jsx)(Se,{className:`h-4 w-4`})}):(0,Q.jsx)(X,{type:`submit`,variant:`ghost`,size:`sm`,disabled:!a.trim()||n||!De,className:f(`h-9 w-9 sm:h-10 sm:w-10 p-0 rounded-full flex-shrink-0 flex items-center justify-center`,`bg-gray-100 text-gray-400 dark:bg-dark-300 dark:text-dark-500`,`disabled:cursor-not-allowed disabled:opacity-70`,`transition-colors duration-150 touch-manipulation`,a.trim()&&!n&&De&&[`bg-gray-950 text-white hover:bg-gray-800`,`dark:bg-white dark:text-gray-950 dark:hover:bg-gray-100`,`shadow-sm`]),title:r(`chat.input.sendMessage`),children:(0,Q.jsx)(te,{className:`h-4 w-4`})})]})]})}),W&&q.length>0&&(0,Q.jsx)(`div`,{className:`mt-3 sm:hidden`,children:(0,Q.jsx)(Ge,{models:q,selectedModel:Te,onModelChange:Re,getModelValue:v,currentPersona:le,className:`w-full`,compact:!0,showImageGen:ve})}),(0,Q.jsxs)(`div`,{className:`mt-1.5 flex min-h-4 items-center justify-center gap-2 text-[10px] text-gray-400 dark:text-dark-500`,children:[(0,Q.jsx)(ln,{sessionId:W?.id}),(0,Q.jsxs)(`div`,{className:`text-center leading-relaxed`,children:[(0,Q.jsx)(`span`,{children:r(`chat.footer.disclaimer`)}),ze&&(0,Q.jsxs)(`span`,{className:`ms-2 text-primary-600 dark:text-primary-400`,children:[`•`,` `,g.length>0&&r(`chat.footer.images`,{count:g.length}),g.length>0&&C&&` • `,C&&r(`chat.footer.structuredOutput`)]})]})]})]})]})})},gn=G(`components:chat-controls-panel`),_n=[{key:`temperature`,labelKey:`temperature`,step:`0.1`,min:0,max:2},{key:`top_p`,labelKey:`topP`,step:`0.05`,min:0,max:1},{key:`top_k`,labelKey:`topK`,step:`1`,min:1},{key:`min_p`,labelKey:`minP`,step:`0.05`,min:0,max:1},{key:`num_predict`,labelKey:`maxTokens`,step:`1`},{key:`repeat_penalty`,labelKey:`repeatPenalty`,step:`0.05`,min:0},{key:`seed`,labelKey:`seed`,step:`1`},{key:`num_ctx`,labelKey:`contextLength`,step:`1`}],vn=({session:e,draftModel:t,open:n,onClose:r})=>{let{t:i}=s(),a=b(e=>e.draftSessionSettings),o=b(e=>e.setDraftSessionSettings),l=e?.model??t??``,u=Y(e=>e.preferences.generationOptions),d=Y(e=>e.preferences.modelGenerationOptions?.[l]),[f,p]=(0,Z.useState)({options:{},contextCapped:!1});(0,Z.useEffect)(()=>{if(!n||!l)return;let e=!1;return Ae.getModelDefaults(l).then(t=>{e||!t.success||!t.data||p({options:t.data.options??{},trainedContextLength:t.data.trainedContextLength,contextCapped:!!t.data.contextCapped})}).catch(()=>{}),()=>{e=!0}},[n,l]);let m=(0,Z.useMemo)(()=>({...u??{},...f.options,...d??{}}),[u,f.options,d]),h=(0,Z.useMemo)(()=>e?.messages.find(e=>e.role===`system`),[e?.messages]),[g,_]=(0,Z.useState)(h?.content??a.systemPrompt??``),[v,y]=(0,Z.useState)(e?.settings?.generationOptions??a.generationOptions??{}),[x,S]=(0,Z.useState)(!1),[C,T]=(0,Z.useState)(e?.id??`draft`),E=e?.id??`draft`;C!==E&&(T(E),_(h?.content??a.systemPrompt??``),y(e?.settings?.generationOptions??a.generationOptions??{}));let D=(e,t)=>{y(n=>{let r={...n};if(t===``)delete r[e];else{let n=Number(t);Number.isNaN(n)||(r[e]=n)}return r})},O=async()=>{S(!0);try{let t=g.trim(),n=h?.content??``,a=Object.fromEntries(Object.entries(v).filter(([,e])=>e!==void 0)),s=Object.keys(a).length>0?{generationOptions:a}:void 0;if(!e){o({systemPrompt:t||void 0,generationOptions:s?.generationOptions}),w.success(i(`chat.controls.saved`)),r();return}let l=e.messages;if(t!==n.trim()&&(h?l=t?e.messages.map(e=>e.id===h.id?{...e,content:t}:e):e.messages.filter(e=>e.id!==h.id):t&&(l=[{id:c(),role:`system`,content:t,timestamp:Date.now()},...e.messages])),e.isPrivate)b.setState(t=>({currentSession:t.currentSession?.id===e.id?{...t.currentSession,messages:l,settings:s}:t.currentSession}));else{let t=await K.updateSession(e.id,{messages:l,settings:s});if(!t.success||!t.data)throw Error(t.error||`Update failed`);let n=t.data;b.setState(t=>({sessions:t.sessions.map(t=>t.id===e.id?n:t),currentSession:t.currentSession?.id===e.id?n:t.currentSession}))}w.success(i(`chat.controls.saved`)),r()}catch(e){gn.error(`Failed to save chat controls:`,e),w.error(i(`chat.controls.saveFailed`))}finally{S(!1)}};return n?(0,Q.jsxs)(`div`,{"data-testid":`chat-controls-panel`,className:`flex h-full w-[21rem] shrink-0 flex-col border-s border-black/[0.06] bg-surface/70 backdrop-blur-xl dark:border-white/[0.07] dark:bg-dark-100/70`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between px-4 pb-2 pt-4`,children:[(0,Q.jsx)(`h2`,{className:`text-sm font-semibold text-gray-900 dark:text-dark-900`,children:i(`chat.controls.title`)}),(0,Q.jsx)(`button`,{onClick:r,className:`rounded-full p-1.5 text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-900 dark:text-dark-600 dark:hover:bg-dark-200 dark:hover:text-dark-900`,title:i(`common.close`),children:(0,Q.jsx)(H,{className:`h-4 w-4`})})]}),(0,Q.jsxs)(`div`,{className:`scroll-region min-h-0 flex-1 space-y-5 overflow-y-auto px-4 py-2 scrollbar-thin`,children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`label`,{className:`mb-1.5 block text-[11px] font-semibold uppercase tracking-[0.08em] text-gray-500 dark:text-dark-500`,children:i(`chat.controls.systemPrompt`)}),(0,Q.jsx)(`textarea`,{dir:`auto`,value:g,onChange:e=>_(e.target.value),placeholder:i(`chat.controls.systemPromptPlaceholder`),className:`min-h-[110px] w-full resize-y rounded-xl border border-black/[0.08] bg-white p-2.5 text-[13px] leading-relaxed text-gray-900 placeholder:text-gray-400 focus:border-primary-500/40 focus:outline-none dark:border-white/[0.08] dark:bg-dark-50 dark:text-dark-900 dark:placeholder:text-dark-500`})]}),(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`p`,{className:`mb-1.5 text-[11px] font-semibold uppercase tracking-[0.08em] text-gray-500 dark:text-dark-500`,children:i(`chat.controls.advancedParams`)}),(0,Q.jsx)(`p`,{className:`mb-2.5 text-[11px] leading-snug text-gray-400 dark:text-dark-500`,children:i(`chat.controls.advancedParamsDescription`)}),f.contextCapped&&f.trainedContextLength&&(0,Q.jsx)(`p`,{className:`mb-2.5 text-[11px] leading-snug text-gray-500 dark:text-dark-600`,children:i(`chat.controls.contextCapped`,{context:m.num_ctx?.toLocaleString(),trained:f.trainedContextLength.toLocaleString()})}),(0,Q.jsx)(`div`,{className:`space-y-1.5`,children:_n.map(e=>{let t=v[e.key],n=m[e.key],r=f.options[e.key]!==void 0&&d?.[e.key]===void 0;return(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Q.jsxs)(`label`,{htmlFor:`chat-control-${e.key}`,className:`text-[13px] text-gray-700 dark:text-dark-700`,children:[i(`chat.controls.params.${e.labelKey}`),r&&(0,Q.jsx)(`span`,{title:i(`chat.controls.fromModelHint`),className:`ms-1.5 text-[10px] uppercase tracking-wide text-gray-400 dark:text-dark-500`,children:i(`chat.controls.fromModel`)})]}),(0,Q.jsx)(`input`,{id:`chat-control-${e.key}`,type:`number`,inputMode:`decimal`,step:e.step,min:e.min,max:e.max,value:typeof t==`number`?t:``,placeholder:typeof n==`number`?String(n):i(`common.default`),onChange:t=>D(e.key,t.target.value),className:`w-24 rounded-lg border border-black/[0.08] bg-white px-2 py-1 text-end text-[12px] tabular-nums text-gray-900 placeholder:text-gray-400 focus:border-primary-500/40 focus:outline-none dark:border-white/[0.08] dark:bg-dark-50 dark:text-dark-900 dark:placeholder:text-dark-500`})]},e.key)})})]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-t border-black/[0.06] px-4 py-3 dark:border-white/[0.07] lg:pb-16`,children:[(0,Q.jsx)(`button`,{onClick:()=>{y({}),_(h?.content??``)},className:`text-xs text-gray-500 transition-colors hover:text-gray-900 dark:text-dark-600 dark:hover:text-dark-900`,children:i(`common.reset`)}),(0,Q.jsx)(X,{onClick:()=>void O(),size:`sm`,disabled:x,children:i(x?`common.saving`:`common.save`)})]})]}):null},yn=6,bn=[],xn=e=>{try{return new URL(e).hostname.replace(/^www\./,``)}catch{return e}},Sn=({session:e})=>{let{t}=s(),[n,r]=(0,Z.useState)({sessionId:``,docs:bn}),i=!e.isPrivate&&n.sessionId===e.id?n.docs:bn,[a,o]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)(!1),[u,d]=(0,Z.useState)(!1),{webSources:f,ragSources:p}=(0,Z.useMemo)(()=>{let t=new Map,n=new Map;for(let r of e.messages){let e=r.providerMetadata;if(Array.isArray(e?.webSearchSources))for(let n of e.webSearchSources){let e=n;e&&typeof e.url==`string`&&e.url&&t.set(e.url,{url:e.url,title:typeof e.title==`string`&&e.title?e.title:e.url})}if(Array.isArray(e?.ragSources))for(let t of e.ragSources){let e=t;e&&typeof e.id==`string`&&e.id&&n.set(e.id,{id:e.id,filename:typeof e.filename==`string`&&e.filename?e.filename:e.id})}}return{webSources:Array.from(t.values()),ragSources:Array.from(n.values())}},[e.messages]);(0,Z.useEffect)(()=>{if(e.isPrivate)return;let t=!1,n=()=>{we.getDocuments(e.id).then(n=>{t||!n.success||!Array.isArray(n.data)||r({sessionId:e.id,docs:n.data.map(e=>({id:e.id,filename:e.filename}))})}).catch(()=>{})};return n(),window.addEventListener(`libre:documents-updated`,n),()=>{t=!0,window.removeEventListener(`libre:documents-updated`,n)}},[e.id,e.isPrivate]);let m=(0,Z.useMemo)(()=>{let e=new Map;for(let t of i)e.set(t.id,{...t,used:!1});for(let t of p)e.set(t.id,{id:t.id,filename:t.filename,used:!0});return Array.from(e.values())},[i,p]);if(f.length===0&&m.length===0)return null;let h=a?f:f.slice(0,yn),g=c?m:m.slice(0,yn),_=(e,n,r)=>(e>0||n)&&(0,Q.jsx)(`button`,{type:`button`,onClick:r,className:`mt-1 flex items-center gap-1 px-1 text-[12px] text-gray-400 transition-colors hover:text-gray-700 dark:text-dark-500 dark:hover:text-dark-800`,children:n?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(_e,{className:`h-3 w-3`}),t(`chatMessage.showLess`,`Show less`)]}):`${t(`chatMessage.showMore`)} (${e})`}),v=(0,Q.jsxs)(Q.Fragment,{children:[f.length>0&&(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(`h3`,{className:`mb-2 text-[13px] font-medium text-gray-500 dark:text-dark-500`,children:t(`chat.message.sources`,`Sources`)}),(0,Q.jsx)(`ul`,{className:`space-y-0.5`,children:h.map(e=>(0,Q.jsx)(`li`,{children:(0,Q.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,className:`group -mx-1 flex items-center gap-2.5 rounded-lg px-1 py-1.5 transition-colors hover:bg-black/[0.04] dark:hover:bg-white/[0.05]`,title:e.url,children:[(0,Q.jsx)(N,{className:`h-4 w-4 shrink-0 text-gray-400 transition-colors group-hover:text-gray-700 dark:text-dark-500 dark:group-hover:text-dark-800`}),(0,Q.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Q.jsx)(`span`,{className:`block truncate text-[13px] leading-snug text-gray-800 dark:text-dark-800`,children:e.title}),(0,Q.jsx)(`span`,{dir:`ltr`,className:`block truncate text-[11px] text-gray-400 dark:text-dark-500`,children:xn(e.url)})]})]})},e.url))}),_(f.length-h.length,a,()=>o(e=>!e))]}),m.length>0&&(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(`h3`,{className:`mb-2 text-[13px] font-medium text-gray-500 dark:text-dark-500`,children:t(`settings.tabs.documents`,`Documents`)}),(0,Q.jsx)(`ul`,{className:`space-y-0.5`,children:g.map(e=>(0,Q.jsxs)(`li`,{className:`-mx-1 flex items-center gap-2.5 rounded-lg px-1 py-1.5`,title:e.filename,children:[(0,Q.jsx)(D,{className:`h-4 w-4 shrink-0 text-gray-400 dark:text-dark-500`}),(0,Q.jsx)(`span`,{dir:`ltr`,className:`min-w-0 flex-1 truncate text-[13px] leading-snug text-gray-800 dark:text-dark-800`,children:e.filename}),e.used&&(0,Q.jsx)(`span`,{"aria-hidden":`true`,className:`h-1.5 w-1.5 shrink-0 rounded-full bg-primary-500`})]},e.id))}),_(m.length-g.length,c,()=>l(e=>!e))]})]});return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`aside`,{"data-testid":`chat-sources-panel`,className:`hidden w-72 shrink-0 flex-col gap-7 overflow-y-auto border-s border-black/[0.05] px-5 py-6 scrollbar-thin dark:border-white/[0.06] xl:flex`,children:v}),(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>d(!0),"data-testid":`chat-sources-trigger`,className:`absolute end-3 top-[4.25rem] z-20 flex h-8 w-8 items-center justify-center rounded-full border border-black/[0.07] bg-surface/65 text-gray-500 backdrop-blur-md transition-colors duration-150 hover:bg-surface-raised hover:text-gray-950 dark:border-white/[0.08] dark:bg-dark-200/65 dark:text-dark-600 dark:hover:bg-dark-200 dark:hover:text-dark-950 xl:hidden`,title:t(`chat.message.sources`,`Sources`),"aria-haspopup":`dialog`,"aria-expanded":u,children:[(0,Q.jsx)(re,{className:`h-3.5 w-3.5`}),(0,Q.jsx)(`span`,{className:`absolute -end-0.5 -top-0.5 flex h-4 min-w-4 items-center justify-center rounded-md bg-primary-500 px-1 text-[9px] font-semibold tabular-nums text-white shadow-sm`,children:f.length+m.length})]}),u&&(0,Ke.createPortal)((0,Q.jsxs)(`div`,{className:`fixed inset-0 z-[80] xl:hidden`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`absolute inset-0 bg-black/35 backdrop-blur-[2px]`,onClick:()=>d(!1),"aria-label":t(`common.close`)}),(0,Q.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":t(`chat.message.sources`,`Sources`),className:`absolute inset-x-3 bottom-3 max-h-[75vh] overflow-y-auto rounded-2xl border border-black/[0.08] bg-surface p-5 shadow-[0_20px_70px_rgba(0,0,0,0.3)] scrollbar-thin dark:border-white/[0.09] dark:bg-dark-100`,"data-testid":`chat-sources-sheet`,children:[(0,Q.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,Q.jsx)(`p`,{className:`text-sm font-semibold text-gray-900 dark:text-dark-900`,children:t(`chat.message.sources`,`Sources`)}),(0,Q.jsx)(`button`,{type:`button`,onClick:()=>d(!1),className:`rounded-md p-1.5 text-gray-400 hover:text-gray-700 dark:text-dark-500 dark:hover:text-dark-800`,"aria-label":t(`common.close`),children:(0,Q.jsx)(H,{className:`h-4 w-4`})})]}),(0,Q.jsx)(`div`,{className:`flex flex-col gap-6`,children:v})]})]}),document.body)]})},Cn=({persona:e,onClear:t,className:n})=>{let[r,i]=(0,Z.useState)(!1),a=(0,Z.useRef)(null),[o,s]=(0,Z.useState)({top:0,left:0});(0,Z.useEffect)(()=>{if(r&&a.current){let e=a.current.getBoundingClientRect(),t=document.documentElement.dir===`rtl`?e.right-288:e.left;s({top:e.bottom+8,left:Math.min(window.innerWidth-288-8,Math.max(8,t))})}},[r]);let c=!!(e.memory_settings?.enabled||e.mutation_settings?.enabled),l=()=>je(e,64),u=t=>{Te(t.currentTarget,e.name,64)};return(0,Q.jsxs)(`div`,{className:f(`relative`,n),children:[(0,Q.jsxs)(`button`,{ref:a,onClick:()=>i(!r),className:f(`flex items-center gap-2 px-3 py-1.5 rounded-full transition-all duration-200`,`bg-primary-50 dark:bg-primary-900/30`,`border border-primary-200 dark:border-primary-700/50`,`hover:bg-primary-100 dark:hover:bg-primary-900/40`,`text-primary-700 dark:text-primary-300`),children:[(0,Q.jsx)(`img`,{src:l(),alt:e.name,className:`w-5 h-5 rounded-full object-cover`,onError:u}),(0,Q.jsx)(`span`,{className:`text-sm font-medium max-w-[120px] truncate`,children:e.name}),c&&(0,Q.jsx)(P,{className:`h-3 w-3 text-purple-500 dark:text-purple-400`}),(0,Q.jsx)(me,{className:f(`h-3.5 w-3.5 transition-transform duration-200`,r&&`rotate-180`)})]}),r&&(0,Ke.createPortal)((0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`fixed inset-0 z-[9998]`,onClick:()=>i(!1)}),(0,Q.jsx)(`div`,{className:`fixed w-72 z-[9999]`,style:{top:o.top,left:o.left},children:(0,Q.jsxs)(`div`,{className:f(`rounded-xl overflow-hidden shadow-xl`,`bg-white dark:bg-dark-100`,`border border-gray-200 dark:border-dark-300`),children:[(0,Q.jsxs)(`div`,{className:`relative h-16`,children:[e.background?(0,Q.jsx)(`div`,{className:`absolute inset-0 bg-cover bg-center`,style:{backgroundImage:`url(${e.background})`}}):(0,Q.jsx)(`div`,{className:`absolute inset-0 bg-gradient-to-br from-primary-400 via-primary-500 to-purple-600 dark:from-primary-600 dark:via-primary-700 dark:to-purple-800`}),(0,Q.jsx)(`div`,{className:`absolute inset-0 bg-black/10`}),t&&(0,Q.jsx)(`button`,{onClick:e=>{e.stopPropagation(),t(),i(!1)},className:`absolute top-2 end-2 p-1 rounded-full bg-white/20 hover:bg-white/30 backdrop-blur-sm transition-colors`,title:`Remove persona`,children:(0,Q.jsx)(H,{className:`h-3.5 w-3.5 text-white`})}),c&&(0,Q.jsxs)(`div`,{className:`absolute top-2 start-2 flex items-center gap-1 px-2 py-0.5 rounded-full bg-white/20 backdrop-blur-sm text-white text-[10px] font-medium`,children:[(0,Q.jsx)(se,{className:`h-3 w-3`}),`Enhanced`]})]}),(0,Q.jsx)(`div`,{className:`relative px-4 -mt-6`,children:(0,Q.jsx)(`img`,{src:l(),alt:e.name,className:`w-12 h-12 rounded-lg object-cover ring-3 ring-white dark:ring-dark-100 shadow-md`,onError:u})}),(0,Q.jsxs)(`div`,{className:`px-4 pt-2 pb-4`,children:[(0,Q.jsx)(`h4`,{className:`text-base font-semibold text-gray-900 dark:text-gray-100`,children:e.name}),(0,Q.jsxs)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 flex items-center gap-1 mt-0.5`,children:[(0,Q.jsx)(ue,{className:`h-3 w-3`}),e.model]}),e.description&&(0,Q.jsx)(`p`,{className:`text-xs text-gray-600 dark:text-gray-400 mt-2 line-clamp-2`,children:e.description}),e.parameters.system_prompt&&(0,Q.jsxs)(`div`,{className:`mt-3 p-2 rounded-lg bg-gray-50 dark:bg-dark-50 border border-gray-100 dark:border-dark-200`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-1 mb-1`,children:[(0,Q.jsx)(ve,{className:`h-2.5 w-2.5 text-gray-400`}),(0,Q.jsx)(`span`,{className:`text-[9px] uppercase tracking-wider font-medium text-gray-400`,children:`System`})]}),(0,Q.jsxs)(`p`,{className:`text-[11px] text-gray-600 dark:text-gray-400 line-clamp-2 italic`,children:[`“`,e.parameters.system_prompt,`”`]})]}),(0,Q.jsxs)(`div`,{className:`flex flex-wrap gap-1 mt-3`,children:[(0,Q.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-medium bg-gray-100 dark:bg-dark-200 text-gray-600 dark:text-gray-400`,children:[(0,Q.jsx)(W,{className:`h-2.5 w-2.5`}),e.parameters.temperature?.toFixed(1)||`0.7`]}),(0,Q.jsxs)(`span`,{className:`inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-gray-100 dark:bg-dark-200 text-gray-600 dark:text-gray-400`,children:[`Top-P `,e.parameters.top_p?.toFixed(1)||`0.9`]}),e.memory_settings?.enabled&&(0,Q.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-medium bg-purple-100 dark:bg-purple-900/30 text-purple-700 dark:text-purple-300`,children:[(0,Q.jsx)(se,{className:`h-2.5 w-2.5`}),`Memory`]})]})]})]})})]}),document.body)]})},wn=({images:e,onImagesChange:t,maxImages:n=5,className:r})=>{let{t:i}=s(),a=(0,Z.useRef)(null),[o,c]=(0,Z.useState)(!1),l=r=>{if(!r)return;let i=[],a=n-e.length;for(let n=0;n<Math.min(r.length,a);n++){let o=r[n];if(!o.type.startsWith(`image/`)){w.error(`File ${o.name} is not an image`);continue}if(o.size>10485760){w.error(`Image ${o.name} is too large (max 10MB)`);continue}let s=new FileReader;s.onload=n=>{n.target?.result&&(i.push(n.target.result),i.length===Math.min(r.length,a)&&t([...e,...i]))},s.readAsDataURL(o)}r.length>a&&w.error(`Only ${a} more images can be added`)},u=e=>{e.preventDefault(),c(!0)},d=e=>{e.preventDefault(),c(!1)},p=e=>{e.preventDefault(),c(!1),l(e.dataTransfer.files)},m=n=>{t(e.filter((e,t)=>t!==n))},h=e.length<n;return(0,Q.jsxs)(`div`,{className:f(`space-y-3`,r),children:[h&&(0,Q.jsxs)(`div`,{className:f(`border-2 border-dashed border-gray-300 dark:border-gray-600 rounded-lg p-4 transition-colors`,`hover:border-primary-400 dark:hover:border-primary-500`,o&&`border-primary-500 bg-primary-50 dark:bg-primary-900/20`),onDragOver:u,onDragLeave:d,onDrop:p,children:[(0,Q.jsx)(`input`,{ref:a,type:`file`,multiple:!0,accept:`image/*`,onChange:e=>l(e.target.files),className:`hidden`}),(0,Q.jsxs)(`div`,{className:`flex flex-col items-center text-center`,children:[(0,Q.jsx)(oe,{className:`h-8 w-8 text-gray-400 dark:text-gray-500 mb-2`}),(0,Q.jsxs)(`p`,{className:`text-sm text-gray-700 dark:text-gray-300 mb-2`,children:[i(`chat.mediaUpload.dropImagesHere`),` `,(0,Q.jsx)(`button`,{onClick:()=>a.current?.click(),className:`text-primary-600 dark:text-primary-400 hover:underline font-medium`,children:i(`chat.mediaUpload.browse`)})]}),(0,Q.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400`,children:i(`chat.mediaUpload.supportedFormats`)})]})]}),e.length>0&&(0,Q.jsx)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-3`,children:e.map((e,t)=>(0,Q.jsxs)(`div`,{className:`relative group aspect-square rounded-lg overflow-hidden bg-gray-100 dark:bg-gray-800 border border-gray-200 dark:border-gray-700`,children:[(0,Q.jsx)(`img`,{src:e,alt:`Upload ${t+1}`,className:`w-full h-full object-cover`}),(0,Q.jsx)(`div`,{className:`absolute inset-0 bg-black bg-opacity-0 group-hover:bg-opacity-50 transition-all duration-200 flex items-center justify-center`,children:(0,Q.jsx)(X,{variant:`ghost`,size:`sm`,onClick:()=>m(t),className:`opacity-0 group-hover:opacity-100 transition-opacity bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 hover:bg-red-100 dark:hover:bg-red-900/20 hover:text-red-600 dark:hover:text-red-400 p-1 rounded-full`,children:(0,Q.jsx)(H,{className:`h-4 w-4`})})})]},t))}),h&&e.length>0&&(0,Q.jsxs)(X,{variant:`outline`,size:`sm`,onClick:()=>a.current?.click(),className:`w-full sm:w-auto`,children:[(0,Q.jsx)(z,{className:`h-4 w-4 mr-2`}),`Add More Images (`,e.length,`/`,n,`)`]})]})},Tn=G(`use-chat`),En=new Set([`New Chat`,`New Demo Session`]),Dn=e=>!e||En.has(e),On=e=>{let[t,n]=(0,Z.useState)(``),[r,i]=(0,Z.useState)(``),[a,o]=(0,Z.useState)(null),[s,l]=(0,Z.useState)(!1),[u,d]=(0,Z.useState)([]),{addMessage:f,updateMessage:p,updateMessageWithStatistics:m,applySessionTitle:g,setGeneratingTitleForSession:_}=b(),{setIsGenerating:v}=Y(),y=(0,Z.useRef)(null),x=(0,Z.useRef)(null),S=(0,Z.useRef)(!1),C=(0,Z.useRef)(null),T=(0,Z.useRef)(``),E=(0,Z.useRef)(``),D=(0,Z.useRef)(0),O=(0,Z.useRef)(void 0),k=(0,Z.useRef)(null),ee=(0,Z.useRef)(``),te=(0,Z.useRef)(``),A=(0,Z.useCallback)(()=>{k.current!==null&&typeof window<`u`&&window.cancelAnimationFrame(k.current),k.current=null},[]),j=(0,Z.useCallback)((e,t=!1,r=``)=>{if(ee.current=e,te.current=r,t||typeof window>`u`){A(),n(e),i(r);return}k.current===null&&(k.current=window.requestAnimationFrame(()=>{k.current=null,n(ee.current),i(te.current)}))},[A]),M=(0,Z.useCallback)(()=>{A(),ee.current=``,te.current=``,n(``),i(``)},[A]),N=(0,Z.useCallback)(()=>{x.current=null,S.current=!1,C.current=null},[]),P=(0,Z.useCallback)(async e=>{let t=Y.getState().preferences.titleSettings,n=x.current,r=S.current&&C.current===e;if(Tn.debug(`Auto-title check:`,{firstMessage:n,autoTitle:t?.autoTitle,taskModel:t?.taskModel,shouldGenerateTitle:r}),!n||!r||!t?.autoTitle||!t?.taskModel){N();return}N(),Tn.debug(`Triggering auto-title generation...`),_(e);try{let r=await K.generateTitle(e,t.taskModel,n,t.taskProviderType,t.taskProviderId);if(Tn.debug(`Title generation response:`,r),!r.success||!r.data?.title)throw Error(r.error||`Title generation returned no title`);g(e,r.data.title,r.data.updatedAt),r.data.source===`fallback`?w.error(`Could not generate a title; using the message preview`):w.success(`Chat title generated`)}catch(e){Tn.error(`Failed to generate title:`,e),w.error(`Failed to generate chat title`)}finally{_(null)}},[g,N,_]);(0,Z.useEffect)(()=>()=>{J.offMessage(`user_message`),J.offMessage(`assistant_chunk`),J.offMessage(`assistant_complete`),J.offMessage(`tool_status`),J.offMessage(`error`)},[e]),(0,Z.useEffect)(()=>{if(!e){J.offMessage(`user_message`),J.offMessage(`assistant_chunk`),J.offMessage(`assistant_complete`),J.offMessage(`tool_status`),J.offMessage(`error`);return}return J.onMessage(`user_message`,()=>{}),J.onMessage(`assistant_chunk`,t=>{let n=t,r=n.messageId||y.current;r&&(T.current=n.total,typeof n.thinkingTotal==`string`&&(E.current=n.thinkingTotal),nt(r,n.total,E.current),j(n.total,n.done,E.current),O.current&&clearTimeout(O.current),O.current=setTimeout(()=>{p(e,r,T.current),D.current=Date.now()},n.done?0:200))}),J.onMessage(`tool_status`,e=>{let t=e;d(e=>e.find(e=>e.toolCallId===t.toolCallId)?e.map(e=>e.toolCallId===t.toolCallId?{...e,phase:t.phase}:e):[...e,{toolCallId:t.toolCallId,name:t.name,phase:t.phase,startedAt:Date.now()}])}),J.onMessage(`assistant_complete`,t=>{let n=t;Tn.debug(`Hook: Received assistant_complete for session:`,e,`messageId:`,n.messageId,`with statistics:`,!!n.statistics),l(!1),M(),v(!1),d([]);let r=n.messageId||y.current;if(n&&r){let t=T.current||n.content,i=E.current||n.thinking,a=it(r),o=n.statistics?.thinking_duration_ms===void 0&&a!==void 0?{...n.statistics,thinking_duration_ms:a}:n.statistics;m(e,r,t,o,n.providerMetadata,i)}P(e),y.current=null,T.current=``,E.current=``,O.current&&clearTimeout(O.current),D.current=0}),J.onMessage(`error`,e=>{let t=e;if(l(!1),M(),v(!1),y.current=null,E.current=``,t.code===`SESSION_NOT_FOUND`){Tn.warn(`Session not found, redirecting to create new session...`),w.error(`Session not found. Creating a new session...`),window.location.href=`/`;return}w.error(t.error),N()}),l(!1),M(),y.current=null,E.current=``,()=>{O.current&&clearTimeout(O.current),A()}},[e,p,m,v,j,M,A,P,N]);let F=(0,Z.useCallback)(async(t,n,r,i)=>{if(!(!e||!t.trim()&&(!n||n.length===0)))try{let a=b.getState(),s=a.currentSession,u={model:s?.personaId?`persona:${s.personaId}`:s?.model||``,providerType:s?.providerType,providerId:s?.providerId};if(!h(a.models,u)){w.error(`Select an available model before sending`);return}v(!0),l(!0),M(),O.current&&clearTimeout(O.current),D.current=Date.now();let d=s?.isPrivate===!0,m=s?.messages?.some(e=>e.role===`user`);!d&&!m&&Dn(s?.title)?(x.current=t.trim(),S.current=!0,C.current=e):(x.current=null,S.current=!1,C.current=null),f(e,{role:`user`,content:t.trim(),images:n});let g=c();if(y.current=g,E.current=``,o(g),f(e,{role:`assistant`,content:``,id:g}),Ce()){let n=`Demo response for: ${t.trim()}`;window.setTimeout(()=>{p(e,g,n),l(!1),M(),o(null),v(!1),P(e),y.current=null,T.current=``,E.current=``},500);return}J.isConnected||await J.connect();let _=d?s?.messages?.filter(e=>e.role!==`system`&&e.id!==g).map(e=>({role:e.role,content:e.content,thinking:e.thinking,images:e.images,providerMetadata:e.providerMetadata})):void 0;J.send({type:`chat_stream`,data:{sessionId:e,content:t.trim(),images:n,format:r,options:s?.settings?.generationOptions??{},assistantMessageId:g,isPrivate:d,...i===!0?{webSearch:!0}:{},...d?{model:s?.model,providerType:s?.providerType,providerId:s?.providerId,messageHistory:_}:{}}})}catch(e){Tn.error(`Failed to send message:`,e),l(!1),M(),o(null),v(!1),y.current=null,E.current=``,w.error(`Failed to send message`)}},[e,f,p,v,M,P]),I=(0,Z.useCallback)(()=>{l(!1),M(),o(null),v(!1),y.current=null,E.current=``},[v,M]),ne=(0,Z.useCallback)(async()=>{let t=b.getState(),n=t.currentSession;if(!n||!e)return;if(!h(t.models,{model:n.personaId?`persona:${n.personaId}`:n.model,providerType:n.providerType,providerId:n.providerId})){w.error(`Select an available model before regenerating`);return}let r=n.messages,i=-1,a=-1;for(let e=r.length-1;e>=0;e--)if(r[e].role===`assistant`){a=e;break}if(a>0){for(let e=a-1;e>=0;e--)if(r[e].role===`user`){i=e;break}}if(i===-1||a===-1){w.error(`No message to regenerate`);return}let s=r[i],u=r[a];try{v(!0),l(!0),M(),O.current&&clearTimeout(O.current),D.current=Date.now();let t=c();y.current=t,E.current=``,o(t),f(e,{role:`assistant`,content:``,id:t,parentId:u.parentId||u.id,branchIndex:u.siblingCount||1,isActive:!0}),J.isConnected||await J.connect();let i=n.isPrivate===!0,a=i?r.filter(e=>e.role!==`system`).map(e=>({role:e.role,content:e.content,thinking:e.thinking,images:e.images,providerMetadata:e.providerMetadata})):void 0;J.send({type:`chat_stream`,data:{sessionId:e,content:s.content,images:s.images,options:n.settings?.generationOptions??{},assistantMessageId:t,regenerate:!0,originalMessageId:u.id,isPrivate:i,...i?{model:n.model,providerType:n.providerType,providerId:n.providerId,messageHistory:a}:{}}})}catch(e){Tn.error(`Failed to regenerate message:`,e),l(!1),M(),o(null),v(!1),y.current=null,E.current=``,w.error(`Failed to regenerate message`)}},[e,v,M,f]),L=(0,Z.useCallback)(async t=>{let n=b.getState().currentSession;if(!n||!e)return;let r=n.messages.find(e=>e.id===t);if(!r){w.error(`Message not found`);return}if(r.isActive!==!1)return;let i=r.parentId||r.id,a=r.branchIndex||0;try{let r=await K.switchMessageBranch(e,t,a);if(r.success&&r.data){let r=n.messages.map(e=>e.id===i||e.parentId===i?{...e,isActive:e.id===t}:e),o={...n,messages:r,updatedAt:Date.now()};b.setState(t=>({sessions:t.sessions.map(t=>t.id===e?o:t),currentSession:o})),w.success(`Switched to variant ${a+1}`)}else w.error(r.error||`Failed to select branch`)}catch(e){Tn.error(`Failed to select branch:`,e),w.error(`Failed to select branch`)}},[e]);return{sendMessage:F,stopGeneration:I,regenerateLastMessage:ne,editAndResendMessage:(0,Z.useCallback)(async(t,n)=>{if(!e||!n.trim())return;let r=b.getState(),i=r.currentSession;if(!i||i.id!==e)return;let a=i.messages.findIndex(e=>e.id===t);if(a===-1||i.messages[a].role!==`user`)return;let o=i.messages[a],s=i.messages.slice(0,a);try{i.isPrivate||await K.updateSession(e,{messages:s}),r.truncateMessagesFrom(e,t),await F(n,o.images)}catch(e){Tn.error(`Failed to edit message:`,e),w.error(`Failed to edit message`)}},[e,F]),selectBranch:L,isStreaming:s,streamingMessage:t,streamingThinking:r,streamingMessageId:a,toolActivities:u}},kn=G(`pages:chat-page`),An=(e,t,n=!1)=>{let r=new Date().getHours(),i=e?`${n?`،`:`,`} \u2068${e}\u2069`:``;return r>=5&&r<12?{id:`time`,title:`${t?t(`chat.greeting.morning`):`Good morning`}${i}`,subtitle:t?t(`chat.welcome.helpToday`):`What can I help with today?`}:r>=12&&r<17?{id:`time`,title:`${t?t(`chat.greeting.afternoon`):`Good afternoon`}${i}`,subtitle:t?t(`chat.welcome.helpToday`):`What can I help with today?`}:r>=17&&r<21?{id:`time`,title:`${t?t(`chat.greeting.evening`):`Good evening`}${i}`,subtitle:t?t(`chat.welcome.helpTonight`):`What can I help with tonight?`}:{id:`time`,title:`${t?t(`chat.greeting.night`):`Good night`}${i}`,subtitle:t?t(`chat.welcome.helpTonight`):`What can I help with tonight?`}},jn=(e,t,n,r=!1)=>{let i=Fe(e);return i===`time`?An(t,n,r):{id:i,title:n?n(`chat.welcome.variety.${i}.title`):`What should we make?`,subtitle:n?n(`chat.welcome.variety.${i}.subtitle`):`Start with a thought, a sketch, or a stubborn problem.`}},Mn=()=>{let{t:e,i18n:t}=s(),{sessionId:n}=a(),r=i(),l=o(),{currentSession:u,sessions:d,models:x,selectedModel:E,selectedProviderType:D,selectedProviderId:O,setSelectedModel:k,createSession:ee,setCurrentSession:A,loadSessions:j,getCurrentPersona:M}=b(),{user:P}=Ne(),F=Y(e=>e.preferences.imageGenSettings?.enabled===!0),{sendMessage:I,stopGeneration:ne,regenerateLastMessage:L,editAndResendMessage:re,selectBranch:ie,isStreaming:R,streamingMessage:ae,streamingThinking:oe,streamingMessageId:se,toolActivities:ce}=On(u?.id||``),le=M(),z=(0,Z.useMemo)(()=>({model:E,providerType:D,providerId:O}),[E,O,D]),B=(0,Z.useMemo)(()=>_(x,z),[x,z]),ue=E?m(B,z):``,V=h(x,z),de=new URLSearchParams(l.search).get(`incognito`)===`1`,[H,fe]=(0,Z.useState)(Pe),[pe,me]=(0,Z.useState)(null),[he,U]=(0,Z.useState)(!1),_e=Y(e=>e.preferences.showFollowUpSuggestions!==!1),ve=(0,Z.useRef)(null),ye=(0,Z.useRef)(!1);(0,Z.useEffect)(()=>{let e=u?.id,t=ye.current&&!R;if(ye.current=R,!e||R||!_e||u?.isPrivate||!t)return;let n=u.messages[u.messages.length-1];if(!n||n.role!==`assistant`||!n.content.trim()||ve.current===n.id)return;ve.current=n.id;let r=!1;return K.generateFollowUps(e).then(t=>{r||!t.success||b.getState().currentSession?.id===e&&me({sessionId:e,suggestions:t.data?.suggestions??[]})}).catch(()=>{}),()=>{r=!0}},[R,u,_e]);let W=pe&&pe.sessionId===u?.id?pe.suggestions:[],xe=(0,Z.useMemo)(()=>jn(H,P?.username,e,p(t.language)),[t.language,e,P?.username,H]),[Se,Ce]=(0,Z.useState)(``),[G,q]=(0,Z.useState)([]),[Te,De]=(0,Z.useState)(!1),[Oe,ke]=(0,Z.useState)(!1),[Ae,je]=(0,Z.useState)(!1),J=(0,Z.useRef)(null),Fe=async t=>{let n=t.target.files?.[0];if(t.target.value=``,n){je(!0);try{let t=await we.uploadDocument(n);t.success?(w.success(e(`chat.input.menu.documentAttached`)),window.dispatchEvent(new Event(`libre:documents-updated`))):w.error(t.error||e(`chat.input.menu.attachFailed`))}catch(t){kn.error(`Document upload failed:`,t),w.error(e(`chat.input.menu.attachFailed`))}finally{je(!1)}}};(0,Z.useEffect)(()=>{let e=!1;return Me.getConfig().then(t=>{!e&&t.success&&t.data&&De(t.data.allowed)}).catch(()=>{}),()=>{e=!0}},[]);let[Re,ze]=(0,Z.useState)(!1),Be=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{let e=()=>{fe(Pe())};return window.addEventListener(Ie,e),()=>window.removeEventListener(Ie,e)},[]);let[Ve,He]=(0,Z.useState)(!1),Ue=F&&Ve,We=(0,Z.useCallback)((t=!0)=>{let n=E?z:x[0]?g(x[0]):null;if(!n||!h(x,n))return t&&w.error(e(`chat.model.selectBeforePrivateChat`)),!1;let r=Date.now();return A({id:`private-${r}`,title:e(`chat.session.incognito`,`Incognito Chat`),model:n.model,providerType:n.providerType,providerId:n.providerId,messages:[],createdAt:r,updatedAt:r,isPrivate:!0}),!0},[x,E,z,A,e]);(0,Z.useEffect)(()=>{d.length===0&&j()},[j,d.length]),(0,Z.useEffect)(()=>{!de||u?.isPrivate||We(!1)},[u?.isPrivate,de,We]),(0,Z.useEffect)(()=>{let e=!1;return F&&(async()=>{try{let t=await Ee.getPlugins();if(e)return;He(!!(t.success&&t.data&&t.data.length>0))}catch{if(e)return;He(!1)}})(),()=>{e=!0}},[F]),(0,Z.useEffect)(()=>{(()=>{if(sessionStorage.getItem(`forceWelcomeScreen`)){sessionStorage.removeItem(`forceWelcomeScreen`);return}if(!(u?.isPrivate&&!n)&&d.length!==0)if(n){let e=d.find(e=>e.id===n);e&&e.id!==u?.id?A(e):e||(kn.warn(`Session ${n} not found for current user, redirecting...`),d.length>0?r(`/c/${d[0].id}`,{replace:!0}):r(`/`,{replace:!0}))}else!n&&d.length>0&&l.pathname===`/`&&r(`/c/${d[0].id}`,{replace:!0})})()},[n,d,A,r,u?.id,u?.isPrivate,l.pathname]),(0,Z.useEffect)(()=>{if(u?.id){let e=sessionStorage.getItem(`pendingMessage`);if(e){sessionStorage.removeItem(`pendingMessage`);try{let t=JSON.parse(e);setTimeout(()=>{I(t.content,t.images,void 0,t.webSearch===!0)},100)}catch(e){kn.error(`Failed to parse pending message:`,e)}}}},[u?.id,I]),(0,Z.useEffect)(()=>{let e=Be.current;e&&(e.style.height=`auto`,e.style.height=Se?`${Math.min(e.scrollHeight,200)}px`:``)},[Se]);let Ke=async t=>{if(t.preventDefault(),!Se.trim()||!E)return;if(!V){w.error(e(`chat.model.selectBeforeSending`));return}Le(`impact`);let n={content:Se.trim(),images:G.length>0?G:void 0,webSearch:Te&&Oe?!0:void 0};sessionStorage.setItem(`pendingMessage`,JSON.stringify(n)),Ce(``),q([]),ke(!1);let i=await ee(E,void 0,E.startsWith(`persona:`)?E.slice(8):void 0,D,O);i&&(await qe(i),r(`/c/${i.id}`,{replace:!0}))},qe=(0,Z.useCallback)(async e=>{let t=b.getState().draftSessionSettings,n=t.systemPrompt?.trim(),r=t.generationOptions;if(!n&&!r)return;let i=n?[{id:c(),role:`system`,content:n,timestamp:Date.now()},...e.messages.filter(e=>e.role!==`system`)]:e.messages;try{let t=await K.updateSession(e.id,{messages:i,settings:r?{generationOptions:r}:void 0});if(t.success&&t.data){let e=t.data;b.setState(t=>({sessions:t.sessions.map(t=>t.id===e.id?e:t),currentSession:t.currentSession?.id===e.id?e:t.currentSession}))}}catch(e){kn.error(`Failed to apply chat settings to the new session`,e)}finally{b.getState().setDraftSessionSettings({})}},[]),Je=e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Ke(e))},Ye=async e=>{let t=y(B,e.target.value);t&&k(t.model,t.providerType,t.providerId)},Xe=(e,t,n,r)=>{u&&(Le(`impact`),me(null),I(e,t,n,r))};if(!u){let t=G.length>0;return(0,Q.jsxs)(`div`,{className:`flex h-full min-h-0 flex-1`,children:[(0,Q.jsxs)(`div`,{className:`relative h-full min-w-0 flex-1 overflow-y-auto overflow-x-hidden px-4 py-20 sm:px-8 sm:py-24`,children:[(0,Q.jsxs)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-0`,children:[(0,Q.jsx)(`div`,{className:`absolute left-[12%] top-[18%] h-56 w-56 rounded-full bg-primary-500/[0.035] blur-3xl dark:bg-primary-400/[0.04]`}),(0,Q.jsx)(`div`,{className:`absolute bottom-[16%] right-[10%] h-72 w-72 rounded-full bg-gray-900/[0.025] blur-3xl dark:bg-white/[0.025]`}),(0,Q.jsx)(`div`,{className:`absolute left-1/2 top-0 h-16 w-px bg-gray-300/60 dark:bg-white/10`})]}),(0,Q.jsx)(`button`,{onClick:()=>U(e=>!e),className:f(`absolute end-4 top-4 z-10 flex h-9 w-9 items-center justify-center rounded-full border border-black/[0.07] bg-surface/65 text-gray-500 backdrop-blur-md transition-colors duration-150 hover:bg-surface-raised hover:text-gray-950 dark:border-white/[0.08] dark:bg-dark-200/65 dark:text-dark-600 dark:hover:bg-dark-200 dark:hover:text-dark-950 sm:end-6 sm:top-6`,he&&`text-primary-600 dark:text-primary-400`),title:e(`chat.controls.title`),"aria-expanded":he,children:(0,Q.jsx)(C,{className:`h-4 w-4`})}),(0,Q.jsxs)(`button`,{onClick:()=>We(),disabled:!E&&x.length===0||!!E&&!V,className:`absolute end-[3.75rem] top-4 z-10 flex items-center gap-2 rounded-full border border-black/[0.07] bg-surface/65 px-3 py-2 text-xs font-medium text-gray-500 backdrop-blur-md transition-colors duration-150 hover:bg-surface-raised hover:text-gray-950 disabled:cursor-not-allowed disabled:opacity-50 dark:border-white/[0.08] dark:bg-dark-200/65 dark:text-dark-600 dark:hover:bg-dark-200 dark:hover:text-dark-950 sm:end-[4.25rem] sm:top-6`,title:e(`chat.session.privateTooltip`),children:[(0,Q.jsx)(T,{className:`h-3.5 w-3.5`}),(0,Q.jsx)(`span`,{children:e(`chat.session.incognito`,`Incognito Chat`)})]}),(0,Q.jsxs)(`div`,{className:`relative z-[1] mx-auto flex min-h-full w-full max-w-3xl flex-col items-center justify-center`,children:[(0,Q.jsxs)(`div`,{className:`mb-10 flex flex-col items-center text-center animate-fade-in sm:mb-12`,"aria-live":`polite`,children:[(0,Q.jsx)(`h1`,{className:`mb-4 max-w-3xl text-balance text-[clamp(2.65rem,7vw,5.25rem)] font-light leading-[0.98] tracking-[-0.055em] text-gray-950 dark:text-dark-950 rtl:leading-[1.12] rtl:tracking-normal`,children:xe.title}),(0,Q.jsx)(`p`,{className:`max-w-xl text-balance text-base leading-relaxed text-gray-500 dark:text-dark-600 sm:text-lg`,children:xe.subtitle})]},xe.id),B.length>0?(0,Q.jsxs)(`div`,{className:`w-full`,children:[Re&&(0,Q.jsxs)(`div`,{className:`mb-3 animate-slide-up rounded-2xl border border-black/[0.07] bg-surface/80 p-4 shadow-sm backdrop-blur-xl dark:border-white/[0.08] dark:bg-dark-200/80`,children:[(0,Q.jsx)(wn,{images:G,onImagesChange:q,maxImages:5}),(0,Q.jsxs)(`div`,{className:`mt-3 flex items-center justify-between gap-3 border-t border-black/[0.06] pt-3 dark:border-white/[0.07]`,children:[(0,Q.jsx)(`span`,{className:`text-xs text-gray-500 dark:text-dark-500`,children:e(`chat.input.menu.attachDocument`)}),(0,Q.jsxs)(X,{type:`button`,size:`sm`,variant:`outline`,disabled:Ae,onClick:()=>J.current?.click(),className:`shrink-0 whitespace-nowrap`,children:[(0,Q.jsx)(ge,{className:`h-3.5 w-3.5`}),(0,Q.jsx)(`span`,{className:`ms-1.5`,children:e(Ae?`documents.uploading`:`chat.input.menu.attach`)})]}),(0,Q.jsx)(`input`,{ref:J,type:`file`,accept:`.pdf,.txt,.md`,className:`hidden`,onChange:e=>void Fe(e)})]})]}),(0,Q.jsx)(`form`,{onSubmit:Ke,children:(0,Q.jsxs)(`div`,{className:f(`flex items-end gap-2 rounded-[1.35rem] border p-2 transition-[border-color,box-shadow,background-color] duration-200`,`border-black/[0.08] bg-surface/90 dark:border-white/[0.09] dark:bg-dark-200/90`,`shadow-[0_1px_2px_rgba(0,0,0,0.03),0_18px_50px_rgba(15,23,42,0.08)] backdrop-blur-xl`,`focus-within:border-primary-500/35 focus-within:shadow-[0_1px_2px_rgba(0,0,0,0.03),0_22px_65px_rgba(15,23,42,0.12)]`),children:[(0,Q.jsx)(X,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>ze(!Re),className:f(`h-9 w-9 sm:h-10 sm:w-10 !p-0 rounded-full flex-shrink-0`,`text-gray-500 dark:text-dark-600 hover:bg-gray-100 dark:hover:bg-dark-300 transition-colors touch-manipulation`,t&&`text-primary-600 dark:text-primary-400`,Re&&`bg-gray-100 dark:bg-dark-300`),title:e(`chat.input.attachImages`),children:t?(0,Q.jsxs)(`div`,{className:`relative flex items-center justify-center`,children:[(0,Q.jsx)(ge,{className:`h-4 w-4`}),(0,Q.jsx)(`div`,{className:`absolute -top-0.5 -end-0.5 h-1.5 w-1.5 bg-primary-500 rounded-full`})]}):Re?(0,Q.jsx)(be,{className:`h-4 w-4`}):(0,Q.jsx)(S,{className:`h-4 w-4`})}),(0,Q.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,Q.jsx)(an,{ref:Be,value:Se,onChange:e=>Ce(e.target.value),onKeyDown:Je,placeholder:e(`chat.input.messagePlaceholder`),className:`!m-0 block min-h-9 max-h-[160px] resize-none !rounded-none !border-0 !bg-transparent !px-1.5 !py-1.5 sm:!min-h-10 sm:!py-2 max-[768px]:!min-h-11 max-[768px]:!py-[10.5px] !shadow-none scrollbar-thin scrollbar-thumb-gray-300 placeholder:text-gray-400 focus:!border-0 focus:!bg-transparent focus:!shadow-none focus:!ring-0 dark:scrollbar-thumb-dark-400 dark:placeholder:text-dark-500 text-[0.9375rem] leading-relaxed touch-manipulation`,rows:1})}),Te&&(0,Q.jsx)(X,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>ke(e=>!e),className:f(`h-9 w-9 sm:h-10 sm:w-10 p-0 rounded-full flex-shrink-0 flex items-center justify-center`,`text-gray-500 dark:text-dark-600 hover:bg-gray-100 dark:hover:bg-dark-300`,`transition-colors duration-150 touch-manipulation`,Oe&&`bg-primary-50 text-primary-600 dark:bg-primary-900/25 dark:text-primary-400`),title:e(Oe?`chat.input.webSearchOn`:`chat.input.webSearchOff`),"aria-pressed":Oe,children:(0,Q.jsx)(N,{className:`h-4 w-4`})}),(0,Q.jsx)(`div`,{className:`hidden sm:block`,children:(0,Q.jsx)(Ge,{models:B,selectedModel:ue,onModelChange:Ye,getModelValue:v,className:`min-w-[140px] max-w-[210px]`,compact:!0,showImageGen:Ue})}),(0,Q.jsx)(X,{type:`submit`,variant:`ghost`,size:`sm`,disabled:!Se.trim()||!E||!V,className:f(`h-9 w-9 sm:h-10 sm:w-10 p-0 rounded-full flex-shrink-0 flex items-center justify-center`,`bg-gray-950 text-white hover:bg-gray-800 dark:bg-white dark:text-gray-950 dark:hover:bg-gray-100`,`disabled:bg-gray-100 disabled:text-gray-400 dark:disabled:bg-dark-300 dark:disabled:text-dark-500 disabled:hover:bg-gray-100 dark:disabled:hover:bg-dark-300`,`transition-colors duration-150 touch-manipulation`,Se.trim()&&E&&`shadow-sm`),title:e(`chat.input.sendMessage`),children:(0,Q.jsx)(te,{className:`h-4 w-4`})})]})}),(0,Q.jsx)(`div`,{className:`sm:hidden mt-4`,children:(0,Q.jsx)(Ge,{models:B,selectedModel:ue,onModelChange:Ye,getModelValue:v,className:`w-full`,compact:!0,showImageGen:Ue})}),(0,Q.jsx)(`p`,{className:`mt-4 text-center text-[10px] leading-relaxed text-gray-400 dark:text-dark-500`,children:e(`chat.footer.disclaimer`)})]}):(0,Q.jsx)(`div`,{className:`w-full max-w-lg`,children:(0,Q.jsxs)(`div`,{className:`rounded-2xl border border-black/[0.07] bg-surface/70 p-6 backdrop-blur-xl dark:border-white/[0.08] dark:bg-dark-200/70`,children:[(0,Q.jsx)(`p`,{className:`mb-4 text-sm leading-relaxed text-gray-600 dark:text-dark-700`,children:e(`chat.model.noModelsDescription`)}),(0,Q.jsx)(`code`,{className:`block rounded-xl bg-gray-100 p-3 font-mono text-xs text-gray-800 dark:bg-dark-300 dark:text-dark-700`,children:e(`chat.model.pullCommand`)})]})})]})]}),(0,Q.jsx)(vn,{draftModel:E,open:he,onClose:()=>U(!1)})]})}return(0,Q.jsxs)(`div`,{className:`relative flex h-full flex-col`,style:le?.background?{backgroundImage:`url(${le.background})`,backgroundSize:`cover`,backgroundPosition:`center`,backgroundRepeat:`no-repeat`}:void 0,children:[le?.background&&(0,Q.jsx)(`div`,{className:`absolute inset-0 bg-gray-50/[0.88] backdrop-blur-sm dark:bg-dark-100/[0.88]`}),(0,Q.jsxs)(`div`,{className:`relative z-10 flex h-full flex-col`,children:[u?.isPrivate&&(0,Q.jsx)(`div`,{className:`flex-shrink-0 border-b border-black/[0.05] bg-surface/55 px-4 py-2 backdrop-blur-xl dark:border-white/[0.06] dark:bg-dark-100/55`,children:(0,Q.jsxs)(`div`,{className:`flex items-center justify-center gap-2 text-gray-500 dark:text-dark-600`,children:[(0,Q.jsx)(T,{className:`h-3.5 w-3.5`}),(0,Q.jsx)(`span`,{className:`text-xs font-medium`,children:e(`chat.session.privateMode`)}),(0,Q.jsxs)(`span`,{className:`hidden text-[11px] text-gray-400 dark:text-dark-500 sm:inline`,children:[`— `,e(`chat.session.privateDescription`)]})]})}),le&&!u?.isPrivate&&(0,Q.jsx)(`div`,{className:`flex-shrink-0 border-b border-black/[0.05] bg-surface/55 px-4 py-2 backdrop-blur-xl dark:border-white/[0.06] dark:bg-dark-100/55`,children:(0,Q.jsx)(Cn,{persona:le,onClear:()=>{u&&K.updateSession(u.id,{model:le.model,providerType:`ollama`,providerId:null,personaId:null}).then(e=>{if(!e.success||!e.data)throw Error(e.error||`Failed to remove persona`);b.setState(t=>({sessions:t.sessions.map(t=>t.id===u.id?e.data:t),currentSession:e.data}))}).catch(t=>{kn.error(`Failed to remove persona:`,t),w.error(e(`chat.persona.removeFailed`))})}})}),(0,Q.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,Q.jsxs)(`div`,{className:`relative flex min-w-0 flex-1 flex-col`,children:[(0,Q.jsx)(`button`,{onClick:()=>U(e=>!e),className:f(`absolute end-3 top-3 z-20 flex h-8 w-8 items-center justify-center rounded-full border border-black/[0.07] bg-surface/65 text-gray-500 backdrop-blur-md transition-colors duration-150 hover:bg-surface-raised hover:text-gray-950 dark:border-white/[0.08] dark:bg-dark-200/65 dark:text-dark-600 dark:hover:bg-dark-200 dark:hover:text-dark-950`,he&&`text-primary-600 dark:text-primary-400`),title:e(`chat.controls.title`),"aria-expanded":he,children:(0,Q.jsx)(C,{className:`h-3.5 w-3.5`})}),(0,Q.jsx)(nn,{messages:u.messages,streamingMessage:ae,streamingThinking:oe,streamingMessageId:se,isStreaming:R,toolActivities:ce,onRegenerate:L,onSelectBranch:ie,onEditResend:re,followUpSuggestions:W,onFollowUpSelect:e=>Xe(e),className:`flex-1`}),(0,Q.jsx)(hn,{onSendMessage:Xe,onStopGeneration:ne,disabled:!u})]}),u&&(0,Q.jsx)(Sn,{session:u}),(0,Q.jsx)(vn,{session:u,open:he,onClose:()=>U(!1)})]})]})]})};export{Mn as ChatPage,Mn as default};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{d as t,f as n}from"./markdown-core-DHnR5Hw8.js";import{n as r}from"./react-vendor-DPNXrO-8.js";import{t as i}from"./useTranslation-CXY69qNk.js";import{t as a}from"./utils-BM0_0iFj.js";import{Gt as o,Mt as s,T as c,Tn as l,Ut as u,Zt as d,at as f,gt as p,ht as m,lt as h,m as g,n as _,o as v}from"./ui-vendor-xUzKqAXI.js";import{t as y}from"./logger-DSXjF4ye.js";import{g as b,m as x}from"./api-CLEmGcEh.js";import{i as S,n as C,r as w,s as T}from"./imageGenModels-Dx_QMLJQ.js";import{t as E}from"./appStore-CGdhvp9P.js";import{t as D}from"./Button-CTXHujOd.js";import{n as O,t as k}from"./ui-BnDZpjfc.js";import{_ as A,f as j,h as M,m as N,p as P,v as F}from"../assets/index-BBpNbfKW.js";var I=class extends M{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){e._type=`infinite`,super.setOptions(e)}getOptimisticResult(e){return e._type=`infinite`,super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`backward`}}})}createResult(e,t){let{state:n}=e,r=super.createResult(e,t),{isFetching:i,isRefetching:a,isError:o,isRefetchError:s}=r,c=n.fetchMeta?.fetchMore?.direction,l=o&&c===`forward`,u=i&&c===`forward`,d=o&&c===`backward`,f=i&&c===`backward`;return{...r,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:A(t,n.data),hasPreviousPage:F(t,n.data),isFetchNextPageError:l,isFetchingNextPage:u,isFetchPreviousPageError:d,isFetchingPreviousPage:f,isRefetchError:s&&!l&&!d,isRefetching:a&&!u&&!f}}};function L(e,t){return P(e,I,t)}var R=e(n(),1),z=r(),B=t(),V=y(`components:image-generation-panel`);function H(e,t={}){let n=e.config?.sizes&&e.config.sizes.length>0?e.config.sizes:[t.size||e.config?.default_size||`1024x1024`],r=e.config?.qualities&&e.config.qualities.length>0?e.config.qualities:e.config?.omit_quality_when_empty?[]:[t.quality||e.config?.default_quality||`standard`],i=e.config?.styles&&e.config.styles.length>0?e.config.styles:[];return{pluginId:e.id,model:T(e.models,t.model,void 0,``),size:T(n,t.size,e.config?.default_size,`1024x1024`),quality:r.length>0?T(r,t.quality,e.config?.default_quality,`standard`):``,style:i.length>0?T(i,t.style,e.config?.default_style,i[0]):``,sizes:n,qualities:r,styles:i,maxPromptLength:e.config?.max_prompt_length??null,sizeLabel:e.config?.size_label||``}}var U=({isOpen:e,onClose:t,onImageGenerated:n})=>{let{t:r}=i(),o=E(e=>e.preferences.imageGenSettings),s=o?.enabled===!0,[d,f]=(0,R.useState)([]),[p,g]=(0,R.useState)(``),[v,y]=(0,R.useState)(``),[x,T]=(0,R.useState)(``),[O,k]=(0,R.useState)(`1024x1024`),[A,j]=(0,R.useState)(`standard`),[M,N]=(0,R.useState)(``),[P,F]=(0,R.useState)(!1),[I,L]=(0,R.useState)(null),[U,W]=(0,R.useState)([`512x512`,`768x768`,`1024x1024`]),[G,K]=(0,R.useState)([`standard`,`high`]),[q,ee]=(0,R.useState)([]),[J,Y]=(0,R.useState)(null),[te,ne]=(0,R.useState)(``),X=R.useId(),Z=(0,R.useCallback)((e,t)=>{let n=H(e,t);g(n.pluginId),y(n.model),k(n.size),j(n.quality),N(n.style),W(n.sizes),K(n.qualities),ee(n.styles),Y(n.maxPromptLength),ne(n.sizeLabel)},[]);(0,R.useEffect)(()=>{let t=!1;return e&&s&&(async()=>{try{let e=await b.getPlugins();if(t)return;let n=e.success&&e.data?e.data.filter(e=>e.models.length>0):[];f(n);let r=C(n,o);r?Z(r,o):(g(``),y(``))}catch(e){if(t)return;f([]),g(``),y(``),V.error(`Failed to load image generation plugins:`,e)}})(),()=>{t=!0}},[Z,s,e,o]),(0,R.useEffect)(()=>{if(!e)return;let n=document.body.style.overflow,r=e=>{e.key===`Escape`&&t()};return document.body.style.overflow=`hidden`,document.addEventListener(`keydown`,r),()=>{document.body.style.overflow=n,document.removeEventListener(`keydown`,r)}},[e,t]);let Q=e=>{let t=d.find(t=>t.id===e);t&&Z(t,{model:v,size:O,quality:A,style:M})},re=async()=>{if(!s||!p||!v||!x.trim()){l.error(r(`imageGeneration.enterPrompt`));return}if(J&&x.length>J){l.error(r(`imageGeneration.promptTooLong`,{max:J.toLocaleString()}));return}F(!0),L(null);try{let e=await b.generate({model:v,pluginId:p,prompt:x.trim(),size:O,quality:A,...M?{style:M}:{}});if(e.success&&e.data?.images&&e.data.images.length>0){let i=S(e.data.images[0]);i&&(l.success(r(`imageGeneration.success`)),n?(n(i,x.trim(),v),T(``),L(null),t()):L(i))}else l.error(r(`imageGeneration.failed`))}catch(e){V.error(`Image generation failed:`,e);let t=e instanceof Error?e.message:r(`imageGeneration.failed`);l.error(t)}finally{F(!1)}},ie=()=>{if(!I)return;let e=document.createElement(`a`);e.href=I,e.download=`generated-image-${Date.now()}.${w(I)}`,document.body.appendChild(e),e.click(),document.body.removeChild(e)};if(!e||!s)return null;let $=d.find(e=>e.id===p);return(0,z.createPortal)((0,B.jsxs)(`div`,{className:`fixed inset-0 z-[99999] flex items-center justify-center p-3 sm:p-6`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":X,children:[(0,B.jsx)(`div`,{className:`absolute inset-0 bg-black/55 backdrop-blur-sm`,onClick:t}),(0,B.jsxs)(`div`,{className:a(`relative bg-white/95 dark:bg-dark-25/95`,`border border-gray-200/80 dark:border-white/10`,`rounded-3xl shadow-2xl backdrop-blur-xl`,`flex max-h-[92vh] w-full max-w-2xl flex-col overflow-hidden`),onClick:e=>e.stopPropagation(),children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between border-b border-gray-200/70 px-5 py-4 dark:border-white/[0.08] sm:px-6 sm:py-5`,children:[(0,B.jsx)(`div`,{children:(0,B.jsx)(`h2`,{id:X,className:`text-xl font-normal tracking-[-0.025em] text-gray-950 dark:text-dark-950`,children:r(`imageGeneration.title`)})}),(0,B.jsx)(`button`,{onClick:t,className:`rounded-xl p-2 text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-900 dark:text-dark-500 dark:hover:bg-white/[0.06] dark:hover:text-dark-900`,title:r(`common.close`,{defaultValue:`Close`}),children:(0,B.jsx)(_,{className:`h-5 w-5 text-gray-500 dark:text-gray-400`})})]}),(0,B.jsx)(`div`,{className:`scroll-region min-h-0 flex-1 space-y-5 p-5 scrollbar-thin sm:p-6`,children:$?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 sm:grid-cols-2`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1`,children:r(`settings.plugins.title`)}),(0,B.jsx)(`select`,{value:p,onChange:e=>Q(e.target.value),className:a(`w-full rounded-xl px-3 py-2.5 text-sm`,`bg-white/70 dark:bg-white/[0.035]`,`border border-gray-200/80 dark:border-white/10`,`text-gray-900 dark:text-gray-100`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`),children:d.map(e=>(0,B.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1`,children:r(`imageGeneration.model`)}),(0,B.jsx)(`select`,{value:v,onChange:e=>y(e.target.value),className:a(`w-full rounded-xl px-3 py-2.5 text-sm`,`bg-white/70 dark:bg-white/[0.035]`,`border border-gray-200/80 dark:border-white/10`,`text-gray-900 dark:text-gray-100`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`),children:$?.models.map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))})]}),q.length>0&&(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1`,children:r(`imageGeneration.style`)}),(0,B.jsx)(`select`,{value:M,onChange:e=>N(e.target.value),className:a(`w-full rounded-xl px-3 py-2.5 text-sm`,`bg-white/70 dark:bg-white/[0.035]`,`border border-gray-200/80 dark:border-white/10`,`text-gray-900 dark:text-gray-100`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`),children:q.map(e=>(0,B.jsx)(`option`,{value:e,children:e.charAt(0).toUpperCase()+e.slice(1)},e))})]})]}),(0,B.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 sm:grid-cols-2`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1`,children:te||r(`imageGeneration.size`)}),(0,B.jsx)(`select`,{value:O,onChange:e=>k(e.target.value),className:a(`w-full rounded-xl px-3 py-2.5 text-sm`,`bg-white/70 dark:bg-white/[0.035]`,`border border-gray-200/80 dark:border-white/10`,`text-gray-900 dark:text-gray-100`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`),children:U.map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))})]}),G.length>0&&(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1`,children:r(`imageGeneration.quality`)}),(0,B.jsx)(`select`,{value:A,onChange:e=>j(e.target.value),className:a(`w-full rounded-xl px-3 py-2.5 text-sm`,`bg-white/70 dark:bg-white/[0.035]`,`border border-gray-200/80 dark:border-white/10`,`text-gray-900 dark:text-gray-100`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`),children:G.map(e=>(0,B.jsx)(`option`,{value:e,children:e.charAt(0).toUpperCase()+e.slice(1)},e))})]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1`,children:r(`imageGeneration.prompt`)}),(0,B.jsx)(`textarea`,{value:x,onChange:e=>T(e.target.value),placeholder:r(`imageGeneration.promptPlaceholder`),rows:5,className:a(`w-full resize-none rounded-2xl px-4 py-3 text-sm leading-6`,`bg-white/70 dark:bg-white/[0.035]`,`border border-gray-200/80 dark:border-white/10`,`text-gray-900 dark:text-gray-100`,`placeholder-gray-500 dark:placeholder-gray-400`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`,J&&x.length>J&&`border-red-500 dark:border-red-500`)}),J&&(0,B.jsxs)(`div`,{className:a(`mt-1 text-end text-xs`,x.length>J?`text-red-500`:`text-gray-500 dark:text-gray-400`),children:[x.length.toLocaleString(),` /`,` `,J.toLocaleString()]})]}),I&&(0,B.jsxs)(`div`,{className:`relative overflow-hidden rounded-2xl border border-gray-200/80 dark:border-white/10`,children:[(0,B.jsx)(`img`,{src:I,alt:`Generated`,className:`w-full h-auto`}),(0,B.jsx)(`button`,{onClick:ie,className:a(`absolute bottom-3 end-3 rounded-lg p-2`,`bg-white/90 dark:bg-dark-100/90`,`hover:bg-white dark:hover:bg-dark-100`,`border border-gray-200 dark:border-dark-300`,`transition-colors`),title:r(`imageGallery.download`),children:(0,B.jsx)(u,{className:`h-5 w-5 text-gray-700 dark:text-gray-200`})})]})]}):(0,B.jsxs)(`div`,{className:`text-center py-8`,children:[(0,B.jsx)(m,{className:`h-12 w-12 mx-auto mb-3 text-gray-300 dark:text-gray-600`}),(0,B.jsx)(`p`,{className:`text-gray-500 dark:text-gray-400`,children:r(`imageGeneration.noModels`)}),(0,B.jsx)(`p`,{className:`text-sm text-gray-400 dark:text-gray-500 mt-1`,children:r(`imageGeneration.configurePlugin`)})]})}),$&&(0,B.jsx)(`div`,{className:`border-t border-gray-200/70 p-4 dark:border-white/[0.08] sm:px-6 sm:py-5`,children:(0,B.jsx)(D,{onClick:re,disabled:P||!s||!x.trim()||!p||!v,className:a(`w-full py-2.5 rounded-xl font-medium`,`bg-primary-600 dark:bg-primary-600`,`hover:bg-primary-700 dark:hover:bg-primary-500`,`text-white`,`disabled:opacity-50 disabled:cursor-not-allowed`,`transition-colors`),children:P?(0,B.jsxs)(`span`,{className:`flex items-center justify-center gap-2`,children:[(0,B.jsx)(h,{className:`h-4 w-4 animate-spin`}),r(`imageGeneration.generating`)]}):(0,B.jsxs)(`span`,{className:`flex items-center justify-center gap-2`,children:[(0,B.jsx)(c,{className:`h-4 w-4`}),r(`imageGeneration.generate`)]})})})]})]}),document.body)},W={video:[],audio:[]};function G({isOpen:e,initialKind:t,onClose:n,onGenerated:r}){let{t:o}=i(),[u,d]=(0,R.useState)(t),[f,p]=(0,R.useState)(W),[m,g]=(0,R.useState)(``),[y,b]=(0,R.useState)(``),[S,C]=(0,R.useState)(`alloy`),[w,T]=(0,R.useState)(``),[E,O]=(0,R.useState)(``),[k,A]=(0,R.useState)(``),[j,M]=(0,R.useState)(!0),[N,P]=(0,R.useState)(!0),[F,I]=(0,R.useState)(!1),L=R.useId();(0,R.useEffect)(()=>{if(!e)return;let t=!1;return x.getModels().then(e=>{t||!e.success||!e.data||p(e.data)}).catch(()=>{t||l.error(o(`mediaGeneration.loadFailed`))}).finally(()=>{t||P(!1)}),()=>{t=!0}},[e,o]);let V=u===`video`?f.video:f.audio,H=V.some(e=>q(e)===m)?m:V[0]?q(V[0]):``,U=(0,R.useMemo)(()=>V.find(e=>q(e)===H),[H,V]),G=u===`video`?U?.config:void 0,Y=u===`audio`?U:void 0;return e?(0,z.createPortal)((0,B.jsxs)(`div`,{className:`fixed inset-0 z-[99999] flex items-center justify-center p-3 sm:p-6`,children:[(0,B.jsx)(`button`,{className:`absolute inset-0 bg-black/55 backdrop-blur-sm`,onClick:n,"aria-label":o(`common.close`)}),(0,B.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":L,className:`relative flex max-h-[92vh] w-full max-w-2xl flex-col overflow-hidden rounded-2xl border border-gray-200/80 bg-white/95 shadow-2xl backdrop-blur-xl dark:border-white/10 dark:bg-dark-25/95`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between border-b border-gray-200/70 px-4 py-3 dark:border-white/[0.08] sm:px-5`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`h2`,{id:L,className:`text-xl text-gray-950 dark:text-dark-950`,children:o(`mediaGeneration.title`)}),(0,B.jsx)(`p`,{className:`mt-1 text-sm text-gray-500 dark:text-dark-500`,children:o(`mediaGeneration.description`)})]}),(0,B.jsx)(`button`,{onClick:n,className:`rounded-xl p-2`,children:(0,B.jsx)(_,{className:`h-5 w-5`})})]}),(0,B.jsxs)(`div`,{className:`scroll-region min-h-0 flex-1 space-y-4 p-4 sm:p-5`,children:[(0,B.jsx)(`div`,{className:`grid grid-cols-2 gap-2 rounded-xl bg-gray-100 p-1 dark:bg-white/[0.05]`,children:[`video`,`audio`].map(e=>(0,B.jsxs)(`button`,{type:`button`,onClick:()=>d(e),className:a(`flex items-center justify-center gap-2 rounded-xl px-3 py-2 text-sm transition-colors`,e===u?`bg-white text-gray-950 shadow-sm dark:bg-white/10 dark:text-white`:`text-gray-500 dark:text-dark-500`),children:[e===`video`?(0,B.jsx)(s,{className:`h-4 w-4`}):(0,B.jsx)(v,{className:`h-4 w-4`}),o(`mediaGeneration.${e}`)]},e))}),N?(0,B.jsx)(`div`,{className:`flex justify-center py-12`,children:(0,B.jsx)(h,{className:`h-7 w-7 animate-spin`})}):V.length===0?(0,B.jsx)(`div`,{className:`rounded-xl border border-amber-500/25 bg-amber-500/10 p-4 text-sm text-amber-800 dark:text-amber-200`,children:o(`mediaGeneration.noModels`,{kind:o(`mediaGeneration.${u}`)})}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(K,{label:o(`mediaGeneration.model`),children:(0,B.jsx)(`select`,{value:H,onChange:e=>{g(e.target.value),T(``),O(``),A(``),M(!0)},className:J,children:V.map(e=>(0,B.jsxs)(`option`,{value:q(e),children:[e.model,` (`,e.plugin,`mode`in e?` · ${o(`mediaGeneration.${e.mode}`)}`:``,`)`]},q(e)))})}),u===`audio`?(0,B.jsx)(K,{label:o(`mediaGeneration.voice`),children:(0,B.jsx)(`input`,{value:S,onChange:e=>C(e.target.value),className:J,placeholder:`alloy`})}):(0,B.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-3`,children:[(0,B.jsx)(K,{label:o(`mediaGeneration.resolution`),children:(0,B.jsxs)(`select`,{value:w,onChange:e=>T(e.target.value),className:J,children:[(0,B.jsx)(`option`,{value:``,children:o(`mediaGeneration.providerDefault`)}),G?.resolutions?.map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))]})}),(0,B.jsx)(K,{label:o(`mediaGeneration.aspectRatio`),children:(0,B.jsxs)(`select`,{value:E,onChange:e=>O(e.target.value),className:J,children:[(0,B.jsx)(`option`,{value:``,children:o(`mediaGeneration.providerDefault`)}),G?.aspect_ratios?.map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))]})}),(0,B.jsx)(K,{label:o(`mediaGeneration.duration`),children:(0,B.jsxs)(`select`,{value:k,onChange:e=>A(e.target.value),className:J,children:[(0,B.jsx)(`option`,{value:``,children:o(`mediaGeneration.providerDefault`)}),G?.durations?.map(e=>(0,B.jsxs)(`option`,{value:e,children:[e,`s`]},e))]})})]}),u===`video`&&G?.supports_audio&&(0,B.jsxs)(`label`,{className:`flex items-center gap-3 text-sm`,children:[(0,B.jsx)(`input`,{type:`checkbox`,checked:j,onChange:e=>M(e.target.checked)}),o(`mediaGeneration.generateAudio`)]}),(0,B.jsx)(K,{label:u===`video`||Y?.mode===`sound`?o(`mediaGeneration.prompt`):o(`mediaGeneration.text`),children:(0,B.jsx)(`textarea`,{value:y,onChange:e=>b(e.target.value),rows:6,className:a(J,`resize-none`),placeholder:o(u===`audio`&&Y?.mode===`sound`?`mediaGeneration.soundPlaceholder`:`mediaGeneration.${u}Placeholder`)})})]})]}),V.length>0&&(0,B.jsx)(`div`,{className:`border-t border-gray-200/70 p-4 dark:border-white/[0.08] sm:px-5`,children:(0,B.jsxs)(D,{onClick:async()=>{if(!(!U||!y.trim())){I(!0);try{if(u===`audio`){let e=Y?.mode===`sound`?await x.generateSound({model:U.model,pluginId:U.plugin,prompt:y.trim(),voice:S.trim()||void 0,format:`wav`}):await x.generateAudio({model:U.model,pluginId:U.plugin,input:y.trim(),voice:S.trim()||void 0,response_format:`mp3`});if(!e.success)throw Error(e.message)}else{let e=await x.generateVideo({model:U.model,pluginId:U.plugin,prompt:y.trim(),...k?{duration:Number(k)}:{},...w?{resolution:w}:{},...E?{aspect_ratio:E}:{},...G?.supports_audio?{generate_audio:j}:{}});if(!e.success||!e.data)throw Error(e.message||o(`mediaGeneration.failed`));let t=e.data,n=0;for(;t.status===`pending`||t.status===`in_progress`;){await ee(3e4);try{let e=await x.getVideoJob(t.id);if(!e.success||!e.data)throw Error(e.message||o(`mediaGeneration.failed`));t=e.data,n=0}catch(e){if(n+=1,n>=5)throw e}}if(t.status===`failed`)throw Error(t.error||o(`mediaGeneration.failed`))}l.success(o(`mediaGeneration.success`)),b(``),r(),n()}catch(e){l.error(e instanceof Error?e.message:o(`mediaGeneration.failed`))}finally{I(!1)}}},disabled:F||!U||!y.trim(),className:`w-full gap-2`,children:[F?(0,B.jsx)(h,{className:`h-4 w-4 animate-spin`}):(0,B.jsx)(c,{className:`h-4 w-4`}),o(F?`mediaGeneration.generating`:`mediaGeneration.generate`)]})})]})]}),document.body):null}function K({label:e,children:t}){return(0,B.jsxs)(`label`,{className:`block space-y-1.5 text-sm font-medium text-gray-700 dark:text-gray-300`,children:[(0,B.jsx)(`span`,{children:e}),t]})}function q(e){return`${e.mode||`default`}::${e.plugin}::${e.model}`}function ee(e){return new Promise(t=>window.setTimeout(t,e))}var J=`w-full rounded-xl border border-gray-200/80 bg-white/70 px-3 py-2.5 text-sm text-gray-900 focus:outline-none focus:ring-2 focus:ring-primary-500/20 dark:border-white/10 dark:bg-white/[0.035] dark:text-gray-100`,Y=({image:e,onClose:t,onDelete:n,onDownload:r})=>{let{t:s}=i();return(0,R.useEffect)(()=>{let e=e=>{e.key===`Escape`&&t()};return document.addEventListener(`keydown`,e),document.body.style.overflow=`hidden`,()=>{document.removeEventListener(`keydown`,e),document.body.style.overflow=``}},[t]),(0,z.createPortal)((0,B.jsxs)(`div`,{className:`fixed inset-0 z-[99999] flex items-center justify-center`,onClick:t,children:[(0,B.jsx)(`div`,{className:`absolute inset-0 bg-black/90 backdrop-blur-sm`}),(0,B.jsxs)(`div`,{className:`relative flex flex-col lg:flex-row max-w-7xl max-h-[95vh] w-full mx-4 gap-4`,onClick:e=>e.stopPropagation(),children:[(0,B.jsx)(`button`,{onClick:t,className:a(`absolute -top-12 right-0 lg:top-0 lg:-right-12 z-10`,`p-2 rounded-full`,`bg-white/10 hover:bg-white/20`,`transition-colors`),children:(0,B.jsx)(_,{className:`h-6 w-6 text-white`})}),(0,B.jsx)(`div`,{className:`flex-1 flex items-center justify-center min-h-0`,children:(0,B.jsx)(`img`,{src:e.imageData,alt:e.prompt,className:`max-w-full max-h-[70vh] lg:max-h-[90vh] object-contain rounded-lg`})}),(0,B.jsxs)(`div`,{className:a(`w-full lg:w-80 flex-shrink-0`,`bg-white dark:bg-dark-100`,`rounded-xl p-4 lg:p-5`,`overflow-y-auto max-h-[25vh] lg:max-h-[90vh]`),children:[(0,B.jsxs)(`div`,{className:`mb-4`,children:[(0,B.jsx)(`h3`,{className:`text-sm font-medium text-gray-500 dark:text-gray-400 mb-1`,children:s(`gallery.prompt`)}),(0,B.jsx)(`p`,{className:`text-gray-900 dark:text-gray-100 text-sm leading-relaxed`,children:e.prompt})]}),(0,B.jsxs)(`div`,{className:`space-y-3 mb-4`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,B.jsx)(o,{className:`h-4 w-4 text-gray-400 dark:text-gray-500`}),(0,B.jsxs)(`span`,{className:`text-gray-500 dark:text-gray-400`,children:[s(`gallery.model`),`:`]}),(0,B.jsx)(`span`,{className:`text-gray-900 dark:text-gray-100`,children:e.model})]}),e.size&&(0,B.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,B.jsx)(f,{className:`h-4 w-4 text-gray-400 dark:text-gray-500`}),(0,B.jsxs)(`span`,{className:`text-gray-500 dark:text-gray-400`,children:[s(`gallery.size`),`:`]}),(0,B.jsx)(`span`,{className:`text-gray-900 dark:text-gray-100`,children:e.size})]}),e.quality&&(0,B.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,B.jsx)(`span`,{className:`w-4 h-4 flex items-center justify-center text-gray-400 dark:text-gray-500 text-xs font-bold`,children:`Q`}),(0,B.jsxs)(`span`,{className:`text-gray-500 dark:text-gray-400`,children:[s(`gallery.quality`),`:`]}),(0,B.jsx)(`span`,{className:`text-gray-900 dark:text-gray-100 capitalize`,children:e.quality})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,B.jsx)(d,{className:`h-4 w-4 text-gray-400 dark:text-gray-500`}),(0,B.jsxs)(`span`,{className:`text-gray-500 dark:text-gray-400`,children:[s(`gallery.created`),`:`]}),(0,B.jsx)(`span`,{className:`text-gray-900 dark:text-gray-100`,children:(e=>new Date(e).toLocaleString(void 0,{year:`numeric`,month:`long`,day:`numeric`,hour:`2-digit`,minute:`2-digit`}))(e.createdAt)})]})]}),(0,B.jsxs)(`div`,{className:`flex gap-2 pt-4 border-t border-gray-200 dark:border-dark-300`,children:[(0,B.jsxs)(`button`,{onClick:()=>{if(r)r(e);else{let t=document.createElement(`a`);t.href=e.imageData,t.download=`generated-${e.id}.${w(e.imageData)}`,document.body.appendChild(t),t.click(),document.body.removeChild(t)}},className:a(`flex-1 flex items-center justify-center gap-2 py-2.5 rounded-lg`,`bg-primary-600 dark:bg-primary-600`,`hover:bg-primary-700 dark:hover:bg-primary-500`,`text-white font-medium text-sm`,`transition-colors`),children:[(0,B.jsx)(u,{className:`h-4 w-4`}),s(`gallery.download`)]}),n&&(0,B.jsx)(`button`,{onClick:()=>n(e.id),className:a(`p-2.5 rounded-lg`,`bg-gray-100 dark:bg-dark-200`,`hover:bg-red-100 dark:hover:bg-red-900/30`,`text-gray-600 dark:text-gray-300`,`hover:text-red-600 dark:hover:text-red-400`,`transition-colors`),title:`Delete image`,children:(0,B.jsx)(g,{className:`h-4 w-4`})})]})]})]})]}),document.body)};function te({kind:e,refreshKey:t,onCountChange:n}){let{t:r}=i(),a=N(),[o,s]=(0,R.useState)(null),[c,d]=(0,R.useState)(null),f=L({queryKey:[`media-gallery`,e||`all`,t||0],queryFn:async({pageParam:t})=>{let n=await x.getGallery({limit:20,offset:t,...e?{kind:e}:{}});if(!n.success||!n.data)throw Error(n.message||r(`imageGallery.loadFailed`));return n.data},initialPageParam:0,getNextPageParam:(e,t)=>{let n=t.reduce((e,t)=>e+t.media.length,0);return n<e.total?n:void 0}}),m=(0,R.useMemo)(()=>f.data?.pages.flatMap(e=>e.media)||[],[f.data]),_=f.data?.pages[0]?.total||0;(0,R.useEffect)(()=>n?.(_),[n,_]);let v=async e=>{if(!c){d(e.id);try{let t=await x.deleteGalleryItem(e.id);if(!t.success)throw Error(t.message);s(null),await a.invalidateQueries({queryKey:[`media-gallery`]}),l.success(r(`imageGallery.deleteSuccess`))}catch{l.error(r(`imageGallery.deleteFailed`))}finally{d(null)}}},y=async e=>{let t=await x.getGalleryContent(e.id),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`generated-${e.id}.${Z(e.mimeType)}`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)};return f.isLoading?(0,B.jsx)(`div`,{className:`flex justify-center py-12`,children:(0,B.jsx)(h,{className:`h-8 w-8 animate-spin text-gray-400`})}):m.length===0?(0,B.jsxs)(`div`,{className:`flex flex-col items-center justify-center rounded-2xl border border-dashed border-gray-300 bg-white/30 px-6 py-12 text-center dark:border-white/15 dark:bg-white/[0.02]`,children:[(0,B.jsx)(p,{className:`mb-4 h-10 w-10 text-gray-300 dark:text-gray-600`}),(0,B.jsx)(`h3`,{className:`text-lg font-medium`,children:r(`mediaGallery.empty`)}),(0,B.jsx)(`p`,{className:`mt-2 max-w-sm text-gray-500 dark:text-gray-400`,children:r(`mediaGallery.emptyHint`)})]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4`,children:m.map(e=>(0,B.jsxs)(`article`,{className:`overflow-hidden rounded-2xl border border-gray-200/80 bg-white/70 dark:border-white/10 dark:bg-white/[0.025]`,children:[(0,B.jsx)(ne,{item:e,onOpenImage:t=>s(X(e,t))}),(0,B.jsxs)(`div`,{className:`space-y-3 p-3`,children:[(0,B.jsx)(`p`,{className:`line-clamp-2 text-sm text-gray-800 dark:text-gray-200`,children:e.prompt}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,B.jsx)(`span`,{className:`min-w-0 truncate text-xs text-gray-500`,children:e.model}),(0,B.jsxs)(`div`,{className:`flex shrink-0 gap-1`,children:[(0,B.jsx)(`button`,{onClick:()=>void y(e),className:`rounded-lg p-1.5 hover:bg-gray-100 dark:hover:bg-white/10`,title:r(`imageGallery.download`),children:(0,B.jsx)(u,{className:`h-4 w-4`})}),(0,B.jsx)(`button`,{onClick:()=>void v(e),disabled:c===e.id,className:`rounded-lg p-1.5 hover:bg-red-500/15 hover:text-red-500`,title:r(`imageGallery.delete`),children:c===e.id?(0,B.jsx)(h,{className:`h-4 w-4 animate-spin`}):(0,B.jsx)(g,{className:`h-4 w-4`})})]})]})]})]},e.id))}),f.hasNextPage&&(0,B.jsx)(`div`,{className:`mt-8 flex justify-center`,children:(0,B.jsx)(D,{variant:`outline`,disabled:f.isFetchingNextPage,onClick:()=>void f.fetchNextPage(),children:f.isFetchingNextPage?r(`common.loading`):r(`imageGallery.loadMore`,{current:m.length,total:_})})}),o&&(0,B.jsx)(Y,{image:o,onClose:()=>s(null),onDelete:e=>{let t=m.find(t=>t.id===e);t&&v(t)},onDownload:e=>{let t=m.find(t=>t.id===e.id);t&&y(t)}})]})}function ne({item:e,onOpenImage:t}){let{data:n,isLoading:r}=j({queryKey:[`media-gallery-content`,e.id],queryFn:()=>x.getGalleryContent(e.id),staleTime:3e5}),i=(0,R.useMemo)(()=>n?URL.createObjectURL(n):``,[n]);return(0,R.useEffect)(()=>()=>{i&&URL.revokeObjectURL(i)},[i]),r||!i?(0,B.jsx)(`div`,{className:`flex aspect-video items-center justify-center bg-gray-100 dark:bg-white/[0.03]`,children:(0,B.jsx)(h,{className:`h-6 w-6 animate-spin text-gray-400`})}):e.kind===`image`?(0,B.jsx)(`button`,{className:`block aspect-square w-full overflow-hidden`,onClick:()=>t(i),children:(0,B.jsx)(`img`,{src:i,alt:e.prompt,className:`h-full w-full object-cover`,loading:`lazy`})}):e.kind===`video`?(0,B.jsx)(`div`,{className:`aspect-video bg-black`,children:(0,B.jsx)(`video`,{src:i,controls:!0,preload:`metadata`,className:`h-full w-full object-contain`})}):(0,B.jsxs)(`div`,{className:`flex min-h-40 flex-col items-center justify-center gap-3 bg-gradient-to-br from-primary-500/10 to-cyan-500/10 p-4`,children:[(0,B.jsx)(v,{className:`h-9 w-9 text-primary-500`}),(0,B.jsx)(`audio`,{src:i,controls:!0,preload:`metadata`,className:`w-full`})]})}function X(e,t){return{id:e.id,userId:e.userId,prompt:e.prompt,model:e.model,imageData:t,size:e.size,quality:e.quality,createdAt:e.createdAt}}function Z(e){let t=e.split(`/`)[1]?.split(`;`)[0];return t===`mpeg`?e.startsWith(`audio/`)?`mp3`:`mpeg`:t===`svg+xml`?`svg`:t||`bin`}var Q=()=>{let{t:e}=i(),[t,n]=(0,R.useState)(null),[r,o]=(0,R.useState)(!1),[c,l]=(0,R.useState)(null),[u,d]=(0,R.useState)(`all`),[f,p]=(0,R.useState)(0),h=E(e=>e.preferences.imageGenSettings?.enabled===!0),g=(0,R.useCallback)(()=>{p(e=>e+1)},[]);return(0,B.jsxs)(O,{width:`wide`,children:[(0,B.jsx)(k,{title:e(`sidebar.navigation.imagine`),description:e(`gallery.subtitle`),meta:t!==null&&t>0?(0,B.jsx)(`span`,{className:`inline-flex rounded-full border border-gray-200/80 bg-white/60 px-2.5 py-1 text-xs text-gray-500 dark:border-white/10 dark:bg-white/[0.04] dark:text-dark-500`,children:e(`mediaGallery.itemCount`,{count:t})}):null,actions:(0,B.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,B.jsxs)(D,{onClick:()=>{h&&o(!0)},disabled:!h,className:`gap-2 px-4`,children:[(0,B.jsx)(m,{className:`h-4 w-4`,"aria-hidden":`true`}),e(`gallery.generate`)]}),(0,B.jsxs)(D,{variant:`outline`,onClick:()=>l(`video`),className:`gap-2 px-4`,children:[(0,B.jsx)(s,{className:`h-4 w-4`,"aria-hidden":`true`}),e(`mediaGeneration.video`)]}),(0,B.jsxs)(D,{variant:`outline`,onClick:()=>l(`audio`),className:`gap-2 px-4`,children:[(0,B.jsx)(v,{className:`h-4 w-4`,"aria-hidden":`true`}),e(`mediaGeneration.audio`)]})]})}),(0,B.jsx)(`div`,{className:`mb-5 flex flex-wrap gap-2`,children:[`all`,`image`,`video`,`audio`].map(t=>(0,B.jsx)(`button`,{type:`button`,onClick:()=>d(t),className:a(`rounded-full border px-3 py-1.5 text-sm transition-colors`,u===t?`border-gray-950 bg-gray-950 text-white dark:border-white dark:bg-white dark:text-gray-950`:`border-gray-200 text-gray-600 hover:border-gray-400 dark:border-white/10 dark:text-dark-600`),children:e(`mediaGallery.filters.${t}`)},t))}),(0,B.jsx)(te,{kind:u===`all`?void 0:u,refreshKey:f,onCountChange:n}),(0,B.jsx)(U,{isOpen:r&&h,onClose:()=>o(!1),onImageGenerated:g}),(0,B.jsx)(G,{isOpen:c!==null,initialKind:c||`video`,onClose:()=>l(null),onGenerated:g},c||`closed`)]})};export{Q as GalleryPage,Q as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/ModelManagerModals-CuMRGUd-.js","js/rolldown-runtime-hePW80VL.js","js/markdown-core-DHnR5Hw8.js","js/react-vendor-DPNXrO-8.js","js/useTranslation-CXY69qNk.js","js/utils-BM0_0iFj.js","js/utils-vendor-1zob7nK9.js","js/ui-vendor-xUzKqAXI.js","js/Button-CTXHujOd.js"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{d as t,f as n}from"./markdown-core-DHnR5Hw8.js";import{i as r}from"./router-vendor-Ca9zqOqT.js";import{t as i}from"./useTranslation-CXY69qNk.js";import{t as a}from"./utils-BM0_0iFj.js";import{A as o,Cn as s,Dt as c,En as l,Gt as u,Kt as d,M as f,Ot as p,P as m,R as h,Rt as ee,Ut as g,Vt as _,Xt as te,Zt as v,_ as ne,bt as y,ct as b,dt as x,it as re,m as S,mt as C,n as ie,on as w,rn as T,sn as E,t as ae,vt as oe,yt as D}from"./ui-vendor-xUzKqAXI.js";import{t as se}from"./logger-DSXjF4ye.js";import{_ as ce,p as O}from"./api-CLEmGcEh.js";import{n as le}from"./authStore-Dh3beEOq.js";import{t as k}from"./Button-CTXHujOd.js";import{n as ue,t as de}from"./ui-BnDZpjfc.js";import{f as A,m as fe}from"../assets/index-BBpNbfKW.js";var j=e(n(),1),M=t();function pe({expanded:e,models:t,search:n,task:r,sort:o,loadingModels:s,canInstallModels:c,expandedModelId:l,loadingGgufModelId:u,ggufFiles:d,pullingModel:f,pullProgress:p,setSearch:ee,setTask:g,setSort:te,onToggle:v,onToggleModel:ne,onPullGguf:y,onCancelPull:x,onRefresh:re}){let{t:S}=i();return(0,M.jsxs)(`div`,{className:a(`overflow-hidden rounded-2xl border`,`bg-white/60 dark:bg-white/[0.03]`,`border-gray-200/80 dark:border-white/10`),children:[(0,M.jsxs)(`button`,{onClick:v,"aria-expanded":e,className:a(`w-full flex items-center justify-between p-4`,`hover:bg-gray-50 dark:hover:bg-dark-50`,`transition-colors`),children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,M.jsx)(ae,{className:`h-4 w-4 text-gray-500 dark:text-dark-500`}),(0,M.jsx)(`h3`,{className:`text-lg font-semibold text-gray-900 dark:text-dark-800`,children:S(`modelManager.sections.huggingface`,`HuggingFace Hub`)}),t.length>0&&(0,M.jsxs)(`span`,{className:a(`px-2 py-0.5 rounded-full text-xs font-medium`,`bg-gray-100 dark:bg-dark-200`,`text-gray-600 dark:text-gray-400`),children:[t.length,` `,S(`modelManager.library.available`,`available`)]})]}),e?(0,M.jsx)(T,{className:`h-5 w-5 text-gray-500`}):(0,M.jsx)(w,{className:`h-5 w-5 text-gray-500`})]}),e&&(0,M.jsxs)(`div`,{className:`p-4 pt-0 space-y-4`,children:[(0,M.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-3`,children:[(0,M.jsxs)(`div`,{className:`relative flex-1`,children:[(0,M.jsx)(m,{className:`absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400 dark:text-gray-500`}),(0,M.jsx)(`input`,{type:`text`,value:n,onChange:e=>ee(e.target.value),placeholder:S(`modelManager.huggingface.search`,`Search HuggingFace models...`),className:a(`w-full rounded-xl border py-2 pe-4 ps-10 text-sm`,`bg-gray-50 dark:bg-dark-50`,`border-gray-200 dark:border-dark-300`,`text-gray-900 dark:text-dark-700`,`placeholder-gray-500 dark:placeholder-gray-400`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`,`focus:border-primary-500`)})]}),(0,M.jsxs)(`select`,{value:r,onChange:e=>g(e.target.value),className:a(`px-3 py-2 rounded-lg border text-sm min-w-[160px]`,`bg-gray-50 dark:bg-dark-50`,`border-gray-200 dark:border-dark-300`,`text-gray-900 dark:text-dark-700`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`),children:[(0,M.jsx)(`option`,{value:`text-generation`,children:S(`modelManager.huggingface.tasks.textGen`,`Text Generation`)}),(0,M.jsx)(`option`,{value:`text-to-speech`,children:S(`modelManager.huggingface.tasks.tts`,`Text to Speech`)}),(0,M.jsx)(`option`,{value:`text-to-image`,children:S(`modelManager.huggingface.tasks.image`,`Text to Image`)}),(0,M.jsx)(`option`,{value:`automatic-speech-recognition`,children:S(`modelManager.huggingface.tasks.stt`,`Speech Recognition`)})]}),(0,M.jsxs)(`select`,{value:o,onChange:e=>te(e.target.value),className:a(`px-3 py-2 rounded-lg border text-sm min-w-[140px]`,`bg-gray-50 dark:bg-dark-50`,`border-gray-200 dark:border-dark-300`,`text-gray-900 dark:text-dark-700`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`),children:[(0,M.jsx)(`option`,{value:`downloads`,children:S(`modelManager.huggingface.sort.downloads`,`Most Downloads`)}),(0,M.jsx)(`option`,{value:`likes`,children:S(`modelManager.huggingface.sort.likes`,`Most Liked`)}),(0,M.jsx)(`option`,{value:`lastModified`,children:S(`modelManager.huggingface.sort.recent`,`Recently Updated`)})]})]}),!c&&(0,M.jsx)(`p`,{className:`text-xs text-ink`,children:S(`modelManager.pull.restricted`)}),s?(0,M.jsx)(`div`,{className:`flex items-center justify-center py-8`,children:(0,M.jsx)(b,{className:`h-5 w-5 animate-spin text-gray-400`})}):t.length===0?(0,M.jsx)(`div`,{className:`text-center py-8 text-gray-500`,children:S(`modelManager.huggingface.noResults`,`No models found. Try adjusting your search or filters.`)}):(0,M.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-3`,children:t.map(e=>(0,M.jsx)(me,{model:e,expanded:l===e.id,loadingGguf:u===e.id,ggufFiles:d[e.id]||[],pullingModel:f,pullProgress:p,canInstallModels:c,onToggle:()=>ne(e.id),onPullGguf:y,onCancelPull:x},e.id))}),(0,M.jsxs)(`div`,{className:`flex items-center justify-between pt-2`,children:[(0,M.jsxs)(`a`,{href:`https://huggingface.co/models`,target:`_blank`,rel:`noopener noreferrer`,className:a(`inline-flex items-center gap-1.5 text-xs`,`text-primary-600 dark:text-primary-400`,`hover:underline`),children:[(0,M.jsx)(_,{className:`h-3 w-3`}),S(`modelManager.huggingface.browseAll`,`Browse all on HuggingFace`)]}),(0,M.jsxs)(k,{onClick:re,variant:`outline`,size:`sm`,disabled:s,className:a(`gap-1.5`,``,``),children:[(0,M.jsx)(h,{className:a(`h-3.5 w-3.5`,s&&`animate-spin`)}),S(`modelManager.library.refresh`,`Refresh`)]})]})]})]})}function me({model:e,expanded:t,loadingGguf:n,ggufFiles:r,pullingModel:o,pullProgress:s,canInstallModels:c,onToggle:l,onPullGguf:u,onCancelPull:d}){let{t:f}=i();return(0,M.jsxs)(`div`,{className:a(`rounded-lg border transition-all overflow-hidden`,`bg-gray-50 dark:bg-dark-50`,`border-gray-200 dark:border-dark-300`,`hover:shadow-md hover:border-gray-300 dark:hover:border-dark-400`),children:[(0,M.jsxs)(`div`,{className:`p-4 cursor-pointer`,onClick:l,children:[(0,M.jsxs)(`div`,{className:`flex items-start justify-between gap-2 mb-2`,children:[(0,M.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`h4`,{className:`font-medium text-gray-900 dark:text-dark-800 truncate`,children:e.id}),e.gated&&(0,M.jsx)(`span`,{className:a(`px-1.5 py-0.5 rounded text-xs`,`bg-yellow-500/20 dark:bg-yellow-900/30`,`text-ink`),children:f(`modelManager.huggingface.gated`,`Gated`)})]}),(0,M.jsxs)(`p`,{className:`text-xs text-gray-500 dark:text-dark-600 mt-0.5`,children:[f(`modelManager.huggingface.by`,`by`),` `,e.author]})]}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2 flex-shrink-0`,children:[(0,M.jsx)(`a`,{href:`https://huggingface.co/${e.id}`,target:`_blank`,rel:`noopener noreferrer`,onClick:e=>e.stopPropagation(),className:`p-1.5 rounded-lg hover:bg-gray-200 dark:hover:bg-dark-300 transition-colors`,title:f(`modelManager.huggingface.viewOnHF`,`View on HuggingFace`),children:(0,M.jsx)(_,{className:`h-4 w-4 text-gray-400 dark:text-gray-500`})}),(0,M.jsx)(w,{className:a(`h-4 w-4 text-gray-400 transition-transform`,t&&`rotate-180`)})]})]}),(0,M.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-gray-500 dark:text-dark-600`,children:[(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,M.jsx)(g,{className:`h-3.5 w-3.5`}),he(e.downloads)]}),(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,M.jsx)(oe,{className:`h-3.5 w-3.5`}),he(e.likes)]}),e.pipeline_tag&&(0,M.jsx)(`span`,{className:a(`px-1.5 py-0.5 rounded`,`bg-gray-200 dark:bg-dark-300`),children:e.pipeline_tag})]})]}),t&&(0,M.jsx)(N,{modelId:e.id,loading:n,files:r,pullingModel:o,pullProgress:s,canInstallModels:c,onPullGguf:u,onCancelPull:d})]})}function N({modelId:e,loading:t,files:n,pullingModel:r,pullProgress:a,canInstallModels:o,onPullGguf:s,onCancelPull:c}){let{t:l}=i();return(0,M.jsx)(`div`,{className:`px-4 pb-4 pt-1 border-t border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100`,children:t?(0,M.jsxs)(`div`,{className:`flex items-center justify-center py-4`,children:[(0,M.jsx)(b,{className:`h-4 w-4 animate-spin text-gray-400`}),(0,M.jsx)(`span`,{className:`ml-2 text-xs text-gray-500`,children:l(`modelManager.huggingface.checkingGguf`)})]}):n.length===0?(0,M.jsx)(`div`,{className:`py-4 text-center text-xs text-gray-500 dark:text-gray-400`,children:l(`modelManager.huggingface.noGgufAvailable`)}):(0,M.jsxs)(`div`,{className:`space-y-2`,children:[(0,M.jsx)(`div`,{className:`text-xs font-medium text-gray-600 dark:text-gray-300 mb-2`,children:l(`modelManager.huggingface.ggufFilesCount`,{count:n.length})}),n.map(e=>(0,M.jsx)(P,{file:e,pulling:r===e.ollamaCommand,pullProgress:a,canInstallModels:o,disabled:!!r||!o,onPullGguf:s,onCancelPull:c},e.filename)),r?.startsWith(`hf.co/`)&&r.includes(e)&&a?.percent!==void 0&&(0,M.jsx)(`div`,{className:`w-full bg-gray-200 dark:bg-dark-300 rounded-full h-1.5 overflow-hidden mt-2`,children:(0,M.jsx)(`div`,{className:`h-1.5 rounded-full bg-primary-500 transition-all duration-300`,style:{width:`${a.percent}%`}})})]})})}function P({file:e,pulling:t,disabled:n,pullProgress:r,onPullGguf:o,onCancelPull:s}){let{t:c}=i();return(0,M.jsxs)(`div`,{className:`flex items-center gap-2 p-2 rounded-lg bg-gray-50 dark:bg-dark-50 border border-gray-200 dark:border-dark-300`,children:[(0,M.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,M.jsx)(`div`,{className:`text-xs font-medium text-gray-800 dark:text-gray-200 truncate`,children:e.filename}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400`,children:[(0,M.jsx)(`span`,{children:e.sizeFormatted}),e.quantization&&(0,M.jsx)(`span`,{className:`px-1.5 py-0.5 rounded bg-purple-100 dark:bg-purple-900/30 text-purple-700 dark:text-purple-400`,children:e.quantization})]})]}),t?(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`div`,{className:`text-xs text-gray-500 w-12 text-right`,children:r?.percent===void 0?`...`:`${r.percent}%`}),(0,M.jsx)(`button`,{onClick:e=>{e.stopPropagation(),s()},className:`p-1.5 rounded-lg text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20`,children:(0,M.jsx)(ie,{className:`h-4 w-4`})})]}):(0,M.jsxs)(`button`,{onClick:t=>{t.stopPropagation(),o(e.ollamaCommand,e.filename)},disabled:n,className:a(`px-3 py-1.5 rounded-lg text-xs font-medium`,`bg-primary-100 dark:bg-primary-900/30`,`text-primary-700 dark:text-primary-400`,`hover:bg-primary-200 dark:hover:bg-primary-900/50`,`disabled:opacity-50 disabled:cursor-not-allowed`),children:[(0,M.jsx)(g,{className:`h-3 w-3 inline mr-1`}),c(`models.pull`)]})]})}function he(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:e}function ge({expanded:e,models:t,onToggle:n,isModelRunning:r,formatSize:o,onShowModel:s,onCopyModel:c,onDeleteModel:l}){let{t:u}=i();return(0,M.jsxs)(`div`,{className:a(`overflow-hidden rounded-2xl border`,`bg-white/60 dark:bg-white/[0.03]`,`border-gray-200/80 dark:border-white/10`),children:[(0,M.jsxs)(`button`,{onClick:n,"aria-expanded":e,className:a(`w-full flex items-center justify-between p-4`,`hover:bg-gray-50 dark:hover:bg-dark-50`,`transition-colors`),children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,M.jsx)(y,{className:`h-4 w-4 text-gray-500 dark:text-dark-500`}),(0,M.jsx)(`h3`,{className:`text-lg font-semibold text-gray-900 dark:text-dark-800`,children:u(`modelManager.sections.local`)}),(0,M.jsxs)(`span`,{className:a(`px-2 py-0.5 rounded-full text-xs font-medium`,`bg-gray-100 dark:bg-dark-200`,`text-gray-600 dark:text-gray-400`),children:[t.length,` `,u(`modelManager.local.installed`)]})]}),e?(0,M.jsx)(T,{className:`h-5 w-5 text-gray-500`}):(0,M.jsx)(w,{className:`h-5 w-5 text-gray-500`})]}),e&&(0,M.jsx)(`div`,{className:`p-4 pt-0`,children:t.length===0?(0,M.jsxs)(`div`,{className:a(`text-center py-12 rounded-lg border-2 border-dashed`,`border-gray-200 dark:border-dark-300`),children:[(0,M.jsx)(y,{className:`h-12 w-12 mx-auto mb-3 text-gray-300 dark:text-gray-600`}),(0,M.jsx)(`p`,{className:`text-gray-600 dark:text-dark-600 mb-2`,children:u(`modelManager.local.noModels`)}),(0,M.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-500`,children:u(`modelManager.local.pullToStart`)})]}):(0,M.jsx)(`div`,{className:`space-y-3`,children:t.map(e=>(0,M.jsx)(_e,{model:e,running:r(e.name),formatSize:o,onShowModel:s,onCopyModel:c,onDeleteModel:l},e.name))})})]})}function _e({model:e,running:t,formatSize:n,onShowModel:r,onCopyModel:o,onDeleteModel:s}){let{t:c}=i();return(0,M.jsx)(`div`,{className:a(`p-4 rounded-lg border transition-colors`,`bg-gray-50 dark:bg-dark-50`,`border-gray-200 dark:border-dark-300`,`hover:bg-gray-100 dark:hover:bg-dark-200`),children:(0,M.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,M.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,M.jsx)(`h4`,{className:`font-medium text-gray-900 dark:text-dark-800`,children:e.name}),t&&(0,M.jsxs)(`span`,{className:a(`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium`,`bg-green-100 dark:bg-green-900/30`,`text-green-700 dark:text-green-400`),children:[(0,M.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-green-500 animate-pulse`}),c(`modelManager.local.running`)]})]}),(0,M.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1 text-sm text-gray-600 dark:text-dark-600 mt-2`,children:[(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,M.jsx)(y,{className:`h-3.5 w-3.5`}),n(e.size)]}),e.details?.parameter_size&&(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,M.jsx)(u,{className:`h-3.5 w-3.5`}),e.details.parameter_size]}),e.details?.quantization_level&&(0,M.jsx)(`span`,{className:a(`px-1.5 py-0.5 rounded text-xs`,`bg-gray-200 dark:bg-dark-300`,`text-gray-600 dark:text-gray-400`),children:e.details.quantization_level}),e.details?.family&&(0,M.jsx)(`span`,{className:`text-gray-500 dark:text-gray-500`,children:e.details.family})]}),(0,M.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-gray-400 dark:text-dark-500 mt-2`,children:[(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,M.jsx)(v,{className:`h-3 w-3`}),new Date(e.modified_at).toLocaleDateString()]}),(0,M.jsxs)(`span`,{className:`flex items-center gap-1 font-mono truncate max-w-[200px]`,title:e.digest,children:[(0,M.jsx)(D,{className:`h-3 w-3`}),e.digest.slice(0,12),`...`]})]})]}),(0,M.jsxs)(`div`,{className:`flex gap-2 flex-shrink-0`,children:[(0,M.jsxs)(k,{onClick:()=>r(e.name),variant:`outline`,size:`sm`,className:a(`gap-1.5`,``,``),children:[(0,M.jsx)(C,{className:`h-3.5 w-3.5`}),c(`modelManager.local.info`)]}),(0,M.jsxs)(k,{onClick:()=>o(e.name),variant:`outline`,size:`sm`,className:a(`gap-1.5`,``,``),children:[(0,M.jsx)(d,{className:`h-3.5 w-3.5`}),c(`modelManager.local.copy`)]}),(0,M.jsxs)(k,{onClick:()=>s(e.name),variant:`outline`,size:`sm`,className:a(`gap-1.5`,`text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300`,``,``),children:[(0,M.jsx)(S,{className:`h-3.5 w-3.5`}),c(`modelManager.local.delete`)]})]})]})})}function ve({expanded:e,models:t,totalAvailable:n,categories:r,filter:o,search:s,loading:c,pulling:l,canInstallModels:u,pullSectionExpanded:d,setFilter:f,setSearch:ee,isModelInstalled:g,normalizeCloudPullName:_,onToggle:v,onTogglePullSection:ne,onPullModel:y,onRefresh:b}){let{t:x}=i();return(0,M.jsxs)(`div`,{className:a(`overflow-hidden rounded-2xl border`,`bg-white/60 dark:bg-white/[0.03]`,`border-gray-200/80 dark:border-white/10`),children:[(0,M.jsxs)(`button`,{onClick:v,"aria-expanded":e,className:a(`w-full flex items-center justify-between p-4`,`hover:bg-gray-50 dark:hover:bg-dark-50`,`transition-colors`),children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,M.jsx)(te,{className:`h-4 w-4 text-gray-500 dark:text-dark-500`}),(0,M.jsx)(`h3`,{className:`text-lg font-semibold text-gray-900 dark:text-dark-800`,children:x(`modelManager.sections.library`)}),(0,M.jsxs)(`span`,{className:a(`px-2 py-0.5 rounded-full text-xs font-medium`,`bg-gray-100 dark:bg-dark-200`,`text-gray-600 dark:text-gray-400`),children:[n,` `,x(`modelManager.library.available`)]})]}),e?(0,M.jsx)(T,{className:`h-5 w-5 text-gray-500`}):(0,M.jsx)(w,{className:`h-5 w-5 text-gray-500`})]}),e&&(0,M.jsxs)(`div`,{className:`p-4 pt-0 space-y-4`,children:[(0,M.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-3`,children:[(0,M.jsxs)(`div`,{className:`relative flex-1`,children:[(0,M.jsx)(m,{className:`absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400 dark:text-gray-500`}),(0,M.jsx)(`input`,{type:`text`,value:s,onChange:e=>ee(e.target.value),placeholder:x(`modelManager.library.search`),className:a(`w-full rounded-xl border py-2 pe-4 ps-10 text-sm`,`bg-gray-50 dark:bg-dark-50`,`border-gray-200 dark:border-dark-300`,`text-gray-900 dark:text-dark-700`,`placeholder-gray-500 dark:placeholder-gray-400`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`,`focus:border-primary-500`)})]}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(p,{className:`h-4 w-4 text-gray-400`}),(0,M.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:r.map(e=>(0,M.jsx)(`button`,{onClick:()=>f(e),className:a(`px-2.5 py-1 rounded-full text-xs font-medium transition-colors`,o===e?`bg-primary-100 dark:bg-primary-900/30 text-primary-700 dark:text-primary-400`:`bg-gray-100 dark:bg-dark-200 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-dark-300`),children:e.charAt(0).toUpperCase()+e.slice(1)},e))})]})]}),c?(0,M.jsx)(`div`,{className:`flex items-center justify-center py-8`,children:(0,M.jsx)(h,{className:`h-5 w-5 animate-spin text-gray-400`})}):t.length===0?(0,M.jsx)(`div`,{className:`text-center py-8 text-gray-500`,children:x(`modelManager.library.noResults`)}):(0,M.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3`,children:t.map(e=>{let t=e.category===`cloud`?_(e.name):e.name,n=g(e.name)||g(t);return(0,M.jsx)(ye,{model:e,installed:n,pulling:l,canInstallModels:u,pullSectionExpanded:d,onTogglePullSection:ne,onPullModel:y},e.name)})}),(0,M.jsx)(`div`,{className:`flex justify-center`,children:(0,M.jsxs)(k,{onClick:b,variant:`outline`,size:`sm`,disabled:c,className:a(`gap-1.5`,``,``),children:[(0,M.jsx)(h,{className:a(`h-3.5 w-3.5`,c&&`animate-spin`)}),x(`modelManager.library.refresh`)]})})]})]})}function ye({model:e,installed:t,pulling:n,canInstallModels:r,pullSectionExpanded:o,onTogglePullSection:s,onPullModel:c}){let{t:l}=i();return(0,M.jsxs)(`div`,{"data-testid":`library-model-card-${e.name}`,className:a(`p-4 rounded-lg border transition-all`,`bg-gray-50 dark:bg-dark-50`,t?`border-green-200 dark:border-green-800/50`:`border-gray-200 dark:border-dark-300`,`hover:shadow-md hover:border-gray-300 dark:hover:border-dark-400`),children:[(0,M.jsxs)(`div`,{className:`flex items-start justify-between gap-2 mb-2`,children:[(0,M.jsx)(`h4`,{className:`font-medium text-gray-900 dark:text-dark-800`,children:e.name}),t&&(0,M.jsxs)(`span`,{className:a(`flex items-center gap-1 px-1.5 py-0.5 rounded text-xs`,`bg-green-100 dark:bg-green-900/30`,`text-green-700 dark:text-green-400`),children:[(0,M.jsx)(E,{className:`h-3 w-3`}),l(`modelManager.library.installed`)]})]}),(0,M.jsx)(`p`,{className:`text-xs text-gray-600 dark:text-dark-600 mb-3 line-clamp-2`,children:e.description}),(0,M.jsxs)(`div`,{className:`flex flex-wrap gap-1.5 mb-3`,children:[e.sizes.slice(0,4).map(e=>(0,M.jsx)(`span`,{className:a(`px-1.5 py-0.5 rounded text-xs`,`bg-gray-200 dark:bg-dark-300`,`text-gray-600 dark:text-gray-400`),children:e},e)),e.sizes.length>4&&(0,M.jsx)(`span`,{className:`text-xs text-gray-400`,children:l(`modelManager.library.more`,{count:e.sizes.length-4})})]}),(0,M.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-gray-500`,children:[e.pulls&&(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,M.jsx)(g,{className:`h-3 w-3`}),e.pulls]}),(0,M.jsx)(`span`,{className:a(`px-1.5 py-0.5 rounded capitalize`,e.category===`cloud`?`bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-400`:`bg-gray-100 dark:bg-dark-200`),children:e.category})]}),(0,M.jsxs)(k,{"data-testid":`library-model-install-${e.name}`,onClick:()=>{o||s(),c(e.name,e.category)},variant:`outline`,size:`sm`,disabled:n||!r,className:a(`gap-1 text-xs`,``,``),children:[(0,M.jsx)(g,{className:`h-3 w-3`}),l(`modelManager.pull.button`)]})]})]})}function be({expanded:e,modelName:t,setModelName:n,pulling:r,progress:o,canInstallModels:s,popularModels:c,onToggle:l,onPull:u,onCancelPull:d,formatSize:f}){let{t:p}=i();return(0,M.jsxs)(`div`,{className:a(`overflow-hidden rounded-2xl border`,`bg-white/60 dark:bg-white/[0.03]`,`border-gray-200/80 dark:border-white/10`),children:[(0,M.jsxs)(`button`,{onClick:l,"aria-expanded":e,className:a(`w-full flex items-center justify-between p-4`,`hover:bg-gray-50 dark:hover:bg-dark-50`,`transition-colors`),children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,M.jsx)(g,{className:`h-4 w-4 text-primary-600 dark:text-primary-400`}),(0,M.jsx)(`h3`,{className:`text-lg font-semibold text-gray-900 dark:text-dark-800`,children:p(`modelManager.sections.pull`)})]}),e?(0,M.jsx)(T,{className:`h-5 w-5 text-gray-500`}):(0,M.jsx)(w,{className:`h-5 w-5 text-gray-500`})]}),e&&(0,M.jsxs)(`div`,{className:`p-4 pt-0 space-y-4`,children:[(0,M.jsxs)(`div`,{className:`flex gap-2`,children:[(0,M.jsxs)(`div`,{className:`relative flex-1`,children:[(0,M.jsx)(m,{className:`absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400 dark:text-gray-500`}),(0,M.jsx)(`input`,{type:`text`,value:t,onChange:e=>n(e.target.value),placeholder:p(`modelManager.pull.placeholder`),className:a(`w-full rounded-xl border py-2.5 pe-4 ps-10 text-sm`,`bg-gray-50 dark:bg-dark-50`,`border-gray-200 dark:border-dark-300`,`text-gray-900 dark:text-dark-700`,`placeholder-gray-500 dark:placeholder-gray-400`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`,`focus:border-primary-500`),disabled:r||!s,onKeyDown:e=>{e.key===`Enter`&&!r&&s&&u()}})]}),r?(0,M.jsxs)(k,{onClick:d,variant:`outline`,className:a(`px-4 py-2.5 gap-2`,`text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300`,``,``),children:[(0,M.jsx)(ie,{className:`h-4 w-4`}),p(`modelManager.pull.cancel`)]}):(0,M.jsxs)(k,{onClick:u,disabled:!t.trim()||!s,className:a(`px-4 py-2.5 gap-2`,``),children:[(0,M.jsx)(g,{className:`h-4 w-4`}),p(`modelManager.pull.button`)]})]}),r&&o&&(0,M.jsx)(F,{progress:o,formatSize:f}),!s&&(0,M.jsx)(`p`,{className:`text-xs text-ink-muted`,children:p(`modelManager.pull.restricted`)}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`p`,{className:`text-xs font-medium text-gray-500 dark:text-gray-400 mb-2`,children:p(`modelManager.pull.popular`)}),(0,M.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:c.map(e=>(0,M.jsxs)(`button`,{onClick:()=>n(e.name),disabled:r||!s,className:a(`px-3 py-1.5 rounded-full text-xs font-medium transition-colors`,`bg-gray-100 dark:bg-dark-200`,`text-gray-700 dark:text-gray-300`,`hover:bg-gray-200 dark:hover:bg-dark-300`,`border border-gray-200 dark:border-dark-300`,`disabled:opacity-50 disabled:cursor-not-allowed`),children:[e.name,(0,M.jsx)(`span`,{className:`ml-1 text-gray-400 dark:text-gray-500`,children:e.size})]},e.name))})]}),(0,M.jsxs)(`a`,{href:`https://ollama.com/library`,target:`_blank`,rel:`noopener noreferrer`,className:a(`inline-flex items-center gap-1.5 text-xs`,`text-primary-600 dark:text-primary-400`,`hover:underline`),children:[(0,M.jsx)(_,{className:`h-3 w-3`}),p(`modelManager.pull.browseAll`)]})]})]})}function F({progress:e,formatSize:t}){let{t:n}=i(),r=e.status===`starting`?n(`modelManager.progress.starting`):e.status.startsWith(`pulling`)?`${n(`modelManager.progress.pullingLayer`)} ${e.status.replace(`pulling `,``)}`:e.status.startsWith(`verifying sha256`)?n(`modelManager.progress.verifyingDigest`):e.status===`writing manifest`?n(`modelManager.progress.writing`):e.status===`removing any unused layers`?n(`modelManager.progress.cleaning`):e.status;return(0,M.jsxs)(`div`,{className:a(`p-4 rounded-lg border`,`bg-gray-50 dark:bg-dark-200`,`border-gray-200 dark:border-dark-300`),children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,M.jsx)(`span`,{className:`text-sm font-medium text-gray-800 dark:text-dark-700`,children:r}),e.percent!==void 0&&(0,M.jsxs)(`span`,{className:`text-sm font-mono text-gray-600 dark:text-dark-600`,children:[e.percent,`%`]})]}),e.percent!==void 0&&(0,M.jsx)(`div`,{className:`w-full bg-gray-200 dark:bg-dark-400 rounded-full h-2 overflow-hidden`,children:(0,M.jsx)(`div`,{className:a(`h-2 rounded-full transition-all duration-300`,`bg-primary-500 dark:bg-primary-400`),style:{width:`${e.percent}%`}})}),e.total&&e.completed&&(0,M.jsxs)(`div`,{className:`mt-2 text-xs text-gray-600 dark:text-dark-600`,children:[t(e.completed),` / `,t(e.total)]})]})}var xe=se(`components:model-manager`),Se=j.lazy(()=>r(()=>import(`./ModelManagerModals-CuMRGUd-.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))),I=e=>{let t=e.split(`:`).pop()?.toLowerCase();return t===`cloud`||t?.endsWith(`-cloud`)===!0},Ce=e=>{let t=e.trim();if(!t||I(t))return t;let n=t.lastIndexOf(`:`);return n===-1?`${t}:cloud`:`${t.slice(0,n)}:${t.slice(n+1)}-cloud`},L=()=>{let{t:e}=i(),{user:t,systemInfo:n}=le(),{data:r}=A({queryKey:[`model-download-access`],queryFn:async()=>{let e=await O.getModelAccess();return e.success&&e.data?e.data:null},staleTime:6e4}),u=t?.role===`admin`||n?.requiresAuth===!1||r?.allowed===!0,p=fe(),[m,g]=(0,j.useState)(`all`),[_,te]=(0,j.useState)(``),[v,b]=(0,j.useState)(``),[S,C]=(0,j.useState)(!1),[ie,E]=(0,j.useState)(null),[oe,D]=(0,j.useState)(null),[se,ue]=(0,j.useState)(null),[de,me]=(0,j.useState)(``),[N,P]=(0,j.useState)(!1),[he,_e]=(0,j.useState)(!1),[ye,F]=(0,j.useState)(!1),[I,L]=(0,j.useState)(``),[R,we]=(0,j.useState)(``),[Te,Ee]=(0,j.useState)(!1),[De,Oe]=(0,j.useState)(!1),[z,ke]=(0,j.useState)(``),[Ae,je]=(0,j.useState)(``),[Me,Ne]=(0,j.useState)(!1),[Pe,Fe]=(0,j.useState)(!1),[Ie,Le]=(0,j.useState)(``),[Re,ze]=(0,j.useState)(``),[Be,Ve]=(0,j.useState)(null),[He,Ue]=(0,j.useState)(!1),[We,Ge]=(0,j.useState)(``),[Ke,qe]=(0,j.useState)(``),[B,Je]=(0,j.useState)(`text-generation`),[V,Ye]=(0,j.useState)(`downloads`),[Xe,Ze]=(0,j.useState)(null),[Qe,$e]=(0,j.useState)({}),[et,tt]=(0,j.useState)(null),[nt,H]=(0,j.useState)(null),[rt,U]=(0,j.useState)(null),[it,W]=(0,j.useState)(null),[G,at]=(0,j.useState)(new Set([`pull`,`local`])),K=e=>{at(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},{data:q,isLoading:ot,refetch:J}=A({queryKey:[`ollama-state`],queryFn:async()=>{let[e,t,n,r]=await Promise.all([O.getModels(),O.listRunningModels(),O.getVersion(),O.checkHealth()]);return{models:e.success&&e.data||[],runningModels:t.success&&Array.isArray(t.data)?t.data:[],ollamaVersion:n.success&&n.data?n.data.version:null,isHealthy:r.success}}}),Y=q?.models??[],X=q?.runningModels??[],st=q?.ollamaVersion??null,ct=q?.isHealthy??null,Z=(0,j.useCallback)(async()=>{await J()},[J]),{data:Q=[],isLoading:lt}=A({queryKey:[`ollama-library`],queryFn:async()=>{let e=await O.getLibraryModels();return e.success&&e.data?e.data:[]}}),{data:ut=[],isLoading:dt}=A({queryKey:[`ollama-library`,`cloud`],queryFn:async()=>{let e=await O.getLibraryModels({category:`cloud`});return e.success&&e.data?e.data:[]},enabled:m===`cloud`}),ft=()=>p.invalidateQueries({queryKey:[`ollama-library`]});(0,j.useEffect)(()=>{let e=setTimeout(()=>{qe(We)},300);return()=>clearTimeout(e)},[We]);let pt=G.has(`huggingface`),{data:mt=[],isLoading:ht}=A({queryKey:[`hf-models`,B,Ke,V],queryFn:async()=>{let e=await ce.getModels({task:B,search:Ke||void 0,sort:V,limit:30});return e.success&&e.data?e.data:[]},enabled:pt}),gt=()=>p.invalidateQueries({queryKey:[`hf-models`,B,Ke,V]}),_t=(0,j.useCallback)(async e=>{let[t,n]=e.split(`/`);if(!(!t||!n)){tt(e);try{let r=await ce.getGgufFiles(t,n);r.success&&r.data&&$e(t=>({...t,[e]:r.data}))}catch(e){xe.error(`Failed to load GGUF files:`,e)}finally{tt(null)}}},[]),vt=(0,j.useCallback)(e=>{Xe===e?Ze(null):(Ze(e),Qe[e]||_t(e))},[Xe,Qe,_t]),yt=(0,j.useCallback)((t,n)=>{if(!u){l.error(e(`modelManager.pull.restricted`));return}if(!nt){H(t),U({status:`starting`});try{let e=O.pullModelStream(t,e=>{U(e)},()=>{U(null),H(null),W(null),l.success(`Downloaded ${n}`),Z()},e=>{U(null),H(null),W(null),l.error(`Failed to download: ${e}`)});W(()=>e)}catch{U(null),H(null),l.error(`Failed to start download`)}}},[u,nt,Z,e]),bt=(0,j.useCallback)(()=>{it&&(it(),W(null),H(null),U(null))},[it]),xt=async(t,n)=>{if(!u){l.error(e(`modelManager.pull.restricted`));return}let r=t||v.trim(),i=n===`cloud`||!t&&m===`cloud`?Ce(r):r;if(!i){l.error(e(`modelManager.pull.enterName`));return}t&&b(i),C(!0),E({status:`starting`});try{let t=O.pullModelStream(i,e=>{E(e)},()=>{E(null),C(!1),D(null),l.success(e(`modelManager.pull.success`,{name:i})),b(``),Z()},t=>{E(null),C(!1),D(null),l.error(e(`modelManager.pull.failed`)+`: `+t)});D(()=>t)}catch(t){let n=t instanceof Error?t.message:String(t);l.error(e(`modelManager.pull.failed`)+`: `+n),E(null),C(!1),D(null)}},St=()=>{oe&&(oe(),D(null),C(!1),E(null),l.success(e(`modelManager.pull.cancelled`)))},Ct=async t=>{if(confirm(e(`modelManager.local.deleteConfirm`,{name:t})))try{await O.deleteModel(t),l.success(e(`modelManager.local.deleteSuccess`,{name:t})),await Z()}catch(t){let n=t instanceof Error?t.message:String(t);l.error(e(`modelManager.local.deleteFailed`)+`: `+n)}},wt=async t=>{_e(!0),me(t),P(!0);try{let n=await O.showModel(t,!0);n.success&&n.data?ue(n.data):l.error(e(`modelManager.modals.details.noDetails`))}catch(t){let n=t instanceof Error?t.message:String(t);l.error(e(`modelManager.modals.details.noDetails`)+`: `+n)}finally{_e(!1)}},Tt=async()=>{if(!I.trim()||!R.trim()){l.error(e(`modelManager.modals.copy.enterBoth`));return}Ee(!0);try{await O.copyModel(I.trim(),R.trim()),l.success(e(`modelManager.modals.copy.success`,{name:R})),F(!1),L(``),we(``),await Z()}catch(t){let n=t instanceof Error?t.message:String(t);l.error(e(`modelManager.modals.copy.failed`)+`: `+n)}finally{Ee(!1)}},Et=async()=>{if(!z.trim()||!Ae.trim()){l.error(e(`modelManager.modals.create.enterBoth`));return}Ne(!0);try{await O.createModel({model:z.trim(),modelfile:Ae.trim()}),l.success(e(`modelManager.modals.create.success`,{name:z})),Oe(!1),ke(``),je(``),await Z()}catch(t){let n=t instanceof Error?t.message:String(t);l.error(e(`modelManager.modals.create.failed`)+`: `+n)}finally{Ne(!1)}},Dt=async()=>{if(!Ie.trim()||!Re.trim()){l.error(e(`modelManager.modals.embeddings.enterBoth`));return}Ue(!0),Ve(null);try{let t=await O.generateEmbeddings({model:Ie.trim(),input:Re.trim()});if(t.success&&t.data){let n=t.data.embeddings?.[0]||[];Ve(n),l.success(e(`modelManager.modals.embeddings.success`,{count:n.length}))}}catch(t){let n=t instanceof Error?t.message:String(t);l.error(e(`modelManager.modals.embeddings.failed`)+`: `+n)}finally{Ue(!1)}},$=e=>{let t=e/1073741824;return t>=1?`${t.toFixed(2)} GB`:`${(e/1048576).toFixed(1)} MB`},Ot=e=>Array.isArray(X)&&X.some(t=>t.name===e),kt=()=>Y.reduce((e,t)=>e+t.size,0),At=()=>X.reduce((e,t)=>e+(t.size_vram||0),0),jt=e=>Y.some(t=>t.name===e||t.name.startsWith(e+`:`)),Mt=(m===`cloud`?ut:Q).filter(e=>{let t=m===`all`||m===`cloud`||e.category===m,n=!_||e.name.toLowerCase().includes(_.toLowerCase())||e.description.toLowerCase().includes(_.toLowerCase());return t&&n}),Nt=[`all`,...new Set([...Q.map(e=>e.category),`cloud`])],Pt=(0,j.useMemo)(()=>Q.length>0?Q.slice(0,10).map(e=>({name:e.name,category:e.category,size:e.sizes?.[0]||``})):[{name:`deepseek-r1`,category:`reasoning`,size:`7B`},{name:`llama3.2`,category:`general`,size:`3B`},{name:`gemma3`,category:`general`,size:`4B`},{name:`qwen2.5`,category:`general`,size:`7B`},{name:`mistral`,category:`general`,size:`7B`},{name:`codellama`,category:`coding`,size:`7B`},{name:`nomic-embed-text`,category:`embedding`,size:`137M`},{name:`llava`,category:`vision`,size:`7B`},{name:`phi3`,category:`general`,size:`3.8B`},{name:`gemma2`,category:`general`,size:`9B`}],[Q]),Ft=N||ye||De||Pe;return ot?(0,M.jsx)(`div`,{className:`flex items-center justify-center p-8`,children:(0,M.jsxs)(`div`,{className:`flex items-center gap-3 text-gray-600 dark:text-dark-600`,children:[(0,M.jsx)(h,{className:`h-5 w-5 animate-spin`}),e(`modelManager.loading`)]})}):(0,M.jsxs)(`div`,{className:`space-y-4`,children:[(0,M.jsx)(`div`,{className:a(`rounded-2xl border px-4 py-3`,`bg-white/60 dark:bg-white/[0.03]`,`border-gray-200/80 dark:border-white/10`),children:(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-4`,children:[(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-6 gap-y-2`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`div`,{className:a(`w-2.5 h-2.5 rounded-full`,ct?`bg-green-500`:`bg-red-500`)}),(0,M.jsx)(`span`,{className:`text-sm font-medium text-gray-700 dark:text-gray-300`,children:e(ct?`modelManager.systemStatus.online`:`modelManager.systemStatus.offline`)})]}),st&&(0,M.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400`,children:[(0,M.jsx)(f,{className:`h-4 w-4`}),(0,M.jsxs)(`span`,{children:[`v`,st]})]}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400`,children:[(0,M.jsx)(y,{className:`h-4 w-4`}),(0,M.jsxs)(`span`,{children:[Y.length,` `,Y.length===1?e(`modelManager.systemStatus.models`):e(`modelManager.systemStatus.models_plural`)]})]}),(0,M.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400`,children:[(0,M.jsx)(x,{className:`h-4 w-4`}),(0,M.jsx)(`span`,{children:$(kt())})]}),X.length>0&&(0,M.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-green-600 dark:text-green-400`,children:[(0,M.jsx)(s,{className:`h-4 w-4`}),(0,M.jsxs)(`span`,{children:[X.length,` `,e(`modelManager.systemStatus.running`),` (`,$(At()),` `,e(`modelManager.systemStatus.vram`),`)`]})]})]}),(0,M.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,M.jsxs)(k,{onClick:Z,variant:`outline`,size:`sm`,className:a(`gap-1.5`,``,``),children:[(0,M.jsx)(h,{className:`h-3.5 w-3.5`}),e(`common.refresh`)]})})]})}),(0,M.jsx)(be,{expanded:G.has(`pull`),modelName:v,setModelName:b,pulling:S,progress:ie,canInstallModels:u,popularModels:Pt,onToggle:()=>K(`pull`),onPull:()=>xt(),onCancelPull:St,formatSize:$}),(0,M.jsx)(ve,{expanded:G.has(`library`),models:Mt,totalAvailable:Q.length,categories:Nt,filter:m,search:_,loading:lt||dt,pulling:S,canInstallModels:u,pullSectionExpanded:G.has(`pull`),setFilter:g,setSearch:te,isModelInstalled:jt,normalizeCloudPullName:Ce,onToggle:()=>K(`library`),onTogglePullSection:()=>K(`pull`),onPullModel:xt,onRefresh:ft}),(0,M.jsx)(pe,{expanded:G.has(`huggingface`),models:mt,search:We,task:B,sort:V,loadingModels:ht,canInstallModels:u,expandedModelId:Xe,loadingGgufModelId:et,ggufFiles:Qe,pullingModel:nt,pullProgress:rt,setSearch:Ge,setTask:Je,setSort:Ye,onToggle:()=>K(`huggingface`),onToggleModel:vt,onPullGguf:yt,onCancelPull:bt,onRefresh:gt}),Array.isArray(X)&&X.length>0&&(0,M.jsxs)(`div`,{className:a(`rounded-2xl border p-4`,`bg-white/60 dark:bg-white/[0.03]`,`border-gray-200/80 dark:border-white/10`),children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-3 mb-4`,children:[(0,M.jsx)(s,{className:`h-4 w-4 text-gray-500 dark:text-dark-500`}),(0,M.jsx)(`h3`,{className:`text-lg font-semibold text-gray-900 dark:text-dark-800`,children:e(`modelManager.sections.running`)}),(0,M.jsxs)(`span`,{className:a(`ms-auto rounded-full px-2 py-0.5 text-xs font-medium`,`border border-gray-200 bg-gray-50 dark:border-white/10 dark:bg-white/[0.04]`,`text-gray-600 dark:text-dark-600`),children:[X.length,` `,e(`modelManager.systemStatus.running`)]})]}),(0,M.jsx)(`div`,{className:`space-y-2`,children:X.map(t=>(0,M.jsxs)(`div`,{className:a(`flex items-center justify-between p-4 rounded-lg border`,`bg-white/50 dark:bg-white/[0.025]`,`border-gray-200/80 dark:border-white/[0.08]`),children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,M.jsx)(`div`,{className:a(`w-2 h-2 rounded-full animate-pulse`,`bg-green-500`)}),(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`div`,{className:`font-medium text-gray-900 dark:text-dark-800`,children:t.name}),(0,M.jsxs)(`div`,{className:`flex items-center gap-3 text-sm text-gray-500 dark:text-dark-500`,children:[(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,M.jsx)(re,{className:`h-3 w-3`}),e(`modelManager.systemStatus.vram`),`:`,` `,$(t.size_vram||0)]}),t.size&&(0,M.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,M.jsx)(y,{className:`h-3 w-3`}),e(`models.size`),`: `,$(t.size)]})]})]})]}),(0,M.jsxs)(`div`,{className:a(`flex items-center gap-1.5 px-2 py-1 rounded-full text-xs font-medium`,`border border-gray-200 bg-gray-50 dark:border-white/10 dark:bg-white/[0.04]`,`text-gray-600 dark:text-dark-600`),children:[(0,M.jsx)(ae,{className:`h-3 w-3`}),e(`modelManager.local.running`)]})]},t.name))})]}),(0,M.jsx)(ge,{expanded:G.has(`local`),models:Y,onToggle:()=>K(`local`),isModelRunning:Ot,formatSize:$,onShowModel:wt,onCopyModel:e=>{L(e),F(!0)},onDeleteModel:Ct}),(0,M.jsxs)(`div`,{className:a(`overflow-hidden rounded-2xl border`,`bg-white/60 dark:bg-white/[0.03]`,`border-gray-200/80 dark:border-white/10`),children:[(0,M.jsxs)(`button`,{onClick:()=>K(`advanced`),"aria-expanded":G.has(`advanced`),className:a(`w-full flex items-center justify-between p-4`,`hover:bg-gray-50 dark:hover:bg-dark-50`,`transition-colors`),children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,M.jsx)(o,{className:`h-4 w-4 text-gray-500 dark:text-dark-500`}),(0,M.jsx)(`h3`,{className:`text-lg font-semibold text-gray-900 dark:text-dark-800`,children:e(`modelManager.sections.advanced`)})]}),G.has(`advanced`)?(0,M.jsx)(T,{className:`h-5 w-5 text-gray-500`}):(0,M.jsx)(w,{className:`h-5 w-5 text-gray-500`})]}),G.has(`advanced`)&&(0,M.jsx)(`div`,{className:`p-4 pt-0`,children:(0,M.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3`,children:[(0,M.jsxs)(k,{onClick:()=>Oe(!0),variant:`outline`,className:a(`w-full gap-2 justify-start h-auto py-3 px-4`,``,``),children:[(0,M.jsx)(ee,{className:`h-5 w-5 text-gray-500 dark:text-dark-500`}),(0,M.jsxs)(`div`,{className:`text-start`,children:[(0,M.jsx)(`div`,{className:`font-medium`,children:e(`modelManager.advanced.createModel`)}),(0,M.jsx)(`div`,{className:`text-xs opacity-70`,children:e(`modelManager.advanced.fromModelfile`)})]})]}),(0,M.jsxs)(k,{onClick:()=>F(!0),variant:`outline`,className:a(`w-full gap-2 justify-start h-auto py-3 px-4`,``,``),children:[(0,M.jsx)(d,{className:`h-5 w-5 text-gray-500 dark:text-dark-500`}),(0,M.jsxs)(`div`,{className:`text-start`,children:[(0,M.jsx)(`div`,{className:`font-medium`,children:e(`modelManager.advanced.copyModel`)}),(0,M.jsx)(`div`,{className:`text-xs opacity-70`,children:e(`modelManager.advanced.duplicateExisting`)})]})]}),(0,M.jsxs)(k,{onClick:()=>Fe(!0),variant:`outline`,className:a(`w-full gap-2 justify-start h-auto py-3 px-4`,``,``),children:[(0,M.jsx)(ne,{className:`h-5 w-5 text-gray-500 dark:text-dark-500`}),(0,M.jsxs)(`div`,{className:`text-start`,children:[(0,M.jsx)(`div`,{className:`font-medium`,children:e(`modelManager.advanced.testEmbeddings`)}),(0,M.jsx)(`div`,{className:`text-xs opacity-70`,children:e(`modelManager.advanced.generateVectors`)})]})]}),(0,M.jsxs)(k,{onClick:async()=>{try{(await O.checkHealth()).success&&(await J(),l.success(e(`modelManager.advanced.healthy`)))}catch{await J(),l.error(e(`modelManager.systemStatus.offline`))}},variant:`outline`,className:a(`w-full gap-2 justify-start h-auto py-3 px-4`,``,``),children:[(0,M.jsx)(c,{className:`h-5 w-5 text-gray-500 dark:text-dark-500`}),(0,M.jsxs)(`div`,{className:`text-start`,children:[(0,M.jsx)(`div`,{className:`font-medium`,children:e(`modelManager.advanced.healthCheck`)}),(0,M.jsx)(`div`,{className:`text-xs opacity-70`,children:e(`modelManager.advanced.testConnection`)})]})]})]})})]}),Ft&&(0,M.jsx)(j.Suspense,{fallback:null,children:(0,M.jsx)(Se,{models:Y,showDetailsModal:N,setShowDetailsModal:P,selectedModelName:de,selectedModelDetails:se,loadingDetails:he,showCopyModal:ye,setShowCopyModal:F,copySource:I,setCopySource:L,copyDestination:R,setCopyDestination:we,copying:Te,handleCopyModel:Tt,showCreateModal:De,setShowCreateModal:Oe,createModelName:z,setCreateModelName:ke,createModelfile:Ae,setCreateModelfile:je,creating:Me,handleCreateModel:Et,showEmbeddingsModal:Pe,setShowEmbeddingsModal:Fe,embeddingsModel:Ie,setEmbeddingsModel:Le,embeddingsInput:Re,setEmbeddingsInput:ze,embeddingsResult:Be,generatingEmbeddings:He,handleGenerateEmbeddings:Dt})})]})},R=()=>{let{t:e}=i();return(0,M.jsxs)(ue,{children:[(0,M.jsx)(de,{title:e(`models.title`),description:e(`models.subtitle`)}),(0,M.jsx)(L,{})]})};export{R as ModelsPage,R as default};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{d as t,f as n}from"./markdown-core-DHnR5Hw8.js";import{t as r}from"./useTranslation-CXY69qNk.js";import{r as i,t as a}from"./utils-BM0_0iFj.js";import{B as o,En as s,P as c,W as l,Z as u,m as d,yn as f,zt as p}from"./ui-vendor-xUzKqAXI.js";import{t as m}from"./logger-DSXjF4ye.js";import{y as h}from"./api-CLEmGcEh.js";import{t as g}from"./Button-CTXHujOd.js";import"./ui-BnDZpjfc.js";import{t as _}from"./RichMessageContent-g6WT75Te.js";var v=e(n(),1),y=t(),b=m(`pages:notes`),x=800,S=()=>{let{t:e,i18n:t}=r(),[n,m]=(0,v.useState)([]),[S,C]=(0,v.useState)(!0),[w,T]=(0,v.useState)(null),[E,D]=(0,v.useState)(``),[O,k]=(0,v.useState)(``),[A,j]=(0,v.useState)(``),[M,N]=(0,v.useState)(!1),[P,F]=(0,v.useState)(`idle`),I=(0,v.useRef)(null),L=(0,v.useMemo)(()=>n.find(e=>e.id===w)??null,[n,w]);(0,v.useEffect)(()=>{let e=!1;return h.getNotes().then(t=>{e||t.success&&t.data&&m(t.data)}).catch(e=>b.error(`Failed to load notes:`,e)).finally(()=>{e||C(!1)}),()=>{e=!0}},[]);let R=e=>{V(),T(e.id),k(e.title),j(e.content),N(!1),F(`idle`)},z=(e,t,n)=>{I.current!==null&&window.clearTimeout(I.current),F(`saving`),I.current=window.setTimeout(()=>{I.current=null,B(e,t,n)},x)},B=async(t,n,r)=>{try{let e=await h.updateNote(t,{title:n,content:r});if(e.success&&e.data){let n=e.data;m(e=>[n,...e.filter(e=>e.id!==t)].sort((e,t)=>t.updatedAt-e.updatedAt)),F(`saved`)}}catch(t){b.error(`Failed to save note:`,t),s.error(e(`notes.saveFailed`)),F(`idle`)}},V=()=>{I.current!==null&&w&&(window.clearTimeout(I.current),I.current=null,B(w,O,A))};(0,v.useEffect)(()=>()=>{I.current!==null&&window.clearTimeout(I.current)},[]);let H=async()=>{try{let e=await h.createNote(``,``);if(e.success&&e.data){let t=e.data;m(e=>[t,...e]),R(t)}}catch(t){b.error(`Failed to create note:`,t),s.error(e(`notes.createFailed`))}},U=async t=>{if(window.confirm(e(`notes.deleteConfirm`)))try{(await h.deleteNote(t)).success&&(m(e=>e.filter(e=>e.id!==t)),w===t&&T(null))}catch(t){b.error(`Failed to delete note:`,t),s.error(e(`notes.deleteFailed`))}},W=(0,v.useMemo)(()=>{let e=E.trim().toLowerCase();return e?n.filter(t=>t.title.toLowerCase().includes(e)||t.content.toLowerCase().includes(e)):n},[n,E]);return(0,y.jsxs)(`div`,{className:`flex h-full min-h-0 overflow-hidden`,"data-testid":`notes-page`,children:[(0,y.jsxs)(`div`,{"data-testid":`notes-list`,className:a(`min-h-0 w-full shrink-0 flex-col border-e border-black/[0.06] dark:border-white/[0.07] md:w-72`,L?`hidden md:flex`:`flex`),children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between px-4 pb-2 pt-4`,children:[(0,y.jsx)(`h1`,{className:`text-sm font-semibold text-gray-900 dark:text-dark-900`,children:e(`notes.title`)}),(0,y.jsx)(g,{size:`sm`,variant:`ghost`,onClick:()=>void H(),className:`h-7 w-7 p-0`,title:e(`notes.new`),children:(0,y.jsx)(o,{className:`h-4 w-4`})})]}),(0,y.jsxs)(`div`,{className:`relative mx-3 mb-2`,children:[(0,y.jsx)(c,{className:`pointer-events-none absolute start-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-gray-400 dark:text-dark-500`}),(0,y.jsx)(`input`,{type:`search`,value:E,onChange:e=>D(e.target.value),placeholder:e(`common.search`),className:`w-full rounded-lg border border-transparent bg-black/[0.04] py-1.5 pe-2.5 ps-8 text-base text-gray-900 placeholder:text-gray-400 focus:border-primary-500/40 focus:outline-none dark:bg-white/[0.05] dark:text-dark-900 dark:placeholder:text-dark-500 sm:text-[13px]`})]}),(0,y.jsx)(`div`,{className:`scroll-region min-h-0 flex-1 overflow-y-auto px-2 pb-3 scrollbar-thin`,children:S?null:W.length===0?(0,y.jsxs)(`div`,{className:`px-3 py-10 text-center`,children:[(0,y.jsx)(u,{className:`mx-auto mb-2 h-6 w-6 text-gray-300 dark:text-dark-400`}),(0,y.jsx)(`p`,{className:`text-xs text-gray-400 dark:text-dark-500`,children:e(`notes.empty`)})]}):(0,y.jsx)(`div`,{className:`space-y-0.5`,children:W.map(n=>(0,y.jsxs)(`div`,{"data-testid":`note-list-item`,onClick:()=>R(n),className:a(`group cursor-pointer rounded-lg px-2.5 py-2 transition-colors`,w===n.id?`bg-white ring-1 ring-black/[0.04] dark:bg-dark-200 dark:ring-white/[0.05]`:`hover:bg-white/60 dark:hover:bg-dark-200/60`),children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,y.jsx)(`p`,{className:`truncate text-[13px] font-medium text-gray-900 dark:text-dark-900`,children:n.title||e(`notes.untitled`)}),(0,y.jsx)(`button`,{onClick:e=>{e.stopPropagation(),U(n.id)},className:`shrink-0 rounded-md p-1 text-red-500 opacity-100 transition-opacity hover:bg-red-50 sm:opacity-0 sm:group-hover:opacity-100 sm:group-focus-within:opacity-100 dark:hover:bg-red-900/20`,title:e(`common.delete`),children:(0,y.jsx)(d,{className:`h-3 w-3`})})]}),(0,y.jsxs)(`p`,{className:`mt-0.5 truncate text-[11px] text-gray-400 dark:text-dark-500`,children:[i(n.updatedAt,t.language),n.content.trim()&&(0,y.jsxs)(y.Fragment,{children:[` · `,n.content.trim().slice(0,60)]})]})]},n.id))})})]}),(0,y.jsx)(`div`,{"data-testid":`notes-editor`,className:a(`min-w-0 flex-1 flex-col`,L?`flex`:`hidden md:flex`),children:L?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5 border-b border-black/[0.06] px-2.5 py-2.5 dark:border-white/[0.07] sm:gap-2 sm:px-5 sm:py-3`,children:[(0,y.jsx)(g,{size:`sm`,variant:`ghost`,onClick:()=>{V(),T(null),N(!1)},className:`h-9 w-9 shrink-0 p-0 md:hidden`,title:`${e(`common.back`)}: ${e(`notes.title`)}`,"aria-label":`${e(`common.back`)}: ${e(`notes.title`)}`,"data-testid":`notes-mobile-back`,children:(0,y.jsx)(f,{className:`h-4 w-4 rtl:rotate-180`})}),(0,y.jsx)(`input`,{"data-testid":`notes-title-editor`,dir:`auto`,value:O,onChange:e=>{k(e.target.value),z(L.id,e.target.value,A)},placeholder:e(`notes.untitled`),className:`min-w-0 flex-1 bg-transparent text-base font-semibold text-gray-950 placeholder:text-gray-400 focus:outline-none dark:text-dark-950 dark:placeholder:text-dark-500 sm:text-lg`}),(0,y.jsx)(`span`,{className:`hidden shrink-0 text-[11px] text-gray-400 dark:text-dark-500 sm:inline`,"aria-live":`polite`,children:P===`saving`?e(`common.saving`):P===`saved`?e(`notes.saved`):``}),(0,y.jsx)(g,{size:`sm`,variant:`ghost`,onClick:()=>N(e=>!e),className:`h-9 w-9 shrink-0 gap-1.5 p-0 text-xs sm:h-8 sm:w-auto sm:px-2.5`,title:e(M?`common.edit`:`artifacts.preview`),"aria-label":e(M?`common.edit`:`artifacts.preview`),"data-testid":`notes-preview-toggle`,children:M?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(l,{className:`h-3.5 w-3.5`}),(0,y.jsx)(`span`,{className:`hidden sm:inline`,children:e(`common.edit`)})]}):(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(p,{className:`h-3.5 w-3.5`}),(0,y.jsx)(`span`,{className:`hidden sm:inline`,children:e(`artifacts.preview`)})]})})]}),M?(0,y.jsx)(`div`,{"data-testid":`notes-preview`,className:`scroll-region min-h-0 flex-1 overflow-y-auto px-4 py-3 scrollbar-thin sm:px-5 sm:py-4`,children:(0,y.jsx)(_,{content:A})}):(0,y.jsx)(`textarea`,{"data-testid":`notes-content-editor`,dir:`auto`,value:A,onChange:e=>{j(e.target.value),z(L.id,O,e.target.value)},onBlur:V,placeholder:e(`notes.contentPlaceholder`),className:`min-h-0 flex-1 resize-none bg-transparent px-4 py-3 font-mono text-base leading-relaxed text-gray-900 placeholder:text-gray-400 focus:outline-none dark:text-dark-900 dark:placeholder:text-dark-500 sm:px-5 sm:py-4 sm:text-[13.5px]`})]}):(0,y.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,y.jsxs)(`div`,{className:`text-center`,children:[(0,y.jsx)(u,{className:`mx-auto mb-3 h-8 w-8 text-gray-300 dark:text-dark-400`}),(0,y.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-dark-600`,children:e(`notes.selectOrCreate`)}),(0,y.jsxs)(g,{size:`sm`,onClick:()=>void H(),className:`mt-4 gap-1.5`,children:[(0,y.jsx)(o,{className:`h-3.5 w-3.5`}),e(`notes.new`)]})]})})})]})};export{S as NotesPage,S as default};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{d as t,f as n}from"./markdown-core-DHnR5Hw8.js";import{t as r}from"./useTranslation-CXY69qNk.js";import{t as i}from"./utils-BM0_0iFj.js";import{$t as a,Cn as o,Dt as s,Qt as c,R as l,f as u,gn as d,lt as f,s as p}from"./ui-vendor-xUzKqAXI.js";import{c as m}from"./api-CLEmGcEh.js";import{t as h}from"./Button-CTXHujOd.js";import{n as g,t as _}from"./ui-BnDZpjfc.js";import{f as v}from"../assets/index-BBpNbfKW.js";var y=e(n(),1),b=t(),x=new Intl.NumberFormat(void 0,{maximumFractionDigits:0}),S=new Intl.NumberFormat(void 0,{notation:`compact`,maximumFractionDigits:1}),C=e=>e>=1e4?S.format(e):x.format(e),w=e=>e?e<1e3?`${x.format(e)} ms`:`${(e/1e3).toFixed(+(e<1e4))} s`:`—`,T=(e,t)=>e===0?0:(e-t)/e*100,E=({analytics:e,metric:t,onMetricChange:n})=>{let{t:a}=r(),o={top:22,right:18,bottom:42,left:52},s=e.series.map(e=>e[t]),c=Math.max(1,...s),l=960-o.left-o.right,u=280-o.top-o.bottom,d=t=>o.left+(e.series.length<=1?l/2:t/(e.series.length-1)*l),f=e=>o.top+u-e/c*u,p=e.series.map((e,n)=>({x:d(n),y:f(e[t]),point:e})),m=p.map(({x:e,y:t},n)=>`${n===0?`M`:`L`} ${e} ${t}`).join(` `),h=p.length?`${m} L ${p[p.length-1].x} ${o.top+u} L ${p[0].x} ${o.top+u} Z`:``,g=new Intl.DateTimeFormat(void 0,{month:`short`,day:`numeric`,timeZone:`UTC`}),_=Array.from(new Set([0,Math.floor((e.series.length-1)/2),e.series.length-1])).filter(e=>e>=0);return(0,b.jsxs)(`div`,{"data-testid":`plugin-usage-chart`,className:`overflow-hidden rounded-2xl border border-gray-200/80 bg-white/80 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/75`,children:[(0,b.jsxs)(`div`,{className:`flex flex-col gap-3 border-b border-gray-200/70 px-4 py-3 dark:border-white/[0.07] sm:flex-row sm:items-center sm:justify-between sm:px-5`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:a(`usageAnalytics.activity.title`)}),(0,b.jsx)(`p`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:a(t===`calls`?`usageAnalytics.activity.callsDescription`:`usageAnalytics.activity.tokensDescription`)})]}),(0,b.jsx)(`div`,{className:`inline-flex w-fit rounded-xl bg-gray-100 p-1 dark:bg-dark-200/80`,children:[`calls`,`tokens`].map(e=>(0,b.jsx)(`button`,{type:`button`,"aria-pressed":t===e,className:i(`rounded-lg px-3 py-1.5 text-xs font-medium transition-colors`,t===e?`bg-white text-gray-950 shadow-sm dark:bg-dark-300 dark:text-dark-950`:`text-gray-500 hover:text-gray-800 dark:text-dark-500 dark:hover:text-dark-800`),onClick:()=>n(e),children:a(`usageAnalytics.metrics.${e}`)},e))})]}),(0,b.jsx)(`div`,{className:`px-2 pb-3 pt-4 sm:px-5 sm:pt-6`,children:(0,b.jsxs)(`svg`,{viewBox:`0 0 960 280`,className:`h-auto w-full overflow-visible`,role:`img`,"aria-label":a(`usageAnalytics.activity.chartLabel`,{metric:a(`usageAnalytics.metrics.${t}`)}),children:[(0,b.jsx)(`defs`,{children:(0,b.jsxs)(`linearGradient`,{id:`plugin-usage-area`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,b.jsx)(`stop`,{offset:`0%`,stopColor:`rgb(var(--color-primary-500))`,stopOpacity:`0.28`}),(0,b.jsx)(`stop`,{offset:`100%`,stopColor:`rgb(var(--color-primary-500))`,stopOpacity:`0.015`})]})}),[0,.25,.5,.75,1].map(e=>{let t=o.top+u*e,n=Math.round(c*(1-e));return(0,b.jsxs)(`g`,{children:[(0,b.jsx)(`line`,{x1:o.left,x2:960-o.right,y1:t,y2:t,className:`stroke-gray-200 dark:stroke-white/[0.07]`,strokeDasharray:e===1?void 0:`4 8`}),(0,b.jsx)(`text`,{x:o.left-12,y:t+4,textAnchor:`end`,className:`fill-gray-400 text-[11px] dark:fill-dark-500`,children:C(n)})]},e)}),h&&(0,b.jsx)(`path`,{d:h,fill:`url(#plugin-usage-area)`}),m&&(0,b.jsx)(`path`,{d:m,fill:`none`,className:`stroke-primary-500 dark:stroke-primary-400`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`}),(e.series.length<=31?p:[]).map(({x:e,y:n,point:r})=>(0,b.jsx)(`circle`,{cx:e,cy:n,r:`4`,className:`fill-white stroke-primary-500 dark:fill-dark-100 dark:stroke-primary-400`,strokeWidth:`2.5`,children:(0,b.jsx)(`title`,{children:`${g.format(r.timestamp)}: ${C(r[t])} ${a(`usageAnalytics.metrics.${t}`).toLocaleLowerCase()}`})},r.timestamp)),_.map(t=>{let n=e.series[t];if(!n)return null;let r=t===0?`start`:t===e.series.length-1?`end`:`middle`;return(0,b.jsx)(`text`,{x:d(t),y:270,textAnchor:r,className:`fill-gray-500 text-[12px] dark:fill-dark-500`,children:g.format(n.timestamp)},n.timestamp)})]})})]})},D=864e5,O=10,k=12,A=30,j=16,M=[`fill-blue-500`,`fill-emerald-500 dark:fill-emerald-600`,`fill-amber-500 dark:fill-amber-600`,`fill-violet-500`,`fill-rose-500`],N=[`bg-blue-500`,`bg-emerald-500 dark:bg-emerald-600`,`bg-amber-500 dark:bg-amber-600`,`bg-violet-500`,`bg-rose-500`],P=`fill-gray-400 dark:fill-gray-500`,F=`bg-gray-400 dark:bg-gray-500`,I=`fill-gray-950/[0.06] dark:fill-white/[0.07]`,L=[0,.35,.55,.75,1],R=({heatmap:e})=>{let{t,i18n:n}=r(),[a,o]=(0,y.useState)(null),{weeks:s,firstColStart:c,cellsByDay:l,maxCalls:u,modelRank:d,totalCalls:f}=(0,y.useMemo)(()=>{let t=new Map(e.cells.map(e=>[e.timestamp,e])),n=e.from,r=e.from+(e.days-1)*D,i=n-new Date(n).getUTCDay()*D;return{weeks:Math.ceil((r-i+D)/(7*D)),firstColStart:i,cellsByDay:t,maxCalls:Math.max(1,...e.cells.map(e=>e.calls)),modelRank:new Map(e.models.map((e,t)=>[e,t])),totalCalls:e.cells.reduce((e,t)=>e+t.calls,0)}},[e]),p=new Intl.DateTimeFormat(n.language,{month:`short`,timeZone:`UTC`}),m=new Intl.DateTimeFormat(n.language,{weekday:`short`,timeZone:`UTC`}),h=new Intl.DateTimeFormat(n.language,{dateStyle:`medium`,timeZone:`UTC`}),g=e.from,_=e.from+(e.days-1)*D,v=A+s*k,x=[],S=-1;for(let e=0;e<s;e++){let t=c+e*7*D,n=Math.max(t,g),r=new Date(n).getUTCMonth();r!==S&&t>=g-6*D&&((S!==-1||t>=g)&&x.push({x:A+e*k,label:p.format(n)}),S=r)}let w=e=>e<=0?0:Math.min(4,Math.max(1,Math.ceil(e/u*4))),T=e=>{let t=e.models[0]?.model,n=t===void 0?void 0:d.get(t);return n===void 0?P:M[n]},E=(e,t,n)=>{let r=e.currentTarget.closest(`[data-heatmap-wrapper]`);if(!r)return;let i=r.getBoundingClientRect(),a=e.currentTarget.getBoundingClientRect(),s=a.left-i.left+a.width/2;o({x:Math.min(Math.max(s,96),Math.max(i.width-96,96)),y:a.top-i.top,timestamp:t,calls:n.calls,models:n.models})};return(0,b.jsxs)(`section`,{"data-testid":`usage-heatmap`,className:`overflow-hidden rounded-2xl border border-gray-200/80 bg-white/80 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/75`,children:[(0,b.jsxs)(`div`,{className:`flex flex-col gap-1 border-b border-gray-200/70 px-4 py-3 dark:border-white/[0.07] sm:flex-row sm:items-center sm:justify-between sm:px-5`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:t(`usageAnalytics.heatmap.title`)}),(0,b.jsx)(`p`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:t(`usageAnalytics.heatmap.description`)})]}),(0,b.jsx)(`span`,{className:`shrink-0 text-xs tabular-nums text-gray-500 dark:text-dark-500`,children:t(`usageAnalytics.heatmap.yearTotal`,{count:f,formatted:C(f)})})]}),(0,b.jsxs)(`div`,{className:`relative p-4 sm:px-5`,"data-heatmap-wrapper":!0,children:[(0,b.jsx)(`div`,{className:`overflow-x-auto`,children:(0,b.jsxs)(`svg`,{viewBox:`0 0 ${v} 100`,className:`h-auto w-full min-w-[640px]`,role:`img`,"aria-label":t(`usageAnalytics.heatmap.title`),onMouseLeave:()=>o(null),children:[x.map(({x:e,label:t})=>(0,b.jsx)(`text`,{x:e,y:10,className:`fill-gray-400 text-[8px] dark:fill-dark-500`,children:t},`${e}-${t}`)),[1,3,5].map(e=>(0,b.jsx)(`text`,{x:0,y:j+e*k+O-2,className:`fill-gray-400 text-[8px] dark:fill-dark-500`,children:m.format(new Date(Date.UTC(2023,0,1+e)))},e)),Array.from({length:s},(e,t)=>Array.from({length:7},(e,n)=>{let r=c+(t*7+n)*D;if(r<g||r>_)return null;let o=l.get(r),s=o?.calls??0,u=w(s);return(0,b.jsx)(`rect`,{x:A+t*k,y:j+n*k,width:O,height:O,rx:2,fillOpacity:u===0?1:L[u],strokeWidth:+(a?.timestamp===r),className:i(`transition-opacity`,u===0||!o?I:T(o),a?.timestamp===r?`stroke-gray-500 dark:stroke-white/60`:`stroke-transparent`),onMouseEnter:e=>E(e,r,{calls:s,models:o?.models??[]}),children:(0,b.jsx)(`title`,{children:`${h.format(r)} — ${C(s)}`})},r)}))]})}),a&&(0,b.jsxs)(`div`,{className:`pointer-events-none absolute z-10 min-w-[10rem] -translate-x-1/2 -translate-y-full rounded-lg border border-gray-200/80 bg-white/95 px-3 py-2 shadow-card backdrop-blur-md dark:border-white/[0.1] dark:bg-dark-100/95`,style:{left:a.x,top:a.y-6},children:[(0,b.jsx)(`div`,{className:`text-[11px] font-medium text-gray-900 dark:text-dark-900`,children:h.format(a.timestamp)}),(0,b.jsx)(`div`,{className:`mt-0.5 text-[11px] text-gray-500 dark:text-dark-500`,children:a.calls===0?t(`usageAnalytics.heatmap.noCalls`):`${C(a.calls)} ${t(`usageAnalytics.heatmap.calls`)}`}),a.models.slice(0,3).map(e=>(0,b.jsxs)(`div`,{className:`mt-1 flex items-center justify-between gap-3 text-[11px]`,children:[(0,b.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,b.jsx)(`span`,{className:i(`h-2 w-2 shrink-0 rounded-[3px]`,d.has(e.model)?N[d.get(e.model)]:F)}),(0,b.jsx)(`span`,{className:`truncate font-mono text-gray-700 dark:text-dark-700`,dir:`ltr`,children:e.model})]}),(0,b.jsx)(`span`,{className:`tabular-nums text-gray-500 dark:text-dark-500`,children:C(e.calls)})]},e.model))]}),(0,b.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center justify-between gap-3`,children:[(0,b.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-4 gap-y-1.5`,children:[e.models.map((e,t)=>(0,b.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] text-gray-600 dark:text-dark-600`,children:[(0,b.jsx)(`span`,{className:i(`h-2.5 w-2.5 rounded-[3px]`,N[t])}),(0,b.jsx)(`span`,{className:`font-mono`,dir:`ltr`,children:e})]},e)),(0,b.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] text-gray-600 dark:text-dark-600`,children:[(0,b.jsx)(`span`,{className:i(`h-2.5 w-2.5 rounded-[3px]`,F)}),t(`usageAnalytics.heatmap.other`)]})]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] text-gray-500 dark:text-dark-500`,children:[t(`usageAnalytics.heatmap.less`),(0,b.jsx)(`span`,{className:`h-2.5 w-2.5 rounded-[3px] bg-gray-950/[0.06] dark:bg-white/[0.07]`}),L.slice(1).map(e=>(0,b.jsx)(`span`,{className:`h-2.5 w-2.5 rounded-[3px] bg-primary-500`,style:{opacity:e}},e)),t(`usageAnalytics.heatmap.more`)]})]})]})]})},z=()=>{let{t:e}=r(),[t,n]=(0,y.useState)(30),[x,S]=(0,y.useState)(`calls`),{data:D,error:O,isLoading:k,isFetching:A,refetch:j}=v({queryKey:[`plugin-usage`,t],queryFn:async()=>{let n=await m.getUsage(t);if(!n.success||!n.data)throw Error(n.error||e(`usageAnalytics.loadFailed`));return n.data}}),M=O?O instanceof Error?O.message:e(`usageAnalytics.loadFailed`):null,N=D?.totals,P=(0,y.useMemo)(()=>[{label:e(`usageAnalytics.cards.calls`),value:C(N?.calls??0),detail:e(`usageAnalytics.cards.callsDetail`,{count:N?.uniqueUsers??0}),icon:o},{label:e(`usageAnalytics.cards.tokens`),value:C(N?.reportedTokens??0),detail:e(`usageAnalytics.cards.tokensDetail`,{count:N?.meteredCalls??0}),icon:s},{label:e(`usageAnalytics.cards.success`),value:`${T(N?.calls??0,(N?.failedCalls??0)+(N?.cancelledCalls??0)).toFixed(1)}%`,detail:e(`usageAnalytics.cards.successDetail`,{count:N?.failedCalls??0}),icon:a},{label:e(`usageAnalytics.cards.latency`),value:w(N?.averageLatencyMs??0),detail:e(`usageAnalytics.cards.latencyDetail`),icon:c}],[e,N]);return k&&!D?(0,b.jsx)(g,{width:`wide`,children:(0,b.jsx)(`div`,{className:`flex min-h-[50vh] items-center justify-center`,children:(0,b.jsx)(f,{className:`h-7 w-7 animate-spin text-primary-500`})})}):(0,b.jsxs)(g,{width:`wide`,children:[(0,b.jsx)(_,{eyebrow:e(`usageAnalytics.eyebrow`),title:e(`usageAnalytics.title`),description:e(`usageAnalytics.description`),actions:(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(`div`,{className:`inline-flex rounded-xl border border-gray-200 bg-white/70 p-1 dark:border-white/[0.08] dark:bg-dark-100/70`,children:[7,30,90].map(r=>(0,b.jsx)(`button`,{type:`button`,className:i(`rounded-lg px-3 py-1.5 text-xs font-medium transition-colors`,t===r?`bg-gray-950 text-white dark:bg-white dark:text-gray-950`:`text-gray-500 hover:text-gray-900 dark:text-dark-500 dark:hover:text-dark-900`),onClick:()=>n(r),children:e(`usageAnalytics.days`,{count:r})},r))}),(0,b.jsxs)(h,{variant:`outline`,size:`sm`,onClick:()=>void j(),disabled:A,children:[(0,b.jsx)(l,{className:i(`h-4 w-4`,A&&`animate-spin`)}),(0,b.jsx)(`span`,{className:`sr-only`,children:e(`usageAnalytics.refresh`)})]})]})}),M&&(0,b.jsxs)(`div`,{className:`mb-6 flex items-center gap-3 rounded-2xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700 dark:border-red-900/40 dark:bg-red-950/30 dark:text-red-300`,children:[(0,b.jsx)(u,{className:`h-4 w-4 shrink-0`}),(0,b.jsx)(`span`,{children:M})]}),D&&(0,b.jsxs)(`div`,{className:`space-y-4`,children:[(0,b.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-4`,children:P.map(e=>{let t=e.icon;return(0,b.jsxs)(`section`,{className:`rounded-2xl border border-gray-200/80 bg-white/75 p-4 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/70`,children:[(0,b.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,b.jsx)(`span`,{className:`text-xs font-medium uppercase tracking-[0.12em] text-gray-500 dark:text-dark-500`,children:e.label}),(0,b.jsx)(t,{className:`h-4 w-4 text-primary-500 dark:text-primary-400`})]}),(0,b.jsx)(`div`,{className:`mt-2 text-2xl font-normal tracking-[-0.04em] text-gray-950 dark:text-dark-950`,children:e.value}),(0,b.jsx)(`p`,{className:`mt-1.5 text-xs text-gray-500 dark:text-dark-500`,children:e.detail})]},e.label)})}),D.heatmap&&D.heatmap.cells.length>0&&(0,b.jsx)(R,{heatmap:D.heatmap}),(0,b.jsx)(E,{analytics:D,metric:x,onMetricChange:S}),D.totals.calls===0?(0,b.jsxs)(`div`,{className:`rounded-2xl border border-dashed border-gray-300 px-6 py-10 text-center dark:border-white/[0.12]`,children:[(0,b.jsx)(d,{className:`mx-auto h-8 w-8 text-gray-400 dark:text-dark-500`}),(0,b.jsx)(`h2`,{className:`mt-4 text-base font-medium text-gray-900 dark:text-dark-900`,children:e(`usageAnalytics.empty.title`)}),(0,b.jsx)(`p`,{className:`mx-auto mt-2 max-w-md text-sm leading-6 text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.empty.description`)})]}):(0,b.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[1.15fr_0.85fr]`,children:[(0,b.jsxs)(`section`,{className:`overflow-hidden rounded-2xl border border-gray-200/80 bg-white/80 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/75`,children:[(0,b.jsxs)(`div`,{className:`border-b border-gray-200/70 px-4 py-3 dark:border-white/[0.07] sm:px-5`,children:[(0,b.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:e(`usageAnalytics.models.title`)}),(0,b.jsx)(`p`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.models.description`)})]}),(0,b.jsx)(`div`,{className:`overflow-x-auto`,children:(0,b.jsxs)(`table`,{className:`w-full min-w-[620px] text-start text-sm`,children:[(0,b.jsx)(`thead`,{className:`text-[11px] uppercase tracking-[0.1em] text-gray-400 dark:text-dark-500`,children:(0,b.jsxs)(`tr`,{children:[(0,b.jsx)(`th`,{className:`px-5 py-2 text-start font-medium`,children:e(`usageAnalytics.models.model`)}),(0,b.jsx)(`th`,{className:`px-4 py-2 text-end font-medium`,children:e(`usageAnalytics.metrics.calls`)}),(0,b.jsx)(`th`,{className:`px-4 py-2 text-end font-medium`,children:e(`usageAnalytics.metrics.tokens`)}),(0,b.jsx)(`th`,{className:`px-4 py-2 text-end font-medium`,children:e(`usageAnalytics.models.success`)}),(0,b.jsx)(`th`,{className:`px-5 py-2 text-end font-medium`,children:e(`usageAnalytics.models.latency`)})]})}),(0,b.jsx)(`tbody`,{className:`divide-y divide-gray-100 dark:divide-white/[0.06]`,children:D.models.slice(0,12).map(e=>(0,b.jsxs)(`tr`,{children:[(0,b.jsxs)(`td`,{className:`px-5 py-2.5`,children:[(0,b.jsx)(`div`,{className:`max-w-[260px] truncate font-medium text-gray-900 dark:text-dark-900`,title:e.model,children:e.model}),(0,b.jsx)(`div`,{className:`mt-0.5 text-xs text-gray-500 dark:text-dark-500`,children:e.pluginName})]}),(0,b.jsx)(`td`,{className:`px-4 py-2.5 text-end tabular-nums text-gray-700 dark:text-dark-700`,children:C(e.calls)}),(0,b.jsx)(`td`,{className:`px-4 py-2.5 text-end tabular-nums text-gray-700 dark:text-dark-700`,children:e.tokens?C(e.tokens):`—`}),(0,b.jsxs)(`td`,{className:`px-4 py-2.5 text-end tabular-nums text-gray-700 dark:text-dark-700`,children:[T(e.calls,e.errors).toFixed(1),`%`]}),(0,b.jsx)(`td`,{className:`px-5 py-2.5 text-end tabular-nums text-gray-500 dark:text-dark-500`,children:w(e.averageLatencyMs)})]},`${e.pluginId}:${e.model}`))})]})})]}),(0,b.jsxs)(`div`,{className:`space-y-4`,children:[(0,b.jsxs)(`section`,{className:`rounded-2xl border border-gray-200/80 bg-white/80 p-4 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/75 sm:p-5`,children:[(0,b.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:e(`usageAnalytics.providers.title`)}),(0,b.jsx)(`div`,{className:`mt-5 space-y-4`,children:D.plugins.slice(0,8).map(t=>{let n=D.totals.calls?t.calls/D.totals.calls*100:0;return(0,b.jsxs)(`div`,{children:[(0,b.jsxs)(`div`,{className:`flex items-center justify-between gap-4 text-sm`,children:[(0,b.jsxs)(`div`,{className:`min-w-0`,children:[(0,b.jsx)(`div`,{className:`truncate font-medium text-gray-900 dark:text-dark-900`,children:t.pluginName}),(0,b.jsxs)(`div`,{className:`mt-0.5 text-xs text-gray-500 dark:text-dark-500`,children:[C(t.tokens),` `,e(`usageAnalytics.metrics.tokens`).toLocaleLowerCase()]})]}),(0,b.jsx)(`span`,{className:`shrink-0 tabular-nums text-gray-600 dark:text-dark-600`,children:C(t.calls)})]}),(0,b.jsx)(`div`,{className:`mt-2 h-1.5 overflow-hidden rounded-full bg-gray-100 dark:bg-dark-300`,children:(0,b.jsx)(`div`,{className:`h-full rounded-full bg-primary-500 dark:bg-primary-400`,style:{width:`${Math.max(2,n)}%`}})})]},t.pluginId)})})]}),(0,b.jsxs)(`section`,{className:`rounded-2xl border border-gray-200/80 bg-white/80 p-4 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/75 sm:p-5`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(p,{className:`h-4 w-4 text-primary-500 dark:text-primary-400`}),(0,b.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:e(`usageAnalytics.capabilities.title`)})]}),(0,b.jsx)(`div`,{className:`mt-5 grid grid-cols-2 gap-3`,children:D.capabilities.map(t=>(0,b.jsxs)(`div`,{className:`rounded-xl bg-gray-50 px-3 py-2.5 dark:bg-dark-200/70`,children:[(0,b.jsx)(`div`,{className:`text-xs font-medium capitalize text-gray-500 dark:text-dark-500`,children:t.capability}),(0,b.jsx)(`div`,{className:`mt-1 text-xl text-gray-950 dark:text-dark-950`,children:C(t.calls)}),(0,b.jsx)(`div`,{className:`mt-1 text-[11px] text-gray-500 dark:text-dark-500`,children:t.capability===`tts`?e(`usageAnalytics.capabilities.characters`,{count:C(t.inputUnits)}):t.capability===`image`?e(`usageAnalytics.capabilities.images`,{count:C(t.outputUnits)}):t.capability===`video`?e(`usageAnalytics.capabilities.jobs`,{count:C(t.calls)}):t.capability===`embedding`?e(`usageAnalytics.capabilities.inputs`,{count:C(t.inputUnits)}):e(`usageAnalytics.capabilities.reportedTokens`,{count:C(t.tokens)})})]},t.capability))})]})]})]}),(0,b.jsx)(`p`,{className:`px-1 text-xs leading-5 text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.privacyNote`)})]})]})};export{z as default};
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/OptimizedSyntaxHighlighter-CWYUn9Oe.js","js/rolldown-runtime-hePW80VL.js","js/markdown-core-DHnR5Hw8.js","js/syntax-highlight-Ca9bHsaz.js"])))=>i.map(i=>d[i]);
2
- import{n as e,r as t}from"./rolldown-runtime-hePW80VL.js";import{d as n,f as r,i}from"./markdown-core-DHnR5Hw8.js";import{i as a}from"./router-vendor-Ca9zqOqT.js";import{t as o}from"./utils-BM0_0iFj.js";import{t as s}from"./appStore-CGdhvp9P.js";import{a as c,i as l,n as u,r as d,s as f,t as p}from"./messageCodeStyles-DalG2j6U.js";import{n as m,t as h}from"./markdown-math-B7FlYsmr.js";var g=e({RichMessageContent:()=>x,default:()=>x}),_=t(r(),1),v=n(),y=_.lazy(()=>a(()=>import(`./OptimizedSyntaxHighlighter-CWYUn9Oe.js`).then(e=>e.n),__vite__mapDeps([0,1,2,3])));function b({children:e,className:t}){return(0,v.jsx)(`pre`,{dir:`ltr`,className:o(d,`rounded-lg`,t),children:(0,v.jsx)(`code`,{children:e})})}var x=({content:e,className:t})=>{let n=s(e=>e.theme.mode===`dark`),r=_.useMemo(()=>f(e),[e]);return(0,v.jsx)(`div`,{dir:`auto`,className:o(`prose prose-sm max-w-none dark:prose-invert prose-gray`,`[&_.katex-display]:overflow-x-auto [&_.katex-display]:overflow-y-hidden [&_.katex-display]:py-2`,`[&_.katex]:text-inherit`,t),children:(0,v.jsx)(i,{remarkPlugins:[m],rehypePlugins:[h],components:{code({className:e,children:t,node:r,...i}){let a=/language-([^\s]+)/.exec(e||``),s=String(t),d=s.replace(/\n$/,``),f=a?a[1]:null;return f||s.includes(`
3
- `)?(0,v.jsx)(c,{code:d,language:f,state:`complete`,children:(0,v.jsx)(`div`,{className:`overflow-x-auto`,children:(0,v.jsx)(_.Suspense,{fallback:(0,v.jsx)(b,{className:`!m-0 !rounded-none !border-none`,children:d}),children:(0,v.jsx)(y,{language:f||`text`,isDark:n,backgroundColor:n?p:u,borderRadius:0,customStyle:l,className:`!m-0 !rounded-none !border-none`,children:d})})})}):(0,v.jsx)(`code`,{dir:`ltr`,className:o(`px-1.5 py-0.5 rounded-md bg-gray-100 dark:bg-dark-200 text-gray-800 dark:text-dark-800`,`font-mono text-[0.85em] border border-gray-200 dark:border-dark-300`,e),...i,children:t})},pre({children:e}){return(0,v.jsx)(v.Fragment,{children:e})},p({children:e,...t}){return(0,v.jsx)(`div`,{dir:`auto`,className:`mb-2.5 last:mb-0 leading-relaxed`,...t,children:e})},ul({children:e,...t}){return(0,v.jsx)(`ul`,{dir:`auto`,className:`list-disc list-inside mb-2.5 space-y-1 ps-4`,...t,children:e})},ol({children:e,...t}){return(0,v.jsx)(`ol`,{dir:`auto`,className:`list-decimal list-inside mb-2.5 space-y-1 ps-4`,...t,children:e})},li({children:e,...t}){return(0,v.jsx)(`li`,{dir:`auto`,className:`text-gray-700 dark:text-dark-700 leading-relaxed`,...t,children:e})},blockquote({children:e,...t}){return(0,v.jsx)(`blockquote`,{dir:`auto`,className:`border-s-2 border-primary-400 dark:border-primary-500 bg-primary-25 dark:bg-primary-950/30 ps-3 py-2 my-3 rounded-e-lg italic text-gray-700 dark:text-dark-700`,...t,children:e})},h1({children:e,...t}){return(0,v.jsx)(`h1`,{dir:`auto`,className:`text-xl font-bold mb-3 mt-5 first:mt-0 text-gray-900 dark:text-dark-800 border-b border-gray-200 dark:border-dark-300 pb-1.5`,...t,children:e})},h2({children:e,...t}){return(0,v.jsx)(`h2`,{dir:`auto`,className:`text-lg font-semibold mb-2 mt-5 first:mt-0 text-gray-900 dark:text-dark-800`,...t,children:e})},h3({children:e,...t}){return(0,v.jsx)(`h3`,{dir:`auto`,className:`text-base font-medium mb-2 mt-4 first:mt-0 text-gray-900 dark:text-dark-800`,...t,children:e})}},children:r})})};export{g as n,x as t};