@aphexcms/cms-core 9.7.0 → 9.8.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 (326) hide show
  1. package/dist/agent-chat-state.svelte.d.ts +38 -0
  2. package/dist/agent-chat-state.svelte.d.ts.map +1 -0
  3. package/dist/agent-chat-state.svelte.js +86 -0
  4. package/dist/ai/content-workspace-tools.d.ts +3 -0
  5. package/dist/ai/content-workspace-tools.d.ts.map +1 -0
  6. package/dist/ai/content-workspace-tools.js +50 -0
  7. package/dist/ai/default-system-prompt.d.ts +2 -0
  8. package/dist/ai/default-system-prompt.d.ts.map +1 -0
  9. package/dist/ai/default-system-prompt.js +15 -0
  10. package/dist/ai/index.d.ts +2 -0
  11. package/dist/ai/index.d.ts.map +1 -0
  12. package/dist/ai/index.js +4 -0
  13. package/dist/ai/interfaces/ai-provider.d.ts +67 -0
  14. package/dist/ai/interfaces/ai-provider.d.ts.map +1 -0
  15. package/dist/ai/interfaces/ai-provider.js +16 -0
  16. package/dist/ai/run-agent-turn.d.ts +29 -0
  17. package/dist/ai/run-agent-turn.d.ts.map +1 -0
  18. package/dist/ai/run-agent-turn.js +166 -0
  19. package/dist/api/agent-chat.d.ts +27 -0
  20. package/dist/api/agent-chat.d.ts.map +1 -0
  21. package/dist/api/agent-chat.js +64 -0
  22. package/dist/api/documents.d.ts +8 -3
  23. package/dist/api/documents.d.ts.map +1 -1
  24. package/dist/api/documents.js +6 -6
  25. package/dist/api/schemas/agent-chat.d.ts +45 -0
  26. package/dist/api/schemas/agent-chat.d.ts.map +1 -0
  27. package/dist/api/schemas/agent-chat.js +35 -0
  28. package/dist/api/schemas/agent-operations.d.ts +13 -0
  29. package/dist/api/schemas/agent-operations.d.ts.map +1 -0
  30. package/dist/api/schemas/agent-operations.js +15 -0
  31. package/dist/api/schemas/documents.d.ts +22 -0
  32. package/dist/api/schemas/documents.d.ts.map +1 -1
  33. package/dist/api/schemas/documents.js +20 -2
  34. package/dist/chunk-recovery.d.ts +33 -0
  35. package/dist/chunk-recovery.d.ts.map +1 -0
  36. package/dist/chunk-recovery.js +131 -0
  37. package/dist/client/index.d.ts +1 -0
  38. package/dist/client/index.d.ts.map +1 -1
  39. package/dist/client/index.js +1 -0
  40. package/dist/client/ui.d.ts +1 -0
  41. package/dist/client/ui.d.ts.map +1 -1
  42. package/dist/client/ui.js +1 -0
  43. package/dist/components/AdminApp.svelte +37 -3
  44. package/dist/components/AdminApp.svelte.d.ts.map +1 -1
  45. package/dist/components/admin/ActivityView.svelte +251 -42
  46. package/dist/components/admin/ActivityView.svelte.d.ts.map +1 -1
  47. package/dist/components/admin/AgentChat.svelte +977 -0
  48. package/dist/components/admin/AgentChat.svelte.d.ts +17 -0
  49. package/dist/components/admin/AgentChat.svelte.d.ts.map +1 -0
  50. package/dist/components/admin/DocumentEditor.svelte +273 -60
  51. package/dist/components/admin/DocumentEditor.svelte.d.ts +6 -0
  52. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  53. package/dist/components/admin/ObjectModal.svelte +4 -2
  54. package/dist/components/admin/fields/ArrayField.svelte +4 -1
  55. package/dist/components/admin/fields/ReferenceField.svelte +12 -1
  56. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
  57. package/dist/components/index.d.ts +1 -0
  58. package/dist/components/index.d.ts.map +1 -1
  59. package/dist/components/index.js +1 -0
  60. package/dist/components/layout/Sidebar.svelte +26 -2
  61. package/dist/components/layout/Sidebar.svelte.d.ts +1 -0
  62. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
  63. package/dist/db/interfaces/agent-change-sets.d.ts +17 -0
  64. package/dist/db/interfaces/agent-change-sets.d.ts.map +1 -0
  65. package/dist/db/interfaces/agent-change-sets.js +1 -0
  66. package/dist/db/interfaces/document.d.ts +25 -3
  67. package/dist/db/interfaces/document.d.ts.map +1 -1
  68. package/dist/db/interfaces/document.js +19 -1
  69. package/dist/db/interfaces/index.d.ts +4 -1
  70. package/dist/db/interfaces/index.d.ts.map +1 -1
  71. package/dist/db/interfaces/index.js +1 -1
  72. package/dist/document-refresh.svelte.d.ts +2 -0
  73. package/dist/document-refresh.svelte.d.ts.map +1 -1
  74. package/dist/document-refresh.svelte.js +15 -0
  75. package/dist/document-workspace-registry.svelte.d.ts +15 -0
  76. package/dist/document-workspace-registry.svelte.d.ts.map +1 -0
  77. package/dist/document-workspace-registry.svelte.js +30 -0
  78. package/dist/field-validation/utils.d.ts.map +1 -1
  79. package/dist/field-validation/utils.js +211 -29
  80. package/dist/hooks.d.ts +2 -0
  81. package/dist/hooks.d.ts.map +1 -1
  82. package/dist/hooks.js +2 -0
  83. package/dist/lib/agent-chat-state.svelte.d.ts +38 -0
  84. package/dist/lib/agent-chat-state.svelte.d.ts.map +1 -0
  85. package/dist/lib/agent-chat-state.svelte.js +87 -0
  86. package/dist/lib/agent-chat-state.svelte.js.map +1 -0
  87. package/dist/lib/ai/content-workspace-tools.d.ts +3 -0
  88. package/dist/lib/ai/content-workspace-tools.d.ts.map +1 -0
  89. package/dist/lib/ai/content-workspace-tools.js +51 -0
  90. package/dist/lib/ai/content-workspace-tools.js.map +1 -0
  91. package/dist/lib/ai/default-system-prompt.d.ts +2 -0
  92. package/dist/lib/ai/default-system-prompt.d.ts.map +1 -0
  93. package/dist/lib/ai/default-system-prompt.js +16 -0
  94. package/dist/lib/ai/default-system-prompt.js.map +1 -0
  95. package/dist/lib/ai/index.d.ts +2 -0
  96. package/dist/lib/ai/index.d.ts.map +1 -0
  97. package/dist/lib/ai/index.js +5 -0
  98. package/dist/lib/ai/index.js.map +1 -0
  99. package/dist/lib/ai/interfaces/ai-provider.d.ts +67 -0
  100. package/dist/lib/ai/interfaces/ai-provider.d.ts.map +1 -0
  101. package/dist/lib/ai/interfaces/ai-provider.js +17 -0
  102. package/dist/lib/ai/interfaces/ai-provider.js.map +1 -0
  103. package/dist/lib/ai/run-agent-turn.d.ts +29 -0
  104. package/dist/lib/ai/run-agent-turn.d.ts.map +1 -0
  105. package/dist/lib/ai/run-agent-turn.js +167 -0
  106. package/dist/lib/ai/run-agent-turn.js.map +1 -0
  107. package/dist/lib/api/agent-chat.d.ts +27 -0
  108. package/dist/lib/api/agent-chat.d.ts.map +1 -0
  109. package/dist/lib/api/agent-chat.js +65 -0
  110. package/dist/lib/api/agent-chat.js.map +1 -0
  111. package/dist/lib/api/documents.d.ts +8 -3
  112. package/dist/lib/api/documents.d.ts.map +1 -1
  113. package/dist/lib/api/documents.js +6 -6
  114. package/dist/lib/api/documents.js.map +1 -1
  115. package/dist/lib/api/schemas/agent-chat.d.ts +45 -0
  116. package/dist/lib/api/schemas/agent-chat.d.ts.map +1 -0
  117. package/dist/lib/api/schemas/agent-chat.js +36 -0
  118. package/dist/lib/api/schemas/agent-chat.js.map +1 -0
  119. package/dist/lib/api/schemas/agent-operations.d.ts +13 -0
  120. package/dist/lib/api/schemas/agent-operations.d.ts.map +1 -0
  121. package/dist/lib/api/schemas/agent-operations.js +16 -0
  122. package/dist/lib/api/schemas/agent-operations.js.map +1 -0
  123. package/dist/lib/api/schemas/documents.d.ts +22 -0
  124. package/dist/lib/api/schemas/documents.d.ts.map +1 -1
  125. package/dist/lib/api/schemas/documents.js +20 -2
  126. package/dist/lib/api/schemas/documents.js.map +1 -1
  127. package/dist/lib/chunk-recovery.d.ts +33 -0
  128. package/dist/lib/chunk-recovery.d.ts.map +1 -0
  129. package/dist/lib/chunk-recovery.js +132 -0
  130. package/dist/lib/chunk-recovery.js.map +1 -0
  131. package/dist/lib/client/index.d.ts +1 -0
  132. package/dist/lib/client/index.d.ts.map +1 -1
  133. package/dist/lib/client/index.js +1 -0
  134. package/dist/lib/client/index.js.map +1 -1
  135. package/dist/lib/client/ui.d.ts +1 -0
  136. package/dist/lib/client/ui.d.ts.map +1 -1
  137. package/dist/lib/client/ui.js +1 -0
  138. package/dist/lib/client/ui.js.map +1 -1
  139. package/dist/lib/components/index.d.ts +1 -0
  140. package/dist/lib/components/index.d.ts.map +1 -1
  141. package/dist/lib/components/index.js +1 -0
  142. package/dist/lib/components/index.js.map +1 -1
  143. package/dist/lib/db/interfaces/agent-change-sets.d.ts +17 -0
  144. package/dist/lib/db/interfaces/agent-change-sets.d.ts.map +1 -0
  145. package/dist/lib/db/interfaces/agent-change-sets.js +2 -0
  146. package/dist/lib/db/interfaces/agent-change-sets.js.map +1 -0
  147. package/dist/lib/db/interfaces/document.d.ts +25 -3
  148. package/dist/lib/db/interfaces/document.d.ts.map +1 -1
  149. package/dist/lib/db/interfaces/document.js +19 -1
  150. package/dist/lib/db/interfaces/document.js.map +1 -1
  151. package/dist/lib/db/interfaces/index.d.ts +4 -1
  152. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  153. package/dist/lib/db/interfaces/index.js +1 -1
  154. package/dist/lib/db/interfaces/index.js.map +1 -1
  155. package/dist/lib/document-refresh.svelte.d.ts +2 -0
  156. package/dist/lib/document-refresh.svelte.d.ts.map +1 -1
  157. package/dist/lib/document-refresh.svelte.js +15 -0
  158. package/dist/lib/document-refresh.svelte.js.map +1 -1
  159. package/dist/lib/document-workspace-registry.svelte.d.ts +15 -0
  160. package/dist/lib/document-workspace-registry.svelte.d.ts.map +1 -0
  161. package/dist/lib/document-workspace-registry.svelte.js +31 -0
  162. package/dist/lib/document-workspace-registry.svelte.js.map +1 -0
  163. package/dist/lib/field-validation/utils.d.ts.map +1 -1
  164. package/dist/lib/field-validation/utils.js +211 -29
  165. package/dist/lib/field-validation/utils.js.map +1 -1
  166. package/dist/lib/hooks.d.ts +2 -0
  167. package/dist/lib/hooks.d.ts.map +1 -1
  168. package/dist/lib/hooks.js +2 -0
  169. package/dist/lib/hooks.js.map +1 -1
  170. package/dist/lib/local-api/collection-api.d.ts +7 -2
  171. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  172. package/dist/lib/local-api/collection-api.js +17 -10
  173. package/dist/lib/local-api/collection-api.js.map +1 -1
  174. package/dist/lib/mcp/tools.d.ts +39 -4
  175. package/dist/lib/mcp/tools.d.ts.map +1 -1
  176. package/dist/lib/mcp/tools.js +546 -362
  177. package/dist/lib/mcp/tools.js.map +1 -1
  178. package/dist/lib/plugins/resolver.d.ts +8 -1
  179. package/dist/lib/plugins/resolver.d.ts.map +1 -1
  180. package/dist/lib/plugins/resolver.js +14 -1
  181. package/dist/lib/plugins/resolver.js.map +1 -1
  182. package/dist/lib/plugins/types.d.ts +23 -2
  183. package/dist/lib/plugins/types.d.ts.map +1 -1
  184. package/dist/lib/plugins/types.js.map +1 -1
  185. package/dist/lib/preview/stega.d.ts +2 -2
  186. package/dist/lib/preview/stega.d.ts.map +1 -1
  187. package/dist/lib/preview/stega.js +52 -29
  188. package/dist/lib/preview/stega.js.map +1 -1
  189. package/dist/lib/schema-utils/validator.d.ts.map +1 -1
  190. package/dist/lib/schema-utils/validator.js +5 -2
  191. package/dist/lib/schema-utils/validator.js.map +1 -1
  192. package/dist/lib/server/api/index.d.ts.map +1 -1
  193. package/dist/lib/server/api/index.js +8 -0
  194. package/dist/lib/server/api/index.js.map +1 -1
  195. package/dist/lib/server/api/routes/agent-change-sets.d.ts +4 -0
  196. package/dist/lib/server/api/routes/agent-change-sets.d.ts.map +1 -0
  197. package/dist/lib/server/api/routes/agent-change-sets.js +132 -0
  198. package/dist/lib/server/api/routes/agent-change-sets.js.map +1 -0
  199. package/dist/lib/server/api/routes/agent-chat.d.ts +14 -0
  200. package/dist/lib/server/api/routes/agent-chat.d.ts.map +1 -0
  201. package/dist/lib/server/api/routes/agent-chat.js +224 -0
  202. package/dist/lib/server/api/routes/agent-chat.js.map +1 -0
  203. package/dist/lib/server/api/routes/document-versions.d.ts.map +1 -1
  204. package/dist/lib/server/api/routes/document-versions.js +16 -2
  205. package/dist/lib/server/api/routes/document-versions.js.map +1 -1
  206. package/dist/lib/server/api/routes/documents-by-id.d.ts.map +1 -1
  207. package/dist/lib/server/api/routes/documents-by-id.js +11 -1
  208. package/dist/lib/server/api/routes/documents-by-id.js.map +1 -1
  209. package/dist/lib/server/api/routes/documents-publish.d.ts.map +1 -1
  210. package/dist/lib/server/api/routes/documents-publish.js +36 -3
  211. package/dist/lib/server/api/routes/documents-publish.js.map +1 -1
  212. package/dist/lib/server/api/routes/jobs.d.ts.map +1 -1
  213. package/dist/lib/server/api/routes/jobs.js +4 -2
  214. package/dist/lib/server/api/routes/jobs.js.map +1 -1
  215. package/dist/lib/server/api/routes/resolve-created-by.d.ts +13 -0
  216. package/dist/lib/server/api/routes/resolve-created-by.d.ts.map +1 -0
  217. package/dist/lib/server/api/routes/resolve-created-by.js +31 -0
  218. package/dist/lib/server/api/routes/resolve-created-by.js.map +1 -0
  219. package/dist/lib/server/index.d.ts +1 -0
  220. package/dist/lib/server/index.d.ts.map +1 -1
  221. package/dist/lib/server/index.js +1 -0
  222. package/dist/lib/server/index.js.map +1 -1
  223. package/dist/lib/services/version-service.d.ts +4 -4
  224. package/dist/lib/services/version-service.d.ts.map +1 -1
  225. package/dist/lib/services/version-service.js +15 -11
  226. package/dist/lib/services/version-service.js.map +1 -1
  227. package/dist/lib/type-gen.d.ts.map +1 -1
  228. package/dist/lib/type-gen.js +11 -0
  229. package/dist/lib/type-gen.js.map +1 -1
  230. package/dist/lib/types/agent-change-sets.d.ts +70 -0
  231. package/dist/lib/types/agent-change-sets.d.ts.map +1 -0
  232. package/dist/lib/types/agent-change-sets.js +7 -0
  233. package/dist/lib/types/agent-change-sets.js.map +1 -0
  234. package/dist/lib/types/agent-stream.d.ts +60 -0
  235. package/dist/lib/types/agent-stream.d.ts.map +1 -0
  236. package/dist/lib/types/agent-stream.js +12 -0
  237. package/dist/lib/types/agent-stream.js.map +1 -0
  238. package/dist/lib/types/agent-tools.d.ts +65 -0
  239. package/dist/lib/types/agent-tools.d.ts.map +1 -0
  240. package/dist/lib/types/agent-tools.js +2 -0
  241. package/dist/lib/types/agent-tools.js.map +1 -0
  242. package/dist/lib/types/config.d.ts +19 -0
  243. package/dist/lib/types/config.d.ts.map +1 -1
  244. package/dist/lib/types/document-workspace.d.ts +53 -0
  245. package/dist/lib/types/document-workspace.d.ts.map +1 -0
  246. package/dist/lib/types/document-workspace.js +15 -0
  247. package/dist/lib/types/document-workspace.js.map +1 -0
  248. package/dist/lib/types/document.d.ts +5 -0
  249. package/dist/lib/types/document.d.ts.map +1 -1
  250. package/dist/lib/types/index.d.ts +2 -0
  251. package/dist/lib/types/index.d.ts.map +1 -1
  252. package/dist/lib/types/index.js +2 -0
  253. package/dist/lib/types/index.js.map +1 -1
  254. package/dist/lib/types/schemas.js +1 -1
  255. package/dist/lib/types/schemas.js.map +1 -1
  256. package/dist/lib/utils/fetch-remote-file.d.ts +11 -0
  257. package/dist/lib/utils/fetch-remote-file.d.ts.map +1 -0
  258. package/dist/lib/utils/fetch-remote-file.js +169 -0
  259. package/dist/lib/utils/fetch-remote-file.js.map +1 -0
  260. package/dist/local-api/collection-api.d.ts +7 -2
  261. package/dist/local-api/collection-api.d.ts.map +1 -1
  262. package/dist/local-api/collection-api.js +17 -10
  263. package/dist/mcp/tools.d.ts +39 -4
  264. package/dist/mcp/tools.d.ts.map +1 -1
  265. package/dist/mcp/tools.js +546 -362
  266. package/dist/plugins/resolver.d.ts +8 -1
  267. package/dist/plugins/resolver.d.ts.map +1 -1
  268. package/dist/plugins/resolver.js +14 -1
  269. package/dist/plugins/types.d.ts +23 -2
  270. package/dist/plugins/types.d.ts.map +1 -1
  271. package/dist/preview/stega.d.ts +2 -2
  272. package/dist/preview/stega.d.ts.map +1 -1
  273. package/dist/preview/stega.js +52 -29
  274. package/dist/schema-utils/validator.d.ts.map +1 -1
  275. package/dist/schema-utils/validator.js +5 -2
  276. package/dist/server/api/index.d.ts.map +1 -1
  277. package/dist/server/api/index.js +8 -0
  278. package/dist/server/api/routes/agent-change-sets.d.ts +4 -0
  279. package/dist/server/api/routes/agent-change-sets.d.ts.map +1 -0
  280. package/dist/server/api/routes/agent-change-sets.js +131 -0
  281. package/dist/server/api/routes/agent-chat.d.ts +14 -0
  282. package/dist/server/api/routes/agent-chat.d.ts.map +1 -0
  283. package/dist/server/api/routes/agent-chat.js +223 -0
  284. package/dist/server/api/routes/document-versions.d.ts.map +1 -1
  285. package/dist/server/api/routes/document-versions.js +16 -2
  286. package/dist/server/api/routes/documents-by-id.d.ts.map +1 -1
  287. package/dist/server/api/routes/documents-by-id.js +11 -1
  288. package/dist/server/api/routes/documents-publish.d.ts.map +1 -1
  289. package/dist/server/api/routes/documents-publish.js +36 -3
  290. package/dist/server/api/routes/jobs.d.ts.map +1 -1
  291. package/dist/server/api/routes/jobs.js +4 -2
  292. package/dist/server/api/routes/resolve-created-by.d.ts +13 -0
  293. package/dist/server/api/routes/resolve-created-by.d.ts.map +1 -0
  294. package/dist/server/api/routes/resolve-created-by.js +30 -0
  295. package/dist/server/index.d.ts +1 -0
  296. package/dist/server/index.d.ts.map +1 -1
  297. package/dist/server/index.js +1 -0
  298. package/dist/services/version-service.d.ts +4 -4
  299. package/dist/services/version-service.d.ts.map +1 -1
  300. package/dist/services/version-service.js +15 -11
  301. package/dist/type-gen.d.ts.map +1 -1
  302. package/dist/type-gen.js +11 -0
  303. package/dist/types/agent-change-sets.d.ts +70 -0
  304. package/dist/types/agent-change-sets.d.ts.map +1 -0
  305. package/dist/types/agent-change-sets.js +6 -0
  306. package/dist/types/agent-stream.d.ts +60 -0
  307. package/dist/types/agent-stream.d.ts.map +1 -0
  308. package/dist/types/agent-stream.js +11 -0
  309. package/dist/types/agent-tools.d.ts +65 -0
  310. package/dist/types/agent-tools.d.ts.map +1 -0
  311. package/dist/types/agent-tools.js +1 -0
  312. package/dist/types/config.d.ts +19 -0
  313. package/dist/types/config.d.ts.map +1 -1
  314. package/dist/types/document-workspace.d.ts +53 -0
  315. package/dist/types/document-workspace.d.ts.map +1 -0
  316. package/dist/types/document-workspace.js +14 -0
  317. package/dist/types/document.d.ts +5 -0
  318. package/dist/types/document.d.ts.map +1 -1
  319. package/dist/types/index.d.ts +2 -0
  320. package/dist/types/index.d.ts.map +1 -1
  321. package/dist/types/index.js +2 -0
  322. package/dist/types/schemas.js +1 -1
  323. package/dist/utils/fetch-remote-file.d.ts +11 -0
  324. package/dist/utils/fetch-remote-file.d.ts.map +1 -0
  325. package/dist/utils/fetch-remote-file.js +168 -0
  326. package/package.json +5 -2
