@rubytech/create-sitedesk-code 0.1.527 → 0.1.528

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 (705) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +82 -1
  3. package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +45 -13
  4. package/payload/platform/plugins/admin/mcp/dist/index.js +18 -4
  5. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  6. package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.d.ts +16 -0
  7. package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.d.ts.map +1 -0
  8. package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.js +69 -0
  9. package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.js.map +1 -0
  10. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +62 -4
  11. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +7 -0
  12. package/payload/platform/plugins/docs/references/admin-ui.md +58 -1
  13. package/payload/platform/plugins/docs/references/deployment.md +1 -1
  14. package/payload/platform/plugins/docs/references/plugins-guide.md +2 -1
  15. package/payload/platform/plugins/email/.claude-plugin/plugin.json +1 -1
  16. package/payload/platform/plugins/email/PLUGIN.md +8 -3
  17. package/payload/platform/plugins/email/mcp/dist/__tests__/compose-signature.test.js +61 -4
  18. package/payload/platform/plugins/email/mcp/dist/__tests__/compose-signature.test.js.map +1 -1
  19. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft-edit.test.js +41 -0
  20. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft-edit.test.js.map +1 -1
  21. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft.test.js +47 -1
  22. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft.test.js.map +1 -1
  23. package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.d.ts +2 -0
  24. package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.d.ts.map +1 -0
  25. package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.js +184 -0
  26. package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.js.map +1 -0
  27. package/payload/platform/plugins/email/mcp/dist/__tests__/email-signature-set.test.js +8 -5
  28. package/payload/platform/plugins/email/mcp/dist/__tests__/email-signature-set.test.js.map +1 -1
  29. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js +64 -0
  30. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js.map +1 -1
  31. package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js +132 -0
  32. package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js.map +1 -1
  33. package/payload/platform/plugins/email/mcp/dist/__tests__/signature.test.js +93 -11
  34. package/payload/platform/plugins/email/mcp/dist/__tests__/signature.test.js.map +1 -1
  35. package/payload/platform/plugins/email/mcp/dist/index.js +34 -3
  36. package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
  37. package/payload/platform/plugins/email/mcp/dist/lib/compose.d.ts +2 -1
  38. package/payload/platform/plugins/email/mcp/dist/lib/compose.d.ts.map +1 -1
  39. package/payload/platform/plugins/email/mcp/dist/lib/compose.js +13 -2
  40. package/payload/platform/plugins/email/mcp/dist/lib/compose.js.map +1 -1
  41. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +47 -2
  42. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
  43. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +92 -5
  44. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
  45. package/payload/platform/plugins/email/mcp/dist/lib/signature.d.ts +55 -7
  46. package/payload/platform/plugins/email/mcp/dist/lib/signature.d.ts.map +1 -1
  47. package/payload/platform/plugins/email/mcp/dist/lib/signature.js +72 -9
  48. package/payload/platform/plugins/email/mcp/dist/lib/signature.js.map +1 -1
  49. package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.d.ts.map +1 -1
  50. package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.js +5 -2
  51. package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.js.map +1 -1
  52. package/payload/platform/plugins/email/mcp/dist/tools/email-draft.d.ts.map +1 -1
  53. package/payload/platform/plugins/email/mcp/dist/tools/email-draft.js +6 -3
  54. package/payload/platform/plugins/email/mcp/dist/tools/email-draft.js.map +1 -1
  55. package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.d.ts +20 -0
  56. package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.d.ts.map +1 -0
  57. package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.js +32 -0
  58. package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.js.map +1 -0
  59. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts.map +1 -1
  60. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js +22 -2
  61. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js.map +1 -1
  62. package/payload/platform/plugins/email/references/email-reference.md +11 -3
  63. package/payload/platform/plugins/email/skills/email-composition/SKILL.md +3 -0
  64. package/payload/platform/plugins/email/skills/email-signature/SKILL.md +27 -9
  65. package/payload/platform/scripts/__tests__/vnc-cdp-liveness.test.sh +25 -2
  66. package/payload/platform/scripts/vnc.sh +34 -26
  67. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.d.ts +24 -1
  68. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.d.ts.map +1 -1
  69. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.js +84 -3
  70. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.js.map +1 -1
  71. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  72. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
  73. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  74. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  75. package/payload/server/{chunk-XCR5D2G3.js → chunk-BP7LH7MC.js} +0 -1
  76. package/payload/server/{chunk-KY3BBT67.js → chunk-DLG7XSLA.js} +1 -1
  77. package/payload/server/{chunk-7MGR5M6G.js → chunk-UTIHI6KV.js} +1 -1
  78. package/payload/server/{manager-6XOWHREK.js → manager-B4LRDZKC.js} +2 -2
  79. package/payload/server/maxy-edge.js +2 -2
  80. package/payload/server/public/activity.html +5 -5
  81. package/payload/server/public/agents.html +4 -4
  82. package/payload/server/public/assets/AdminLoginScreens-Bx9vPuUg.js +1 -0
  83. package/payload/server/public/assets/AdminLoginScreens-Bx9vPuUg.js.br +0 -0
  84. package/payload/server/public/assets/AdminLoginScreens-Bx9vPuUg.js.gz +0 -0
  85. package/payload/server/public/assets/AdminShell-BxJPbC3p.js +2 -0
  86. package/payload/server/public/assets/AdminShell-BxJPbC3p.js.br +0 -0
  87. package/payload/server/public/assets/AdminShell-BxJPbC3p.js.gz +0 -0
  88. package/payload/server/public/assets/CdpScreencastSurface-5HLhTQTV.js +1 -0
  89. package/payload/server/public/assets/CdpScreencastSurface-5HLhTQTV.js.br +0 -0
  90. package/payload/server/public/assets/CdpScreencastSurface-5HLhTQTV.js.gz +0 -0
  91. package/payload/server/public/assets/{activity-aVvbaVd4.js → activity-BaSYn62l.js} +1 -1
  92. package/payload/server/public/assets/activity-BaSYn62l.js.br +0 -0
  93. package/payload/server/public/assets/activity-BaSYn62l.js.gz +0 -0
  94. package/payload/server/public/assets/admin-CYCKrV_x.js +1 -0
  95. package/payload/server/public/assets/admin-CYCKrV_x.js.br +0 -0
  96. package/payload/server/public/assets/admin-CYCKrV_x.js.gz +0 -0
  97. package/payload/server/public/assets/{agents-CrpVTPRG.js → agents-D8EJG-ta.js} +1 -1
  98. package/payload/server/public/assets/agents-D8EJG-ta.js.br +0 -0
  99. package/payload/server/public/assets/agents-D8EJG-ta.js.gz +0 -0
  100. package/payload/server/public/assets/{arc-DaudCnXg.js → arc-CHoXZR2f.js} +1 -1
  101. package/payload/server/public/assets/arc-CHoXZR2f.js.br +0 -0
  102. package/payload/server/public/assets/arc-CHoXZR2f.js.gz +0 -0
  103. package/payload/server/public/assets/architecture-YZFGNWBL-CQyo9W6E.js +1 -0
  104. package/payload/server/public/assets/architecture-YZFGNWBL-CQyo9W6E.js.br +0 -0
  105. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BEEC3s7i.js → architectureDiagram-Q4EWVU46-B8SCI0AR.js} +1 -1
  106. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-B8SCI0AR.js.br +0 -0
  107. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-B8SCI0AR.js.gz +0 -0
  108. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BIWyfb18.js → blockDiagram-DXYQGD6D-CsJmhz5D.js} +1 -1
  109. package/payload/server/public/assets/blockDiagram-DXYQGD6D-CsJmhz5D.js.br +0 -0
  110. package/payload/server/public/assets/blockDiagram-DXYQGD6D-CsJmhz5D.js.gz +0 -0
  111. package/payload/server/public/assets/browser-D6Y_Zu8C.js +1 -0
  112. package/payload/server/public/assets/browser-D6Y_Zu8C.js.br +0 -0
  113. package/payload/server/public/assets/browser-D6Y_Zu8C.js.gz +0 -0
  114. package/payload/server/public/assets/{c4Diagram-AHTNJAMY--h6oE2cv.js → c4Diagram-AHTNJAMY-CzaSNqcs.js} +1 -1
  115. package/payload/server/public/assets/c4Diagram-AHTNJAMY-CzaSNqcs.js.br +0 -0
  116. package/payload/server/public/assets/c4Diagram-AHTNJAMY-CzaSNqcs.js.gz +0 -0
  117. package/payload/server/public/assets/{calendar-4IWQpwYv.js → calendar-DD4oVa-r.js} +1 -1
  118. package/payload/server/public/assets/calendar-DD4oVa-r.js.br +0 -0
  119. package/payload/server/public/assets/calendar-DD4oVa-r.js.gz +0 -0
  120. package/payload/server/public/assets/channel-Dg_Rah6O.js +1 -0
  121. package/payload/server/public/assets/channel-Dg_Rah6O.js.br +0 -0
  122. package/payload/server/public/assets/chat-CwWs69PO.js +1 -0
  123. package/payload/server/public/assets/chat-CwWs69PO.js.br +0 -0
  124. package/payload/server/public/assets/chat-CwWs69PO.js.gz +0 -0
  125. package/payload/server/public/assets/chevron-left-ClfIy5Fx.js +1 -0
  126. package/payload/server/public/assets/chevron-right-B0QvXpxl.js +1 -0
  127. package/payload/server/public/assets/chevron-right-B0QvXpxl.js.br +0 -0
  128. package/payload/server/public/assets/{chunk-2KRD3SAO-BwEVlnxo.js → chunk-2KRD3SAO-DAN3KCZc.js} +1 -1
  129. package/payload/server/public/assets/chunk-2KRD3SAO-DAN3KCZc.js.br +0 -0
  130. package/payload/server/public/assets/chunk-2KRD3SAO-DAN3KCZc.js.gz +0 -0
  131. package/payload/server/public/assets/{chunk-336JU56O-DQddTATH.js → chunk-336JU56O-Dm-0_lIT.js} +2 -2
  132. package/payload/server/public/assets/chunk-336JU56O-Dm-0_lIT.js.br +0 -0
  133. package/payload/server/public/assets/chunk-336JU56O-Dm-0_lIT.js.gz +0 -0
  134. package/payload/server/public/assets/chunk-426QAEUC-Rh8qTRZB.js +1 -0
  135. package/payload/server/public/assets/chunk-426QAEUC-Rh8qTRZB.js.br +0 -0
  136. package/payload/server/public/assets/chunk-426QAEUC-Rh8qTRZB.js.gz +0 -0
  137. package/payload/server/public/assets/{chunk-4BX2VUAB-C5p3xTC6.js → chunk-4BX2VUAB-C2l9bAlo.js} +1 -1
  138. package/payload/server/public/assets/chunk-4BX2VUAB-C2l9bAlo.js.br +0 -0
  139. package/payload/server/public/assets/chunk-4BX2VUAB-C2l9bAlo.js.gz +0 -0
  140. package/payload/server/public/assets/{chunk-4TB4RGXK-gClfNc1w.js → chunk-4TB4RGXK-BMXDzU09.js} +1 -1
  141. package/payload/server/public/assets/chunk-4TB4RGXK-BMXDzU09.js.br +0 -0
  142. package/payload/server/public/assets/chunk-4TB4RGXK-BMXDzU09.js.gz +0 -0
  143. package/payload/server/public/assets/{chunk-55IACEB6-DDU_m1ra.js → chunk-55IACEB6-CbMYAZon.js} +1 -1
  144. package/payload/server/public/assets/chunk-55IACEB6-CbMYAZon.js.br +0 -0
  145. package/payload/server/public/assets/chunk-55IACEB6-CbMYAZon.js.gz +0 -0
  146. package/payload/server/public/assets/{chunk-5FUZZQ4R-CZ2jQWNR.js → chunk-5FUZZQ4R-DjdsuxLA.js} +1 -1
  147. package/payload/server/public/assets/chunk-5FUZZQ4R-DjdsuxLA.js.br +0 -0
  148. package/payload/server/public/assets/chunk-5FUZZQ4R-DjdsuxLA.js.gz +0 -0
  149. package/payload/server/public/assets/{chunk-5PVQY5BW-kcZ5kfTg.js → chunk-5PVQY5BW-CGSBzsF6.js} +1 -1
  150. package/payload/server/public/assets/chunk-5PVQY5BW-CGSBzsF6.js.br +0 -0
  151. package/payload/server/public/assets/chunk-5PVQY5BW-CGSBzsF6.js.gz +0 -0
  152. package/payload/server/public/assets/{chunk-67CJDMHE-9W0Qv0jm.js → chunk-67CJDMHE-ClOLWser.js} +1 -1
  153. package/payload/server/public/assets/chunk-67CJDMHE-ClOLWser.js.br +0 -0
  154. package/payload/server/public/assets/chunk-67CJDMHE-ClOLWser.js.gz +0 -0
  155. package/payload/server/public/assets/{chunk-7N4EOEYR-B3gqydR3.js → chunk-7N4EOEYR-BzC1dzY0.js} +1 -1
  156. package/payload/server/public/assets/chunk-7N4EOEYR-BzC1dzY0.js.br +0 -0
  157. package/payload/server/public/assets/chunk-7N4EOEYR-BzC1dzY0.js.gz +0 -0
  158. package/payload/server/public/assets/{chunk-AA7GKIK3-DW8a-2NK.js → chunk-AA7GKIK3-R_pjI1kw.js} +1 -1
  159. package/payload/server/public/assets/chunk-AA7GKIK3-R_pjI1kw.js.br +0 -0
  160. package/payload/server/public/assets/chunk-AA7GKIK3-R_pjI1kw.js.gz +0 -0
  161. package/payload/server/public/assets/{chunk-BSJP7CBP-DqXIO_5R.js → chunk-BSJP7CBP-D2KRAq3U.js} +1 -1
  162. package/payload/server/public/assets/chunk-BSJP7CBP-D2KRAq3U.js.br +0 -0
  163. package/payload/server/public/assets/chunk-BSJP7CBP-D2KRAq3U.js.gz +0 -0
  164. package/payload/server/public/assets/{chunk-CIAEETIT-BMJfgj2u.js → chunk-CIAEETIT-BPGWtrKR.js} +1 -1
  165. package/payload/server/public/assets/chunk-CIAEETIT-BPGWtrKR.js.br +0 -0
  166. package/payload/server/public/assets/chunk-CIAEETIT-BPGWtrKR.js.gz +0 -0
  167. package/payload/server/public/assets/{chunk-EDXVE4YY-BxdLPk0b.js → chunk-EDXVE4YY-tqt7wueu.js} +1 -1
  168. package/payload/server/public/assets/chunk-EDXVE4YY-tqt7wueu.js.br +3 -0
  169. package/payload/server/public/assets/chunk-EDXVE4YY-tqt7wueu.js.gz +0 -0
  170. package/payload/server/public/assets/{chunk-ENJZ2VHE-Cfe2DCjQ.js → chunk-ENJZ2VHE-DJG3cA6E.js} +1 -1
  171. package/payload/server/public/assets/chunk-ENJZ2VHE-DJG3cA6E.js.br +0 -0
  172. package/payload/server/public/assets/chunk-ENJZ2VHE-DJG3cA6E.js.gz +0 -0
  173. package/payload/server/public/assets/{chunk-FMBD7UC4-CdPjwbtf.js → chunk-FMBD7UC4-DO1xgCDf.js} +1 -1
  174. package/payload/server/public/assets/chunk-FMBD7UC4-DO1xgCDf.js.br +2 -0
  175. package/payload/server/public/assets/chunk-FMBD7UC4-DO1xgCDf.js.gz +0 -0
  176. package/payload/server/public/assets/{chunk-FOC6F5B3-Dl6l1KAh.js → chunk-FOC6F5B3-BhWAbCUG.js} +1 -1
  177. package/payload/server/public/assets/chunk-FOC6F5B3-BhWAbCUG.js.br +0 -0
  178. package/payload/server/public/assets/chunk-FOC6F5B3-BhWAbCUG.js.gz +0 -0
  179. package/payload/server/public/assets/{chunk-ICPOFSXX-PnsGrqtx.js → chunk-ICPOFSXX-BhUzt35c.js} +2 -2
  180. package/payload/server/public/assets/chunk-ICPOFSXX-BhUzt35c.js.br +0 -0
  181. package/payload/server/public/assets/chunk-ICPOFSXX-BhUzt35c.js.gz +0 -0
  182. package/payload/server/public/assets/{chunk-K5T4RW27--g29_wjW.js → chunk-K5T4RW27-Boj-qHrX.js} +1 -1
  183. package/payload/server/public/assets/chunk-K5T4RW27-Boj-qHrX.js.br +0 -0
  184. package/payload/server/public/assets/chunk-K5T4RW27-Boj-qHrX.js.gz +0 -0
  185. package/payload/server/public/assets/{chunk-KGLVRYIC-CI77ENeO.js → chunk-KGLVRYIC-3cBRDk1b.js} +1 -1
  186. package/payload/server/public/assets/chunk-KGLVRYIC-3cBRDk1b.js.br +2 -0
  187. package/payload/server/public/assets/chunk-KGLVRYIC-3cBRDk1b.js.gz +0 -0
  188. package/payload/server/public/assets/{chunk-LIHQZDEY-CE-XByg6.js → chunk-LIHQZDEY-CgkLKaII.js} +1 -1
  189. package/payload/server/public/assets/chunk-LIHQZDEY-CgkLKaII.js.br +0 -0
  190. package/payload/server/public/assets/chunk-LIHQZDEY-CgkLKaII.js.gz +0 -0
  191. package/payload/server/public/assets/{chunk-ORNJ4GCN-DkjJQQSm.js → chunk-ORNJ4GCN-Dl449r_k.js} +1 -1
  192. package/payload/server/public/assets/chunk-ORNJ4GCN-Dl449r_k.js.br +0 -0
  193. package/payload/server/public/assets/chunk-ORNJ4GCN-Dl449r_k.js.gz +0 -0
  194. package/payload/server/public/assets/{chunk-OYMX7WX6-DhogFeD7.js → chunk-OYMX7WX6-Dzkj67n6.js} +1 -1
  195. package/payload/server/public/assets/chunk-OYMX7WX6-Dzkj67n6.js.br +0 -0
  196. package/payload/server/public/assets/chunk-OYMX7WX6-Dzkj67n6.js.gz +0 -0
  197. package/payload/server/public/assets/chunk-QZHKN3VN-BDoCtU0N.js +1 -0
  198. package/payload/server/public/assets/chunk-QZHKN3VN-BDoCtU0N.js.br +0 -0
  199. package/payload/server/public/assets/chunk-QZHKN3VN-BDoCtU0N.js.gz +0 -0
  200. package/payload/server/public/assets/{chunk-U2HBQHQK-CeaRXuiO.js → chunk-U2HBQHQK-Dyz9Kbir.js} +1 -1
  201. package/payload/server/public/assets/chunk-U2HBQHQK-Dyz9Kbir.js.br +0 -0
  202. package/payload/server/public/assets/chunk-U2HBQHQK-Dyz9Kbir.js.gz +0 -0
  203. package/payload/server/public/assets/{chunk-X2U36JSP-BqxXeOqf.js → chunk-X2U36JSP-ag0VVCw6.js} +1 -1
  204. package/payload/server/public/assets/chunk-X2U36JSP-ag0VVCw6.js.br +0 -0
  205. package/payload/server/public/assets/chunk-X2U36JSP-ag0VVCw6.js.gz +0 -0
  206. package/payload/server/public/assets/{chunk-XPW4576I-DtqJwn2x.js → chunk-XPW4576I-B-vhDYPE.js} +1 -1
  207. package/payload/server/public/assets/chunk-XPW4576I-B-vhDYPE.js.br +0 -0
  208. package/payload/server/public/assets/chunk-XPW4576I-B-vhDYPE.js.gz +0 -0
  209. package/payload/server/public/assets/{chunk-YZCP3GAM-COBlEwQw.js → chunk-YZCP3GAM-C4COviPb.js} +1 -1
  210. package/payload/server/public/assets/chunk-YZCP3GAM-C4COviPb.js.br +0 -0
  211. package/payload/server/public/assets/chunk-YZCP3GAM-C4COviPb.js.gz +0 -0
  212. package/payload/server/public/assets/{chunk-ZZ45TVLE-CcL088y6.js → chunk-ZZ45TVLE-8dGsCp5b.js} +1 -1
  213. package/payload/server/public/assets/chunk-ZZ45TVLE-8dGsCp5b.js.br +0 -0
  214. package/payload/server/public/assets/chunk-ZZ45TVLE-8dGsCp5b.js.gz +0 -0
  215. package/payload/server/public/assets/classDiagram-6PBFFD2Q-qevfwy5C.js +1 -0
  216. package/payload/server/public/assets/classDiagram-6PBFFD2Q-qevfwy5C.js.br +0 -0
  217. package/payload/server/public/assets/classDiagram-6PBFFD2Q-qevfwy5C.js.gz +0 -0
  218. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CxOR3aao.js +1 -0
  219. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CxOR3aao.js.br +0 -0
  220. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CxOR3aao.js.gz +0 -0
  221. package/payload/server/public/assets/clock-BIaRnIP_.js +1 -0
  222. package/payload/server/public/assets/clock-BIaRnIP_.js.br +0 -0
  223. package/payload/server/public/assets/clock-BIaRnIP_.js.gz +0 -0
  224. package/payload/server/public/assets/clone-CJmzeWWZ.js +1 -0
  225. package/payload/server/public/assets/clone-CJmzeWWZ.js.br +0 -0
  226. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-kEHVkDNn.js → cose-bilkent-S5V4N54A-qM4Q4TuE.js} +1 -1
  227. package/payload/server/public/assets/cose-bilkent-S5V4N54A-qM4Q4TuE.js.br +0 -0
  228. package/payload/server/public/assets/cose-bilkent-S5V4N54A-qM4Q4TuE.js.gz +0 -0
  229. package/payload/server/public/assets/{dagre-D2wUw1zC.js → dagre-DRvHdusQ.js} +1 -1
  230. package/payload/server/public/assets/dagre-DRvHdusQ.js.br +0 -0
  231. package/payload/server/public/assets/dagre-DRvHdusQ.js.gz +0 -0
  232. package/payload/server/public/assets/{dagre-KV5264BT-BWfTDwEs.js → dagre-KV5264BT-CGqSVVTn.js} +1 -1
  233. package/payload/server/public/assets/dagre-KV5264BT-CGqSVVTn.js.br +0 -0
  234. package/payload/server/public/assets/dagre-KV5264BT-CGqSVVTn.js.gz +0 -0
  235. package/payload/server/public/assets/data-O_9Kiicl.js +1 -0
  236. package/payload/server/public/assets/data-O_9Kiicl.js.br +2 -0
  237. package/payload/server/public/assets/data-O_9Kiicl.js.gz +0 -0
  238. package/payload/server/public/assets/{diagram-5BDNPKRD-Tl9dS8w0.js → diagram-5BDNPKRD-DfFgeApz.js} +1 -1
  239. package/payload/server/public/assets/diagram-5BDNPKRD-DfFgeApz.js.br +0 -0
  240. package/payload/server/public/assets/diagram-5BDNPKRD-DfFgeApz.js.gz +0 -0
  241. package/payload/server/public/assets/{diagram-G4DWMVQ6-CeSe6TMu.js → diagram-G4DWMVQ6-DPXc3Q8e.js} +1 -1
  242. package/payload/server/public/assets/diagram-G4DWMVQ6-DPXc3Q8e.js.br +0 -0
  243. package/payload/server/public/assets/diagram-G4DWMVQ6-DPXc3Q8e.js.gz +0 -0
  244. package/payload/server/public/assets/{diagram-MMDJMWI5-DYBNJCmk.js → diagram-MMDJMWI5-V8RCddvy.js} +1 -1
  245. package/payload/server/public/assets/diagram-MMDJMWI5-V8RCddvy.js.br +0 -0
  246. package/payload/server/public/assets/diagram-MMDJMWI5-V8RCddvy.js.gz +0 -0
  247. package/payload/server/public/assets/{diagram-TYMM5635-BmpUGltx.js → diagram-TYMM5635-CrvfIf-m.js} +1 -1
  248. package/payload/server/public/assets/diagram-TYMM5635-CrvfIf-m.js.br +0 -0
  249. package/payload/server/public/assets/diagram-TYMM5635-CrvfIf-m.js.gz +0 -0
  250. package/payload/server/public/assets/{erDiagram-SMLLAGMA-DuwuNGqx.js → erDiagram-SMLLAGMA-DClMgmBB.js} +1 -1
  251. package/payload/server/public/assets/erDiagram-SMLLAGMA-DClMgmBB.js.br +0 -0
  252. package/payload/server/public/assets/erDiagram-SMLLAGMA-DClMgmBB.js.gz +0 -0
  253. package/payload/server/public/assets/{file-download-DayBHhKS.js → file-download-sXU3_umF.js} +1 -1
  254. package/payload/server/public/assets/file-download-sXU3_umF.js.br +0 -0
  255. package/payload/server/public/assets/file-download-sXU3_umF.js.gz +0 -0
  256. package/payload/server/public/assets/{file-text-BSyhVH0m.js → file-text-CeXBviDH.js} +1 -1
  257. package/payload/server/public/assets/file-text-CeXBviDH.js.br +0 -0
  258. package/payload/server/public/assets/file-text-CeXBviDH.js.gz +0 -0
  259. package/payload/server/public/assets/{flatten-Bu-b1uTY.js → flatten-UdUTbm8v.js} +1 -1
  260. package/payload/server/public/assets/flatten-UdUTbm8v.js.br +0 -0
  261. package/payload/server/public/assets/flatten-UdUTbm8v.js.gz +0 -0
  262. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-Bpp8P6Ba.js → flowDiagram-DWJPFMVM-D29Ou09P.js} +1 -1
  263. package/payload/server/public/assets/flowDiagram-DWJPFMVM-D29Ou09P.js.br +0 -0
  264. package/payload/server/public/assets/flowDiagram-DWJPFMVM-D29Ou09P.js.gz +0 -0
  265. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-CE6ppjB4.js → ganttDiagram-T4ZO3ILL-CoAK7W_V.js} +1 -1
  266. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CoAK7W_V.js.br +0 -0
  267. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CoAK7W_V.js.gz +0 -0
  268. package/payload/server/public/assets/gitGraph-7Q5UKJZL--JSoLMoH.js +1 -0
  269. package/payload/server/public/assets/gitGraph-7Q5UKJZL--JSoLMoH.js.br +0 -0
  270. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BdK1GjPr.js → gitGraphDiagram-UUTBAWPF-DMEc_1aX.js} +1 -1
  271. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DMEc_1aX.js.br +0 -0
  272. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DMEc_1aX.js.gz +0 -0
  273. package/payload/server/public/assets/{graph-Bjv3Tc3B.js → graph-BSuDP6k7.js} +3 -3
  274. package/payload/server/public/assets/graph-BSuDP6k7.js.br +0 -0
  275. package/payload/server/public/assets/graph-BSuDP6k7.js.gz +0 -0
  276. package/payload/server/public/assets/{graph-labels-DegLKGdx.js → graph-labels-D2pQkgYW.js} +1 -1
  277. package/payload/server/public/assets/graph-labels-D2pQkgYW.js.br +0 -0
  278. package/payload/server/public/assets/graph-labels-D2pQkgYW.js.gz +0 -0
  279. package/payload/server/public/assets/{graphlib-CHEXylyU.js → graphlib-ihSLgqUG.js} +1 -1
  280. package/payload/server/public/assets/graphlib-ihSLgqUG.js.br +0 -0
  281. package/payload/server/public/assets/graphlib-ihSLgqUG.js.gz +0 -0
  282. package/payload/server/public/assets/info-OMHHGYJF-CY4gsXn4.js +1 -0
  283. package/payload/server/public/assets/info-OMHHGYJF-CY4gsXn4.js.br +0 -0
  284. package/payload/server/public/assets/infoDiagram-42DDH7IO-CpWSNS3C.js +2 -0
  285. package/payload/server/public/assets/infoDiagram-42DDH7IO-CpWSNS3C.js.br +0 -0
  286. package/payload/server/public/assets/infoDiagram-42DDH7IO-CpWSNS3C.js.gz +0 -0
  287. package/payload/server/public/assets/{isEmpty-CjH0UASp.js → isEmpty-DY_Xp9Na.js} +1 -1
  288. package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.br +0 -0
  289. package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.gz +0 -0
  290. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js → ishikawaDiagram-UXIWVN3A-w8fVIbxy.js} +1 -1
  291. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-w8fVIbxy.js.br +0 -0
  292. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-w8fVIbxy.js.gz +0 -0
  293. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-ByUPv8q6.js → journeyDiagram-VCZTEJTY-BRTPKDT5.js} +1 -1
  294. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-BRTPKDT5.js.br +0 -0
  295. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-BRTPKDT5.js.gz +0 -0
  296. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-CFinqhpu.js → kanban-definition-6JOO6SKY-Ls3VaFZ_.js} +1 -1
  297. package/payload/server/public/assets/kanban-definition-6JOO6SKY-Ls3VaFZ_.js.br +0 -0
  298. package/payload/server/public/assets/kanban-definition-6JOO6SKY-Ls3VaFZ_.js.gz +0 -0
  299. package/payload/server/public/assets/{line-Y4ns5Ghi.js → line-BwhAIh8u.js} +1 -1
  300. package/payload/server/public/assets/line-BwhAIh8u.js.br +0 -0
  301. package/payload/server/public/assets/line-BwhAIh8u.js.gz +0 -0
  302. package/payload/server/public/assets/{linear-l39GooQ5.js → linear-USiZPFN4.js} +1 -1
  303. package/payload/server/public/assets/linear-USiZPFN4.js.br +0 -0
  304. package/payload/server/public/assets/linear-USiZPFN4.js.gz +0 -0
  305. package/payload/server/public/assets/{maximize-2-DJFG2EXJ.js → maximize-2-DlzSNygU.js} +1 -1
  306. package/payload/server/public/assets/maximize-2-DlzSNygU.js.br +0 -0
  307. package/payload/server/public/assets/maximize-2-DlzSNygU.js.gz +0 -0
  308. package/payload/server/public/assets/{mermaid-parser.core-5w0T1dRj.js → mermaid-parser.core-Bq--iC2w.js} +2 -2
  309. package/payload/server/public/assets/mermaid-parser.core-Bq--iC2w.js.br +0 -0
  310. package/payload/server/public/assets/mermaid-parser.core-Bq--iC2w.js.gz +0 -0
  311. package/payload/server/public/assets/{mermaid.core-DBADY5VW.js → mermaid.core-oYX-FxVa.js} +3 -3
  312. package/payload/server/public/assets/mermaid.core-oYX-FxVa.js.br +0 -0
  313. package/payload/server/public/assets/mermaid.core-oYX-FxVa.js.gz +0 -0
  314. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-rHz37loq.js → mindmap-definition-QFDTVHPH-ByZjL4Bs.js} +1 -1
  315. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-ByZjL4Bs.js.br +0 -0
  316. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-ByZjL4Bs.js.gz +0 -0
  317. package/payload/server/public/assets/operator-BP61-xjz.js +1 -0
  318. package/payload/server/public/assets/operator-BP61-xjz.js.br +0 -0
  319. package/payload/server/public/assets/operator-BP61-xjz.js.gz +0 -0
  320. package/payload/server/public/assets/{ordinal-D6D6WcTC.js → ordinal-gnpqfIHn.js} +1 -1
  321. package/payload/server/public/assets/ordinal-gnpqfIHn.js.br +0 -0
  322. package/payload/server/public/assets/ordinal-gnpqfIHn.js.gz +0 -0
  323. package/payload/server/public/assets/packet-4T2RLAQJ-DczCn3uj.js +1 -0
  324. package/payload/server/public/assets/packet-4T2RLAQJ-DczCn3uj.js.br +0 -0
  325. package/payload/server/public/assets/page-DX7ArY_s.js +1 -0
  326. package/payload/server/public/assets/page-DX7ArY_s.js.br +0 -0
  327. package/payload/server/public/assets/page-DX7ArY_s.js.gz +0 -0
  328. package/payload/server/public/assets/page-eQ4OVros.js +32 -0
  329. package/payload/server/public/assets/page-eQ4OVros.js.br +0 -0
  330. package/payload/server/public/assets/page-eQ4OVros.js.gz +0 -0
  331. package/payload/server/public/assets/{pdf-render-BSgBp8Fr.js → pdf-render-gEryZmeC.js} +1 -1
  332. package/payload/server/public/assets/pdf-render-gEryZmeC.js.br +0 -0
  333. package/payload/server/public/assets/pdf-render-gEryZmeC.js.gz +0 -0
  334. package/payload/server/public/assets/pie-ZZUOXDRM-CbvZUaof.js +1 -0
  335. package/payload/server/public/assets/pie-ZZUOXDRM-CbvZUaof.js.br +0 -0
  336. package/payload/server/public/assets/{pieDiagram-DEJITSTG-as0e_DSH.js → pieDiagram-DEJITSTG-BGFms5bU.js} +1 -1
  337. package/payload/server/public/assets/pieDiagram-DEJITSTG-BGFms5bU.js.br +0 -0
  338. package/payload/server/public/assets/pieDiagram-DEJITSTG-BGFms5bU.js.gz +0 -0
  339. package/payload/server/public/assets/{public-CNVEM-Bx.js → public-DPDKFKM2.js} +1 -1
  340. package/payload/server/public/assets/public-DPDKFKM2.js.br +0 -0
  341. package/payload/server/public/assets/public-DPDKFKM2.js.gz +0 -0
  342. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-B4t8HO9J.js → quadrantDiagram-34T5L4WZ-_ymoz8bQ.js} +1 -1
  343. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-_ymoz8bQ.js.br +0 -0
  344. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-_ymoz8bQ.js.gz +0 -0
  345. package/payload/server/public/assets/radar-PYXPWWZC-XmuabQlO.js +1 -0
  346. package/payload/server/public/assets/radar-PYXPWWZC-XmuabQlO.js.br +0 -0
  347. package/payload/server/public/assets/{reduce-BtXXK8Ma.js → reduce-BvezuHIe.js} +1 -1
  348. package/payload/server/public/assets/reduce-BvezuHIe.js.br +0 -0
  349. package/payload/server/public/assets/reduce-BvezuHIe.js.gz +0 -0
  350. package/payload/server/public/assets/{requirementDiagram-MS252O5E-yxh30zHX.js → requirementDiagram-MS252O5E-lrOmOxIA.js} +1 -1
  351. package/payload/server/public/assets/requirementDiagram-MS252O5E-lrOmOxIA.js.br +0 -0
  352. package/payload/server/public/assets/requirementDiagram-MS252O5E-lrOmOxIA.js.gz +0 -0
  353. package/payload/server/public/assets/{rotate-ccw-DQCaky8_.js → rotate-ccw-BR0JbPFV.js} +1 -1
  354. package/payload/server/public/assets/rotate-ccw-BR0JbPFV.js.br +0 -0
  355. package/payload/server/public/assets/rotate-ccw-BR0JbPFV.js.gz +0 -0
  356. package/payload/server/public/assets/{routines-DwK5FeLm.js → routines-y413YZa-.js} +1 -1
  357. package/payload/server/public/assets/routines-y413YZa-.js.br +0 -0
  358. package/payload/server/public/assets/routines-y413YZa-.js.gz +0 -0
  359. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-j-k9Wfty.js → sankeyDiagram-XADWPNL6-CdUQThXU.js} +1 -1
  360. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-CdUQThXU.js.br +0 -0
  361. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-CdUQThXU.js.gz +0 -0
  362. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DGLgcLhC.js → sequenceDiagram-FGHM5R23-DqnEEldq.js} +1 -1
  363. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DqnEEldq.js.br +0 -0
  364. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DqnEEldq.js.gz +0 -0
  365. package/payload/server/public/assets/{skills-CosN3uA4.js → skills-fH0uA7cj.js} +1 -1
  366. package/payload/server/public/assets/skills-fH0uA7cj.js.br +0 -0
  367. package/payload/server/public/assets/skills-fH0uA7cj.js.gz +0 -0
  368. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-C9p1OUMI.js → stateDiagram-FHFEXIEX-KEdtxqdq.js} +1 -1
  369. package/payload/server/public/assets/stateDiagram-FHFEXIEX-KEdtxqdq.js.br +0 -0
  370. package/payload/server/public/assets/stateDiagram-FHFEXIEX-KEdtxqdq.js.gz +0 -0
  371. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Cs85Ewtt.js +1 -0
  372. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Cs85Ewtt.js.br +0 -0
  373. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Cs85Ewtt.js.gz +0 -0
  374. package/payload/server/public/assets/{tasks-f0QikHmw.js → tasks-CrVzFrTR.js} +2 -2
  375. package/payload/server/public/assets/tasks-CrVzFrTR.js.br +0 -0
  376. package/payload/server/public/assets/tasks-CrVzFrTR.js.gz +0 -0
  377. package/payload/server/public/assets/{time-entry-format-DLTdS35_.js → time-entry-format-C_0jiMpQ.js} +1 -1
  378. package/payload/server/public/assets/time-entry-format-C_0jiMpQ.js.br +1 -0
  379. package/payload/server/public/assets/time-entry-format-C_0jiMpQ.js.gz +0 -0
  380. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-B1g7pgkH.js → timeline-definition-GMOUNBTQ-BRXdCMau.js} +1 -1
  381. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-BRXdCMau.js.br +0 -0
  382. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-BRXdCMau.js.gz +0 -0
  383. package/payload/server/public/assets/treeView-SZITEDCU-B-SYhqwK.js +1 -0
  384. package/payload/server/public/assets/treeView-SZITEDCU-B-SYhqwK.js.br +0 -0
  385. package/payload/server/public/assets/treemap-W4RFUUIX-DpZmFNM9.js +1 -0
  386. package/payload/server/public/assets/treemap-W4RFUUIX-DpZmFNM9.js.br +0 -0
  387. package/payload/server/public/assets/{triangle-alert-CpwrbdYq.js → triangle-alert-eLJHC_QJ.js} +1 -1
  388. package/payload/server/public/assets/triangle-alert-eLJHC_QJ.js.br +1 -0
  389. package/payload/server/public/assets/triangle-alert-eLJHC_QJ.js.gz +0 -0
  390. package/payload/server/public/assets/{useCopyFeedback-D01gSp36.js → useCopyFeedback-vPCmdOmY.js} +1 -1
  391. package/payload/server/public/assets/useCopyFeedback-vPCmdOmY.js.br +0 -0
  392. package/payload/server/public/assets/useCopyFeedback-vPCmdOmY.js.gz +0 -0
  393. package/payload/server/public/assets/useSubAccountSwitcher-DMr3DR5N.js +14 -0
  394. package/payload/server/public/assets/useSubAccountSwitcher-DMr3DR5N.js.br +0 -0
  395. package/payload/server/public/assets/useSubAccountSwitcher-DMr3DR5N.js.gz +0 -0
  396. package/payload/server/public/assets/useSubAccountSwitcher-DxuUS_C7.css +1 -0
  397. package/payload/server/public/assets/useSubAccountSwitcher-DxuUS_C7.css.br +0 -0
  398. package/payload/server/public/assets/useSubAccountSwitcher-DxuUS_C7.css.gz +0 -0
  399. package/payload/server/public/assets/{useVoiceRecorder-DiPgyDUy.js → useVoiceRecorder-D5bFDRqL.js} +2 -2
  400. package/payload/server/public/assets/useVoiceRecorder-D5bFDRqL.js.br +0 -0
  401. package/payload/server/public/assets/useVoiceRecorder-D5bFDRqL.js.gz +0 -0
  402. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-D2ZjFfh4.js → vennDiagram-DHZGUBPP-8nc7NUVQ.js} +1 -1
  403. package/payload/server/public/assets/vennDiagram-DHZGUBPP-8nc7NUVQ.js.br +0 -0
  404. package/payload/server/public/assets/vennDiagram-DHZGUBPP-8nc7NUVQ.js.gz +0 -0
  405. package/payload/server/public/assets/wardley-RL74JXVD-D2FCCV4-.js +1 -0
  406. package/payload/server/public/assets/wardley-RL74JXVD-D2FCCV4-.js.br +0 -0
  407. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BFAhfkD8.js → wardleyDiagram-NUSXRM2D-Cjjiap8M.js} +1 -1
  408. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-Cjjiap8M.js.br +0 -0
  409. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-Cjjiap8M.js.gz +0 -0
  410. package/payload/server/public/assets/{wrench-C5SJreEu.js → wrench-sXisQXkf.js} +1 -1
  411. package/payload/server/public/assets/wrench-sXisQXkf.js.br +0 -0
  412. package/payload/server/public/assets/wrench-sXisQXkf.js.gz +0 -0
  413. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-Dt94h2RQ.js → xychartDiagram-5P7HB3ND-DEzDNw_i.js} +1 -1
  414. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DEzDNw_i.js.br +0 -0
  415. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DEzDNw_i.js.gz +0 -0
  416. package/payload/server/public/browser.html +5 -4
  417. package/payload/server/public/calendar.html +7 -7
  418. package/payload/server/public/chat.html +14 -14
  419. package/payload/server/public/data.html +13 -13
  420. package/payload/server/public/graph.html +9 -9
  421. package/payload/server/public/index.html +17 -16
  422. package/payload/server/public/operator.html +16 -15
  423. package/payload/server/public/public.html +14 -14
  424. package/payload/server/public/routines.html +7 -7
  425. package/payload/server/public/skills.html +5 -5
  426. package/payload/server/public/tasks.html +6 -6
  427. package/payload/server/server.js +61 -73
  428. package/payload/server/public/assets/AdminLoginScreens-DSt9DYZZ.js +0 -1
  429. package/payload/server/public/assets/AdminLoginScreens-DSt9DYZZ.js.br +0 -0
  430. package/payload/server/public/assets/AdminLoginScreens-DSt9DYZZ.js.gz +0 -0
  431. package/payload/server/public/assets/AdminShell-MM3_yp3N.js +0 -2
  432. package/payload/server/public/assets/AdminShell-MM3_yp3N.js.br +0 -0
  433. package/payload/server/public/assets/AdminShell-MM3_yp3N.js.gz +0 -0
  434. package/payload/server/public/assets/activity-aVvbaVd4.js.br +0 -0
  435. package/payload/server/public/assets/activity-aVvbaVd4.js.gz +0 -0
  436. package/payload/server/public/assets/admin-B0lQnkH-.js +0 -1
  437. package/payload/server/public/assets/admin-B0lQnkH-.js.br +0 -0
  438. package/payload/server/public/assets/admin-B0lQnkH-.js.gz +0 -0
  439. package/payload/server/public/assets/agents-CrpVTPRG.js.br +0 -0
  440. package/payload/server/public/assets/agents-CrpVTPRG.js.gz +0 -0
  441. package/payload/server/public/assets/arc-DaudCnXg.js.br +0 -0
  442. package/payload/server/public/assets/arc-DaudCnXg.js.gz +0 -0
  443. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js +0 -1
  444. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js.br +0 -0
  445. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.br +0 -0
  446. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.gz +0 -0
  447. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.br +0 -0
  448. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.gz +0 -0
  449. package/payload/server/public/assets/browser-CYHUzTop.js +0 -1
  450. package/payload/server/public/assets/browser-CYHUzTop.js.br +0 -0
  451. package/payload/server/public/assets/browser-CYHUzTop.js.gz +0 -0
  452. package/payload/server/public/assets/c4Diagram-AHTNJAMY--h6oE2cv.js.br +0 -0
  453. package/payload/server/public/assets/c4Diagram-AHTNJAMY--h6oE2cv.js.gz +0 -0
  454. package/payload/server/public/assets/calendar-4IWQpwYv.js.br +0 -0
  455. package/payload/server/public/assets/calendar-4IWQpwYv.js.gz +0 -0
  456. package/payload/server/public/assets/channel-TwxCDSpK.js +0 -1
  457. package/payload/server/public/assets/channel-TwxCDSpK.js.br +0 -0
  458. package/payload/server/public/assets/chat-DmjZTqnV.js +0 -1
  459. package/payload/server/public/assets/chat-DmjZTqnV.js.br +0 -0
  460. package/payload/server/public/assets/chat-DmjZTqnV.js.gz +0 -0
  461. package/payload/server/public/assets/chevron-left-CIl-s3LZ.js +0 -1
  462. package/payload/server/public/assets/chevron-left-CIl-s3LZ.js.br +0 -0
  463. package/payload/server/public/assets/chevron-right-DpAi2BsF.js +0 -1
  464. package/payload/server/public/assets/chevron-right-DpAi2BsF.js.br +0 -0
  465. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.br +0 -0
  466. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.gz +0 -0
  467. package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.br +0 -0
  468. package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.gz +0 -0
  469. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js +0 -1
  470. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.br +0 -0
  471. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.gz +0 -0
  472. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.br +0 -0
  473. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.gz +0 -0
  474. package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.br +0 -0
  475. package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.gz +0 -0
  476. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.br +0 -0
  477. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.gz +0 -0
  478. package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.br +0 -0
  479. package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.gz +0 -0
  480. package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.br +0 -0
  481. package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.gz +0 -0
  482. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.br +0 -0
  483. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.gz +0 -0
  484. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.br +0 -0
  485. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.gz +0 -0
  486. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.br +0 -4
  487. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.gz +0 -0
  488. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.br +0 -0
  489. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.gz +0 -0
  490. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.br +0 -0
  491. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.gz +0 -0
  492. package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.br +0 -0
  493. package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.gz +0 -0
  494. package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.br +0 -0
  495. package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.gz +0 -0
  496. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.br +0 -0
  497. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.gz +0 -0
  498. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.br +0 -0
  499. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.gz +0 -0
  500. package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.br +0 -0
  501. package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.gz +0 -0
  502. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.br +0 -0
  503. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.gz +0 -0
  504. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.br +0 -3
  505. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.gz +0 -0
  506. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.br +0 -0
  507. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.gz +0 -0
  508. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.br +0 -0
  509. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.gz +0 -0
  510. package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.br +0 -0
  511. package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.gz +0 -0
  512. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js +0 -1
  513. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.br +0 -0
  514. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.gz +0 -0
  515. package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.br +0 -0
  516. package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.gz +0 -0
  517. package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.br +0 -0
  518. package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.gz +0 -0
  519. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.br +0 -0
  520. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.gz +0 -0
  521. package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.br +0 -0
  522. package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.gz +0 -0
  523. package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.br +0 -0
  524. package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.gz +0 -0
  525. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js +0 -1
  526. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.br +0 -0
  527. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.gz +0 -0
  528. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js +0 -1
  529. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.br +0 -0
  530. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.gz +0 -0
  531. package/payload/server/public/assets/clock-CGuM9VRx.js +0 -1
  532. package/payload/server/public/assets/clock-CGuM9VRx.js.br +0 -0
  533. package/payload/server/public/assets/clone-B3vq32j7.js +0 -1
  534. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.br +0 -0
  535. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.gz +0 -0
  536. package/payload/server/public/assets/dagre-D2wUw1zC.js.br +0 -0
  537. package/payload/server/public/assets/dagre-D2wUw1zC.js.gz +0 -0
  538. package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.br +0 -0
  539. package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.gz +0 -0
  540. package/payload/server/public/assets/data-BpdFiZKH.js +0 -1
  541. package/payload/server/public/assets/data-BpdFiZKH.js.br +0 -2
  542. package/payload/server/public/assets/data-BpdFiZKH.js.gz +0 -0
  543. package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.br +0 -0
  544. package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.gz +0 -0
  545. package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.br +0 -0
  546. package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.gz +0 -0
  547. package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.br +0 -0
  548. package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.gz +0 -0
  549. package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.br +0 -0
  550. package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.gz +0 -0
  551. package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.br +0 -0
  552. package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.gz +0 -0
  553. package/payload/server/public/assets/file-download-DayBHhKS.js.br +0 -0
  554. package/payload/server/public/assets/file-download-DayBHhKS.js.gz +0 -0
  555. package/payload/server/public/assets/file-text-BSyhVH0m.js.br +0 -0
  556. package/payload/server/public/assets/file-text-BSyhVH0m.js.gz +0 -0
  557. package/payload/server/public/assets/flatten-Bu-b1uTY.js.br +0 -0
  558. package/payload/server/public/assets/flatten-Bu-b1uTY.js.gz +0 -0
  559. package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.br +0 -0
  560. package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.gz +0 -0
  561. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.br +0 -0
  562. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.gz +0 -0
  563. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js +0 -1
  564. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js.br +0 -0
  565. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.br +0 -0
  566. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.gz +0 -0
  567. package/payload/server/public/assets/graph-Bjv3Tc3B.js.br +0 -0
  568. package/payload/server/public/assets/graph-Bjv3Tc3B.js.gz +0 -0
  569. package/payload/server/public/assets/graph-labels-DegLKGdx.js.br +0 -0
  570. package/payload/server/public/assets/graph-labels-DegLKGdx.js.gz +0 -0
  571. package/payload/server/public/assets/graphlib-CHEXylyU.js.br +0 -0
  572. package/payload/server/public/assets/graphlib-CHEXylyU.js.gz +0 -0
  573. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js +0 -1
  574. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js.br +0 -0
  575. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js +0 -2
  576. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.br +0 -0
  577. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.gz +0 -0
  578. package/payload/server/public/assets/isEmpty-CjH0UASp.js.br +0 -0
  579. package/payload/server/public/assets/isEmpty-CjH0UASp.js.gz +0 -0
  580. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.br +0 -0
  581. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.gz +0 -0
  582. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.br +0 -0
  583. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.gz +0 -0
  584. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.br +0 -0
  585. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.gz +0 -0
  586. package/payload/server/public/assets/line-Y4ns5Ghi.js.br +0 -0
  587. package/payload/server/public/assets/line-Y4ns5Ghi.js.gz +0 -0
  588. package/payload/server/public/assets/linear-l39GooQ5.js.br +0 -0
  589. package/payload/server/public/assets/linear-l39GooQ5.js.gz +0 -0
  590. package/payload/server/public/assets/maximize-2-DJFG2EXJ.js.br +0 -0
  591. package/payload/server/public/assets/maximize-2-DJFG2EXJ.js.gz +0 -0
  592. package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.br +0 -0
  593. package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.gz +0 -0
  594. package/payload/server/public/assets/mermaid.core-DBADY5VW.js.br +0 -0
  595. package/payload/server/public/assets/mermaid.core-DBADY5VW.js.gz +0 -0
  596. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.br +0 -0
  597. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.gz +0 -0
  598. package/payload/server/public/assets/operator-Du9Ve_PR.js +0 -1
  599. package/payload/server/public/assets/operator-Du9Ve_PR.js.br +0 -0
  600. package/payload/server/public/assets/operator-Du9Ve_PR.js.gz +0 -0
  601. package/payload/server/public/assets/ordinal-D6D6WcTC.js.br +0 -0
  602. package/payload/server/public/assets/ordinal-D6D6WcTC.js.gz +0 -0
  603. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js +0 -1
  604. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js.br +0 -0
  605. package/payload/server/public/assets/page-DgHYxG3M.js +0 -1
  606. package/payload/server/public/assets/page-DgHYxG3M.js.br +0 -0
  607. package/payload/server/public/assets/page-DgHYxG3M.js.gz +0 -0
  608. package/payload/server/public/assets/page-qV1ypb6i.js +0 -32
  609. package/payload/server/public/assets/page-qV1ypb6i.js.br +0 -0
  610. package/payload/server/public/assets/page-qV1ypb6i.js.gz +0 -0
  611. package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.br +0 -0
  612. package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.gz +0 -0
  613. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js +0 -1
  614. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js.br +0 -0
  615. package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.br +0 -0
  616. package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.gz +0 -0
  617. package/payload/server/public/assets/public-CNVEM-Bx.js.br +0 -0
  618. package/payload/server/public/assets/public-CNVEM-Bx.js.gz +0 -0
  619. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.br +0 -0
  620. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.gz +0 -0
  621. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js +0 -1
  622. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js.br +0 -0
  623. package/payload/server/public/assets/reduce-BtXXK8Ma.js.br +0 -0
  624. package/payload/server/public/assets/reduce-BtXXK8Ma.js.gz +0 -0
  625. package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.br +0 -0
  626. package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.gz +0 -0
  627. package/payload/server/public/assets/rotate-ccw-DQCaky8_.js.br +0 -0
  628. package/payload/server/public/assets/rotate-ccw-DQCaky8_.js.gz +0 -0
  629. package/payload/server/public/assets/routines-DwK5FeLm.js.br +0 -0
  630. package/payload/server/public/assets/routines-DwK5FeLm.js.gz +0 -0
  631. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.br +0 -0
  632. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.gz +0 -0
  633. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.br +0 -0
  634. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.gz +0 -0
  635. package/payload/server/public/assets/skills-CosN3uA4.js.br +0 -0
  636. package/payload/server/public/assets/skills-CosN3uA4.js.gz +0 -0
  637. package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.br +0 -0
  638. package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.gz +0 -0
  639. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js +0 -1
  640. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.br +0 -0
  641. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.gz +0 -0
  642. package/payload/server/public/assets/tasks-f0QikHmw.js.br +0 -0
  643. package/payload/server/public/assets/tasks-f0QikHmw.js.gz +0 -0
  644. package/payload/server/public/assets/time-entry-format-DLTdS35_.js.br +0 -0
  645. package/payload/server/public/assets/time-entry-format-DLTdS35_.js.gz +0 -0
  646. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.br +0 -0
  647. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.gz +0 -0
  648. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js +0 -1
  649. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js.br +0 -0
  650. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js +0 -1
  651. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js.br +0 -0
  652. package/payload/server/public/assets/triangle-alert-CpwrbdYq.js.br +0 -3
  653. package/payload/server/public/assets/triangle-alert-CpwrbdYq.js.gz +0 -0
  654. package/payload/server/public/assets/useCopyFeedback-D01gSp36.js.br +0 -0
  655. package/payload/server/public/assets/useCopyFeedback-D01gSp36.js.gz +0 -0
  656. package/payload/server/public/assets/useSubAccountSwitcher-BRHYXwGO.js +0 -14
  657. package/payload/server/public/assets/useSubAccountSwitcher-BRHYXwGO.js.br +0 -0
  658. package/payload/server/public/assets/useSubAccountSwitcher-BRHYXwGO.js.gz +0 -0
  659. package/payload/server/public/assets/useSubAccountSwitcher-CJzJ9xV3.css +0 -1
  660. package/payload/server/public/assets/useSubAccountSwitcher-CJzJ9xV3.css.br +0 -0
  661. package/payload/server/public/assets/useSubAccountSwitcher-CJzJ9xV3.css.gz +0 -0
  662. package/payload/server/public/assets/useVoiceRecorder-DiPgyDUy.js.br +0 -0
  663. package/payload/server/public/assets/useVoiceRecorder-DiPgyDUy.js.gz +0 -0
  664. package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.br +0 -0
  665. package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.gz +0 -0
  666. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js +0 -1
  667. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js.br +0 -0
  668. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.br +0 -0
  669. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.gz +0 -0
  670. package/payload/server/public/assets/wrench-C5SJreEu.js.br +0 -1
  671. package/payload/server/public/assets/wrench-C5SJreEu.js.gz +0 -0
  672. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.br +0 -0
  673. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.gz +0 -0
  674. /package/payload/server/public/assets/{_baseFor-B12He5Rp.js → _baseFor-BApe6Tla.js} +0 -0
  675. /package/payload/server/public/assets/{_baseFor-B12He5Rp.js.br → _baseFor-BApe6Tla.js.br} +0 -0
  676. /package/payload/server/public/assets/{_baseFor-B12He5Rp.js.gz → _baseFor-BApe6Tla.js.gz} +0 -0
  677. /package/payload/server/public/assets/{array-DO1uCttT.js → array-eiH4WfvY.js} +0 -0
  678. /package/payload/server/public/assets/{array-DO1uCttT.js.br → array-eiH4WfvY.js.br} +0 -0
  679. /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js → cytoscape.esm-BZ6NYo0w.js} +0 -0
  680. /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js.br → cytoscape.esm-BZ6NYo0w.js.br} +0 -0
  681. /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js.gz → cytoscape.esm-BZ6NYo0w.js.gz} +0 -0
  682. /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js → defaultLocale-DWHqsa6O.js} +0 -0
  683. /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js.br → defaultLocale-DWHqsa6O.js.br} +0 -0
  684. /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js.gz → defaultLocale-DWHqsa6O.js.gz} +0 -0
  685. /package/payload/server/public/assets/{dist-DlU7AEeD.js → dist-IoQuidkp.js} +0 -0
  686. /package/payload/server/public/assets/{dist-DlU7AEeD.js.br → dist-IoQuidkp.js.br} +0 -0
  687. /package/payload/server/public/assets/{dist-DlU7AEeD.js.gz → dist-IoQuidkp.js.gz} +0 -0
  688. /package/payload/server/public/assets/{init-BCRlEgNP.js → init-BdkYWjJJ.js} +0 -0
  689. /package/payload/server/public/assets/{init-BCRlEgNP.js.br → init-BdkYWjJJ.js.br} +0 -0
  690. /package/payload/server/public/assets/{init-BCRlEgNP.js.gz → init-BdkYWjJJ.js.gz} +0 -0
  691. /package/payload/server/public/assets/{katex-gkTaZgi6.js → katex-BCzoGtFh.js} +0 -0
  692. /package/payload/server/public/assets/{katex-gkTaZgi6.js.br → katex-BCzoGtFh.js.br} +0 -0
  693. /package/payload/server/public/assets/{katex-gkTaZgi6.js.gz → katex-BCzoGtFh.js.gz} +0 -0
  694. /package/payload/server/public/assets/{path-DTmzQFjQ.js → path-DY2qBuPM.js} +0 -0
  695. /package/payload/server/public/assets/{path-DTmzQFjQ.js.br → path-DY2qBuPM.js.br} +0 -0
  696. /package/payload/server/public/assets/{path-DTmzQFjQ.js.gz → path-DY2qBuPM.js.gz} +0 -0
  697. /package/payload/server/public/assets/{preload-helper-eAV8hweq.js → preload-helper-3YNEDsJZ.js} +0 -0
  698. /package/payload/server/public/assets/{preload-helper-eAV8hweq.js.br → preload-helper-3YNEDsJZ.js.br} +0 -0
  699. /package/payload/server/public/assets/{preload-helper-eAV8hweq.js.gz → preload-helper-3YNEDsJZ.js.gz} +0 -0
  700. /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js → rough.esm-ec8xsRC7.js} +0 -0
  701. /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js.br → rough.esm-ec8xsRC7.js.br} +0 -0
  702. /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js.gz → rough.esm-ec8xsRC7.js.gz} +0 -0
  703. /package/payload/server/public/assets/{src-9CNk4JU0.js → src-C-STKunZ.js} +0 -0
  704. /package/payload/server/public/assets/{src-9CNk4JU0.js.br → src-C-STKunZ.js.br} +0 -0
  705. /package/payload/server/public/assets/{src-9CNk4JU0.js.gz → src-C-STKunZ.js.gz} +0 -0
