@aphexcms/cms-core 9.7.0 → 9.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) 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/references-service.d.ts +1 -1
  224. package/dist/lib/services/references-service.d.ts.map +1 -1
  225. package/dist/lib/services/version-service.d.ts +4 -4
  226. package/dist/lib/services/version-service.d.ts.map +1 -1
  227. package/dist/lib/services/version-service.js +15 -11
  228. package/dist/lib/services/version-service.js.map +1 -1
  229. package/dist/lib/type-gen.d.ts.map +1 -1
  230. package/dist/lib/type-gen.js +11 -0
  231. package/dist/lib/type-gen.js.map +1 -1
  232. package/dist/lib/types/agent-change-sets.d.ts +70 -0
  233. package/dist/lib/types/agent-change-sets.d.ts.map +1 -0
  234. package/dist/lib/types/agent-change-sets.js +7 -0
  235. package/dist/lib/types/agent-change-sets.js.map +1 -0
  236. package/dist/lib/types/agent-stream.d.ts +60 -0
  237. package/dist/lib/types/agent-stream.d.ts.map +1 -0
  238. package/dist/lib/types/agent-stream.js +12 -0
  239. package/dist/lib/types/agent-stream.js.map +1 -0
  240. package/dist/lib/types/agent-tools.d.ts +65 -0
  241. package/dist/lib/types/agent-tools.d.ts.map +1 -0
  242. package/dist/lib/types/agent-tools.js +2 -0
  243. package/dist/lib/types/agent-tools.js.map +1 -0
  244. package/dist/lib/types/config.d.ts +19 -0
  245. package/dist/lib/types/config.d.ts.map +1 -1
  246. package/dist/lib/types/document-workspace.d.ts +53 -0
  247. package/dist/lib/types/document-workspace.d.ts.map +1 -0
  248. package/dist/lib/types/document-workspace.js +15 -0
  249. package/dist/lib/types/document-workspace.js.map +1 -0
  250. package/dist/lib/types/document.d.ts +5 -0
  251. package/dist/lib/types/document.d.ts.map +1 -1
  252. package/dist/lib/types/index.d.ts +2 -0
  253. package/dist/lib/types/index.d.ts.map +1 -1
  254. package/dist/lib/types/index.js +2 -0
  255. package/dist/lib/types/index.js.map +1 -1
  256. package/dist/lib/types/schemas.js +1 -1
  257. package/dist/lib/types/schemas.js.map +1 -1
  258. package/dist/lib/utils/fetch-remote-file.d.ts +11 -0
  259. package/dist/lib/utils/fetch-remote-file.d.ts.map +1 -0
  260. package/dist/lib/utils/fetch-remote-file.js +169 -0
  261. package/dist/lib/utils/fetch-remote-file.js.map +1 -0
  262. package/dist/local-api/collection-api.d.ts +7 -2
  263. package/dist/local-api/collection-api.d.ts.map +1 -1
  264. package/dist/local-api/collection-api.js +17 -10
  265. package/dist/mcp/tools.d.ts +39 -4
  266. package/dist/mcp/tools.d.ts.map +1 -1
  267. package/dist/mcp/tools.js +546 -362
  268. package/dist/plugins/resolver.d.ts +8 -1
  269. package/dist/plugins/resolver.d.ts.map +1 -1
  270. package/dist/plugins/resolver.js +14 -1
  271. package/dist/plugins/types.d.ts +23 -2
  272. package/dist/plugins/types.d.ts.map +1 -1
  273. package/dist/preview/stega.d.ts +2 -2
  274. package/dist/preview/stega.d.ts.map +1 -1
  275. package/dist/preview/stega.js +52 -29
  276. package/dist/schema-utils/validator.d.ts.map +1 -1
  277. package/dist/schema-utils/validator.js +5 -2
  278. package/dist/server/api/index.d.ts.map +1 -1
  279. package/dist/server/api/index.js +8 -0
  280. package/dist/server/api/routes/agent-change-sets.d.ts +4 -0
  281. package/dist/server/api/routes/agent-change-sets.d.ts.map +1 -0
  282. package/dist/server/api/routes/agent-change-sets.js +131 -0
  283. package/dist/server/api/routes/agent-chat.d.ts +14 -0
  284. package/dist/server/api/routes/agent-chat.d.ts.map +1 -0
  285. package/dist/server/api/routes/agent-chat.js +223 -0
  286. package/dist/server/api/routes/document-versions.d.ts.map +1 -1
  287. package/dist/server/api/routes/document-versions.js +16 -2
  288. package/dist/server/api/routes/documents-by-id.d.ts.map +1 -1
  289. package/dist/server/api/routes/documents-by-id.js +11 -1
  290. package/dist/server/api/routes/documents-publish.d.ts.map +1 -1
  291. package/dist/server/api/routes/documents-publish.js +36 -3
  292. package/dist/server/api/routes/jobs.d.ts.map +1 -1
  293. package/dist/server/api/routes/jobs.js +4 -2
  294. package/dist/server/api/routes/resolve-created-by.d.ts +13 -0
  295. package/dist/server/api/routes/resolve-created-by.d.ts.map +1 -0
  296. package/dist/server/api/routes/resolve-created-by.js +30 -0
  297. package/dist/server/index.d.ts +1 -0
  298. package/dist/server/index.d.ts.map +1 -1
  299. package/dist/server/index.js +1 -0
  300. package/dist/services/references-service.d.ts +1 -1
  301. package/dist/services/references-service.d.ts.map +1 -1
  302. package/dist/services/version-service.d.ts +4 -4
  303. package/dist/services/version-service.d.ts.map +1 -1
  304. package/dist/services/version-service.js +15 -11
  305. package/dist/type-gen.d.ts.map +1 -1
  306. package/dist/type-gen.js +11 -0
  307. package/dist/types/agent-change-sets.d.ts +70 -0
  308. package/dist/types/agent-change-sets.d.ts.map +1 -0
  309. package/dist/types/agent-change-sets.js +6 -0
  310. package/dist/types/agent-stream.d.ts +60 -0
  311. package/dist/types/agent-stream.d.ts.map +1 -0
  312. package/dist/types/agent-stream.js +11 -0
  313. package/dist/types/agent-tools.d.ts +65 -0
  314. package/dist/types/agent-tools.d.ts.map +1 -0
  315. package/dist/types/agent-tools.js +1 -0
  316. package/dist/types/config.d.ts +19 -0
  317. package/dist/types/config.d.ts.map +1 -1
  318. package/dist/types/document-workspace.d.ts +53 -0
  319. package/dist/types/document-workspace.d.ts.map +1 -0
  320. package/dist/types/document-workspace.js +14 -0
  321. package/dist/types/document.d.ts +5 -0
  322. package/dist/types/document.d.ts.map +1 -1
  323. package/dist/types/index.d.ts +2 -0
  324. package/dist/types/index.d.ts.map +1 -1
  325. package/dist/types/index.js +2 -0
  326. package/dist/types/schemas.js +1 -1
  327. package/dist/utils/fetch-remote-file.d.ts +11 -0
  328. package/dist/utils/fetch-remote-file.d.ts.map +1 -0
  329. package/dist/utils/fetch-remote-file.js +168 -0
  330. package/package.json +5 -2
