aimeat 1.5.0 → 1.7.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 (385) hide show
  1. package/dist/.env.example +15 -0
  2. package/dist/bin/aimeat.js +0 -0
  3. package/dist/locales/en.json +291 -8
  4. package/dist/locales/fi.json +291 -8
  5. package/dist/public/css/views/admin.css +97 -0
  6. package/dist/public/css/views/agents-detail.css +563 -0
  7. package/dist/public/css/views/foundry.css +1 -0
  8. package/dist/public/css/views/marketplace.css +1 -0
  9. package/dist/public/css/views/profile.css +2 -0
  10. package/dist/public/js/services/admin.js +20 -1
  11. package/dist/public/js/services/agent-activity.js +20 -0
  12. package/dist/public/js/services/agent-capabilities.js +15 -0
  13. package/dist/public/js/services/agent-directives.js +28 -0
  14. package/dist/public/js/services/agent-messages.js +34 -0
  15. package/dist/public/js/services/agent-services.js +17 -0
  16. package/dist/public/js/services/agent-tasks.js +46 -0
  17. package/dist/public/js/services/memory.js +6 -3
  18. package/dist/public/js/services/sharing-groups.js +51 -0
  19. package/dist/public/spa.html +21 -2
  20. package/dist/public/views/admin/agent-tasks-tab.js +156 -0
  21. package/dist/public/views/admin/federation-tab.js +60 -0
  22. package/dist/public/views/admin/memory-tab.js +1 -0
  23. package/dist/public/views/admin/overview-tab.js +25 -0
  24. package/dist/public/views/admin/sharing-groups-tab.js +86 -0
  25. package/dist/public/views/admin/stats-tab.js +480 -187
  26. package/dist/public/views/admin.js +4 -0
  27. package/dist/public/views/profile/access-tab.js +511 -5
  28. package/dist/public/views/profile/agents-activity-subtab.js +242 -0
  29. package/dist/public/views/profile/agents-capabilities-subtab.js +165 -0
  30. package/dist/public/views/profile/agents-directives-subtab.js +292 -0
  31. package/dist/public/views/profile/agents-messages-subtab.js +222 -0
  32. package/dist/public/views/profile/agents-services-subtab.js +111 -0
  33. package/dist/public/views/profile/agents-tab.js +94 -47
  34. package/dist/public/views/profile/agents-tasks-subtab.js +254 -0
  35. package/dist/public/views/profile/knowledge-tab.js +5 -5
  36. package/dist/public/views/profile/memory-tab.js +90 -25
  37. package/dist/src/auth/node-keys.d.ts.map +1 -1
  38. package/dist/src/auth/node-keys.js +3 -0
  39. package/dist/src/auth/node-keys.js.map +1 -1
  40. package/dist/src/config.d.ts +18 -0
  41. package/dist/src/config.d.ts.map +1 -1
  42. package/dist/src/config.js +23 -2
  43. package/dist/src/config.js.map +1 -1
  44. package/dist/src/index.js +41 -2
  45. package/dist/src/index.js.map +1 -1
  46. package/dist/src/mcp/agent-capabilities.d.ts +18 -0
  47. package/dist/src/mcp/agent-capabilities.d.ts.map +1 -0
  48. package/dist/src/mcp/agent-capabilities.js +85 -0
  49. package/dist/src/mcp/agent-capabilities.js.map +1 -0
  50. package/dist/src/mcp/agent-messages.d.ts +15 -0
  51. package/dist/src/mcp/agent-messages.d.ts.map +1 -0
  52. package/dist/src/mcp/agent-messages.js +81 -0
  53. package/dist/src/mcp/agent-messages.js.map +1 -0
  54. package/dist/src/mcp/agent-tasks.d.ts +16 -0
  55. package/dist/src/mcp/agent-tasks.d.ts.map +1 -0
  56. package/dist/src/mcp/agent-tasks.js +350 -0
  57. package/dist/src/mcp/agent-tasks.js.map +1 -0
  58. package/dist/src/mcp/core.d.ts.map +1 -1
  59. package/dist/src/mcp/core.js +8 -4
  60. package/dist/src/mcp/core.js.map +1 -1
  61. package/dist/src/mcp/extensions.js +1 -1
  62. package/dist/src/mcp/extensions.js.map +1 -1
  63. package/dist/src/mcp/index.d.ts.map +1 -1
  64. package/dist/src/mcp/index.js +8 -0
  65. package/dist/src/mcp/index.js.map +1 -1
  66. package/dist/src/mcp/memory-extended.js +1 -1
  67. package/dist/src/mcp/memory-extended.js.map +1 -1
  68. package/dist/src/mcp/sharing-groups.d.ts +16 -0
  69. package/dist/src/mcp/sharing-groups.d.ts.map +1 -0
  70. package/dist/src/mcp/sharing-groups.js +240 -0
  71. package/dist/src/mcp/sharing-groups.js.map +1 -0
  72. package/dist/src/middleware/rate-limit.d.ts.map +1 -1
  73. package/dist/src/middleware/rate-limit.js +4 -1
  74. package/dist/src/middleware/rate-limit.js.map +1 -1
  75. package/dist/src/models/agent-capabilities-schemas.d.ts +20 -0
  76. package/dist/src/models/agent-capabilities-schemas.d.ts.map +1 -0
  77. package/dist/src/models/agent-capabilities-schemas.js +16 -0
  78. package/dist/src/models/agent-capabilities-schemas.js.map +1 -0
  79. package/dist/src/models/agent-directives-schemas.d.ts +44 -0
  80. package/dist/src/models/agent-directives-schemas.d.ts.map +1 -0
  81. package/dist/src/models/agent-directives-schemas.js +41 -0
  82. package/dist/src/models/agent-directives-schemas.js.map +1 -0
  83. package/dist/src/models/agent-message-schemas.d.ts +32 -0
  84. package/dist/src/models/agent-message-schemas.d.ts.map +1 -0
  85. package/dist/src/models/agent-message-schemas.js +25 -0
  86. package/dist/src/models/agent-message-schemas.js.map +1 -0
  87. package/dist/src/models/agent-task-schemas.d.ts +133 -0
  88. package/dist/src/models/agent-task-schemas.d.ts.map +1 -0
  89. package/dist/src/models/agent-task-schemas.js +84 -0
  90. package/dist/src/models/agent-task-schemas.js.map +1 -0
  91. package/dist/src/models/schemas.d.ts +50 -0
  92. package/dist/src/models/schemas.d.ts.map +1 -1
  93. package/dist/src/models/schemas.js +42 -4
  94. package/dist/src/models/schemas.js.map +1 -1
  95. package/dist/src/models/sharing-group-schemas.d.ts +52 -0
  96. package/dist/src/models/sharing-group-schemas.d.ts.map +1 -0
  97. package/dist/src/models/sharing-group-schemas.js +46 -0
  98. package/dist/src/models/sharing-group-schemas.js.map +1 -0
  99. package/dist/src/routes/actions.d.ts.map +1 -1
  100. package/dist/src/routes/actions.js +1 -0
  101. package/dist/src/routes/actions.js.map +1 -1
  102. package/dist/src/routes/admin-agent-tasks.d.ts +12 -0
  103. package/dist/src/routes/admin-agent-tasks.d.ts.map +1 -0
  104. package/dist/src/routes/admin-agent-tasks.js +62 -0
  105. package/dist/src/routes/admin-agent-tasks.js.map +1 -0
  106. package/dist/src/routes/admin-monitoring.d.ts +2 -1
  107. package/dist/src/routes/admin-monitoring.d.ts.map +1 -1
  108. package/dist/src/routes/admin-monitoring.js +82 -2
  109. package/dist/src/routes/admin-monitoring.js.map +1 -1
  110. package/dist/src/routes/admin-sharing-groups.d.ts +12 -0
  111. package/dist/src/routes/admin-sharing-groups.d.ts.map +1 -0
  112. package/dist/src/routes/admin-sharing-groups.js +37 -0
  113. package/dist/src/routes/admin-sharing-groups.js.map +1 -0
  114. package/dist/src/routes/admin.d.ts +1 -1
  115. package/dist/src/routes/admin.d.ts.map +1 -1
  116. package/dist/src/routes/admin.js +35 -17
  117. package/dist/src/routes/admin.js.map +1 -1
  118. package/dist/src/routes/agent-activity.d.ts +17 -0
  119. package/dist/src/routes/agent-activity.d.ts.map +1 -0
  120. package/dist/src/routes/agent-activity.js +130 -0
  121. package/dist/src/routes/agent-activity.js.map +1 -0
  122. package/dist/src/routes/agent-capabilities.d.ts +17 -0
  123. package/dist/src/routes/agent-capabilities.d.ts.map +1 -0
  124. package/dist/src/routes/agent-capabilities.js +106 -0
  125. package/dist/src/routes/agent-capabilities.js.map +1 -0
  126. package/dist/src/routes/agent-directives.d.ts +17 -0
  127. package/dist/src/routes/agent-directives.d.ts.map +1 -0
  128. package/dist/src/routes/agent-directives.js +206 -0
  129. package/dist/src/routes/agent-directives.js.map +1 -0
  130. package/dist/src/routes/agent-integration.d.ts +17 -0
  131. package/dist/src/routes/agent-integration.d.ts.map +1 -0
  132. package/dist/src/routes/agent-integration.js +169 -0
  133. package/dist/src/routes/agent-integration.js.map +1 -0
  134. package/dist/src/routes/agent-messages.d.ts +17 -0
  135. package/dist/src/routes/agent-messages.d.ts.map +1 -0
  136. package/dist/src/routes/agent-messages.js +168 -0
  137. package/dist/src/routes/agent-messages.js.map +1 -0
  138. package/dist/src/routes/agent-tasks.d.ts +24 -0
  139. package/dist/src/routes/agent-tasks.d.ts.map +1 -0
  140. package/dist/src/routes/agent-tasks.js +425 -0
  141. package/dist/src/routes/agent-tasks.js.map +1 -0
  142. package/dist/src/routes/agents.js +2 -2
  143. package/dist/src/routes/agents.js.map +1 -1
  144. package/dist/src/routes/apps.d.ts.map +1 -1
  145. package/dist/src/routes/apps.js +5 -1
  146. package/dist/src/routes/apps.js.map +1 -1
  147. package/dist/src/routes/auth.d.ts.map +1 -1
  148. package/dist/src/routes/auth.js +19 -1
  149. package/dist/src/routes/auth.js.map +1 -1
  150. package/dist/src/routes/boards.js +2 -2
  151. package/dist/src/routes/boards.js.map +1 -1
  152. package/dist/src/routes/capabilities.js +4 -4
  153. package/dist/src/routes/capabilities.js.map +1 -1
  154. package/dist/src/routes/consent.d.ts.map +1 -1
  155. package/dist/src/routes/consent.js +2 -1
  156. package/dist/src/routes/consent.js.map +1 -1
  157. package/dist/src/routes/cortex.d.ts.map +1 -1
  158. package/dist/src/routes/cortex.js +1 -2
  159. package/dist/src/routes/cortex.js.map +1 -1
  160. package/dist/src/routes/disputes.js +4 -4
  161. package/dist/src/routes/disputes.js.map +1 -1
  162. package/dist/src/routes/extensions.d.ts.map +1 -1
  163. package/dist/src/routes/extensions.js +73 -23
  164. package/dist/src/routes/extensions.js.map +1 -1
  165. package/dist/src/routes/federation-auth.d.ts.map +1 -1
  166. package/dist/src/routes/federation-auth.js +2 -62
  167. package/dist/src/routes/federation-auth.js.map +1 -1
  168. package/dist/src/routes/federation-peer.d.ts.map +1 -1
  169. package/dist/src/routes/federation-peer.js +13 -1
  170. package/dist/src/routes/federation-peer.js.map +1 -1
  171. package/dist/src/routes/flags.d.ts.map +1 -1
  172. package/dist/src/routes/flags.js +2 -1
  173. package/dist/src/routes/flags.js.map +1 -1
  174. package/dist/src/routes/foundry.d.ts.map +1 -1
  175. package/dist/src/routes/foundry.js +2 -2
  176. package/dist/src/routes/foundry.js.map +1 -1
  177. package/dist/src/routes/generator.d.ts.map +1 -1
  178. package/dist/src/routes/generator.js +35 -7
  179. package/dist/src/routes/generator.js.map +1 -1
  180. package/dist/src/routes/ghii.d.ts.map +1 -1
  181. package/dist/src/routes/ghii.js +67 -31
  182. package/dist/src/routes/ghii.js.map +1 -1
  183. package/dist/src/routes/knowledge.d.ts.map +1 -1
  184. package/dist/src/routes/knowledge.js +4 -3
  185. package/dist/src/routes/knowledge.js.map +1 -1
  186. package/dist/src/routes/memory.d.ts.map +1 -1
  187. package/dist/src/routes/memory.js +10 -4
  188. package/dist/src/routes/memory.js.map +1 -1
  189. package/dist/src/routes/owners.d.ts.map +1 -1
  190. package/dist/src/routes/owners.js +104 -8
  191. package/dist/src/routes/owners.js.map +1 -1
  192. package/dist/src/routes/packages.js +1 -1
  193. package/dist/src/routes/packages.js.map +1 -1
  194. package/dist/src/routes/permissions.js +1 -1
  195. package/dist/src/routes/permissions.js.map +1 -1
  196. package/dist/src/routes/prompts.d.ts +9 -0
  197. package/dist/src/routes/prompts.d.ts.map +1 -1
  198. package/dist/src/routes/prompts.js +57 -1
  199. package/dist/src/routes/prompts.js.map +1 -1
  200. package/dist/src/routes/sharing-groups.d.ts +20 -0
  201. package/dist/src/routes/sharing-groups.d.ts.map +1 -0
  202. package/dist/src/routes/sharing-groups.js +297 -0
  203. package/dist/src/routes/sharing-groups.js.map +1 -0
  204. package/dist/src/routes/stats.d.ts +14 -0
  205. package/dist/src/routes/stats.d.ts.map +1 -1
  206. package/dist/src/routes/stats.js +79 -4
  207. package/dist/src/routes/stats.js.map +1 -1
  208. package/dist/src/routes/storage-files.d.ts.map +1 -1
  209. package/dist/src/routes/storage-files.js +8 -1
  210. package/dist/src/routes/storage-files.js.map +1 -1
  211. package/dist/src/routes/upload.js +2 -2
  212. package/dist/src/routes/upload.js.map +1 -1
  213. package/dist/src/routes/wallet.d.ts.map +1 -1
  214. package/dist/src/routes/wallet.js +2 -1
  215. package/dist/src/routes/wallet.js.map +1 -1
  216. package/dist/src/routes/work.d.ts.map +1 -1
  217. package/dist/src/routes/work.js +5 -1
  218. package/dist/src/routes/work.js.map +1 -1
  219. package/dist/src/schemas/knowledge-package.js +1 -1
  220. package/dist/src/schemas/knowledge-package.js.map +1 -1
  221. package/dist/src/server-bootstrap/routes-loader.d.ts +1 -1
  222. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  223. package/dist/src/server-bootstrap/routes-loader.js +24 -4
  224. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  225. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  226. package/dist/src/server-bootstrap/service-init.js +2 -0
  227. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  228. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  229. package/dist/src/server-bootstrap/static-files.js +10 -7
  230. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  231. package/dist/src/server.d.ts.map +1 -1
  232. package/dist/src/server.js +4 -2
  233. package/dist/src/server.js.map +1 -1
  234. package/dist/src/services/activity-recorder.d.ts +16 -0
  235. package/dist/src/services/activity-recorder.d.ts.map +1 -0
  236. package/dist/src/services/activity-recorder.js +59 -0
  237. package/dist/src/services/activity-recorder.js.map +1 -0
  238. package/dist/src/services/capability-invoke.d.ts.map +1 -1
  239. package/dist/src/services/capability-invoke.js +5 -18
  240. package/dist/src/services/capability-invoke.js.map +1 -1
  241. package/dist/src/services/config-schema.d.ts.map +1 -1
  242. package/dist/src/services/config-schema.js +18 -0
  243. package/dist/src/services/config-schema.js.map +1 -1
  244. package/dist/src/services/consent.d.ts +1 -1
  245. package/dist/src/services/consent.d.ts.map +1 -1
  246. package/dist/src/services/consent.js +29 -11
  247. package/dist/src/services/consent.js.map +1 -1
  248. package/dist/src/services/core-jobs.d.ts.map +1 -1
  249. package/dist/src/services/core-jobs.js +5 -0
  250. package/dist/src/services/core-jobs.js.map +1 -1
  251. package/dist/src/services/directory.d.ts.map +1 -1
  252. package/dist/src/services/directory.js +10 -4
  253. package/dist/src/services/directory.js.map +1 -1
  254. package/dist/src/services/email.d.ts +17 -4
  255. package/dist/src/services/email.d.ts.map +1 -1
  256. package/dist/src/services/email.js +30 -12
  257. package/dist/src/services/email.js.map +1 -1
  258. package/dist/src/services/extension-runtime.d.ts.map +1 -1
  259. package/dist/src/services/extension-runtime.js +5 -0
  260. package/dist/src/services/extension-runtime.js.map +1 -1
  261. package/dist/src/services/federation.d.ts +2 -0
  262. package/dist/src/services/federation.d.ts.map +1 -1
  263. package/dist/src/services/federation.js.map +1 -1
  264. package/dist/src/services/job-seeding.d.ts.map +1 -1
  265. package/dist/src/services/job-seeding.js +2 -0
  266. package/dist/src/services/job-seeding.js.map +1 -1
  267. package/dist/src/services/mailbox-notification.d.ts +17 -0
  268. package/dist/src/services/mailbox-notification.d.ts.map +1 -1
  269. package/dist/src/services/mailbox-notification.js +25 -0
  270. package/dist/src/services/mailbox-notification.js.map +1 -1
  271. package/dist/src/services/morsel.d.ts.map +1 -1
  272. package/dist/src/services/morsel.js +10 -9
  273. package/dist/src/services/morsel.js.map +1 -1
  274. package/dist/src/services/password.d.ts +1 -6
  275. package/dist/src/services/password.d.ts.map +1 -1
  276. package/dist/src/services/password.js +19 -10
  277. package/dist/src/services/password.js.map +1 -1
  278. package/dist/src/services/push.d.ts +16 -0
  279. package/dist/src/services/push.d.ts.map +1 -1
  280. package/dist/src/services/push.js +20 -0
  281. package/dist/src/services/push.js.map +1 -1
  282. package/dist/src/services/quota.d.ts.map +1 -1
  283. package/dist/src/services/quota.js +2 -1
  284. package/dist/src/services/quota.js.map +1 -1
  285. package/dist/src/services/scheduler.d.ts.map +1 -1
  286. package/dist/src/services/scheduler.js +17 -1
  287. package/dist/src/services/scheduler.js.map +1 -1
  288. package/dist/src/services/stats.d.ts +43 -2
  289. package/dist/src/services/stats.d.ts.map +1 -1
  290. package/dist/src/services/stats.js +177 -1
  291. package/dist/src/services/stats.js.map +1 -1
  292. package/dist/src/services/task-stall-detector.d.ts +10 -0
  293. package/dist/src/services/task-stall-detector.d.ts.map +1 -0
  294. package/dist/src/services/task-stall-detector.js +38 -0
  295. package/dist/src/services/task-stall-detector.js.map +1 -0
  296. package/dist/src/services/totp.js +2 -2
  297. package/dist/src/services/work-task-bridge.d.ts +10 -0
  298. package/dist/src/services/work-task-bridge.d.ts.map +1 -0
  299. package/dist/src/services/work-task-bridge.js +53 -0
  300. package/dist/src/services/work-task-bridge.js.map +1 -0
  301. package/dist/src/storage/interface.d.ts +175 -5
  302. package/dist/src/storage/interface.d.ts.map +1 -1
  303. package/dist/src/storage/providers/mongodb/index.d.ts +105 -2
  304. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  305. package/dist/src/storage/providers/mongodb/index.js +738 -8
  306. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  307. package/dist/src/storage/providers/sqlite/index.d.ts +83 -1
  308. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  309. package/dist/src/storage/providers/sqlite/index.js +204 -5
  310. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  311. package/dist/src/storage/providers/sqlite/repos/agent-activity.d.ts +14 -0
  312. package/dist/src/storage/providers/sqlite/repos/agent-activity.d.ts.map +1 -0
  313. package/dist/src/storage/providers/sqlite/repos/agent-activity.js +44 -0
  314. package/dist/src/storage/providers/sqlite/repos/agent-activity.js.map +1 -0
  315. package/dist/src/storage/providers/sqlite/repos/agent-directives.d.ts +14 -0
  316. package/dist/src/storage/providers/sqlite/repos/agent-directives.d.ts.map +1 -0
  317. package/dist/src/storage/providers/sqlite/repos/agent-directives.js +65 -0
  318. package/dist/src/storage/providers/sqlite/repos/agent-directives.js.map +1 -0
  319. package/dist/src/storage/providers/sqlite/repos/agent-message.d.ts +28 -0
  320. package/dist/src/storage/providers/sqlite/repos/agent-message.d.ts.map +1 -0
  321. package/dist/src/storage/providers/sqlite/repos/agent-message.js +93 -0
  322. package/dist/src/storage/providers/sqlite/repos/agent-message.js.map +1 -0
  323. package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts +45 -0
  324. package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts.map +1 -0
  325. package/dist/src/storage/providers/sqlite/repos/agent-task.js +155 -0
  326. package/dist/src/storage/providers/sqlite/repos/agent-task.js.map +1 -0
  327. package/dist/src/storage/providers/sqlite/repos/consent.d.ts +1 -0
  328. package/dist/src/storage/providers/sqlite/repos/consent.d.ts.map +1 -1
  329. package/dist/src/storage/providers/sqlite/repos/consent.js +4 -0
  330. package/dist/src/storage/providers/sqlite/repos/consent.js.map +1 -1
  331. package/dist/src/storage/providers/sqlite/repos/sharing-group.d.ts +16 -0
  332. package/dist/src/storage/providers/sqlite/repos/sharing-group.d.ts.map +1 -0
  333. package/dist/src/storage/providers/sqlite/repos/sharing-group.js +68 -0
  334. package/dist/src/storage/providers/sqlite/repos/sharing-group.js.map +1 -0
  335. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  336. package/dist/src/storage/providers/sqlite/schema.js +121 -0
  337. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  338. package/dist/src/storage/repositories/agent-activity.repository.d.ts +15 -0
  339. package/dist/src/storage/repositories/agent-activity.repository.d.ts.map +1 -0
  340. package/dist/src/storage/repositories/agent-activity.repository.js +8 -0
  341. package/dist/src/storage/repositories/agent-activity.repository.js.map +1 -0
  342. package/dist/src/storage/repositories/agent-directives.repository.d.ts +15 -0
  343. package/dist/src/storage/repositories/agent-directives.repository.d.ts.map +1 -0
  344. package/dist/src/storage/repositories/agent-directives.repository.js +8 -0
  345. package/dist/src/storage/repositories/agent-directives.repository.js.map +1 -0
  346. package/dist/src/storage/repositories/agent-message.repository.d.ts +29 -0
  347. package/dist/src/storage/repositories/agent-message.repository.d.ts.map +1 -0
  348. package/dist/src/storage/repositories/agent-message.repository.js +8 -0
  349. package/dist/src/storage/repositories/agent-message.repository.js.map +1 -0
  350. package/dist/src/storage/repositories/agent-task.repository.d.ts +46 -0
  351. package/dist/src/storage/repositories/agent-task.repository.d.ts.map +1 -0
  352. package/dist/src/storage/repositories/agent-task.repository.js +8 -0
  353. package/dist/src/storage/repositories/agent-task.repository.js.map +1 -0
  354. package/dist/src/storage/repositories/consent.repository.d.ts +1 -0
  355. package/dist/src/storage/repositories/consent.repository.d.ts.map +1 -1
  356. package/dist/src/storage/repositories/device-auth.repository.d.ts +1 -0
  357. package/dist/src/storage/repositories/device-auth.repository.d.ts.map +1 -1
  358. package/dist/src/storage/repositories/extension-instance.repository.d.ts +1 -0
  359. package/dist/src/storage/repositories/extension-instance.repository.d.ts.map +1 -1
  360. package/dist/src/storage/repositories/index.d.ts +6 -0
  361. package/dist/src/storage/repositories/index.d.ts.map +1 -1
  362. package/dist/src/storage/repositories/knowledge.repository.d.ts +2 -0
  363. package/dist/src/storage/repositories/knowledge.repository.d.ts.map +1 -1
  364. package/dist/src/storage/repositories/moderation.repository.d.ts +1 -0
  365. package/dist/src/storage/repositories/moderation.repository.d.ts.map +1 -1
  366. package/dist/src/storage/repositories/sharing-group.repository.d.ts +17 -0
  367. package/dist/src/storage/repositories/sharing-group.repository.d.ts.map +1 -0
  368. package/dist/src/storage/repositories/sharing-group.repository.js +8 -0
  369. package/dist/src/storage/repositories/sharing-group.repository.js.map +1 -0
  370. package/dist/src/storage/repositories/stats.repository.d.ts +12 -0
  371. package/dist/src/storage/repositories/stats.repository.d.ts.map +1 -0
  372. package/dist/src/storage/repositories/stats.repository.js +7 -0
  373. package/dist/src/storage/repositories/stats.repository.js.map +1 -0
  374. package/dist/src/storage/storage-factory.js +1 -0
  375. package/dist/src/storage/storage-factory.js.map +1 -1
  376. package/dist/src/utils/password-validation.d.ts +8 -0
  377. package/dist/src/utils/password-validation.d.ts.map +1 -0
  378. package/dist/src/utils/password-validation.js +25 -0
  379. package/dist/src/utils/password-validation.js.map +1 -0
  380. package/dist/src/utils/service-summary.d.ts +6 -1
  381. package/dist/src/utils/service-summary.d.ts.map +1 -1
  382. package/dist/src/utils/service-summary.js +6 -1
  383. package/dist/src/utils/service-summary.js.map +1 -1
  384. package/package.json +97 -77
  385. package/prisma/schema.prisma +128 -10