@@ -0,0 +1,16 @@
1
+ export declare const MCP_LOG_PREFIX = "mcp-";
2
+ /**
3
+ * Most files one key may fan out to. The key is a substring match, so a short
4
+ * key matches many names — the measured device dir holds 552 `mcp-*` files.
5
+ * A truncated result always names the total, so the cap is never silent.
6
+ */
7
+ export declare const MCP_KEY_MATCH_CAP = 20;
8
+ /**
9
+ * Tail every `mcp-*.log` in `mcpLogDir` whose FILENAME contains `sessionKey`,
10
+ * up to `MCP_KEY_MATCH_CAP` files. An 8-character key prefix matches a
11
+ * filename carrying the full session id.
12
+ */
13
+ export declare function readMcpLogsByKey(mcpLogDir: string, sessionKey: string, lines: number): string;
14
+ /** Tail the most recently modified `mcp-*.log` in `mcpLogDir`. */
15
+ export declare function readLatestMcpLog(mcpLogDir: string, lines: number): string;
16
+ //# sourceMappingURL=logs-read-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs-read-mcp.d.ts","sourceRoot":"","sources":["../../src/tools/logs-read-mcp.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAcpC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAmB7F;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAazE"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * logs-read type=mcp — resolution and tail.
3
+ *
4
+ * The MCP stderr sink is written by `lib/mcp-spawn-tee` (src/index.ts:60-65)
5
+ * as `${LOG_DIR}/mcp-<server>-<sessionId>.log`, where that LOG_DIR is the
6
+ * session manager's `config.persistDir/logs` — `~/.<brand>/logs`, the admin
7
+ * MCP's CONFIG_DIR. It is NOT the per-account log dir, which is where
8
+ * logs-read looked until Task 2168.
9
+ *
10
+ * The session key lives in the FILENAME. No line inside the file carries it,
11
+ * so a content grep — the strategy every other per-session type uses —
12
+ * returns nothing here however the directory is resolved.
13
+ *
14
+ * Caller supplies the directory; this module never resolves one itself.
15
+ */
16
+ import { execFileSync } from "node:child_process";
17
+ import { existsSync, readdirSync, statSync } from "node:fs";
18
+ import { resolve } from "node:path";
19
+ export const MCP_LOG_PREFIX = "mcp-";
20
+ /**
21
+ * Most files one key may fan out to. The key is a substring match, so a short
22
+ * key matches many names — the measured device dir holds 552 `mcp-*` files.
23
+ * A truncated result always names the total, so the cap is never silent.
24
+ */
25
+ export const MCP_KEY_MATCH_CAP = 20;
26
+ function isMcpLog(file) {
27
+ return file.startsWith(MCP_LOG_PREFIX) && file.endsWith(".log");
28
+ }
29
+ function missingDir(mcpLogDir) {
30
+ return `No MCP logs on this install yet (resolved dir does not exist on disk): ${mcpLogDir}. MCP server stderr is teed there on the first plugin spawn.`;
31
+ }
32
+ function tail(filePath, lines) {
33
+ return execFileSync("tail", ["-n", String(lines), filePath], { timeout: 5000 }).toString();
34
+ }
35
+ /**
36
+ * Tail every `mcp-*.log` in `mcpLogDir` whose FILENAME contains `sessionKey`,
37
+ * up to `MCP_KEY_MATCH_CAP` files. An 8-character key prefix matches a
38
+ * filename carrying the full session id.
39
+ */
40
+ export function readMcpLogsByKey(mcpLogDir, sessionKey, lines) {
41
+ if (!existsSync(mcpLogDir))
42
+ return missingDir(mcpLogDir);
43
+ const matches = readdirSync(mcpLogDir)
44
+ .filter(f => isMcpLog(f) && f.includes(sessionKey))
45
+ .sort();
46
+ if (matches.length === 0) {
47
+ return `No ${MCP_LOG_PREFIX}*.log filename contains session key "${sessionKey}" (resolved dir: ${mcpLogDir}, prefix: ${MCP_LOG_PREFIX}). The key is matched against the FILENAME, not the file contents — MCP log lines carry no session key.`;
48
+ }
49
+ const shown = matches.slice(0, MCP_KEY_MATCH_CAP);
50
+ const header = matches.length > shown.length
51
+ ? `# MCP logs for session key: ${sessionKey}\n${matches.length} filenames matched, showing the first ${shown.length} — narrow the key to see the rest.`
52
+ : `# MCP logs for session key: ${sessionKey}`;
53
+ const sections = shown.map(file => `## ${file}\n${tail(resolve(mcpLogDir, file), lines)}`);
54
+ return `${header}\n\n${sections.join("\n\n")}`;
55
+ }
56
+ /** Tail the most recently modified `mcp-*.log` in `mcpLogDir`. */
57
+ export function readLatestMcpLog(mcpLogDir, lines) {
58
+ if (!existsSync(mcpLogDir))
59
+ return missingDir(mcpLogDir);
60
+ const match = readdirSync(mcpLogDir)
61
+ .filter(isMcpLog)
62
+ .map(file => ({ file, mtime: statSync(resolve(mcpLogDir, file)).mtimeMs }))
63
+ .sort((a, b) => b.mtime - a.mtime)[0];
64
+ if (!match) {
65
+ return `No log file found for type 'mcp' (resolved dir: ${mcpLogDir}, prefix: ${MCP_LOG_PREFIX})`;
66
+ }
67
+ return `# ${match.file}\n\n${tail(resolve(mcpLogDir, match.file), lines)}`;
68
+ }
69
+ //# sourceMappingURL=logs-read-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs-read-mcp.js","sourceRoot":"","sources":["../../src/tools/logs-read-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,UAAU,CAAC,SAAiB;IACnC,OAAO,0EAA0E,SAAS,8DAA8D,CAAC;AAC3J,CAAC;AAED,SAAS,IAAI,CAAC,QAAgB,EAAE,KAAa;IAC3C,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC7F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,UAAkB,EAAE,KAAa;IACnF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC;SACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;SAClD,IAAI,EAAE,CAAC;IAEV,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM,cAAc,wCAAwC,UAAU,oBAAoB,SAAS,aAAa,cAAc,yGAAyG,CAAC;IACjP,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAClD,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;QAC3B,CAAC,CAAC,+BAA+B,UAAU,KAAK,OAAO,CAAC,MAAM,yCAAyC,KAAK,CAAC,MAAM,oCAAoC;QACvJ,CAAC,CAAC,+BAA+B,UAAU,EAAE,CAAC;IAElD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3F,OAAO,GAAG,MAAM,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,KAAa;IAC/D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;SACjC,MAAM,CAAC,QAAQ,CAAC;SAChB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SAC1E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAExC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,mDAAmD,SAAS,aAAa,cAAc,GAAG,CAAC;IACpG,CAAC;IAED,OAAO,KAAK,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;AAC7E,CAAC"}
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: platform-architecture
3
3
  description: Use when grounding any documented-surface claim about what SiteDesk ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