@@ -1,5 +1,10 @@
1
1
  import type { ApiResponse } from './types.js';
2
2
  import type { DocumentDTO, ListDocumentsQuery, CreateDocumentRequest, UpdateDocumentRequest, DocumentVersion, ListVersionsQuery } from './schemas/documents.js';
3
+ /** Shared CAS-guard option accepted by publish/unpublish/restore. */
4
+ export interface RevisionGuardOptions {
5
+ /** The revision last read from `_meta.revision`. Omit to skip the check. */
6
+ expectedRevision?: number;
7
+ }
3
8
  export type DocumentListParams = ListDocumentsQuery;
4
9
  export declare class DocumentsApi {
5
10
  /**
@@ -41,11 +46,11 @@ export declare class DocumentsApi {
41
46
  /**
42
47
  * Publish document (copy draft -> published)
43
48
  */
44
- static publish(id: string): Promise<ApiResponse<DocumentDTO>>;
49
+ static publish(id: string, options?: RevisionGuardOptions): Promise<ApiResponse<DocumentDTO>>;
45
50
  /**
46
51
  * Unpublish document (revert to draft only)
47
52
  */
48
- static unpublish(id: string): Promise<ApiResponse<DocumentDTO>>;
53
+ static unpublish(id: string, options?: RevisionGuardOptions): Promise<ApiResponse<DocumentDTO>>;
49
54
  /**
50
55
  * Schedule a publish/unpublish for a future time (ISO-8601 `runAt`).
51
56
  * Enqueues a job the worker runs at that time — the permission check happens now.
@@ -98,7 +103,7 @@ export declare class DocumentsApi {
98
103
  /**
99
104
  * Restore a version to draft
100
105
  */
101
- static restoreVersion(id: string, versionNumber: number): Promise<ApiResponse<DocumentDTO>>;
106
+ static restoreVersion(id: string, versionNumber: number, options?: RevisionGuardOptions): Promise<ApiResponse<DocumentDTO>>;
102
107
  }