@@ -16,7 +16,8 @@
16
16
  "profile": "Profiili",
17
17
  "logout": "Kirjaudu ulos",
18
18
  "loggedInAs": "kirjautuneena",
19
- "help": "Apua"
19
+ "help": "Apua",
20
+ "admin": "Hallinta"
20
21
  },
21
22
  "hero": {
22
23
  "title": "Tietosi on sinun. AI:si työskentelee puolestasi.",
@@ -256,6 +257,8 @@
256
257
  "connect": "Yhdistä automaatioagentti",
257
258
  "connectDesc": "Jos sinulla on OpenClaw tai muu AI-automaatioagentti, anna sille tämä kehote rekisteröidäksesi agentin tilillesi:",
258
259
  "copyPrompt": "Kopioi kehote",
260
+ "downloadInstructions": "Lataa ohjeet",
261
+ "copyFullInstructions": "Kopioi kaikki ohjeet",
259
262
  "copied": "Kopioitu!",
260
263
  "copyGaii": "Kopioi GAII",
261
264
  "noAgent": "Eikö sinulla vielä ole automaatioagenttia?",
@@ -352,6 +355,96 @@
352
355
  "credentials_warning": "Säilytä yksityinen avain turvallisesti — sitä ei voi hakea uudelleen.",
353
356
  "polling_note": "Jos agenttisi pollaa automaattisesti, se saa nämä tunnistetiedot muutaman sekunnin kuluessa.",
354
357
  "token_expiry_note": "Token vanhenee 24 tunnin kuluttua. Agenttisi käyttää yksityistä avainta uuden tokenin hankkimiseen automaattisesti."
358
+ },
359
+ "subtabs": {
360
+ "tasks": "Tehtävät",
361
+ "directives": "Ohjeet",
362
+ "capabilities": "Kyvykkyydet",
363
+ "activity": "Aktiivisuus",
364
+ "services": "Palvelut",
365
+ "messages": "Viestit"
366
+ },
367
+ "tasks": {
368
+ "title": "Tehtäväjono",
369
+ "empty": "Ei tehtäviä vielä",
370
+ "newTask": "Uusi tehtävä",
371
+ "createTask": "Luo tehtävä",
372
+ "cancel": "Peruuta",
373
+ "titleLabel": "Otsikko",
374
+ "descLabel": "Kuvaus",
375
+ "statusLabel": "Tila",
376
+ "draft": "Luonnos",
377
+ "queued": "Jonossa",
378
+ "active": "Aktiivinen",
379
+ "done": "Valmis",
380
+ "failed": "Epäonnistunut",
381
+ "stalled": "Pysähtynyt",
382
+ "events": "Tapahtumat",
383
+ "noEvents": "Ei tapahtumia",
384
+ "todoProgress": "TODO-edistyminen",
385
+ "created": "Luotu",
386
+ "lastEvent": "Viimeisin tapahtuma",
387
+ "delete": "Poista",
388
+ "deleteConfirm": "Poista tämä tehtävä?"
389
+ },
390
+ "directives": {
391
+ "title": "Ohjeet",
392
+ "purpose": "Tarkoitus",
393
+ "rules": "Säännöt",
394
+ "memoryAreas": "Muistialueet",
395
+ "resources": "Resurssit",
396
+ "edit": "Muokkaa",
397
+ "save": "Tallenna",
398
+ "cancel": "Peruuta",
399
+ "reset": "Palauta oletukset",
400
+ "resetConfirm": "Palauta agentin ohjeet oletuksiin?",
401
+ "empty": "Ohjeita ei määritetty",
402
+ "addRule": "Lisää sääntö",
403
+ "system": "Järjestelmä",
404
+ "owner": "Omistaja",
405
+ "agent": "Agentti"
406
+ },
407
+ "capabilities": {
408
+ "technical": "Tekniset taidot",
409
+ "domain": "Osaamisalueet",
410
+ "actionQueue": "Toimintajonotuki",
411
+ "verified": "vahvistettu",
412
+ "selfReported": "itse ilmoitettu",
413
+ "empty": "Kyvykkyyksiä ei vielä ilmoitettu",
414
+ "canAccept": "Voi vastaanottaa toimeksiantoja",
415
+ "canDeliver": "Voi toimittaa tuloksia",
416
+ "languages": "Kielet"
417
+ },
418
+ "activity": {
419
+ "tasksCompleted": "Tehtäviä suoritettu",
420
+ "tokensUsed": "Tokeneita käytetty (30pv)",
421
+ "successRate": "Onnistumisprosentti",
422
+ "scheduledJobs": "Ajastetut tehtävät",
423
+ "recentLog": "Viimeisimmät tapahtumat",
424
+ "viewFullLog": "Näytä koko loki",
425
+ "noActivity": "Ei vielä aktiivisuutta",
426
+ "aimeatJob": "AIMEAT (järjestelmä)",
427
+ "agentJob": "Agentti-ympäristö"
428
+ },
429
+ "services": {
430
+ "title": "Julkaistut palvelut",
431
+ "empty": "Ei julkaistuja palveluita",
432
+ "info": "Muut agentit voivat kutsua naita palveluita tyonvaihdon kautta",
433
+ "calls": "kutsut",
434
+ "unpublish": "Poista julkaisu"
435
+ },
436
+ "messages": {
437
+ "title": "Viestit",
438
+ "empty": "Ei viesteja viela. Laheta viesti aloittaaksesi keskustelun.",
439
+ "send": "Laheta",
440
+ "placeholder": "Kirjoita viesti...",
441
+ "online": "online",
442
+ "offline": "offline",
443
+ "threads": "Keskustelut",
444
+ "proposedTask": "Ehdotettu tehtava",
445
+ "createTask": "Luo tama tehtava",
446
+ "adjustTask": "Muokkaan ensin",
447
+ "tokensUsed": "tokenia"
355
448
  }
