@aphexcms/cms-core 9.6.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 (491) 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 +36 -3
  23. package/dist/api/documents.d.ts.map +1 -1
  24. package/dist/api/documents.js +24 -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 +41 -0
  32. package/dist/api/schemas/documents.d.ts.map +1 -1
  33. package/dist/api/schemas/documents.js +38 -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 +2 -0
  41. package/dist/client/ui.d.ts.map +1 -1
  42. package/dist/client/ui.js +3 -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 +436 -0
  46. package/dist/components/admin/ActivityView.svelte.d.ts +4 -0
  47. package/dist/components/admin/ActivityView.svelte.d.ts.map +1 -0
  48. package/dist/components/admin/AgentChat.svelte +977 -0
  49. package/dist/components/admin/AgentChat.svelte.d.ts +17 -0
  50. package/dist/components/admin/AgentChat.svelte.d.ts.map +1 -0
  51. package/dist/components/admin/DocumentEditor.svelte +469 -70
  52. package/dist/components/admin/DocumentEditor.svelte.d.ts +6 -0
  53. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  54. package/dist/components/admin/ObjectModal.svelte +4 -2
  55. package/dist/components/admin/ScheduleDialog.svelte +174 -0
  56. package/dist/components/admin/ScheduleDialog.svelte.d.ts +20 -0
  57. package/dist/components/admin/ScheduleDialog.svelte.d.ts.map +1 -0
  58. package/dist/components/admin/fields/ArrayField.svelte +4 -1
  59. package/dist/components/admin/fields/ReferenceField.svelte +12 -1
  60. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
  61. package/dist/components/index.d.ts +1 -0
  62. package/dist/components/index.d.ts.map +1 -1
  63. package/dist/components/index.js +1 -0
  64. package/dist/components/layout/OrganizationSwitcher.svelte +3 -3
  65. package/dist/components/layout/Sidebar.svelte +26 -2
  66. package/dist/components/layout/Sidebar.svelte.d.ts +1 -0
  67. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
  68. package/dist/components/layout/sidebar/NavUser.svelte +5 -5
  69. package/dist/db/interfaces/agent-change-sets.d.ts +17 -0
  70. package/dist/db/interfaces/agent-change-sets.d.ts.map +1 -0
  71. package/dist/db/interfaces/agent-change-sets.js +1 -0
  72. package/dist/db/interfaces/document.d.ts +25 -3
  73. package/dist/db/interfaces/document.d.ts.map +1 -1
  74. package/dist/db/interfaces/document.js +19 -1
  75. package/dist/db/interfaces/events.d.ts +55 -0
  76. package/dist/db/interfaces/events.d.ts.map +1 -0
  77. package/dist/db/interfaces/events.js +1 -0
  78. package/dist/db/interfaces/index.d.ts +13 -2
  79. package/dist/db/interfaces/index.d.ts.map +1 -1
  80. package/dist/db/interfaces/index.js +1 -1
  81. package/dist/db/interfaces/plugin-storage.d.ts +39 -0
  82. package/dist/db/interfaces/plugin-storage.d.ts.map +1 -0
  83. package/dist/db/interfaces/plugin-storage.js +1 -0
  84. package/dist/document-refresh.svelte.d.ts +2 -0
  85. package/dist/document-refresh.svelte.d.ts.map +1 -1
  86. package/dist/document-refresh.svelte.js +15 -0
  87. package/dist/document-workspace-registry.svelte.d.ts +15 -0
  88. package/dist/document-workspace-registry.svelte.d.ts.map +1 -0
  89. package/dist/document-workspace-registry.svelte.js +30 -0
  90. package/dist/events/catalog.d.ts +8 -0
  91. package/dist/events/catalog.d.ts.map +1 -0
  92. package/dist/events/catalog.js +11 -0
  93. package/dist/events/consumer.d.ts +79 -0
  94. package/dist/events/consumer.d.ts.map +1 -0
  95. package/dist/events/consumer.js +76 -0
  96. package/dist/events/define-event.d.ts +17 -0
  97. package/dist/events/define-event.d.ts.map +1 -0
  98. package/dist/events/define-event.js +7 -0
  99. package/dist/events/emit.d.ts +11 -0
  100. package/dist/events/emit.d.ts.map +1 -0
  101. package/dist/events/emit.js +20 -0
  102. package/dist/events/index.d.ts +4 -0
  103. package/dist/events/index.d.ts.map +1 -0
  104. package/dist/events/index.js +3 -0
  105. package/dist/field-validation/rule.d.ts.map +1 -1
  106. package/dist/field-validation/rule.js +15 -0
  107. package/dist/field-validation/utils.d.ts.map +1 -1
  108. package/dist/field-validation/utils.js +211 -29
  109. package/dist/forms/define-form.d.ts +25 -0
  110. package/dist/forms/define-form.d.ts.map +1 -0
  111. package/dist/forms/define-form.js +22 -0
  112. package/dist/forms/index.d.ts +4 -0
  113. package/dist/forms/index.d.ts.map +1 -0
  114. package/dist/forms/index.js +5 -0
  115. package/dist/forms/types.d.ts +49 -0
  116. package/dist/forms/types.d.ts.map +1 -0
  117. package/dist/forms/types.js +1 -0
  118. package/dist/forms/validate.d.ts +9 -0
  119. package/dist/forms/validate.d.ts.map +1 -0
  120. package/dist/forms/validate.js +18 -0
  121. package/dist/hooks.d.ts +2 -0
  122. package/dist/hooks.d.ts.map +1 -1
  123. package/dist/hooks.js +17 -0
  124. package/dist/index.d.ts +2 -0
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +6 -0
  127. package/dist/jobs/document-jobs.d.ts +27 -0
  128. package/dist/jobs/document-jobs.d.ts.map +1 -0
  129. package/dist/jobs/document-jobs.js +42 -0
  130. package/dist/jobs/embedded-runner.d.ts +25 -0
  131. package/dist/jobs/embedded-runner.d.ts.map +1 -0
  132. package/dist/jobs/embedded-runner.js +46 -0
  133. package/dist/jobs/index.d.ts +7 -0
  134. package/dist/jobs/index.d.ts.map +1 -0
  135. package/dist/jobs/index.js +8 -0
  136. package/dist/jobs/relay.d.ts +27 -0
  137. package/dist/jobs/relay.d.ts.map +1 -0
  138. package/dist/jobs/relay.js +60 -0
  139. package/dist/jobs/run-batch.d.ts +52 -0
  140. package/dist/jobs/run-batch.d.ts.map +1 -0
  141. package/dist/jobs/run-batch.js +61 -0
  142. package/dist/jobs/run-due-jobs.d.ts +30 -0
  143. package/dist/jobs/run-due-jobs.d.ts.map +1 -0
  144. package/dist/jobs/run-due-jobs.js +69 -0
  145. package/dist/jobs/types.d.ts +18 -0
  146. package/dist/jobs/types.d.ts.map +1 -0
  147. package/dist/jobs/types.js +1 -0
  148. package/dist/lib/agent-chat-state.svelte.d.ts +38 -0
  149. package/dist/lib/agent-chat-state.svelte.d.ts.map +1 -0
  150. package/dist/lib/agent-chat-state.svelte.js +87 -0
  151. package/dist/lib/agent-chat-state.svelte.js.map +1 -0
  152. package/dist/lib/ai/content-workspace-tools.d.ts +3 -0
  153. package/dist/lib/ai/content-workspace-tools.d.ts.map +1 -0
  154. package/dist/lib/ai/content-workspace-tools.js +51 -0
  155. package/dist/lib/ai/content-workspace-tools.js.map +1 -0
  156. package/dist/lib/ai/default-system-prompt.d.ts +2 -0
  157. package/dist/lib/ai/default-system-prompt.d.ts.map +1 -0
  158. package/dist/lib/ai/default-system-prompt.js +16 -0
  159. package/dist/lib/ai/default-system-prompt.js.map +1 -0
  160. package/dist/lib/ai/index.d.ts +2 -0
  161. package/dist/lib/ai/index.d.ts.map +1 -0
  162. package/dist/lib/ai/index.js +5 -0
  163. package/dist/lib/ai/index.js.map +1 -0
  164. package/dist/lib/ai/interfaces/ai-provider.d.ts +67 -0
  165. package/dist/lib/ai/interfaces/ai-provider.d.ts.map +1 -0
  166. package/dist/lib/ai/interfaces/ai-provider.js +17 -0
  167. package/dist/lib/ai/interfaces/ai-provider.js.map +1 -0
  168. package/dist/lib/ai/run-agent-turn.d.ts +29 -0
  169. package/dist/lib/ai/run-agent-turn.d.ts.map +1 -0
  170. package/dist/lib/ai/run-agent-turn.js +167 -0
  171. package/dist/lib/ai/run-agent-turn.js.map +1 -0
  172. package/dist/lib/api/agent-chat.d.ts +27 -0
  173. package/dist/lib/api/agent-chat.d.ts.map +1 -0
  174. package/dist/lib/api/agent-chat.js +65 -0
  175. package/dist/lib/api/agent-chat.js.map +1 -0
  176. package/dist/lib/api/documents.d.ts +36 -3
  177. package/dist/lib/api/documents.d.ts.map +1 -1
  178. package/dist/lib/api/documents.js +24 -6
  179. package/dist/lib/api/documents.js.map +1 -1
  180. package/dist/lib/api/schemas/agent-chat.d.ts +45 -0
  181. package/dist/lib/api/schemas/agent-chat.d.ts.map +1 -0
  182. package/dist/lib/api/schemas/agent-chat.js +36 -0
  183. package/dist/lib/api/schemas/agent-chat.js.map +1 -0
  184. package/dist/lib/api/schemas/agent-operations.d.ts +13 -0
  185. package/dist/lib/api/schemas/agent-operations.d.ts.map +1 -0
  186. package/dist/lib/api/schemas/agent-operations.js +16 -0
  187. package/dist/lib/api/schemas/agent-operations.js.map +1 -0
  188. package/dist/lib/api/schemas/documents.d.ts +41 -0
  189. package/dist/lib/api/schemas/documents.d.ts.map +1 -1
  190. package/dist/lib/api/schemas/documents.js +38 -2
  191. package/dist/lib/api/schemas/documents.js.map +1 -1
  192. package/dist/lib/chunk-recovery.d.ts +33 -0
  193. package/dist/lib/chunk-recovery.d.ts.map +1 -0
  194. package/dist/lib/chunk-recovery.js +132 -0
  195. package/dist/lib/chunk-recovery.js.map +1 -0
  196. package/dist/lib/client/index.d.ts +1 -0
  197. package/dist/lib/client/index.d.ts.map +1 -1
  198. package/dist/lib/client/index.js +1 -0
  199. package/dist/lib/client/index.js.map +1 -1
  200. package/dist/lib/client/ui.d.ts +2 -0
  201. package/dist/lib/client/ui.d.ts.map +1 -1
  202. package/dist/lib/client/ui.js +3 -0
  203. package/dist/lib/client/ui.js.map +1 -1
  204. package/dist/lib/components/index.d.ts +1 -0
  205. package/dist/lib/components/index.d.ts.map +1 -1
  206. package/dist/lib/components/index.js +1 -0
  207. package/dist/lib/components/index.js.map +1 -1
  208. package/dist/lib/db/interfaces/agent-change-sets.d.ts +17 -0
  209. package/dist/lib/db/interfaces/agent-change-sets.d.ts.map +1 -0
  210. package/dist/lib/db/interfaces/agent-change-sets.js +2 -0
  211. package/dist/lib/db/interfaces/agent-change-sets.js.map +1 -0
  212. package/dist/lib/db/interfaces/document.d.ts +25 -3
  213. package/dist/lib/db/interfaces/document.d.ts.map +1 -1
  214. package/dist/lib/db/interfaces/document.js +19 -1
  215. package/dist/lib/db/interfaces/document.js.map +1 -1
  216. package/dist/lib/db/interfaces/events.d.ts +55 -0
  217. package/dist/lib/db/interfaces/events.d.ts.map +1 -0
  218. package/dist/lib/db/interfaces/events.js +2 -0
  219. package/dist/lib/db/interfaces/events.js.map +1 -0
  220. package/dist/lib/db/interfaces/index.d.ts +13 -2
  221. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  222. package/dist/lib/db/interfaces/index.js +1 -1
  223. package/dist/lib/db/interfaces/index.js.map +1 -1
  224. package/dist/lib/db/interfaces/plugin-storage.d.ts +39 -0
  225. package/dist/lib/db/interfaces/plugin-storage.d.ts.map +1 -0
  226. package/dist/lib/db/interfaces/plugin-storage.js +2 -0
  227. package/dist/lib/db/interfaces/plugin-storage.js.map +1 -0
  228. package/dist/lib/document-refresh.svelte.d.ts +2 -0
  229. package/dist/lib/document-refresh.svelte.d.ts.map +1 -1
  230. package/dist/lib/document-refresh.svelte.js +15 -0
  231. package/dist/lib/document-refresh.svelte.js.map +1 -1
  232. package/dist/lib/document-workspace-registry.svelte.d.ts +15 -0
  233. package/dist/lib/document-workspace-registry.svelte.d.ts.map +1 -0
  234. package/dist/lib/document-workspace-registry.svelte.js +31 -0
  235. package/dist/lib/document-workspace-registry.svelte.js.map +1 -0
  236. package/dist/lib/events/catalog.d.ts +8 -0
  237. package/dist/lib/events/catalog.d.ts.map +1 -0
  238. package/dist/lib/events/catalog.js +12 -0
  239. package/dist/lib/events/catalog.js.map +1 -0
  240. package/dist/lib/events/consumer.d.ts +79 -0
  241. package/dist/lib/events/consumer.d.ts.map +1 -0
  242. package/dist/lib/events/consumer.js +77 -0
  243. package/dist/lib/events/consumer.js.map +1 -0
  244. package/dist/lib/events/define-event.d.ts +17 -0
  245. package/dist/lib/events/define-event.d.ts.map +1 -0
  246. package/dist/lib/events/define-event.js +8 -0
  247. package/dist/lib/events/define-event.js.map +1 -0
  248. package/dist/lib/events/emit.d.ts +11 -0
  249. package/dist/lib/events/emit.d.ts.map +1 -0
  250. package/dist/lib/events/emit.js +21 -0
  251. package/dist/lib/events/emit.js.map +1 -0
  252. package/dist/lib/events/index.d.ts +4 -0
  253. package/dist/lib/events/index.d.ts.map +1 -0
  254. package/dist/lib/events/index.js +4 -0
  255. package/dist/lib/events/index.js.map +1 -0
  256. package/dist/lib/field-validation/rule.d.ts.map +1 -1
  257. package/dist/lib/field-validation/rule.js +15 -0
  258. package/dist/lib/field-validation/rule.js.map +1 -1
  259. package/dist/lib/field-validation/utils.d.ts.map +1 -1
  260. package/dist/lib/field-validation/utils.js +211 -29
  261. package/dist/lib/field-validation/utils.js.map +1 -1
  262. package/dist/lib/forms/define-form.d.ts +25 -0
  263. package/dist/lib/forms/define-form.d.ts.map +1 -0
  264. package/dist/lib/forms/define-form.js +23 -0
  265. package/dist/lib/forms/define-form.js.map +1 -0
  266. package/dist/lib/forms/index.d.ts +4 -0
  267. package/dist/lib/forms/index.d.ts.map +1 -0
  268. package/dist/lib/forms/index.js +6 -0
  269. package/dist/lib/forms/index.js.map +1 -0
  270. package/dist/lib/forms/types.d.ts +49 -0
  271. package/dist/lib/forms/types.d.ts.map +1 -0
  272. package/dist/lib/forms/types.js +2 -0
  273. package/dist/lib/forms/types.js.map +1 -0
  274. package/dist/lib/forms/validate.d.ts +9 -0
  275. package/dist/lib/forms/validate.d.ts.map +1 -0
  276. package/dist/lib/forms/validate.js +19 -0
  277. package/dist/lib/forms/validate.js.map +1 -0
  278. package/dist/lib/hooks.d.ts +2 -0
  279. package/dist/lib/hooks.d.ts.map +1 -1
  280. package/dist/lib/hooks.js +17 -0
  281. package/dist/lib/hooks.js.map +1 -1
  282. package/dist/lib/index.d.ts +2 -0
  283. package/dist/lib/index.d.ts.map +1 -1
  284. package/dist/lib/index.js +6 -0
  285. package/dist/lib/index.js.map +1 -1
  286. package/dist/lib/jobs/document-jobs.d.ts +27 -0
  287. package/dist/lib/jobs/document-jobs.d.ts.map +1 -0
  288. package/dist/lib/jobs/document-jobs.js +43 -0
  289. package/dist/lib/jobs/document-jobs.js.map +1 -0
  290. package/dist/lib/jobs/embedded-runner.d.ts +25 -0
  291. package/dist/lib/jobs/embedded-runner.d.ts.map +1 -0
  292. package/dist/lib/jobs/embedded-runner.js +47 -0
  293. package/dist/lib/jobs/embedded-runner.js.map +1 -0
  294. package/dist/lib/jobs/index.d.ts +7 -0
  295. package/dist/lib/jobs/index.d.ts.map +1 -0
  296. package/dist/lib/jobs/index.js +9 -0
  297. package/dist/lib/jobs/index.js.map +1 -0
  298. package/dist/lib/jobs/relay.d.ts +27 -0
  299. package/dist/lib/jobs/relay.d.ts.map +1 -0
  300. package/dist/lib/jobs/relay.js +61 -0
  301. package/dist/lib/jobs/relay.js.map +1 -0
  302. package/dist/lib/jobs/run-batch.d.ts +52 -0
  303. package/dist/lib/jobs/run-batch.d.ts.map +1 -0
  304. package/dist/lib/jobs/run-batch.js +62 -0
  305. package/dist/lib/jobs/run-batch.js.map +1 -0
  306. package/dist/lib/jobs/run-due-jobs.d.ts +30 -0
  307. package/dist/lib/jobs/run-due-jobs.d.ts.map +1 -0
  308. package/dist/lib/jobs/run-due-jobs.js +70 -0
  309. package/dist/lib/jobs/run-due-jobs.js.map +1 -0
  310. package/dist/lib/jobs/types.d.ts +18 -0
  311. package/dist/lib/jobs/types.d.ts.map +1 -0
  312. package/dist/lib/jobs/types.js +2 -0
  313. package/dist/lib/jobs/types.js.map +1 -0
  314. package/dist/lib/local-api/collection-api.d.ts +49 -2
  315. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  316. package/dist/lib/local-api/collection-api.js +193 -27
  317. package/dist/lib/local-api/collection-api.js.map +1 -1
  318. package/dist/lib/mcp/tools.d.ts +39 -4
  319. package/dist/lib/mcp/tools.d.ts.map +1 -1
  320. package/dist/lib/mcp/tools.js +546 -362
  321. package/dist/lib/mcp/tools.js.map +1 -1
  322. package/dist/lib/plugins/resolver.d.ts +19 -1
  323. package/dist/lib/plugins/resolver.d.ts.map +1 -1
  324. package/dist/lib/plugins/resolver.js +17 -1
  325. package/dist/lib/plugins/resolver.js.map +1 -1
  326. package/dist/lib/plugins/types.d.ts +68 -2
  327. package/dist/lib/plugins/types.d.ts.map +1 -1
  328. package/dist/lib/plugins/types.js.map +1 -1
  329. package/dist/lib/preview/stega.d.ts +2 -2
  330. package/dist/lib/preview/stega.d.ts.map +1 -1
  331. package/dist/lib/preview/stega.js +52 -29
  332. package/dist/lib/preview/stega.js.map +1 -1
  333. package/dist/lib/schema-utils/validator.d.ts.map +1 -1
  334. package/dist/lib/schema-utils/validator.js +5 -2
  335. package/dist/lib/schema-utils/validator.js.map +1 -1
  336. package/dist/lib/server/api/index.d.ts.map +1 -1
  337. package/dist/lib/server/api/index.js +16 -0
  338. package/dist/lib/server/api/index.js.map +1 -1
  339. package/dist/lib/server/api/routes/agent-change-sets.d.ts +4 -0
  340. package/dist/lib/server/api/routes/agent-change-sets.d.ts.map +1 -0
  341. package/dist/lib/server/api/routes/agent-change-sets.js +132 -0
  342. package/dist/lib/server/api/routes/agent-change-sets.js.map +1 -0
  343. package/dist/lib/server/api/routes/agent-chat.d.ts +14 -0
  344. package/dist/lib/server/api/routes/agent-chat.d.ts.map +1 -0
  345. package/dist/lib/server/api/routes/agent-chat.js +224 -0
  346. package/dist/lib/server/api/routes/agent-chat.js.map +1 -0
  347. package/dist/lib/server/api/routes/document-versions.d.ts.map +1 -1
  348. package/dist/lib/server/api/routes/document-versions.js +16 -2
  349. package/dist/lib/server/api/routes/document-versions.js.map +1 -1
  350. package/dist/lib/server/api/routes/documents-by-id.d.ts.map +1 -1
  351. package/dist/lib/server/api/routes/documents-by-id.js +11 -1
  352. package/dist/lib/server/api/routes/documents-by-id.js.map +1 -1
  353. package/dist/lib/server/api/routes/documents-publish.d.ts.map +1 -1
  354. package/dist/lib/server/api/routes/documents-publish.js +145 -2
  355. package/dist/lib/server/api/routes/documents-publish.js.map +1 -1
  356. package/dist/lib/server/api/routes/jobs.d.ts +4 -0
  357. package/dist/lib/server/api/routes/jobs.d.ts.map +1 -0
  358. package/dist/lib/server/api/routes/jobs.js +95 -0
  359. package/dist/lib/server/api/routes/jobs.js.map +1 -0
  360. package/dist/lib/server/api/routes/resolve-created-by.d.ts +13 -0
  361. package/dist/lib/server/api/routes/resolve-created-by.d.ts.map +1 -0
  362. package/dist/lib/server/api/routes/resolve-created-by.js +31 -0
  363. package/dist/lib/server/api/routes/resolve-created-by.js.map +1 -0
  364. package/dist/lib/server/api/routes/workers-run.d.ts +4 -0
  365. package/dist/lib/server/api/routes/workers-run.d.ts.map +1 -0
  366. package/dist/lib/server/api/routes/workers-run.js +41 -0
  367. package/dist/lib/server/api/routes/workers-run.js.map +1 -0
  368. package/dist/lib/server/index.d.ts +2 -0
  369. package/dist/lib/server/index.d.ts.map +1 -1
  370. package/dist/lib/server/index.js +3 -0
  371. package/dist/lib/server/index.js.map +1 -1
  372. package/dist/lib/services/version-service.d.ts +19 -3
  373. package/dist/lib/services/version-service.d.ts.map +1 -1
  374. package/dist/lib/services/version-service.js +75 -69
  375. package/dist/lib/services/version-service.js.map +1 -1
  376. package/dist/lib/type-gen.d.ts.map +1 -1
  377. package/dist/lib/type-gen.js +11 -0
  378. package/dist/lib/type-gen.js.map +1 -1
  379. package/dist/lib/types/agent-change-sets.d.ts +70 -0
  380. package/dist/lib/types/agent-change-sets.d.ts.map +1 -0
  381. package/dist/lib/types/agent-change-sets.js +7 -0
  382. package/dist/lib/types/agent-change-sets.js.map +1 -0
  383. package/dist/lib/types/agent-stream.d.ts +60 -0
  384. package/dist/lib/types/agent-stream.d.ts.map +1 -0
  385. package/dist/lib/types/agent-stream.js +12 -0
  386. package/dist/lib/types/agent-stream.js.map +1 -0
  387. package/dist/lib/types/agent-tools.d.ts +65 -0
  388. package/dist/lib/types/agent-tools.d.ts.map +1 -0
  389. package/dist/lib/types/agent-tools.js +2 -0
  390. package/dist/lib/types/agent-tools.js.map +1 -0
  391. package/dist/lib/types/config.d.ts +62 -0
  392. package/dist/lib/types/config.d.ts.map +1 -1
  393. package/dist/lib/types/document-workspace.d.ts +53 -0
  394. package/dist/lib/types/document-workspace.d.ts.map +1 -0
  395. package/dist/lib/types/document-workspace.js +15 -0
  396. package/dist/lib/types/document-workspace.js.map +1 -0
  397. package/dist/lib/types/document.d.ts +5 -0
  398. package/dist/lib/types/document.d.ts.map +1 -1
  399. package/dist/lib/types/events.d.ts +134 -0
  400. package/dist/lib/types/events.d.ts.map +1 -0
  401. package/dist/lib/types/events.js +4 -0
  402. package/dist/lib/types/events.js.map +1 -0
  403. package/dist/lib/types/index.d.ts +3 -0
  404. package/dist/lib/types/index.d.ts.map +1 -1
  405. package/dist/lib/types/index.js +3 -0
  406. package/dist/lib/types/index.js.map +1 -1
  407. package/dist/lib/types/schemas.js +1 -1
  408. package/dist/lib/types/schemas.js.map +1 -1
  409. package/dist/lib/utils/fetch-remote-file.d.ts +11 -0
  410. package/dist/lib/utils/fetch-remote-file.d.ts.map +1 -0
  411. package/dist/lib/utils/fetch-remote-file.js +169 -0
  412. package/dist/lib/utils/fetch-remote-file.js.map +1 -0
  413. package/dist/lib/utils/index.d.ts +1 -1
  414. package/dist/lib/utils/index.d.ts.map +1 -1
  415. package/dist/lib/utils/index.js.map +1 -1
  416. package/dist/local-api/collection-api.d.ts +49 -2
  417. package/dist/local-api/collection-api.d.ts.map +1 -1
  418. package/dist/local-api/collection-api.js +193 -27
  419. package/dist/mcp/tools.d.ts +39 -4
  420. package/dist/mcp/tools.d.ts.map +1 -1
  421. package/dist/mcp/tools.js +546 -362
  422. package/dist/plugins/resolver.d.ts +19 -1
  423. package/dist/plugins/resolver.d.ts.map +1 -1
  424. package/dist/plugins/resolver.js +17 -1
  425. package/dist/plugins/types.d.ts +68 -2
  426. package/dist/plugins/types.d.ts.map +1 -1
  427. package/dist/preview/stega.d.ts +2 -2
  428. package/dist/preview/stega.d.ts.map +1 -1
  429. package/dist/preview/stega.js +52 -29
  430. package/dist/schema-utils/validator.d.ts.map +1 -1
  431. package/dist/schema-utils/validator.js +5 -2
  432. package/dist/server/api/index.d.ts.map +1 -1
  433. package/dist/server/api/index.js +16 -0
  434. package/dist/server/api/routes/agent-change-sets.d.ts +4 -0
  435. package/dist/server/api/routes/agent-change-sets.d.ts.map +1 -0
  436. package/dist/server/api/routes/agent-change-sets.js +131 -0
  437. package/dist/server/api/routes/agent-chat.d.ts +14 -0
  438. package/dist/server/api/routes/agent-chat.d.ts.map +1 -0
  439. package/dist/server/api/routes/agent-chat.js +223 -0
  440. package/dist/server/api/routes/document-versions.d.ts.map +1 -1
  441. package/dist/server/api/routes/document-versions.js +16 -2
  442. package/dist/server/api/routes/documents-by-id.d.ts.map +1 -1
  443. package/dist/server/api/routes/documents-by-id.js +11 -1
  444. package/dist/server/api/routes/documents-publish.d.ts.map +1 -1
  445. package/dist/server/api/routes/documents-publish.js +145 -2
  446. package/dist/server/api/routes/jobs.d.ts +4 -0
  447. package/dist/server/api/routes/jobs.d.ts.map +1 -0
  448. package/dist/server/api/routes/jobs.js +94 -0
  449. package/dist/server/api/routes/resolve-created-by.d.ts +13 -0
  450. package/dist/server/api/routes/resolve-created-by.d.ts.map +1 -0
  451. package/dist/server/api/routes/resolve-created-by.js +30 -0
  452. package/dist/server/api/routes/workers-run.d.ts +4 -0
  453. package/dist/server/api/routes/workers-run.d.ts.map +1 -0
  454. package/dist/server/api/routes/workers-run.js +40 -0
  455. package/dist/server/index.d.ts +2 -0
  456. package/dist/server/index.d.ts.map +1 -1
  457. package/dist/server/index.js +3 -0
  458. package/dist/services/version-service.d.ts +19 -3
  459. package/dist/services/version-service.d.ts.map +1 -1
  460. package/dist/services/version-service.js +75 -69
  461. package/dist/type-gen.d.ts.map +1 -1
  462. package/dist/type-gen.js +11 -0
  463. package/dist/types/agent-change-sets.d.ts +70 -0
  464. package/dist/types/agent-change-sets.d.ts.map +1 -0
  465. package/dist/types/agent-change-sets.js +6 -0
  466. package/dist/types/agent-stream.d.ts +60 -0
  467. package/dist/types/agent-stream.d.ts.map +1 -0
  468. package/dist/types/agent-stream.js +11 -0
  469. package/dist/types/agent-tools.d.ts +65 -0
  470. package/dist/types/agent-tools.d.ts.map +1 -0
  471. package/dist/types/agent-tools.js +1 -0
  472. package/dist/types/config.d.ts +62 -0
  473. package/dist/types/config.d.ts.map +1 -1
  474. package/dist/types/document-workspace.d.ts +53 -0
  475. package/dist/types/document-workspace.d.ts.map +1 -0
  476. package/dist/types/document-workspace.js +14 -0
  477. package/dist/types/document.d.ts +5 -0
  478. package/dist/types/document.d.ts.map +1 -1
  479. package/dist/types/events.d.ts +134 -0
  480. package/dist/types/events.d.ts.map +1 -0
  481. package/dist/types/events.js +3 -0
  482. package/dist/types/index.d.ts +3 -0
  483. package/dist/types/index.d.ts.map +1 -1
  484. package/dist/types/index.js +3 -0
  485. package/dist/types/schemas.js +1 -1
  486. package/dist/utils/fetch-remote-file.d.ts +11 -0
  487. package/dist/utils/fetch-remote-file.d.ts.map +1 -0
  488. package/dist/utils/fetch-remote-file.js +168 -0
  489. package/dist/utils/index.d.ts +1 -1
  490. package/dist/utils/index.d.ts.map +1 -1
  491. package/package.json +5 -1
