@rubytech/create-sitedesk-code 0.1.523 → 0.1.525

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 (804) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts +99 -0
  3. package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts.map +1 -0
  4. package/payload/platform/lib/agent-dispatch-rule/dist/index.js +228 -0
  5. package/payload/platform/lib/agent-dispatch-rule/dist/index.js.map +1 -0
  6. package/payload/platform/lib/agent-dispatch-rule/package.json +6 -0
  7. package/payload/platform/lib/agent-dispatch-rule/src/__tests__/rule.test.ts +384 -0
  8. package/payload/platform/lib/agent-dispatch-rule/src/index.ts +269 -0
  9. package/payload/platform/lib/agent-dispatch-rule/tsconfig.json +9 -0
  10. package/payload/platform/lib/agent-dispatch-rule/vitest.config.ts +9 -0
  11. package/payload/platform/lib/routine-templates/dist/roster.js +1 -1
  12. package/payload/platform/lib/routine-templates/src/roster.ts +1 -1
  13. package/payload/platform/package.json +2 -2
  14. package/payload/platform/plugins/admin/PLUGIN.md +1 -0
  15. package/payload/platform/plugins/admin/hooks/__tests__/mailbox-inject.test.sh +501 -0
  16. package/payload/platform/plugins/admin/hooks/mailbox-inject.sh +299 -0
  17. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +54 -21
  18. package/payload/platform/plugins/admin/skills/superpowers-sprint/SKILL.md +26 -0
  19. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
  20. package/payload/platform/plugins/docs/references/admin-ui.md +49 -18
  21. package/payload/platform/plugins/docs/references/workflows.md +4 -2
  22. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js +72 -1
  23. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js.map +1 -1
  24. package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js +4 -1
  25. package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js.map +1 -1
  26. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
  27. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +4 -2
  28. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
  29. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts +0 -6
  30. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts.map +1 -1
  31. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js +24 -2
  32. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js.map +1 -1
  33. package/payload/platform/plugins/email/references/email-reference.md +1 -1
  34. package/payload/platform/plugins/memory/PLUGIN.md +10 -0
  35. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js +5 -1
  36. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js.map +1 -1
  37. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.d.ts +2 -0
  38. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.d.ts.map +1 -0
  39. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.js +141 -0
  40. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.js.map +1 -0
  41. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts +1 -1
  42. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts.map +1 -1
  43. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js +6 -0
  44. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js.map +1 -1
  45. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.d.ts +45 -0
  46. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.d.ts.map +1 -0
  47. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.js +122 -0
  48. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.js.map +1 -0
  49. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-by-name.test.js +26 -0
  50. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-by-name.test.js.map +1 -1
  51. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.d.ts +2 -0
  52. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.d.ts.map +1 -0
  53. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.js +201 -0
  54. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.js.map +1 -0
  55. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -1
  56. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +89 -33
  57. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
  58. package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -0
  59. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.d.ts +2 -0
  60. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.d.ts.map +1 -0
  61. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.js +322 -0
  62. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.js.map +1 -0
  63. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mailbox-registry.test.js +21 -1
  64. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mailbox-registry.test.js.map +1 -1
  65. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.d.ts +13 -0
  66. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.d.ts.map +1 -1
  67. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.js +16 -0
  68. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.js.map +1 -1
  69. package/payload/platform/plugins/outlook/mcp/dist/index.js +5 -5
  70. package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
  71. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts.map +1 -1
  72. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +6 -0
  73. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
  74. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts +7 -0
  75. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts.map +1 -1
  76. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js +122 -8
  77. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js.map +1 -1
  78. package/payload/platform/plugins/scheduling/PLUGIN.md +26 -1
  79. package/payload/platform/plugins/scheduling/mcp/dist/index.js +6 -4
  80. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  81. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/agent-dispatch.test.js +8 -36
  82. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/agent-dispatch.test.js.map +1 -1
  83. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.d.ts +2 -0
  84. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.d.ts.map +1 -0
  85. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.js +148 -0
  86. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.js.map +1 -0
  87. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.d.ts +10 -65
  88. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.d.ts.map +1 -1
  89. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.js +29 -122
  90. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.js.map +1 -1
  91. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts +83 -6
  92. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts.map +1 -1
  93. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js +90 -5
  94. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js.map +1 -1
  95. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js +111 -2
  96. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js.map +1 -1
  97. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +38 -0
  98. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
  99. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +116 -0
  100. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
  101. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +13 -1
  102. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  103. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js +81 -8
  104. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
  105. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-agent.test.js +39 -0
  106. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-agent.test.js.map +1 -1
  107. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.d.ts +2 -0
  108. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.d.ts.map +1 -0
  109. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js +305 -0
  110. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js.map +1 -0
  111. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
  112. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +9 -1
  113. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  114. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts +46 -1
  115. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -1
  116. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +172 -4
  117. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
  118. package/payload/platform/plugins/scheduling/skills/routine-control/SKILL.md +48 -0
  119. package/payload/platform/plugins/sweep/skills/email-graph-sweep/SKILL.md +21 -7
  120. package/payload/platform/scripts/__tests__/check-canonical-tool-names.test.sh +162 -0
  121. package/payload/platform/scripts/__tests__/check-no-task-id-leaks.test.sh +53 -0
  122. package/payload/platform/scripts/__tests__/mailbox-inject-registered.test.sh +80 -0
  123. package/payload/platform/scripts/__tests__/task-id-citation.test.sh +72 -0
  124. package/payload/platform/scripts/check-canonical-tool-names.mjs +36 -4
  125. package/payload/platform/scripts/check-no-task-id-leaks.mjs +80 -62
  126. package/payload/platform/scripts/lib/__tests__/account-settings-mailbox-inject.test.sh +166 -0
  127. package/payload/platform/scripts/lib/account-settings-mailbox-inject.sh +91 -0
  128. package/payload/platform/scripts/lib/canonical-tool-names.mjs +130 -26
  129. package/payload/platform/scripts/lib/provision-account-dir.sh +1 -0
  130. package/payload/platform/scripts/lib/task-id-citation.mjs +67 -0
  131. package/payload/platform/scripts/setup-account.sh +15 -0
  132. package/payload/server/public/activity.html +5 -5
  133. package/payload/server/public/agents.html +4 -4
  134. package/payload/server/public/assets/{AdminLoginScreens-uknqh2Pm.js → AdminLoginScreens-BgDjueVe.js} +1 -1
  135. package/payload/server/public/assets/AdminLoginScreens-BgDjueVe.js.br +0 -0
  136. package/payload/server/public/assets/AdminLoginScreens-BgDjueVe.js.gz +0 -0
  137. package/payload/server/public/assets/{AdminShell-GqtMImyQ.js → AdminShell-YctTrR-D.js} +1 -1
  138. package/payload/server/public/assets/AdminShell-YctTrR-D.js.br +0 -0
  139. package/payload/server/public/assets/AdminShell-YctTrR-D.js.gz +0 -0
  140. package/payload/server/public/assets/{activity-B4KfMJqO.js → activity-DGQt5ys_.js} +1 -1
  141. package/payload/server/public/assets/activity-DGQt5ys_.js.br +0 -0
  142. package/payload/server/public/assets/activity-DGQt5ys_.js.gz +0 -0
  143. package/payload/server/public/assets/admin-DnUxbB3P.js +1 -0
  144. package/payload/server/public/assets/admin-DnUxbB3P.js.br +0 -0
  145. package/payload/server/public/assets/admin-DnUxbB3P.js.gz +0 -0
  146. package/payload/server/public/assets/agents-Bc2LZjwC.js +1 -0
  147. package/payload/server/public/assets/agents-Bc2LZjwC.js.br +0 -0
  148. package/payload/server/public/assets/agents-Bc2LZjwC.js.gz +0 -0
  149. package/payload/server/public/assets/{arc-DaI5MLTq.js → arc-DaudCnXg.js} +1 -1
  150. package/payload/server/public/assets/arc-DaudCnXg.js.br +0 -0
  151. package/payload/server/public/assets/arc-DaudCnXg.js.gz +0 -0
  152. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js +1 -0
  153. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js.br +0 -0
  154. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CBGVUEN9.js → architectureDiagram-Q4EWVU46-BEEC3s7i.js} +1 -1
  155. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.br +0 -0
  156. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.gz +0 -0
  157. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DS6dS4GZ.js → blockDiagram-DXYQGD6D-BIWyfb18.js} +1 -1
  158. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.br +0 -0
  159. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.gz +0 -0
  160. package/payload/server/public/assets/{browser-B3hSzI3O.js → browser-BtF7SzvG.js} +1 -1
  161. package/payload/server/public/assets/browser-BtF7SzvG.js.br +0 -0
  162. package/payload/server/public/assets/browser-BtF7SzvG.js.gz +0 -0
  163. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-hBSBUZPt.js → c4Diagram-AHTNJAMY--h6oE2cv.js} +1 -1
  164. package/payload/server/public/assets/c4Diagram-AHTNJAMY--h6oE2cv.js.br +0 -0
  165. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-hBSBUZPt.js.gz → c4Diagram-AHTNJAMY--h6oE2cv.js.gz} +0 -0
  166. package/payload/server/public/assets/{calendar-BggxXxhS.js → calendar-D25EhXbD.js} +1 -1
  167. package/payload/server/public/assets/calendar-D25EhXbD.js.br +0 -0
  168. package/payload/server/public/assets/calendar-D25EhXbD.js.gz +0 -0
  169. package/payload/server/public/assets/channel-TwxCDSpK.js +1 -0
  170. package/payload/server/public/assets/channel-TwxCDSpK.js.br +0 -0
  171. package/payload/server/public/assets/chat-z4jsHFXg.js +1 -0
  172. package/payload/server/public/assets/chat-z4jsHFXg.js.br +0 -0
  173. package/payload/server/public/assets/chat-z4jsHFXg.js.gz +0 -0
  174. package/payload/server/public/assets/chevron-left-BD09SN6R.js +1 -0
  175. package/payload/server/public/assets/chevron-right-ChmWeo7T.js +1 -0
  176. package/payload/server/public/assets/chevron-right-ChmWeo7T.js.br +0 -0
  177. package/payload/server/public/assets/{chunk-2KRD3SAO-B6koUoB7.js → chunk-2KRD3SAO-BwEVlnxo.js} +1 -1
  178. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.br +0 -0
  179. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.gz +0 -0
  180. package/payload/server/public/assets/{chunk-336JU56O-BF6BRh8u.js → chunk-336JU56O-DQddTATH.js} +2 -2
  181. package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.br +0 -0
  182. package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.gz +0 -0
  183. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js +1 -0
  184. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.br +0 -0
  185. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.gz +0 -0
  186. package/payload/server/public/assets/{chunk-4BX2VUAB-7sO95xR2.js → chunk-4BX2VUAB-C5p3xTC6.js} +1 -1
  187. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.br +0 -0
  188. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.gz +0 -0
  189. package/payload/server/public/assets/{chunk-4TB4RGXK-GCTndJYx.js → chunk-4TB4RGXK-gClfNc1w.js} +1 -1
  190. package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.br +0 -0
  191. package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.gz +0 -0
  192. package/payload/server/public/assets/{chunk-55IACEB6-ggIJf_TC.js → chunk-55IACEB6-DDU_m1ra.js} +1 -1
  193. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.br +0 -0
  194. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.gz +0 -0
  195. package/payload/server/public/assets/{chunk-5FUZZQ4R-DeGmkimt.js → chunk-5FUZZQ4R-CZ2jQWNR.js} +1 -1
  196. package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.br +0 -0
  197. package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.gz +0 -0
  198. package/payload/server/public/assets/{chunk-5PVQY5BW-aFIQKk_U.js → chunk-5PVQY5BW-kcZ5kfTg.js} +1 -1
  199. package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.br +0 -0
  200. package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.gz +0 -0
  201. package/payload/server/public/assets/{chunk-67CJDMHE-LS8rUbii.js → chunk-67CJDMHE-9W0Qv0jm.js} +1 -1
  202. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.br +0 -0
  203. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.gz +0 -0
  204. package/payload/server/public/assets/{chunk-7N4EOEYR-JKOVngS0.js → chunk-7N4EOEYR-B3gqydR3.js} +1 -1
  205. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.br +0 -0
  206. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.gz +0 -0
  207. package/payload/server/public/assets/{chunk-AA7GKIK3-CoXnTVK6.js → chunk-AA7GKIK3-DW8a-2NK.js} +1 -1
  208. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.br +4 -0
  209. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.gz +0 -0
  210. package/payload/server/public/assets/{chunk-BSJP7CBP-CcsqObFg.js → chunk-BSJP7CBP-DqXIO_5R.js} +1 -1
  211. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.br +0 -0
  212. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.gz +0 -0
  213. package/payload/server/public/assets/{chunk-CIAEETIT-CpsybR7q.js → chunk-CIAEETIT-BMJfgj2u.js} +1 -1
  214. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.br +0 -0
  215. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.gz +0 -0
  216. package/payload/server/public/assets/{chunk-EDXVE4YY-BZ2I9PSq.js → chunk-EDXVE4YY-BxdLPk0b.js} +1 -1
  217. package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.br +0 -0
  218. package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.gz +0 -0
  219. package/payload/server/public/assets/{chunk-ENJZ2VHE-DbTwt6OZ.js → chunk-ENJZ2VHE-Cfe2DCjQ.js} +1 -1
  220. package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.br +0 -0
  221. package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.gz +0 -0
  222. package/payload/server/public/assets/{chunk-FMBD7UC4-D27VnSCa.js → chunk-FMBD7UC4-CdPjwbtf.js} +1 -1
  223. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.br +0 -0
  224. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.gz +0 -0
  225. package/payload/server/public/assets/{chunk-FOC6F5B3-C0tU2UFl.js → chunk-FOC6F5B3-Dl6l1KAh.js} +1 -1
  226. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.br +0 -0
  227. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.gz +0 -0
  228. package/payload/server/public/assets/{chunk-ICPOFSXX-UPPu2OIq.js → chunk-ICPOFSXX-PnsGrqtx.js} +2 -2
  229. package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.br +0 -0
  230. package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.gz +0 -0
  231. package/payload/server/public/assets/{chunk-K5T4RW27-DIKxqyYw.js → chunk-K5T4RW27--g29_wjW.js} +1 -1
  232. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.br +0 -0
  233. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.gz +0 -0
  234. package/payload/server/public/assets/{chunk-KGLVRYIC-CiL4YVLo.js → chunk-KGLVRYIC-CI77ENeO.js} +1 -1
  235. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.br +3 -0
  236. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.gz +0 -0
  237. package/payload/server/public/assets/{chunk-LIHQZDEY-ejKezVlD.js → chunk-LIHQZDEY-CE-XByg6.js} +1 -1
  238. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.br +0 -0
  239. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.gz +0 -0
  240. package/payload/server/public/assets/{chunk-ORNJ4GCN-Cc0vqc-D.js → chunk-ORNJ4GCN-DkjJQQSm.js} +1 -1
  241. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.br +0 -0
  242. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.gz +0 -0
  243. package/payload/server/public/assets/{chunk-OYMX7WX6-Drxn1qG0.js → chunk-OYMX7WX6-DhogFeD7.js} +1 -1
  244. package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.br +0 -0
  245. package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.gz +0 -0
  246. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js +1 -0
  247. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.br +0 -0
  248. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.gz +0 -0
  249. package/payload/server/public/assets/{chunk-U2HBQHQK-DnbQIkRP.js → chunk-U2HBQHQK-CeaRXuiO.js} +1 -1
  250. package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.br +0 -0
  251. package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.gz +0 -0
  252. package/payload/server/public/assets/{chunk-X2U36JSP-CauTSVWg.js → chunk-X2U36JSP-BqxXeOqf.js} +1 -1
  253. package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.br +0 -0
  254. package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.gz +0 -0
  255. package/payload/server/public/assets/{chunk-XPW4576I-DZqqB9Zi.js → chunk-XPW4576I-DtqJwn2x.js} +1 -1
  256. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.br +0 -0
  257. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.gz +0 -0
  258. package/payload/server/public/assets/{chunk-YZCP3GAM-BGHo4Li-.js → chunk-YZCP3GAM-COBlEwQw.js} +1 -1
  259. package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.br +0 -0
  260. package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.gz +0 -0
  261. package/payload/server/public/assets/{chunk-ZZ45TVLE-DWGJKPd7.js → chunk-ZZ45TVLE-CcL088y6.js} +1 -1
  262. package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.br +0 -0
  263. package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.gz +0 -0
  264. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js +1 -0
  265. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.br +0 -0
  266. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.gz +0 -0
  267. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js +1 -0
  268. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.br +0 -0
  269. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.gz +0 -0
  270. package/payload/server/public/assets/clock-Yqf7Ke7I.js +1 -0
  271. package/payload/server/public/assets/clock-Yqf7Ke7I.js.br +0 -0
  272. package/payload/server/public/assets/clock-Yqf7Ke7I.js.gz +0 -0
  273. package/payload/server/public/assets/clone-B3vq32j7.js +1 -0
  274. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-D-95BzXL.js → cose-bilkent-S5V4N54A-kEHVkDNn.js} +1 -1
  275. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.br +0 -0
  276. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.gz +0 -0
  277. package/payload/server/public/assets/{dagre-BZYNBHvT.js → dagre-D2wUw1zC.js} +1 -1
  278. package/payload/server/public/assets/dagre-D2wUw1zC.js.br +0 -0
  279. package/payload/server/public/assets/dagre-D2wUw1zC.js.gz +0 -0
  280. package/payload/server/public/assets/{dagre-KV5264BT-DyU4HQLQ.js → dagre-KV5264BT-BWfTDwEs.js} +1 -1
  281. package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.br +0 -0
  282. package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.gz +0 -0
  283. package/payload/server/public/assets/data-RmnKj5nC.js +1 -0
  284. package/payload/server/public/assets/data-RmnKj5nC.js.br +2 -0
  285. package/payload/server/public/assets/data-RmnKj5nC.js.gz +0 -0
  286. package/payload/server/public/assets/{diagram-5BDNPKRD-CCttJ9XA.js → diagram-5BDNPKRD-Tl9dS8w0.js} +1 -1
  287. package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.br +0 -0
  288. package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.gz +0 -0
  289. package/payload/server/public/assets/{diagram-G4DWMVQ6-DvkpgSLO.js → diagram-G4DWMVQ6-CeSe6TMu.js} +1 -1
  290. package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.br +0 -0
  291. package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.gz +0 -0
  292. package/payload/server/public/assets/{diagram-MMDJMWI5-DHmW5Y9k.js → diagram-MMDJMWI5-DYBNJCmk.js} +1 -1
  293. package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.br +0 -0
  294. package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.gz +0 -0
  295. package/payload/server/public/assets/{diagram-TYMM5635-C6T4hwzO.js → diagram-TYMM5635-BmpUGltx.js} +1 -1
  296. package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.br +0 -0
  297. package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.gz +0 -0
  298. package/payload/server/public/assets/{erDiagram-SMLLAGMA-5v_o7s3T.js → erDiagram-SMLLAGMA-DuwuNGqx.js} +1 -1
  299. package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.br +0 -0
  300. package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.gz +0 -0
  301. package/payload/server/public/assets/file-download-CiGklOfA.js +1 -0
  302. package/payload/server/public/assets/file-download-CiGklOfA.js.br +0 -0
  303. package/payload/server/public/assets/file-download-CiGklOfA.js.gz +0 -0
  304. package/payload/server/public/assets/{file-text-BKs9eyiw.js → file-text-XjJPULAZ.js} +1 -1
  305. package/payload/server/public/assets/file-text-XjJPULAZ.js.br +0 -0
  306. package/payload/server/public/assets/file-text-XjJPULAZ.js.gz +0 -0
  307. package/payload/server/public/assets/{flatten-BtIc9jX7.js → flatten-Bu-b1uTY.js} +1 -1
  308. package/payload/server/public/assets/flatten-Bu-b1uTY.js.br +0 -0
  309. package/payload/server/public/assets/flatten-Bu-b1uTY.js.gz +0 -0
  310. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-3UhCDsjt.js → flowDiagram-DWJPFMVM-Bpp8P6Ba.js} +1 -1
  311. package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.br +0 -0
  312. package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.gz +0 -0
  313. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-F2zgHIIQ.js → ganttDiagram-T4ZO3ILL-CE6ppjB4.js} +1 -1
  314. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.br +0 -0
  315. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.gz +0 -0
  316. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js +1 -0
  317. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js.br +0 -0
  318. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-oQc1N3dT.js → gitGraphDiagram-UUTBAWPF-BdK1GjPr.js} +1 -1
  319. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.br +0 -0
  320. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.gz +0 -0
  321. package/payload/server/public/assets/{graph-DTi71NaZ.js → graph-BjHJ0z_6.js} +1 -1
  322. package/payload/server/public/assets/graph-BjHJ0z_6.js.br +0 -0
  323. package/payload/server/public/assets/graph-BjHJ0z_6.js.gz +0 -0
  324. package/payload/server/public/assets/{graph-labels-BT3S6e9H.js → graph-labels-D-0u37KA.js} +1 -1
  325. package/payload/server/public/assets/graph-labels-D-0u37KA.js.br +0 -0
  326. package/payload/server/public/assets/graph-labels-D-0u37KA.js.gz +0 -0
  327. package/payload/server/public/assets/{graphlib-DY4-AT2Q.js → graphlib-CHEXylyU.js} +1 -1
  328. package/payload/server/public/assets/graphlib-CHEXylyU.js.br +0 -0
  329. package/payload/server/public/assets/graphlib-CHEXylyU.js.gz +0 -0
  330. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js +1 -0
  331. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js.br +0 -0
  332. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js +2 -0
  333. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.br +0 -0
  334. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.gz +0 -0
  335. package/payload/server/public/assets/{isEmpty-Bu4fZ8Kf.js → isEmpty-CjH0UASp.js} +1 -1
  336. package/payload/server/public/assets/isEmpty-CjH0UASp.js.br +0 -0
  337. package/payload/server/public/assets/isEmpty-CjH0UASp.js.gz +0 -0
  338. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-wJhSOkuw.js → ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js} +1 -1
  339. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.br +0 -0
  340. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.gz +0 -0
  341. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DgadC6Pz.js → journeyDiagram-VCZTEJTY-ByUPv8q6.js} +1 -1
  342. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.br +0 -0
  343. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.gz +0 -0
  344. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Bs4nQqXI.js → kanban-definition-6JOO6SKY-CFinqhpu.js} +1 -1
  345. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.br +0 -0
  346. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.gz +0 -0
  347. package/payload/server/public/assets/{line-Bnmxy1hO.js → line-Y4ns5Ghi.js} +1 -1
  348. package/payload/server/public/assets/line-Y4ns5Ghi.js.br +0 -0
  349. package/payload/server/public/assets/line-Y4ns5Ghi.js.gz +0 -0
  350. package/payload/server/public/assets/{linear-RvwZxFzh.js → linear-l39GooQ5.js} +1 -1
  351. package/payload/server/public/assets/linear-l39GooQ5.js.br +0 -0
  352. package/payload/server/public/assets/linear-l39GooQ5.js.gz +0 -0
  353. package/payload/server/public/assets/{maximize-2-zC94tsxY.js → maximize-2-BJ9S-nfS.js} +1 -1
  354. package/payload/server/public/assets/maximize-2-BJ9S-nfS.js.br +0 -0
  355. package/payload/server/public/assets/maximize-2-BJ9S-nfS.js.gz +0 -0
  356. package/payload/server/public/assets/{mermaid-parser.core-DeNV8RtA.js → mermaid-parser.core-5w0T1dRj.js} +2 -2
  357. package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.br +0 -0
  358. package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.gz +0 -0
  359. package/payload/server/public/assets/{mermaid.core-BU9IiSCP.js → mermaid.core-DBADY5VW.js} +3 -3
  360. package/payload/server/public/assets/mermaid.core-DBADY5VW.js.br +0 -0
  361. package/payload/server/public/assets/mermaid.core-DBADY5VW.js.gz +0 -0
  362. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-D1PMUxxm.js → mindmap-definition-QFDTVHPH-rHz37loq.js} +1 -1
  363. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.br +0 -0
  364. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.gz +0 -0
  365. package/payload/server/public/assets/{operator-BtWNEMh-.js → operator-Cay4rOOK.js} +1 -1
  366. package/payload/server/public/assets/operator-Cay4rOOK.js.br +0 -0
  367. package/payload/server/public/assets/operator-Cay4rOOK.js.gz +0 -0
  368. package/payload/server/public/assets/{ordinal-C2TEWKNu.js → ordinal-D6D6WcTC.js} +1 -1
  369. package/payload/server/public/assets/ordinal-D6D6WcTC.js.br +0 -0
  370. package/payload/server/public/assets/ordinal-D6D6WcTC.js.gz +0 -0
  371. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js +1 -0
  372. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js.br +0 -0
  373. package/payload/server/public/assets/{page-Ccl0FazM.js → page-Cci_j_y7.js} +3 -3
  374. package/payload/server/public/assets/page-Cci_j_y7.js.br +0 -0
  375. package/payload/server/public/assets/page-Cci_j_y7.js.gz +0 -0
  376. package/payload/server/public/assets/page-shuh4ES9.js +1 -0
  377. package/payload/server/public/assets/page-shuh4ES9.js.br +0 -0
  378. package/payload/server/public/assets/page-shuh4ES9.js.gz +0 -0
  379. package/payload/server/public/assets/{pdf-render-C257cidb.js → pdf-render-BSgBp8Fr.js} +1 -1
  380. package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.br +0 -0
  381. package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.gz +0 -0
  382. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js +1 -0
  383. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js.br +0 -0
  384. package/payload/server/public/assets/{pieDiagram-DEJITSTG-BzdNzoKA.js → pieDiagram-DEJITSTG-as0e_DSH.js} +1 -1
  385. package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.br +0 -0
  386. package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.gz +0 -0
  387. package/payload/server/public/assets/{public-BpC6cn9S.js → public-BbJcQGsO.js} +1 -1
  388. package/payload/server/public/assets/public-BbJcQGsO.js.br +0 -0
  389. package/payload/server/public/assets/public-BbJcQGsO.js.gz +0 -0
  390. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-oFr1MJRO.js → quadrantDiagram-34T5L4WZ-B4t8HO9J.js} +1 -1
  391. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.br +0 -0
  392. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.gz +0 -0
  393. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js +1 -0
  394. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js.br +0 -0
  395. package/payload/server/public/assets/{reduce-BGpN5lgn.js → reduce-BtXXK8Ma.js} +1 -1
  396. package/payload/server/public/assets/reduce-BtXXK8Ma.js.br +0 -0
  397. package/payload/server/public/assets/reduce-BtXXK8Ma.js.gz +0 -0
  398. package/payload/server/public/assets/{requirementDiagram-MS252O5E-C9QBQxDh.js → requirementDiagram-MS252O5E-yxh30zHX.js} +1 -1
  399. package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.br +0 -0
  400. package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.gz +0 -0
  401. package/payload/server/public/assets/{rotate-ccw-BNcqbHkZ.js → rotate-ccw-jeSVwUAv.js} +1 -1
  402. package/payload/server/public/assets/rotate-ccw-jeSVwUAv.js.br +0 -0
  403. package/payload/server/public/assets/rotate-ccw-jeSVwUAv.js.gz +0 -0
  404. package/payload/server/public/assets/routines-D3M1Wh3a.js +1 -0
  405. package/payload/server/public/assets/routines-D3M1Wh3a.js.br +0 -0
  406. package/payload/server/public/assets/routines-D3M1Wh3a.js.gz +0 -0
  407. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-c_y3bvVv.js → sankeyDiagram-XADWPNL6-j-k9Wfty.js} +1 -1
  408. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.br +0 -0
  409. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.gz +0 -0
  410. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-YwlCBPHE.js → sequenceDiagram-FGHM5R23-DGLgcLhC.js} +1 -1
  411. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.br +0 -0
  412. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.gz +0 -0
  413. package/payload/server/public/assets/{skills-COLAw_jt.js → skills-Bhej2ub1.js} +1 -1
  414. package/payload/server/public/assets/skills-Bhej2ub1.js.br +0 -0
  415. package/payload/server/public/assets/skills-Bhej2ub1.js.gz +0 -0
  416. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BFE3e-FM.js → stateDiagram-FHFEXIEX-C9p1OUMI.js} +1 -1
  417. package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.br +0 -0
  418. package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.gz +0 -0
  419. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js +1 -0
  420. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.br +0 -0
  421. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.gz +0 -0
  422. package/payload/server/public/assets/{tasks-CZDQI4nB.js → tasks-qY-dtOI2.js} +1 -1
  423. package/payload/server/public/assets/tasks-qY-dtOI2.js.br +0 -0
  424. package/payload/server/public/assets/tasks-qY-dtOI2.js.gz +0 -0
  425. package/payload/server/public/assets/{time-entry-format-laTFzawg.js → time-entry-format-r5UY9rjG.js} +1 -1
  426. package/payload/server/public/assets/time-entry-format-r5UY9rjG.js.br +0 -0
  427. package/payload/server/public/assets/time-entry-format-r5UY9rjG.js.gz +0 -0
  428. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-azqhmRwZ.js → timeline-definition-GMOUNBTQ-B1g7pgkH.js} +1 -1
  429. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.br +0 -0
  430. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.gz +0 -0
  431. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js +1 -0
  432. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js.br +0 -0
  433. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js +1 -0
  434. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js.br +0 -0
  435. package/payload/server/public/assets/{triangle-alert-DrwqhEog.js → triangle-alert--PCKaewD.js} +1 -1
  436. package/payload/server/public/assets/triangle-alert--PCKaewD.js.br +2 -0
  437. package/payload/server/public/assets/triangle-alert--PCKaewD.js.gz +0 -0
  438. package/payload/server/public/assets/{useCopyFeedback-Cxme5GK6.js → useCopyFeedback-Dg5lNgqH.js} +1 -1
  439. package/payload/server/public/assets/useCopyFeedback-Dg5lNgqH.js.br +0 -0
  440. package/payload/server/public/assets/useCopyFeedback-Dg5lNgqH.js.gz +0 -0
  441. package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css +1 -0
  442. package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css.br +0 -0
  443. package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css.gz +0 -0
  444. package/payload/server/public/assets/{useVoiceRecorder-DUBpVa2T.js → useVoiceRecorder-BY6ZsGMH.js} +2 -2
  445. package/payload/server/public/assets/useVoiceRecorder-BY6ZsGMH.js.br +0 -0
  446. package/payload/server/public/assets/useVoiceRecorder-BY6ZsGMH.js.gz +0 -0
  447. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Da2RfFs8.js → vennDiagram-DHZGUBPP-D2ZjFfh4.js} +1 -1
  448. package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.br +0 -0
  449. package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.gz +0 -0
  450. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js +1 -0
  451. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js.br +0 -0
  452. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-HdrdBYES.js → wardleyDiagram-NUSXRM2D-BFAhfkD8.js} +1 -1
  453. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.br +0 -0
  454. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.gz +0 -0
  455. package/payload/server/public/assets/{wrench-DWuxPnzF.js → wrench-Bw1FMolk.js} +1 -1
  456. package/payload/server/public/assets/wrench-Bw1FMolk.js.br +0 -0
  457. package/payload/server/public/assets/wrench-Bw1FMolk.js.gz +0 -0
  458. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DMk6rTcQ.js → xychartDiagram-5P7HB3ND-Dt94h2RQ.js} +1 -1
  459. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.br +0 -0
  460. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.gz +0 -0
  461. package/payload/server/public/brand-defaults.css +1 -0
  462. package/payload/server/public/browser.html +4 -4
  463. package/payload/server/public/calendar.html +7 -7
  464. package/payload/server/public/chat.html +14 -14
  465. package/payload/server/public/data.html +13 -12
  466. package/payload/server/public/graph.html +9 -9
  467. package/payload/server/public/index.html +16 -15
  468. package/payload/server/public/operator.html +15 -15
  469. package/payload/server/public/public.html +14 -14
  470. package/payload/server/public/routines.html +7 -6
  471. package/payload/server/public/skills.html +5 -5
  472. package/payload/server/public/tasks.html +6 -6
  473. package/payload/server/server.js +744 -425
  474. package/payload/platform/.docs/search-surface-contract.md +0 -58
  475. package/payload/platform/docs/superpowers/plans/2026-06-02-task-610-follower-202-retry.md +0 -372
  476. package/payload/platform/docs/superpowers/plans/2026-06-04-public-agent-knowledge-delivery.md +0 -230
  477. package/payload/platform/docs/superpowers/plans/2026-06-23-account-filesystem-schema.md +0 -544
  478. package/payload/platform/docs/superpowers/plans/2026-07-11-task-1557-operator-on-behalf-preference-attribution.md +0 -542
  479. package/payload/platform/docs/superpowers/plans/2026-07-13-account-schema-ontology-projection.md +0 -547
  480. package/payload/platform/docs/superpowers/plans/2026-07-14-graph-top-level-labels-ontology-single-source.md +0 -458
  481. package/payload/platform/docs/superpowers/plans/2026-07-17-task-1736-retire-mcp-stderr-tee.md +0 -397
  482. package/payload/platform/docs/superpowers/plans/2026-07-18-graph-native-ledger.md +0 -807
  483. package/payload/platform/docs/superpowers/plans/2026-07-18-ledger-write-path-fix.md +0 -109
  484. package/payload/platform/docs/superpowers/plans/2026-07-20-storage-pages-create.md +0 -82
  485. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1704-data-portal-standing-audit.md +0 -673
  486. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1789-reseat-channel-row-fork.md +0 -1244
  487. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1818-loop-gate-app-routes.md +0 -462
  488. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1819-top-level-label-allowlist.md +0 -321
  489. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1829-platform-ui-typecheck.md +0 -830
  490. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1831-data-portal-class-derived-allowlist.md +0 -2177
  491. package/payload/platform/docs/superpowers/plans/2026-07-21-graph-caption-resolver.md +0 -124
  492. package/payload/platform/docs/superpowers/plans/2026-07-21-task-1877-bash-schema-enforcement.md +0 -107
  493. package/payload/platform/docs/superpowers/plans/2026-07-21-task-1887-reconcile-allowed-top-level.md +0 -205
  494. package/payload/platform/docs/superpowers/plans/2026-07-22-task-1899-reconcile-report-only.md +0 -748
  495. package/payload/platform/docs/superpowers/plans/2026-07-22-task-1910-two-way-portal-exchange.md +0 -1716
  496. package/payload/platform/docs/superpowers/plans/2026-07-23-task-1930-adherence-enforcement.md +0 -422
  497. package/payload/platform/docs/superpowers/plans/2026-07-24-task-1942-subaccount-switcher-brand-head.md +0 -327
  498. package/payload/platform/docs/superpowers/plans/2026-07-25-task-1974-uploads-intake-inbox.md +0 -235
  499. package/payload/platform/docs/superpowers/plans/2026-07-25-task-1976-intra-folder-hygiene.md +0 -215
  500. package/payload/platform/docs/superpowers/plans/2026-07-26-task-1902-account-owned-entry-declarations.md +0 -555
  501. package/payload/platform/docs/superpowers/plans/2026-07-26-task-1926-portal-push-concurrency-guard.md +0 -482
  502. package/payload/platform/docs/superpowers/plans/2026-07-26-task-2023-sidebar-sessions-async-reads.md +0 -394
  503. package/payload/platform/docs/superpowers/plans/2026-07-27-task-2016-disabled-agent-routing.md +0 -624
  504. package/payload/platform/docs/superpowers/plans/2026-07-27-task-2028-declared-file-write-deny.md +0 -303
  505. package/payload/platform/docs/superpowers/plans/2026-07-27-task-2052-account-machinery-write-fence.md +0 -250
  506. package/payload/platform/docs/superpowers/plans/2026-07-28-task-2097-email-signature-set.md +0 -65
  507. package/payload/platform/docs/superpowers/specs/2026-06-02-task-610-follower-202-retry-design.md +0 -116
  508. package/payload/platform/docs/superpowers/specs/2026-06-23-account-filesystem-schema-design.md +0 -170
  509. package/payload/platform/docs/superpowers/specs/2026-07-11-task-1557-operator-on-behalf-preference-attribution-design.md +0 -90
  510. package/payload/platform/docs/superpowers/specs/2026-07-13-account-schema-ontology-projection-design.md +0 -178
  511. package/payload/platform/docs/superpowers/specs/2026-07-14-graph-top-level-labels-ontology-single-source-design.md +0 -119
  512. package/payload/platform/docs/superpowers/specs/2026-07-17-task-1736-retire-mcp-stderr-tee-design.md +0 -128
  513. package/payload/platform/docs/superpowers/specs/2026-07-18-graph-native-ledger-design.md +0 -241
  514. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1704-data-portal-standing-audit-design.md +0 -177
  515. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1789-reseat-channel-row-fork-design.md +0 -201
  516. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1818-loop-gate-app-routes-design.md +0 -217
  517. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1819-top-level-label-allowlist-design.md +0 -80
  518. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1820-cpu-triage-admin-tools-design.md +0 -97
  519. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1829-platform-ui-typecheck-design.md +0 -163
  520. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1831-data-portal-class-derived-allowlist-design.md +0 -163
  521. package/payload/platform/docs/superpowers/specs/2026-07-22-task-1899-reconcile-report-only-design.md +0 -121
  522. package/payload/platform/docs/superpowers/specs/2026-07-22-task-1910-two-way-portal-exchange-design.md +0 -103
  523. package/payload/platform/docs/superpowers/specs/2026-07-23-task-1930-adherence-enforcement-design.md +0 -81
  524. package/payload/platform/docs/superpowers/specs/2026-07-24-task-1942-subaccount-switcher-brand-head-design.md +0 -35
  525. package/payload/platform/docs/superpowers/specs/2026-07-26-task-1902-account-owned-entry-declarations-design.md +0 -232
  526. package/payload/platform/docs/superpowers/specs/2026-07-26-task-1926-portal-push-concurrency-guard-design.md +0 -200
  527. package/payload/platform/docs/superpowers/specs/2026-07-26-task-2014-ui-suite-nondeterminism-design.md +0 -169
  528. package/payload/platform/docs/superpowers/specs/2026-07-27-task-2016-disabled-agent-routing-design.md +0 -139
  529. package/payload/platform/docs/superpowers/specs/2026-07-27-task-2028-declared-file-write-deny-design.md +0 -127
  530. package/payload/platform/docs/superpowers/specs/2026-07-27-task-2052-account-machinery-write-fence-design.md +0 -150
  531. package/payload/platform/docs/superpowers/specs/2026-07-28-task-2097-email-signature-set-design.md +0 -155
  532. package/payload/server/public/assets/AdminLoginScreens-uknqh2Pm.js.br +0 -0
  533. package/payload/server/public/assets/AdminLoginScreens-uknqh2Pm.js.gz +0 -0
  534. package/payload/server/public/assets/AdminShell-GqtMImyQ.js.br +0 -0
  535. package/payload/server/public/assets/AdminShell-GqtMImyQ.js.gz +0 -0
  536. package/payload/server/public/assets/activity-B4KfMJqO.js.br +0 -0
  537. package/payload/server/public/assets/activity-B4KfMJqO.js.gz +0 -0
  538. package/payload/server/public/assets/admin-DxCZeVw0.js +0 -1
  539. package/payload/server/public/assets/admin-DxCZeVw0.js.br +0 -0
  540. package/payload/server/public/assets/admin-DxCZeVw0.js.gz +0 -0
  541. package/payload/server/public/assets/agents-BtwBuO4G.js +0 -1
  542. package/payload/server/public/assets/agents-BtwBuO4G.js.br +0 -0
  543. package/payload/server/public/assets/agents-BtwBuO4G.js.gz +0 -0
  544. package/payload/server/public/assets/arc-DaI5MLTq.js.br +0 -0
  545. package/payload/server/public/assets/arc-DaI5MLTq.js.gz +0 -0
  546. package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js +0 -1
  547. package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js.br +0 -0
  548. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-CBGVUEN9.js.br +0 -0
  549. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-CBGVUEN9.js.gz +0 -0
  550. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DS6dS4GZ.js.br +0 -0
  551. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DS6dS4GZ.js.gz +0 -0
  552. package/payload/server/public/assets/browser-B3hSzI3O.js.br +0 -0
  553. package/payload/server/public/assets/browser-B3hSzI3O.js.gz +0 -0
  554. package/payload/server/public/assets/c4Diagram-AHTNJAMY-hBSBUZPt.js.br +0 -0
  555. package/payload/server/public/assets/calendar-BggxXxhS.js.br +0 -0
  556. package/payload/server/public/assets/calendar-BggxXxhS.js.gz +0 -0
  557. package/payload/server/public/assets/channel-BEokjAeE.js +0 -1
  558. package/payload/server/public/assets/channel-BEokjAeE.js.br +0 -0
  559. package/payload/server/public/assets/chat-flivHt0t.js +0 -1
  560. package/payload/server/public/assets/chat-flivHt0t.js.br +0 -0
  561. package/payload/server/public/assets/chat-flivHt0t.js.gz +0 -0
  562. package/payload/server/public/assets/chevron-left-nVRThX7f.js +0 -1
  563. package/payload/server/public/assets/chevron-right-CLqfrkRA.js +0 -1
  564. package/payload/server/public/assets/chevron-right-CLqfrkRA.js.br +0 -0
  565. package/payload/server/public/assets/chunk-2KRD3SAO-B6koUoB7.js.br +0 -0
  566. package/payload/server/public/assets/chunk-2KRD3SAO-B6koUoB7.js.gz +0 -0
  567. package/payload/server/public/assets/chunk-336JU56O-BF6BRh8u.js.br +0 -0
  568. package/payload/server/public/assets/chunk-336JU56O-BF6BRh8u.js.gz +0 -0
  569. package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js +0 -1
  570. package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js.br +0 -0
  571. package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js.gz +0 -0
  572. package/payload/server/public/assets/chunk-4BX2VUAB-7sO95xR2.js.br +0 -0
  573. package/payload/server/public/assets/chunk-4BX2VUAB-7sO95xR2.js.gz +0 -0
  574. package/payload/server/public/assets/chunk-4TB4RGXK-GCTndJYx.js.br +0 -0
  575. package/payload/server/public/assets/chunk-4TB4RGXK-GCTndJYx.js.gz +0 -0
  576. package/payload/server/public/assets/chunk-55IACEB6-ggIJf_TC.js.br +0 -0
  577. package/payload/server/public/assets/chunk-55IACEB6-ggIJf_TC.js.gz +0 -0
  578. package/payload/server/public/assets/chunk-5FUZZQ4R-DeGmkimt.js.br +0 -0
  579. package/payload/server/public/assets/chunk-5FUZZQ4R-DeGmkimt.js.gz +0 -0
  580. package/payload/server/public/assets/chunk-5PVQY5BW-aFIQKk_U.js.br +0 -0
  581. package/payload/server/public/assets/chunk-5PVQY5BW-aFIQKk_U.js.gz +0 -0
  582. package/payload/server/public/assets/chunk-67CJDMHE-LS8rUbii.js.br +0 -2
  583. package/payload/server/public/assets/chunk-67CJDMHE-LS8rUbii.js.gz +0 -0
  584. package/payload/server/public/assets/chunk-7N4EOEYR-JKOVngS0.js.br +0 -2
  585. package/payload/server/public/assets/chunk-7N4EOEYR-JKOVngS0.js.gz +0 -0
  586. package/payload/server/public/assets/chunk-AA7GKIK3-CoXnTVK6.js.br +0 -0
  587. package/payload/server/public/assets/chunk-AA7GKIK3-CoXnTVK6.js.gz +0 -0
  588. package/payload/server/public/assets/chunk-BSJP7CBP-CcsqObFg.js.br +0 -0
  589. package/payload/server/public/assets/chunk-BSJP7CBP-CcsqObFg.js.gz +0 -0
  590. package/payload/server/public/assets/chunk-CIAEETIT-CpsybR7q.js.br +0 -0
  591. package/payload/server/public/assets/chunk-CIAEETIT-CpsybR7q.js.gz +0 -0
  592. package/payload/server/public/assets/chunk-EDXVE4YY-BZ2I9PSq.js.br +0 -0
  593. package/payload/server/public/assets/chunk-EDXVE4YY-BZ2I9PSq.js.gz +0 -0
  594. package/payload/server/public/assets/chunk-ENJZ2VHE-DbTwt6OZ.js.br +0 -0
  595. package/payload/server/public/assets/chunk-ENJZ2VHE-DbTwt6OZ.js.gz +0 -0
  596. package/payload/server/public/assets/chunk-FMBD7UC4-D27VnSCa.js.br +0 -0
  597. package/payload/server/public/assets/chunk-FMBD7UC4-D27VnSCa.js.gz +0 -0
  598. package/payload/server/public/assets/chunk-FOC6F5B3-C0tU2UFl.js.br +0 -0
  599. package/payload/server/public/assets/chunk-FOC6F5B3-C0tU2UFl.js.gz +0 -0
  600. package/payload/server/public/assets/chunk-ICPOFSXX-UPPu2OIq.js.br +0 -0
  601. package/payload/server/public/assets/chunk-ICPOFSXX-UPPu2OIq.js.gz +0 -0
  602. package/payload/server/public/assets/chunk-K5T4RW27-DIKxqyYw.js.br +0 -0
  603. package/payload/server/public/assets/chunk-K5T4RW27-DIKxqyYw.js.gz +0 -0
  604. package/payload/server/public/assets/chunk-KGLVRYIC-CiL4YVLo.js.br +0 -0
  605. package/payload/server/public/assets/chunk-KGLVRYIC-CiL4YVLo.js.gz +0 -0
  606. package/payload/server/public/assets/chunk-LIHQZDEY-ejKezVlD.js.br +0 -0
  607. package/payload/server/public/assets/chunk-LIHQZDEY-ejKezVlD.js.gz +0 -0
  608. package/payload/server/public/assets/chunk-ORNJ4GCN-Cc0vqc-D.js.br +0 -0
  609. package/payload/server/public/assets/chunk-ORNJ4GCN-Cc0vqc-D.js.gz +0 -0
  610. package/payload/server/public/assets/chunk-OYMX7WX6-Drxn1qG0.js.br +0 -0
  611. package/payload/server/public/assets/chunk-OYMX7WX6-Drxn1qG0.js.gz +0 -0
  612. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js +0 -1
  613. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js.br +0 -0
  614. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js.gz +0 -0
  615. package/payload/server/public/assets/chunk-U2HBQHQK-DnbQIkRP.js.br +0 -0
  616. package/payload/server/public/assets/chunk-U2HBQHQK-DnbQIkRP.js.gz +0 -0
  617. package/payload/server/public/assets/chunk-X2U36JSP-CauTSVWg.js.br +0 -0
  618. package/payload/server/public/assets/chunk-X2U36JSP-CauTSVWg.js.gz +0 -0
  619. package/payload/server/public/assets/chunk-XPW4576I-DZqqB9Zi.js.br +0 -0
  620. package/payload/server/public/assets/chunk-XPW4576I-DZqqB9Zi.js.gz +0 -0
  621. package/payload/server/public/assets/chunk-YZCP3GAM-BGHo4Li-.js.br +0 -0
  622. package/payload/server/public/assets/chunk-YZCP3GAM-BGHo4Li-.js.gz +0 -0
  623. package/payload/server/public/assets/chunk-ZZ45TVLE-DWGJKPd7.js.br +0 -0
  624. package/payload/server/public/assets/chunk-ZZ45TVLE-DWGJKPd7.js.gz +0 -0
  625. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js +0 -1
  626. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js.br +0 -0
  627. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js.gz +0 -0
  628. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js +0 -1
  629. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js.br +0 -0
  630. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js.gz +0 -0
  631. package/payload/server/public/assets/clock-Dj3SRZKo.js +0 -1
  632. package/payload/server/public/assets/clock-Dj3SRZKo.js.br +0 -0
  633. package/payload/server/public/assets/clock-Dj3SRZKo.js.gz +0 -0
  634. package/payload/server/public/assets/clone-Bn7XXVhr.js +0 -1
  635. package/payload/server/public/assets/clone-Bn7XXVhr.js.br +0 -0
  636. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D-95BzXL.js.br +0 -0
  637. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D-95BzXL.js.gz +0 -0
  638. package/payload/server/public/assets/dagre-BZYNBHvT.js.br +0 -0
  639. package/payload/server/public/assets/dagre-BZYNBHvT.js.gz +0 -0
  640. package/payload/server/public/assets/dagre-KV5264BT-DyU4HQLQ.js.br +0 -0
  641. package/payload/server/public/assets/dagre-KV5264BT-DyU4HQLQ.js.gz +0 -0
  642. package/payload/server/public/assets/data-Ckjkne54.js +0 -1
  643. package/payload/server/public/assets/data-Ckjkne54.js.br +0 -3
  644. package/payload/server/public/assets/data-Ckjkne54.js.gz +0 -0
  645. package/payload/server/public/assets/diagram-5BDNPKRD-CCttJ9XA.js.br +0 -0
  646. package/payload/server/public/assets/diagram-5BDNPKRD-CCttJ9XA.js.gz +0 -0
  647. package/payload/server/public/assets/diagram-G4DWMVQ6-DvkpgSLO.js.br +0 -0
  648. package/payload/server/public/assets/diagram-G4DWMVQ6-DvkpgSLO.js.gz +0 -0
  649. package/payload/server/public/assets/diagram-MMDJMWI5-DHmW5Y9k.js.br +0 -0
  650. package/payload/server/public/assets/diagram-MMDJMWI5-DHmW5Y9k.js.gz +0 -0
  651. package/payload/server/public/assets/diagram-TYMM5635-C6T4hwzO.js.br +0 -0
  652. package/payload/server/public/assets/diagram-TYMM5635-C6T4hwzO.js.gz +0 -0
  653. package/payload/server/public/assets/erDiagram-SMLLAGMA-5v_o7s3T.js.br +0 -0
  654. package/payload/server/public/assets/erDiagram-SMLLAGMA-5v_o7s3T.js.gz +0 -0
  655. package/payload/server/public/assets/file-text-BKs9eyiw.js.br +0 -0
  656. package/payload/server/public/assets/file-text-BKs9eyiw.js.gz +0 -0
  657. package/payload/server/public/assets/flatten-BtIc9jX7.js.br +0 -0
  658. package/payload/server/public/assets/flatten-BtIc9jX7.js.gz +0 -0
  659. package/payload/server/public/assets/flowDiagram-DWJPFMVM-3UhCDsjt.js.br +0 -0
  660. package/payload/server/public/assets/flowDiagram-DWJPFMVM-3UhCDsjt.js.gz +0 -0
  661. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-F2zgHIIQ.js.br +0 -0
  662. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-F2zgHIIQ.js.gz +0 -0
  663. package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js +0 -1
  664. package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js.br +0 -0
  665. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-oQc1N3dT.js.br +0 -0
  666. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-oQc1N3dT.js.gz +0 -0
  667. package/payload/server/public/assets/graph-DTi71NaZ.js.br +0 -0
  668. package/payload/server/public/assets/graph-DTi71NaZ.js.gz +0 -0
  669. package/payload/server/public/assets/graph-labels-BT3S6e9H.js.br +0 -0
  670. package/payload/server/public/assets/graph-labels-BT3S6e9H.js.gz +0 -0
  671. package/payload/server/public/assets/graphlib-DY4-AT2Q.js.br +0 -0
  672. package/payload/server/public/assets/graphlib-DY4-AT2Q.js.gz +0 -0
  673. package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js +0 -1
  674. package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js.br +0 -0
  675. package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js +0 -2
  676. package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js.br +0 -0
  677. package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js.gz +0 -0
  678. package/payload/server/public/assets/isEmpty-Bu4fZ8Kf.js.br +0 -0
  679. package/payload/server/public/assets/isEmpty-Bu4fZ8Kf.js.gz +0 -0
  680. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-wJhSOkuw.js.br +0 -0
  681. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-wJhSOkuw.js.gz +0 -0
  682. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-DgadC6Pz.js.br +0 -0
  683. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-DgadC6Pz.js.gz +0 -0
  684. package/payload/server/public/assets/kanban-definition-6JOO6SKY-Bs4nQqXI.js.br +0 -0
  685. package/payload/server/public/assets/kanban-definition-6JOO6SKY-Bs4nQqXI.js.gz +0 -0
  686. package/payload/server/public/assets/line-Bnmxy1hO.js.br +0 -0
  687. package/payload/server/public/assets/line-Bnmxy1hO.js.gz +0 -0
  688. package/payload/server/public/assets/linear-RvwZxFzh.js.br +0 -0
  689. package/payload/server/public/assets/linear-RvwZxFzh.js.gz +0 -0
  690. package/payload/server/public/assets/maximize-2-zC94tsxY.js.br +0 -0
  691. package/payload/server/public/assets/maximize-2-zC94tsxY.js.gz +0 -0
  692. package/payload/server/public/assets/mermaid-parser.core-DeNV8RtA.js.br +0 -0
  693. package/payload/server/public/assets/mermaid-parser.core-DeNV8RtA.js.gz +0 -0
  694. package/payload/server/public/assets/mermaid.core-BU9IiSCP.js.br +0 -0
  695. package/payload/server/public/assets/mermaid.core-BU9IiSCP.js.gz +0 -0
  696. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-D1PMUxxm.js.br +0 -0
  697. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-D1PMUxxm.js.gz +0 -0
  698. package/payload/server/public/assets/operator-BtWNEMh-.js.br +0 -0
  699. package/payload/server/public/assets/operator-BtWNEMh-.js.gz +0 -0
  700. package/payload/server/public/assets/ordinal-C2TEWKNu.js.br +0 -0
  701. package/payload/server/public/assets/ordinal-C2TEWKNu.js.gz +0 -0
  702. package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js +0 -1
  703. package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js.br +0 -0
  704. package/payload/server/public/assets/page-BFm91p0e.js +0 -1
  705. package/payload/server/public/assets/page-BFm91p0e.js.br +0 -0
  706. package/payload/server/public/assets/page-BFm91p0e.js.gz +0 -0
  707. package/payload/server/public/assets/page-Ccl0FazM.js.br +0 -0
  708. package/payload/server/public/assets/page-Ccl0FazM.js.gz +0 -0
  709. package/payload/server/public/assets/pdf-render-C257cidb.js.br +0 -0
  710. package/payload/server/public/assets/pdf-render-C257cidb.js.gz +0 -0
  711. package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js +0 -1
  712. package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js.br +0 -0
  713. package/payload/server/public/assets/pieDiagram-DEJITSTG-BzdNzoKA.js.br +0 -0
  714. package/payload/server/public/assets/pieDiagram-DEJITSTG-BzdNzoKA.js.gz +0 -0
  715. package/payload/server/public/assets/public-BpC6cn9S.js.br +0 -0
  716. package/payload/server/public/assets/public-BpC6cn9S.js.gz +0 -0
  717. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-oFr1MJRO.js.br +0 -0
  718. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-oFr1MJRO.js.gz +0 -0
  719. package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js +0 -1
  720. package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js.br +0 -0
  721. package/payload/server/public/assets/reduce-BGpN5lgn.js.br +0 -0
  722. package/payload/server/public/assets/reduce-BGpN5lgn.js.gz +0 -0
  723. package/payload/server/public/assets/requirementDiagram-MS252O5E-C9QBQxDh.js.br +0 -0
  724. package/payload/server/public/assets/requirementDiagram-MS252O5E-C9QBQxDh.js.gz +0 -0
  725. package/payload/server/public/assets/rotate-ccw-BNcqbHkZ.js.br +0 -0
  726. package/payload/server/public/assets/rotate-ccw-BNcqbHkZ.js.gz +0 -0
  727. package/payload/server/public/assets/routines-D5iia-XG.js +0 -1
  728. package/payload/server/public/assets/routines-D5iia-XG.js.br +0 -0
  729. package/payload/server/public/assets/routines-D5iia-XG.js.gz +0 -0
  730. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-c_y3bvVv.js.br +0 -0
  731. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-c_y3bvVv.js.gz +0 -0
  732. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-YwlCBPHE.js.br +0 -0
  733. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-YwlCBPHE.js.gz +0 -0
  734. package/payload/server/public/assets/skills-COLAw_jt.js.br +0 -0
  735. package/payload/server/public/assets/skills-COLAw_jt.js.gz +0 -0
  736. package/payload/server/public/assets/stateDiagram-FHFEXIEX-BFE3e-FM.js.br +0 -0
  737. package/payload/server/public/assets/stateDiagram-FHFEXIEX-BFE3e-FM.js.gz +0 -0
  738. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js +0 -1
  739. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js.br +0 -4
  740. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js.gz +0 -0
  741. package/payload/server/public/assets/tasks-CZDQI4nB.js.br +0 -0
  742. package/payload/server/public/assets/tasks-CZDQI4nB.js.gz +0 -0
  743. package/payload/server/public/assets/time-entry-format-laTFzawg.js.br +0 -0
  744. package/payload/server/public/assets/time-entry-format-laTFzawg.js.gz +0 -0
  745. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-azqhmRwZ.js.br +0 -0
  746. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-azqhmRwZ.js.gz +0 -0
  747. package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js +0 -1
  748. package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js.br +0 -0
  749. package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js +0 -1
  750. package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js.br +0 -0
  751. package/payload/server/public/assets/triangle-alert-DrwqhEog.js.br +0 -0
  752. package/payload/server/public/assets/triangle-alert-DrwqhEog.js.gz +0 -0
  753. package/payload/server/public/assets/useCopyFeedback-Cxme5GK6.js.br +0 -0
  754. package/payload/server/public/assets/useCopyFeedback-Cxme5GK6.js.gz +0 -0
  755. package/payload/server/public/assets/useSubAccountSwitcher-B-K8y5a4.css +0 -1
  756. package/payload/server/public/assets/useSubAccountSwitcher-B-K8y5a4.css.br +0 -0
  757. package/payload/server/public/assets/useSubAccountSwitcher-B-K8y5a4.css.gz +0 -0
  758. package/payload/server/public/assets/useVoiceRecorder-DUBpVa2T.js.br +0 -0
  759. package/payload/server/public/assets/useVoiceRecorder-DUBpVa2T.js.gz +0 -0
  760. package/payload/server/public/assets/vennDiagram-DHZGUBPP-Da2RfFs8.js.br +0 -0
  761. package/payload/server/public/assets/vennDiagram-DHZGUBPP-Da2RfFs8.js.gz +0 -0
  762. package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js +0 -1
  763. package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js.br +0 -0
  764. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-HdrdBYES.js.br +0 -0
  765. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-HdrdBYES.js.gz +0 -0
  766. package/payload/server/public/assets/wrench-DWuxPnzF.js.br +0 -0
  767. package/payload/server/public/assets/wrench-DWuxPnzF.js.gz +0 -0
  768. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DMk6rTcQ.js.br +0 -0
  769. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DMk6rTcQ.js.gz +0 -0
  770. /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js → _baseFor-B12He5Rp.js} +0 -0
  771. /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js.br → _baseFor-B12He5Rp.js.br} +0 -0
  772. /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js.gz → _baseFor-B12He5Rp.js.gz} +0 -0
  773. /package/payload/server/public/assets/{array-X0JlPOfd.js → array-DO1uCttT.js} +0 -0
  774. /package/payload/server/public/assets/{array-X0JlPOfd.js.br → array-DO1uCttT.js.br} +0 -0
  775. /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js → cytoscape.esm-DFn2foqy.js} +0 -0
  776. /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js.br → cytoscape.esm-DFn2foqy.js.br} +0 -0
  777. /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js.gz → cytoscape.esm-DFn2foqy.js.gz} +0 -0
  778. /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js → defaultLocale-ieI3yFoA.js} +0 -0
  779. /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js.br → defaultLocale-ieI3yFoA.js.br} +0 -0
  780. /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js.gz → defaultLocale-ieI3yFoA.js.gz} +0 -0
  781. /package/payload/server/public/assets/{dist-QvbmK1IP.js → dist-DlU7AEeD.js} +0 -0
  782. /package/payload/server/public/assets/{dist-QvbmK1IP.js.br → dist-DlU7AEeD.js.br} +0 -0
  783. /package/payload/server/public/assets/{dist-QvbmK1IP.js.gz → dist-DlU7AEeD.js.gz} +0 -0
  784. /package/payload/server/public/assets/{init-BmUWJJHz.js → init-BCRlEgNP.js} +0 -0
  785. /package/payload/server/public/assets/{init-BmUWJJHz.js.br → init-BCRlEgNP.js.br} +0 -0
  786. /package/payload/server/public/assets/{init-BmUWJJHz.js.gz → init-BCRlEgNP.js.gz} +0 -0
  787. /package/payload/server/public/assets/{katex-BjZuzSQn.js → katex-gkTaZgi6.js} +0 -0
  788. /package/payload/server/public/assets/{katex-BjZuzSQn.js.br → katex-gkTaZgi6.js.br} +0 -0
  789. /package/payload/server/public/assets/{katex-BjZuzSQn.js.gz → katex-gkTaZgi6.js.gz} +0 -0
  790. /package/payload/server/public/assets/{path-CoPyR7c2.js → path-DTmzQFjQ.js} +0 -0
  791. /package/payload/server/public/assets/{path-CoPyR7c2.js.br → path-DTmzQFjQ.js.br} +0 -0
  792. /package/payload/server/public/assets/{path-CoPyR7c2.js.gz → path-DTmzQFjQ.js.gz} +0 -0
  793. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js → preload-helper-eAV8hweq.js} +0 -0
  794. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js.br → preload-helper-eAV8hweq.js.br} +0 -0
  795. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js.gz → preload-helper-eAV8hweq.js.gz} +0 -0
  796. /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js → rough.esm-BFJ-MgcB.js} +0 -0
  797. /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js.br → rough.esm-BFJ-MgcB.js.br} +0 -0
  798. /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js.gz → rough.esm-BFJ-MgcB.js.gz} +0 -0
  799. /package/payload/server/public/assets/{src-C2WwTWSY.js → src-9CNk4JU0.js} +0 -0
  800. /package/payload/server/public/assets/{src-C2WwTWSY.js.br → src-9CNk4JU0.js.br} +0 -0
  801. /package/payload/server/public/assets/{src-C2WwTWSY.js.gz → src-9CNk4JU0.js.gz} +0 -0
  802. /package/payload/server/public/assets/{useSubAccountSwitcher-C_1E11Dv.js → useSubAccountSwitcher-CnpeWIYq.js} +0 -0
  803. /package/payload/server/public/assets/{useSubAccountSwitcher-C_1E11Dv.js.br → useSubAccountSwitcher-CnpeWIYq.js.br} +0 -0
  804. /package/payload/server/public/assets/{useSubAccountSwitcher-C_1E11Dv.js.gz → useSubAccountSwitcher-CnpeWIYq.js.gz} +0 -0