356
449
  },
357
450
  "scopes": {
@@ -549,7 +642,9 @@
549
642
  "shareToFederation": "Jaa",
550
643
  "stopSharing": "Lopeta jakaminen",
551
644
  "shareSuccess": "Jaettu federaatioon",
552
- "unshareSuccess": "Poistettu federaatiosta"
645
+ "unshareSuccess": "Poistettu federaatiosta",
646
+ "selectGroup": "Valitse ryhma",
647
+ "noGroups": "Ei jakoryhmiä. Luo ryhma Oikeudet-valilehdessa."
553
648
  },
554
649
  "files": {
555
650
  "title": "Tallennetut tiedostot",
@@ -770,7 +865,92 @@
770
865
  "fedNoConsents": "Federaatiokirjautumista ei myönnetty.",
771
866
  "fedRemove": "Poista",
772
867
  "fedGranted": "Todennusoikeus myönnetty",
773
- "fedRevoked": "Todennusoikeus peruutettu"
868
+ "fedRevoked": "Todennusoikeus peruutettu",
869
+ "sharingGroups": {
870
+ "title": "Jakoryhmät",
871
+ "desc": "Luo ryhmiä jakaaksesi muistia ja tiedostoja tiettyjen käyttäjien ja agenttien kanssa",
872
+ "empty": "Ei jakoryhmiä vielä",
873
+ "newGroup": "Uusi ryhmä",
874
+ "create": "Luo ryhmä",
875
+ "cancel": "Peruuta",
876
+ "name": "Ryhmän nimi",
877
+ "description": "Kuvaus",
878
+ "members": "Jäsenet",
879
+ "entries": "Jaetut merkinnät",
880
+ "delete": "Poista ryhmä",
881
+ "deleteConfirm": "Poista tämä jakoryhmä?",
882
+ "addMember": "Lisää jäsen",
883
+ "removeMember": "Poista",
884
+ "identifier": "Tunniste (GAII tai GHII)",
885
+ "identifierType": "Tyyppi"
886
+ },
887
+ "agentDefaults": {
888
+ "title": "Agenttien oletukset",
889
+ "desc": "Oletussäännöt ja -asetukset kaikille agenteillesi",
890
+ "rules": "Oletussäännöt",
891
+ "tokenBudget": "Oletustoken-budjetti",
892
+ "empty": "Oletuksia ei määritetty",
893
+ "edit": "Muokkaa",
894
+ "save": "Tallenna",
895
+ "cancel": "Peruuta"
896
+ },
897
+ "sgTitle": "Jakoryhmät",
898
+ "sgDesc": "Määrittele identiteettiryhmiä joiden kanssa jakaa muistimerkintöjä. Liitä jakoryhmä muistiavaimiin hallitaksesi kuka voi lukea tai kirjoittaa.",
899
+ "sgEmpty": "Ei jakoryhmiä vielä.",
900
+ "sgLoading": "Ladataan...",
901
+ "sgCreate": "Uusi ryhmä",
902
+ "sgCreateTitle": "Luo jakoryhmä",
903
+ "sgCreateBtn": "Luo",
904
+ "sgGroupName": "Ryhmän nimi",
905
+ "sgNamePlaceholder": "esim. Tiimi Alpha",
906
+ "sgDescription": "Kuvaus (valinnainen)",
907
+ "sgDescPlaceholder": "Mihin tämä ryhmä on tarkoitettu?",
908
+ "sgNameRequired": "Ryhmän nimi on pakollinen",
909
+ "sgCreated": "Jakoryhmä luotu",
910
+ "sgCreateError": "Ryhmän luonti epäonnistui",
911
+ "sgUpdated": "Ryhmä päivitetty",
912
+ "sgUpdateError": "Ryhmän päivitys epäonnistui",
913
+ "sgConfirmDelete": "Poista ryhmä \"{name}\"? Tätä ei voi perua.",
914
+ "sgDeleted": "Jakoryhmä poistettu",
915
+ "sgDeleteError": "Ryhmän poisto epäonnistui",
916
+ "sgEdit": "Muokkaa",
917
+ "sgDelete": "Poista",
918
+ "sgSave": "Tallenna",
919
+ "sgCancel": "Peruuta",
920
+ "sgMembers": "jäsentä",
921
+ "sgMemberList": "Jäsenet",
922
+ "sgNoMembers": "Ei jäseniä vielä",
923
+ "sgAddMember": "Lisää jäsen",
924
+ "sgMemberIdentifier": "Tunniste (GHII tai GAII)",
925
+ "sgMemberType": "Tyyppi",
926
+ "sgMemberRequired": "Tunniste on pakollinen",
927
+ "sgMemberAdded": "Jäsen lisätty",
928
+ "sgMemberAddError": "Jäsenen lisäys epäonnistui",
929
+ "sgConfirmRemoveMember": "Poista \"{name}\" tästä ryhmästä?",
930
+ "sgMemberRemoved": "Jäsen poistettu",
931
+ "sgMemberRemoveError": "Jäsenen poisto epäonnistui",
932
+ "sgDefaultPerms": "Oletusoikeudet",
933
+ "sgCreatedAt": "Luotu",
934
+ "sgRead": "Luku",
935
+ "sgWrite": "Kirjoitus",
936
+ "sgRemove": "Poista",
937
+ "adTitle": "Agenttien oletukset",
938
+ "adDesc": "Omistajatason oletukset jotka koskevat kaikkia agenttejasi ellei agenttitason direktiivit ohita niitä.",
939
+ "adRules": "Oletussäännöt",
940
+ "adEdit": "Muokkaa",
941
+ "adEditTitle": "Muokkaa agenttien oletuksia",
942
+ "adNoRules": "Oletussääntöjä ei asetettu.",
943
+ "adTokenBudget": "Token-budjetti",
944
+ "adUnlimited": "Rajoittamaton",
945
+ "adBudgetPlaceholder": "Jätä tyhjäksi rajoittamatonta varten",
946
+ "adRulePlaceholder": "Lisää sääntö...",
947
+ "adAddRule": "Lisää",
948
+ "adRemoveRule": "Poista",
949
+ "adSave": "Tallenna",
950
+ "adCancel": "Peruuta",
951
+ "adInvalidBudget": "Token-budjetin täytyy olla ei-negatiivinen luku",
952
+ "adSaved": "Agenttien oletukset tallennettu",
953
+ "adSaveError": "Oletusten tallennus epäonnistui"
774
954
  },