@@ -25,6 +25,12 @@ interface Props {
25
25
  createdAt?: string;
26
26
  } | null;
27
27
  isReadOnly?: boolean;
28
+ /** Suppresses the bottom action bar (Publish / Schedule / Unpublish / Delete).
29
+ * Set by the host when another editor is stacked on top of this one and owns
30
+ * the actions instead — two action bars in the same corner give no clue which
31
+ * document each one publishes. This hides the bar only; the document keeps
32
+ * auto-saving and its status stays visible in the header. */
33
+ hideActionBar?: boolean;
28
34
  /** When true, the host has hidden side panels — show a Minimize toggle. */
29
35
  focusMode?: boolean;
30
36
  /** Toggle host-driven focus mode. Omit to hide the focus button entirely. */
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/DocumentEditor.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQzD,OAAO,KAAK,EAAE,SAAS,EAAuB,MAAM,qBAAqB,CAAC;AA6BzE,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB;;kDAE8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,sBAAsB,CAAC,EAAE;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;IACT,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,yGAAyG;IACzG,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AA6rEF,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"DocumentEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/DocumentEditor.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AASzD,OAAO,KAAK,EAAE,SAAS,EAAuB,MAAM,qBAAqB,CAAC;AAqCzE,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB;;kDAE8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,sBAAsB,CAAC,EAAE;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;IACT,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;kEAI8D;IAC9D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,yGAAyG;IACzG,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAiiFF,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -81,7 +81,7 @@
81
81
  >