4
- content-hash: sha256:10d4f123ccb98ccdd68e27e8d22854fb1d9d5dfd985358ff1afa7f5361b25dfa
4
+ content-hash: sha256:7106e5166b451f13c373e48b7eb6057846d8e385002c774fa6ba4db1b05aef6e
5
5
  brand: sitedesk-code
6
6
  product-name: SiteDesk
7
7
  ---
@@ -510,7 +510,8 @@ There is no per-conversation stream log that interleaves MCP stderr with agent e
510
510
 
511
511
  **Retrieve MCP diagnostic lines for a conversation:**
512
512
 
513
- - `logs-read { type: "mcp" }` → tails the most recent `mcp-<name>-*.log` (per-server, keyed by session).
513
+ - `logs-read { type: "mcp" }` → tails the most recent `mcp-<name>-*.log` under `~/.<brand>/logs`, the platform config dir the tee writes to — not the account log dir, which holds no `mcp-*` at all.
514
+ - `logs-read { type: "mcp", sessionKey }` → tails every `mcp-*.log` whose **filename** carries that key, one section per server, up to 20 files; a truncated reply names how many matched so the cap is never silent. An 8-character key prefix matches the full session id in the name. The key is never matched against file contents, because MCP log lines carry no session key.
514
515
 
515
516
  ## Failure-path observability contract