775
955
  "nodes": {
776
956
  "title": "Henkilökohtaiset solmut",
@@ -1694,7 +1874,8 @@
1694
1874
  "public": "Julkinen",
1695
1875
  "private": "Yksityinen",
1696
1876
  "owner": "Omat agentit",
1697
- "protected": "Suojattu"
1877
+ "protected": "Suojattu",
1878
+ "group": "Ryhmä"
1698
1879
  },
1699
1880
  "knowledge": {
1700
1881
  "parseError": "Liitettyä sisältöä ei voitu jäsentää JSON-muodossa",
@@ -2229,7 +2410,8 @@
2229
2410
  "errUserShort": "Käyttäjänimen tulee olla vähintään 3 merkkiä",
2230
2411
  "errPassShort": "Salasanan tulee olla vähintään 4 merkkiä",
2231
2412
  "errWrongPass": "Väärä salasana tälle käyttäjänimelle.",
2232
- "errFederatedLogin": "Federoitu kirjautuminen ei ole vielä tuettu. Tämä solmu on {localNode}, mutta identiteetti kuuluu solmuun {remoteNode}.",
2413
+ "connectingHome": "Yhdistetään kotisolmuun...",
2414
+ "errFederatedLogin": "Kotisolmuun {remoteNode} ei saatu yhteyttä federoitua kirjautumista varten.",
2233
2415
  "loggedIn": "kirjautuneena",
2234
2416
  "logoutBtn": "Kirjaudu ulos",
2235
2417
  "usernameLabel": "Käyttäjänimi",
@@ -2795,7 +2977,7 @@
2795
2977
  "dailyActivity": "Päivittäinen aktiivisuus (30 päivää)",
2796
2978
  "weeklyComparison": "Viikkovertailu",
2797
2979
  "monthlyTrend": "Kuukausitrendi",
2798
- "statsExplain": "Kevyet käyttölaskurit. Nollautuvat palvelimen uudelleenkäynnistyksessä.",
2980
+ "statsExplain": "Laskurit tallennetaan tietokantaan. Käyttöaika ja reaaliaikamittarit nollautuvat uudelleenkäynnistyksessä.",
2799
2981
  "writes": "Kirjoitukset",
2800
2982
  "reads": "Luvut",
2801
2983
  "grants": "Myönnöt",
@@ -2993,6 +3175,63 @@
2993
3175
  "pushUnsubscribeBtn": "Peru tilaus",
2994
3176
  "pushNoBrowserSupport": "Tämä selain ei tue push-ilmoituksia",
2995
3177
 
3178
+ "blocked": "Estetyt",
3179
+ "blockedCooldown": "Jäähdytys",
3180
+ "blockedDisabled": "Pois käytöstä",
3181
+ "blockedQuietHours": "Hiljaiset tunnit",
3182
+ "breakdownFailed": "Epäonnistuneet",
3183
+ "breakdownRetried": "Uudelleenyritykset",
3184
+ "breakdownSent": "Lähetetyt",
3185
+ "breakdownType": "Tyyppi",
3186
+ "channelEmail": "Sähköposti",
3187
+ "channelPush": "Push",
3188
+ "channels": "Kanavat",
3189
+ "emailDelivery": "Sähköpostin toimitus",
3190
+ "emailType": {
3191
+ "group_send": "Ryhmälähetys",
3192
+ "magic_link": "Kirjautumislinkki",
3193
+ "match_suggestion": "Ehdotus",
3194
+ "notification": "Ilmoitus",
3195
+ "verification": "Vahvistus"
3196
+ },
3197
+ "emailsFailed": "Epäonnistuneet",
3198
+ "emailsRetried": "Uudelleenyritykset",
3199
+ "emailsSent": "Lähetetyt",
3200
+ "expiredSubs": "Vanhentuneet",
3201
+ "live": "live",
3202
+ "mailboxNotifBlocked": "Postilaatikko estetyt",
3203
+ "mailboxNotifFailed": "Postilaatikko epäonn.",
3204
+ "mailboxNotifSent": "Postilaatikko lähet.",
3205
+ "mailboxNotifications": "Postilaatikkoilmoitukset",
3206
+ "period30Days": "30 päivää",
3207
+ "period7Days": "7 päivää",
3208
+ "periodAll": "Kaikki",
3209
+ "periodApply": "Hae",
3210
+ "periodCustom": "Mukautettu",
3211
+ "periodFrom": "Alkaen",
3212
+ "periodLabel": "Ajanjakso",
3213
+ "periodThisWeek": "Tämä viikko",
3214
+ "periodTo": "Asti",
3215
+ "periodToday": "Tänään",
3216
+ "weekMon": "Ma",
3217
+ "weekTue": "Ti",
3218
+ "weekWed": "Ke",
3219
+ "weekThu": "To",
3220
+ "weekFri": "Pe",
3221
+ "weekSat": "La",
3222
+ "weekSun": "Su",
3223
+ "pushDelivery": "Push-ilmoitukset",
3224
+ "pushFailed": "Epäonnistuneet",
3225
+ "pushSent": "Lähetetyt",
3226
+ "pushType": {
3227
+ "board": "Keskustelu",
3228
+ "federation": "Federaatio",
3229
+ "general": "Yleinen",
3230
+ "organism": "Organismi",
3231
+ "test": "Testi",
3232
+ "work": "Työ"
3233
+ },
3234
+
2996
3235
  "totalEntries": "Merkintöjä yhteensä",
2997
3236
  "cities": "Kaupungit",
2998
3237
  "categories": "Kategoriat",
@@ -3211,6 +3450,13 @@
3211
3450
  "fedShareCatalogue": "Jaa katalogi",
3212
3451
  "fedReplicateMemory": "Replikoi muisti",
3213
3452
  "fedAllowRouting": "Salli reititys",
3453
+ "fedAllowAuth": "Salli federaatiokirjautuminen",
3454
+ "fedAuthPolicyTitle": "Federaation todennuspolitiikka",
3455
+ "fedAuthPolicyDesc": "Hallitse voivatko muiden solmujen kayttajat kirjautua tanne ja mita he voivat tehda.",
3456
+ "fedAuthDisabled": "Pois kaytosta (ei federaatiokirjautumisia)",
3457
+ "fedAuthAllPeers": "Kaikki vertaiset (kaikkien aktiivisten vertaisten kayttajat voivat kirjautua)",
3458
+ "fedAuthSpecificPeers": "Tietyt vertaiset (vertaiskohtainen hallinta)",
3459
+ "fedDefaultScopes": "Oletuslaajuudet federoiduille kayttajille:",
3214
3460
  "fedPeerMode": "Vertaistila",
3215
3461
  "fedPeerModeFederation": "Federaatio",
3216
3462
  "fedPeerModePrivate": "Yksityinen P2P",
@@ -3257,6 +3503,17 @@
3257
3503
  "cfgGroup_totp": "TOTP",
3258
3504
  "cfgGroup_matching": "Matchaus",
3259
3505
  "cfgGroup_extensions": "Laajennukset",
3506
+ "cfgGroup_security": "Turvallisuus",
3507
+ "cfg_security_login_rate_limit_max": "Kirjautumisen nopeusrajoitus (max per ikkuna)",
3508
+ "cfg_security_login_rate_limit_window_ms": "Kirjautumisen nopeusrajoitusikkuna (ms)",
3509
+ "cfg_security_registration_rate_limit_max": "Rekisteroinnin nopeusrajoitus (max per ikkuna)",
3510
+ "cfg_security_registration_rate_limit_window_ms": "Rekisteroinnin nopeusrajoitusikkuna (ms)",
3511
+ "cfg_security_admin_auth_rate_limit_max": "Admin-todennuksen nopeusrajoitus (max per ikkuna)",
3512
+ "cfg_security_admin_auth_rate_limit_window_ms": "Admin-todennuksen nopeusrajoitusikkuna (ms)",
3513
+ "cfg_security_password_lockout_attempts": "Salasanalukitus N epaonnistumisen jalkeen",
3514
+ "cfg_security_password_lockout_minutes": "Salasanalukituksen kesto (minuuttia)",
3515
+ "cfg_security_json_body_limit_mb": "JSON-sisallon kokoraja (Mt)",
3516
+ "cfg_security_json_body_limit_large_mb": "Suuri kokoraja sovelluksille/laajennuksille (Mt)",
3260
3517
  "cfgGroup_marketplace": "Kauppapaikka",
3261
3518
  "cfgGroup_push": "Push-ilmoitukset",
3262
3519
  "cfgGroup_eudiw": "EUDIW",
@@ -3498,7 +3755,32 @@
3498
3755
  "memoryFilterPrefix": "Suodata avaimen etuliitteellä",
3499
3756
  "memoryNoResults": "Muistiavaimia ei löytynyt",
3500
3757
  "memoryDeleteConfirm": "Poista tämä muistiavain?",
3501
- "memoryDeleted": "Muistiavain poistettu"
3758
+ "memoryDeleted": "Muistiavain poistettu",
3759
+ "agentTasksTab": "Agenttitehtävät",
3760
+ "agentTasksDesc": "Yhteenveto kaikista agenttitehtävistä solmussa",
3761
+ "agentTasksTotal": "Tehtäviä yhteensä",
3762
+ "agentTasksEmpty": "Agenttitehtäviä ei löytynyt",
3763
+ "agentTasksAgent": "Agentti",
3764
+ "agentTasksTitle": "Otsikko",
3765
+ "agentTasksStatus": "Tila",
3766
+ "agentTasksTodoProgress": "TODO-edistyminen",
3767
+ "agentTasksCreated": "Luotu",
3768
+ "agentTasksLastEvent": "Viimeisin tapahtuma",
3769
+ "agentTasksActiveTasks": "Aktiiviset agenttitehtävät",
3770
+ "agentTasksFilterStatus": "Suodata tilan mukaan",
3771
+ "agentTasksAllStatuses": "Kaikki tilat",
3772
+ "sharingGroupsTab": "Jakoryhmät",
3773
+ "sharingGroupsDesc": "Yhteenveto kaikista jakoryhmistä solmussa",
3774
+ "sharingGroupsTotal": "Ryhmiä yhteensä",
3775
+ "sharingGroupsEmpty": "Jakoryhmiä ei löytynyt",
3776
+ "sharingGroupsName": "Nimi",
3777
+ "sharingGroupsOwner": "Omistaja",
3778
+ "sharingGroupsMembers": "Jäsenet",
3779
+ "sharingGroupsEntries": "Merkinnät",
3780
+ "sharingGroupsCreated": "Luotu",
3781
+ "sharingGroupsTotalCount": "Jakoryhmät",
3782
+ "overviewActiveTasks": "Aktiiviset tehtävät",
3783
+ "overviewSharingGroups": "Jakoryhmät"
3502
3784
  },