@@ -29,6 +29,7 @@
29
29
  import MediaBrowser from './admin/MediaBrowser.svelte';
30
30
  import ConfirmDialogHost from './admin/confirm-dialog/ConfirmDialogHost.svelte';
31
31
  import { documents, organizations } from '../api/index';
32
+ import { getCollectionVersion } from '../document-refresh.svelte';
32
33
  import {
33
34
  FileText,
34
35
  Ellipsis,
@@ -729,6 +730,27 @@
729
730
  }
730
731
  });
731
732
 
733
+ // Refetch the current list when a document of this type was created/updated/deleted
734
+ // elsewhere in the session — typically the agent chat, which has no UI of its own to keep
735
+ // this list in sync. See document-refresh.svelte.ts. Keyed per type (not a single scalar)
736
+ // so switching types doesn't cause a redundant fetch on top of the one the type-switch
737
+ // handler already does.
738
+ const lastSeenCollectionVersions = new Map<string, number>();
739
+ // Debounced — a bulk agent operation (e.g. "create 50 posts") fires one notify per document,
740
+ // each its own SSE round trip, so without this a refetch would fire 50 times in a row.
741
+ let collectionRefetchTimer: ReturnType<typeof setTimeout> | undefined;
742
+ $effect(() => {
743
+ if (!selectedDocumentType) return;
744
+ const docType = selectedDocumentType;
745
+ const version = getCollectionVersion(docType);
746
+ const lastSeen = lastSeenCollectionVersions.get(docType);
747
+ lastSeenCollectionVersions.set(docType, version);
748
+ if (lastSeen !== undefined && version !== lastSeen) {
749
+ clearTimeout(collectionRefetchTimer);
750
+ collectionRefetchTimer = setTimeout(() => fetchDocuments(docType), 300);
751
+ }
752
+ });
753
+
732
754
  async function navigateToDocumentType(docType: string) {
733
755
  if (activeTab.value !== 'structure') {
734
756
  handleTabChange('structure');
@@ -1602,12 +1624,23 @@
1602
1624
 
1603
1625
  <!-- Primary Editor Panel -->
1604
1626
  {#if primaryEditorState.visible}
1627
+ <!-- `overflow-y` is `auto` normally but `hidden` in presentation mode, and that
1628
+ is load-bearing rather than cosmetic. The stacked reference panel below is
1629
+ an `absolute inset-y-0` sibling inside this box, and for a *scroll
1630
+ container* the containing block of an absolute child is the padding box —
1631
+ the whole scrollable extent, not the visible height. With `auto` the panel
1632
+ therefore stretched to the scroll height and pinned its footer (Publish,
1633
+ Schedule, Unpublish) below the fold, so a referenced document opened in
1634
+ presentation mode looked like it had no publish controls at all; the bar
1635
+ visible at the bottom of the window was the base editor's showing through.
1636
+ Nothing is lost by disabling it here: in presentation mode DocumentEditor is
1637
+ `h-full overflow-hidden` and scrolls its own field column internally. -->
1605
1638
  <div
1606
1639
  class="relative transition-all duration-200 {windowWidth < 620
1607
1640
  ? 'w-screen'
1608
- : 'flex-1'} h-full overflow-x-hidden overflow-y-auto {primaryEditorState.expanded
1609
- ? ''
1610
- : 'hidden'}"
1641
+ : 'flex-1'} h-full overflow-x-hidden {presentationModeOn
1642
+ ? 'overflow-y-hidden'
1643
+ : 'overflow-y-auto'} {primaryEditorState.expanded ? '' : 'hidden'}"
1611
1644
  style={windowWidth >= 620 ? 'min-width: 0;' : ''}
1612
1645
  >
1613
1646
  <DocumentEditor
@@ -1620,6 +1653,7 @@
1620
1653
  onToggleFocus={toggleFocusMode}
1621
1654
  presentationMode={presentationModeOn}
1622
1655
  onTogglePresentation={togglePresentationMode}
1656
+ hideActionBar={presentationModeOn && editorStack.length > 0}
1623
1657
  refreshToken={baseRefreshToken}
1624
1658
  organizationId={currentOrgId}
1625
1659
  onBack={navigateBack}
@@ -1 +1 @@
1
- {"version":3,"file":"AdminApp.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/AdminApp.svelte.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAE1F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AA2BnE,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;IACjC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,eAAe,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;CAC7D;AAwlDF,QAAA,MAAM,QAAQ,0BAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"AdminApp.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/AdminApp.svelte.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAE1F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AA4BnE,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;IACjC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,eAAe,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;CAC7D;AA+mDF,QAAA,MAAM,QAAQ,0BAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
@@ -1,24 +1,51 @@
1
1
  <script lang="ts">
2
2
  // Read-only operational history for the durable spine — the queryability Sanity's old
3
3
  // out-of-dataset scheduling lacked. Jobs tab = scheduled/queued work and its outcome;
4
- // Events tab = the append-only domain-event log. Fetches GET /api/jobs and /api/events
5
- // (gated on document.read). No mutation controls replay/cancel can come later.
4
+ // Events tab = the append-only domain-event log; Agent Changes tab = the AI assistant's
5
+ // audit/undo trail (GET /api/agent/change-sets, gated on document.read like the others
6
+ // undo itself is the one mutation here, gated separately on document.update server-side).
6
7
  import { onMount } from 'svelte';
7
8
  import { Button } from '@aphexcms/ui/shadcn/button';
8
9
  import { Badge } from '@aphexcms/ui/shadcn/badge';
9
- import { RefreshCw, CalendarClock, Radio } from '@lucide/svelte';
10
+ import { RefreshCw, CalendarClock, Radio, Sparkles, Undo2, ChevronDown } from '@lucide/svelte';
11
+ import { toast } from 'svelte-sonner';
10
12
  import { apiClient } from '../../api/client';
11
13
  import type { Job, DomainEvent, JobStatus } from '../../types/events';
14
+ import type {
15
+ AgentChangeSet,
16
+ AgentChangeSetWithOperations,
17
+ AgentChangeSetStatus
18
+ } from '../../types/agent-change-sets';
12
19
 
13
- type Tab = 'jobs' | 'events';
20
+ // The server resolves `createdBy` (a raw user id) to a display name — see
21
+ // `resolve-created-by.ts`, shared by GET /api/events and GET /api/agent/change-sets.
22
+ type WithCreatedByName<T> = T & { createdByName: string | null };
23
+
24
+ type Tab = 'jobs' | 'events' | 'agent';
14
25
  let tab = $state<Tab>('jobs');
15
26
 
16
27
  let jobs = $state<Job[]>([]);
17
- let events = $state<DomainEvent[]>([]);
28
+ let events = $state<WithCreatedByName<DomainEvent>[]>([]);
29
+ let changeSets = $state<WithCreatedByName<AgentChangeSetWithOperations>[]>([]);
18
30
  let loading = $state(false);
19
31
  let error = $state<string | null>(null);
20
32
  let total = $state(0);
21
33
 
34
+ // Agent-changes tab: which row is expanded (fetches its operations lazily), and the
35
+ // per-change-set expanded detail + undo-in-flight state.
36
+ let expandedChangeSetId = $state<string | null>(null);
37
+ let expandedDetail = $state<WithCreatedByName<AgentChangeSetWithOperations> | null>(null);
38
+ let undoingId = $state<string | null>(null);
39
+
40
+ const changeSetStatusVariant: Record<
41
+ AgentChangeSetStatus,
42
+ 'default' | 'secondary' | 'destructive'
43
+ > = {
44
+ in_progress: 'secondary',
45
+ completed: 'default',
46
+ failed: 'destructive'
47
+ };
48
+
22
49
  const statuses: Array<JobStatus | 'all'> = [
23
50
  'all',
24
51
  'pending',
@@ -38,6 +65,24 @@
38
65
  cancelled: 'outline'
39
66
  };
40
67
 
68
+ // The row's headline: what the turn actually did, not who ran it (createdBy is secondary
69
+ // metadata, shown further along the row) — unique tool names in first-use order, e.g.
70
+ // "create_document" or "create_document, update_document". A pure Q&A turn (no operations)
71
+ // falls back to its truncated first message, since there's no action to name.
72
+ function changeSetHeadline(changeSet: AgentChangeSetWithOperations): string {
73
+ if (changeSet.operations.length === 0) {
74
+ return changeSet.summary ?? 'No document changes';
75
+ }
76
+ const seen = new Set<string>();
77
+ const names: string[] = [];
78
+ for (const op of changeSet.operations) {
79
+ if (seen.has(op.toolName)) continue;
80
+ seen.add(op.toolName);
81
+ names.push(op.toolName);
82
+ }
83
+ return names.join(', ');
84
+ }
85
+
41
86
  function fmt(d: string | Date | null | undefined): string {
42
87
  if (!d) return '—';
43
88
  const date = typeof d === 'string' ? new Date(d) : d;
@@ -58,14 +103,27 @@
58
103
  } else {
59
104
  error = res.error ?? 'Failed to load jobs';
60
105
  }
61
- } else {
62
- const res = await apiClient.get<DomainEvent[]>('/events', { limit: '100' });
106
+ } else if (tab === 'events') {
107
+ const res = await apiClient.get<WithCreatedByName<DomainEvent>[]>('/events', {
108
+ limit: '100'
109
+ });
63
110
  if (res.success) {
64
111
  events = res.data ?? [];
65
112
  total = res.pagination?.total ?? events.length;
66
113
  } else {
67
114
  error = res.error ?? 'Failed to load events';
68
115
  }
116
+ } else {
117
+ const res = await apiClient.get<WithCreatedByName<AgentChangeSetWithOperations>[]>(
118
+ '/agent/change-sets',
119
+ { limit: '100' }
120
+ );
121
+ if (res.success) {
122
+ changeSets = res.data ?? [];
123
+ total = res.pagination?.total ?? changeSets.length;
124
+ } else {
125
+ error = res.error ?? 'Failed to load agent changes';
126
+ }
69
127
  }
70
128
  } catch (err) {
71
129
  error = err instanceof Error ? err.message : 'Failed to load';
@@ -80,6 +138,57 @@
80
138
  load();
81
139
  }
