libre-webui 0.21.2 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (946) 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 +612 -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 +81 -0
  376. package/backend/dist/platform/storage/storageFactory.d.ts.map +1 -0
  377. package/backend/dist/platform/storage/storageFactory.js +518 -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 +136 -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 +117 -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 +97 -34
  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 +799 -274
  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 +15 -4
  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 +9 -2
  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-CUhEG7E2.js +33 -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 +36 -18
  828. package/frontend/dist/js/{ArtifactContainer-C_UdeK4k.js → ArtifactContainer-BTEDhBnv.js} +1 -1
  829. package/frontend/dist/js/{ArtifactDemoPage-D3AuvuR5.js → ArtifactDemoPage-B0gN3YTl.js} +1 -1
  830. package/frontend/dist/js/{ArtifactSandboxFrame-BiXl9iGD.js → ArtifactSandboxFrame-CLBXQkZs.js} +3 -3
  831. package/frontend/dist/js/{ArtifactSlideOutPanel-CvgS3sfQ.js → ArtifactSlideOutPanel-CfqHPFdE.js} +1 -1
  832. package/frontend/dist/js/{Button-DcBM7gdH.js → Button-BV44cTnj.js} +1 -1
  833. package/frontend/dist/js/ChatPage-DIkAXZWA.js +23 -0
  834. package/frontend/dist/js/{FirstTimeSetup-B9742i3H.js → FirstTimeSetup-B8phXGNA.js} +1 -1
  835. package/frontend/dist/js/GalleryPage-W4uI043I.js +1 -0
  836. package/frontend/dist/js/HomePage-DlxehbyO.js +1 -0
  837. package/frontend/dist/js/{LibreClawPage-Ds6pqEyk.js → LibreClawPage-CgD0_G_F.js} +1 -1
  838. package/frontend/dist/js/{ModelManagerModals-BBNg2fxs.js → ModelManagerModals-D7jIT3v1.js} +1 -1
  839. package/frontend/dist/js/{ModelSelector-CJfJYwxh.js → ModelSelector-BYxJU1UV.js} +1 -1
  840. package/frontend/dist/js/ModelsPage-C4XdCKP5.js +2 -0
  841. package/frontend/dist/js/NotesPage-CDECOl4V.js +1 -0
  842. package/frontend/dist/js/{OptimizedSyntaxHighlighter-CWYUn9Oe.js → OptimizedSyntaxHighlighter-XwqZEoTf.js} +1 -1
  843. package/frontend/dist/js/{PersonasPage-CbQVv9OM.js → PersonasPage-CjSLPrgS.js} +2 -2
  844. package/frontend/dist/js/PluginUsagePage-DJOXJuH4.js +1 -0
  845. package/frontend/dist/js/RichMessageContent-Debeh6bi.js +3 -0
  846. package/frontend/dist/js/SettingsModal-cUqAeYUP.js +1 -0
  847. package/frontend/dist/js/{SettingsToggle-Uz2jvV64.js → SettingsToggle-WTa0rgvY.js} +1 -1
  848. package/frontend/dist/js/{SystemPage-CIBDZTWB.js → SystemPage-DxPw0GS7.js} +1 -1
  849. package/frontend/dist/js/UserManagementPage-CEdYFe_Z.js +1 -0
  850. package/frontend/dist/js/WorkPage-DDVeuG_9.js +6 -0
  851. package/frontend/dist/js/api-IzobHGND.js +14 -0
  852. package/frontend/dist/js/appStore-DKwC2vgn.js +2 -0
  853. package/frontend/dist/js/ar-xTSvTq05.js +2 -0
  854. package/frontend/dist/js/authStore-OaTuapL7.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-DXGUVLXD.js +3 -0
  858. package/frontend/dist/js/{config-CV8L89A5.js → config-DPEEuTAe.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-Lx6fK8Ug.js → estree-ChwJsD2w.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-Dx5reqmV.js → html-DFrVjciF.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-Bd5G8zQB.js → markdown-FLLx7b67.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-CUWSpffv.js → messageCodeStyles-CBkkZY4n.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-DLNXiOUi.js → standalone-i8-5bg5p.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-YKxslwSt.js → typescript-CQ3x-Uni.js} +1 -1
  890. package/frontend/dist/js/{ui-Dw6jDKxN.js → ui-BHhR3Vok.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-t1quV8ce.js → useTranslation-C3ei3mJq.js} +1 -1
  894. package/frontend/dist/js/{utils-iKndEgla.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-LrQmhNxb.js → workApi-Czu69yWS.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-CN7wpzUO.js +0 -26
  906. package/frontend/dist/assets/index-Dqkx5o2y.css +0 -1
  907. package/frontend/dist/js/ChatPage-DBEi-FSO.js +0 -16
  908. package/frontend/dist/js/GalleryPage-BL0x_xl7.js +0 -1
  909. package/frontend/dist/js/HomePage-Ukn2Y-BG.js +0 -1
  910. package/frontend/dist/js/ModelsPage-CDPJM-LA.js +0 -2
  911. package/frontend/dist/js/NotesPage-DJ-_MSI1.js +0 -1
  912. package/frontend/dist/js/PluginUsagePage-D69rQvFl.js +0 -1
  913. package/frontend/dist/js/RichMessageContent-DfuCu6PB.js +0 -3
  914. package/frontend/dist/js/SettingsModal-D87lWSx4.js +0 -1
  915. package/frontend/dist/js/UserManagementPage-DzMnFKDG.js +0 -1
  916. package/frontend/dist/js/WorkPage-D84JNdjS.js +0 -6
  917. package/frontend/dist/js/api-DhmVEJr2.js +0 -14
  918. package/frontend/dist/js/appStore-BsqeY2tS.js +0 -2
  919. package/frontend/dist/js/ar-BgCHB9_9.js +0 -2
  920. package/frontend/dist/js/authStore-DanfaPdm.js +0 -4
  921. package/frontend/dist/js/bn-Cr8_opuR.js +0 -2
  922. package/frontend/dist/js/chatStore-C25ywAXQ.js +0 -3
  923. package/frontend/dist/js/cs-Bb9gXpfH.js +0 -2
  924. package/frontend/dist/js/da-JfdGHjAw.js +0 -2
  925. package/frontend/dist/js/de-CczkCOVx.js +0 -2
  926. package/frontend/dist/js/es-n_0cjhn7.js +0 -2
  927. package/frontend/dist/js/fr-Pno128cn.js +0 -2
  928. package/frontend/dist/js/hi-DBCdcL4p.js +0 -2
  929. package/frontend/dist/js/id-85QDk-wA.js +0 -2
  930. package/frontend/dist/js/is-9MuKmBft.js +0 -2
  931. package/frontend/dist/js/it-C5mz9I3H.js +0 -2
  932. package/frontend/dist/js/ja-Cu90QTBd.js +0 -2
  933. package/frontend/dist/js/ko-CSdgcMgq.js +0 -2
  934. package/frontend/dist/js/markdown-core-DHnR5Hw8.js +0 -16
  935. package/frontend/dist/js/ms-IQMi6HBU.js +0 -2
  936. package/frontend/dist/js/nl-BwpdTgvn.js +0 -2
  937. package/frontend/dist/js/pl-zq8ctKrQ.js +0 -2
  938. package/frontend/dist/js/pt-BIQu7dBu.js +0 -2
  939. package/frontend/dist/js/ru-BT5-Z0F9.js +0 -2
  940. package/frontend/dist/js/sv-B1_q6-Uj.js +0 -2
  941. package/frontend/dist/js/th-BiLLwq0A.js +0 -2
  942. package/frontend/dist/js/tr-NZbkkeKs.js +0 -2
  943. package/frontend/dist/js/ui-vendor-xUzKqAXI.js +0 -177
  944. package/frontend/dist/js/uk-CGu1pg-F.js +0 -2
  945. package/frontend/dist/js/vi-ClvH5JZg.js +0 -2
  946. package/frontend/dist/js/zh-Jgjy3uAG.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-t1quV8ce.js";import{a as c,n as l,r as u,t as d}from"./utils-iKndEgla.js";import{_ as f,a as p,c as m,i as h,l as g,n as _,r as v,t as y}from"./chatStore-C25ywAXQ.js";import{A as b,B as x,D as S,En as C,Et as w,F as T,Ft as E,G as D,Jt as O,Kt as k,N as ee,Nt as A,P as j,R as M,St as N,T as P,Tn as F,Tt as I,Wt as L,Yt as te,_n as R,a as ne,bn as re,c as z,d as ie,fn as ae,g as oe,h as se,ht as B,in as ce,j as V,lt as le,mt as H,n as U,nt as ue,o as de,on as fe,pn as pe,q as me,r as W,rn as he,rt as ge,sn as _e,t as ve,tt as ye,v as G,x as be}from"./ui-vendor-xUzKqAXI.js";import{i as K,t as q}from"./logger-DSXjF4ye.js";import{S as xe,a as J,b as Se,d as Ce,g as we,i as Te,l as Ee,n as De,p as Oe,u as ke,v as Ae}from"./api-DhmVEJr2.js";import{n as je,r as Y}from"./authStore-DanfaPdm.js";import{t as Me}from"./appStore-BsqeY2tS.js";import{i as Ne,r as Pe,t as Fe}from"./welcomePrompts-to5mv_gx.js";import{l as Ie}from"./messageCodeStyles-CUWSpffv.js";import{t as X}from"./Button-DcBM7gdH.js";import{d as Le,f as Re,l as ze}from"./ui-Dw6jDKxN.js";import{l as Be}from"../assets/index-CN7wpzUO.js";import{c as Ve,s as He}from"./ArtifactSandboxFrame-BiXl9iGD.js";import{t as Ue}from"./ArtifactContainer-C_UdeK4k.js";import{t as We}from"./ModelSelector-CJfJYwxh.js";var Ge=r(),Z=e(n(),1),Q=t(),Ke=({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)(H,{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)(fe,{size:12}):(0,Q.jsx)(ce,{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()]})]})]})},qe=q(`components:ttsbutton`),Je=null,Ye=null,Xe=0,Ze=3e5;async function Qe(e=!1){let t=Date.now();return!e&&Je!==null&&t-Xe<Ze?Je:Ye||(Ye=(async()=>{try{let e=await J.getModels();return e.success&&e.data&&e.data.length>0?(Je=e.data,Xe=t,e.data):(Je=[],Xe=t,[])}catch{return Je=[],Xe=t,[]}finally{Ye=null}})(),Ye)}function $e(e){return e.split(/(?<=[.!?]["']?\s)|(?<=[.!?]["']?$)/).map(e=>e.trim()).filter(e=>e.length>0)}var et=({text:e,className:t,size:n=`sm`})=>{let{t:r}=s(),{preferences:i}=Me(),[a,o]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)(!1),[u,f]=(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 Qe(),n=De(t,i.ttsSettings?.model,i.ttsSettings?.pluginId);i.ttsSettings?.model&&!n&&(t=await Qe(!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 J.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 J.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){qe.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){qe.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),f(null),v.current=!1;try{let t=i.ttsSettings,n=Te(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,d=n?.config?.default_format;if(t?.streamSentences){let t=$e(e);if(t.length===0)throw Error(r(`ttsButton.generateFailed`));l(!1),o(!0),await S(t,a,s,c,u,d),v.current||o(!1)}else await x(e,a,s,c,u,d),l(!1),o(!0),_.current&&(_.current.onended=()=>{o(!1),_.current=null},_.current.onerror=()=>{f(r(`ttsButton.playbackFailed`)),o(!1),_.current=null})}catch(e){let t=e instanceof Error?e.message:r(`ttsButton.generateFailed`);f(t),qe.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:d(`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)(le,{className:d(E[n],`animate-spin`)}):a?(0,Q.jsx)(be,{className:E[n]}):u?(0,Q.jsx)(ne,{className:E[n]}):(0,Q.jsx)(de,{className:E[n]})})},tt=new Map;function nt(e,t,n=``){let r=tt.get(e);if(n){if((!r||r.state===`none`)&&(tt.set(e,{state:`open`,startedAt:Date.now()}),!t))return;let n=tt.get(e);t&&n?.state===`open`&&tt.set(e,{state:`done`,durationMs:Date.now()-n.startedAt});return}if(r&&r.state!==`open`||!t)return;let i=c(t);if(!r){i.thinkingComplete?tt.set(e,{state:`none`}):tt.set(e,{state:`open`,startedAt:Date.now()});return}i.thinkingComplete&&tt.set(e,{state:`done`,durationMs:Date.now()-r.startedAt})}function rt(e){let t=tt.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=tt.get(e);if(tt.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=Ve(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&&(He(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=q(`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)(Be,{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:d(`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)(z,{"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:u}=s(),f=e.role===`user`,p=e.role===`system`,{preferences:m}=Me(),{user:h}=je(),{setSystemMessage:g,getCurrentPersona:_,currentSession:v,rateMessage:x}=y(),S=_(),[C,w]=(0,Z.useState)(!1),[E,O]=(0,Z.useState)(e.content),[ee,A]=(0,Z.useState)(null),[j,N]=(0,Z.useState)(!1),[P,F]=(0,Z.useState)(!1),[I,L]=(0,Z.useState)(!1),[te,R]=(0,Z.useState)(!1),[ne,re]=(0,Z.useState)(!1),z=(0,Z.useRef)(null),ie=(0,Z.useRef)(t),B=(0,Z.useRef)(!1),ce=async()=>{try{await navigator.clipboard.writeText(e.content),Ie(`success`),re(!0),setTimeout(()=>re(!1),2e3)}catch(e){Ht.error(`Failed to copy message:`,e)}},{thinkingContent:V,thinkingStreaming:le,parsedContent:H,artifacts:ue}=(0,Z.useMemo)(()=>{if(f||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}:c(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,f,p,t]),de=le?void 0:e.statistics?.thinking_duration_ms??rt(e.id);(0,Z.useEffect)(()=>{let e=ie.current&&!t;return ie.current=t,e&&!B.current&&!f&&!p&&H&&m.ttsSettings?.enabled&&m.ttsSettings?.autoPlay&&(B.current=!0,(async()=>{R(!0);try{let e=await J.getModels(),t=e.success&&e.data?e.data:[],n=m.ttsSettings,r=Te(t,n?.model,n?.pluginId),i=De(t,n?.model,n?.pluginId),a=await J.generateBase64({model:r?.model||n?.model||`tts-1`,pluginId:r?.plugin||n?.pluginId,input:H,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);z.current=t,t.onended=()=>{R(!1),z.current=null},t.onerror=()=>{R(!1),z.current=null},await t.play()}}catch(e){Ht.error(`Auto-play TTS failed:`,e),R(!1)}})()),()=>{z.current&&(z.current.pause(),z.current=null)}},[t,f,p,H,m.ttsSettings]);let pe=()=>p?o(`chatMessage.system`):f?m.showUsername&&h?.username?h.username:o(`chatMessage.you`):S?.name?S.name:e.model||o(`chatMessage.assistant`),me=()=>{w(!0),O(e.content)},W=async()=>{N(!0);try{g(E),w(!1),Ht.debug(`✅ System message updated:`,E)}catch(e){Ht.error(`Failed to save system message:`,e)}finally{N(!1)}},ge=()=>{w(!1),O(e.content)},ve=()=>{let t=E.trim();w(!1),!(!t||t===e.content)&&a?.(e.id,t)},ye=t=>{v&&x(v.id,e.id,e.rating===t?void 0:t)},G=(e,t=100)=>e.length<=t?e:e.substring(0,t)+`...`,be=p&&e.content.length>100;return(0,Q.jsxs)(`div`,{className:d(`group flex py-1.5 transition-colors sm:py-2`,f?`justify-end`:`justify-start`,n),children:[(0,Q.jsxs)(`div`,{className:d(`flex min-w-0 gap-2.5 sm:gap-3`,f?`max-w-[85%] sm:max-w-[70%]`:`w-full`),children:[!f&&!p&&(0,Q.jsx)(Ut,{role:`assistant`,personaAvatar:S?.avatar}),(0,Q.jsxs)(`div`,{className:d(`min-w-0 flex-1`,f?`flex flex-col items-end`:p?`py-1.5`:`py-0.5`),children:[!f&&!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:l(e.timestamp,u.language)})]}),(0,Q.jsxs)(`div`,{className:d(!f&&!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:()=>A(e)})},t))}),f?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:E,onChange:e=>O(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey?(e.preventDefault(),ve()):e.key===`Escape`&&ge()},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:ge,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)(b,{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:W,disabled:j,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)(T,{className:`h-3 w-3 text-green-600 dark:text-green-400`})}),(0,Q.jsx)(`button`,{onClick:ge,disabled:j,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)(U,{className:`h-3 w-3 text-red-600 dark:text-red-400`})})]}):(0,Q.jsx)(`button`,{onClick:me,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)(D,{className:`h-3 w-3 text-gray-600 dark:text-gray-400`})})})]}),C?(0,Q.jsx)(`textarea`,{dir:`auto`,value:E,onChange:e=>O(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:j}):(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:P?e.content:G(e.content)}),be&&(0,Q.jsx)(`button`,{onClick:()=>F(!P),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:P?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(he,{className:`h-3 w-3`}),o(`chatMessage.showLess`)]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(fe,{className:`h-3 w-3`}),o(`chatMessage.showMore`)]})})]})]}):(0,Q.jsxs)(`div`,{className:`relative`,children:[(V||le)&&(0,Q.jsxs)(`div`,{className:`mb-3 border-s border-gray-200 ps-3 dark:border-dark-300`,children:[(0,Q.jsxs)(`button`,{onClick:()=>L(!I),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)(ae,{className:d(`h-3.5 w-3.5`,le&&`animate-pulse-subtle motion-reduce:animate-none`)}),le?(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:de===void 0?o(`chatMessage.thinking`):o(`chatMessage.thoughtFor`,{duration:at(de)})}),I?(0,Q.jsx)(he,{className:`h-3.5 w-3.5`}):(0,Q.jsx)(fe,{className:`h-3.5 w-3.5`})]}),I&&V&&(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:V})})]}),(0,Q.jsx)(ze,{content:H,isStreaming:t})]}),!f&&!p&&ue.length>0&&(0,Q.jsx)(`div`,{className:`mt-3`,children:(0,Q.jsx)(Ue,{artifacts:ue})}),!f&&!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)]}),!f&&!p&&e.statistics&&(0,Q.jsx)(`div`,{className:`mt-2`,children:(0,Q.jsx)(Ke,{statistics:e.statistics})}),!p&&!t&&(0,Q.jsxs)(`div`,{className:d(`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`,f?`mt-1 justify-end`:`mt-1`),children:[f&&(0,Q.jsxs)(`span`,{dir:`auto`,className:`me-1 text-[10px] tabular-nums`,title:l(e.timestamp,u.language),children:[pe(),` ·`,` `,l(e.timestamp,u.language)]}),!f&&H&&(0,Q.jsx)(et,{text:H,size:`sm`,className:d(`transition-colors`,te&&`bg-primary-50 text-primary-600 dark:bg-primary-900/20 dark:text-primary-400`)}),f&&a&&!C&&(0,Q.jsx)(`button`,{onClick:()=>{O(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)(D,{className:`h-3.5 w-3.5`})}),(0,Q.jsx)(`button`,{onClick:ce,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(ne?`chatMessage.copied`:`chatMessage.copyMessage`),children:ne?(0,Q.jsx)(_e,{className:`h-3.5 w-3.5 text-green-500`}):(0,Q.jsx)(k,{className:`h-3.5 w-3.5`})}),!f&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`button`,{onClick:()=>ye(1),className:d(`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)(se,{className:`h-3.5 w-3.5`,fill:e.rating===1?`currentColor`:`none`})}),(0,Q.jsx)(`button`,{onClick:()=>ye(-1),className:d(`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)(oe,{className:`h-3.5 w-3.5`,fill:e.rating===-1?`currentColor`:`none`})})]}),!f&&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`})})]})]})]}),f&&(0,Q.jsx)(Ut,{role:`user`,user:h??null})]}),ee&&(0,Ge.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:()=>A(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(),A(null)},children:(0,Q.jsx)(U,{className:`h-7 w-7`})}),(0,Q.jsx)(`img`,{src:ee,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,f]=(0,Z.useState)(0),p=(0,Z.useCallback)((e,t)=>{let n=i.current;if(!n)return;let r=n.getBoundingClientRect(),a=t.getBoundingClientRect();f(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),f=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":f,"aria-label":r(`chatHistory.jumpToTurn`,{index:a+1,total:e.length}),tabIndex:a===h?0:-1,className:d(`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:d(`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:d(`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:d(`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,f=u?{...e,content:n??e.content,thinking:r||e.thinking}:e;return(0,Q.jsxs)(`div`,{className:d(`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:d(`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)(_e,{className:`h-3 w-3`}),!l&&!u&&(0,Q.jsx)(`span`,{className:`text-[10px] opacity-50`,children:`select`})]}),(0,Q.jsx)(`div`,{className:d(!l&&!u&&`opacity-75`),children:(0,Q.jsx)(Wt,{message:f,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:G,browser:N,Read:E,Write:E,Edit:E,image:B,memory_search:L,memory_get:L,working:W,thinking:W,default:W},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:d(`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:d(`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:d(`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)})})};q(`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:f,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]),[A,j]=(0,Z.useState)(null),M=(0,Z.useCallback)(()=>{let e=_.current;if(!e||k.length===0){j(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];j(e=>e===r?e:r)},[k]),N=(0,Z.useCallback)(()=>{b.current===null&&(b.current=window.requestAnimationFrame(()=>{b.current=null,M()}))},[M]),F=(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),N()},[e.length,N]),I=(0,Z.useCallback)(()=>{g.current&&clearTimeout(g.current),g.current=setTimeout(F,180)},[F]),L=(0,Z.useCallback)((e=!1)=>{C.current&&!e||h.current?.scrollIntoView({behavior:en()})},[]),te=(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),N(),I();return}C.current=!o,T(!o&&e.length>0),a<=2&&k.length>0?(x.current=k.length-1,j(k[k.length-1])):N()},[k,e.length,I,N]),R=(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}),N(),r===`auto`?F():I()},[F,I,N]),ne=(0,Z.useRef)(e.length);if((0,Z.useEffect)(()=>{e.length>ne.current&&!C.current&&L(),ne.current=e.length},[e.length,L]),(0,Z.useEffect)(()=>{i&&(t||n)&&!C.current&&requestAnimationFrame(()=>{let e=_.current;e&&(e.scrollTop=e.scrollHeight)})},[i,t,n]),(0,Z.useEffect)(()=>{N();let e=v.current,t=_.current,n=typeof ResizeObserver>`u`?null:new ResizeObserver(N);return e&&n?.observe(e),t&&n?.observe(t),window.addEventListener(`resize`,N),()=>{n?.disconnect(),window.removeEventListener(`resize`,N)}},[O,N]),(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:d(`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 z=-1;for(let e=E.length-1;e>=0;e--)if(E[e].messages.some(e=>e.role===`assistant`)){z=e;break}return(0,Q.jsxs)(`div`,{className:d(`relative min-h-0 flex-1`,o),style:{WebkitAppRegion:`no-drag`},children:[(0,Q.jsx)(`div`,{ref:_,"data-testid":`chat-scroll-viewport`,onScroll:te,className:d(`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===z,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&&f&&f.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:f.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:A,onSelect:R}),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:d(`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)(re,{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:f}=(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:d(`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:d(`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)(te,{className:`h-3 w-3`}),f&&(0,Q.jsx)(`span`,{children:f}),!f&&u&&(0,Q.jsx)(`span`,{children:`code`})]})})]})});an.displayName=`CodeAwareTextarea`;var on=q(`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,f]=(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):C.error(`File type not supported: ${n.name}`)}},v=async r=>{if(n-e.length<=0){C.error(`Maximum ${n} images allowed`);return}if(r.size>10485760){C.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){C.error(`File size must be less than 10MB`);return}m(!0);try{let t=await Se.uploadDocument(e,r);if(t.success&&t.data){let n=t.data;g(e=>[...e,n]),i?.(n),C.success(`Document "${e.name}" uploaded`)}else C.error(t.error||`Failed to upload document`)}catch(e){on.error(`Document upload error:`,e),C.error(`Failed to upload document`)}finally{m(!1)}},b=e=>{e.preventDefault(),a||f(!0)},x=e=>{e.preventDefault(),f(!1)},S=e=>{e.preventDefault(),f(!1),a||_(e.dataTransfer.files)},w=n=>{t(e.filter((e,t)=>t!==n))},T=async e=>{try{let t=await Se.deleteDocument(e);t.success?(g(t=>t.filter(t=>t.id!==e)),C.success(`Document removed`)):C.error(t.error||`Failed to remove document`)}catch(e){on.error(`Error removing document:`,e),C.error(`Failed to remove document`)}},D=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:d(`space-y-3`,o),children:[(0,Q.jsxs)(`div`,{className:d(`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)(le,{className:`h-8 w-8 text-gray-400 dark:text-gray-500 mb-2 animate-spin`}):(0,Q.jsx)(ie,{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(),w(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)(U,{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)(E,{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:D(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)(U,{className:`h-3 w-3`})})]},e.id))]})]})},cn=q(`components:document-indicator`),ln=({sessionId:e,className:t=``})=>{let[n,r]=(0,Z.useState)([]);if((0,Z.useEffect)(()=>{if(!e)return;let t=async()=>{try{let t=await Se.getDocuments(e);t.success&&t.data&&r(t.data)}catch(e){cn.error(`Failed to load documents:`,e)}};t();let n=()=>void t();return window.addEventListener(`libre:documents-updated`,n),()=>window.removeEventListener(`libre:documents-updated`,n)},[e]),!e||n.length===0)return null;let i=n.reduce((e,t)=>e+t.size,0);return(0,Q.jsxs)(`div`,{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
- ${t}
9
- `,title:`${n.length} document(s) available for context - Total: ${(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]})(i)}`,children:[(0,Q.jsx)(R,{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:[n.length,` doc`,n.length===1?``:`s`]})]})},un=q(`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]},f=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:d(`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)(b,{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)(Le,{value:u().label,onChange:e=>f(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)(Re,{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)(O,{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)(E,{className:`h-3 w-3 mr-1`}),r(`chat.structuredOutput.enabled`)]})]})},pn=q(`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),f=(0,Z.useRef)(``),h=(0,Z.useMemo)(()=>!!mn(),[]),[b,S]=(0,Z.useState)([]),[C,w]=(0,Z.useState)(null),[T,D]=(0,Z.useState)(!1),[O,k]=(0,Z.useState)(!1),[A,j]=(0,Z.useState)(!1),[M,P]=(0,Z.useState)(!1);(0,Z.useEffect)(()=>{let e=!1;return Ae.getConfig().then(t=>{!e&&t.success&&t.data&&j(t.data.allowed)}).catch(()=>{}),()=>{e=!0}},[]);let[I,L]=(0,Z.useState)(null),[te,ne]=(0,Z.useState)(!1),[re,z]=(0,Z.useState)([]),[ie,ae]=(0,Z.useState)(!1),[oe,se]=(0,Z.useState)(!1),[ce,V]=(0,Z.useState)(null),[H,U]=(0,Z.useState)(!1),de=(0,Z.useRef)(null),fe=(0,Z.useRef)(null),{isGenerating:W,setBackgroundImage:he}=Me(),ge=Me(e=>e.preferences.imageGenSettings?.enabled===!0),ve=ge&&H,{currentSession:G,models:K}=y(),q=(0,Z.useRef)(null),J=(0,Z.useMemo)(()=>({model:G?.personaId?`persona:${G.personaId}`:G?.model||``,providerType:G?.providerType,providerId:G?.providerId}),[G?.model,G?.personaId,G?.providerId,G?.providerType]),Ce=(0,Z.useMemo)(()=>g(K,J),[K,J]),Te=J.model?p(Ce,J):``,De=m(K,J);(0,Z.useEffect)(()=>{let e=!1;return ge&&(async()=>{try{let t=await we.getPlugins();if(e)return;U(!!(t.success&&t.data&&t.data.length>0))}catch{if(e)return;U(!1)}})(),()=>{e=!0}},[ge]),(0,Z.useEffect)(()=>{if(!O)return;let e=e=>{de.current&&!de.current.contains(e.target)&&(k(!1),L(null))};return window.addEventListener(`mousedown`,e),()=>window.removeEventListener(`mousedown`,e)},[O]);let Oe=()=>{k(!1),L(null),ne(!1)};(0,Z.useEffect)(()=>{if(!te)return;let e=!1;return Se.getCollections().then(t=>{!e&&t.success&&t.data&&z(t.data)}).catch(()=>{}),()=>{e=!0}},[te]);let ke=G?.settings?.knowledgeCollectionIds??[],je=async e=>{if(!G)return;let t=ke.includes(e)?ke.filter(t=>t!==e):[...ke,e],n={...G.settings,knowledgeCollectionIds:t.length>0?t:void 0};if(y.setState(e=>({currentSession:e.currentSession?.id===G.id?{...e.currentSession,settings:n}:e.currentSession,sessions:e.sessions.map(e=>e.id===G.id?{...e,settings:n}:e)})),!G.isPrivate)try{await xe.updateSession(G.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 Y=()=>{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,f.current=a,t.onresult=e=>{let t=``;for(let n=0;n<e.results.length;n++)t+=e.results[n][0]?.transcript??``;let n=f.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}},Ne=async e=>{let t=e.target.files?.[0];if(e.target.value=``,t){Oe(),se(!0);try{let e=await Se.uploadDocument(t,G?.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{se(!1)}}},Pe=async()=>{let e=I?.trim();if(!(!e||ie)){ae(!0);try{let t=await Se.fetchWebpage(e,G?.id);t.success?(F.success(r(`chat.input.menu.webpageAttached`)),window.dispatchEvent(new Event(`libre:documents-updated`)),Oe()):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{ae(!1)}}},Fe=t=>{if(t.preventDefault(),!(!a.trim()||W)){if(!De){F.error(r(`chat.model.selectBeforeSending`));return}e(a.trim(),b.length>0?b:void 0,C||void 0,A&&M?!0:void 0),o(``),S([])}},Ie=e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Fe(e))},Le=()=>{t()};(0,Z.useEffect)(()=>{let e=q.current;e&&(e.style.height=`auto`,e.style.height=a?`${Math.min(e.scrollHeight,200)}px`:``)},[a]),(0,Z.useEffect)(()=>{(async()=>{if(G?.personaId)try{let e=await Ee.getPersona(G.personaId);if(e.success&&e.data)V(e.data);else{pn.warn(`Persona ${G.personaId} not found, clearing reference`),V(null);let{setCurrentSession:e}=y.getState();e({...G,personaId:void 0})}}catch(e){if(pn.error(`Failed to load current persona:`,e),V(null),G){let{setCurrentSession:e}=y.getState();e({...G,personaId:void 0})}}else V(null)})()},[G?.personaId]);let Re=async e=>{let t=v(Ce,e.target.value);if(t&&G)try{if(t.model.startsWith(`persona:`)){let e=t.model.slice(8),n=await Ee.getPersona(e);if(!n.success||!n.data){F.error(r(`chat.persona.loadFailed`));return}let i=n.data,a=await xe.updateSession(G.id,{personaId:e,model:t.model,providerType:`ollama`,providerId:null});if(a.success&&a.data){let{sessions:e}=y.getState(),t=e.map(e=>e.id===G.id?a.data:e);y.setState({sessions:t,currentSession:a.data}),i.background&&he(i.background),F.success(r(`chat.persona.applied`))}}else{let e=await xe.updateSession(G.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}=y.getState(),n=t.map(t=>t.id===G.id?e.data:t);y.setState({sessions:n,currentSession:e.data}),he(null),F.success(r(`chat.model.updated`))}}}catch(e){pn.error(`Failed to update session:`,e),F.error(r(`chat.toasts.updateFailed`))}},ze=b.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:b,onImagesChange:S,maxImages:5,sessionId:G?.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:d(`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:de,className:`relative flex-shrink-0`,children:[(0,Q.jsx)(X,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>{if(T){D(!1);return}k(e=>!e),L(null)},className:d(`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:oe||ie?(0,Q.jsx)(le,{className:`h-4 w-4 animate-spin`}):ze?(0,Q.jsxs)(`div`,{className:`relative flex items-center justify-center`,children:[(0,Q.jsx)(me,{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)(ye,{className:`h-4 w-4`}):(0,Q.jsx)(x,{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:te?(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`)}),re.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`)}):re.map(e=>{let t=ke.includes(e.id);return(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>void je(e.id),className:d(`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)(R,{className:`h-4 w-4 shrink-0`}),(0,Q.jsx)(`span`,{className:`truncate`,children:e.name})]}),t&&(0,Q.jsx)(_e,{className:`h-3.5 w-3.5 shrink-0`})]},e.id)}),(0,Q.jsx)(`button`,{type:`button`,onClick:()=>ne(!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`)})]}):I===null?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>{D(!0),Oe()},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)(B,{className:`h-4 w-4 text-gray-500 dark:text-dark-600`}),r(`chat.input.menu.uploadImages`)]}),(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>fe.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)(E,{className:`h-4 w-4 text-gray-500 dark:text-dark-600`}),r(`chat.input.menu.attachDocument`)]}),(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>L(``),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:()=>ne(!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)(R,{className:`h-4 w-4 text-gray-500 dark:text-dark-600`}),r(`chat.input.menu.attachKnowledge`)]}),ke.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:ke.length})]}),(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>{D(!0),Oe()},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)(pe,{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:I,onChange:e=>L(e.target.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),Pe()):e.key===`Escape`&&L(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:()=>L(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:!I.trim()||ie,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:ie?(0,Q.jsx)(le,{className:`h-3.5 w-3.5 animate-spin`}):r(`chat.input.menu.attach`)})]})]})}),(0,Q.jsx)(`input`,{ref:fe,type:`file`,accept:`.pdf,.txt,application/pdf,text/plain`,className:`hidden`,onChange:e=>void Ne(e)})]}),(0,Q.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,Q.jsx)(an,{ref:q,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:[G&&Ce.length>0&&(0,Q.jsx)(`div`,{className:`hidden sm:block`,children:(0,Q.jsx)(We,{models:Ce,selectedModel:Te,onModelChange:Re,getModelValue:_,currentPersona:ce,className:`min-w-[150px] max-w-[230px]`,compact:!0,showImageGen:ve})}),A&&(0,Q.jsx)(X,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>P(e=>!e),className:d(`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`,M&&`bg-primary-50 text-primary-600 dark:bg-primary-900/25 dark:text-primary-400`),title:r(M?`chat.input.webSearchOn`:`chat.input.webSearchOff`),"aria-pressed":M,children:(0,Q.jsx)(N,{className:`h-4 w-4`})}),h&&(0,Q.jsx)(X,{type:`button`,variant:`ghost`,size:`sm`,onClick:Y,className:d(`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)(ue,{className:`h-4 w-4`})}),W?(0,Q.jsx)(X,{type:`button`,variant:`ghost`,size:`sm`,onClick:Le,className:d(`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)(be,{className:`h-4 w-4`})}):(0,Q.jsx)(X,{type:`submit`,variant:`ghost`,size:`sm`,disabled:!a.trim()||n||!De,className:d(`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)(ee,{className:`h-4 w-4`})})]})]})}),G&&Ce.length>0&&(0,Q.jsx)(`div`,{className:`mt-3 sm:hidden`,children:(0,Q.jsx)(We,{models:Ce,selectedModel:Te,onModelChange:Re,getModelValue:_,currentPersona:ce,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:G?.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:[`•`,` `,b.length>0&&r(`chat.footer.images`,{count:b.length}),b.length>0&&C&&` • `,C&&r(`chat.footer.structuredOutput`)]})]})]})]})]})})},gn=q(`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=y(e=>e.draftSessionSettings),o=y(e=>e.setDraftSessionSettings),c=e?.model??t??``,l=Me(e=>e.preferences.generationOptions),d=Me(e=>e.preferences.modelGenerationOptions?.[c]),[f,p]=(0,Z.useState)({options:{},contextCapped:!1});(0,Z.useEffect)(()=>{if(!n||!c)return;let e=!1;return Oe.getModelDefaults(c).then(t=>{e||!t.success||!t.data||p({options:t.data.options??{},trainedContextLength:t.data.trainedContextLength,contextCapped:!!t.data.contextCapped})}).catch(()=>{}),()=>{e=!0}},[n,c]);let m=(0,Z.useMemo)(()=>({...l??{},...f.options,...d??{}}),[l,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,b]=(0,Z.useState)(e?.settings?.generationOptions??a.generationOptions??{}),[x,S]=(0,Z.useState)(!1),[w,T]=(0,Z.useState)(e?.id??`draft`),E=e?.id??`draft`;w!==E&&(T(E),_(h?.content??a.systemPrompt??``),b(e?.settings?.generationOptions??a.generationOptions??{}));let D=(e,t)=>{b(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}),C.success(i(`chat.controls.saved`)),r();return}let c=e.messages;if(t!==n.trim()&&(h?c=t?e.messages.map(e=>e.id===h.id?{...e,content:t}:e):e.messages.filter(e=>e.id!==h.id):t&&(c=[{id:u(),role:`system`,content:t,timestamp:Date.now()},...e.messages])),e.isPrivate)y.setState(t=>({currentSession:t.currentSession?.id===e.id?{...t.currentSession,messages:c,settings:s}:t.currentSession}));else{let t=await xe.updateSession(e.id,{messages:c,settings:s});if(!t.success||!t.data)throw Error(t.error||`Update failed`);let n=t.data;y.setState(t=>({sessions:t.sessions.map(t=>t.id===e.id?n:t),currentSession:t.currentSession?.id===e.id?n:t.currentSession}))}C.success(i(`chat.controls.saved`)),r()}catch(e){gn.error(`Failed to save chat controls:`,e),C.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)(U,{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:()=>{b({}),_(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=()=>{Se.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)(he,{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)(E,{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)(R,{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,Ge.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)(U,{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=()=>ke(e,64),u=t=>{Ce(t.currentTarget,e.name,64)};return(0,Q.jsxs)(`div`,{className:d(`relative`,n),children:[(0,Q.jsxs)(`button`,{ref:a,onClick:()=>i(!r),className:d(`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)(fe,{className:d(`h-3.5 w-3.5 transition-transform duration-200`,r&&`rotate-180`)})]}),r&&(0,Ge.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:d(`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)(U,{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)(ae,{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)(V,{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)(ge,{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)(ve,{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)(ae,{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/`)){C.error(`File ${o.name} is not an image`);continue}if(o.size>10485760){C.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&&C.error(`Only ${a} more images can be added`)},u=e=>{e.preventDefault(),c(!0)},f=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:d(`space-y-3`,r),children:[h&&(0,Q.jsxs)(`div`,{className:d(`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:f,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)(ie,{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)(U,{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)(B,{className:`h-4 w-4 mr-2`}),`Add More Images (`,e.length,`/`,n,`)`]})]})},$=q(`use-chat`),Tn=new Set([`New Chat`,`New Demo Session`]),En=e=>!e||Tn.has(e),Dn=e=>{let[t,n]=(0,Z.useState)(``),[r,i]=(0,Z.useState)(``),[a,o]=(0,Z.useState)(null),[s,c]=(0,Z.useState)(!1),[l,d]=(0,Z.useState)([]),{addMessage:f,updateMessage:p,updateMessageWithStatistics:h,applySessionTitle:g,setGeneratingTitleForSession:_}=y(),{setIsGenerating:v}=Me(),b=(0,Z.useRef)(null),x=(0,Z.useRef)(null),S=(0,Z.useRef)(!1),w=(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)(``),A=(0,Z.useRef)(``),j=(0,Z.useCallback)(()=>{k.current!==null&&typeof window<`u`&&window.cancelAnimationFrame(k.current),k.current=null},[]),M=(0,Z.useCallback)((e,t=!1,r=``)=>{if(ee.current=e,A.current=r,t||typeof window>`u`){j(),n(e),i(r);return}k.current===null&&(k.current=window.requestAnimationFrame(()=>{k.current=null,n(ee.current),i(A.current)}))},[j]),N=(0,Z.useCallback)(()=>{j(),ee.current=``,A.current=``,n(``),i(``)},[j]),P=(0,Z.useCallback)(()=>{x.current=null,S.current=!1,w.current=null},[]),F=(0,Z.useCallback)(async e=>{let t=Me.getState().preferences.titleSettings,n=x.current,r=S.current&&w.current===e;if($.debug(`Auto-title check:`,{firstMessage:n,autoTitle:t?.autoTitle,taskModel:t?.taskModel,shouldGenerateTitle:r}),!n||!r||!t?.autoTitle||!t?.taskModel){P();return}P(),$.debug(`Triggering auto-title generation...`),_(e);try{let r=await xe.generateTitle(e,t.taskModel,n,t.taskProviderType,t.taskProviderId);if($.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`?C.error(`Could not generate a title; using the message preview`):C.success(`Chat title generated`)}catch(e){$.error(`Failed to generate title:`,e),C.error(`Failed to generate chat title`)}finally{_(null)}},[g,P,_]);(0,Z.useEffect)(()=>()=>{Y.offMessage(`user_message`),Y.offMessage(`assistant_chunk`),Y.offMessage(`assistant_complete`),Y.offMessage(`tool_status`),Y.offMessage(`error`)},[e]),(0,Z.useEffect)(()=>{if(!e){Y.offMessage(`user_message`),Y.offMessage(`assistant_chunk`),Y.offMessage(`assistant_complete`),Y.offMessage(`tool_status`),Y.offMessage(`error`);return}return Y.onMessage(`user_message`,()=>{}),Y.onMessage(`assistant_chunk`,t=>{let n=t,r=n.messageId||b.current;r&&(T.current=n.total,typeof n.thinkingTotal==`string`&&(E.current=n.thinkingTotal),nt(r,n.total,E.current),M(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))}),Y.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()}])}),Y.onMessage(`assistant_complete`,t=>{let n=t;$.debug(`Hook: Received assistant_complete for session:`,e,`messageId:`,n.messageId,`with statistics:`,!!n.statistics),c(!1),N(),v(!1),d([]);let r=n.messageId||b.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;h(e,r,t,o,n.providerMetadata,i)}F(e),b.current=null,T.current=``,E.current=``,O.current&&clearTimeout(O.current),D.current=0}),Y.onMessage(`error`,e=>{let t=e;if(c(!1),N(),v(!1),b.current=null,E.current=``,t.code===`SESSION_NOT_FOUND`){$.warn(`Session not found, redirecting to create new session...`),C.error(`Session not found. Creating a new session...`),window.location.href=`/`;return}C.error(t.error),P()}),c(!1),N(),b.current=null,E.current=``,()=>{O.current&&clearTimeout(O.current),j()}},[e,p,h,v,M,N,j,F,P]);let I=(0,Z.useCallback)(async(t,n,r,i)=>{if(!(!e||!t.trim()&&(!n||n.length===0)))try{let a=y.getState(),s=a.currentSession,l={model:s?.personaId?`persona:${s.personaId}`:s?.model||``,providerType:s?.providerType,providerId:s?.providerId};if(!m(a.models,l)){C.error(`Select an available model before sending`);return}v(!0),c(!0),N(),O.current&&clearTimeout(O.current),D.current=Date.now();let d=s?.isPrivate===!0,h=s?.messages?.some(e=>e.role===`user`);!d&&!h&&En(s?.title)?(x.current=t.trim(),S.current=!0,w.current=e):(x.current=null,S.current=!1,w.current=null),f(e,{role:`user`,content:t.trim(),images:n});let g=u();if(b.current=g,E.current=``,o(g),f(e,{role:`assistant`,content:``,id:g}),K()){let n=`Demo response for: ${t.trim()}`;window.setTimeout(()=>{p(e,g,n),c(!1),N(),o(null),v(!1),F(e),b.current=null,T.current=``,E.current=``},500);return}Y.isConnected||await Y.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;Y.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){$.error(`Failed to send message:`,e),c(!1),N(),o(null),v(!1),b.current=null,E.current=``,C.error(`Failed to send message`)}},[e,f,p,v,N,F]),L=(0,Z.useCallback)(()=>{c(!1),N(),o(null),v(!1),b.current=null,E.current=``},[v,N]),te=(0,Z.useCallback)(async()=>{let t=y.getState(),n=t.currentSession;if(!n||!e)return;if(!m(t.models,{model:n.personaId?`persona:${n.personaId}`:n.model,providerType:n.providerType,providerId:n.providerId})){C.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){C.error(`No message to regenerate`);return}let s=r[i],l=r[a];try{v(!0),c(!0),N(),O.current&&clearTimeout(O.current),D.current=Date.now();let t=u();b.current=t,E.current=``,o(t),f(e,{role:`assistant`,content:``,id:t,parentId:l.parentId||l.id,branchIndex:l.siblingCount||1,isActive:!0}),Y.isConnected||await Y.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;Y.send({type:`chat_stream`,data:{sessionId:e,content:s.content,images:s.images,options:n.settings?.generationOptions??{},assistantMessageId:t,regenerate:!0,originalMessageId:l.id,isPrivate:i,...i?{model:n.model,providerType:n.providerType,providerId:n.providerId,messageHistory:a}:{}}})}catch(e){$.error(`Failed to regenerate message:`,e),c(!1),N(),o(null),v(!1),b.current=null,E.current=``,C.error(`Failed to regenerate message`)}},[e,v,N,f]),R=(0,Z.useCallback)(async t=>{let n=y.getState().currentSession;if(!n||!e)return;let r=n.messages.find(e=>e.id===t);if(!r){C.error(`Message not found`);return}if(r.isActive!==!1)return;let i=r.parentId||r.id,a=r.branchIndex||0;try{let r=await xe.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()};y.setState(t=>({sessions:t.sessions.map(t=>t.id===e?o:t),currentSession:o})),C.success(`Switched to variant ${a+1}`)}else C.error(r.error||`Failed to select branch`)}catch(e){$.error(`Failed to select branch:`,e),C.error(`Failed to select branch`)}},[e]);return{sendMessage:I,stopGeneration:L,regenerateLastMessage:te,editAndResendMessage:(0,Z.useCallback)(async(t,n)=>{if(!e||!n.trim())return;let r=y.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 xe.updateSession(e,{messages:s}),r.truncateMessagesFrom(e,t),await I(n,o.images)}catch(e){$.error(`Failed to edit message:`,e),C.error(`Failed to edit message`)}},[e,I]),selectBranch:R,isStreaming:s,streamingMessage:t,streamingThinking:r,streamingMessageId:a,toolActivities:l}},On=q(`pages:chat-page`),kn=(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?`}},An=(e,t,n,r=!1)=>{let i=Pe(e);return i===`time`?kn(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.`}},jn=()=>{let{t:e,i18n:t}=s(),{sessionId:n}=a(),r=i(),c=o(),{currentSession:l,sessions:b,models:T,selectedModel:E,selectedProviderType:D,selectedProviderId:O,setSelectedModel:k,createSession:A,setCurrentSession:j,loadSessions:M,getCurrentPersona:P}=y(),{user:F}=je(),I=Me(e=>e.preferences.imageGenSettings?.enabled===!0),{sendMessage:L,stopGeneration:te,regenerateLastMessage:R,editAndResendMessage:ne,selectBranch:re,isStreaming:z,streamingMessage:ie,streamingThinking:ae,streamingMessageId:oe,toolActivities:se}=Dn(l?.id||``),B=P(),ce=(0,Z.useMemo)(()=>({model:E,providerType:D,providerId:O}),[E,O,D]),V=(0,Z.useMemo)(()=>g(T,ce),[T,ce]),le=E?p(V,ce):``,H=m(T,ce),U=new URLSearchParams(c.search).get(`incognito`)===`1`,[ue,de]=(0,Z.useState)(Ne),[fe,pe]=(0,Z.useState)(null),[W,he]=(0,Z.useState)(!1),ge=Me(e=>e.preferences.showFollowUpSuggestions!==!1),_e=(0,Z.useRef)(null),ve=(0,Z.useRef)(!1);(0,Z.useEffect)(()=>{let e=l?.id,t=ve.current&&!z;if(ve.current=z,!e||z||!ge||l?.isPrivate||!t)return;let n=l.messages[l.messages.length-1];if(!n||n.role!==`assistant`||!n.content.trim()||_e.current===n.id)return;_e.current=n.id;let r=!1;return xe.generateFollowUps(e).then(t=>{r||!t.success||y.getState().currentSession?.id===e&&pe({sessionId:e,suggestions:t.data?.suggestions??[]})}).catch(()=>{}),()=>{r=!0}},[z,l,ge]);let G=fe&&fe.sessionId===l?.id?fe.suggestions:[],be=(0,Z.useMemo)(()=>An(ue,F?.username,e,f(t.language)),[t.language,e,F?.username,ue]),[K,q]=(0,Z.useState)(``),[J,Ce]=(0,Z.useState)([]),[Te,Ee]=(0,Z.useState)(!1),[De,Oe]=(0,Z.useState)(!1),[ke,Y]=(0,Z.useState)(!1),Pe=(0,Z.useRef)(null),Le=async t=>{let n=t.target.files?.[0];if(t.target.value=``,n){Y(!0);try{let t=await Se.uploadDocument(n);t.success?(C.success(e(`chat.input.menu.documentAttached`)),window.dispatchEvent(new Event(`libre:documents-updated`))):C.error(t.error||e(`chat.input.menu.attachFailed`))}catch(t){On.error(`Document upload failed:`,t),C.error(e(`chat.input.menu.attachFailed`))}finally{Y(!1)}}};(0,Z.useEffect)(()=>{let e=!1;return Ae.getConfig().then(t=>{!e&&t.success&&t.data&&Ee(t.data.allowed)}).catch(()=>{}),()=>{e=!0}},[]);let[Re,ze]=(0,Z.useState)(!1),Be=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{let e=()=>{de(Ne())};return window.addEventListener(Fe,e),()=>window.removeEventListener(Fe,e)},[]);let[Ve,He]=(0,Z.useState)(!1),Ue=I&&Ve,Ge=(0,Z.useCallback)((t=!0)=>{let n=E?ce:T[0]?h(T[0]):null;if(!n||!m(T,n))return t&&C.error(e(`chat.model.selectBeforePrivateChat`)),!1;let r=Date.now();return j({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},[T,E,ce,j,e]);(0,Z.useEffect)(()=>{b.length===0&&M()},[M,b.length]),(0,Z.useEffect)(()=>{!U||l?.isPrivate||Ge(!1)},[l?.isPrivate,U,Ge]),(0,Z.useEffect)(()=>{let e=!1;return I&&(async()=>{try{let t=await we.getPlugins();if(e)return;He(!!(t.success&&t.data&&t.data.length>0))}catch{if(e)return;He(!1)}})(),()=>{e=!0}},[I]),(0,Z.useEffect)(()=>{(()=>{if(sessionStorage.getItem(`forceWelcomeScreen`)){sessionStorage.removeItem(`forceWelcomeScreen`);return}if(!(l?.isPrivate&&!n)&&b.length!==0)if(n){let e=b.find(e=>e.id===n);e&&e.id!==l?.id?j(e):e||(On.warn(`Session ${n} not found for current user, redirecting...`),b.length>0?r(`/c/${b[0].id}`,{replace:!0}):r(`/`,{replace:!0}))}else!n&&b.length>0&&c.pathname===`/`&&r(`/c/${b[0].id}`,{replace:!0})})()},[n,b,j,r,l?.id,l?.isPrivate,c.pathname]),(0,Z.useEffect)(()=>{if(l?.id){let e=sessionStorage.getItem(`pendingMessage`);if(e){sessionStorage.removeItem(`pendingMessage`);try{let t=JSON.parse(e);setTimeout(()=>{L(t.content,t.images,void 0,t.webSearch===!0)},100)}catch(e){On.error(`Failed to parse pending message:`,e)}}}},[l?.id,L]),(0,Z.useEffect)(()=>{let e=Be.current;e&&(e.style.height=`auto`,e.style.height=K?`${Math.min(e.scrollHeight,200)}px`:``)},[K]);let Ke=async t=>{if(t.preventDefault(),!K.trim()||!E)return;if(!H){C.error(e(`chat.model.selectBeforeSending`));return}Ie(`impact`);let n={content:K.trim(),images:J.length>0?J:void 0,webSearch:Te&&De?!0:void 0};sessionStorage.setItem(`pendingMessage`,JSON.stringify(n)),q(``),Ce([]),Oe(!1);let i=await A(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=y.getState().draftSessionSettings,n=t.systemPrompt?.trim(),r=t.generationOptions;if(!n&&!r)return;let i=n?[{id:u(),role:`system`,content:n,timestamp:Date.now()},...e.messages.filter(e=>e.role!==`system`)]:e.messages;try{let t=await xe.updateSession(e.id,{messages:i,settings:r?{generationOptions:r}:void 0});if(t.success&&t.data){let e=t.data;y.setState(t=>({sessions:t.sessions.map(t=>t.id===e.id?e:t),currentSession:t.currentSession?.id===e.id?e:t.currentSession}))}}catch(e){On.error(`Failed to apply chat settings to the new session`,e)}finally{y.getState().setDraftSessionSettings({})}},[]),Je=e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Ke(e))},Ye=async e=>{let t=v(V,e.target.value);t&&k(t.model,t.providerType,t.providerId)},Xe=(e,t,n,r)=>{l&&(Ie(`impact`),pe(null),L(e,t,n,r))};if(!l){let t=J.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:()=>he(e=>!e),className:d(`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`,W&&`text-primary-600 dark:text-primary-400`),title:e(`chat.controls.title`),"aria-expanded":W,children:(0,Q.jsx)(S,{className:`h-4 w-4`})}),(0,Q.jsxs)(`button`,{onClick:()=>Ge(),disabled:!E&&T.length===0||!!E&&!H,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)(w,{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:be.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:be.subtitle})]},be.id),V.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:J,onImagesChange:Ce,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:ke,onClick:()=>Pe.current?.click(),className:`shrink-0 whitespace-nowrap`,children:[(0,Q.jsx)(me,{className:`h-3.5 w-3.5`}),(0,Q.jsx)(`span`,{className:`ms-1.5`,children:e(ke?`documents.uploading`:`chat.input.menu.attach`)})]}),(0,Q.jsx)(`input`,{ref:Pe,type:`file`,accept:`.pdf,.txt,.md`,className:`hidden`,onChange:e=>void Le(e)})]})]}),(0,Q.jsx)(`form`,{onSubmit:Ke,children:(0,Q.jsxs)(`div`,{className:d(`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:d(`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)(me,{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)(ye,{className:`h-4 w-4`}):(0,Q.jsx)(x,{className:`h-4 w-4`})}),(0,Q.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,Q.jsx)(an,{ref:Be,value:K,onChange:e=>q(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:()=>Oe(e=>!e),className:d(`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`,De&&`bg-primary-50 text-primary-600 dark:bg-primary-900/25 dark:text-primary-400`),title:e(De?`chat.input.webSearchOn`:`chat.input.webSearchOff`),"aria-pressed":De,children:(0,Q.jsx)(N,{className:`h-4 w-4`})}),(0,Q.jsx)(`div`,{className:`hidden sm:block`,children:(0,Q.jsx)(We,{models:V,selectedModel:le,onModelChange:Ye,getModelValue:_,className:`min-w-[140px] max-w-[210px]`,compact:!0,showImageGen:Ue})}),(0,Q.jsx)(X,{type:`submit`,variant:`ghost`,size:`sm`,disabled:!K.trim()||!E||!H,className:d(`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`,K.trim()&&E&&`shadow-sm`),title:e(`chat.input.sendMessage`),children:(0,Q.jsx)(ee,{className:`h-4 w-4`})})]})}),(0,Q.jsx)(`div`,{className:`sm:hidden mt-4`,children:(0,Q.jsx)(We,{models:V,selectedModel:le,onModelChange:Ye,getModelValue:_,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:W,onClose:()=>he(!1)})]})}return(0,Q.jsxs)(`div`,{className:`relative flex h-full flex-col`,style:B?.background?{backgroundImage:`url(${B.background})`,backgroundSize:`cover`,backgroundPosition:`center`,backgroundRepeat:`no-repeat`}:void 0,children:[B?.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:[l?.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)(w,{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`)]})]})}),B&&!l?.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:B,onClear:()=>{l&&xe.updateSession(l.id,{model:B.model,providerType:`ollama`,providerId:null,personaId:null}).then(e=>{if(!e.success||!e.data)throw Error(e.error||`Failed to remove persona`);y.setState(t=>({sessions:t.sessions.map(t=>t.id===l.id?e.data:t),currentSession:e.data}))}).catch(t=>{On.error(`Failed to remove persona:`,t),C.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:()=>he(e=>!e),className:d(`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`,W&&`text-primary-600 dark:text-primary-400`),title:e(`chat.controls.title`),"aria-expanded":W,children:(0,Q.jsx)(S,{className:`h-3.5 w-3.5`})}),(0,Q.jsx)(nn,{messages:l.messages,streamingMessage:ie,streamingThinking:ae,streamingMessageId:oe,isStreaming:z,toolActivities:se,onRegenerate:R,onSelectBranch:re,onEditResend:ne,followUpSuggestions:G,onFollowUpSelect:e=>Xe(e),className:`flex-1`}),(0,Q.jsx)(hn,{onSendMessage:Xe,onStopGeneration:te,disabled:!l})]}),l&&(0,Q.jsx)(Sn,{session:l}),(0,Q.jsx)(vn,{session:l,open:W,onClose:()=>he(!1)})]})]})]})};export{jn as ChatPage,jn 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-t1quV8ce.js";import{t as a}from"./utils-iKndEgla.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-DhmVEJr2.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-BsqeY2tS.js";import{t as D}from"./Button-DcBM7gdH.js";import{n as O,t as k}from"./ui-Dw6jDKxN.js";import{_ as A,f as j,h as M,m as N,p as P,v as F}from"../assets/index-CN7wpzUO.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 +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{d as r}from"./router-vendor-Ca9zqOqT.js";import{t as i}from"./useTranslation-t1quV8ce.js";import{i as a,n as o,t as s}from"./utils-iKndEgla.js";import{t as c}from"./chatStore-C25ywAXQ.js";import{Et as l,T as u,Wt as d,Z as f,c as p,dn as m,gn as h,rt as g}from"./ui-vendor-xUzKqAXI.js";import{l as _,n as v}from"./authStore-DanfaPdm.js";import{a as y,c as b,o as x,s as S,t as C}from"../assets/index-CN7wpzUO.js";import{t as w}from"./work-DVgm81bJ.js";var T=e(n(),1),E=t(),D=e=>e<5?[`home.greeting.night`,`Up late`]:e<12?[`home.greeting.morning`,`Morning`]:e<18?[`home.greeting.afternoon`,`Afternoon`]:[`home.greeting.evening`,`Evening`],O=`mb-2 text-xs font-medium text-gray-500 dark:text-dark-500`,k=`group flex w-full items-center gap-2.5 rounded-lg px-2.5 py-1.5 text-start text-sm text-gray-700 transition-colors hover:bg-white hover:text-gray-950 dark:text-dark-700 dark:hover:bg-dark-200 dark:hover:text-dark-950 outline-none focus-visible:ring-2 focus-visible:ring-primary-500/40`,A=()=>{let{t:e,i18n:t}=i(),n=r(),{user:A,systemInfo:j,canUseWork:M,canUseAgents:N}=v(),P=c(e=>e.sessions),F=_(e=>e.tasks),I=_(e=>e.capabilities),L=_(e=>e.loadTasks),R=_(e=>e.loadCapabilities),z=M(),B=N();(0,T.useEffect)(()=>{z&&(L(!0).catch(()=>{}),R().catch(()=>{}))},[z,L,R]);let[V,H]=D(new Date().getHours()),U=e(V,H),W=A?.username,G=[...P].sort((e,t)=>t.updatedAt-e.updatedAt).slice(0,4),K=[...F].sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()).slice(0,3),q=I?.activeRuntimes?.user??0,J=a()?`⌘`:`Ctrl`,Y=G.length>0||K.length>0,X=C(j?.version);return(0,E.jsx)(`div`,{"data-testid":`home-page`,className:`h-full overflow-y-auto scrollbar-thin`,children:(0,E.jsxs)(`div`,{className:`mx-auto flex min-h-full w-full max-w-xl flex-col justify-center px-6 py-12`,children:[(0,E.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight text-gray-950 dark:text-dark-950`,children:W?`${U}, ${W}.`:`${U}.`}),(0,E.jsxs)(`p`,{"data-testid":`app-version`,className:`mt-1 font-mono text-xs text-gray-400 dark:text-dark-500`,children:[window.location.host||`Libre WebUI`,X?` · v${X}`:``]}),(0,E.jsxs)(`div`,{className:`mt-8`,children:[(0,E.jsx)(`p`,{className:O,children:e(`home.start`,`Start`)}),(0,E.jsxs)(`div`,{className:`-mx-2.5 flex flex-col`,children:[(0,E.jsxs)(`button`,{type:`button`,"data-testid":`home-new-chat`,className:k,onClick:()=>x(n),children:[(0,E.jsx)(g,{className:`h-4 w-4 shrink-0 text-gray-400 transition-colors group-hover:text-gray-600 dark:text-dark-500 dark:group-hover:text-dark-700`}),(0,E.jsx)(`span`,{className:`flex-1`,children:e(`tabs.newChat`,`New Chat`)}),(0,E.jsxs)(`span`,{className:`font-mono text-[10px] tracking-wide text-gray-400 opacity-0 transition-opacity group-hover:opacity-100 dark:text-dark-500`,children:[J,`⇧O`]})]}),(0,E.jsxs)(`button`,{type:`button`,"data-testid":`home-incognito-chat`,className:k,onClick:()=>y(n),children:[(0,E.jsx)(l,{className:`h-4 w-4 shrink-0 text-gray-400 transition-colors group-hover:text-gray-600 dark:text-dark-500 dark:group-hover:text-dark-700`}),(0,E.jsx)(`span`,{className:`flex-1`,children:e(`chat.session.incognito`,`Incognito Chat`)})]}),z&&(0,E.jsxs)(`button`,{type:`button`,"data-testid":`home-new-work`,className:k,onClick:()=>S(n),children:[(0,E.jsx)(m,{className:`h-4 w-4 shrink-0 text-gray-400 transition-colors group-hover:text-gray-600 dark:text-dark-500 dark:group-hover:text-dark-700`}),(0,E.jsx)(`span`,{className:`flex-1`,children:e(`tabs.newWork`,`New Work`)}),(0,E.jsxs)(`span`,{className:`font-mono text-[10px] tracking-wide text-gray-400 opacity-0 transition-opacity group-hover:opacity-100 dark:text-dark-500`,children:[J,`⇧U`]})]})]})]}),Y&&(0,E.jsxs)(`div`,{className:`mt-8`,children:[(0,E.jsxs)(`div`,{className:`mb-2 flex items-baseline justify-between`,children:[(0,E.jsx)(`p`,{className:s(O,`mb-0`),children:e(`home.continue`,`Continue`)}),z&&q>0&&(0,E.jsxs)(`span`,{className:`flex items-center gap-1.5 font-mono text-[10px] text-gray-400 dark:text-dark-500`,children:[(0,E.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse-subtle rounded-full bg-[rgb(48,121,255)]`}),q,` `,e(`home.active`,`active`)]})]}),(0,E.jsxs)(`div`,{className:`-mx-2.5 flex flex-col`,children:[K.map(r=>{let i=b[r.status];return(0,E.jsxs)(`button`,{type:`button`,"data-testid":`home-continue-work`,className:k,onClick:()=>n(`/work/${r.id}`),children:[(0,E.jsx)(`span`,{"aria-hidden":`true`,className:s(`h-2 w-2 shrink-0 rounded-full ring-1 ring-black/[0.06] dark:ring-white/[0.1]`,i.animated&&`animate-pulse-subtle`),style:{backgroundColor:i.color}}),(0,E.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:r.title||e(`work.tasks.untitled`,`Untitled task`)}),r.hostPath&&(0,E.jsx)(`span`,{className:`hidden max-w-[14rem] shrink-0 truncate font-mono text-[10px] text-gray-400 sm:inline dark:text-dark-500`,title:r.hostPath,children:r.hostPath}),(0,E.jsx)(`span`,{className:`shrink-0 font-mono text-[10px] text-gray-400 dark:text-dark-500`,children:w(r)?e(i.labelKey,i.label):o(new Date(r.updatedAt).getTime(),t.language)})]},r.id)}),G.map(r=>(0,E.jsxs)(`button`,{type:`button`,"data-testid":`home-continue-chat`,className:k,onClick:()=>n(`/c/${r.id}`),children:[(0,E.jsx)(g,{className:`h-4 w-4 shrink-0 text-gray-400 dark:text-dark-500`}),(0,E.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:r.title||e(`tabs.chat`,`Chat`)}),(0,E.jsx)(`span`,{className:`hidden shrink-0 font-mono text-[10px] text-gray-400 sm:inline dark:text-dark-500`,children:r.model}),(0,E.jsx)(`span`,{className:`shrink-0 font-mono text-[10px] text-gray-400 dark:text-dark-500`,children:o(r.updatedAt,t.language)})]},r.id))]})]}),(0,E.jsxs)(`div`,{className:`mt-8`,children:[(0,E.jsx)(`p`,{className:O,children:e(`home.explore`,`Explore`)}),(0,E.jsx)(`div`,{className:`-mx-2.5 flex flex-col`,children:[[`/notes`,f,e(`sidebar.navigation.notes`,`Notes`)],[`/models`,d,e(`sidebar.navigation.models`,`Models`)],[`/personas`,p,e(`sidebar.navigation.personas`,`Personas`)],[`/gallery`,u,e(`sidebar.navigation.imagine`,`Imagine`)],...B?[[`/agents`,h,e(`sidebar.navigation.agents`,`Agents`)]]:[]].map(([e,t,r])=>(0,E.jsxs)(`button`,{type:`button`,className:k,onClick:()=>n(e),children:[(0,E.jsx)(t,{className:`h-4 w-4 shrink-0 text-gray-400 transition-colors group-hover:text-gray-600 dark:text-dark-500 dark:group-hover:text-dark-700`}),(0,E.jsx)(`span`,{className:`flex-1`,children:r})]},e))})]})]})})};export{A as HomePage,A as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/ModelManagerModals-BBNg2fxs.js","js/rolldown-runtime-hePW80VL.js","js/markdown-core-DHnR5Hw8.js","js/react-vendor-DPNXrO-8.js","js/useTranslation-t1quV8ce.js","js/utils-iKndEgla.js","js/utils-vendor-1zob7nK9.js","js/ui-vendor-xUzKqAXI.js","js/Button-DcBM7gdH.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-t1quV8ce.js";import{t as a}from"./utils-iKndEgla.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-DhmVEJr2.js";import{n as le}from"./authStore-DanfaPdm.js";import{t as k}from"./Button-DcBM7gdH.js";import{n as ue,t as de}from"./ui-Dw6jDKxN.js";import{f as A,m as fe}from"../assets/index-CN7wpzUO.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-BBNg2fxs.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-t1quV8ce.js";import{n as i,t as a}from"./utils-iKndEgla.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-DhmVEJr2.js";import{t as g}from"./Button-DcBM7gdH.js";import"./ui-Dw6jDKxN.js";import{t as _}from"./RichMessageContent-DfuCu6PB.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-t1quV8ce.js";import{t as i}from"./utils-iKndEgla.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-DhmVEJr2.js";import{t as h}from"./Button-DcBM7gdH.js";import{n as g,t as _}from"./ui-Dw6jDKxN.js";import{f as v}from"../assets/index-CN7wpzUO.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-iKndEgla.js";import{t as s}from"./appStore-BsqeY2tS.js";import{a as c,i as l,n as u,r as d,s as f,t as p}from"./messageCodeStyles-CUWSpffv.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};