516
517
 
@@ -3799,6 +3800,23 @@ pass's summary line, which is what makes the absence of a per-account line
3799
3800
  readable as "clean" rather than "never audited" — grep the summary line, not the
3800
3801
  per-account one, to confirm the check is running.
3801
3802
 
3803
+ **An unregistered file-write fence is the same shape of failure.** The
3804
+ account-dir path guard refuses a file edit whose resolved path lands inside
3805
+ another account's directory, for every session including a house-scoped one, and
3806
+ the Bash snapshot pair watches the account's own layout. All of them live in the
3807
+ account's `.claude/settings.json`, and a hook that is not registered there runs
3808
+ never and emits nothing, so the silence reads identical to a clean account. The
3809
+ same pass therefore checks the five registrations per account and reports any
3810
+ absence as
3811
+ `[fs-reconcile] op=hook-registration account=<id8> missing=<matcher>:<hook>,…`,
3812
+ with `hooks-missing=0 hooks-unaudited=0` on the summary line as the per-cycle
3813
+ proof the fence is wired everywhere. An account whose settings cannot be read
3814
+ counts as unaudited rather than clean, so an install where none of them can be
3815
+ read never reports itself as fenced. The refusal itself is agent-facing and lands
3816
+ in the session's own child log as
3817
+ `[fs-guard] blocked path=<abs> reason=cross-account target=<id8>`, not in
3818
+ `server.log`.
3819
+
3802
3820
  ### Graph