82
140
 
141
+ async function toggleExpand(changeSet: AgentChangeSet) {
142
+ if (expandedChangeSetId === changeSet.id) {
143
+ expandedChangeSetId = null;
144
+ expandedDetail = null;
145
+ return;
146
+ }
147
+ expandedChangeSetId = changeSet.id;
148
+ expandedDetail = null;
149
+ const res = await apiClient.get<WithCreatedByName<AgentChangeSetWithOperations>>(
150
+ `/agent/change-sets/${changeSet.id}`
151
+ );
152
+ if (res.success && res.data) expandedDetail = res.data;
153
+ }
154
+
155
+ async function undoChangeSet(changeSet: AgentChangeSet) {
156
+ if (undoingId) return;
157
+ undoingId = changeSet.id;
158
+ try {
159
+ const res = await apiClient.post<{
160
+ results: Array<{
161
+ operationId: string;
162
+ documentId: string;
163
+ success: boolean;
164
+ error?: string;
165
+ }>;
166
+ }>(`/agent/change-sets/${changeSet.id}/undo`);
167
+ if (!res.success || !res.data) {
168
+ toast.error(res.error ?? 'Undo failed');
169
+ return;
170
+ }
171
+ const failed = res.data.results.filter((r) => !r.success);
172
+ if (failed.length === 0) {
173
+ toast.success('Undone — reverted document(s) to their prior version.');
174
+ } else {
175
+ toast.error(`${failed.length} operation(s) couldn't be undone (see console).`);
176
+ // eslint-disable-next-line no-console -- surfaced only when an undo partially fails
177
+ console.warn('[agent-changes] undo results:', failed);
178
+ }
179
+ // Refresh the expanded detail (if open) and the list so status/timestamps update.
180
+ if (expandedChangeSetId === changeSet.id) {
181
+ const detailRes = await apiClient.get<WithCreatedByName<AgentChangeSetWithOperations>>(
182
+ `/agent/change-sets/${changeSet.id}`
183
+ );
184
+ if (detailRes.success && detailRes.data) expandedDetail = detailRes.data;
185
+ }
186
+ await load();
187
+ } finally {
188
+ undoingId = null;
189
+ }
190
+ }
191
+
83
192
  // Reload jobs when the status filter changes (only relevant on the jobs tab).