@@ -3,6 +3,7 @@ import { embed } from "../lib/embeddings.js";
3
3
  import { buildTextRepresentation } from "./memory-write.js";
4
4
  import { checkGraphWriteGate, checkLabelWriteGate, checkPropertyWriteGate, } from "../lib/graph-write-gate.js";
5
5
  import { withWriteEvent, pickName } from "../lib/log-ingest.js";
6
+ import { compileTypePreservingSet, typePreserveRejection, } from "../lib/temporal-type-preserve.js";
6
7
  import { REVISION_CYPHER_FRAGMENT_UNWIND, } from "../lib/compiled-truth-revision.js";
7
8
  /** Stripped silently — operator can't update these via the agent. */
8
9
  const RESTRICTED_KEYS = new Set(["embedding", "accountId", "createdAt", "createdOn"]);
@@ -24,6 +25,35 @@ const SYSTEM_MANAGED_KEYS = new Set([
24
25
  function isCompiledTruthRewriter() {
25
26
  return process.env.MAXY_SPECIALIST === "compiled-truth-rewriter";
26
27
  }
28
+ /** The write-time stamp. It is type-preserved like any other property: nodes
29
+ * written by `memory-write` hold it as an ISO string, :Meeting nodes hold it as
30
+ * a ZONED DATETIME, and this tool must not convert either into the other. */
31
+ const UPDATED_AT_KEY = "updatedAt";
32
+ /**
33
+ * Vet each temporal value with Neo4j's own constructor before the update runs.
34
+ * A probe is a read — nothing is written — so a refusal here leaves every
35
+ * property, including the ones that would have succeeded, untouched.
36
+ */
37
+ async function probeTemporalValues(session, probes) {
38
+ for (const probe of probes) {
39
+ try {
40
+ await session.run(`RETURN ${probe.constructorName}($${probe.paramName}) AS probe`, {
41
+ [probe.paramName]: probe.value,
42
+ });
43
+ }
44
+ catch (err) {
45
+ // Only a client error is a verdict on the value. A disconnect, an auth
46
+ // failure or a timeout says nothing about it, and reporting one as
47
+ // "not a valid ZONED DATETIME" would send the agent to reword a
48
+ // timestamp that was correct all along. Those propagate unchanged.
49
+ const code = err?.code;
50
+ if (typeof code === "string" && code.startsWith("Neo.ClientError.")) {
51
+ throw typePreserveRejection(probe.key, probe.existingType, probe.value);
52
+ }
53
+ throw err;
54
+ }
55
+ }
56
+ }
27
57
  export async function memoryUpdate(params) {
28
58
  const nameHint = pickName(params.properties);
29
59
  return withWriteEvent({ tool: "memory-update", accountId: params.accountId, name: nameHint }, () => memoryUpdateImpl(params), (r) => ({ elementId: r.nodeId, labels: r.labels, name: nameHint }));
@@ -60,15 +90,57 @@ async function memoryUpdateImpl(params) {
60
90
  if (Object.keys(safeProps).length === 0) {
61
91
  throw new Error("All provided properties are restricted and cannot be updated.");
62
92
  }
93
+ // When the compiled-truth-rewriter specialist writes a compiledTruth /
94
+ // compiledTruthPublic field, stamp the matching *UpdatedAt + *Source values
95
+ // automatically so the audit trail stays consistent — the specialist
96
+ // shouldn't have to remember the housekeeping fields.
97
+ //
98
+ // Task 2148 — built before the session opens, because the pre-read has to ask
99
+ // for the existing type of every key that will actually be written, and the
100
+ // rewriter's housekeeping keys are part of that set.
101
+ const stamped = { ...safeProps };
102
+ const revisionRows = [];
103
+ if (rewriterCaller) {
104
+ const now = new Date().toISOString();
105
+ if ("compiledTruth" in stamped) {
106
+ stamped.compiledTruthUpdatedAt = now;
107
+ if (!("compiledTruthSource" in stamped))
108
+ stamped.compiledTruthSource = "rewriter";
109
+ revisionRows.push({
110
+ truth: String(stamped.compiledTruth ?? ""),
111
+ twin: "compiledTruth",
112
+ source: stamped.compiledTruthSource === "operator" ? "operator" : "rewriter",
113
+ });
114
+ }
115
+ if ("compiledTruthPublic" in stamped) {
116
+ stamped.compiledTruthPublicUpdatedAt = now;
117
+ if (!("compiledTruthPublicSource" in stamped))
118
+ stamped.compiledTruthPublicSource = "rewriter";
119
+ revisionRows.push({
120
+ truth: String(stamped.compiledTruthPublic ?? ""),
121
+ twin: "compiledTruthPublic",
122
+ source: stamped.compiledTruthPublicSource === "operator" ? "operator" : "rewriter",
123
+ });
124
+ }
125
+ }
126
+ const propKeys = [...Object.keys(stamped), UPDATED_AT_KEY];
63
127
  const session = getSession();
64
128
  try {
129
+ // Task 2148 — `propTypes` is the node's own `valueType()` per incoming key.
130
+ // Without it the SET below has no way to tell a ZONED DATETIME `startsAt`
131
+ // from a STRING `title`, and `n += $props` retypes the former to the latter.
65
132
  const labelResult = await session.run(`MATCH (n) WHERE elementId(n) = $nodeId AND n.accountId = $accountId
66
- RETURN labels(n) AS nodeLabels, n.name AS name, n.sliceToken AS sliceToken`, { nodeId, accountId });
133
+ RETURN labels(n) AS nodeLabels, n.name AS name, n.sliceToken AS sliceToken,
134
+ [k IN $propKeys WHERE n[k] IS NOT NULL | [k, valueType(n[k])]] AS propTypes`, { nodeId, accountId, propKeys });
67
135
  if (labelResult.records.length === 0) {
68
136
  throw new Error(`Node not found or not owned by this account (ID: ${nodeId}).`);
69
137
  }
70
138
  const targetLabels = labelResult.records[0].get("nodeLabels");
71
139
  const targetSliceToken = labelResult.records[0].get("sliceToken");
140
+ const existingTypes = {};
141
+ for (const pair of (labelResult.records[0].get("propTypes") ?? [])) {
142
+ existingTypes[pair[0]] = pair[1];
143
+ }
72
144
  // Task 485 — when the caller runs under a reviewer dispatch, refuse any
73
145
  // update whose target sliceToken does not match the env var. The check
74
146
  // is loud (throws) and logs every refusal — every occurrence is a
@@ -106,35 +178,6 @@ async function memoryUpdateImpl(params) {
106
178
  if (!gate.ok) {
107
179
  throw new Error(`Update blocked (${gate.reason}): ${gate.message}`);
108
180
  }
109
- // When the compiled-truth-rewriter specialist writes a compiledTruth /
110
- // compiledTruthPublic field, stamp the matching *UpdatedAt + *Source values
111
- // automatically so the audit trail stays consistent — the specialist
112
- // shouldn't have to remember the housekeeping fields.
113
- const stamped = { ...safeProps };
114
- const revisionRows = [];
115
- if (rewriterCaller) {
116
- const now = new Date().toISOString();
117
- if ("compiledTruth" in stamped) {
118
- stamped.compiledTruthUpdatedAt = now;
119
- if (!("compiledTruthSource" in stamped))
120
- stamped.compiledTruthSource = "rewriter";
121
- revisionRows.push({
122
- truth: String(stamped.compiledTruth ?? ""),
123
- twin: "compiledTruth",
124
- source: stamped.compiledTruthSource === "operator" ? "operator" : "rewriter",
125
- });
126
- }
127
- if ("compiledTruthPublic" in stamped) {
128
- stamped.compiledTruthPublicUpdatedAt = now;
129
- if (!("compiledTruthPublicSource" in stamped))
130
- stamped.compiledTruthPublicSource = "rewriter";
131
- revisionRows.push({
132
- truth: String(stamped.compiledTruthPublic ?? ""),
133
- twin: "compiledTruthPublic",
134
- source: stamped.compiledTruthPublicSource === "operator" ? "operator" : "rewriter",
135
- });
136
- }
137
- }
138
181
  // Task 436: when the rewriter writes a twin, the `:CompiledTruthRevision`
139
182
  // CREATE rides in the same `session.run` as the live SET so revision
140
183
  // history can never desync from the live property. UNWIND-on-empty is a
@@ -147,19 +190,32 @@ async function memoryUpdateImpl(params) {
147
190
  WITH DISTINCT n
148
191
  `
149
192
  : "";
193
+ // Task 2148 — the SET clause is compiled against the node's own property
194
+ // types, so a temporal property is rebuilt with its constructor rather than
195
+ // overwritten verbatim by `n += $props`.
196
+ const compiled = compileTypePreservingSet({
197
+ alias: "n",
198
+ existingTypes,
199
+ props: stamped,
200
+ now: { key: UPDATED_AT_KEY, isoValue: new Date().toISOString() },
201
+ });
202
+ // Every temporal value is vetted by Neo4j's own parser first. Validating
203
+ // here rather than reimplementing Neo4j's temporal grammar in JS keeps this
204
+ // from being stricter than the database and rejecting values it accepts,
205
+ // and running it before the SET is what makes a refusal all-or-nothing.
206
+ await probeTemporalValues(session, compiled.probes);
150
207
  const updateQuery = `
151
208
  MATCH (n)
152
209
  WHERE elementId(n) = $nodeId AND n.accountId = $accountId
153
- SET n += $props, n.updatedAt = $updatedAt
210
+ SET ${compiled.setClause}
154
211
  ${revisionClause}
155
212
  RETURN elementId(n) AS nodeId, labels(n) AS nodeLabels, properties(n) AS allProps
156
213
  `;
157
214
  const result = await session.run(updateQuery, {
158
215
  nodeId,
159
216
  accountId,
160
- updatedAt: new Date().toISOString(),
161
- props: stamped,
162
217
  revisions: revisionRows,
218
+ ...compiled.params,
163
219
  });
164
220
  if (result.records.length === 0) {
165
221
  throw new Error(`Node not found or not owned by this account (ID: ${nodeId}).`);
@@ -1 +1 @@
1
- {"version":3,"file":"memory-update.js","sourceRoot":"","sources":["../../src/tools/memory-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,+BAA+B,GAGhC,MAAM,mCAAmC,CAAC;AAiB3C,qEAAqE;AACrE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAEtF;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,eAAe;IACf,wBAAwB;IACxB,qBAAqB;IACrB,qBAAqB;IACrB,8BAA8B;IAC9B,2BAA2B;CAC5B,CAAC,CAAC;AAEH,SAAS,uBAAuB;IAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,yBAAyB,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAoB;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO,cAAc,CACnB,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EACtE,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CACnE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAoB;IAClD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAEjD,kFAAkF;IAClF,gFAAgF;IAChF,qDAAqD;IACrD,MAAM,cAAc,GAAG,uBAAuB,EAAE,CAAC;IACjD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,yCAAyC,GAAG,0CAA0C;oBACpF,qGAAqG,CACxG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,4EAA4E;IAC5E,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,mEAAmE;IACnE,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACxD,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC;kFAC4E,EAC5E,EAAE,MAAM,EAAE,SAAS,EAAE,CACtB,CAAC;QACF,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,oDAAoD,MAAM,IAAI,CAC/D,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAa,CAAC;QAC1E,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAkB,CAAC;QAEnF,wEAAwE;QACxE,uEAAuE;QACvE,kEAAkE;QAClE,uEAAuE;QACvE,uEAAuE;QACvE,wCAAwC;QACxC,MAAM,kBAAkB,GACtB,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,QAAQ;YACpD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB;YAClC,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,IAAI,WAAW,KAAK,kBAAkB,EAAE,CAAC;gBACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8CAA8C;oBAC5C,oBAAoB,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG;oBACvE,iBAAiB,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,MAAM,IAAI,CACvE,CAAC;gBACF,MAAM,IAAI,KAAK,CACb,wFAAwF;oBACtF,oEAAoE,CACvE,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gCAAgC;gBAC9B,oBAAoB,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAClG,CAAC;QACJ,CAAC;QAED,sEAAsE;QACtE,wEAAwE;QACxE,oEAAoE;QACpE,iEAAiE;QACjE,8BAA8B;QAE9B,0DAA0D;QAC1D,iCAAiC;QACjC,MAAM,SAAS,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,SAAS,CAAC,MAAM,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,uEAAuE;QACvE,4EAA4E;QAC5E,qEAAqE;QACrE,sDAAsD;QACtD,MAAM,OAAO,GAA4B,EAAE,GAAG,SAAS,EAAE,CAAC;QAC1D,MAAM,YAAY,GAIb,EAAE,CAAC;QACR,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,eAAe,IAAI,OAAO,EAAE,CAAC;gBAC/B,OAAO,CAAC,sBAAsB,GAAG,GAAG,CAAC;gBACrC,IAAI,CAAC,CAAC,qBAAqB,IAAI,OAAO,CAAC;oBAAE,OAAO,CAAC,mBAAmB,GAAG,UAAU,CAAC;gBAClF,YAAY,CAAC,IAAI,CAAC;oBAChB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;oBAC1C,IAAI,EAAE,eAAe;oBACrB,MAAM,EAAE,OAAO,CAAC,mBAAmB,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;iBAC7E,CAAC,CAAC;YACL,CAAC;YACD,IAAI,qBAAqB,IAAI,OAAO,EAAE,CAAC;gBACrC,OAAO,CAAC,4BAA4B,GAAG,GAAG,CAAC;gBAC3C,IAAI,CAAC,CAAC,2BAA2B,IAAI,OAAO,CAAC;oBAAE,OAAO,CAAC,yBAAyB,GAAG,UAAU,CAAC;gBAC9F,YAAY,CAAC,IAAI,CAAC;oBAChB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC;oBAChD,IAAI,EAAE,qBAAqB;oBAC3B,MAAM,EAAE,OAAO,CAAC,yBAAyB,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;iBACnF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,qEAAqE;QACrE,wEAAwE;QACxE,uEAAuE;QACvE,qDAAqD;QACrD,MAAM,cAAc,GAClB,YAAY,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC;;QAEF,+BAA+B;;SAE9B;YACD,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,WAAW,GAAG;;;;QAIhB,cAAc;;KAEjB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;YAC5C,MAAM;YACN,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,OAAO;YACd,SAAS,EAAE,YAAY;SACxB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,oDAAoD,MAAM,IAAI,CAC/D,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAW,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAa,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAA4B,CAAC;QAEnE,oCAAoC;QACpC,MAAM,aAAa,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC,SAAS,CAAC;QAC/B,OAAO,aAAa,CAAC,SAAS,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAC5E,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAEhD,MAAM,OAAO,CAAC,GAAG,CACf,qEAAqE,EACrE,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,CACrC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;YAC1E,kFAAkF;QACpF,CAAC;QAED,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"memory-update.js","sourceRoot":"","sources":["../../src/tools/memory-update.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,8 @@ export default defineConfig({
49
49
  "src/lib/__tests__/compiled-truth-revision.test.ts",
50
50
  // Vertical relationship-pattern projector + warn-only edge check.
51
51
  "src/lib/__tests__/relationship-patterns.test.ts",
52
+ // Task 2148 — type-preserving SET compiler for memory-update.
53
+ "src/lib/__tests__/temporal-type-preserve.test.ts",
52
54
  // Task 1944 — scheduled dream-cycle sweep throttle policy (vitest).
53
55
  "src/scripts/__tests__/**/*.test.ts",
54
56
  ],
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mail-search-delegated-ids.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-search-delegated-ids.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mail-search-delegated-ids.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,322 @@
1
+ import test from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { mkdtempSync } from "node:fs";
4
+ import { tmpdir } from "node:os";
5
+ import { join } from "node:path";
6
+ import { TokenStore } from "../auth/token-store.js";
7
+ import { runMailSearch } from "../tools/mail-search.js";
8
+ // Graph refuses `translateExchangeIds` on another user's mailbox root with 403
9
+ // ErrorAccessDenied even when the signed-in mailbox holds Mail.ReadWrite.Shared,
10
+ // and routing a shared mailbox's ids through the delegator's own root answers
11
+ // per-entry NotFound. Both were measured live (Task 2160). So on a delegated
12
+ // prefix the ids are re-resolved by internetMessageId instead, against the same
13
+ // root, which does honour Prefer: IdType="ImmutableId".
14
+ function configFor(accountId, prefix) {
15
+ const dir = mkdtempSync(join(tmpdir(), "outlook-deleg-ids-"));
16
+ const tokenStore = new TokenStore(accountId, dir);
17
+ tokenStore.store("access-token", "refresh-token", 3600, {
18
+ scopes: ["Mail.ReadWrite", "Mail.ReadWrite.Shared"],
19
+ });
20
+ const config = { clientId: "test-client", tenantId: "common", accountId, tokenStore };
21
+ if (prefix)
22
+ config.mailboxPathPrefix = prefix;
23
+ return config;
24
+ }
25
+ const SHARED = "/users/team%40muvin.co.uk";
26
+ /**
27
+ * Route the three call shapes this tool can make — the `$search`, the
28
+ * `translateExchangeIds` POST, and the `internetMessageId` `$filter` — so a test
29
+ * can assert which of them was issued, not merely what came back.
30
+ */
31
+ function mockGraph(opts) {
32
+ const urls = [];
33
+ const original = globalThis.fetch;
34
+ globalThis.fetch = (async (input, init) => {
35
+ const req = input instanceof Request ? input : null;
36
+ const url = req ? req.url : typeof input === "string" ? input : input.toString();
37
+ if (!url.includes("graph.microsoft.com")) {
38
+ return original(input, init);
39
+ }
40
+ urls.push(url);
41
+ const json = (body) => new Response(JSON.stringify(body), { status: 200, headers: { "content-type": "application/json" } });
42
+ if (url.includes("translateExchangeIds"))
43
+ return json({ value: opts.translateRows ?? [] });
44
+ if (url.includes("%24filter") || url.includes("$filter")) {
45
+ // Honour the clause. Returning every configured row for every request
46
+ // would make a batched call look like a duplicate-key collision, which is
47
+ // a property of the mock rather than of Graph.
48
+ const rows = (opts.filterRows ?? []).filter((r) => url.includes(encodeURIComponent(r.internetMessageId.replace(/'/g, "''"))));
49
+ return json({ value: rows });
50
+ }
51
+ return json({
52
+ value: opts.hits.map((h) => ({
53
+ id: h.id,
54
+ subject: "s",
55
+ receivedDateTime: "2026-07-29T08:00:00Z",
56
+ bodyPreview: "b",
57
+ ...(h.internetMessageId === undefined ? {} : { internetMessageId: h.internetMessageId }),
58
+ })),
59
+ });
60
+ });
61
+ return {
62
+ restore: () => {
63
+ globalThis.fetch = original;
64
+ },
65
+ urls,
66
+ };
67
+ }
68
+ const translates = (urls) => urls.filter((u) => u.includes("translateExchangeIds")).length;
69
+ const filters = (urls) => urls.filter((u) => u.includes("%24filter") || u.includes("$filter")).length;
70
+ test("an own-mailbox search still translates and issues no filter", async () => {
71
+ const mock = mockGraph({
72
+ hits: [{ id: "AQMk-one", internetMessageId: "<a@x>" }],
73
+ translateRows: [{ sourceId: "AQMk-one", targetId: "AAkAL-one" }],
74
+ });
75
+ try {
76
+ const r = await runMailSearch(configFor("own-1"), { query: "invoice" });
77
+ assert.deepEqual(r.items.map((i) => i.id), ["AAkAL-one"]);
78
+ assert.equal(translates(mock.urls), 1);
79
+ assert.equal(filters(mock.urls), 0, "the own-mailbox path must not re-resolve by internetMessageId");
80
+ assert.equal(r.dropped, 0);
81
+ }
82
+ finally {
83
+ mock.restore();
84
+ }
85
+ });
86
+ test("a delegated search re-resolves by internetMessageId and never posts to translateExchangeIds", async () => {
87
+ const mock = mockGraph({
88
+ hits: [
89
+ { id: "AQMk-one", internetMessageId: "<a@x>" },
90
+ { id: "AQMk-two", internetMessageId: "<b@x>" },
91
+ ],
92
+ filterRows: [
93
+ { id: "AAkAL-two", internetMessageId: "<b@x>" },
94
+ { id: "AAkAL-one", internetMessageId: "<a@x>" },
95
+ ],
96
+ });
97
+ try {
98
+ const r = await runMailSearch(configFor("del-1", SHARED), { query: "invoice" });
99
+ assert.deepEqual(r.items.map((i) => i.id), ["AAkAL-one", "AAkAL-two"], "mapped by key, not by position");
100
+ assert.equal(translates(mock.urls), 0, "translateExchangeIds 403s on a delegated root");
101
+ assert.equal(filters(mock.urls), 1, "one filter per page, not one per hit");
102
+ assert.equal(r.dropped, 0);
103
+ assert.ok(mock.urls.every((u) => u.includes("team%40muvin.co.uk")), "every delegated request must address the shared root");
104
+ }
105
+ finally {
106
+ mock.restore();
107
+ }
108
+ });
109
+ test("a Message-ID carrying URL-significant characters is percent-encoded, not sent raw", async () => {
110
+ // A raw `+` in an OData string literal matches nothing — measured n=0 against
111
+ // the live mailbox, n=1 once encoded. `&`, `#` and `=` fail the same way.
112
+ const key = "<CAD+oVdS-a&b#c@mail.example.com>";
113
+ const mock = mockGraph({
114
+ hits: [{ id: "AQMk-plus", internetMessageId: key }],
115
+ filterRows: [{ id: "AAkAL-plus", internetMessageId: key }],
116
+ });
117
+ try {
118
+ const r = await runMailSearch(configFor("del-2", SHARED), { query: "invoice" });
119
+ assert.deepEqual(r.items.map((i) => i.id), ["AAkAL-plus"]);
120
+ const filterUrl = mock.urls.find((u) => u.includes("%24filter") || u.includes("$filter")) ?? "";
121
+ // Assert on the URL as sent. Decoding it first would turn %2B back into a
122
+ // literal +, so a decoded check can never distinguish encoded from raw.
123
+ const literal = /internetMessageId eq '([^']*)'/.exec(filterUrl)?.[1] ?? "";
124
+ assert.equal(literal, "%3CCAD%2BoVdS-a%26b%23c%40mail.example.com%3E", "every URL-significant character must reach Graph percent-encoded");
125
+ assert.ok(!/[+&#]/.test(literal), "no raw +, & or # survives into the filter literal");
126
+ }
127
+ finally {
128
+ mock.restore();
129
+ }
130
+ });
131
+ test("a single quote in a Message-ID is doubled for OData before encoding", async () => {
132
+ const key = "<o'brien@x>";
133
+ const mock = mockGraph({
134
+ hits: [{ id: "AQMk-q", internetMessageId: key }],
135
+ filterRows: [{ id: "AAkAL-q", internetMessageId: key }],
136
+ });
137
+ try {
138
+ await runMailSearch(configFor("del-3", SHARED), { query: "invoice" });
139
+ const filterUrl = mock.urls.find((u) => u.includes("%24filter") || u.includes("$filter")) ?? "";
140
+ assert.ok(decodeURIComponent(filterUrl).includes("o''brien"), "OData escapes a quote by doubling it");
141
+ }
142
+ finally {
143
+ mock.restore();
144
+ }
145
+ });
146
+ test("a hit the refetch cannot resolve is dropped and counted, and the rest are returned", async () => {
147
+ const mock = mockGraph({
148
+ hits: [
149
+ { id: "AQMk-one", internetMessageId: "<a@x>" },
150
+ { id: "AQMk-gone", internetMessageId: "<missing@x>" },
151
+ ],
152
+ filterRows: [{ id: "AAkAL-one", internetMessageId: "<a@x>" }],
153
+ });
154
+ try {
155
+ const r = await runMailSearch(configFor("del-4", SHARED), { query: "invoice" });
156
+ assert.deepEqual(r.items.map((i) => i.id), ["AAkAL-one"], "the survivor is returned, the page is not refused");
157
+ assert.equal(r.dropped, 1);
158
+ assert.ok(r.items.every((i) => !i.id.startsWith("AQMk")), "an unresolved id is omitted, never returned in the regular namespace");
159
+ }
160
+ finally {
161
+ mock.restore();
162
+ }
163
+ });
164
+ test("a Message-ID matching two rows is dropped rather than guessed", async () => {
165
+ const mock = mockGraph({
166
+ hits: [
167
+ { id: "AQMk-one", internetMessageId: "<dup@x>" },
168
+ { id: "AQMk-two", internetMessageId: "<ok@x>" },
169
+ ],
170
+ filterRows: [
171
+ { id: "AAkAL-dup-a", internetMessageId: "<dup@x>" },
172
+ { id: "AAkAL-dup-b", internetMessageId: "<dup@x>" },
173
+ { id: "AAkAL-ok", internetMessageId: "<ok@x>" },
174
+ ],
175
+ });
176
+ try {
177
+ const r = await runMailSearch(configFor("del-5", SHARED), { query: "invoice" });
178
+ assert.deepEqual(r.items.map((i) => i.id), ["AAkAL-ok"]);
179
+ assert.equal(r.dropped, 1);
180
+ // A page sized to the key count would truncate the duplicate's second row,
181
+ // and the collision would go undetected as a confident wrong handle.
182
+ const filterUrl = mock.urls.find((u) => u.includes("%24filter") || u.includes("$filter")) ?? "";
183
+ const top = Number(/\$top=(\d+)/.exec(filterUrl)?.[1] ?? "0");
184
+ assert.ok(top > 2, `refetch $top must exceed the key count, got ${top}`);
185
+ }
186
+ finally {
187
+ mock.restore();
188
+ }
189
+ });
190
+ test("a hit with no internetMessageId is dropped without entering the filter", async () => {
191
+ const mock = mockGraph({
192
+ hits: [
193
+ { id: "AQMk-nokey" },
194
+ { id: "AQMk-two", internetMessageId: "<b@x>" },
195
+ ],
196
+ filterRows: [{ id: "AAkAL-two", internetMessageId: "<b@x>" }],
197
+ });
198
+ try {
199
+ const r = await runMailSearch(configFor("del-6", SHARED), { query: "invoice" });
200
+ assert.deepEqual(r.items.map((i) => i.id), ["AAkAL-two"]);
201
+ assert.equal(r.dropped, 1);
202
+ }
203
+ finally {
204
+ mock.restore();
205
+ }
206
+ });
207
+ test("a delegated page with no resolvable hit returns empty rather than throwing", async () => {
208
+ const mock = mockGraph({
209
+ hits: [{ id: "AQMk-one", internetMessageId: "<a@x>" }],
210
+ filterRows: [],
211
+ });
212
+ try {
213
+ const r = await runMailSearch(configFor("del-7", SHARED), { query: "invoice" });
214
+ assert.deepEqual(r.items, []);
215
+ assert.equal(r.dropped, 1);
216
+ }
217
+ finally {
218
+ mock.restore();
219
+ }
220
+ });
221
+ test("an empty delegated page issues neither a filter nor a translate", async () => {
222
+ const mock = mockGraph({ hits: [] });
223
+ try {
224
+ const r = await runMailSearch(configFor("del-8", SHARED), { query: "nothing" });
225
+ assert.equal(r.items.length, 0);
226
+ assert.equal(r.dropped, 0);
227
+ assert.equal(filters(mock.urls), 0);
228
+ assert.equal(translates(mock.urls), 0);
229
+ }
230
+ finally {
231
+ mock.restore();
232
+ }
233
+ });
234
+ test("two hits sharing one Message-ID are both dropped, not both bound to the same row", async () => {
235
+ // A Message-ID is not unique in a mailbox: an Inbox message and a rule-made
236
+ // copy elsewhere can both match and land on one page. Binding both to the one
237
+ // row that comes back hands the same handle out twice, with the other hit's
238
+ // metadata attached — a wrong answer that reads as a right one.
239
+ const mock = mockGraph({
240
+ hits: [
241
+ { id: "AQMk-inbox", internetMessageId: "<same@x>" },
242
+ { id: "AQMk-copy", internetMessageId: "<same@x>" },
243
+ { id: "AQMk-ok", internetMessageId: "<ok@x>" },
244
+ ],
245
+ filterRows: [
246
+ { id: "AAkAL-one-row", internetMessageId: "<same@x>" },
247
+ { id: "AAkAL-ok", internetMessageId: "<ok@x>" },
248
+ ],
249
+ });
250
+ try {
251
+ const r = await runMailSearch(configFor("del-10", SHARED), { query: "invoice" });
252
+ assert.deepEqual(r.items.map((i) => i.id), ["AAkAL-ok"]);
253
+ assert.equal(r.dropped, 2, "both ambiguous hits are dropped and counted");
254
+ assert.equal(new Set(r.items.map((i) => i.id)).size, r.items.length, "no handle is returned twice");
255
+ }
256
+ finally {
257
+ mock.restore();
258
+ }
259
+ });
260
+ test("a large delegated page is batched, so no single filter URL grows unbounded", async () => {
261
+ // The clause is one `or` term per key in a GET URL. Unbatched at the schema's
262
+ // top:250 it builds a ~30 KB request URI, which Graph rejects — refusing the
263
+ // whole page, the exact failure this path removes.
264
+ const hits = Array.from({ length: 60 }, (_, i) => ({
265
+ id: `AQMk-${i}`,
266
+ internetMessageId: `<msg-${i}@DB9PR07MB8181.eurprd07.prod.outlook.com>`,
267
+ }));
268
+ const mock = mockGraph({
269
+ hits,
270
+ filterRows: hits.map((h) => ({ id: `AAkAL-${h.id.slice(5)}`, internetMessageId: h.internetMessageId })),
271
+ });
272
+ try {
273
+ const r = await runMailSearch(configFor("del-11", SHARED), { query: "invoice", top: 60 });
274
+ assert.equal(r.items.length, 60, "every hit still resolves across batches");
275
+ assert.equal(r.dropped, 0);
276
+ const filterUrls = mock.urls.filter((u) => u.includes("%24filter") || u.includes("$filter"));
277
+ assert.equal(filterUrls.length, 3, "60 distinct keys at a batch of 25 is three requests");
278
+ for (const u of filterUrls) {
279
+ assert.ok(u.length < 8000, `a single filter URL must stay bounded, got ${u.length} chars`);
280
+ }
281
+ }
282
+ finally {
283
+ mock.restore();
284
+ }
285
+ });
286
+ test("repeated keys are de-duplicated before batching, so a key is asked for once", async () => {
287
+ const mock = mockGraph({
288
+ hits: [
289
+ { id: "AQMk-a", internetMessageId: "<dup@x>" },
290
+ { id: "AQMk-b", internetMessageId: "<dup@x>" },
291
+ ],
292
+ filterRows: [{ id: "AAkAL-dup", internetMessageId: "<dup@x>" }],
293
+ });
294
+ try {
295
+ await runMailSearch(configFor("del-12", SHARED), { query: "invoice" });
296
+ const filterUrl = mock.urls.find((u) => u.includes("%24filter") || u.includes("$filter")) ?? "";
297
+ const terms = filterUrl.split("internetMessageId eq").length - 1;
298
+ assert.equal(terms, 1, "one term per DISTINCT key, not per hit");
299
+ }
300
+ finally {
301
+ mock.restore();
302
+ }
303
+ });
304
+ test("a delegated cursor continuation re-resolves its own page", async () => {
305
+ const mock = mockGraph({
306
+ hits: [{ id: "AQMk-three", internetMessageId: "<c@x>" }],
307
+ filterRows: [{ id: "AAkAL-three", internetMessageId: "<c@x>" }],
308
+ });
309
+ try {
310
+ const r = await runMailSearch(configFor("del-9", SHARED), {
311
+ query: "",
312
+ cursor: "https://graph.microsoft.com/v1.0/users/team%40muvin.co.uk/messages?$search=%22x%22&$skiptoken=ABC",
313
+ });
314
+ assert.deepEqual(r.items.map((i) => i.id), ["AAkAL-three"]);
315
+ assert.equal(filters(mock.urls), 1);
316
+ assert.equal(translates(mock.urls), 0);
317
+ }
318
+ finally {
319
+ mock.restore();
320
+ }
321
+ });
322
+ //# sourceMappingURL=mail-search-delegated-ids.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-search-delegated-ids.test.js","sourceRoot":"","sources":["../../src/__tests__/mail-search-delegated-ids.test.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { mkdtempSync, rmSync, existsSync, mkdirSync, writeFileSync } from "node:
4
4
  import { tmpdir } from "node:os";
5
5
  import { join } from "node:path";
6
6
  import { TokenStore } from "../auth/token-store.js";
7
- import { MailboxRegistry, credResolveEvent, mailboxStatus } from "../auth/mailbox-registry.js";
7
+ import { MailboxRegistry, credResolveEvent, mailboxStatus, notfoundRefusal } from "../auth/mailbox-registry.js";
8
8
  function makeAccountsDir() {
9
9
  const dir = mkdtempSync(join(tmpdir(), "outlook-reg-"));
10
10
  return { dir, cleanup: () => rmSync(dir, { recursive: true, force: true }) };
@@ -223,4 +223,24 @@ test("MailboxRegistry.storeFor overwrites the same mailbox in place", () => {
223
223
  cleanup();
224
224
  }
225
225
  });
226
+ // Task 2156. The refusal wording lives here, not in index.ts, because getConfig
227
+ // is module-private and importing index.ts from a test would boot the MCP server.
228
+ test("notfoundRefusal names the connected identities and the email plugin's status tool", () => {
229
+ const msg = notfoundRefusal({
230
+ kind: "notfound",
231
+ selector: "team@muvin.co.uk",
232
+ identities: ["admin@muvin.co.uk", "team2@muvin.co.uk (delegated)"],
233
+ });
234
+ // The existing contract: the selector and the full connected census.
235
+ assert.match(msg, /No Outlook mailbox "team@muvin\.co\.uk" is connected for this account\./);
236
+ assert.match(msg, /Connected: admin@muvin\.co\.uk, team2@muvin\.co\.uk \(delegated\)\./);
237
+ // The new contract: the census is Outlook-only, and the sibling plugin is named.
238
+ assert.match(msg, /This lists Outlook mailboxes only/);
239
+ assert.match(msg, /call email-status before concluding this account has no access to team@muvin\.co\.uk/);
240
+ });
241
+ test("notfoundRefusal still says 'none' when no Outlook mailbox is connected", () => {
242
+ const msg = notfoundRefusal({ kind: "notfound", selector: "a@x.com", identities: [] });
243
+ assert.match(msg, /Connected: none\./);
244
+ assert.match(msg, /call email-status/);
245
+ });
226
246
  //# sourceMappingURL=mailbox-registry.test.js.map