3803
3821
 
3804
3822
  | Mount | Purpose |
@@ -4024,7 +4042,21 @@ paint to a canvas, and the operator's clicks, scrolling and typing leave as
4024
4042
  `Input.dispatch*`. Interaction therefore lands on page coordinates rather than
4025
4043
  screen pixels, and the view is one tab chosen from a strip rather than the whole
4026
4044
  X display. `VncSurface` and `/vnc-viewer.html` still exist and still work, but
4027
- nothing on `/browser` reaches them, and retiring that stack is separate work.
4045
+ nothing reaches them, and deleting that stack is separate work.
4046
+
4047
+ **The Claude sign-in screen shows the same surface.** `AuthScreen` used to frame
4048
+ `/vnc-viewer.html` so the operator could complete the OAuth flow by looking at
4049
+ the browser on the X display; it now mounts `CdpScreencastSurface` too. Virtual
4050
+ mode runs Chromium headless (`--headless=new`, no `DISPLAY`), and a headless
4051
+ Chromium does not serve the ProcessSingleton socket — so the old mechanism, in
4052
+ which `claude auth login` exec'd `$BROWSER <url>` and a second Chromium handed
4053
+ the URL to the running instance, aborts with exit 21 and never opens the page.
4054
+ The wrapper `writeChromiumWrapper` generates therefore hands its URL to the
4055
+ running browser over CDP (`PUT /json/new`) instead of launching anything. Two
4056
+ details are load-bearing: the URL is percent-encoded into the query string,
4057
+ because that endpoint truncates a raw URL at its first `&`, and the id of the
4058
+ created target is recorded so the sign-in poll can tell the viewer which tab to
4059
+ show rather than leaving it on whichever tab CDP lists first.
4028
4060
 