84
193
  $effect(() => {
85
194
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- reactive dependency: re-run when statusFilter changes
@@ -94,7 +203,9 @@
94
203
  <div class="mb-4 flex items-center justify-between gap-3">
95
204
  <div>
96
205
  <h1 class="text-lg font-semibold">Activity</h1>
97
- <p class="text-muted-foreground text-sm">Scheduled jobs and the domain-event log.</p>
206
+ <p class="text-muted-foreground text-sm">
207
+ Scheduled jobs, the domain-event log, and the AI assistant's audit trail.
208
+ </p>
98
209
  </div>
99
210
  <Button variant="outline" size="sm" onclick={load} disabled={loading} class="gap-1.5">
100
211
  <RefreshCw class="h-3.5 w-3.5 {loading ? 'animate-spin' : ''}" /> Refresh
@@ -121,6 +232,15 @@
121
232
  >
122
233
  <Radio class="h-3.5 w-3.5" /> Events
123
234
  </button>
235
+ <button
236
+ class="flex items-center gap-1.5 border-b-2 px-3 py-2 text-sm transition-colors {tab ===
237
+ 'agent'
238
+ ? 'border-primary text-foreground'
239
+ : 'text-muted-foreground hover:text-foreground border-transparent'}"
240
+ onclick={() => switchTab('agent')}
241
+ >
242
+ <Sparkles class="h-3.5 w-3.5" /> Agent Changes
243
+ </button>
124
244
  </div>
125
245
 
126
246
  {#if tab === 'jobs'}
@@ -145,7 +265,7 @@
145
265
  >
146
266
  {error}
147
267
  </div>
148
- {:else if loading && jobs.length === 0 && events.length === 0}
268
+ {:else if loading && jobs.length === 0 && events.length === 0 && changeSets.length === 0}
149
269
  <div class="text-muted-foreground p-8 text-center text-sm">Loading…</div>
150
270
  {:else if tab === 'jobs'}
151
271
  {#if jobs.length === 0}
@@ -188,40 +308,129 @@
188
308
  </div>
189
309
  <p class="text-muted-foreground mt-2 text-xs">Showing {jobs.length} of {total}.</p>
190
310
  {/if}
191
- {:else if events.length === 0}
192
- <div class="text-muted-foreground p-8 text-center text-sm">No events.</div>
193
- {:else}
194
- <div class="border-rule overflow-x-auto rounded-md border">
195
- <table class="w-full text-sm">
196
- <thead class="bg-muted/50 text-muted-foreground text-xs">
197
- <tr>
198
- <th class="px-3 py-2 text-left font-medium">Type</th>
199
- <th class="px-3 py-2 text-left font-medium">Payload</th>
200
- <th class="px-3 py-2 text-left font-medium">By</th>
201
- <th class="px-3 py-2 text-left font-medium">When</th>
202
- </tr>
203
- </thead>
204
- <tbody>
205
- {#each events as event (event.id)}
206
- <tr class="border-rule border-t">
207
- <td class="px-3 py-2 font-mono text-xs">{event.type}</td>
208
- <td
209
- class="text-muted-foreground max-w-[320px] truncate px-3 py-2 font-mono text-xs"
210
- title={JSON.stringify(event.payload)}
211
- >
212
- {JSON.stringify(event.payload)}
213
- </td>
214
- <td class="text-muted-foreground px-3 py-2 font-mono text-xs"
215
- >{event.createdBy ?? '—'}</td
216
- >
217
- <td class="text-muted-foreground px-3 py-2 whitespace-nowrap"
218
- >{fmt(event.createdAt)}</td
219
- >
311
+ {:else if tab === 'events'}
312
+ {#if events.length === 0}
313
+ <div class="text-muted-foreground p-8 text-center text-sm">No events.</div>
314
+ {:else}
315
+ <div class="border-rule overflow-x-auto rounded-md border">
316
+ <table class="w-full text-sm">
317
+ <thead class="bg-muted/50 text-muted-foreground text-xs">
318
+ <tr>
319
+ <th class="px-3 py-2 text-left font-medium">Type</th>
320
+ <th class="px-3 py-2 text-left font-medium">Payload</th>
321
+ <th class="px-3 py-2 text-left font-medium">By</th>
322
+ <th class="px-3 py-2 text-left font-medium">When</th>
220
323
  </tr>
221
- {/each}
222
- </tbody>
223
- </table>
324
+ </thead>
325
+ <tbody>
326
+ {#each events as event (event.id)}
327
+ <tr class="border-rule border-t">
328
+ <td class="px-3 py-2 font-mono text-xs">{event.type}</td>
329
+ <td
330
+ class="text-muted-foreground max-w-[320px] truncate px-3 py-2 font-mono text-xs"
331
+ title={JSON.stringify(event.payload)}
332
+ >
333
+ {JSON.stringify(event.payload)}
334
+ </td>
335
+ <td class="text-muted-foreground px-3 py-2 font-mono text-xs"
336
+ >{event.createdByName ?? event.createdBy ?? '—'}</td
337
+ >
338
+ <td class="text-muted-foreground px-3 py-2 whitespace-nowrap"
339
+ >{fmt(event.createdAt)}</td
340
+ >
341
+ </tr>
342
+ {/each}
343
+ </tbody>
344
+ </table>
345
+ </div>
346
+ <p class="text-muted-foreground mt-2 text-xs">Showing {events.length} of {total}.</p>
347
+ {/if}
348
+ {:else if changeSets.length === 0}
349
+ <div class="text-muted-foreground p-8 text-center text-sm">No agent activity yet.</div>
350
+ {:else}
351
+ <div class="flex flex-col gap-2">
352
+ {#each changeSets as changeSet (changeSet.id)}
353
+ <div class="border-rule rounded-md border">
354
+ <Button
355
+ variant="ghost"
356
+ class="h-auto w-full items-center justify-start gap-3 rounded-b-none px-3 py-2.5 text-left text-sm font-normal"
357
+ onclick={() => toggleExpand(changeSet)}
358
+ >
359
+ <ChevronDown
360
+ class="text-muted-foreground h-3.5 w-3.5 shrink-0 transition-transform {expandedChangeSetId ===
361
+ changeSet.id
362
+ ? 'rotate-180'
363
+ : ''}"
364
+ />
365
+ <span class="min-w-0 flex-1 truncate font-mono">{changeSetHeadline(changeSet)}</span>
366
+ <Badge variant={changeSetStatusVariant[changeSet.status]} class="capitalize"
367
+ >{changeSet.status.replace('_', ' ')}</Badge
368
+ >
369
+ <span class="text-muted-foreground hidden shrink-0 text-xs sm:inline"
370
+ >{changeSet.createdByName ?? changeSet.createdBy ?? 'Unknown'}</span
371
+ >
372
+ <span class="text-muted-foreground hidden shrink-0 font-mono text-xs sm:inline"
373
+ >{changeSet.provider}/{changeSet.model}</span
374
+ >
375
+ <span
376
+ class="text-muted-foreground hidden shrink-0 font-mono text-xs sm:inline"
377
+ title="{changeSet.promptTokens} input tokens, {changeSet.completionTokens} output tokens"
378
+ >{changeSet.promptTokens.toLocaleString()} in / {changeSet.completionTokens.toLocaleString()}
379
+ out</span
380
+ >
381
+ <span class="text-muted-foreground shrink-0 text-xs whitespace-nowrap"
382
+ >{fmt(changeSet.createdAt)}</span
383
+ >
384
+ </Button>
385
+
386
+ {#if expandedChangeSetId === changeSet.id}
387
+ <div class="border-rule border-t p-3">
388
+ {#if !expandedDetail}
389
+ <p class="text-muted-foreground text-xs">Loading…</p>
390
+ {:else}
391
+ {#if expandedDetail.summary}
392
+ <p class="text-muted-foreground mb-3 border-l-2 pl-2 text-xs italic">
393
+ “{expandedDetail.summary}”
394
+ </p>
395
+ {/if}
396
+ {#if expandedDetail.operations.length === 0}
397
+ <p class="text-muted-foreground text-xs">
398
+ No document changes — a read-only conversation.
399
+ </p>
400
+ {:else}
401
+ <div class="flex flex-col gap-1.5">
402
+ {#each expandedDetail.operations as op (op.id)}
403
+ <div class="flex items-center gap-2 font-mono text-xs">
404
+ <Badge variant={op.success ? 'default' : 'destructive'} class="shrink-0"
405
+ >{op.success ? 'ok' : 'error'}</Badge
406
+ >
407
+ <span>{op.toolName}</span>
408
+ <span class="text-muted-foreground">{op.collection}/{op.documentId}</span>
409
+ {#if op.error}
410
+ <span class="text-destructive truncate">{op.error}</span>
411
+ {/if}
412
+ </div>
413
+ {/each}
414
+ </div>
415
+ {#if expandedDetail.operations.some((op) => op.success && op.versionBefore !== null)}
416
+ <Button
417
+ variant="outline"
418
+ size="sm"
419
+ class="mt-3 gap-1.5"
420
+ disabled={undoingId === changeSet.id}
421
+ onclick={() => undoChangeSet(changeSet)}
422
+ >
423
+ <Undo2 class="h-3.5 w-3.5" />
424
+ {undoingId === changeSet.id ? 'Undoing…' : 'Undo this turn'}
425
+ </Button>
426
+ {/if}
427
+ {/if}
428
+ {/if}
429
+ </div>
430
+ {/if}
431
+ </div>
432
+ {/each}
224
433
  </div>
225
- <p class="text-muted-foreground mt-2 text-xs">Showing {events.length} of {total}.</p>
434
+ <p class="text-muted-foreground mt-2 text-xs">Showing {changeSets.length} of {total}.</p>
226
435
  {/if}
227
436
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityView.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/ActivityView.svelte.ts"],"names":[],"mappings":"AA6NA,QAAA,MAAM,YAAY,2DAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ActivityView.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/ActivityView.svelte.ts"],"names":[],"mappings":"AAoZA,QAAA,MAAM,YAAY,2DAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}