82
82
  <!-- svelte-ignore a11y_no_static_element_interactions -->
83
83
  <div
84
- class="border-border bg-background max-h-full w-full max-w-3xl overflow-auto rounded-lg border shadow-lg"
84
+ class="border-border bg-background max-h-full w-full max-w-3xl cursor-default overflow-auto rounded-lg border shadow-lg"
85
85
  style="z-index: {panelZ}"
86
86
  onclick={(e) => e.stopPropagation()}
87
87
  onkeydown={(e) => e.stopPropagation()}
@@ -89,7 +89,9 @@
89
89
  <div
90
90
  class="border-border bg-background sticky top-0 z-10 flex items-center justify-between gap-3 border-b px-4 py-2"
91
91
  >
92
- <span class="text-sm font-medium">Edit {schema.title}</span>
92
+ <span class="text-sm font-medium"
93
+ >Edit {schema.title ?? schema.name.charAt(0).toUpperCase() + schema.name.slice(1)}</span
94
+ >
93
95
  <div class="flex items-center gap-2">
94
96
  {#if saveState}
95
97
  {#if saveState.saving}
@@ -0,0 +1,174 @@
1
+ <script lang="ts">
2
+ // Schedule a future publish/unpublish. Layout mirrors Sanity's scheduled-drafts dialog
3
+ // (title · description · "Schedule on" field → calendar+time popover · Cancel/Schedule),
4
+ // in Aphex's shadcn skin. Posts to /documents/:id/schedule; the worker runs it at `runAt`
5
+ // (re-validating then), and `runAt` is floored to the minute so 1:30 means 1:30:00.
6
+ import * as Dialog from '@aphexcms/ui/shadcn/dialog';
7
+ import * as Popover from '@aphexcms/ui/shadcn/popover';
8
+ import { Calendar } from '@aphexcms/ui/shadcn/calendar';
9
+ import { Button } from '@aphexcms/ui/shadcn/button';
10
+ import { Label } from '@aphexcms/ui/shadcn/label';
11
+ import { Calendar as CalendarIcon, Globe } from '@lucide/svelte';
12
+ import { CalendarDate, today, getLocalTimeZone, type DateValue } from '@internationalized/date';
13
+ import { documents } from '../../api/documents';
14
+ import { toast } from 'svelte-sonner';
15
+
16
+ interface Props {
17
+ open: boolean;
18
+ documentId: string;
19
+ /**
20
+ * The action to schedule. Derived from the editor's active perspective by the caller:
21
+ * viewing the Draft tab → 'publish' (send this draft live later); viewing the Published
22
+ * tab → 'unpublish' (take it down later). No in-dialog toggle — the tab is the intent.
23
+ */
24
+ action: 'publish' | 'unpublish';
25
+ onScheduled?: (job: { jobId: string; type: string; runAt: string; status: string }) => void;
26
+ }
27
+ let { open = $bindable(), documentId, action, onScheduled }: Props = $props();
28
+
29
+ let dateValue = $state<DateValue | undefined>(undefined);
30
+ let timeStr = $state('09:00'); // "HH:MM", 24h internally
31
+ let pickerOpen = $state(false);
32
+ let submitting = $state(false);
33
+
34
+ const actionVerb = $derived(action === 'publish' ? 'Publish' : 'Unpublish');
35
+
36
+ const minDate = today(getLocalTimeZone());
37
+ // Short local timezone label, e.g. "MST" — shown so the user knows what zone they're setting.
38
+ const tzLabel =
39
+ new Intl.DateTimeFormat('en-US', { timeZoneName: 'short' })
40
+ .formatToParts(new Date())
41
+ .find((p) => p.type === 'timeZoneName')?.value ?? '';
42
+
43
+ const pad = (n: number) => String(n).padStart(2, '0');
44
+
45
+ // Reset the date/time each time the dialog opens: default to one hour out, floored to the minute.
46
+ $effect(() => {
47
+ if (open) {
48
+ const d = new Date(Date.now() + 60 * 60 * 1000);
49
+ dateValue = new CalendarDate(d.getFullYear(), d.getMonth() + 1, d.getDate());
50
+ timeStr = `${pad(d.getHours())}:${pad(d.getMinutes())}`;
51
+ }
52
+ });
53
+
54
+ /** Combine the picked calendar date + time into a local Date floored to the minute. */
55
+ function buildRunAt(): Date | null {
56
+ if (!dateValue) return null;
57
+ const [h, m] = timeStr.split(':').map(Number);
58
+ const d = new Date(dateValue.year, dateValue.month - 1, dateValue.day, h ?? 0, m ?? 0, 0, 0);
59
+ return Number.isNaN(d.getTime()) ? null : d;
60
+ }
61
+
62
+ const runAtPreview = $derived(buildRunAt());
63
+ const fieldLabel = $derived(
64
+ runAtPreview
65
+ ? runAtPreview.toLocaleString(undefined, {
66
+ month: 'short',
67
+ day: 'numeric',
68
+ year: 'numeric',
69
+ hour: 'numeric',
70
+ minute: '2-digit'
71
+ })
72
+ : 'Select date and time'
73
+ );
74
+
75
+ function setToCurrentTime() {
76
+ const now = new Date();
77
+ dateValue = new CalendarDate(now.getFullYear(), now.getMonth() + 1, now.getDate());
78
+ timeStr = `${pad(now.getHours())}:${pad(now.getMinutes())}`;
79
+ }
80
+
81
+ async function submit() {
82
+ const runAt = buildRunAt();
83
+ if (!runAt) {
84
+ toast.error('Pick a date and time');
85
+ return;
86
+ }
87
+ runAt.setSeconds(0, 0);
88
+ // Reject genuinely past minutes; the current minute is allowed (runs on the next tick).
89
+ const currentMinute = new Date();
90
+ currentMinute.setSeconds(0, 0);
91
+ if (runAt.getTime() < currentMinute.getTime()) {
92
+ toast.error('Pick a time in the future');
93
+ return;
94
+ }
95
+
96
+ submitting = true;
97
+ try {
98
+ const res = await documents.schedule(documentId, { action, runAt: runAt.toISOString() });
99
+ if (res.success) {
100
+ toast.success(
101
+ `${action === 'publish' ? 'Publish' : 'Unpublish'} scheduled for ${runAt.toLocaleString()}`
102
+ );
103
+ open = false;
104
+ if (res.data) onScheduled?.(res.data);
105
+ } else {
106
+ toast.error(res.error || res.message || 'Failed to schedule');
107
+ }
108
+ } catch (err) {
109
+ toast.error(err instanceof Error ? err.message : 'Failed to schedule');
110
+ } finally {
111
+ submitting = false;
112
+ }
113
+ }
114
+ </script>
115
+
116
+ <Dialog.Root bind:open>
117
+ <Dialog.Content class="max-w-md">
118
+ <Dialog.Header>
119
+ <Dialog.Title>Schedule {actionVerb}</Dialog.Title>
120
+ <Dialog.Description>
121
+ Select when this document should be {action === 'publish' ? 'published' : 'unpublished'}.
122
+ </Dialog.Description>
123
+ </Dialog.Header>
124
+
125
+ <div class="space-y-4 py-2">
126
+ <div class="space-y-1.5">
127
+ <Label>Schedule on</Label>
128
+ <Popover.Root bind:open={pickerOpen}>
129
+ <Popover.Trigger
130
+ class="border-input bg-background hover:bg-muted/40 focus-visible:ring-ring flex w-full items-center justify-between rounded-md border px-3 py-2 text-left text-sm focus-visible:ring-1 focus-visible:outline-none"
131
+ >
132
+ <span>{fieldLabel}</span>
133
+ <CalendarIcon class="text-muted-foreground h-4 w-4" />
134
+ </Popover.Trigger>
135
+ <Popover.Content class="z-[70] w-[19rem] p-0" align="start">
136
+ <Calendar
137
+ type="single"
138
+ bind:value={dateValue}
139
+ minValue={minDate}
140
+ class="w-full rounded-b-none [--cell-size:2.4rem]"
141
+ />
142
+ <div class="border-rule flex flex-wrap items-center gap-x-2 gap-y-1 border-t p-3">
143
+ <input
144
+ type="time"
145
+ bind:value={timeStr}
146
+ class="border-input bg-background focus-visible:ring-ring rounded-md border px-2 py-1 text-sm focus-visible:ring-1 focus-visible:outline-none"
147
+ />
148
+ <button
149
+ type="button"
150
+ class="text-muted-foreground hover:text-foreground text-xs underline-offset-2 hover:underline"
151
+ onclick={setToCurrentTime}
152
+ >
153
+ Set to current time
154
+ </button>
155
+ <span class="text-muted-foreground ml-auto flex items-center gap-1 text-xs">
156
+ <Globe class="h-3 w-3" />
157
+ {tzLabel}
158
+ </span>
159
+ </div>
160
+ </Popover.Content>
161
+ </Popover.Root>
162
+ </div>
163
+ </div>
164
+
165
+ <Dialog.Footer>
166
+ <Button variant="ghost" size="sm" onclick={() => (open = false)} disabled={submitting}>
167
+ Cancel
168
+ </Button>
169
+ <Button size="sm" onclick={submit} disabled={submitting}>
170
+ {submitting ? 'Scheduling…' : 'Schedule'}
171
+ </Button>
172
+ </Dialog.Footer>
173
+ </Dialog.Content>
174
+ </Dialog.Root>
@@ -0,0 +1,20 @@
1
+ interface Props {
2
+ open: boolean;
3
+ documentId: string;
4
+ /**
5
+ * The action to schedule. Derived from the editor's active perspective by the caller:
6
+ * viewing the Draft tab → 'publish' (send this draft live later); viewing the Published
7
+ * tab → 'unpublish' (take it down later). No in-dialog toggle — the tab is the intent.
8
+ */
9
+ action: 'publish' | 'unpublish';
10
+ onScheduled?: (job: {
11
+ jobId: string;
12
+ type: string;
13
+ runAt: string;
14
+ status: string;
15
+ }) => void;
16
+ }
17
+ declare const ScheduleDialog: import("svelte").Component<Props, {}, "open">;
18
+ type ScheduleDialog = ReturnType<typeof ScheduleDialog>;
19
+ export default ScheduleDialog;
20
+ //# sourceMappingURL=ScheduleDialog.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScheduleDialog.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/ScheduleDialog.svelte.ts"],"names":[],"mappings":"AAkBC,UAAU,KAAK;IACd,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC5F;AAwJF,QAAA,MAAM,cAAc,+CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -74,7 +74,7 @@
74
74
  return getSchemaByName(schemas, typeName);
75
75
  }
76
76
 
77
- const isBlockArray = $derived(field.of.some((ref) => ref.type === 'block'));
77
+ const isBlockArray = $derived(field.of?.some((ref) => ref.type === 'block') ?? false);
78
78
  // Rich text (TipTap) is by far the largest field dependency. Load it only when
79
79
  // the array actually holds block content, so document editors without a
80
80
  // rich-text field — and every admin page that never renders one — stay off
@@ -534,6 +534,7 @@
534
534
  {@const sortable = createSortable({ id: item._key, index, disabled: readonly })}
535
535
  <div
536
536
  {@attach sortable.attach}
537
+ data-array-index={index}
537
538
  class="flex items-center gap-1"
538
539
  class:opacity-50={sortable.isDragging}
539
540
  >
@@ -942,6 +943,7 @@
942
943
  {@const sortable = createSortable({ id: item._key, index, disabled: readonly })}
943
944
  <div
944
945
  {@attach sortable.attach}
946
+ data-array-index={index}
945
947
  class="border-border/50 bg-background hover:bg-muted/50 flex min-h-11 items-center gap-1 rounded border pl-1 transition-colors"
946
948
  class:opacity-50={sortable.isDragging}
947
949
  >
@@ -961,6 +963,7 @@
961
963
  supplies a `subtitle` field, render it on a second line. -->
962
964
  <button
963
965
  class="flex flex-1 cursor-pointer items-center gap-2 self-stretch truncate px-1 py-2 text-left text-sm"
966
+ data-array-item-index={index}
964
967
  onclick={() => handleEditItem(index)}
965
968
  >
966
969
  <span
@@ -104,11 +104,22 @@
104
104
  let allDocs = $state<any[]>([]);
105
105
  let allDocsFetched = $state(false);
106
106
 
107
+ /**
108
+ * The picker filters CLIENT-SIDE over this cache, so the fetch limit is also the
109
+ * search limit: anything beyond it can never be found by typing. At 20 that made
110
+ * documents silently unreachable in any collection larger than a screenful (a menu
111
+ * of 36 dishes could only ever surface the first 20). Fetch the API maximum instead.
112
+ *
113
+ * This raises the ceiling rather than removing it — collections beyond `PICKER_LIMIT`
114
+ * still need server-side search, which the list endpoint doesn't expose today.
115
+ */
116
+ const PICKER_LIMIT = 200;
117
+
107
118
  async function fetchAllDocs() {
108
119
  if (allDocsFetched || !targetType) return;
109
120
  loading = true;
110
121
  try {
111
- const result = await documents.list({ docType: targetType, limit: 20 });
122
+ const result = await documents.list({ docType: targetType, limit: PICKER_LIMIT });
112
123
  if (result.success && result.data) {
113
124
  allDocs = result.data;
114
125
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ReferenceField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ReferenceField.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAwC,MAAM,wBAAwB,CAAC;AAUzF,KAAK,cAAc,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,UAAU,KAAK;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AA4VF,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"ReferenceField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ReferenceField.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAwC,MAAM,wBAAwB,CAAC;AAUzF,KAAK,cAAc,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,UAAU,KAAK;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAuWF,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export { default as AdminApp } from './AdminApp.svelte';
2
2
  export { default as Sidebar } from './layout/Sidebar.svelte';
3
3
  export { default as DocumentEditor } from './admin/DocumentEditor.svelte';
4
+ export { default as AgentChat } from './admin/AgentChat.svelte';
4
5
  export { default as SchemaField } from './admin/SchemaField.svelte';
5
6
  export { default as MediaBrowser } from './admin/MediaBrowser.svelte';
6
7
  export { default as AssetBrowserModal } from './admin/AssetBrowserModal.svelte';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/components/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAGtF,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/components/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAGtF,cAAc,gBAAgB,CAAC"}
@@ -6,6 +6,7 @@ export { default as AdminApp } from './AdminApp.svelte';
6
6
  export { default as Sidebar } from './layout/Sidebar.svelte';
7
7
  // Admin components (will be migrated from your current structure)
8
8
  export { default as DocumentEditor } from './admin/DocumentEditor.svelte';
9
+ export { default as AgentChat } from './admin/AgentChat.svelte';
9
10
  export { default as SchemaField } from './admin/SchemaField.svelte';
10
11
  export { default as MediaBrowser } from './admin/MediaBrowser.svelte';
11
12
  export { default as AssetBrowserModal } from './admin/AssetBrowserModal.svelte';
@@ -111,7 +111,7 @@
111
111
  <SidebarMenuButton
112
112
  {...props}
113
113
  size="lg"
114
- class="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground"
114
+ class="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground cursor-pointer"
115
115
  disabled={isSwitching}
116
116
  >
117
117
  {#if activeOrganization}
@@ -119,7 +119,7 @@
119
119
  <img
120
120
  src={getOrganizationLogo(activeOrganization)!}
121
121
  alt={activeOrganization.name}
122
- class="aspect-square size-8 rounded-lg object-cover"
122
+ class="aspect-square size-8 object-cover"
123
123
  />
124
124
  {:else}
125
125
  <div
@@ -275,7 +275,7 @@
275
275
  {#if canCreateOrganization}
276
276
  <DropdownMenuSeparator />
277
277
  <DropdownMenuItem
278
- class="gap-2 p-2"
278
+ class="cursor-pointer gap-2 p-2"
279
279
  onclick={() => goto('/admin/organizations?action=create')}
280
280
  >
281
281
  <div class="flex size-6 items-center justify-center rounded-md border bg-transparent">
@@ -2,9 +2,10 @@
2
2
  import { SidebarProvider, SidebarInset, SidebarTrigger } from '@aphexcms/ui/shadcn/sidebar';
3
3
  import { Separator } from '@aphexcms/ui/shadcn/separator';
4
4
  import { Button } from '@aphexcms/ui/shadcn/button';
5
+ import * as Sheet from '@aphexcms/ui/shadcn/sheet';
5
6
  import { ModeWatcher } from 'mode-watcher';
6
7
  import { Toaster } from '@aphexcms/ui/shadcn/sonner';
7
- import { Sun, Moon } from '@lucide/svelte';
8
+ import { Sun, Moon, Sparkles } from '@lucide/svelte';
8
9
  import { toggleMode } from 'mode-watcher';
9
10
  import { page } from '$app/state';
10
11
  import type { SidebarData } from '../../types/sidebar';
@@ -13,6 +14,7 @@
13
14
  import { setAdminSlots } from '../../admin/slots.svelte';
14
15
  import type { AdminArea } from '../../admin/types';
15
16
  import type { CMSPlugin, AdminToolPart } from '../../plugins/types';
17
+ import AgentChat from '../admin/AgentChat.svelte';
16
18
 
17
19
  // Admin extension-slot registry, published to the whole admin subtree. The
18
20
  // navbar renders `navbar-start` / `navbar-end` outlets; the document editor (and
@@ -24,6 +26,7 @@
24
26
  onSignOut?: () => void | Promise<void>;
25
27
  children: any;
26
28
  enableGraphiQL?: boolean;
29
+ enableAssistant?: boolean;
27
30
  activeTab?: { value: AdminArea };
28
31
  onTabChange?: (value: string) => void;
29
32
  /** Plugin registry — used to render sidebar-placed admin tools as persistent nav. */
@@ -35,10 +38,12 @@
35
38
  onSignOut,
36
39
  children,
37
40
  enableGraphiQL = false,
41
+ enableAssistant = false,
38
42
  activeTab,
39
43
  onTabChange,
40
44
  plugins = []
41
45
  }: Props = $props();
46
+ let assistantOpen = $state(false);
42
47
 
43
48
  function switchTab(value: AdminArea) {
44
49
  if (onTabChange) {
@@ -151,8 +156,27 @@
151
156
  </div>
152
157
  </div>
153
158
  </header>
154
- <main class="flex flex-1 flex-col overflow-hidden pt-0">
159
+ <main class="flex flex-1 flex-col overflow-x-hidden overflow-y-auto pt-0">
155
160
  {@render children()}
156
161
  </main>
157
162
  </SidebarInset>
163
+ {#if enableAssistant && !assistantOpen}
164
+ <Button
165
+ size="icon-lg"
166
+ class="fixed right-5 bottom-20 z-50 size-12 rounded-full shadow-lg sm:right-6"
167
+ onclick={() => (assistantOpen = true)}
168
+ aria-label="Open Aphex Assistant"
169
+ >
170
+ <Sparkles class="size-5" />
171
+ </Button>
172
+ {/if}
173
+ <Sheet.Root bind:open={assistantOpen}>
174
+ <Sheet.Content class="w-full gap-0 p-0 sm:max-w-xl">
175
+ <Sheet.Header class="sr-only">
176
+ <Sheet.Title>Aphex Assistant</Sheet.Title>
177
+ <Sheet.Description>CMS-aware answers and content tools</Sheet.Description>
178
+ </Sheet.Header>
179
+ <AgentChat embedded />
180
+ </Sheet.Content>
181
+ </Sheet.Root>
158
182
  </SidebarProvider>
@@ -6,6 +6,7 @@ type Props = {
6
6
  onSignOut?: () => void | Promise<void>;
7
7
  children: any;
8
8
  enableGraphiQL?: boolean;
9
+ enableAssistant?: boolean;
9
10
  activeTab?: {
10
11
  value: AdminArea;
11
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/layout/Sidebar.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAGnE,KAAK,KAAK,GAAG;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,qFAAqF;IACrF,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB,CAAC;AAuIH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Sidebar.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/layout/Sidebar.svelte.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAInE,KAAK,KAAK,GAAG;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,qFAAqF;IACrF,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB,CAAC;AAyJH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
@@ -40,7 +40,7 @@
40
40
  <SidebarMenuButton
41
41
  {...props}
42
42
  size="lg"
43
- class="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground"
43
+ class="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground cursor-pointer"
44
44
  >
45
45
  {#if user.image}
46
46
  <img
@@ -76,22 +76,22 @@
76
76
  <p class="text-muted-foreground text-xs">{user.email}</p>
77
77
  </div>
78
78
  <DropdownMenuSeparator />
79
- <DropdownMenuItem onclick={() => goto('/admin/settings/account')}>
79
+ <DropdownMenuItem class="cursor-pointer" onclick={() => goto('/admin/settings/account')}>
80
80
  <Settings class="mr-2 h-4 w-4" />
81
81
  <span>Account Settings</span>
82
82
  </DropdownMenuItem>
83
- <DropdownMenuItem onclick={() => goto('/invitations')}>
83
+ <DropdownMenuItem class="cursor-pointer" onclick={() => goto('/invitations')}>
84
84
  <Mail class="mr-2 h-4 w-4" />
85
85
  <span>Invitations</span>
86
86
  </DropdownMenuItem>
87
87
  {#if user.role === 'super_admin'}
88
- <DropdownMenuItem onclick={() => goto('/god-mode')}>
88
+ <DropdownMenuItem class="cursor-pointer" onclick={() => goto('/god-mode')}>
89
89
  <Shield class="mr-2 h-4 w-4" />
90
90
  <span>God Mode</span>
91
91
  </DropdownMenuItem>
92
92
  {/if}
93
93
  <DropdownMenuSeparator />
94
- <DropdownMenuItem class="text-destructive" onclick={handleSignOut}>
94
+ <DropdownMenuItem class="text-destructive cursor-pointer" onclick={handleSignOut}>
95
95
  <LogOut class="mr-2 h-4 w-4" />
96
96
  <span>Sign Out</span>
97
97
  </DropdownMenuItem>
@@ -0,0 +1,17 @@
1
+ import type { AgentChangeSet, AgentChangeSetWithOperations, AgentOperation, CreateAgentChangeSetInput, CompleteAgentChangeSetInput, RecordAgentOperationInput, ListAgentChangeSetsOptions } from '../../types/agent-change-sets.js';
2
+ import type { Page } from '../../types/events.js';
3
+ export interface AgentChangeSetAdapter {
4
+ /** One row per agent turn, created eagerly before the model is called. */
5
+ createChangeSet(input: CreateAgentChangeSetInput): Promise<AgentChangeSet>;
6
+ /** Record one mutating tool call's outcome against an existing change-set. */
7
+ recordOperation(input: RecordAgentOperationInput): Promise<AgentOperation>;
8
+ /** Finalize a change-set once the turn ends, with its accumulated token totals. */
9
+ completeChangeSet(organizationId: string, id: string, input: CompleteAgentChangeSetInput): Promise<void>;
10
+ /** Read one change-set with its operations (org-scoped) — what the undo endpoint acts on. */
11
+ getChangeSet(organizationId: string, id: string): Promise<AgentChangeSetWithOperations | null>;
12
+ /** List change-sets for the org, newest first (the activity view's "Agent Changes" tab).
13
+ * Includes each change-set's operations so the list can show what a turn did (e.g.
14
+ * "create_document") without a per-row detail fetch. */
15
+ listChangeSets(options: ListAgentChangeSetsOptions): Promise<Page<AgentChangeSetWithOperations>>;
16
+ }
17
+ //# sourceMappingURL=agent-change-sets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-change-sets.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/agent-change-sets.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACX,cAAc,EACd,4BAA4B,EAC5B,cAAc,EACd,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,WAAW,qBAAqB;IACrC,0EAA0E;IAC1E,eAAe,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3E,8EAA8E;IAC9E,eAAe,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3E,mFAAmF;IACnF,iBAAiB,CAChB,cAAc,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,2BAA2B,GAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,6FAA6F;IAC7F,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAC;IAC/F;;4DAEwD;IACxD,cAAc,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;CACjG"}
@@ -0,0 +1 @@
1
+ export {};
@@ -22,16 +22,38 @@ export interface UpdateDocumentData {
22
22
  draftData?: any;
23
23
  status?: string;
24
24
  updatedBy?: string;
25
+ /** Compare-and-swap guard: the revision the caller last read. Omit to skip
26
+ * the check (existing unconditional-write behavior). */
27
+ expectedRevision?: number;
28
+ }
29
+ /**
30
+ * Thrown when a write's `expectedRevision` no longer matches the document's
31
+ * current revision — another writer (a second tab, an AI agent, a concurrent
32
+ * request) saved in between the caller's read and this write. Callers should
33
+ * surface this distinctly from a validation error: re-fetch and let the user
34
+ * decide, never silently retry with an overwrite.
35
+ */
36
+ export declare class RevisionConflictError extends Error {
37
+ readonly documentId: string;
38
+ readonly expectedRevision: number;
39
+ readonly currentRevision: number;
40
+ constructor(message: string, documentId: string, expectedRevision: number, currentRevision: number);
25
41
  }
26
42
  /**
27
43
  * Document adapter interface for document-specific operations
28
44
  */
29
45
  export interface DocumentAdapter {
30
46
  createDocument(data: CreateDocumentData): Promise<Document>;
31
- updateDocDraft(organizationId: string, id: string, data: any, updatedBy?: string): Promise<Document | null>;
47
+ /**
48
+ * @param expectedRevision - Compare-and-swap guard. When provided, the
49
+ * update only applies if the document's current revision matches;
50
+ * otherwise implementations throw {@link RevisionConflictError}. Omit to
51
+ * write unconditionally (last-write-wins, the pre-CAS behavior).
52
+ */
53
+ updateDocDraft(organizationId: string, id: string, data: any, updatedBy?: string, expectedRevision?: number): Promise<Document | null>;
32
54
  deleteDocById(organizationId: string, id: string): Promise<boolean>;
33
- publishDoc(organizationId: string, id: string): Promise<Document | null>;
34
- unpublishDoc(organizationId: string, id: string): Promise<Document | null>;
55
+ publishDoc(organizationId: string, id: string, expectedRevision?: number): Promise<Document | null>;
56
+ unpublishDoc(organizationId: string, id: string, expectedRevision?: number): Promise<Document | null>;
35
57
  countDocsByType(organizationId: string, type: string): Promise<number>;
36
58
  getDocCountsByType(organizationId: string): Promise<Record<string, number>>;
37
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/document.ts"],"names":[],"mappings":"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"}
@@ -1 +1,19 @@
1
- export {};
1
+ /**
2
+ * Thrown when a write's `expectedRevision` no longer matches the document's
3
+ * current revision — another writer (a second tab, an AI agent, a concurrent
4
+ * request) saved in between the caller's read and this write. Callers should
5
+ * surface this distinctly from a validation error: re-fetch and let the user
6
+ * decide, never silently retry with an overwrite.
7
+ */
8
+ export class RevisionConflictError extends Error {
9
+ documentId;
10
+ expectedRevision;
11
+ currentRevision;
12
+ constructor(message, documentId, expectedRevision, currentRevision) {
13
+ super(message);
14
+ this.documentId = documentId;
15
+ this.expectedRevision = expectedRevision;
16
+ this.currentRevision = currentRevision;
17
+ this.name = 'RevisionConflictError';
18
+ }
19
+ }