4029
4061
  The transport is `/cdp-screencast` on the dashboard's own host and port, claimed
4030
4062
  by the edge listener before its `forwardUpgrade` catch-all. It is gated by
@@ -4384,6 +4416,32 @@ mounted (the greeting panel). `fit=false` or `handles=` disagreeing with
4384
4416
  `governed=` is the failure. A completed drag logs `[admin-ui] webchat-resize
4385
4417
  px=<final>`; a bare click logs nothing.
4386
4418
 
4419
+ **All four resize handles draw one pill.** The `/chat` column pills,
4420
+ the composer grip, and the sidebar and artefact splitters each paint a 3px-thick,
4421
+ 48px-long rounded pill (32px long on the horizontal composer grip) in
4422
+ `--text-tertiary`, at half strength when idle and full strength on hover. Every
4423
+ box keeps its old size — 8px wide for the three vertical surfaces — so the pill
4424
+ got thinner and the grab target did not. Thickness and length come from
4425
+ `--resize-grip-thickness` / `--resize-grip-length`; the colour is read as
4426
+ `var(--text-tertiary)` on each pill rather than through an alias, because a
4427
+ `var()` inside a custom property is substituted on the element that DECLARES it,
4428
+ which would freeze the colour at the base `#9A9A9A` instead of the surface's own
4429
+ value (measured inside `.admin-shell`: `rgb(154,154,154)` through an alias,
4430
+ `rgb(138,133,122)` direct). A pill that never paints emits no event and does not
4431
+ reproduce on a re-open, and the measure audit above counts elements rather than
4432
+ pixels, so the standing check is `[admin-ui] op=resize-grip-audit
4433
+ surface=<column-left|column-right|sidebar> thicknessPx= lengthPx= color= opacity=
4434
+ boxPx= painted=`, emitted for the two column pills on mount and on every
4435
+ re-clamp, and for the sidebar splitter once per mount. `opacity=` is the strength
4436
+ the operator actually sees: the column pills carry it on the box and the two
4437
+ splitters carry it on the pill, and the line multiplies both, so a pill hidden at
4438
+ either level reports `opacity=0`.
4439
+ `painted=false` or `thicknessPx=0` means an invisible handle; `thicknessPx=8`
4440
+ means the box is painting and the pill rule never applied; a missing line for a
4441
+ surface that should be mounted is itself the alarm. `painted=false
4442
+ source=unavailable` is the expected reading wherever pseudo-element styles are
4443
+ not reported (the jsdom test environment), never a real zero.
4444
+
4387
4445
  ## Health vs version
4388
4446
 
4389
4447
  Two endpoints, two surfaces, two restart-survival roles:
@@ -5606,7 +5664,7 @@ The logs will show which service failed to start and why. Common causes:
5606
5664
  Each installed brand runs two per-brand `--user` systemd units (earlier platform fixes + — unit filenames are prefixed with the brand's `hostname` so two brands on the same device never share a unit file):
5607
5665
 
5608
5666
  - `{hostname}.service` — the admin + public HTTP server on `127.0.0.1:19201` (public port + 1). Restarted by the upgrade flow; short downtime is expected during steps 8→11 of an upgrade. An earlier fix: the unit carries two port env vars — `PORT=<public>` (canonical public port, read by the upgrade detector) and `MAXY_UI_INTERNAL_PORT=<public+1>` (the port maxy-ui actually binds).
5609
- - `{hostname}-edge.service` — the always-on public listener on the configured port (default 19200). Reverse-proxies HTTP to the main brand service and handles `/websockify` (VNC) WebSocket upgrades locally. An earlier fix: also hosts `/api/admin/actions/*` and `/api/admin/version*` — the Software Update modal's own routes — so the log stream survives the brand service's restart window. Does NOT restart during an upgrade — the browser WebSocket stays connected by construction. The operator views this VNC display in the admin UI via the standalone `/browser` page (peer to `/graph` and `/data`).
5667
+ - `{hostname}-edge.service` — the always-on public listener on the configured port (default 19200). Reverse-proxies HTTP to the main brand service and handles `/websockify` (VNC) WebSocket upgrades locally. An earlier fix: also hosts `/api/admin/actions/*` and `/api/admin/version*` — the Software Update modal's own routes — so the log stream survives the brand service's restart window. Does NOT restart during an upgrade — the browser WebSocket stays connected by construction. The operator views the device's Chromium in the admin UI via the standalone `/browser` page (peer to `/graph` and `/data`) and on the Claude sign-in screen; both render CDP screencast frames over `/cdp-screencast`, not the framebuffer. Virtual-mode Chromium is headless, so nothing renders onto the X display and the `/websockify` upgrade has no remaining consumer; deleting that stack is separate work.
5610
5668
 
5611
5669
  Upgrade and Cloudflare setup run as detached actions: `systemd-run --user` transient units per invocation with stdout+stderr persisted to `~/.maxy/logs/actions/<actionId>.log` and streamed to the UI via SSE. No boot-time service file exists for these.
5612
5670
 
@@ -9,6 +9,13 @@ Invoked by the admin agent directly.
9
9
 
10
10
  This is the platform's release timeline, newest first. Each entry shows the date it shipped and the version it shipped in, so you can tell the operator how current their install is. To compare, read the installed version from `capabilities-here` and match it against the versions below. Keep answers high level and in plain English; this is a summary, not a full commit log.
11
11
 
12
+ ## 2026-07-30 (0.1.528)
13
+
14
+ - Where two or more accounts share one device, the assistant can no longer edit or write files belonging to a different account. Every account is now checked for that protection being in place.
15
+ - Your account now has a designated address that outbound mail is sent from, so asking to send an email no longer gets refused for want of knowing which address to use. The mailbox status tells you which address is designated, or that none is.
16
+ - Saving a draft now tells you exactly which parts of your signature were added, and a signature stored as formatted text now actually appears on the message instead of being silently dropped.
17
+ - The remote browser now runs the browser itself rather than sharing a desktop screen, which means signing in to Claude inside it works. The drag handles for resizing panels are thinner and lighter, matching the reference design.
18
+
12
19
  ## 2026-07-30 (0.1.527)
13
20
 
14
21
  - The remote browser page now shows a live picture of the browser you can click and type into directly, replacing the old screen-sharing view.
@@ -573,6 +573,23 @@ pass's summary line, which is what makes the absence of a per-account line
573
573
  readable as "clean" rather than "never audited" — grep the summary line, not the
574
574
  per-account one, to confirm the check is running.
575
575
 
576
+ **An unregistered file-write fence is the same shape of failure.** The
577
+ account-dir path guard refuses a file edit whose resolved path lands inside
578
+ another account's directory, for every session including a house-scoped one, and
579
+ the Bash snapshot pair watches the account's own layout. All of them live in the
580
+ account's `.claude/settings.json`, and a hook that is not registered there runs
581
+ never and emits nothing, so the silence reads identical to a clean account. The
582
+ same pass therefore checks the five registrations per account and reports any
583
+ absence as
584
+ `[fs-reconcile] op=hook-registration account=<id8> missing=<matcher>:<hook>,…`,
585
+ with `hooks-missing=0 hooks-unaudited=0` on the summary line as the per-cycle
586
+ proof the fence is wired everywhere. An account whose settings cannot be read
587
+ counts as unaudited rather than clean, so an install where none of them can be
588
+ read never reports itself as fenced. The refusal itself is agent-facing and lands
589
+ in the session's own child log as
590
+ `[fs-guard] blocked path=<abs> reason=cross-account target=<id8>`, not in
591
+ `server.log`.
592
+
576
593
  ### Graph
577
594
 
578
595
  | Mount | Purpose |
@@ -798,7 +815,21 @@ paint to a canvas, and the operator's clicks, scrolling and typing leave as
798
815
  `Input.dispatch*`. Interaction therefore lands on page coordinates rather than
799
816
  screen pixels, and the view is one tab chosen from a strip rather than the whole
800
817
  X display. `VncSurface` and `/vnc-viewer.html` still exist and still work, but
801
- nothing on `/browser` reaches them, and retiring that stack is separate work.
818
+ nothing reaches them, and deleting that stack is separate work.
819
+
820
+ **The Claude sign-in screen shows the same surface.** `AuthScreen` used to frame
821
+ `/vnc-viewer.html` so the operator could complete the OAuth flow by looking at
822
+ the browser on the X display; it now mounts `CdpScreencastSurface` too. Virtual
823
+ mode runs Chromium headless (`--headless=new`, no `DISPLAY`), and a headless
824
+ Chromium does not serve the ProcessSingleton socket — so the old mechanism, in
825
+ which `claude auth login` exec'd `$BROWSER <url>` and a second Chromium handed
826
+ the URL to the running instance, aborts with exit 21 and never opens the page.
827
+ The wrapper `writeChromiumWrapper` generates therefore hands its URL to the
828
+ running browser over CDP (`PUT /json/new`) instead of launching anything. Two
829
+ details are load-bearing: the URL is percent-encoded into the query string,
830
+ because that endpoint truncates a raw URL at its first `&`, and the id of the
831
+ created target is recorded so the sign-in poll can tell the viewer which tab to
832
+ show rather than leaving it on whichever tab CDP lists first.
802
833
 
803
834
  The transport is `/cdp-screencast` on the dashboard's own host and port, claimed
804
835
  by the edge listener before its `forwardUpgrade` catch-all. It is gated by
@@ -1158,6 +1189,32 @@ mounted (the greeting panel). `fit=false` or `handles=` disagreeing with
1158
1189
  `governed=` is the failure. A completed drag logs `[admin-ui] webchat-resize
1159
1190
  px=<final>`; a bare click logs nothing.
1160
1191
 
1192
+ **All four resize handles draw one pill.** The `/chat` column pills,
1193
+ the composer grip, and the sidebar and artefact splitters each paint a 3px-thick,
1194
+ 48px-long rounded pill (32px long on the horizontal composer grip) in
1195
+ `--text-tertiary`, at half strength when idle and full strength on hover. Every
1196
+ box keeps its old size — 8px wide for the three vertical surfaces — so the pill
1197
+ got thinner and the grab target did not. Thickness and length come from
1198
+ `--resize-grip-thickness` / `--resize-grip-length`; the colour is read as
1199
+ `var(--text-tertiary)` on each pill rather than through an alias, because a
1200
+ `var()` inside a custom property is substituted on the element that DECLARES it,
1201
+ which would freeze the colour at the base `#9A9A9A` instead of the surface's own
1202
+ value (measured inside `.admin-shell`: `rgb(154,154,154)` through an alias,
1203
+ `rgb(138,133,122)` direct). A pill that never paints emits no event and does not
1204
+ reproduce on a re-open, and the measure audit above counts elements rather than
1205
+ pixels, so the standing check is `[admin-ui] op=resize-grip-audit
1206
+ surface=<column-left|column-right|sidebar> thicknessPx= lengthPx= color= opacity=
1207
+ boxPx= painted=`, emitted for the two column pills on mount and on every
1208
+ re-clamp, and for the sidebar splitter once per mount. `opacity=` is the strength
1209
+ the operator actually sees: the column pills carry it on the box and the two
1210
+ splitters carry it on the pill, and the line multiplies both, so a pill hidden at
1211
+ either level reports `opacity=0`.
1212
+ `painted=false` or `thicknessPx=0` means an invisible handle; `thicknessPx=8`
1213
+ means the box is painting and the pill rule never applied; a missing line for a
1214
+ surface that should be mounted is itself the alarm. `painted=false
1215
+ source=unavailable` is the expected reading wherever pseudo-element styles are
1216
+ not reported (the jsdom test environment), never a real zero.
1217
+
1161
1218
  ## Health vs version
1162
1219
 
1163
1220
  Two endpoints, two surfaces, two restart-survival roles:
@@ -201,7 +201,7 @@ The logs will show which service failed to start and why. Common causes:
201
201
  Each installed brand runs two per-brand `--user` systemd units (earlier platform fixes + — unit filenames are prefixed with the brand's `hostname` so two brands on the same device never share a unit file):
202
202
 
203
203
  - `{hostname}.service` — the admin + public HTTP server on `127.0.0.1:19201` (public port + 1). Restarted by the upgrade flow; short downtime is expected during steps 8→11 of an upgrade. An earlier fix: the unit carries two port env vars — `PORT=<public>` (canonical public port, read by the upgrade detector) and `MAXY_UI_INTERNAL_PORT=<public+1>` (the port maxy-ui actually binds).
204
- - `{hostname}-edge.service` — the always-on public listener on the configured port (default 19200). Reverse-proxies HTTP to the main brand service and handles `/websockify` (VNC) WebSocket upgrades locally. An earlier fix: also hosts `/api/admin/actions/*` and `/api/admin/version*` — the Software Update modal's own routes — so the log stream survives the brand service's restart window. Does NOT restart during an upgrade — the browser WebSocket stays connected by construction. The operator views this VNC display in the admin UI via the standalone `/browser` page (peer to `/graph` and `/data`).
204
+ - `{hostname}-edge.service` — the always-on public listener on the configured port (default 19200). Reverse-proxies HTTP to the main brand service and handles `/websockify` (VNC) WebSocket upgrades locally. An earlier fix: also hosts `/api/admin/actions/*` and `/api/admin/version*` — the Software Update modal's own routes — so the log stream survives the brand service's restart window. Does NOT restart during an upgrade — the browser WebSocket stays connected by construction. The operator views the device's Chromium in the admin UI via the standalone `/browser` page (peer to `/graph` and `/data`) and on the Claude sign-in screen; both render CDP screencast frames over `/cdp-screencast`, not the framebuffer. Virtual-mode Chromium is headless, so nothing renders onto the X display and the `/websockify` upgrade has no remaining consumer; deleting that stack is separate work.
205
205
 
206
206
  Upgrade and Cloudflare setup run as detached actions: `systemd-run --user` transient units per invocation with stdout+stderr persisted to `~/.maxy/logs/actions/<actionId>.log` and streamed to the UI via SSE. No boot-time service file exists for these.
207
207
 
@@ -186,7 +186,8 @@ There is no per-conversation stream log that interleaves MCP stderr with agent e
186
186
 
187
187
  **Retrieve MCP diagnostic lines for a conversation:**
188
188
 
189
- - `logs-read { type: "mcp" }` → tails the most recent `mcp-<name>-*.log` (per-server, keyed by session).
189
+ - `logs-read { type: "mcp" }` → tails the most recent `mcp-<name>-*.log` under `~/.<brand>/logs`, the platform config dir the tee writes to — not the account log dir, which holds no `mcp-*` at all.
190
+ - `logs-read { type: "mcp", sessionKey }` → tails every `mcp-*.log` whose **filename** carries that key, one section per server, up to 20 files; a truncated reply names how many matched so the cap is never silent. An 8-character key prefix matches the full session id in the name. The key is never matched against file contents, because MCP log lines carry no session key.
190
191
 
191
192
  ## Failure-path observability contract
192
193
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "email",
3
- "description": "Email — one or more dedicated email mailboxes per account, each addressable by a `mailbox` selector. Retrieval: email-graph-query for stored email-thread history as :ConversationArchive {source:'email'} with :Section chunks (recall, search, 'threads about X', 'what did Y send?'); email-read / email-search for live IMAP inbox previews (with best-effort per-archive section hints from the graph); email-fetch-body for the COMPLETE decoded body of one message (by uid or message_id) when a preview is not enough; email-fetch-attachment for the extracted TEXT of one attachment (PDF via pdftotext, text/* by decode) when data sits inside a file rather than the body. Ingestion (operator-initiated, human-in-the-loop): email-fetch lists new messages, email-ingest writes the operator-approved subset via the conversation-archive pipeline. Sending: email-send (new), email-reply (threaded — resolves the original via IMAP Message-ID search), email-draft (compose to the mailbox Drafts folder, unsent, for operator review; pass messageId for a threaded draft-reply), email-draft-edit (revise a stored draft, located by its Drafts UID or, when Gmail has renumbered it, its draft Message-ID), email-draft-send (dispatch a stored draft by Drafts UID, then remove it), email-draft-list (read the Drafts folder back and confirm what is actually in it — the only tool that can verify a draft's presence). Deleting: email-delete (move named UIDs from email-read/email-search to the mailbox Trash — recoverable, never an expunge). Config: email-provider-info (pre-password host + app-password lookup from an address alone), email-setup, email-signature-set (install the signature every email-draft then appends automatically — never hand-write a signature into a draft body), email-status, email-otp-extract.",
3
+ "description": "Email — one or more dedicated email mailboxes per account, each addressable by a `mailbox` selector. Retrieval: email-graph-query for stored email-thread history as :ConversationArchive {source:'email'} with :Section chunks (recall, search, 'threads about X', 'what did Y send?'); email-read / email-search for live IMAP inbox previews (with best-effort per-archive section hints from the graph); email-fetch-body for the COMPLETE decoded body of one message (by uid or message_id) when a preview is not enough; email-fetch-attachment for the extracted TEXT of one attachment (PDF via pdftotext, text/* by decode) when data sits inside a file rather than the body. Ingestion (operator-initiated, human-in-the-loop): email-fetch lists new messages, email-ingest writes the operator-approved subset via the conversation-archive pipeline. Sending: email-send (new), email-reply (threaded — resolves the original via IMAP Message-ID search), email-draft (compose to the mailbox Drafts folder, unsent, for operator review; pass messageId for a threaded draft-reply), email-draft-edit (revise a stored draft, located by its Drafts UID or, when Gmail has renumbered it, its draft Message-ID), email-draft-send (dispatch a stored draft by Drafts UID, then remove it), email-draft-list (read the Drafts folder back and confirm what is actually in it — the only tool that can verify a draft's presence). Deleting: email-delete (move named UIDs from email-read/email-search to the mailbox Trash — recoverable, never an expunge). Config: email-provider-info (pre-password host + app-password lookup from an address alone), email-setup, email-signature-set (install the signature every email-draft then appends automatically — never hand-write a signature into a draft body), email-sending-identity-set (designate which attached mailbox this account sends from, so a send or draft that names no mailbox resolves it from the account instead of being refused), email-status, email-otp-extract.",
4
4
  "version": "0.1.0",
5
5
  "author": {
6
6
  "name": "Rubytech LLC"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: email
3
- description: "Email — one or more dedicated email mailboxes per account, each addressable by a `mailbox` selector. Retrieval: email-graph-query for stored email-thread history as :ConversationArchive {source:'email'} with :Section chunks (recall, search, 'threads about X', 'what did Y send?'); email-read / email-search for live IMAP inbox previews (with best-effort per-archive section hints from the graph); email-fetch-body for the COMPLETE decoded body of one message (by uid or message_id) when a preview is not enough; email-fetch-attachment for the extracted TEXT of one attachment (PDF via pdftotext, text/* by decode) when data sits inside a file rather than the body. Ingestion (operator-initiated, human-in-the-loop): email-fetch lists new messages, email-ingest writes the operator-approved subset via the conversation-archive pipeline. Sending: email-send (new), email-reply (threaded — resolves the original via IMAP Message-ID search), email-draft (compose to the mailbox Drafts folder, unsent, for operator review; pass messageId for a threaded draft-reply), email-draft-edit (revise a stored draft, located by its Drafts UID or, when Gmail has renumbered it, its draft Message-ID), email-draft-send (dispatch a stored draft by Drafts UID, then remove it), email-draft-list (read the Drafts folder back and confirm what is actually in it — the only tool that can verify a draft's presence). Deleting: email-delete (move named UIDs from email-read/email-search to the mailbox Trash — recoverable, never an expunge). Config: email-provider-info (pre-password host + app-password lookup from an address alone), email-setup, email-signature-set (install the signature every email-draft then appends automatically — never hand-write a signature into a draft body), email-status, email-otp-extract."
3
+ description: "Email — one or more dedicated email mailboxes per account, each addressable by a `mailbox` selector. Retrieval: email-graph-query for stored email-thread history as :ConversationArchive {source:'email'} with :Section chunks (recall, search, 'threads about X', 'what did Y send?'); email-read / email-search for live IMAP inbox previews (with best-effort per-archive section hints from the graph); email-fetch-body for the COMPLETE decoded body of one message (by uid or message_id) when a preview is not enough; email-fetch-attachment for the extracted TEXT of one attachment (PDF via pdftotext, text/* by decode) when data sits inside a file rather than the body. Ingestion (operator-initiated, human-in-the-loop): email-fetch lists new messages, email-ingest writes the operator-approved subset via the conversation-archive pipeline. Sending: email-send (new), email-reply (threaded — resolves the original via IMAP Message-ID search), email-draft (compose to the mailbox Drafts folder, unsent, for operator review; pass messageId for a threaded draft-reply), email-draft-edit (revise a stored draft, located by its Drafts UID or, when Gmail has renumbered it, its draft Message-ID), email-draft-send (dispatch a stored draft by Drafts UID, then remove it), email-draft-list (read the Drafts folder back and confirm what is actually in it — the only tool that can verify a draft's presence). Deleting: email-delete (move named UIDs from email-read/email-search to the mailbox Trash — recoverable, never an expunge). Config: email-provider-info (pre-password host + app-password lookup from an address alone), email-setup, email-signature-set (install the signature every email-draft then appends automatically — never hand-write a signature into a draft body), email-sending-identity-set (designate which attached mailbox this account sends from, so a send or draft that names no mailbox resolves it from the account instead of being refused), email-status, email-otp-extract."
4
4
  tools:
5
5
  - name: email-provider-info
6
6
  publicAllowlist: false
@@ -14,6 +14,10 @@ tools:
14
14
  publicAllowlist: false
15
15
  adminAllowlist: false
16
16
  riskClass: write_local
17
+ - name: email-sending-identity-set
18
+ publicAllowlist: false
19
+ adminAllowlist: false
20
+ riskClass: write_local
17
21
  - name: email-read
18
22
  publicAllowlist: false
19
23
  adminAllowlist: false
@@ -106,13 +110,14 @@ Manages the agent's own dedicated email account — IMAP for reading, SMTP for s
106
110
 
107
111
  **Login vs alias — the default recipient set.** A config carries two addresses. `email` is the IMAP login: the address you authenticate as, and an address this mailbox owns. `agentAddress` is an *additional* alias to surface (often a per-agent address on a shared catch-all mailbox). When they differ, `email-read`, `email-search`, `email-otp-extract`, and `email-fetch` default to surfacing mail whose **To or Cc** carries **either** address — not the alias alone — because replies commonly arrive at the login address, and a reply or multi-party thread routinely Cc's the alias rather than To'ing it (a proposal sent from `info@` is answered to `info@`, not the `maxy@` alias; a thread copies `maxy@` on Cc). When no distinct alias is configured, no recipient filter is applied. Pass an explicit `to=` to narrow to a single address. Whenever the default filter hides messages from the fetched window, `email-read`/`email-search` append a `Recipient filter: kept N, hid M (to ∈ {…}); pass to="…" to change.` line — including when every message was hidden — so "I can't see it" is never indistinguishable from "it isn't there". `email-fetch` has no tool-output filter line; its kept-vs-hidden split is recorded in the stderr `diag("fetchSinceUid", "filter applied", …)` log instead.
108
112
 
109
- **Multiple mailboxes.** An account holds any number of mailboxes at once. Each is its own `:EmailAccount` node keyed by `(accountId, email)`, and `email-setup` adds one without touching the others (no destructive re-point to act on a second inbox). Every operational tool takes an optional `mailbox` argument naming which configured mailbox to act on. Resolution order: the named mailbox if given; the single configured mailbox when only one exists (so single-mailbox installs pass nothing); otherwise the call is refused with a line listing the stored mailbox identities, so the agent picks one rather than guessing an address. The poll high-water mark and the pending fetch/ingest batch are per-mailbox. `email-status` lists every attached mailbox.
113
+ **Multiple mailboxes.** An account holds any number of mailboxes at once. Each is its own `:EmailAccount` node keyed by `(accountId, email)`, and `email-setup` adds one without touching the others (no destructive re-point to act on a second inbox). Every operational tool takes an optional `mailbox` argument naming which configured mailbox to act on. Resolution order: the named mailbox if given; the single configured mailbox when only one exists (so single-mailbox installs pass nothing); the mailbox designated as the account's **sending identity** when two or more exist and none was named; otherwise the call is refused with a line listing the stored mailbox identities and naming `email-sending-identity-set`, so the account is given an answer rather than the caller guessing an address. Exactly one mailbox carries the designation — the setter clears every sibling in the same write — and a graph holding two is refused naming both rather than one being elected. The poll high-water mark and the pending fetch/ingest batch are per-mailbox. `email-status` lists every attached mailbox.
110
114
 
111
115
  ## Capabilities
112
116
 
113
117
  - **Provider lookup:** `email-provider-info` — given just an email address, returns the inferred IMAP/SMTP hosts and the provider's app-password / trusted-application / IMAP-enable requirement, deterministically from the provider map. Call this BEFORE soliciting a password so the requirement is relayed first; most providers reject the normal login password. Returns "unknown" (operator supplies hosts) or "unsupported" (provider blocks IMAP/SMTP, e.g. Tuta).
114
118
  - **Setup:** `email-setup` — collect credentials in plain chat and connect IMAP/SMTP. Hosts are auto-inferred for known providers; supports alias addresses (`agentAddress`). For hosts where the client-visible Drafts folder is not the one flagged `\Drafts`, pass `draftsFolder` to name it explicitly (e.g. `INBOX.Drafts`).
115
- - **Signature:** `email-signature-set` — install the account's signature into the three files `email-draft` already reads at the account root (`email-signature.txt`, `.html`, `.font`). Plain text and HTML are stored and appended byte-for-byte; `font` is one CSS font-family value that wraps the HTML body and has no plain-text effect. **A part you omit is removed**, so a text-only call clears a stale HTML signature rather than leaving it to keep being appended; pass every part you want to keep on each call. A call with no parts at all is refused rather than treated as "erase everything". Because the append is deterministic and happens on every draft, a signature must never be written into a draft body by hand — that duplicates the stored one and drifts from it. Pass the operator's real signature read from its source of truth; reconstructing markup from memory or from stripped graph text is what put a dead logo URL into a client draft. Account-scoped, no `mailbox` selector: one signature per account.
119
+ - **Signature:** `email-signature-set` — install the account's signature into the three files `email-draft` already reads at the account root (`email-signature.txt`, `.html`, `.font`). Plain text and HTML are stored and appended byte-for-byte; `font` is one CSS font-family value that wraps the HTML body and has no plain-text effect. A stored HTML signature lands on every draft, including one composed with no HTML body: the plugin derives an HTML body from the plain text (escaped, blank line to paragraph, single newline to line break) so the branded signature has somewhere to go, which makes that draft `multipart/alternative`. An account with no stored HTML signature derives nothing and its drafts stay `text/plain`. **A part you omit is removed**, so a text-only call clears a stale HTML signature rather than leaving it to keep being appended; pass every part you want to keep on each call. A call with no parts at all is refused rather than treated as "erase everything". Because the append is deterministic and happens on every draft, a signature must never be written into a draft body by hand — that duplicates the stored one and drifts from it. Pass the operator's real signature read from its source of truth; reconstructing markup from memory or from stripped graph text is what put a dead logo URL into a client draft. Account-scoped, no `mailbox` selector: one signature per account.
120
+ - **Sending identity:** `email-sending-identity-set` — designate which attached mailbox is the account's own outbound address. Afterwards an `email-draft`, `email-send` or `email-reply` that names no `mailbox` composes from it, instead of being refused with a list of addresses. Exactly one mailbox carries the designation: the call clears it from every sibling in the same write, so uniqueness is a property of the write rather than of a later check. The address comes from the operator, never from inference — a routing rule, a signature or an inbound trigger names an address for a different purpose, and reading one of those as the sending address is what put a mailbox the operator never sends from into a draft brief. Re-running `email-setup` on a designated mailbox preserves the designation. `email-status` reports which mailbox holds it, and says so when a multi-mailbox account has none.
116
121
  - **Read inbox:** `email-read` — metadata only (UID, sender, subject, date), plus a best-effort `Archive`/`Archive-Section` hint when the IMAP message's `receivedAt` falls inside a stored `:ConversationArchive {source:'email'}` section, plus an `Attachments (N): filename (mime, size); …` footer when the message carries enclosures. Supports pagination (`before_uid`), folders (`inbox`/`sent`), filtering by sender/date/subject. Metadata is derived from IMAP `bodyStructure` — no bytes downloaded.
117
122
  - **Search inbox:** `email-search` — live IMAP search by sender, subject, body keyword, date range. Same per-archive hint and attachment footer as `email-read`.
118
123
  - **Delete (move to Trash):** `email-delete` — move the messages named by `uids` (from a prior `email-read`/`email-search`, scoped to a source `folder` of `inbox` or `sent`) into the mailbox's Trash folder. **Recoverable, never an expunge** — the message leaves the inbox and permanent removal is left to the operator's own mail client or the provider's Trash auto-purge; this tool never permanently deletes. Trash is resolved per provider: the `\Trash` special-use folder if advertised, else the first existing of `Trash`, `[Gmail]/Trash`, `Deleted Items`, `Deleted Messages`. `Junk` is never treated as Trash. A mailbox with no resolvable Trash yields a typed error and moves nothing — there is no silent expunge fallback. A `uid` that is already gone is counted not-moved without failing the rest; the result reports `Moved N of M message(s) to <Trash>`. It deletes only the UIDs you name, never by search criteria.
@@ -32,22 +32,79 @@ describe('Task 1952 — composeDraft applies signature', () => {
32
32
  expect(text).toContain('Quote attached.');
33
33
  expect(text).toMatch(/Regards,\r?\nDale/);
34
34
  });
35
- it('logs applied=true with the account id prefix and asset path', async () => {
35
+ it('logs the per-part flags with the account id prefix and asset path', async () => {
36
36
  writeFileSync(join(accountDir, 'email-signature.txt'), 'Regards,\nDale');
37
37
  const err = vi.spyOn(console, 'error').mockImplementation(() => { });
38
38
  await composeDraft(config, 'pw', accountId, { to: 'x@y.test', subject: 'Hi', body: 'Body.' });
39
39
  const line = err.mock.calls.map((c) => String(c[0])).find((s) => s.includes('op=signature'));
40
40
  expect(line).toContain('accountId=gls12345');
41
- expect(line).toContain('applied=true');
41
+ expect(line).toContain('text=true');
42
+ expect(line).toContain('html=false');
43
+ expect(line).toContain('derivedHtml=false');
44
+ expect(line).not.toMatch(/\bapplied=/);
42
45
  expect(line).toContain(join(accountDir, 'email-signature'));
43
46
  err.mockRestore();
44
47
  });
45
- it('logs applied=false when no signature file is present', async () => {
48
+ it('logs all three false when no signature file is present', async () => {
46
49
  const err = vi.spyOn(console, 'error').mockImplementation(() => { });
47
50
  await composeDraft(config, 'pw', accountId, { to: 'x@y.test', subject: 'Hi', body: 'Body.' });
48
51
  const line = err.mock.calls.map((c) => String(c[0])).find((s) => s.includes('op=signature'));
49
- expect(line).toContain('applied=false');
52
+ expect(line).toContain('text=false');
53
+ expect(line).toContain('html=false');
54
+ expect(line).toContain('derivedHtml=false');
50
55
  err.mockRestore();
51
56
  });
52
57
  });
58
+ describe('Task 2193 — a stored HTML signature reaches a draft composed without an HTML body', () => {
59
+ let root = '';
60
+ let accountDir = '';
61
+ const accountId = 'gls12345-aaaa';
62
+ const saved = { ...process.env };
63
+ beforeEach(() => {
64
+ root = realpathSync(mkdtempSync(join(tmpdir(), 'cmp-')));
65
+ const platformRoot = join(root, 'platform');
66
+ mkdirSync(platformRoot, { recursive: true });
67
+ accountDir = join(root, 'data', 'accounts', accountId);
68
+ mkdirSync(accountDir, { recursive: true });
69
+ process.env.PLATFORM_ROOT = platformRoot;
70
+ delete process.env.ACCOUNT_DIR;
71
+ });
72
+ afterEach(() => {
73
+ process.env = { ...saved };
74
+ if (root)
75
+ rmSync(root, { recursive: true, force: true });
76
+ });
77
+ it('composes multipart/alternative carrying the html signature, and reports all three flags', async () => {
78
+ writeFileSync(join(accountDir, 'email-signature.txt'), 'Regards,\nDale');
79
+ writeFileSync(join(accountDir, 'email-signature.html'), '<table><tr><td>WORDMARK</td></tr></table>');
80
+ const err = vi.spyOn(console, 'error').mockImplementation(() => { });
81
+ const { raw, textApplied, htmlApplied, derivedHtml } = await composeDraft(config, 'pw', accountId, {
82
+ to: 'x@y.test', subject: 'Hi', body: 'Quote attached.',
83
+ });
84
+ const line = err.mock.calls.map((c) => String(c[0])).find((s) => s.includes('op=signature'));
85
+ err.mockRestore();
86
+ expect(line).toContain('text=true');
87
+ expect(line).toContain('html=true');
88
+ expect(line).toContain('derivedHtml=true');
89
+ expect({ textApplied, htmlApplied, derivedHtml }).toEqual({
90
+ textApplied: true, htmlApplied: true, derivedHtml: true,
91
+ });
92
+ const mime = raw.toString('utf8');
93
+ expect(mime).toContain('multipart/alternative');
94
+ expect(mime).toContain('WORDMARK');
95
+ expect(mime).toMatch(/Regards,\r?\nDale/);
96
+ });
97
+ it('a .txt-only account still composes a text/plain draft with no html part', async () => {
98
+ writeFileSync(join(accountDir, 'email-signature.txt'), 'Regards,\nDale');
99
+ const { raw, htmlApplied, derivedHtml } = await composeDraft(config, 'pw', accountId, {
100
+ to: 'x@y.test', subject: 'Hi', body: 'Quote attached.',
101
+ });
102
+ expect(htmlApplied).toBe(false);
103
+ expect(derivedHtml).toBe(false);
104
+ const mime = raw.toString('utf8');
105
+ expect(mime).toContain('text/plain');
106
+ expect(mime).not.toContain('multipart/alternative');
107
+ expect(mime).not.toContain('text/html');
108
+ });
109
+ });
53
110
  //# sourceMappingURL=compose-signature.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compose-signature.test.js","sourceRoot":"","sources":["../../src/__tests__/compose-signature.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compose-signature.test.js","sourceRoot":"","sources":["../../src/__tests__/compose-signature.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,MAAM,GAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAA;AAE/E,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI,UAAU,GAAG,EAAE,CAAA;IACnB,MAAM,SAAS,GAAG,eAAe,CAAA;IACjC,MAAM,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAEhC,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAC3C,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;QACtD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,YAAY,CAAA;QACxC,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IAChC,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAA;QAC1B,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,gBAAgB,CAAC,CAAA;QACxE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;YAC1D,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB;SACvD,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QACzC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,gBAAgB,CAAC,CAAA;QACxE,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACnE,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAC7F,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAA;QAC5F,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QACtC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAC3D,GAAG,CAAC,WAAW,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACnE,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAC7F,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAA;QAC5F,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;QAC3C,GAAG,CAAC,WAAW,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mFAAmF,EAAE,GAAG,EAAE;IACjG,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI,UAAU,GAAG,EAAE,CAAA;IACnB,MAAM,SAAS,GAAG,eAAe,CAAA;IACjC,MAAM,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAEhC,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAC3C,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;QACtD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,YAAY,CAAA;QACxC,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IAChC,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAA;QAC1B,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACvG,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,gBAAgB,CAAC,CAAA;QACxE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,EAAE,2CAA2C,CAAC,CAAA;QACpG,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACnE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;YACjG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB;SACvD,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAA;QAC5F,GAAG,CAAC,WAAW,EAAE,CAAA;QACjB,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QAC1C,MAAM,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC;YACxD,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI;SACxD,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,gBAAgB,CAAC,CAAA;QACxE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;YACpF,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB;SACvD,CAAC,CAAA;QACF,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/B,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;QACnD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -6,6 +6,9 @@ const { composeMock, replaceMock } = vi.hoisted(() => ({
6
6
  threadedParentId: null,
7
7
  draftMessageId: "<new-draft@x>",
8
8
  attachments: [],
9
+ textApplied: false,
10
+ htmlApplied: false,
11
+ derivedHtml: false,
9
12
  })),
10
13
  replaceMock: vi.fn(async () => ({
11
14
  folder: "Drafts",
@@ -33,6 +36,9 @@ describe("Task 819 — email-draft-edit", () => {
33
36
  threadedParentId: null,
34
37
  draftMessageId: "<new-draft@x>",
35
38
  attachments: [],
39
+ textApplied: false,
40
+ htmlApplied: false,
41
+ derivedHtml: false,
36
42
  });
37
43
  replaceMock.mockResolvedValue({
38
44
  folder: "Drafts",
@@ -58,6 +64,38 @@ describe("Task 819 — email-draft-edit", () => {
58
64
  expect(text).toContain("99");
59
65
  expect(text).toMatch(/unsent/); // a revise never dispatches
60
66
  });
67
+ // Task 2193 — composeDraft is mocked here, which is the right seam: what this
68
+ // tool owns is rendering the flags it is handed, identically to email-draft.
69
+ it("states which signature parts landed, from the flags composeDraft reports", async () => {
70
+ composeMock.mockResolvedValueOnce({
71
+ raw: Buffer.from("MIME"),
72
+ resolvedSubject: "Re: Quote",
73
+ threadedParentId: null,
74
+ draftMessageId: "<new-draft@x>",
75
+ attachments: [],
76
+ textApplied: true,
77
+ htmlApplied: true,
78
+ derivedHtml: true,
79
+ });
80
+ const text = await emailDraftEdit({
81
+ accountId: "acc-1",
82
+ targetUid: 5,
83
+ to: "c@d.e",
84
+ subject: "Quote",
85
+ body: "Revised body.",
86
+ });
87
+ expect(text).toContain("Signature: plain text and HTML (body derived from the plain text) applied.");
88
+ });
89
+ it("reports a bare account the same way email-draft does", async () => {
90
+ const text = await emailDraftEdit({
91
+ accountId: "acc-1",
92
+ targetUid: 5,
93
+ to: "c@d.e",
94
+ subject: "Quote",
95
+ body: "Revised body.",
96
+ });
97
+ expect(text).toContain("Signature: none stored for this account.");
98
+ });
61
99
  it("passes the prior draft Message-ID to replaceDraft for relocation", async () => {
62
100
  await emailDraftEdit({
63
101
  accountId: "acc-1",
@@ -106,6 +144,9 @@ describe("Task 819 — email-draft-edit", () => {
106
144
  threadedParentId: "<parent@x>",
107
145
  draftMessageId: "<new-draft@x>",
108
146
  attachments: [],
147
+ textApplied: false,
148
+ htmlApplied: false,
149
+ derivedHtml: false,
109
150
  });
110
151
  const text = await emailDraftEdit({
111
152
  accountId: "acc-1",
@@ -1 +1 @@
1
- {"version":3,"file":"email-draft-edit.test.js","sourceRoot":"","sources":["../../src/__tests__/email-draft-edit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-draft-edit.test.js","sourceRoot":"","sources":["../../src/__tests__/email-draft-edit.test.ts"],"names":[],"mappings":"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"}