3503
3785
  "launcher": {
3504
3786
  "title": "Omat Sovellukset",
@@ -3887,7 +4169,8 @@
3887
4169
  "errUserShort": "Käyttäjänimen tulee olla vähintään 3 merkkiä",
3888
4170
  "errPassShort": "Salasanan tulee olla vähintään 4 merkkiä",
3889
4171
  "errWrongPass": "Väärä salasana tälle käyttäjänimelle.",
3890
- "errFederatedLogin": "Federoitu kirjautuminen ei ole vielä tuettu. Tämä solmu on {localNode}, mutta identiteetti kuuluu solmuun {remoteNode}.",
4172
+ "connectingHome": "Yhdistetään kotisolmuun...",
4173
+ "errFederatedLogin": "Kotisolmuun {remoteNode} ei saatu yhteyttä federoitua kirjautumista varten.",
3891
4174
  "loggedIn": "kirjautuneena",
3892
4175
  "logoutBtn": "Kirjaudu ulos",
3893
4176
  "whyTitle": "✨ Mitä saat?",
@@ -111,6 +111,7 @@
111
111
  /* Cards */
112
112
  .adm-grid { display: grid; gap: 16px; margin-bottom: 20px; }
113
113
  .adm-grid-4 { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }
114
+ .adm-grid-3 { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
114
115
  .adm-grid-2 { grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); }
115
116
  .adm-card {
116
117
  background: var(--glass-bg, #FFFFFF);
@@ -575,3 +576,99 @@
575
576
  .adm-member-add { display: flex; gap: 8px; align-items: center; }
576
577
  .adm-member-add .adm-input { flex: 1; font-size: .85rem; }
577
578
  .adm-font-mono { font-family: 'JetBrains Mono', monospace; }
579
+
580
+ /* ── Stats Time Range Selector ── */
581
+ .adm-time-range {
582
+ display: flex;
583
+ flex-wrap: wrap;
584
+ align-items: center;
585
+ gap: 8px;
586
+ margin-bottom: 20px;
587
+ padding: 12px 16px;
588
+ background: var(--glass-bg, #FFFFFF);
589
+ border: 1px solid var(--glass-border, #E5E7EB);
590
+ border-radius: 8px;
591
+ }
592
+ .adm-time-range-label {
593
+ font-size: 0.8rem;
594
+ color: var(--text-dim);
595
+ margin-right: 4px;
596
+ }
597
+ .adm-time-btn {
598
+ padding: 4px 12px;
599
+ font-size: 0.75rem;
600
+ border: 1px solid var(--glass-border, #E5E7EB);
601
+ border-radius: 6px;
602
+ background: transparent;
603
+ color: #1A1A2E;
604
+ cursor: pointer;
605
+ font-family: inherit;
606
+ transition: all 0.15s;
607
+ }
608
+ .adm-time-btn:hover { border-color: var(--accent); color: var(--accent); }
609
+ .adm-time-btn.active { background: var(--accent); color: #fff; border-color: var(--accent); }
610
+ .adm-time-custom {
611
+ display: flex;
612
+ align-items: center;
613
+ gap: 6px;
614
+ margin-left: auto;
615
+ }
616
+ .adm-time-custom input[type="date"] {
617
+ padding: 3px 8px;
618
+ font-size: 0.75rem;
619
+ border: 1px solid var(--glass-border, #E5E7EB);
620
+ border-radius: 4px;
621
+ background: #FAFAF8;
622
+ color: #1A1A2E;
623
+ font-family: inherit;
624
+ }
625
+
626
+ /* ── Stats Breakdown Table ── */
627
+ .adm-breakdown-table {
628
+ width: 100%;
629
+ border-collapse: collapse;
630
+ font-size: 0.78rem;
631
+ margin-top: 8px;
632
+ }
633
+ .adm-breakdown-table th {
634
+ text-align: left;
635
+ padding: 6px 10px;
636
+ color: var(--text-dim);
637
+ border-bottom: 1px solid var(--glass-border, #E5E7EB);
638
+ font-weight: 500;
639
+ }
640
+ .adm-breakdown-table td {
641
+ padding: 5px 10px;
642
+ border-bottom: 1px solid #F3F4F6;
643
+ }
644
+ .adm-breakdown-table td.num {
645
+ text-align: right;
646
+ font-variant-numeric: tabular-nums;
647
+ }
648
+
649
+ /* ── Stats Section Header Colors ── */
650
+ .adm-section-purple { color: #a855f7; }
651
+ .adm-section-cyan { color: #06b6d4; }
652
+ .adm-section-violet { color: #8b5cf6; }
653
+ .adm-section-amber { color: #f59e0b; }
654
+ .adm-section-red { color: #ef4444; }
655
+
656
+ /* ── Breakdown Table ── */
657
+ .adm-breakdown-table th.num { text-align: right; }
658
+
659
+ /* ── Stats Inline Breakdown ── */
660
+ .adm-date-separator { color: var(--text-dim); }
661
+ .adm-mailbox-inline { padding: 10px 16px; }
662
+ .adm-blocked-reasons { margin-bottom: 6px; color: var(--text-dim); }
663
+ .adm-channels-summary { color: var(--text-dim); }
664
+
665
+ .adm-badge-live {
666
+ display: inline-block;
667
+ font-size: 0.6rem;
668
+ padding: 1px 6px;
669
+ border-radius: 4px;
670
+ background: var(--accent);
671
+ color: #fff;
672
+ vertical-align: middle;
673
+ margin-left: 6px;
674
+ }