103
108
  export declare const documents: {
104
109
  list: typeof DocumentsApi.list;
@@ -1 +1 @@
1
- {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/lib/api/documents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/lib/api/documents.ts"],"names":[],"mappings":"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"}
@@ -55,14 +55,14 @@ export class DocumentsApi {
55
55
  /**
56
56
  * Publish document (copy draft -> published)
57
57
  */
58
- static async publish(id) {
59
- return apiClient.post(`/documents/${id}/publish`);
58
+ static async publish(id, options) {
59
+ return apiClient.post(`/documents/${id}/publish`, options);
60
60
  }
61
61
  /**
62
62
  * Unpublish document (revert to draft only)
63
63
  */
64
- static async unpublish(id) {
65
- return apiClient.delete(`/documents/${id}/publish`);
64
+ static async unpublish(id, options) {
65
+ return apiClient.delete(`/documents/${id}/publish`, options);
66
66
  }
67
67
  /**
68
68
  * Schedule a publish/unpublish for a future time (ISO-8601 `runAt`).
@@ -118,8 +118,8 @@ export class DocumentsApi {
118
118
  /**
119
119
  * Restore a version to draft
120
120
  */
121
- static async restoreVersion(id, versionNumber) {
122
- return apiClient.post(`/documents/${id}/versions/${versionNumber}/restore`);
121
+ static async restoreVersion(id, versionNumber, options) {
122
+ return apiClient.post(`/documents/${id}/versions/${versionNumber}/restore`, options);
123
123
  }
124
124
  }
125
125
  // Export convenience functions for direct use
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ export declare const agentChatMessageSchema: z.ZodObject<{
3
+ role: z.ZodEnum<{
4
+ system: "system";
5
+ user: "user";
6
+ assistant: "assistant";
7
+ tool: "tool";
8
+ }>;
9
+ content: z.ZodString;
10
+ toolCalls: z.ZodOptional<z.ZodArray<z.ZodObject<{
11
+ id: z.ZodString;
12
+ name: z.ZodString;
13
+ arguments: z.ZodRecord<z.ZodString, z.ZodUnknown>;
14
+ }, z.core.$strip>>>;
15
+ toolCallId: z.ZodOptional<z.ZodString>;
16
+ }, z.core.$strip>;
17
+ export declare const agentChatRequest: z.ZodObject<{
18
+ messages: z.ZodArray<z.ZodObject<{
19
+ role: z.ZodEnum<{
20
+ system: "system";
21
+ user: "user";
22
+ assistant: "assistant";
23
+ tool: "tool";
24
+ }>;
25
+ content: z.ZodString;
26
+ toolCalls: z.ZodOptional<z.ZodArray<z.ZodObject<{
27
+ id: z.ZodString;
28
+ name: z.ZodString;
29
+ arguments: z.ZodRecord<z.ZodString, z.ZodUnknown>;
30
+ }, z.core.$strip>>>;
31
+ toolCallId: z.ZodOptional<z.ZodString>;
32
+ }, z.core.$strip>>;
33
+ model: z.ZodOptional<z.ZodString>;
34
+ documentContext: z.ZodOptional<z.ZodObject<{
35
+ collection: z.ZodString;
36
+ id: z.ZodString;
37
+ }, z.core.$strip>>;
38
+ changeSetId: z.ZodOptional<z.ZodString>;
39
+ priorUsage: z.ZodOptional<z.ZodObject<{
40
+ promptTokens: z.ZodNumber;
41
+ completionTokens: z.ZodNumber;
42
+ }, z.core.$strip>>;
43
+ }, z.core.$strip>;
44
+ export type AgentChatRequest = z.infer<typeof agentChatRequest>;
45
+ //# sourceMappingURL=agent-chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/agent-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;iBAajC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAe3B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ // The wire shape of one `AIMessage` the browser sends up — a subset of the full
3
+ // `AIMessage` interface (ai/interfaces/ai-provider.ts) validated at the HTTP boundary.
4
+ // `role: 'tool'`/assistant `toolCalls` round-trip through here because the browser is
5
+ // expected to replay the running conversation (including prior tool turns) on each
6
+ // request — this endpoint is stateless per call, not a persisted session (conversation
7
+ // persistence is a separate, not-yet-built piece).
8
+ export const agentChatMessageSchema = z.object({
9
+ role: z.enum(['system', 'user', 'assistant', 'tool']),
10
+ content: z.string(),
11
+ toolCalls: z
12
+ .array(z.object({
13
+ id: z.string(),
14
+ name: z.string(),
15
+ arguments: z.record(z.string(), z.unknown())
16
+ }))
17
+ .optional(),
18
+ toolCallId: z.string().optional()
19
+ });
20
+ export const agentChatRequest = z.object({
21
+ messages: z.array(agentChatMessageSchema).min(1),
22
+ /** Optional override of the instance's configured default model. */
23
+ model: z.string().optional(),
24
+ /** Present when the caller has a live document editor tab open — gates the
25
+ * `content_patch_fields`/`content_save_draft` workspace-bridge tools into the resolved
26
+ * tool list (see `mcp/tools.ts`'s `resolveAgentTools`). */
27
+ documentContext: z.object({ collection: z.string(), id: z.string() }).optional(),
28
+ /** Echoes back the change-set row created on the first leg of a turn that got paused for
29
+ * a workspace tool, so a resume request records against the same row instead of creating
30
+ * a new one per leg. */
31
+ changeSetId: z.string().optional(),
32
+ /** Token usage accumulated across a paused turn's earlier legs, summed with this leg's
33
+ * usage when the change-set is finally completed. */
34
+ priorUsage: z.object({ promptTokens: z.number(), completionTokens: z.number() }).optional()
35
+ });
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ export declare const recordWorkspaceOperationRequest: z.ZodObject<{
3
+ changeSetId: z.ZodString;
4
+ toolName: z.ZodString;
5
+ collection: z.ZodString;
6
+ id: z.ZodString;
7
+ success: z.ZodBoolean;
8
+ error: z.ZodOptional<z.ZodString>;
9
+ arguments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
10
+ data: z.ZodOptional<z.ZodUnknown>;
11
+ }, z.core.$strip>;
12
+ export type RecordWorkspaceOperationRequest = z.infer<typeof recordWorkspaceOperationRequest>;
13
+ //# sourceMappingURL=agent-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-operations.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/agent-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,+BAA+B;;;;;;;;;iBAS1C,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ // Request body for POST /api/agent/operations — see server/api/routes/agent-chat.ts. Records
3
+ // an audit row for a workspace-bridge tool (`content_patch_fields`/`content_save_draft`) that
4
+ // the client resolved locally against a live `DocumentWorkspace`, since the server-side
5
+ // `recordMutatingOperation` call inside `/chat`'s SSE loop never sees those results.
6
+ export const recordWorkspaceOperationRequest = z.object({
7
+ changeSetId: z.string(),
8
+ toolName: z.string(),
9
+ collection: z.string(),
10
+ id: z.string(),
11
+ success: z.boolean(),
12
+ error: z.string().optional(),
13
+ arguments: z.record(z.string(), z.unknown()).default({}),
14
+ data: z.unknown().optional()
15
+ });
@@ -10,6 +10,7 @@ export declare const documentMetaSchema: z.ZodObject<{
10
10
  createdAt: z.ZodOptional<z.ZodString>;
11
11
  publishedHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12
12
  draftHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13
+ revision: z.ZodOptional<z.ZodNumber>;
13
14
  }, z.core.$loose>;
14
15
  export declare const documentSchema: z.ZodObject<{
15
16
  id: z.ZodString;
@@ -27,6 +28,7 @@ export declare const documentSchema: z.ZodObject<{
27
28
  createdAt: z.ZodOptional<z.ZodString>;
28
29
  publishedHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
29
30
  draftHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
31
+ revision: z.ZodOptional<z.ZodNumber>;
30
32
  }, z.core.$loose>>;
31
33
  }, z.core.$loose>;
32
34
  export declare const paginationMetaSchema: z.ZodObject<{
@@ -73,6 +75,7 @@ export declare const listDocumentsResponse: z.ZodObject<{
73
75
  createdAt: z.ZodOptional<z.ZodString>;
74
76
  publishedHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
75
77
  draftHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
78
+ revision: z.ZodOptional<z.ZodNumber>;
76
79
  }, z.core.$loose>>;
77
80
  }, z.core.$loose>>;
78
81
  pagination: z.ZodObject<{
@@ -111,6 +114,7 @@ export declare const createDocumentResponse: z.ZodObject<{
111
114
  createdAt: z.ZodOptional<z.ZodString>;
112
115
  publishedHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
113
116
  draftHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
117
+ revision: z.ZodOptional<z.ZodNumber>;
114
118
  }, z.core.$loose>>;
115
119
  }, z.core.$loose>;
116
120
  validation: z.ZodOptional<z.ZodUnknown>;
@@ -133,6 +137,7 @@ export declare const getDocumentResponse: z.ZodObject<{
133
137
  createdAt: z.ZodOptional<z.ZodString>;
134
138
  publishedHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
135
139
  draftHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
140
+ revision: z.ZodOptional<z.ZodNumber>;
136
141
  }, z.core.$loose>>;
137
142
  }, z.core.$loose>;
138
143
  }, z.core.$strip>;
@@ -140,6 +145,7 @@ export declare const updateDocumentRequest: z.ZodObject<{
140
145
  draftData: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
141
146
  data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
142
147
  publish: z.ZodOptional<z.ZodBoolean>;
148
+ expectedRevision: z.ZodOptional<z.ZodNumber>;
143
149
  }, z.core.$strip>;
144
150
  export declare const updateDocumentResponse: z.ZodObject<{
145
151
  success: z.ZodLiteral<true>;
@@ -159,6 +165,7 @@ export declare const updateDocumentResponse: z.ZodObject<{
159
165
  createdAt: z.ZodOptional<z.ZodString>;
160
166
  publishedHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
161
167
  draftHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
168
+ revision: z.ZodOptional<z.ZodNumber>;
162
169
  }, z.core.$loose>>;
163
170
  }, z.core.$loose>;
164
171
  validation: z.ZodOptional<z.ZodUnknown>;
@@ -167,6 +174,9 @@ export declare const deleteDocumentResponse: z.ZodObject<{
167
174
  success: z.ZodLiteral<true>;
168
175
  message: z.ZodOptional<z.ZodString>;
169
176
  }, z.core.$strip>;
177
+ export declare const publishDocumentRequest: z.ZodObject<{
178
+ expectedRevision: z.ZodOptional<z.ZodNumber>;
179
+ }, z.core.$strip>;
170
180
  export declare const publishDocumentResponse: z.ZodObject<{
171
181
  success: z.ZodLiteral<true>;
172
182
  data: z.ZodObject<{
@@ -185,10 +195,14 @@ export declare const publishDocumentResponse: z.ZodObject<{
185
195
  createdAt: z.ZodOptional<z.ZodString>;
186
196
  publishedHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
187
197
  draftHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
198
+ revision: z.ZodOptional<z.ZodNumber>;
188
199
  }, z.core.$loose>>;
189
200
  }, z.core.$loose>;
190
201
  message: z.ZodOptional<z.ZodString>;
191
202
  }, z.core.$strip>;
203
+ export declare const unpublishDocumentRequest: z.ZodObject<{
204
+ expectedRevision: z.ZodOptional<z.ZodNumber>;
205
+ }, z.core.$strip>;
192
206
  export declare const unpublishDocumentResponse: z.ZodObject<{
193
207
  success: z.ZodLiteral<true>;
194
208
  data: z.ZodObject<{
@@ -207,6 +221,7 @@ export declare const unpublishDocumentResponse: z.ZodObject<{
207
221
  createdAt: z.ZodOptional<z.ZodString>;
208
222
  publishedHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
209
223
  draftHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
224
+ revision: z.ZodOptional<z.ZodNumber>;
210
225
  }, z.core.$loose>>;
211
226
  }, z.core.$loose>;
212
227
  message: z.ZodOptional<z.ZodString>;
@@ -284,6 +299,9 @@ export declare const getVersionResponse: z.ZodObject<{
284
299
  createdAt: z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodDate]>>;
285
300
  }, z.core.$loose>;
286
301
  }, z.core.$strip>;
302
+ export declare const restoreVersionRequest: z.ZodObject<{
303
+ expectedRevision: z.ZodOptional<z.ZodNumber>;
304
+ }, z.core.$strip>;
287
305
  export declare const restoreVersionResponse: z.ZodObject<{
288
306
  success: z.ZodLiteral<true>;
289
307
  data: z.ZodObject<{
@@ -302,6 +320,7 @@ export declare const restoreVersionResponse: z.ZodObject<{
302
320
  createdAt: z.ZodOptional<z.ZodString>;
303
321
  publishedHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
304
322
  draftHash: z.ZodOptional<z.ZodNullable<z.ZodString>>;
323
+ revision: z.ZodOptional<z.ZodNumber>;
305
324
  }, z.core.$loose>>;
306
325
  }, z.core.$loose>;
307
326
  message: z.ZodOptional<z.ZodString>;
@@ -333,7 +352,9 @@ export type GetDocumentResponse = z.infer<typeof getDocumentResponse>;
333
352
  export type UpdateDocumentRequest = z.infer<typeof updateDocumentRequest>;
334
353
  export type UpdateDocumentResponse = z.infer<typeof updateDocumentResponse>;
335
354
  export type DeleteDocumentResponse = z.infer<typeof deleteDocumentResponse>;
355
+ export type PublishDocumentRequest = z.infer<typeof publishDocumentRequest>;
336
356
  export type PublishDocumentResponse = z.infer<typeof publishDocumentResponse>;
357
+ export type UnpublishDocumentRequest = z.infer<typeof unpublishDocumentRequest>;
337
358
  export type UnpublishDocumentResponse = z.infer<typeof unpublishDocumentResponse>;
338
359
  export type ScheduleDocumentRequest = z.infer<typeof scheduleDocumentRequest>;
339
360
  export type ScheduleDocumentResponse = z.infer<typeof scheduleDocumentResponse>;
@@ -341,5 +362,6 @@ export type DocumentVersion = z.infer<typeof documentVersionSchema>;
341
362
  export type ListVersionsQuery = z.input<typeof listVersionsQuery>;
342
363
  export type ListVersionsResponse = z.infer<typeof listVersionsResponse>;
343
364
  export type GetVersionResponse = z.infer<typeof getVersionResponse>;
365
+ export type RestoreVersionRequest = z.infer<typeof restoreVersionRequest>;
344
366
  export type RestoreVersionResponse = z.infer<typeof restoreVersionResponse>;
345
367
  //# sourceMappingURL=documents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/documents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/documents.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,11 @@ export const documentMetaSchema = z
8
8
  updatedAt: z.string().optional(),
9
9
  createdAt: z.string().optional(),
10
10
  publishedHash: z.string().nullable().optional(),
11
- draftHash: z.string().nullable().optional()
11
+ draftHash: z.string().nullable().optional(),
12
+ // CAS guard — echo back as `expectedRevision` on the next write so a stale
13
+ // save (second tab, an agent) surfaces as a conflict instead of silently
14
+ // overwriting a change made after this read.
15
+ revision: z.number().optional()
12
16
  })
13
17
  .passthrough();
14
18
  export const documentSchema = z
@@ -87,7 +91,10 @@ export const updateDocumentRequest = z
87
91
  .object({
88
92
  draftData: jsonRecord.optional(),
89
93
  data: jsonRecord.optional(),
90
- publish: z.boolean().optional()
94
+ publish: z.boolean().optional(),
95
+ // Compare-and-swap guard: the revision the caller last read (from
96
+ // `_meta.revision`). Omit to skip the check (last-write-wins).
97
+ expectedRevision: z.number().optional()
91
98
  })
92
99
  .refine((v) => v.draftData !== undefined || v.data !== undefined, {
93
100
  message: 'Either draftData or data is required'
@@ -103,12 +110,20 @@ export const deleteDocumentResponse = z.object({
103
110
  message: z.string().optional()
104
111
  });
105
112
  // ---------- POST /documents/[id]/publish ----------
113
+ // Body is optional (a bare POST with no body is still valid) — only carries
114
+ // the CAS guard, so parse leniently rather than requiring a body at all.
115
+ export const publishDocumentRequest = z.object({
116
+ expectedRevision: z.number().optional()
117
+ });
106
118
  export const publishDocumentResponse = z.object({
107
119
  success: z.literal(true),
108
120
  data: documentSchema,
109
121
  message: z.string().optional()
110
122
  });
111
123
  // ---------- DELETE /documents/[id]/publish (unpublish) ----------
124
+ export const unpublishDocumentRequest = z.object({
125
+ expectedRevision: z.number().optional()
126
+ });
112
127
  export const unpublishDocumentResponse = z.object({
113
128
  success: z.literal(true),
114
129
  data: documentSchema,
@@ -160,6 +175,9 @@ export const getVersionResponse = z.object({
160
175
  data: documentVersionSchema
161
176
  });
162
177
  // ---------- POST /documents/[id]/versions/[version]/restore ----------
178
+ export const restoreVersionRequest = z.object({
179
+ expectedRevision: z.number().optional()
180
+ });
163
181
  export const restoreVersionResponse = z.object({
164
182
  success: z.literal(true),
165
183
  data: documentSchema,
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Call once from `hooks.client.ts`. Reloads the page a single time if a code-split chunk or
3
+ * the entry module fails to load during initial hydration, masking a transient CDN/origin
4
+ * hiccup instead of leaving the page rendered-but-unresponsive. Does NOT cover a failed
5
+ * client-side navigation — see `handleChunkLoadClientError` for that.
6
+ */
7
+ export declare function installChunkLoadRecovery(): void;
8
+ /**
9
+ * Call from `hooks.client.ts`'s exported `handleError` (SvelteKit's `HandleClientError`) with
10
+ * the error it received and `event.url` (the destination of the failed navigation — SvelteKit
11
+ * doesn't update `location`/the address bar until a navigation resolves, so at the moment this
12
+ * fires the browser is still showing wherever the visitor came *from*). Covers a failed
13
+ * client-side navigation to a lazily-loaded route — the one case `installChunkLoadRecovery`'s
14
+ * global listeners can't see, since SvelteKit's router catches that rejection internally before
15
+ * it ever reaches `window`.
16
+ */
17
+ export declare function handleChunkLoadClientError(error: unknown, destinationUrl?: URL | string): void;
18
+ /**
19
+ * Call once, at the top level of the root `+layout.svelte`'s `<script>` (must run during
20
+ * component initialization — `beforeNavigate`/`afterNavigate` require it). Starts a `timeoutMs`
21
+ * timer on every client-side navigation; if it hasn't finished by then, forces a hard navigation
22
+ * to the destination instead of waiting for SvelteKit to eventually report the failure itself.
23
+ * Shares `reloadOnce`'s session guard, so if this fires, the reactive `handleError`-based recovery
24
+ * for the same failed navigation (which may still resolve later) is a no-op rather than a second,
25
+ * redundant navigation.
26
+ *
27
+ * `timeoutMs` defaults to 4000 — several times a normal navigation's real-world latency (observed
28
+ * consistently under 1s), generous enough to avoid pre-empting a legitimately-slow-but-working
29
+ * request, while still bounding the worst case to seconds instead of however long the CDN/proxy's
30
+ * own gateway timeout happens to be.
31
+ */
32
+ export declare function installNavigationTimeoutRecovery(timeoutMs?: number): void;
33
+ //# sourceMappingURL=chunk-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-recovery.d.ts","sourceRoot":"","sources":["../src/lib/chunk-recovery.ts"],"names":[],"mappings":"AA2DA;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAsB/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAM9F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAAC,SAAS,SAAO,GAAG,IAAI,CAqBvE"}
@@ -0,0 +1,131 @@
1
+ // chunk-recovery.ts — standalone on purpose (importable as `@aphexcms/cms-core/chunk-recovery`
2
+ // via the package's `./*` wildcard export), NOT re-exported from `/client`: that barrel pulls in
3
+ // the admin UI component tree, and this is meant to run from a public-facing site's
4
+ // `hooks.client.ts` — the hottest of hot paths, loaded by every visitor. No npm dependencies;
5
+ // `installNavigationTimeoutRecovery` uses SvelteKit's own `$app/navigation` virtual module (not
6
+ // an installed package) and must be called from a `.svelte` component's `<script>`, not
7
+ // `hooks.client.ts` — see its doc comment.
8
+ //
9
+ // A route's lazily-loaded JS chunk (or the entry module itself) can fail to fetch from a
10
+ // transient CDN/proxy blip — a dropped connection between an edge network and the origin, or a
11
+ // stale cached HTML document referencing since-replaced hashed filenames.
12
+ //
13
+ // Three distinct gaps, three distinct hooks:
14
+ // 1. The *initial* hydration path (the entry module itself fails to load) throws/rejects in a
15
+ // way the browser surfaces globally — `installChunkLoadRecovery()`'s `window` listeners below
16
+ // catch this.
17
+ // 2. A client-side *navigation* (clicking a link to a lazily-loaded route) fails differently:
18
+ // SvelteKit's own router catches the rejected dynamic import internally, routes it through
19
+ // the app's `handleError` client hook, and resolves the navigation as failed — it never
20
+ // becomes an `unhandledrejection` or a global `error` event, so case 1's listeners are
21
+ // structurally blind to it. Confirmed live: a real "click Blog, nothing happens" report
22
+ // produced exactly this — three `handleError`-logged "Failed to fetch dynamically imported
23
+ // module" errors with no reload, since nothing was listening. `handleChunkLoadClientError`
24
+ // is meant to be called from that hook (see `hooks.client.ts`'s `handleError` export).
25
+ // 3. Both (1) and (2) only fire once SvelteKit (or the browser) has already decided the load
26
+ // failed — and on a real transient origin blip, that decision can ride on the CDN/proxy's own
27
+ // gateway timeout, which is not fast (observed live: ~90s on an actual 522). A visitor
28
+ // watching a click do nothing for a minute-plus before it silently self-heals has not had a
29
+ // good experience, even though the page technically "recovered." `installNavigationTimeoutRecovery`
30
+ // doesn't wait for that — it pre-empts it, forcing a hard navigation to the destination itself
31
+ // after a short, generous timeout if SvelteKit's own client-side navigation hasn't finished by
32
+ // then, rather than reacting to a failure that may take a minute to be reported as one.
33
+ import { beforeNavigate, afterNavigate } from '$app/navigation';
34
+ const SESSION_KEY = 'aphex:chunk-reload-attempted';
35
+ function isChunkLoadFailure(message) {
36
+ return /Failed to fetch dynamically imported module|error loading dynamically imported module|Importing a module script failed|Load failed/i.test(message);
37
+ }
38
+ function reloadOnce(destination) {
39
+ // One retry masks a transient blip. A second failure in the same session means something
40
+ // is actually wrong (origin down, not just a hiccup) — reloading again would just loop
41
+ // forever, and the visitor is better served by the broken-but-stable page at that point.
42
+ if (sessionStorage.getItem(SESSION_KEY))
43
+ return;
44
+ sessionStorage.setItem(SESSION_KEY, '1');
45
+ // A failed *navigation* means the address bar is still showing the page the visitor was
46
+ // leaving, not the one they clicked into — reloading `location.href` re-fetches the old
47
+ // page, not the destination. Reload straight to the destination when we know it.
48
+ if (destination) {
49
+ location.href = destination;
50
+ }
51
+ else {
52
+ location.reload();
53
+ }
54
+ }
55
+ /**
56
+ * Call once from `hooks.client.ts`. Reloads the page a single time if a code-split chunk or
57
+ * the entry module fails to load during initial hydration, masking a transient CDN/origin
58
+ * hiccup instead of leaving the page rendered-but-unresponsive. Does NOT cover a failed
59
+ * client-side navigation — see `handleChunkLoadClientError` for that.
60
+ */
61
+ export function installChunkLoadRecovery() {
62
+ if (typeof window === 'undefined')
63
+ return;
64
+ // Resource load errors (a <script src> that 404s/522s) don't bubble — only the capture
65
+ // phase on window sees them.
66
+ window.addEventListener('error', (event) => {
67
+ const target = event.target;
68
+ if (target instanceof HTMLScriptElement && target.src.includes('/_app/immutable/')) {
69
+ reloadOnce();
70
+ }
71
+ }, true);
72
+ window.addEventListener('unhandledrejection', (event) => {
73
+ const message = event.reason instanceof Error ? event.reason.message : String(event.reason);
74
+ if (isChunkLoadFailure(message)) {
75
+ reloadOnce();
76
+ }
77
+ });
78
+ }
79
+ /**
80
+ * Call from `hooks.client.ts`'s exported `handleError` (SvelteKit's `HandleClientError`) with
81
+ * the error it received and `event.url` (the destination of the failed navigation — SvelteKit
82
+ * doesn't update `location`/the address bar until a navigation resolves, so at the moment this
83
+ * fires the browser is still showing wherever the visitor came *from*). Covers a failed
84
+ * client-side navigation to a lazily-loaded route — the one case `installChunkLoadRecovery`'s
85
+ * global listeners can't see, since SvelteKit's router catches that rejection internally before
86
+ * it ever reaches `window`.
87
+ */
88
+ export function handleChunkLoadClientError(error, destinationUrl) {
89
+ if (typeof window === 'undefined')
90
+ return;
91
+ const message = error instanceof Error ? error.message : String(error);
92
+ if (isChunkLoadFailure(message)) {
93
+ reloadOnce(destinationUrl ? String(destinationUrl) : undefined);
94
+ }
95
+ }
96
+ /**
97
+ * Call once, at the top level of the root `+layout.svelte`'s `<script>` (must run during
98
+ * component initialization — `beforeNavigate`/`afterNavigate` require it). Starts a `timeoutMs`
99
+ * timer on every client-side navigation; if it hasn't finished by then, forces a hard navigation
100
+ * to the destination instead of waiting for SvelteKit to eventually report the failure itself.
101
+ * Shares `reloadOnce`'s session guard, so if this fires, the reactive `handleError`-based recovery
102
+ * for the same failed navigation (which may still resolve later) is a no-op rather than a second,
103
+ * redundant navigation.
104
+ *
105
+ * `timeoutMs` defaults to 4000 — several times a normal navigation's real-world latency (observed
106
+ * consistently under 1s), generous enough to avoid pre-empting a legitimately-slow-but-working
107
+ * request, while still bounding the worst case to seconds instead of however long the CDN/proxy's
108
+ * own gateway timeout happens to be.
109
+ */
110
+ export function installNavigationTimeoutRecovery(timeoutMs = 4000) {
111
+ if (typeof window === 'undefined')
112
+ return;
113
+ let timer;
114
+ beforeNavigate((nav) => {
115
+ clearTimeout(timer);
116
+ const target = nav.to?.url;
117
+ // `willUnload` navigations (external links, full-page nav) are already real browser
118
+ // navigations with their own native loading behavior — nothing to pre-empt there.
119
+ if (!target || nav.willUnload)
120
+ return;
121
+ timer = setTimeout(() => {
122
+ if (sessionStorage.getItem(SESSION_KEY))
123
+ return;
124
+ sessionStorage.setItem(SESSION_KEY, '1');
125
+ location.href = target.href;
126
+ }, timeoutMs);
127
+ });
128
+ afterNavigate(() => {
129
+ clearTimeout(timer);
130
+ });
131
+ }
@@ -11,6 +11,7 @@ export { createAdminNav, setAdminNav, useAdminNav, type AdminNav, type AdminPara
11
11
  export { setPermissionsContext, usePermissions, type PermissionsContext } from '../permissions-context.svelte.js';
12
12
  export * from '../schema-utils/index.js';
13
13
  export { default as DocumentEditor } from '../components/admin/DocumentEditor.svelte';
14
+ export { default as AgentChat } from '../components/admin/AgentChat.svelte';
14
15
  export { default as SchemaField } from '../components/admin/SchemaField.svelte';
15
16
  export { default as PluginSettingsPanel } from '../components/admin/PluginSettingsPanel.svelte';
16
17
  export { setBlockPreviews, useBlockPreviews, type BlockPreviewProps, type BlockPreviewLookup } from '../admin/block-previews.svelte.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/client/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EACN,UAAU,EACV,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACN,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAGhG,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAG1F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG7F,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAK3G,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/client/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EACN,UAAU,EACV,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACN,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAGhG,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAG1F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG7F,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAK3G,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
@@ -21,6 +21,7 @@ export { setPermissionsContext, usePermissions } from '../permissions-context.sv
21
21
  export * from '../schema-utils/index.js';
22
22
  // Components (UI components for the admin interface)
23
23
  export { default as DocumentEditor } from '../components/admin/DocumentEditor.svelte';
24
+ export { default as AgentChat } from '../components/admin/AgentChat.svelte';
24
25
  export { default as SchemaField } from '../components/admin/SchemaField.svelte';
25
26
  export { default as PluginSettingsPanel } from '../components/admin/PluginSettingsPanel.svelte';
26
27
  // Inline editor previews for custom rich-text block types (app-owned presentation).
@@ -12,6 +12,7 @@ export { setPermissionsContext, usePermissions, type PermissionsContext } from '
12
12
  export * from '../schema-utils/index.js';
13
13
  export { setBlockPreviews, useBlockPreviews, type BlockPreviewProps, type BlockPreviewLookup } from '../admin/block-previews.svelte.js';
14
14
  export { default as Sidebar } from '../components/layout/Sidebar.svelte';
15
+ export { default as AgentChat } from '../components/admin/AgentChat.svelte';
15
16
  export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
16
17
  export { default as PluginSettingsPanel } from '../components/admin/PluginSettingsPanel.svelte';
17
18
  export { default as ActivityView } from '../components/admin/ActivityView.svelte';
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/lib/client/ui.ts"],"names":[],"mappings":"AAgBA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EACN,UAAU,EACV,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACN,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,cAAc,uBAAuB,CAAC;AAItC,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE1F,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAEhG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGlF,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAG3G,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/lib/client/ui.ts"],"names":[],"mappings":"AAgBA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EACN,UAAU,EACV,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACN,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,cAAc,uBAAuB,CAAC;AAItC,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE1F,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAEhG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGlF,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAG3G,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/client/ui.js CHANGED
@@ -36,6 +36,7 @@ export * from '../schema-utils/index.js';
36
36
  export { setBlockPreviews, useBlockPreviews } from '../admin/block-previews.svelte.js';
37
37
  // Admin chrome
38
38
  export { default as Sidebar } from '../components/layout/Sidebar.svelte';
39
+ export { default as AgentChat } from '../components/admin/AgentChat.svelte';
39
40
  export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
40
41
  // Plugin settings panel — renders its own inputs, does not pull the field registry.
41
42
  export { default as PluginSettingsPanel } from '../components/admin/PluginSettingsPanel.svelte';