@rubytech/create-sitedesk-code 0.1.527 → 0.1.529

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 (735) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/account-ingest-token/dist/index.d.ts +21 -0
  3. package/payload/platform/lib/account-ingest-token/dist/index.d.ts.map +1 -0
  4. package/payload/platform/lib/account-ingest-token/dist/index.js +128 -0
  5. package/payload/platform/lib/account-ingest-token/dist/index.js.map +1 -0
  6. package/payload/platform/lib/account-ingest-token/src/index.ts +137 -0
  7. package/payload/platform/lib/account-ingest-token/tsconfig.json +8 -0
  8. package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts +5 -0
  9. package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts.map +1 -1
  10. package/payload/platform/lib/agent-dispatch-rule/dist/index.js.map +1 -1
  11. package/payload/platform/lib/agent-dispatch-rule/src/index.ts +5 -0
  12. package/payload/platform/package.json +2 -2
  13. package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
  14. package/payload/platform/plugins/admin/PLUGIN.md +5 -1
  15. package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +82 -1
  16. package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +45 -13
  17. package/payload/platform/plugins/admin/mcp/dist/index.js +55 -4
  18. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  19. package/payload/platform/plugins/admin/mcp/dist/tools/linkedin-ingest-token.d.ts +10 -0
  20. package/payload/platform/plugins/admin/mcp/dist/tools/linkedin-ingest-token.d.ts.map +1 -0
  21. package/payload/platform/plugins/admin/mcp/dist/tools/linkedin-ingest-token.js +22 -0
  22. package/payload/platform/plugins/admin/mcp/dist/tools/linkedin-ingest-token.js.map +1 -0
  23. package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.d.ts +16 -0
  24. package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.d.ts.map +1 -0
  25. package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.js +69 -0
  26. package/payload/platform/plugins/admin/mcp/dist/tools/logs-read-mcp.js.map +1 -0
  27. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +86 -7
  28. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +13 -0
  29. package/payload/platform/plugins/docs/references/admin-ui.md +80 -2
  30. package/payload/platform/plugins/docs/references/deployment.md +1 -1
  31. package/payload/platform/plugins/docs/references/linkedin-extension.md +2 -2
  32. package/payload/platform/plugins/docs/references/plugins-guide.md +2 -1
  33. package/payload/platform/plugins/email/.claude-plugin/plugin.json +1 -1
  34. package/payload/platform/plugins/email/PLUGIN.md +8 -3
  35. package/payload/platform/plugins/email/mcp/dist/__tests__/compose-signature.test.js +61 -4
  36. package/payload/platform/plugins/email/mcp/dist/__tests__/compose-signature.test.js.map +1 -1
  37. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft-edit.test.js +41 -0
  38. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft-edit.test.js.map +1 -1
  39. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft.test.js +47 -1
  40. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft.test.js.map +1 -1
  41. package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.d.ts +2 -0
  42. package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.d.ts.map +1 -0
  43. package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.js +184 -0
  44. package/payload/platform/plugins/email/mcp/dist/__tests__/email-sending-identity-set.test.js.map +1 -0
  45. package/payload/platform/plugins/email/mcp/dist/__tests__/email-signature-set.test.js +8 -5
  46. package/payload/platform/plugins/email/mcp/dist/__tests__/email-signature-set.test.js.map +1 -1
  47. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js +64 -0
  48. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js.map +1 -1
  49. package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js +132 -0
  50. package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js.map +1 -1
  51. package/payload/platform/plugins/email/mcp/dist/__tests__/signature.test.js +93 -11
  52. package/payload/platform/plugins/email/mcp/dist/__tests__/signature.test.js.map +1 -1
  53. package/payload/platform/plugins/email/mcp/dist/index.js +34 -3
  54. package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
  55. package/payload/platform/plugins/email/mcp/dist/lib/compose.d.ts +2 -1
  56. package/payload/platform/plugins/email/mcp/dist/lib/compose.d.ts.map +1 -1
  57. package/payload/platform/plugins/email/mcp/dist/lib/compose.js +13 -2
  58. package/payload/platform/plugins/email/mcp/dist/lib/compose.js.map +1 -1
  59. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +47 -2
  60. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
  61. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +92 -5
  62. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
  63. package/payload/platform/plugins/email/mcp/dist/lib/signature.d.ts +55 -7
  64. package/payload/platform/plugins/email/mcp/dist/lib/signature.d.ts.map +1 -1
  65. package/payload/platform/plugins/email/mcp/dist/lib/signature.js +72 -9
  66. package/payload/platform/plugins/email/mcp/dist/lib/signature.js.map +1 -1
  67. package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.d.ts.map +1 -1
  68. package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.js +5 -2
  69. package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.js.map +1 -1
  70. package/payload/platform/plugins/email/mcp/dist/tools/email-draft.d.ts.map +1 -1
  71. package/payload/platform/plugins/email/mcp/dist/tools/email-draft.js +6 -3
  72. package/payload/platform/plugins/email/mcp/dist/tools/email-draft.js.map +1 -1
  73. package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.d.ts +20 -0
  74. package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.d.ts.map +1 -0
  75. package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.js +32 -0
  76. package/payload/platform/plugins/email/mcp/dist/tools/email-sending-identity-set.js.map +1 -0
  77. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts.map +1 -1
  78. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js +22 -2
  79. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js.map +1 -1
  80. package/payload/platform/plugins/email/references/email-reference.md +11 -3
  81. package/payload/platform/plugins/email/skills/email-composition/SKILL.md +3 -0
  82. package/payload/platform/plugins/email/skills/email-signature/SKILL.md +27 -9
  83. package/payload/platform/plugins/linkedin-extension/extension/README.md +3 -3
  84. package/payload/platform/plugins/linkedin-extension/extension/background/sw.js +12 -7
  85. package/payload/platform/plugins/linkedin-extension/extension/content/profile.js +4 -1
  86. package/payload/platform/plugins/linkedin-extension/extension/content/thread.js +4 -1
  87. package/payload/platform/plugins/linkedin-extension/extension/options/options.html +3 -3
  88. package/payload/platform/plugins/linkedin-extension/extension/options/options.js +24 -16
  89. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.js +45 -2
  90. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/suspension-census.test.js.map +1 -1
  91. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
  92. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +15 -2
  93. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
  94. package/payload/platform/scripts/__tests__/vnc-cdp-liveness.test.sh +25 -2
  95. package/payload/platform/scripts/vnc.sh +34 -26
  96. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.d.ts +24 -1
  97. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.d.ts.map +1 -1
  98. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.js +84 -3
  99. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.js.map +1 -1
  100. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  101. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +2 -0
  102. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  103. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  104. package/payload/server/{chunk-XCR5D2G3.js → chunk-BP7LH7MC.js} +0 -1
  105. package/payload/server/{chunk-KY3BBT67.js → chunk-DLG7XSLA.js} +1 -1
  106. package/payload/server/{chunk-7MGR5M6G.js → chunk-UTIHI6KV.js} +1 -1
  107. package/payload/server/{manager-6XOWHREK.js → manager-B4LRDZKC.js} +2 -2
  108. package/payload/server/maxy-edge.js +2 -2
  109. package/payload/server/public/activity.html +5 -5
  110. package/payload/server/public/agents.html +4 -4
  111. package/payload/server/public/assets/AdminLoginScreens-zfexKfbT.js +1 -0
  112. package/payload/server/public/assets/AdminLoginScreens-zfexKfbT.js.br +0 -0
  113. package/payload/server/public/assets/AdminLoginScreens-zfexKfbT.js.gz +0 -0
  114. package/payload/server/public/assets/AdminShell-Cbk0TL1B.js +2 -0
  115. package/payload/server/public/assets/AdminShell-Cbk0TL1B.js.br +0 -0
  116. package/payload/server/public/assets/AdminShell-Cbk0TL1B.js.gz +0 -0
  117. package/payload/server/public/assets/CdpScreencastSurface-CLSQHh4e.js +1 -0
  118. package/payload/server/public/assets/CdpScreencastSurface-CLSQHh4e.js.br +0 -0
  119. package/payload/server/public/assets/CdpScreencastSurface-CLSQHh4e.js.gz +0 -0
  120. package/payload/server/public/assets/{activity-aVvbaVd4.js → activity-u275Oc-u.js} +1 -1
  121. package/payload/server/public/assets/activity-u275Oc-u.js.br +0 -0
  122. package/payload/server/public/assets/activity-u275Oc-u.js.gz +0 -0
  123. package/payload/server/public/assets/admin-Du1nR_hP.js +1 -0
  124. package/payload/server/public/assets/admin-Du1nR_hP.js.br +0 -0
  125. package/payload/server/public/assets/admin-Du1nR_hP.js.gz +0 -0
  126. package/payload/server/public/assets/{agents-CrpVTPRG.js → agents-DJTxRLLU.js} +1 -1
  127. package/payload/server/public/assets/agents-DJTxRLLU.js.br +0 -0
  128. package/payload/server/public/assets/agents-DJTxRLLU.js.gz +0 -0
  129. package/payload/server/public/assets/{arc-DaudCnXg.js → arc-CHoXZR2f.js} +1 -1
  130. package/payload/server/public/assets/arc-CHoXZR2f.js.br +0 -0
  131. package/payload/server/public/assets/arc-CHoXZR2f.js.gz +0 -0
  132. package/payload/server/public/assets/architecture-YZFGNWBL-CQyo9W6E.js +1 -0
  133. package/payload/server/public/assets/architecture-YZFGNWBL-CQyo9W6E.js.br +0 -0
  134. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BEEC3s7i.js → architectureDiagram-Q4EWVU46-B8SCI0AR.js} +1 -1
  135. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-B8SCI0AR.js.br +0 -0
  136. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-B8SCI0AR.js.gz +0 -0
  137. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BIWyfb18.js → blockDiagram-DXYQGD6D-CsJmhz5D.js} +1 -1
  138. package/payload/server/public/assets/blockDiagram-DXYQGD6D-CsJmhz5D.js.br +0 -0
  139. package/payload/server/public/assets/blockDiagram-DXYQGD6D-CsJmhz5D.js.gz +0 -0
  140. package/payload/server/public/assets/browser-Bft6zVkX.js +1 -0
  141. package/payload/server/public/assets/browser-Bft6zVkX.js.br +0 -0
  142. package/payload/server/public/assets/browser-Bft6zVkX.js.gz +0 -0
  143. package/payload/server/public/assets/{c4Diagram-AHTNJAMY--h6oE2cv.js → c4Diagram-AHTNJAMY-CzaSNqcs.js} +1 -1
  144. package/payload/server/public/assets/c4Diagram-AHTNJAMY-CzaSNqcs.js.br +0 -0
  145. package/payload/server/public/assets/c4Diagram-AHTNJAMY-CzaSNqcs.js.gz +0 -0
  146. package/payload/server/public/assets/{calendar-4IWQpwYv.js → calendar-Ct-DCCqY.js} +1 -1
  147. package/payload/server/public/assets/calendar-Ct-DCCqY.js.br +0 -0
  148. package/payload/server/public/assets/calendar-Ct-DCCqY.js.gz +0 -0
  149. package/payload/server/public/assets/channel-Dg_Rah6O.js +1 -0
  150. package/payload/server/public/assets/channel-Dg_Rah6O.js.br +0 -0
  151. package/payload/server/public/assets/chat-pqasbAg8.js +1 -0
  152. package/payload/server/public/assets/chat-pqasbAg8.js.br +0 -0
  153. package/payload/server/public/assets/chat-pqasbAg8.js.gz +0 -0
  154. package/payload/server/public/assets/chevron-left-C8LTc7lb.js +1 -0
  155. package/payload/server/public/assets/chevron-right-Lz9t7Hed.js +1 -0
  156. package/payload/server/public/assets/chevron-right-Lz9t7Hed.js.br +0 -0
  157. package/payload/server/public/assets/{chunk-2KRD3SAO-BwEVlnxo.js → chunk-2KRD3SAO-DAN3KCZc.js} +1 -1
  158. package/payload/server/public/assets/chunk-2KRD3SAO-DAN3KCZc.js.br +0 -0
  159. package/payload/server/public/assets/chunk-2KRD3SAO-DAN3KCZc.js.gz +0 -0
  160. package/payload/server/public/assets/{chunk-336JU56O-DQddTATH.js → chunk-336JU56O-Dm-0_lIT.js} +2 -2
  161. package/payload/server/public/assets/chunk-336JU56O-Dm-0_lIT.js.br +0 -0
  162. package/payload/server/public/assets/chunk-336JU56O-Dm-0_lIT.js.gz +0 -0
  163. package/payload/server/public/assets/chunk-426QAEUC-Rh8qTRZB.js +1 -0
  164. package/payload/server/public/assets/chunk-426QAEUC-Rh8qTRZB.js.br +0 -0
  165. package/payload/server/public/assets/chunk-426QAEUC-Rh8qTRZB.js.gz +0 -0
  166. package/payload/server/public/assets/{chunk-4BX2VUAB-C5p3xTC6.js → chunk-4BX2VUAB-C2l9bAlo.js} +1 -1
  167. package/payload/server/public/assets/chunk-4BX2VUAB-C2l9bAlo.js.br +0 -0
  168. package/payload/server/public/assets/chunk-4BX2VUAB-C2l9bAlo.js.gz +0 -0
  169. package/payload/server/public/assets/{chunk-4TB4RGXK-gClfNc1w.js → chunk-4TB4RGXK-BMXDzU09.js} +1 -1
  170. package/payload/server/public/assets/chunk-4TB4RGXK-BMXDzU09.js.br +0 -0
  171. package/payload/server/public/assets/chunk-4TB4RGXK-BMXDzU09.js.gz +0 -0
  172. package/payload/server/public/assets/{chunk-55IACEB6-DDU_m1ra.js → chunk-55IACEB6-CbMYAZon.js} +1 -1
  173. package/payload/server/public/assets/chunk-55IACEB6-CbMYAZon.js.br +0 -0
  174. package/payload/server/public/assets/chunk-55IACEB6-CbMYAZon.js.gz +0 -0
  175. package/payload/server/public/assets/{chunk-5FUZZQ4R-CZ2jQWNR.js → chunk-5FUZZQ4R-DjdsuxLA.js} +1 -1
  176. package/payload/server/public/assets/chunk-5FUZZQ4R-DjdsuxLA.js.br +0 -0
  177. package/payload/server/public/assets/chunk-5FUZZQ4R-DjdsuxLA.js.gz +0 -0
  178. package/payload/server/public/assets/{chunk-5PVQY5BW-kcZ5kfTg.js → chunk-5PVQY5BW-CGSBzsF6.js} +1 -1
  179. package/payload/server/public/assets/chunk-5PVQY5BW-CGSBzsF6.js.br +0 -0
  180. package/payload/server/public/assets/chunk-5PVQY5BW-CGSBzsF6.js.gz +0 -0
  181. package/payload/server/public/assets/{chunk-67CJDMHE-9W0Qv0jm.js → chunk-67CJDMHE-ClOLWser.js} +1 -1
  182. package/payload/server/public/assets/chunk-67CJDMHE-ClOLWser.js.br +0 -0
  183. package/payload/server/public/assets/chunk-67CJDMHE-ClOLWser.js.gz +0 -0
  184. package/payload/server/public/assets/{chunk-7N4EOEYR-B3gqydR3.js → chunk-7N4EOEYR-BzC1dzY0.js} +1 -1
  185. package/payload/server/public/assets/chunk-7N4EOEYR-BzC1dzY0.js.br +0 -0
  186. package/payload/server/public/assets/chunk-7N4EOEYR-BzC1dzY0.js.gz +0 -0
  187. package/payload/server/public/assets/{chunk-AA7GKIK3-DW8a-2NK.js → chunk-AA7GKIK3-R_pjI1kw.js} +1 -1
  188. package/payload/server/public/assets/chunk-AA7GKIK3-R_pjI1kw.js.br +0 -0
  189. package/payload/server/public/assets/chunk-AA7GKIK3-R_pjI1kw.js.gz +0 -0
  190. package/payload/server/public/assets/{chunk-BSJP7CBP-DqXIO_5R.js → chunk-BSJP7CBP-D2KRAq3U.js} +1 -1
  191. package/payload/server/public/assets/chunk-BSJP7CBP-D2KRAq3U.js.br +0 -0
  192. package/payload/server/public/assets/chunk-BSJP7CBP-D2KRAq3U.js.gz +0 -0
  193. package/payload/server/public/assets/{chunk-CIAEETIT-BMJfgj2u.js → chunk-CIAEETIT-BPGWtrKR.js} +1 -1
  194. package/payload/server/public/assets/chunk-CIAEETIT-BPGWtrKR.js.br +0 -0
  195. package/payload/server/public/assets/chunk-CIAEETIT-BPGWtrKR.js.gz +0 -0
  196. package/payload/server/public/assets/{chunk-EDXVE4YY-BxdLPk0b.js → chunk-EDXVE4YY-tqt7wueu.js} +1 -1
  197. package/payload/server/public/assets/chunk-EDXVE4YY-tqt7wueu.js.br +3 -0
  198. package/payload/server/public/assets/chunk-EDXVE4YY-tqt7wueu.js.gz +0 -0
  199. package/payload/server/public/assets/{chunk-ENJZ2VHE-Cfe2DCjQ.js → chunk-ENJZ2VHE-DJG3cA6E.js} +1 -1
  200. package/payload/server/public/assets/chunk-ENJZ2VHE-DJG3cA6E.js.br +0 -0
  201. package/payload/server/public/assets/chunk-ENJZ2VHE-DJG3cA6E.js.gz +0 -0
  202. package/payload/server/public/assets/{chunk-FMBD7UC4-CdPjwbtf.js → chunk-FMBD7UC4-DO1xgCDf.js} +1 -1
  203. package/payload/server/public/assets/chunk-FMBD7UC4-DO1xgCDf.js.br +2 -0
  204. package/payload/server/public/assets/chunk-FMBD7UC4-DO1xgCDf.js.gz +0 -0
  205. package/payload/server/public/assets/{chunk-FOC6F5B3-Dl6l1KAh.js → chunk-FOC6F5B3-BhWAbCUG.js} +1 -1
  206. package/payload/server/public/assets/chunk-FOC6F5B3-BhWAbCUG.js.br +0 -0
  207. package/payload/server/public/assets/chunk-FOC6F5B3-BhWAbCUG.js.gz +0 -0
  208. package/payload/server/public/assets/{chunk-ICPOFSXX-PnsGrqtx.js → chunk-ICPOFSXX-BhUzt35c.js} +2 -2
  209. package/payload/server/public/assets/chunk-ICPOFSXX-BhUzt35c.js.br +0 -0
  210. package/payload/server/public/assets/chunk-ICPOFSXX-BhUzt35c.js.gz +0 -0
  211. package/payload/server/public/assets/{chunk-K5T4RW27--g29_wjW.js → chunk-K5T4RW27-Boj-qHrX.js} +1 -1
  212. package/payload/server/public/assets/chunk-K5T4RW27-Boj-qHrX.js.br +0 -0
  213. package/payload/server/public/assets/chunk-K5T4RW27-Boj-qHrX.js.gz +0 -0
  214. package/payload/server/public/assets/{chunk-KGLVRYIC-CI77ENeO.js → chunk-KGLVRYIC-3cBRDk1b.js} +1 -1
  215. package/payload/server/public/assets/chunk-KGLVRYIC-3cBRDk1b.js.br +2 -0
  216. package/payload/server/public/assets/chunk-KGLVRYIC-3cBRDk1b.js.gz +0 -0
  217. package/payload/server/public/assets/{chunk-LIHQZDEY-CE-XByg6.js → chunk-LIHQZDEY-CgkLKaII.js} +1 -1
  218. package/payload/server/public/assets/chunk-LIHQZDEY-CgkLKaII.js.br +0 -0
  219. package/payload/server/public/assets/chunk-LIHQZDEY-CgkLKaII.js.gz +0 -0
  220. package/payload/server/public/assets/{chunk-ORNJ4GCN-DkjJQQSm.js → chunk-ORNJ4GCN-Dl449r_k.js} +1 -1
  221. package/payload/server/public/assets/chunk-ORNJ4GCN-Dl449r_k.js.br +0 -0
  222. package/payload/server/public/assets/chunk-ORNJ4GCN-Dl449r_k.js.gz +0 -0
  223. package/payload/server/public/assets/{chunk-OYMX7WX6-DhogFeD7.js → chunk-OYMX7WX6-Dzkj67n6.js} +1 -1
  224. package/payload/server/public/assets/chunk-OYMX7WX6-Dzkj67n6.js.br +0 -0
  225. package/payload/server/public/assets/chunk-OYMX7WX6-Dzkj67n6.js.gz +0 -0
  226. package/payload/server/public/assets/chunk-QZHKN3VN-BDoCtU0N.js +1 -0
  227. package/payload/server/public/assets/chunk-QZHKN3VN-BDoCtU0N.js.br +0 -0
  228. package/payload/server/public/assets/chunk-QZHKN3VN-BDoCtU0N.js.gz +0 -0
  229. package/payload/server/public/assets/{chunk-U2HBQHQK-CeaRXuiO.js → chunk-U2HBQHQK-Dyz9Kbir.js} +1 -1
  230. package/payload/server/public/assets/chunk-U2HBQHQK-Dyz9Kbir.js.br +0 -0
  231. package/payload/server/public/assets/chunk-U2HBQHQK-Dyz9Kbir.js.gz +0 -0
  232. package/payload/server/public/assets/{chunk-X2U36JSP-BqxXeOqf.js → chunk-X2U36JSP-ag0VVCw6.js} +1 -1
  233. package/payload/server/public/assets/chunk-X2U36JSP-ag0VVCw6.js.br +0 -0
  234. package/payload/server/public/assets/chunk-X2U36JSP-ag0VVCw6.js.gz +0 -0
  235. package/payload/server/public/assets/{chunk-XPW4576I-DtqJwn2x.js → chunk-XPW4576I-B-vhDYPE.js} +1 -1
  236. package/payload/server/public/assets/chunk-XPW4576I-B-vhDYPE.js.br +0 -0
  237. package/payload/server/public/assets/chunk-XPW4576I-B-vhDYPE.js.gz +0 -0
  238. package/payload/server/public/assets/{chunk-YZCP3GAM-COBlEwQw.js → chunk-YZCP3GAM-C4COviPb.js} +1 -1
  239. package/payload/server/public/assets/chunk-YZCP3GAM-C4COviPb.js.br +0 -0
  240. package/payload/server/public/assets/chunk-YZCP3GAM-C4COviPb.js.gz +0 -0
  241. package/payload/server/public/assets/{chunk-ZZ45TVLE-CcL088y6.js → chunk-ZZ45TVLE-8dGsCp5b.js} +1 -1
  242. package/payload/server/public/assets/chunk-ZZ45TVLE-8dGsCp5b.js.br +0 -0
  243. package/payload/server/public/assets/chunk-ZZ45TVLE-8dGsCp5b.js.gz +0 -0
  244. package/payload/server/public/assets/classDiagram-6PBFFD2Q-qevfwy5C.js +1 -0
  245. package/payload/server/public/assets/classDiagram-6PBFFD2Q-qevfwy5C.js.br +0 -0
  246. package/payload/server/public/assets/classDiagram-6PBFFD2Q-qevfwy5C.js.gz +0 -0
  247. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CxOR3aao.js +1 -0
  248. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CxOR3aao.js.br +0 -0
  249. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CxOR3aao.js.gz +0 -0
  250. package/payload/server/public/assets/clock-D6QQFHwJ.js +1 -0
  251. package/payload/server/public/assets/clock-D6QQFHwJ.js.br +0 -0
  252. package/payload/server/public/assets/clock-D6QQFHwJ.js.gz +0 -0
  253. package/payload/server/public/assets/clone-CJmzeWWZ.js +1 -0
  254. package/payload/server/public/assets/clone-CJmzeWWZ.js.br +0 -0
  255. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-kEHVkDNn.js → cose-bilkent-S5V4N54A-qM4Q4TuE.js} +1 -1
  256. package/payload/server/public/assets/cose-bilkent-S5V4N54A-qM4Q4TuE.js.br +0 -0
  257. package/payload/server/public/assets/cose-bilkent-S5V4N54A-qM4Q4TuE.js.gz +0 -0
  258. package/payload/server/public/assets/{dagre-D2wUw1zC.js → dagre-DRvHdusQ.js} +1 -1
  259. package/payload/server/public/assets/dagre-DRvHdusQ.js.br +0 -0
  260. package/payload/server/public/assets/dagre-DRvHdusQ.js.gz +0 -0
  261. package/payload/server/public/assets/{dagre-KV5264BT-BWfTDwEs.js → dagre-KV5264BT-CGqSVVTn.js} +1 -1
  262. package/payload/server/public/assets/dagre-KV5264BT-CGqSVVTn.js.br +0 -0
  263. package/payload/server/public/assets/dagre-KV5264BT-CGqSVVTn.js.gz +0 -0
  264. package/payload/server/public/assets/data-B1JJ3Y1T.js +1 -0
  265. package/payload/server/public/assets/data-B1JJ3Y1T.js.br +0 -0
  266. package/payload/server/public/assets/data-B1JJ3Y1T.js.gz +0 -0
  267. package/payload/server/public/assets/{diagram-5BDNPKRD-Tl9dS8w0.js → diagram-5BDNPKRD-DfFgeApz.js} +1 -1
  268. package/payload/server/public/assets/diagram-5BDNPKRD-DfFgeApz.js.br +0 -0
  269. package/payload/server/public/assets/diagram-5BDNPKRD-DfFgeApz.js.gz +0 -0
  270. package/payload/server/public/assets/{diagram-G4DWMVQ6-CeSe6TMu.js → diagram-G4DWMVQ6-DPXc3Q8e.js} +1 -1
  271. package/payload/server/public/assets/diagram-G4DWMVQ6-DPXc3Q8e.js.br +0 -0
  272. package/payload/server/public/assets/diagram-G4DWMVQ6-DPXc3Q8e.js.gz +0 -0
  273. package/payload/server/public/assets/{diagram-MMDJMWI5-DYBNJCmk.js → diagram-MMDJMWI5-V8RCddvy.js} +1 -1
  274. package/payload/server/public/assets/diagram-MMDJMWI5-V8RCddvy.js.br +0 -0
  275. package/payload/server/public/assets/diagram-MMDJMWI5-V8RCddvy.js.gz +0 -0
  276. package/payload/server/public/assets/{diagram-TYMM5635-BmpUGltx.js → diagram-TYMM5635-CrvfIf-m.js} +1 -1
  277. package/payload/server/public/assets/diagram-TYMM5635-CrvfIf-m.js.br +0 -0
  278. package/payload/server/public/assets/diagram-TYMM5635-CrvfIf-m.js.gz +0 -0
  279. package/payload/server/public/assets/{erDiagram-SMLLAGMA-DuwuNGqx.js → erDiagram-SMLLAGMA-DClMgmBB.js} +1 -1
  280. package/payload/server/public/assets/erDiagram-SMLLAGMA-DClMgmBB.js.br +0 -0
  281. package/payload/server/public/assets/erDiagram-SMLLAGMA-DClMgmBB.js.gz +0 -0
  282. package/payload/server/public/assets/{file-download-DayBHhKS.js → file-download-C_fSe4dm.js} +1 -1
  283. package/payload/server/public/assets/file-download-C_fSe4dm.js.br +0 -0
  284. package/payload/server/public/assets/file-download-C_fSe4dm.js.gz +0 -0
  285. package/payload/server/public/assets/{file-text-BSyhVH0m.js → file-text-D7GbEcqj.js} +1 -1
  286. package/payload/server/public/assets/file-text-D7GbEcqj.js.br +0 -0
  287. package/payload/server/public/assets/file-text-D7GbEcqj.js.gz +0 -0
  288. package/payload/server/public/assets/{flatten-Bu-b1uTY.js → flatten-UdUTbm8v.js} +1 -1
  289. package/payload/server/public/assets/flatten-UdUTbm8v.js.br +0 -0
  290. package/payload/server/public/assets/flatten-UdUTbm8v.js.gz +0 -0
  291. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-Bpp8P6Ba.js → flowDiagram-DWJPFMVM-D29Ou09P.js} +1 -1
  292. package/payload/server/public/assets/flowDiagram-DWJPFMVM-D29Ou09P.js.br +0 -0
  293. package/payload/server/public/assets/flowDiagram-DWJPFMVM-D29Ou09P.js.gz +0 -0
  294. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-CE6ppjB4.js → ganttDiagram-T4ZO3ILL-CoAK7W_V.js} +1 -1
  295. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CoAK7W_V.js.br +0 -0
  296. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CoAK7W_V.js.gz +0 -0
  297. package/payload/server/public/assets/gitGraph-7Q5UKJZL--JSoLMoH.js +1 -0
  298. package/payload/server/public/assets/gitGraph-7Q5UKJZL--JSoLMoH.js.br +0 -0
  299. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BdK1GjPr.js → gitGraphDiagram-UUTBAWPF-DMEc_1aX.js} +1 -1
  300. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DMEc_1aX.js.br +0 -0
  301. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DMEc_1aX.js.gz +0 -0
  302. package/payload/server/public/assets/{graph-labels-DegLKGdx.js → graph-labels-Dlcb6cW7.js} +1 -1
  303. package/payload/server/public/assets/graph-labels-Dlcb6cW7.js.br +0 -0
  304. package/payload/server/public/assets/graph-labels-Dlcb6cW7.js.gz +0 -0
  305. package/payload/server/public/assets/{graph-Bjv3Tc3B.js → graph-yl5qU1kO.js} +3 -3
  306. package/payload/server/public/assets/graph-yl5qU1kO.js.br +0 -0
  307. package/payload/server/public/assets/graph-yl5qU1kO.js.gz +0 -0
  308. package/payload/server/public/assets/{graphlib-CHEXylyU.js → graphlib-ihSLgqUG.js} +1 -1
  309. package/payload/server/public/assets/graphlib-ihSLgqUG.js.br +0 -0
  310. package/payload/server/public/assets/graphlib-ihSLgqUG.js.gz +0 -0
  311. package/payload/server/public/assets/info-OMHHGYJF-CY4gsXn4.js +1 -0
  312. package/payload/server/public/assets/info-OMHHGYJF-CY4gsXn4.js.br +0 -0
  313. package/payload/server/public/assets/infoDiagram-42DDH7IO-CpWSNS3C.js +2 -0
  314. package/payload/server/public/assets/infoDiagram-42DDH7IO-CpWSNS3C.js.br +0 -0
  315. package/payload/server/public/assets/infoDiagram-42DDH7IO-CpWSNS3C.js.gz +0 -0
  316. package/payload/server/public/assets/{isEmpty-CjH0UASp.js → isEmpty-DY_Xp9Na.js} +1 -1
  317. package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.br +0 -0
  318. package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.gz +0 -0
  319. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js → ishikawaDiagram-UXIWVN3A-w8fVIbxy.js} +1 -1
  320. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-w8fVIbxy.js.br +0 -0
  321. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-w8fVIbxy.js.gz +0 -0
  322. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-ByUPv8q6.js → journeyDiagram-VCZTEJTY-BRTPKDT5.js} +1 -1
  323. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-BRTPKDT5.js.br +0 -0
  324. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-BRTPKDT5.js.gz +0 -0
  325. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-CFinqhpu.js → kanban-definition-6JOO6SKY-Ls3VaFZ_.js} +1 -1
  326. package/payload/server/public/assets/kanban-definition-6JOO6SKY-Ls3VaFZ_.js.br +0 -0
  327. package/payload/server/public/assets/kanban-definition-6JOO6SKY-Ls3VaFZ_.js.gz +0 -0
  328. package/payload/server/public/assets/{line-Y4ns5Ghi.js → line-BwhAIh8u.js} +1 -1
  329. package/payload/server/public/assets/line-BwhAIh8u.js.br +0 -0
  330. package/payload/server/public/assets/line-BwhAIh8u.js.gz +0 -0
  331. package/payload/server/public/assets/{linear-l39GooQ5.js → linear-USiZPFN4.js} +1 -1
  332. package/payload/server/public/assets/linear-USiZPFN4.js.br +0 -0
  333. package/payload/server/public/assets/linear-USiZPFN4.js.gz +0 -0
  334. package/payload/server/public/assets/{maximize-2-DJFG2EXJ.js → maximize-2-BS689r4W.js} +1 -1
  335. package/payload/server/public/assets/maximize-2-BS689r4W.js.br +0 -0
  336. package/payload/server/public/assets/maximize-2-BS689r4W.js.gz +0 -0
  337. package/payload/server/public/assets/{mermaid-parser.core-5w0T1dRj.js → mermaid-parser.core-Bq--iC2w.js} +2 -2
  338. package/payload/server/public/assets/mermaid-parser.core-Bq--iC2w.js.br +0 -0
  339. package/payload/server/public/assets/mermaid-parser.core-Bq--iC2w.js.gz +0 -0
  340. package/payload/server/public/assets/{mermaid.core-DBADY5VW.js → mermaid.core-oYX-FxVa.js} +3 -3
  341. package/payload/server/public/assets/mermaid.core-oYX-FxVa.js.br +0 -0
  342. package/payload/server/public/assets/mermaid.core-oYX-FxVa.js.gz +0 -0
  343. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-rHz37loq.js → mindmap-definition-QFDTVHPH-ByZjL4Bs.js} +1 -1
  344. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-ByZjL4Bs.js.br +0 -0
  345. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-ByZjL4Bs.js.gz +0 -0
  346. package/payload/server/public/assets/operator-CvapnpIW.js +1 -0
  347. package/payload/server/public/assets/operator-CvapnpIW.js.br +0 -0
  348. package/payload/server/public/assets/operator-CvapnpIW.js.gz +0 -0
  349. package/payload/server/public/assets/{ordinal-D6D6WcTC.js → ordinal-gnpqfIHn.js} +1 -1
  350. package/payload/server/public/assets/ordinal-gnpqfIHn.js.br +0 -0
  351. package/payload/server/public/assets/ordinal-gnpqfIHn.js.gz +0 -0
  352. package/payload/server/public/assets/packet-4T2RLAQJ-DczCn3uj.js +1 -0
  353. package/payload/server/public/assets/packet-4T2RLAQJ-DczCn3uj.js.br +0 -0
  354. package/payload/server/public/assets/page-987y4JbQ.js +32 -0
  355. package/payload/server/public/assets/page-987y4JbQ.js.br +0 -0
  356. package/payload/server/public/assets/page-987y4JbQ.js.gz +0 -0
  357. package/payload/server/public/assets/page-DWkUH4Z_.js +1 -0
  358. package/payload/server/public/assets/page-DWkUH4Z_.js.br +0 -0
  359. package/payload/server/public/assets/page-DWkUH4Z_.js.gz +0 -0
  360. package/payload/server/public/assets/{pdf-render-BSgBp8Fr.js → pdf-render-gEryZmeC.js} +1 -1
  361. package/payload/server/public/assets/pdf-render-gEryZmeC.js.br +0 -0
  362. package/payload/server/public/assets/pdf-render-gEryZmeC.js.gz +0 -0
  363. package/payload/server/public/assets/pie-ZZUOXDRM-CbvZUaof.js +1 -0
  364. package/payload/server/public/assets/pie-ZZUOXDRM-CbvZUaof.js.br +0 -0
  365. package/payload/server/public/assets/{pieDiagram-DEJITSTG-as0e_DSH.js → pieDiagram-DEJITSTG-BGFms5bU.js} +1 -1
  366. package/payload/server/public/assets/pieDiagram-DEJITSTG-BGFms5bU.js.br +0 -0
  367. package/payload/server/public/assets/pieDiagram-DEJITSTG-BGFms5bU.js.gz +0 -0
  368. package/payload/server/public/assets/{public-CNVEM-Bx.js → public-D5pi-VFn.js} +1 -1
  369. package/payload/server/public/assets/public-D5pi-VFn.js.br +0 -0
  370. package/payload/server/public/assets/public-D5pi-VFn.js.gz +0 -0
  371. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-B4t8HO9J.js → quadrantDiagram-34T5L4WZ-_ymoz8bQ.js} +1 -1
  372. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-_ymoz8bQ.js.br +0 -0
  373. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-_ymoz8bQ.js.gz +0 -0
  374. package/payload/server/public/assets/radar-PYXPWWZC-XmuabQlO.js +1 -0
  375. package/payload/server/public/assets/radar-PYXPWWZC-XmuabQlO.js.br +0 -0
  376. package/payload/server/public/assets/{reduce-BtXXK8Ma.js → reduce-BvezuHIe.js} +1 -1
  377. package/payload/server/public/assets/reduce-BvezuHIe.js.br +0 -0
  378. package/payload/server/public/assets/reduce-BvezuHIe.js.gz +0 -0
  379. package/payload/server/public/assets/{requirementDiagram-MS252O5E-yxh30zHX.js → requirementDiagram-MS252O5E-lrOmOxIA.js} +1 -1
  380. package/payload/server/public/assets/requirementDiagram-MS252O5E-lrOmOxIA.js.br +0 -0
  381. package/payload/server/public/assets/requirementDiagram-MS252O5E-lrOmOxIA.js.gz +0 -0
  382. package/payload/server/public/assets/{rotate-ccw-DQCaky8_.js → rotate-ccw-zNxnK36R.js} +1 -1
  383. package/payload/server/public/assets/rotate-ccw-zNxnK36R.js.br +0 -0
  384. package/payload/server/public/assets/rotate-ccw-zNxnK36R.js.gz +0 -0
  385. package/payload/server/public/assets/routines-mZzrGA5y.js +2 -0
  386. package/payload/server/public/assets/routines-mZzrGA5y.js.br +0 -0
  387. package/payload/server/public/assets/routines-mZzrGA5y.js.gz +0 -0
  388. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-j-k9Wfty.js → sankeyDiagram-XADWPNL6-CdUQThXU.js} +1 -1
  389. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-CdUQThXU.js.br +0 -0
  390. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-CdUQThXU.js.gz +0 -0
  391. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DGLgcLhC.js → sequenceDiagram-FGHM5R23-DqnEEldq.js} +1 -1
  392. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DqnEEldq.js.br +0 -0
  393. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DqnEEldq.js.gz +0 -0
  394. package/payload/server/public/assets/{skills-CosN3uA4.js → skills-5A8PockT.js} +1 -1
  395. package/payload/server/public/assets/skills-5A8PockT.js.br +0 -0
  396. package/payload/server/public/assets/skills-5A8PockT.js.gz +0 -0
  397. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-C9p1OUMI.js → stateDiagram-FHFEXIEX-KEdtxqdq.js} +1 -1
  398. package/payload/server/public/assets/stateDiagram-FHFEXIEX-KEdtxqdq.js.br +0 -0
  399. package/payload/server/public/assets/stateDiagram-FHFEXIEX-KEdtxqdq.js.gz +0 -0
  400. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Cs85Ewtt.js +1 -0
  401. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Cs85Ewtt.js.br +0 -0
  402. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Cs85Ewtt.js.gz +0 -0
  403. package/payload/server/public/assets/{tasks-f0QikHmw.js → tasks-B1_2wc6L.js} +2 -2
  404. package/payload/server/public/assets/tasks-B1_2wc6L.js.br +0 -0
  405. package/payload/server/public/assets/tasks-B1_2wc6L.js.gz +0 -0
  406. package/payload/server/public/assets/{time-entry-format-DLTdS35_.js → time-entry-format-CJ2FSSQt.js} +1 -1
  407. package/payload/server/public/assets/time-entry-format-CJ2FSSQt.js.br +0 -0
  408. package/payload/server/public/assets/time-entry-format-CJ2FSSQt.js.gz +0 -0
  409. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-B1g7pgkH.js → timeline-definition-GMOUNBTQ-BRXdCMau.js} +1 -1
  410. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-BRXdCMau.js.br +0 -0
  411. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-BRXdCMau.js.gz +0 -0
  412. package/payload/server/public/assets/treeView-SZITEDCU-B-SYhqwK.js +1 -0
  413. package/payload/server/public/assets/treeView-SZITEDCU-B-SYhqwK.js.br +0 -0
  414. package/payload/server/public/assets/treemap-W4RFUUIX-DpZmFNM9.js +1 -0
  415. package/payload/server/public/assets/treemap-W4RFUUIX-DpZmFNM9.js.br +0 -0
  416. package/payload/server/public/assets/{triangle-alert-CpwrbdYq.js → triangle-alert-CedsrgME.js} +1 -1
  417. package/payload/server/public/assets/triangle-alert-CedsrgME.js.br +0 -0
  418. package/payload/server/public/assets/triangle-alert-CedsrgME.js.gz +0 -0
  419. package/payload/server/public/assets/{useCopyFeedback-D01gSp36.js → useCopyFeedback-zjZZUC2-.js} +1 -1
  420. package/payload/server/public/assets/useCopyFeedback-zjZZUC2-.js.br +0 -0
  421. package/payload/server/public/assets/useCopyFeedback-zjZZUC2-.js.gz +0 -0
  422. package/payload/server/public/assets/useSubAccountSwitcher-72THldvm.css +1 -0
  423. package/payload/server/public/assets/useSubAccountSwitcher-72THldvm.css.br +0 -0
  424. package/payload/server/public/assets/useSubAccountSwitcher-72THldvm.css.gz +0 -0
  425. package/payload/server/public/assets/useSubAccountSwitcher-HjQZjJBr.js +14 -0
  426. package/payload/server/public/assets/useSubAccountSwitcher-HjQZjJBr.js.br +0 -0
  427. package/payload/server/public/assets/useSubAccountSwitcher-HjQZjJBr.js.gz +0 -0
  428. package/payload/server/public/assets/{useVoiceRecorder-DiPgyDUy.js → useVoiceRecorder-CJecnefX.js} +2 -2
  429. package/payload/server/public/assets/useVoiceRecorder-CJecnefX.js.br +0 -0
  430. package/payload/server/public/assets/useVoiceRecorder-CJecnefX.js.gz +0 -0
  431. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-D2ZjFfh4.js → vennDiagram-DHZGUBPP-8nc7NUVQ.js} +1 -1
  432. package/payload/server/public/assets/vennDiagram-DHZGUBPP-8nc7NUVQ.js.br +0 -0
  433. package/payload/server/public/assets/vennDiagram-DHZGUBPP-8nc7NUVQ.js.gz +0 -0
  434. package/payload/server/public/assets/wardley-RL74JXVD-D2FCCV4-.js +1 -0
  435. package/payload/server/public/assets/wardley-RL74JXVD-D2FCCV4-.js.br +0 -0
  436. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BFAhfkD8.js → wardleyDiagram-NUSXRM2D-Cjjiap8M.js} +1 -1
  437. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-Cjjiap8M.js.br +0 -0
  438. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-Cjjiap8M.js.gz +0 -0
  439. package/payload/server/public/assets/{wrench-C5SJreEu.js → wrench-D8BH20W8.js} +1 -1
  440. package/payload/server/public/assets/wrench-D8BH20W8.js.br +0 -0
  441. package/payload/server/public/assets/wrench-D8BH20W8.js.gz +0 -0
  442. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-Dt94h2RQ.js → xychartDiagram-5P7HB3ND-DEzDNw_i.js} +1 -1
  443. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DEzDNw_i.js.br +0 -0
  444. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DEzDNw_i.js.gz +0 -0
  445. package/payload/server/public/browser.html +5 -4
  446. package/payload/server/public/calendar.html +7 -7
  447. package/payload/server/public/chat.html +14 -14
  448. package/payload/server/public/data.html +13 -13
  449. package/payload/server/public/graph.html +9 -9
  450. package/payload/server/public/index.html +17 -16
  451. package/payload/server/public/operator.html +16 -15
  452. package/payload/server/public/public.html +14 -14
  453. package/payload/server/public/routines.html +7 -7
  454. package/payload/server/public/skills.html +5 -5
  455. package/payload/server/public/tasks.html +6 -6
  456. package/payload/server/server.js +403 -277
  457. package/payload/server/public/assets/AdminLoginScreens-DSt9DYZZ.js +0 -1
  458. package/payload/server/public/assets/AdminLoginScreens-DSt9DYZZ.js.br +0 -0
  459. package/payload/server/public/assets/AdminLoginScreens-DSt9DYZZ.js.gz +0 -0
  460. package/payload/server/public/assets/AdminShell-MM3_yp3N.js +0 -2
  461. package/payload/server/public/assets/AdminShell-MM3_yp3N.js.br +0 -0
  462. package/payload/server/public/assets/AdminShell-MM3_yp3N.js.gz +0 -0
  463. package/payload/server/public/assets/activity-aVvbaVd4.js.br +0 -0
  464. package/payload/server/public/assets/activity-aVvbaVd4.js.gz +0 -0
  465. package/payload/server/public/assets/admin-B0lQnkH-.js +0 -1
  466. package/payload/server/public/assets/admin-B0lQnkH-.js.br +0 -0
  467. package/payload/server/public/assets/admin-B0lQnkH-.js.gz +0 -0
  468. package/payload/server/public/assets/agents-CrpVTPRG.js.br +0 -0
  469. package/payload/server/public/assets/agents-CrpVTPRG.js.gz +0 -0
  470. package/payload/server/public/assets/arc-DaudCnXg.js.br +0 -0
  471. package/payload/server/public/assets/arc-DaudCnXg.js.gz +0 -0
  472. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js +0 -1
  473. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js.br +0 -0
  474. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.br +0 -0
  475. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.gz +0 -0
  476. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.br +0 -0
  477. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.gz +0 -0
  478. package/payload/server/public/assets/browser-CYHUzTop.js +0 -1
  479. package/payload/server/public/assets/browser-CYHUzTop.js.br +0 -0
  480. package/payload/server/public/assets/browser-CYHUzTop.js.gz +0 -0
  481. package/payload/server/public/assets/c4Diagram-AHTNJAMY--h6oE2cv.js.br +0 -0
  482. package/payload/server/public/assets/c4Diagram-AHTNJAMY--h6oE2cv.js.gz +0 -0
  483. package/payload/server/public/assets/calendar-4IWQpwYv.js.br +0 -0
  484. package/payload/server/public/assets/calendar-4IWQpwYv.js.gz +0 -0
  485. package/payload/server/public/assets/channel-TwxCDSpK.js +0 -1
  486. package/payload/server/public/assets/channel-TwxCDSpK.js.br +0 -0
  487. package/payload/server/public/assets/chat-DmjZTqnV.js +0 -1
  488. package/payload/server/public/assets/chat-DmjZTqnV.js.br +0 -0
  489. package/payload/server/public/assets/chat-DmjZTqnV.js.gz +0 -0
  490. package/payload/server/public/assets/chevron-left-CIl-s3LZ.js +0 -1
  491. package/payload/server/public/assets/chevron-left-CIl-s3LZ.js.br +0 -0
  492. package/payload/server/public/assets/chevron-right-DpAi2BsF.js +0 -1
  493. package/payload/server/public/assets/chevron-right-DpAi2BsF.js.br +0 -0
  494. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.br +0 -0
  495. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.gz +0 -0
  496. package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.br +0 -0
  497. package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.gz +0 -0
  498. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js +0 -1
  499. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.br +0 -0
  500. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.gz +0 -0
  501. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.br +0 -0
  502. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.gz +0 -0
  503. package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.br +0 -0
  504. package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.gz +0 -0
  505. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.br +0 -0
  506. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.gz +0 -0
  507. package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.br +0 -0
  508. package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.gz +0 -0
  509. package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.br +0 -0
  510. package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.gz +0 -0
  511. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.br +0 -0
  512. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.gz +0 -0
  513. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.br +0 -0
  514. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.gz +0 -0
  515. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.br +0 -4
  516. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.gz +0 -0
  517. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.br +0 -0
  518. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.gz +0 -0
  519. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.br +0 -0
  520. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.gz +0 -0
  521. package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.br +0 -0
  522. package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.gz +0 -0
  523. package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.br +0 -0
  524. package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.gz +0 -0
  525. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.br +0 -0
  526. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.gz +0 -0
  527. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.br +0 -0
  528. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.gz +0 -0
  529. package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.br +0 -0
  530. package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.gz +0 -0
  531. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.br +0 -0
  532. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.gz +0 -0
  533. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.br +0 -3
  534. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.gz +0 -0
  535. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.br +0 -0
  536. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.gz +0 -0
  537. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.br +0 -0
  538. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.gz +0 -0
  539. package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.br +0 -0
  540. package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.gz +0 -0
  541. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js +0 -1
  542. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.br +0 -0
  543. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.gz +0 -0
  544. package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.br +0 -0
  545. package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.gz +0 -0
  546. package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.br +0 -0
  547. package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.gz +0 -0
  548. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.br +0 -0
  549. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.gz +0 -0
  550. package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.br +0 -0
  551. package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.gz +0 -0
  552. package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.br +0 -0
  553. package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.gz +0 -0
  554. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js +0 -1
  555. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.br +0 -0
  556. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.gz +0 -0
  557. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js +0 -1
  558. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.br +0 -0
  559. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.gz +0 -0
  560. package/payload/server/public/assets/clock-CGuM9VRx.js +0 -1
  561. package/payload/server/public/assets/clock-CGuM9VRx.js.br +0 -0
  562. package/payload/server/public/assets/clone-B3vq32j7.js +0 -1
  563. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.br +0 -0
  564. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.gz +0 -0
  565. package/payload/server/public/assets/dagre-D2wUw1zC.js.br +0 -0
  566. package/payload/server/public/assets/dagre-D2wUw1zC.js.gz +0 -0
  567. package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.br +0 -0
  568. package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.gz +0 -0
  569. package/payload/server/public/assets/data-BpdFiZKH.js +0 -1
  570. package/payload/server/public/assets/data-BpdFiZKH.js.br +0 -2
  571. package/payload/server/public/assets/data-BpdFiZKH.js.gz +0 -0
  572. package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.br +0 -0
  573. package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.gz +0 -0
  574. package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.br +0 -0
  575. package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.gz +0 -0
  576. package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.br +0 -0
  577. package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.gz +0 -0
  578. package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.br +0 -0
  579. package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.gz +0 -0
  580. package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.br +0 -0
  581. package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.gz +0 -0
  582. package/payload/server/public/assets/file-download-DayBHhKS.js.br +0 -0
  583. package/payload/server/public/assets/file-download-DayBHhKS.js.gz +0 -0
  584. package/payload/server/public/assets/file-text-BSyhVH0m.js.br +0 -0
  585. package/payload/server/public/assets/file-text-BSyhVH0m.js.gz +0 -0
  586. package/payload/server/public/assets/flatten-Bu-b1uTY.js.br +0 -0
  587. package/payload/server/public/assets/flatten-Bu-b1uTY.js.gz +0 -0
  588. package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.br +0 -0
  589. package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.gz +0 -0
  590. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.br +0 -0
  591. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.gz +0 -0
  592. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js +0 -1
  593. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js.br +0 -0
  594. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.br +0 -0
  595. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.gz +0 -0
  596. package/payload/server/public/assets/graph-Bjv3Tc3B.js.br +0 -0
  597. package/payload/server/public/assets/graph-Bjv3Tc3B.js.gz +0 -0
  598. package/payload/server/public/assets/graph-labels-DegLKGdx.js.br +0 -0
  599. package/payload/server/public/assets/graph-labels-DegLKGdx.js.gz +0 -0
  600. package/payload/server/public/assets/graphlib-CHEXylyU.js.br +0 -0
  601. package/payload/server/public/assets/graphlib-CHEXylyU.js.gz +0 -0
  602. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js +0 -1
  603. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js.br +0 -0
  604. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js +0 -2
  605. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.br +0 -0
  606. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.gz +0 -0
  607. package/payload/server/public/assets/isEmpty-CjH0UASp.js.br +0 -0
  608. package/payload/server/public/assets/isEmpty-CjH0UASp.js.gz +0 -0
  609. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.br +0 -0
  610. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.gz +0 -0
  611. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.br +0 -0
  612. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.gz +0 -0
  613. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.br +0 -0
  614. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.gz +0 -0
  615. package/payload/server/public/assets/line-Y4ns5Ghi.js.br +0 -0
  616. package/payload/server/public/assets/line-Y4ns5Ghi.js.gz +0 -0
  617. package/payload/server/public/assets/linear-l39GooQ5.js.br +0 -0
  618. package/payload/server/public/assets/linear-l39GooQ5.js.gz +0 -0
  619. package/payload/server/public/assets/maximize-2-DJFG2EXJ.js.br +0 -0
  620. package/payload/server/public/assets/maximize-2-DJFG2EXJ.js.gz +0 -0
  621. package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.br +0 -0
  622. package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.gz +0 -0
  623. package/payload/server/public/assets/mermaid.core-DBADY5VW.js.br +0 -0
  624. package/payload/server/public/assets/mermaid.core-DBADY5VW.js.gz +0 -0
  625. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.br +0 -0
  626. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.gz +0 -0
  627. package/payload/server/public/assets/operator-Du9Ve_PR.js +0 -1
  628. package/payload/server/public/assets/operator-Du9Ve_PR.js.br +0 -0
  629. package/payload/server/public/assets/operator-Du9Ve_PR.js.gz +0 -0
  630. package/payload/server/public/assets/ordinal-D6D6WcTC.js.br +0 -0
  631. package/payload/server/public/assets/ordinal-D6D6WcTC.js.gz +0 -0
  632. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js +0 -1
  633. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js.br +0 -0
  634. package/payload/server/public/assets/page-DgHYxG3M.js +0 -1
  635. package/payload/server/public/assets/page-DgHYxG3M.js.br +0 -0
  636. package/payload/server/public/assets/page-DgHYxG3M.js.gz +0 -0
  637. package/payload/server/public/assets/page-qV1ypb6i.js +0 -32
  638. package/payload/server/public/assets/page-qV1ypb6i.js.br +0 -0
  639. package/payload/server/public/assets/page-qV1ypb6i.js.gz +0 -0
  640. package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.br +0 -0
  641. package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.gz +0 -0
  642. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js +0 -1
  643. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js.br +0 -0
  644. package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.br +0 -0
  645. package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.gz +0 -0
  646. package/payload/server/public/assets/public-CNVEM-Bx.js.br +0 -0
  647. package/payload/server/public/assets/public-CNVEM-Bx.js.gz +0 -0
  648. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.br +0 -0
  649. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.gz +0 -0
  650. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js +0 -1
  651. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js.br +0 -0
  652. package/payload/server/public/assets/reduce-BtXXK8Ma.js.br +0 -0
  653. package/payload/server/public/assets/reduce-BtXXK8Ma.js.gz +0 -0
  654. package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.br +0 -0
  655. package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.gz +0 -0
  656. package/payload/server/public/assets/rotate-ccw-DQCaky8_.js.br +0 -0
  657. package/payload/server/public/assets/rotate-ccw-DQCaky8_.js.gz +0 -0
  658. package/payload/server/public/assets/routines-DwK5FeLm.js +0 -1
  659. package/payload/server/public/assets/routines-DwK5FeLm.js.br +0 -0
  660. package/payload/server/public/assets/routines-DwK5FeLm.js.gz +0 -0
  661. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.br +0 -0
  662. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.gz +0 -0
  663. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.br +0 -0
  664. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.gz +0 -0
  665. package/payload/server/public/assets/skills-CosN3uA4.js.br +0 -0
  666. package/payload/server/public/assets/skills-CosN3uA4.js.gz +0 -0
  667. package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.br +0 -0
  668. package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.gz +0 -0
  669. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js +0 -1
  670. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.br +0 -0
  671. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.gz +0 -0
  672. package/payload/server/public/assets/tasks-f0QikHmw.js.br +0 -0
  673. package/payload/server/public/assets/tasks-f0QikHmw.js.gz +0 -0
  674. package/payload/server/public/assets/time-entry-format-DLTdS35_.js.br +0 -0
  675. package/payload/server/public/assets/time-entry-format-DLTdS35_.js.gz +0 -0
  676. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.br +0 -0
  677. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.gz +0 -0
  678. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js +0 -1
  679. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js.br +0 -0
  680. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js +0 -1
  681. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js.br +0 -0
  682. package/payload/server/public/assets/triangle-alert-CpwrbdYq.js.br +0 -3
  683. package/payload/server/public/assets/triangle-alert-CpwrbdYq.js.gz +0 -0
  684. package/payload/server/public/assets/useCopyFeedback-D01gSp36.js.br +0 -0
  685. package/payload/server/public/assets/useCopyFeedback-D01gSp36.js.gz +0 -0
  686. package/payload/server/public/assets/useSubAccountSwitcher-BRHYXwGO.js +0 -14
  687. package/payload/server/public/assets/useSubAccountSwitcher-BRHYXwGO.js.br +0 -0
  688. package/payload/server/public/assets/useSubAccountSwitcher-BRHYXwGO.js.gz +0 -0
  689. package/payload/server/public/assets/useSubAccountSwitcher-CJzJ9xV3.css +0 -1
  690. package/payload/server/public/assets/useSubAccountSwitcher-CJzJ9xV3.css.br +0 -0
  691. package/payload/server/public/assets/useSubAccountSwitcher-CJzJ9xV3.css.gz +0 -0
  692. package/payload/server/public/assets/useVoiceRecorder-DiPgyDUy.js.br +0 -0
  693. package/payload/server/public/assets/useVoiceRecorder-DiPgyDUy.js.gz +0 -0
  694. package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.br +0 -0
  695. package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.gz +0 -0
  696. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js +0 -1
  697. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js.br +0 -0
  698. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.br +0 -0
  699. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.gz +0 -0
  700. package/payload/server/public/assets/wrench-C5SJreEu.js.br +0 -1
  701. package/payload/server/public/assets/wrench-C5SJreEu.js.gz +0 -0
  702. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.br +0 -0
  703. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.gz +0 -0
  704. /package/payload/server/public/assets/{_baseFor-B12He5Rp.js → _baseFor-BApe6Tla.js} +0 -0
  705. /package/payload/server/public/assets/{_baseFor-B12He5Rp.js.br → _baseFor-BApe6Tla.js.br} +0 -0
  706. /package/payload/server/public/assets/{_baseFor-B12He5Rp.js.gz → _baseFor-BApe6Tla.js.gz} +0 -0
  707. /package/payload/server/public/assets/{array-DO1uCttT.js → array-eiH4WfvY.js} +0 -0
  708. /package/payload/server/public/assets/{array-DO1uCttT.js.br → array-eiH4WfvY.js.br} +0 -0
  709. /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js → cytoscape.esm-BZ6NYo0w.js} +0 -0
  710. /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js.br → cytoscape.esm-BZ6NYo0w.js.br} +0 -0
  711. /package/payload/server/public/assets/{cytoscape.esm-DFn2foqy.js.gz → cytoscape.esm-BZ6NYo0w.js.gz} +0 -0
  712. /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js → defaultLocale-DWHqsa6O.js} +0 -0
  713. /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js.br → defaultLocale-DWHqsa6O.js.br} +0 -0
  714. /package/payload/server/public/assets/{defaultLocale-ieI3yFoA.js.gz → defaultLocale-DWHqsa6O.js.gz} +0 -0
  715. /package/payload/server/public/assets/{dist-DlU7AEeD.js → dist-IoQuidkp.js} +0 -0
  716. /package/payload/server/public/assets/{dist-DlU7AEeD.js.br → dist-IoQuidkp.js.br} +0 -0
  717. /package/payload/server/public/assets/{dist-DlU7AEeD.js.gz → dist-IoQuidkp.js.gz} +0 -0
  718. /package/payload/server/public/assets/{init-BCRlEgNP.js → init-BdkYWjJJ.js} +0 -0
  719. /package/payload/server/public/assets/{init-BCRlEgNP.js.br → init-BdkYWjJJ.js.br} +0 -0
  720. /package/payload/server/public/assets/{init-BCRlEgNP.js.gz → init-BdkYWjJJ.js.gz} +0 -0
  721. /package/payload/server/public/assets/{katex-gkTaZgi6.js → katex-BCzoGtFh.js} +0 -0
  722. /package/payload/server/public/assets/{katex-gkTaZgi6.js.br → katex-BCzoGtFh.js.br} +0 -0
  723. /package/payload/server/public/assets/{katex-gkTaZgi6.js.gz → katex-BCzoGtFh.js.gz} +0 -0
  724. /package/payload/server/public/assets/{path-DTmzQFjQ.js → path-DY2qBuPM.js} +0 -0
  725. /package/payload/server/public/assets/{path-DTmzQFjQ.js.br → path-DY2qBuPM.js.br} +0 -0
  726. /package/payload/server/public/assets/{path-DTmzQFjQ.js.gz → path-DY2qBuPM.js.gz} +0 -0
  727. /package/payload/server/public/assets/{preload-helper-eAV8hweq.js → preload-helper-3YNEDsJZ.js} +0 -0
  728. /package/payload/server/public/assets/{preload-helper-eAV8hweq.js.br → preload-helper-3YNEDsJZ.js.br} +0 -0
  729. /package/payload/server/public/assets/{preload-helper-eAV8hweq.js.gz → preload-helper-3YNEDsJZ.js.gz} +0 -0
  730. /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js → rough.esm-ec8xsRC7.js} +0 -0
  731. /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js.br → rough.esm-ec8xsRC7.js.br} +0 -0
  732. /package/payload/server/public/assets/{rough.esm-BFJ-MgcB.js.gz → rough.esm-ec8xsRC7.js.gz} +0 -0
  733. /package/payload/server/public/assets/{src-9CNk4JU0.js → src-C-STKunZ.js} +0 -0
  734. /package/payload/server/public/assets/{src-9CNk4JU0.js.br → src-C-STKunZ.js.br} +0 -0
  735. /package/payload/server/public/assets/{src-9CNk4JU0.js.gz → src-C-STKunZ.js.gz} +0 -0
@@ -59,7 +59,7 @@ import {
59
59
  verifyRemotePassword,
60
60
  vncLog,
61
61
  walkPremiumBundles
62
- } from "./chunk-KY3BBT67.js";
62
+ } from "./chunk-DLG7XSLA.js";
63
63
  import {
64
64
  DATA_ROOT,
65
65
  EXTRACTED_TEXT_SUFFIX,
@@ -183,13 +183,12 @@ import {
183
183
  waitForConnection,
184
184
  warnNonUuidAccount,
185
185
  writeChatMetadataMerged
186
- } from "./chunk-7MGR5M6G.js";
186
+ } from "./chunk-UTIHI6KV.js";
187
187
  import {
188
188
  ACCOUNTS_DIR,
189
189
  BIN_DIR,
190
190
  BRAND_NAME,
191
191
  CDP_PORT,
192
- CHROMIUM_PROFILE_DIR,
193
192
  CLAUDE_CREDENTIALS_FILE,
194
193
  COMMERCIAL_MODE,
195
194
  GREETING_DIRECTIVE,
@@ -245,7 +244,7 @@ import {
245
244
  verifyAndGetConversationUpdatedAt,
246
245
  verifyConversationOwnership,
247
246
  writeAdminUserAndPerson
248
- } from "./chunk-XCR5D2G3.js";
247
+ } from "./chunk-BP7LH7MC.js";
249
248
  import {
250
249
  D1_MAX_SQL_STATEMENT_BYTES,
251
250
  D1_QUERY_MAX_BODY_BYTES,
@@ -1801,10 +1800,10 @@ var require_dist5 = __commonJS({
1801
1800
  });
1802
1801
 
1803
1802
  // server/index.ts
1804
- import { readFileSync as readFileSync45, existsSync as existsSync48, watchFile, readdirSync as readdirSync28, statSync as statSync25 } from "fs";
1803
+ import { readFileSync as readFileSync46, existsSync as existsSync49, watchFile, readdirSync as readdirSync29, statSync as statSync25 } from "fs";
1805
1804
  import { spawn as spawn3 } from "child_process";
1806
1805
  import { createHash as createHash7 } from "crypto";
1807
- import { resolve as resolve43, join as join52, basename as basename16 } from "path";
1806
+ import { resolve as resolve45, join as join52, basename as basename16 } from "path";
1808
1807
  import { homedir as homedir4 } from "os";
1809
1808
 
1810
1809
  // server/lib/route-cache-watchers.ts
@@ -3008,7 +3007,7 @@ function getLanIp() {
3008
3007
  // app/lib/vnc.ts
3009
3008
  import { spawnSync, execFileSync } from "child_process";
3010
3009
  import { createConnection } from "net";
3011
- import { mkdirSync, readFileSync as readFileSync3, writeFileSync as writeFileSync2 } from "fs";
3010
+ import { mkdirSync, readFileSync as readFileSync3, rmSync, writeFileSync as writeFileSync2 } from "fs";
3012
3011
  import { resolve as resolve3 } from "path";
3013
3012
  var PLATFORM_ROOT2 = process.env.MAXY_PLATFORM_ROOT ?? resolve3(process.cwd(), "..");
3014
3013
  var VNC_SCRIPT = resolve3(PLATFORM_ROOT2, "scripts/vnc.sh");
@@ -3209,71 +3208,60 @@ async function ensureCdp(transport = "vnc") {
3209
3208
  function killChromium() {
3210
3209
  spawnSync("pkill", ["-f", "chromium"], { stdio: "pipe" });
3211
3210
  }
3211
+ var AUTH_TARGET_ID_FILE = resolve3(LOG_DIR, "claude-auth-target.id");
3212
+ function readAuthTargetId() {
3213
+ try {
3214
+ const id = readFileSync3(AUTH_TARGET_ID_FILE, "utf8").trim();
3215
+ return id.length > 0 ? id : null;
3216
+ } catch {
3217
+ return null;
3218
+ }
3219
+ }
3212
3220
  function writeChromiumWrapper() {
3213
3221
  mkdirSync(BIN_DIR, { recursive: true });
3222
+ rmSync(AUTH_TARGET_ID_FILE, { force: true });
3214
3223
  const wrapperPath = resolve3(BIN_DIR, "chromium");
3215
3224
  writeFileSync2(wrapperPath, `#!/bin/bash
3216
- LOG="${LOG_DIR}/chromium.log"
3217
- echo "==== [$(date)] chromium wrapper ====" >> "$LOG"
3218
- echo " DISPLAY=$DISPLAY WAYLAND=$WAYLAND_DISPLAY XDG_SESSION_TYPE=$XDG_SESSION_TYPE" >> "$LOG"
3225
+ # Generated by writeChromiumWrapper (app/lib/vnc.ts) \u2014 Task 1562.
3226
+ # Hands its URL argument to the brand's running Chromium over CDP.
3227
+ LOG_DIR="${LOG_DIR}"
3228
+ LOG="$LOG_DIR/chromium.log"
3229
+ TARGET_ID_FILE="$LOG_DIR/claude-auth-target.id"
3230
+ CDP="http://127.0.0.1:${CDP_PORT}/json/new"
3231
+
3232
+ mkdir -p "$LOG_DIR"
3233
+ echo "==== [$(date)] chromium wrapper (cdp-handover) ====" >> "$LOG"
3219
3234
  echo " args: $*" >> "$LOG"
3220
3235
 
3221
- # Check the brand's virtual display is up (Tasks 553 + 924 \u2014 per-brand
3222
- # display + per-brand CDP port).
3223
- if DISPLAY=${VNC_DISPLAY} xdpyinfo >/dev/null 2>&1; then
3224
- echo " xdpyinfo ${VNC_DISPLAY} OK" >> "$LOG"
3225
- else
3226
- echo " xdpyinfo ${VNC_DISPLAY} FAILED \u2014 display not ready" >> "$LOG"
3236
+ URL="$1"
3237
+ if [ -z "$URL" ]; then
3238
+ echo " ERROR: no URL argument" >> "$LOG"
3239
+ echo "[chromium-wrapper] op=cdp-handover outcome=failed reason=no-url" >> "$LOG"
3240
+ exit 64
3227
3241
  fi
3228
3242
 
3229
- # read the install-time-resolved non-snap Chromium binary path.
3230
- # The installer (ensureNonSnapChromium + writeChromiumBinaryPathFile) writes
3231
- # this file with the absolute path to either /usr/bin/chromium (Pi Bookworm:
3232
- # real .deb) or /usr/bin/google-chrome-stable (Ubuntu Noble laptop: snap
3233
- # replaced). Refusing the legacy probe loop closes the silent-fallback path
3234
- # where /snap/bin/chromium would re-introduce the AppArmor SingletonLock
3235
- # denial that triggered.
3236
- PATH_FILE="${PLATFORM_ROOT2}/config/chromium-binary.path"
3237
- if [ ! -r "$PATH_FILE" ]; then
3238
- echo " ERROR: $PATH_FILE missing \u2014 re-run installer" >> "$LOG"
3239
- exit 1
3243
+ # -f so an HTTP error status is a non-zero exit rather than an error body
3244
+ # written to the id file; -G moves the urlencoded data into the query string.
3245
+ RESPONSE="$(curl -sf --max-time 10 -X PUT -G --data-urlencode "=$URL" "$CDP" 2>>"$LOG")"
3246
+ CURL_STATUS=$?
3247
+ if [ "$CURL_STATUS" -ne 0 ]; then
3248
+ echo " ERROR: CDP handover failed (curl exit $CURL_STATUS) \u2014 is Chromium running on ${CDP_PORT}?" >> "$LOG"
3249
+ echo "[chromium-wrapper] op=cdp-handover outcome=failed reason=cdp-unreachable curlExit=$CURL_STATUS" >> "$LOG"
3250
+ exit "$CURL_STATUS"
3240
3251
  fi
3241
- BIN="$(head -n1 "$PATH_FILE" | tr -d '[:space:]')"
3242
- if [ -z "$BIN" ] || [ ! -x "$BIN" ]; then
3243
- echo " ERROR: $PATH_FILE empty or non-executable: $BIN" >> "$LOG"
3244
- exit 1
3252
+
3253
+ # Chromium answers with the created target; pretty-printed on the real endpoint
3254
+ # and compact from some clients, so match the key rather than a line shape.
3255
+ TARGET_ID="$(printf '%s' "$RESPONSE" | grep -o '"id"[[:space:]]*:[[:space:]]*"[^"]*"' | head -n1 | sed 's/.*"\\([^"]*\\)"$/\\1/')"
3256
+ if [ -z "$TARGET_ID" ]; then
3257
+ echo " ERROR: CDP accepted the URL but named no target id" >> "$LOG"
3258
+ echo "[chromium-wrapper] op=cdp-handover outcome=failed reason=no-target-id" >> "$LOG"
3259
+ exit 65
3245
3260
  fi
3246
- RESOLVED="$(readlink -f "$BIN" 2>/dev/null || echo "$BIN")"
3247
- case ":$(echo "$RESOLVED" | tr '/' ':'):" in
3248
- *:snap:*)
3249
- echo " ERROR: $BIN resolves to snap-confined $RESOLVED \u2014 re-run installer" >> "$LOG"
3250
- exit 1
3251
- ;;
3252
- esac
3253
- echo " launching $BIN (realpath=$RESOLVED)" >> "$LOG"
3254
-
3255
- # nohup detaches chromium from this wrapper's process group so it outlives
3256
- # claude auth login exiting (e.g. on timeout). --user-data-dir is brand-scoped
3257
- # so a wrapper-spawned chromium attaches to the same per-brand
3258
- # profile that vnc.sh's start_chrome targets \u2014 no shared cookies across brands.
3259
- nohup "$BIN" \\
3260
- --user-data-dir=${CHROMIUM_PROFILE_DIR} \\
3261
- --no-sandbox \\
3262
- --test-type \\
3263
- --disable-dev-shm-usage \\
3264
- --disable-gpu \\
3265
- --password-store=basic \\
3266
- --use-mock-keychain \\
3267
- --ozone-platform=x11 \\
3268
- --no-first-run \\
3269
- --no-default-browser-check \\
3270
- --disable-session-crashed-bubble \\
3271
- --hide-crash-restore-bubble \\
3272
- --noerrdialogs \\
3273
- --window-size=1280,800 \\
3274
- --window-position=0,0 \\
3275
- "$@" >> "$LOG" 2>&1 &
3276
- echo " chromium PID: $!" >> "$LOG"
3261
+
3262
+ printf '%s' "$TARGET_ID" > "$TARGET_ID_FILE"
3263
+ echo " opened target $TARGET_ID" >> "$LOG"
3264
+ echo "[chromium-wrapper] op=cdp-handover outcome=ready targetId=$TARGET_ID" >> "$LOG"
3277
3265
  `, { mode: 493 });
3278
3266
  return wrapperPath;
3279
3267
  }
@@ -3311,20 +3299,20 @@ function buildX11Env(chromiumWrapperPath, transport = "vnc") {
3311
3299
 
3312
3300
  // server/routes/health.ts
3313
3301
  function checkPort(port2, timeoutMs = 500) {
3314
- return new Promise((resolve44) => {
3302
+ return new Promise((resolve46) => {
3315
3303
  const socket = createConnection2(port2, "127.0.0.1");
3316
3304
  socket.setTimeout(timeoutMs);
3317
3305
  socket.once("connect", () => {
3318
3306
  socket.destroy();
3319
- resolve44(true);
3307
+ resolve46(true);
3320
3308
  });
3321
3309
  socket.once("error", () => {
3322
3310
  socket.destroy();
3323
- resolve44(false);
3311
+ resolve46(false);
3324
3312
  });
3325
3313
  socket.once("timeout", () => {
3326
3314
  socket.destroy();
3327
- resolve44(false);
3315
+ resolve46(false);
3328
3316
  });
3329
3317
  });
3330
3318
  }
@@ -4912,7 +4900,7 @@ function createScheduleInjectRoutes(deps) {
4912
4900
  var import_dist9 = __toESM(require_dist(), 1);
4913
4901
 
4914
4902
  // app/lib/whatsapp/avatar-store.ts
4915
- import { existsSync as existsSync5, mkdirSync as mkdirSync2, readFileSync as readFileSync7, writeFileSync as writeFileSync3, readdirSync as readdirSync5, statSync as statSync6, rmSync } from "fs";
4903
+ import { existsSync as existsSync5, mkdirSync as mkdirSync2, readFileSync as readFileSync7, writeFileSync as writeFileSync3, readdirSync as readdirSync5, statSync as statSync6, rmSync as rmSync2 } from "fs";
4916
4904
  import { join as join11 } from "path";
4917
4905
  function safeName(jid) {
4918
4906
  if (jid.length === 0 || jid.includes("/") || jid.includes("\\") || jid.includes("..")) {
@@ -4957,14 +4945,14 @@ function writeAvatarAbsent(accountId, jid) {
4957
4945
  const dir = dirFor(accountId);
4958
4946
  const base = join11(dir, safeName(jid));
4959
4947
  mkdirSync2(dir, { recursive: true });
4960
- rmSync(`${base}.bin`, { force: true });
4948
+ rmSync2(`${base}.bin`, { force: true });
4961
4949
  const meta = { jid, state: "absent", fetchedAt: (/* @__PURE__ */ new Date()).toISOString() };
4962
4950
  writeFileSync3(`${base}.json`, JSON.stringify(meta));
4963
4951
  }
4964
4952
  function removeAvatar(accountId, jid) {
4965
4953
  const base = join11(dirFor(accountId), safeName(jid));
4966
- rmSync(`${base}.bin`, { force: true });
4967
- rmSync(`${base}.json`, { force: true });
4954
+ rmSync2(`${base}.bin`, { force: true });
4955
+ rmSync2(`${base}.json`, { force: true });
4968
4956
  }
4969
4957
  function listAvatarEntries(accountId) {
4970
4958
  const dir = dirFor(accountId);
@@ -5011,11 +4999,11 @@ async function defaultHttpGet(url) {
5011
4999
  }
5012
5000
  }
5013
5001
  async function defaultResolve(accountId) {
5014
- const { resolveSocket: resolveSocket2 } = await import("./manager-6XOWHREK.js");
5002
+ const { resolveSocket: resolveSocket2 } = await import("./manager-B4LRDZKC.js");
5015
5003
  return resolveSocket2(accountId);
5016
5004
  }
5017
5005
  async function fetchAvatar(accountId, jid, deps = {}) {
5018
- const resolve44 = deps.resolve;
5006
+ const resolve46 = deps.resolve;
5019
5007
  const httpGet = deps.httpGet ?? defaultHttpGet;
5020
5008
  const maxAgeMs = deps.maxAgeMs ?? DEFAULT_MAX_AGE_MS;
5021
5009
  const cached3 = readAvatar(accountId, jid);
@@ -5025,7 +5013,7 @@ async function fetchAvatar(accountId, jid, deps = {}) {
5025
5013
  return "fresh";
5026
5014
  }
5027
5015
  console.log(`${TAG6} op=cache jid=${jid} hit=false ageMs=${ageMs2}`);
5028
- const res = resolve44 ? resolve44(accountId) : await defaultResolve(accountId);
5016
+ const res = resolve46 ? resolve46(accountId) : await defaultResolve(accountId);
5029
5017
  if (!res.ok) {
5030
5018
  console.log(`${TAG6} op=no-socket jid=${jid} account=${accountId.slice(0, 8)} reason=${res.reason}`);
5031
5019
  return "no-socket";
@@ -5994,8 +5982,8 @@ async function startLogin(opts) {
5994
5982
  await clearAuth(authDir);
5995
5983
  let resolveCode = null;
5996
5984
  let rejectCode = null;
5997
- const codePromise = new Promise((resolve44, reject) => {
5998
- resolveCode = resolve44;
5985
+ const codePromise = new Promise((resolve46, reject) => {
5986
+ resolveCode = resolve46;
5999
5987
  rejectCode = reject;
6000
5988
  });
6001
5989
  const codeTimer = setTimeout(
@@ -6741,10 +6729,10 @@ app3.post("/config", async (c) => {
6741
6729
  const entries2 = readdirSync7(agentsDir, { withFileTypes: true });
6742
6730
  for (const entry of entries2.sort((a, b) => a.name.localeCompare(b.name))) {
6743
6731
  if (!entry.isDirectory() || entry.name === "admin") continue;
6744
- const configPath2 = resolve7(agentsDir, entry.name, "config.json");
6745
- if (!existsSync7(configPath2)) continue;
6732
+ const configPath3 = resolve7(agentsDir, entry.name, "config.json");
6733
+ if (!existsSync7(configPath3)) continue;
6746
6734
  try {
6747
- const config = JSON.parse(readFileSync9(configPath2, "utf-8"));
6735
+ const config = JSON.parse(readFileSync9(configPath3, "utf-8"));
6748
6736
  agents.push({ slug: entry.name, displayName: config.displayName ?? entry.name });
6749
6737
  } catch {
6750
6738
  console.error(`${TAG14} config action=list-public-agents error="failed to parse config.json for agent ${entry.name}" \u2014 skipping`);
@@ -7917,10 +7905,10 @@ function discoverPortalAccounts(accountsDir, shared = null) {
7917
7905
  if (!existsSync8(accountsDir)) return [];
7918
7906
  const found = [];
7919
7907
  for (const accountId of readdirSync8(accountsDir)) {
7920
- const configPath2 = join15(accountsDir, accountId, "data-portal.json");
7921
- if (!existsSync8(configPath2)) continue;
7908
+ const configPath3 = join15(accountsDir, accountId, "data-portal.json");
7909
+ if (!existsSync8(configPath3)) continue;
7922
7910
  try {
7923
- const cfg = JSON.parse(readFileSync10(configPath2, "utf-8"));
7911
+ const cfg = JSON.parse(readFileSync10(configPath3, "utf-8"));
7924
7912
  if (typeof cfg.portalDbName === "string" && cfg.portalDbName.length > 0 && typeof cfg.bucketName === "string" && cfg.bucketName.length > 0) {
7925
7913
  found.push({
7926
7914
  accountId,
@@ -12086,7 +12074,7 @@ var telegram_default = app10;
12086
12074
 
12087
12075
  // server/routes/quickbooks.ts
12088
12076
  import { join as join29 } from "path";
12089
- import { existsSync as existsSync21, readFileSync as readFileSync23, writeFileSync as writeFileSync9, mkdirSync as mkdirSync4, rmSync as rmSync2, renameSync as renameSync5 } from "fs";
12077
+ import { existsSync as existsSync21, readFileSync as readFileSync23, writeFileSync as writeFileSync9, mkdirSync as mkdirSync4, rmSync as rmSync3, renameSync as renameSync5 } from "fs";
12090
12078
  var TAG19 = "[quickbooks]";
12091
12079
  var INTUIT_TOKEN_URL = "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer";
12092
12080
  var STATE_RE = /^[A-Za-z0-9_-]+$/;
@@ -12167,7 +12155,7 @@ async function completeConsent(args) {
12167
12155
  console.error(`${TAG19} op=token-exchange realmId=${realmId} persisted=${persisted}`);
12168
12156
  return { ok: persisted, status: persisted ? 200 : 500, message: persisted ? `Connected company ${realmId}.` : "Failed to persist the connection.", stateValid: true };
12169
12157
  } finally {
12170
- rmSync2(claimFile, { force: true });
12158
+ rmSync3(claimFile, { force: true });
12171
12159
  }
12172
12160
  }
12173
12161
  function page(title, detail) {
@@ -12579,7 +12567,7 @@ app12.post("/claude-auth", async (c) => {
12579
12567
  }
12580
12568
  if (body.action === "wait") {
12581
12569
  const authenticated = await checkAuthStatus();
12582
- return c.json({ completed: authenticated, authenticated });
12570
+ return c.json({ completed: authenticated, authenticated, authTargetId: readAuthTargetId() });
12583
12571
  }
12584
12572
  if (body.action === "paste-code") {
12585
12573
  const code = typeof body.code === "string" ? body.code : "";
@@ -13049,7 +13037,7 @@ app13.post("/", async (c) => {
13049
13037
  const safe = typeof v === "string" ? truncate(v, 200) : typeof v === "number" || typeof v === "boolean" ? String(v) : JSON.stringify(v).slice(0, 200);
13050
13038
  return `${k}=${safe}`;
13051
13039
  }).join(" ");
13052
- const TAGGED_PREFIX_SOURCES = /* @__PURE__ */ new Set(["stream-log-click", "pwa", "graph-settle", "dashboard-load"]);
13040
+ const TAGGED_PREFIX_SOURCES = /* @__PURE__ */ new Set(["stream-log-click", "pwa", "graph-settle", "dashboard-load", "routines"]);
13053
13041
  if (TAGGED_PREFIX_SOURCES.has(source)) {
13054
13042
  console.log(
13055
13043
  `[${source}] ts=${ts} ip=${ip} version=${version || "unknown"}${extra ? " " + extra : ""}`
@@ -13148,15 +13136,15 @@ function operatorRoleFor(config, userId) {
13148
13136
  async function buildAccountOptionList(accounts, userId) {
13149
13137
  const houseAccount = accounts.find((a) => a.config.role === "house");
13150
13138
  console.log(`[admin-accounts] op=list count=${accounts.length} house=${houseAccount?.accountId ?? "none"}`);
13151
- const resolve44 = async (a) => {
13139
+ const resolve46 = async (a) => {
13152
13140
  const businessName = await fetchAccountName(a.accountId) || void 0;
13153
13141
  return { accountId: a.accountId, businessName, role: operatorRoleFor(a.config, userId), isHouse: a.config.role === "house" };
13154
13142
  };
13155
13143
  const houseOptions = await Promise.all(
13156
- accounts.filter((a) => a.config.role === "house").map(resolve44)
13144
+ accounts.filter((a) => a.config.role === "house").map(resolve46)
13157
13145
  );
13158
13146
  const nonHouseOptions = await Promise.all(
13159
- accounts.filter((a) => a.config.role !== "house").map(resolve44)
13147
+ accounts.filter((a) => a.config.role !== "house").map(resolve46)
13160
13148
  );
13161
13149
  const sortKey = (o) => (o.businessName || o.accountId).toLowerCase();
13162
13150
  nonHouseOptions.sort((x, y) => {
@@ -13602,7 +13590,7 @@ var session_upload_default = app19;
13602
13590
 
13603
13591
  // server/routes/admin/agents.ts
13604
13592
  import { resolve as resolve20 } from "path";
13605
- import { readdirSync as readdirSync21, readFileSync as readFileSync28, existsSync as existsSync30, rmSync as rmSync3, renameSync as renameSync9, mkdirSync as mkdirSync6, writeFileSync as writeFileSync12, chmodSync } from "fs";
13593
+ import { readdirSync as readdirSync21, readFileSync as readFileSync28, existsSync as existsSync30, rmSync as rmSync4, renameSync as renameSync9, mkdirSync as mkdirSync6, writeFileSync as writeFileSync12, chmodSync } from "fs";
13606
13594
  import { execFileSync as execFileSync6 } from "child_process";
13607
13595
 
13608
13596
  // ../services/claude-session-manager/src/tool-surface.ts
@@ -14281,10 +14269,10 @@ app20.get("/", requireAdminSession, (c) => {
14281
14269
  for (const entry of entries2.sort((a, b) => a.name.localeCompare(b.name))) {
14282
14270
  if (!entry.isDirectory()) continue;
14283
14271
  if (entry.name === "admin") continue;
14284
- const configPath2 = resolve20(agentsDir, entry.name, "config.json");
14285
- if (!existsSync30(configPath2)) continue;
14272
+ const configPath3 = resolve20(agentsDir, entry.name, "config.json");
14273
+ if (!existsSync30(configPath3)) continue;
14286
14274
  try {
14287
- const config = JSON.parse(readFileSync28(configPath2, "utf-8"));
14275
+ const config = JSON.parse(readFileSync28(configPath3, "utf-8"));
14288
14276
  agents.push({
14289
14277
  slug: entry.name,
14290
14278
  displayName: config.displayName ?? entry.name,
@@ -14418,11 +14406,11 @@ app20.get("/:slug", requireAdminSession, (c) => {
14418
14406
  });
14419
14407
  }
14420
14408
  const agentDir = resolve20(account.accountDir, "agents", slug);
14421
- const configPath2 = resolve20(agentDir, "config.json");
14422
- if (!existsSync30(configPath2)) return c.json({ error: "Agent not found" }, 404);
14409
+ const configPath3 = resolve20(agentDir, "config.json");
14410
+ if (!existsSync30(configPath3)) return c.json({ error: "Agent not found" }, 404);
14423
14411
  let config;
14424
14412
  try {
14425
- config = JSON.parse(readFileSync28(configPath2, "utf-8"));
14413
+ config = JSON.parse(readFileSync28(configPath3, "utf-8"));
14426
14414
  } catch {
14427
14415
  console.error(`[admin/agents] op=detail slug=${slug} error="config.json parse failed"`);
14428
14416
  return c.json({ error: "Agent config unreadable" }, 500);
@@ -14618,7 +14606,7 @@ app20.delete("/:slug", async (c) => {
14618
14606
  return c.json({ error: `Graph cleanup failed: ${msg}` }, 500);
14619
14607
  }
14620
14608
  try {
14621
- rmSync3(agentDir, { recursive: true, force: true });
14609
+ rmSync4(agentDir, { recursive: true, force: true });
14622
14610
  console.log(`[admin/agents] op=delete accountId=${account.accountId.slice(0, 8)} slug=${slug} outcome=ok`);
14623
14611
  return c.json({ ok: true });
14624
14612
  } catch (err) {
@@ -16919,9 +16907,9 @@ async function readAccountNames() {
16919
16907
  }
16920
16908
  for (const name of names) {
16921
16909
  if (!UUID_RE3.test(name)) continue;
16922
- const configPath2 = resolve24(accountsDir, name, "account.json");
16910
+ const configPath3 = resolve24(accountsDir, name, "account.json");
16923
16911
  try {
16924
- const raw = await readFile9(configPath2, "utf8");
16912
+ const raw = await readFile9(configPath3, "utf8");
16925
16913
  const parsed = JSON.parse(raw);
16926
16914
  if (typeof parsed?.name === "string" && parsed.name.length > 0) {
16927
16915
  map.set(name, parsed.name);
@@ -21271,6 +21259,56 @@ var health_default2 = app41;
21271
21259
  // server/routes/admin/linkedin-ingest.ts
21272
21260
  import { randomUUID as randomUUID9 } from "crypto";
21273
21261
 
21262
+ // ../lib/account-ingest-token/src/index.ts
21263
+ import { randomBytes, timingSafeEqual } from "crypto";
21264
+ import { existsSync as existsSync37, readdirSync as readdirSync24, readFileSync as readFileSync34, writeFileSync as writeFileSync14 } from "fs";
21265
+ import { resolve as resolve30 } from "path";
21266
+ var UUID_RE4 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
21267
+ var INGEST_TOKEN_FIELD = "ingestToken";
21268
+ var TOKEN_RE = /^[0-9a-f]{64}$/;
21269
+ function configPath2(accountsDir, accountId) {
21270
+ return resolve30(accountsDir, accountId, "account.json");
21271
+ }
21272
+ function readConfig2(accountsDir, accountId) {
21273
+ const path = configPath2(accountsDir, accountId);
21274
+ if (!existsSync37(path)) return null;
21275
+ try {
21276
+ const parsed = JSON.parse(readFileSync34(path, "utf-8"));
21277
+ return parsed !== null && typeof parsed === "object" ? parsed : null;
21278
+ } catch {
21279
+ return null;
21280
+ }
21281
+ }
21282
+ function readIngestToken(accountsDir, accountId) {
21283
+ const value = readConfig2(accountsDir, accountId)?.[INGEST_TOKEN_FIELD];
21284
+ return typeof value === "string" && TOKEN_RE.test(value) ? value : null;
21285
+ }
21286
+ function listAccountIdsOnDisk(accountsDir) {
21287
+ if (!existsSync37(accountsDir)) return [];
21288
+ let entries2;
21289
+ try {
21290
+ entries2 = readdirSync24(accountsDir);
21291
+ } catch {
21292
+ return [];
21293
+ }
21294
+ return entries2.filter(
21295
+ (name) => UUID_RE4.test(name) && existsSync37(resolve30(accountsDir, name, "account.json"))
21296
+ );
21297
+ }
21298
+ function resolveAccountIdByIngestToken(accountsDir, token) {
21299
+ if (typeof token !== "string" || !TOKEN_RE.test(token)) return null;
21300
+ const probe = Buffer.from(token, "utf-8");
21301
+ for (const accountId of listAccountIdsOnDisk(accountsDir)) {
21302
+ const stored = readIngestToken(accountsDir, accountId);
21303
+ if (!stored) continue;
21304
+ const candidate = Buffer.from(stored, "utf-8");
21305
+ if (candidate.length === probe.length && timingSafeEqual(candidate, probe)) {
21306
+ return accountId;
21307
+ }
21308
+ }
21309
+ return null;
21310
+ }
21311
+
21274
21312
  // app/lib/channel-pty-bridge/manager-client.ts
21275
21313
  function managerBase2() {
21276
21314
  const port2 = requirePortEnv("CLAUDE_SESSION_MANAGER_PORT", { tag: "channel-pty-bridge:manager-client" });
@@ -21495,8 +21533,29 @@ function buildInitialMessage(env) {
21495
21533
  }
21496
21534
  return header;
21497
21535
  }
21536
+ var AUTH_TAG = "[linkedin-ingest-auth]";
21537
+ var requireIngestToken = async (c, next) => {
21538
+ let token = "";
21539
+ try {
21540
+ const body = await c.req.json();
21541
+ if (body && typeof body.ingest_token === "string") token = body.ingest_token;
21542
+ } catch {
21543
+ }
21544
+ if (!token) {
21545
+ console.error(`${AUTH_TAG} outcome=reject status=400 code=token-missing path=${c.req.path}`);
21546
+ return c.json({ ok: false, error: "auth", code: "token-missing" }, 400);
21547
+ }
21548
+ const accountId = resolveAccountIdByIngestToken(ACCOUNTS_DIR, token);
21549
+ if (!accountId) {
21550
+ console.error(`${AUTH_TAG} outcome=reject status=401 code=token-unknown path=${c.req.path}`);
21551
+ return c.json({ ok: false, error: "auth", code: "token-unknown" }, 401);
21552
+ }
21553
+ c.set("ingestAccountId", accountId);
21554
+ console.log(`${AUTH_TAG} outcome=accept accountId=${accountId.slice(0, 8)} path=${c.req.path}`);
21555
+ await next();
21556
+ };
21498
21557
  var app42 = new Hono();
21499
- app42.post("/", requireAdminSession, async (c) => {
21558
+ app42.post("/", requireIngestToken, async (c) => {
21500
21559
  let body;
21501
21560
  try {
21502
21561
  body = await c.req.json();
@@ -21510,8 +21569,7 @@ app42.post("/", requireAdminSession, async (c) => {
21510
21569
  return c.json({ ok: false, error: v.error, reason: v.reason, missing: v.missing }, v.status);
21511
21570
  }
21512
21571
  const envelope = v.envelope;
21513
- const cacheKey = c.var.cacheKey ?? "";
21514
- const senderId = getAccountIdForSession(cacheKey) ?? "";
21572
+ const senderId = c.var.ingestAccountId ?? "";
21515
21573
  if (!senderId) {
21516
21574
  console.error(TAG22 + " rejected status=500 reason=admin-account-not-resolved");
21517
21575
  return c.json({ ok: false, error: "admin-account-not-resolved" }, 500);
@@ -22021,7 +22079,7 @@ app48.post("/screencast-event", requireAdminSession, async (c) => {
22021
22079
  var browser_default = app48;
22022
22080
 
22023
22081
  // server/routes/admin/calendar.ts
22024
- import { existsSync as existsSync37 } from "fs";
22082
+ import { existsSync as existsSync38 } from "fs";
22025
22083
  import { join as join44 } from "path";
22026
22084
 
22027
22085
  // server/lib/calendar-ics.ts
@@ -22121,7 +22179,7 @@ function countVEvents(ics) {
22121
22179
  }
22122
22180
 
22123
22181
  // server/lib/calendar-availability.ts
22124
- import { readFileSync as readFileSync34 } from "fs";
22182
+ import { readFileSync as readFileSync35 } from "fs";
22125
22183
  import { join as join43 } from "path";
22126
22184
  var AVAILABILITY_FILENAME = "calendar-availability.json";
22127
22185
  var REQUIRED_KEYS = [
@@ -22134,7 +22192,7 @@ function readAvailabilityConfig(accountDir) {
22134
22192
  const path = join43(accountDir, AVAILABILITY_FILENAME);
22135
22193
  let raw;
22136
22194
  try {
22137
- raw = readFileSync34(path, "utf-8");
22195
+ raw = readFileSync35(path, "utf-8");
22138
22196
  } catch {
22139
22197
  throw new Error(`availability not configured: ${path} not found`);
22140
22198
  }
@@ -22494,7 +22552,7 @@ app49.get("/booking-link", requireAdminSession, (c) => {
22494
22552
  }
22495
22553
  const id82 = account.accountId.slice(0, 8);
22496
22554
  try {
22497
- if (!existsSync37(join44(account.accountDir, AVAILABILITY_FILENAME))) {
22555
+ if (!existsSync38(join44(account.accountDir, AVAILABILITY_FILENAME))) {
22498
22556
  console.log(`[calendar] op=booking-link accountId=${id82} bookingDomain=none source=availability-config`);
22499
22557
  return c.json({ bookingDomain: null });
22500
22558
  }
@@ -22513,7 +22571,7 @@ app49.get("/booking-link", requireAdminSession, (c) => {
22513
22571
  var calendar_default = app49;
22514
22572
 
22515
22573
  // server/routes/admin/data-portal.ts
22516
- import { existsSync as existsSync38, readFileSync as readFileSync35 } from "fs";
22574
+ import { existsSync as existsSync39, readFileSync as readFileSync36 } from "fs";
22517
22575
  import { join as join45 } from "path";
22518
22576
  var app50 = new Hono();
22519
22577
  var PORTAL_FILENAME = "data-portal.json";
@@ -22526,11 +22584,11 @@ app50.get("/portal-link", requireAdminSession, (c) => {
22526
22584
  const id82 = account.accountId.slice(0, 8);
22527
22585
  try {
22528
22586
  const path = join45(account.accountDir, PORTAL_FILENAME);
22529
- if (!existsSync38(path)) {
22587
+ if (!existsSync39(path)) {
22530
22588
  console.log(`[data-portal] op=portal-link accountId=${id82} portalDomain=none source=data-portal-config`);
22531
22589
  return c.json({ portalDomain: null });
22532
22590
  }
22533
- const cfg = JSON.parse(readFileSync35(path, "utf-8"));
22591
+ const cfg = JSON.parse(readFileSync36(path, "utf-8"));
22534
22592
  const portalDomain = typeof cfg.portalDomain === "string" && cfg.portalDomain.trim() ? cfg.portalDomain.trim() : null;
22535
22593
  console.log(`[data-portal] op=portal-link accountId=${id82} portalDomain=${portalDomain ?? "none"} source=data-portal-config`);
22536
22594
  return c.json({ portalDomain });
@@ -22547,8 +22605,8 @@ import cronParser from "cron-parser";
22547
22605
  import { int as int2 } from "neo4j-driver";
22548
22606
 
22549
22607
  // ../lib/agent-dispatch-rule/src/index.ts
22550
- import { readFileSync as readFileSync36 } from "fs";
22551
- import { resolve as resolve30 } from "path";
22608
+ import { readFileSync as readFileSync37 } from "fs";
22609
+ import { resolve as resolve31 } from "path";
22552
22610
  function normalizeE1642(value) {
22553
22611
  let candidate = value.trim().replace(/[\s\-().]/g, "");
22554
22612
  candidate = candidate.replace(/^whatsapp:/i, "");
@@ -22565,7 +22623,7 @@ function phonesMatch2(a, b) {
22565
22623
  function readChannelAdmins(accountDir, channel) {
22566
22624
  let config = {};
22567
22625
  try {
22568
- config = JSON.parse(readFileSync36(resolve30(accountDir, "account.json"), "utf-8"));
22626
+ config = JSON.parse(readFileSync37(resolve31(accountDir, "account.json"), "utf-8"));
22569
22627
  } catch {
22570
22628
  config = {};
22571
22629
  }
@@ -22597,9 +22655,16 @@ function registeredAccountForDestination(houseDir, houseAccountId, destination)
22597
22655
  if (adminPhones.some((p) => phonesMatch2(p, destination))) return houseAccountId;
22598
22656
  return null;
22599
22657
  }
22658
+ function boundSubAccountFor(accountDir, destination) {
22659
+ const { accountManagers } = readChannelAdmins(accountDir, "whatsapp");
22660
+ for (const [managerPhone, subAccountId] of Object.entries(accountManagers)) {
22661
+ if (subAccountId && phonesMatch2(managerPhone, destination)) return subAccountId;
22662
+ }
22663
+ return null;
22664
+ }
22600
22665
  function validateAgentDestination(accountsDir, houseAccountId, creatingAccountId, channel, destination) {
22601
22666
  if (channel === "whatsapp") {
22602
- const houseDir = resolve30(accountsDir, houseAccountId);
22667
+ const houseDir = resolve31(accountsDir, houseAccountId);
22603
22668
  const registered = registeredAccountForDestination(houseDir, houseAccountId, destination);
22604
22669
  if (registered === null) return { valid: false, reason: "not-registered" };
22605
22670
  if (creatingAccountId === houseAccountId) return { valid: true };
@@ -22611,7 +22676,7 @@ function validateAgentDestination(accountsDir, houseAccountId, creatingAccountId
22611
22676
  scheduleAccount: creatingAccountId
22612
22677
  };
22613
22678
  }
22614
- const { adminUsers } = readChannelAdmins(resolve30(accountsDir, creatingAccountId), "telegram");
22679
+ const { adminUsers } = readChannelAdmins(resolve31(accountsDir, creatingAccountId), "telegram");
22615
22680
  const asNumber = Number(destination);
22616
22681
  const ok = Number.isInteger(asNumber) && adminUsers.includes(asNumber);
22617
22682
  return ok ? { valid: true } : { valid: false, reason: "not-registered" };
@@ -22621,7 +22686,7 @@ function listDispatchDestinations(input) {
22621
22686
  const managers = [];
22622
22687
  const admins = [];
22623
22688
  if (houseAccountId !== null) {
22624
- const houseDir = resolve30(accountsDir, houseAccountId);
22689
+ const houseDir = resolve31(accountsDir, houseAccountId);
22625
22690
  const { adminPhones, accountManagers } = readChannelAdmins(houseDir, "whatsapp");
22626
22691
  const seen = /* @__PURE__ */ new Set();
22627
22692
  for (const [phone, subAccountId] of Object.entries(accountManagers)) {
@@ -22639,7 +22704,7 @@ function listDispatchDestinations(input) {
22639
22704
  admins.push({ channel: "whatsapp", destination: phone, label: "House admin" });
22640
22705
  }
22641
22706
  }
22642
- const { adminUsers } = readChannelAdmins(resolve30(accountsDir, accountId), "telegram");
22707
+ const { adminUsers } = readChannelAdmins(resolve31(accountsDir, accountId), "telegram");
22643
22708
  const telegram = [...adminUsers].sort((a, b) => a - b).map((id) => ({ channel: "telegram", destination: String(id), label: "Telegram admin" }));
22644
22709
  const byDestination = (a, b) => a.destination.localeCompare(b.destination);
22645
22710
  return [...managers.sort(byDestination), ...admins.sort(byDestination), ...telegram];
@@ -23306,8 +23371,8 @@ app51.delete("/:eventId", requireAdminSession, async (c) => {
23306
23371
  var routines_default = app51;
23307
23372
 
23308
23373
  // server/routes/admin/skills.ts
23309
- import { existsSync as existsSync39, readdirSync as readdirSync24, readFileSync as readFileSync37, rmSync as rmSync4 } from "fs";
23310
- import { resolve as resolve31 } from "path";
23374
+ import { existsSync as existsSync40, readdirSync as readdirSync25, readFileSync as readFileSync38, rmSync as rmSync5 } from "fs";
23375
+ import { resolve as resolve32 } from "path";
23311
23376
  var app52 = new Hono();
23312
23377
  var NAME_RE = /^[a-z0-9][a-z0-9-]*$/;
23313
23378
  function splitSkillMd(text) {
@@ -23330,9 +23395,9 @@ function stripQuotes(s) {
23330
23395
  return s;
23331
23396
  }
23332
23397
  function subdirs2(dir) {
23333
- if (!existsSync39(dir)) return [];
23398
+ if (!existsSync40(dir)) return [];
23334
23399
  try {
23335
- return readdirSync24(dir, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name);
23400
+ return readdirSync25(dir, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name);
23336
23401
  } catch {
23337
23402
  return [];
23338
23403
  }
@@ -23345,19 +23410,19 @@ app52.get("/", requireAdminSession, async (c) => {
23345
23410
  }
23346
23411
  ensureAccountWatchers(acct.accountId, acct.accountDir);
23347
23412
  const { value, state } = await getOrCompute("skills", acct.accountId, async () => {
23348
- const pluginsDir = resolve31(acct.accountDir, "plugins");
23413
+ const pluginsDir = resolve32(acct.accountDir, "plugins");
23349
23414
  const skills = [];
23350
23415
  let pluginCount = 0;
23351
23416
  for (const plugin of subdirs2(pluginsDir)) {
23352
23417
  pluginCount++;
23353
- const skillsDir = resolve31(pluginsDir, plugin, "skills");
23418
+ const skillsDir = resolve32(pluginsDir, plugin, "skills");
23354
23419
  for (const skill of subdirs2(skillsDir)) {
23355
- const skillMd = resolve31(skillsDir, skill, "SKILL.md");
23356
- if (!existsSync39(skillMd)) continue;
23420
+ const skillMd = resolve32(skillsDir, skill, "SKILL.md");
23421
+ if (!existsSync40(skillMd)) continue;
23357
23422
  try {
23358
- const { frontmatter } = splitSkillMd(readFileSync37(skillMd, "utf-8"));
23359
- const refsDir = resolve31(skillsDir, skill, "references");
23360
- const refCount = existsSync39(refsDir) ? readdirSync24(refsDir, { withFileTypes: true }).filter((e) => e.isFile()).length : 0;
23423
+ const { frontmatter } = splitSkillMd(readFileSync38(skillMd, "utf-8"));
23424
+ const refsDir = resolve32(skillsDir, skill, "references");
23425
+ const refCount = existsSync40(refsDir) ? readdirSync25(refsDir, { withFileTypes: true }).filter((e) => e.isFile()).length : 0;
23361
23426
  skills.push({ plugin, skill, description: frontmatter.description, refCount });
23362
23427
  } catch (err) {
23363
23428
  console.error(`[admin:skills] op=list-skip plugin=${plugin} skill=${skill} reason="${err instanceof Error ? err.message : String(err)}"`);
@@ -23379,15 +23444,15 @@ app52.get("/:plugin/:skill", requireAdminSession, async (c) => {
23379
23444
  console.error(`[admin:skills] op=get outcome=rejected reason=invalid-name plugin="${plugin}" skill="${skill}"`);
23380
23445
  return c.json({ error: "Invalid plugin or skill name" }, 400);
23381
23446
  }
23382
- const skillDir = resolve31(acct.accountDir, "plugins", plugin, "skills", skill);
23383
- const skillMd = resolve31(skillDir, "SKILL.md");
23384
- const found = existsSync39(skillMd);
23447
+ const skillDir = resolve32(acct.accountDir, "plugins", plugin, "skills", skill);
23448
+ const skillMd = resolve32(skillDir, "SKILL.md");
23449
+ const found = existsSync40(skillMd);
23385
23450
  console.log(`[admin:skills] op=get plugin=${plugin} skill=${skill} found=${found}`);
23386
23451
  if (!found) return c.json({ error: "Skill not found" }, 404);
23387
23452
  try {
23388
- const { frontmatter, body } = splitSkillMd(readFileSync37(skillMd, "utf-8"));
23389
- const refsDir = resolve31(skillDir, "references");
23390
- const references = existsSync39(refsDir) ? readdirSync24(refsDir, { withFileTypes: true }).filter((e) => e.isFile()).map((e) => e.name).sort() : [];
23453
+ const { frontmatter, body } = splitSkillMd(readFileSync38(skillMd, "utf-8"));
23454
+ const refsDir = resolve32(skillDir, "references");
23455
+ const references = existsSync40(refsDir) ? readdirSync25(refsDir, { withFileTypes: true }).filter((e) => e.isFile()).map((e) => e.name).sort() : [];
23391
23456
  return c.json({ skill: { plugin, skill, frontmatter, body, references } });
23392
23457
  } catch (err) {
23393
23458
  const message = err instanceof Error ? err.message : String(err);
@@ -23404,18 +23469,18 @@ app52.delete("/:plugin/:skill", requireAdminSession, async (c) => {
23404
23469
  console.error(`[admin:skills] op=delete outcome=rejected reason=invalid-name plugin="${plugin}" skill="${skill}"`);
23405
23470
  return c.json({ error: "Invalid plugin or skill name" }, 400);
23406
23471
  }
23407
- const pluginDir = resolve31(acct.accountDir, "plugins", plugin);
23408
- const skillsDir = resolve31(pluginDir, "skills");
23409
- const skillDir = resolve31(skillsDir, skill);
23410
- if (!existsSync39(resolve31(skillDir, "SKILL.md"))) {
23472
+ const pluginDir = resolve32(acct.accountDir, "plugins", plugin);
23473
+ const skillsDir = resolve32(pluginDir, "skills");
23474
+ const skillDir = resolve32(skillsDir, skill);
23475
+ if (!existsSync40(resolve32(skillDir, "SKILL.md"))) {
23411
23476
  console.error(`[admin:skills] op=delete outcome=rejected reason=not-found plugin=${plugin} skill=${skill}`);
23412
23477
  return c.json({ error: "Skill not found" }, 404);
23413
23478
  }
23414
23479
  try {
23415
- rmSync4(skillDir, { recursive: true, force: true });
23480
+ rmSync5(skillDir, { recursive: true, force: true });
23416
23481
  const pluginDirRemoved = subdirs2(skillsDir).length === 0;
23417
- if (pluginDirRemoved) rmSync4(pluginDir, { recursive: true, force: true });
23418
- const skillDirGone = !existsSync39(skillDir);
23482
+ if (pluginDirRemoved) rmSync5(pluginDir, { recursive: true, force: true });
23483
+ const skillDirGone = !existsSync40(skillDir);
23419
23484
  if (!skillDirGone) {
23420
23485
  console.error(`[admin:skills] op=delete plugin=${plugin} skill=${skill} outcome=rejected reason=rm-incomplete skillDirGone=false`);
23421
23486
  return c.json({ error: "Delete did not remove the skill directory" }, 503);
@@ -23887,20 +23952,20 @@ app57.post("/", requireAdminSession, async (c) => {
23887
23952
  var task_time_adjust_default = app57;
23888
23953
 
23889
23954
  // app/lib/admin-roster.ts
23890
- import { existsSync as existsSync40, readdirSync as readdirSync25, readFileSync as readFileSync38 } from "fs";
23891
- import { resolve as resolve32 } from "path";
23955
+ import { existsSync as existsSync41, readdirSync as readdirSync26, readFileSync as readFileSync39 } from "fs";
23956
+ import { resolve as resolve33 } from "path";
23892
23957
  function readHouseAdminUserIds(accountsDir = ACCOUNTS_DIR) {
23893
23958
  let entries2;
23894
23959
  try {
23895
- entries2 = readdirSync25(accountsDir);
23960
+ entries2 = readdirSync26(accountsDir);
23896
23961
  } catch {
23897
23962
  return [];
23898
23963
  }
23899
23964
  for (const entry of entries2) {
23900
- const cfgPath = resolve32(accountsDir, entry, "account.json");
23901
- if (!existsSync40(cfgPath)) continue;
23965
+ const cfgPath = resolve33(accountsDir, entry, "account.json");
23966
+ if (!existsSync41(cfgPath)) continue;
23902
23967
  try {
23903
- const cfg = JSON.parse(readFileSync38(cfgPath, "utf-8"));
23968
+ const cfg = JSON.parse(readFileSync39(cfgPath, "utf-8"));
23904
23969
  if (cfg.role !== "house") continue;
23905
23970
  if (!Array.isArray(cfg.admins)) return [];
23906
23971
  return cfg.admins.map(
@@ -24230,7 +24295,21 @@ app61.get("/", requireAdminSession, async (c) => {
24230
24295
  var admin_users_list_default = app61;
24231
24296
 
24232
24297
  // server/routes/admin/dispatch-destinations.ts
24298
+ import { resolve as resolve34 } from "path";
24233
24299
  var TAG37 = "[admin:routines]";
24300
+ function scopeFor(d, houseDir, houseAccountId) {
24301
+ if (d.channel !== "whatsapp") return null;
24302
+ if (d.label === "Account manager") return boundSubAccountFor(houseDir, d.destination);
24303
+ return houseAccountId;
24304
+ }
24305
+ function telephoneVariants(destination) {
24306
+ const digits = normalizeE1642(destination);
24307
+ if (digits.length === 0) return [destination];
24308
+ return [.../* @__PURE__ */ new Set([destination, digits, `+${digits}`])];
24309
+ }
24310
+ function scrubDigitRuns(message) {
24311
+ return message.replace(/\d{7,}/g, "<redacted>");
24312
+ }
24234
24313
  var app62 = new Hono();
24235
24314
  app62.get("/", requireAdminSession, async (c) => {
24236
24315
  const accountId = getAccountIdForSession(c.var.cacheKey);
@@ -24246,15 +24325,62 @@ app62.get("/", requireAdminSession, async (c) => {
24246
24325
  console.error(`${TAG37} op=destinations account=${accountId.slice(0, 8)} outcome=house-unresolved reason="${message}"`);
24247
24326
  }
24248
24327
  const destinations = listDispatchDestinations({ accountsDir: ACCOUNTS_DIR, houseAccountId, accountId });
24328
+ const houseDir = houseAccountId === null ? null : resolve34(ACCOUNTS_DIR, houseAccountId);
24329
+ const byScope = /* @__PURE__ */ new Map();
24330
+ for (const d of destinations) {
24331
+ const scope = houseDir === null || houseAccountId === null ? null : scopeFor(d, houseDir, houseAccountId);
24332
+ if (scope === null) continue;
24333
+ const list = byScope.get(scope);
24334
+ if (list) list.push(d);
24335
+ else byScope.set(scope, [d]);
24336
+ }
24337
+ let namesUnresolved = null;
24338
+ let named = 0;
24339
+ if (byScope.size > 0) {
24340
+ let session = null;
24341
+ try {
24342
+ session = getSession();
24343
+ for (const [scopeAccountId, rows] of byScope) {
24344
+ const telephones = [...new Set(rows.flatMap((d) => telephoneVariants(d.destination)))];
24345
+ const result = await session.run(
24346
+ `MATCH (p:Person {accountId: $accountId}) WHERE p.telephone IN $telephones
24347
+ RETURN p.telephone AS telephone, p.givenName AS givenName, p.familyName AS familyName`,
24348
+ { accountId: scopeAccountId, telephones }
24349
+ );
24350
+ const found = /* @__PURE__ */ new Map();
24351
+ for (const rec of result.records) {
24352
+ const tel = rec.get("telephone");
24353
+ if (!tel) continue;
24354
+ const name = [rec.get("givenName"), rec.get("familyName")].filter(Boolean).join(" ");
24355
+ if (name.length > 0) found.set(normalizeE1642(tel), name);
24356
+ }
24357
+ for (const d of rows) {
24358
+ const hit = found.get(normalizeE1642(d.destination));
24359
+ if (hit) {
24360
+ d.name = hit;
24361
+ named += 1;
24362
+ }
24363
+ }
24364
+ }
24365
+ } catch (err) {
24366
+ namesUnresolved = scrubDigitRuns(err instanceof Error ? err.message : String(err));
24367
+ for (const d of destinations) delete d.name;
24368
+ named = 0;
24369
+ } finally {
24370
+ if (session) await session.close();
24371
+ }
24372
+ }
24373
+ const scopes = [...byScope.keys()];
24374
+ const nameScope = scopes.length === 0 ? "none" : scopes.every((s) => s === houseAccountId) ? "house" : scopes.some((s) => s === houseAccountId) ? "mixed" : "account";
24249
24375
  console.log(
24250
- `${TAG37} op=destinations account=${accountId.slice(0, 8)} count=${destinations.length}` + (houseAccountId === null ? " outcome=house-unresolved" : "")
24376
+ `${TAG37} op=destinations account=${accountId.slice(0, 8)} count=${destinations.length} named=${named} unnamed=${destinations.length - named} nameScope=${nameScope}` + (houseAccountId === null ? " outcome=house-unresolved" : "") + (namesUnresolved === null ? "" : ` outcome=names-unresolved reason="${namesUnresolved}"`)
24251
24377
  );
24252
24378
  return c.json({ destinations });
24253
24379
  });
24254
24380
  var dispatch_destinations_default = app62;
24255
24381
 
24256
24382
  // server/routes/admin/activity.ts
24257
- import { readdirSync as readdirSync26 } from "fs";
24383
+ import { readdirSync as readdirSync27 } from "fs";
24258
24384
  var app63 = new Hono();
24259
24385
  var TAG38 = "[activity]";
24260
24386
  function resolveHouseAccountId(accounts) {
@@ -24270,7 +24396,7 @@ function requestToken() {
24270
24396
  var short = (id) => id ? id.slice(0, 8) : "unset";
24271
24397
  function countAccountDirsOnDisk() {
24272
24398
  try {
24273
- return readdirSync26(ACCOUNTS_DIR, { withFileTypes: true }).filter(
24399
+ return readdirSync27(ACCOUNTS_DIR, { withFileTypes: true }).filter(
24274
24400
  (e) => e.isDirectory() && !e.name.startsWith(".")
24275
24401
  ).length;
24276
24402
  } catch {
@@ -24534,9 +24660,9 @@ var verify_token_default = app65;
24534
24660
 
24535
24661
  // app/lib/access-email.ts
24536
24662
  import { spawn as spawn2 } from "child_process";
24537
- import { resolve as resolve33 } from "path";
24538
- var PLATFORM_ROOT5 = process.env.MAXY_PLATFORM_ROOT ?? resolve33(process.cwd(), "..");
24539
- var SEND_SCRIPT = resolve33(
24663
+ import { resolve as resolve35 } from "path";
24664
+ var PLATFORM_ROOT5 = process.env.MAXY_PLATFORM_ROOT ?? resolve35(process.cwd(), "..");
24665
+ var SEND_SCRIPT = resolve35(
24540
24666
  PLATFORM_ROOT5,
24541
24667
  "plugins",
24542
24668
  "email",
@@ -24678,8 +24804,8 @@ app67.route("/request-magic-link", request_magic_link_default);
24678
24804
  var access_default = app67;
24679
24805
 
24680
24806
  // server/routes/sites.ts
24681
- import { existsSync as existsSync41, readFileSync as readFileSync39, realpathSync as realpathSync8, statSync as statSync22 } from "fs";
24682
- import { resolve as resolve34 } from "path";
24807
+ import { existsSync as existsSync42, readFileSync as readFileSync40, realpathSync as realpathSync8, statSync as statSync22 } from "fs";
24808
+ import { resolve as resolve36 } from "path";
24683
24809
  var SAFE_SEG_RE = /^[a-z0-9_][a-z0-9_.-]{0,99}$/i;
24684
24810
  var MIME = {
24685
24811
  ".html": "text/html; charset=utf-8",
@@ -24736,15 +24862,15 @@ app68.get("/:rel{.*}", (c) => {
24736
24862
  }
24737
24863
  segments.push(seg);
24738
24864
  }
24739
- const rootDir = resolve34(account.accountDir, "sites");
24740
- let filePath = segments.length === 0 ? rootDir : resolve34(rootDir, ...segments);
24865
+ const rootDir = resolve36(account.accountDir, "sites");
24866
+ let filePath = segments.length === 0 ? rootDir : resolve36(rootDir, ...segments);
24741
24867
  if (filePath !== rootDir && !filePath.startsWith(rootDir + "/")) {
24742
24868
  console.error(`[sites] path-traversal-rejected path=${reqPath} reason=escape status=403`);
24743
24869
  return c.text("Forbidden", 403);
24744
24870
  }
24745
24871
  let stat11;
24746
24872
  try {
24747
- stat11 = existsSync41(filePath) ? statSync22(filePath) : null;
24873
+ stat11 = existsSync42(filePath) ? statSync22(filePath) : null;
24748
24874
  } catch {
24749
24875
  stat11 = null;
24750
24876
  }
@@ -24757,13 +24883,13 @@ app68.get("/:rel{.*}", (c) => {
24757
24883
  return c.redirect(target, 301);
24758
24884
  }
24759
24885
  if (stat11?.isDirectory()) {
24760
- filePath = resolve34(filePath, "index.html");
24886
+ filePath = resolve36(filePath, "index.html");
24761
24887
  }
24762
24888
  if (!filePath.startsWith(rootDir + "/")) {
24763
24889
  console.error(`[sites] path-traversal-rejected path=${reqPath} reason=escape status=403`);
24764
24890
  return c.text("Forbidden", 403);
24765
24891
  }
24766
- if (!existsSync41(filePath)) {
24892
+ if (!existsSync42(filePath)) {
24767
24893
  console.error(`[sites] not-found path=${reqPath} status=404`);
24768
24894
  return c.text("Not found", 404);
24769
24895
  }
@@ -24782,7 +24908,7 @@ app68.get("/:rel{.*}", (c) => {
24782
24908
  }
24783
24909
  let body;
24784
24910
  try {
24785
- body = readFileSync39(realPath);
24911
+ body = readFileSync40(realPath);
24786
24912
  } catch (err) {
24787
24913
  const code = err?.code;
24788
24914
  if (code === "EISDIR") {
@@ -24817,8 +24943,8 @@ app68.get("/:rel{.*}", (c) => {
24817
24943
  var sites_default = app68;
24818
24944
 
24819
24945
  // app/lib/visitor-token.ts
24820
- import { createHmac, randomBytes, timingSafeEqual } from "crypto";
24821
- import { mkdirSync as mkdirSync8, readFileSync as readFileSync40, writeFileSync as writeFileSync14 } from "fs";
24946
+ import { createHmac, randomBytes as randomBytes2, timingSafeEqual as timingSafeEqual2 } from "crypto";
24947
+ import { mkdirSync as mkdirSync8, readFileSync as readFileSync41, writeFileSync as writeFileSync15 } from "fs";
24822
24948
  import { dirname as dirname15 } from "path";
24823
24949
  var TOKEN_PREFIX = "v1.";
24824
24950
  var SECRET_BYTES = 32;
@@ -24827,21 +24953,21 @@ var cachedSecret = null;
24827
24953
  function getSecret() {
24828
24954
  if (cachedSecret) return cachedSecret;
24829
24955
  try {
24830
- const hex2 = readFileSync40(VISITOR_TOKEN_SECRET_FILE, "utf-8").trim();
24956
+ const hex2 = readFileSync41(VISITOR_TOKEN_SECRET_FILE, "utf-8").trim();
24831
24957
  if (hex2.length === SECRET_BYTES * 2) {
24832
24958
  cachedSecret = Buffer.from(hex2, "hex");
24833
24959
  return cachedSecret;
24834
24960
  }
24835
24961
  } catch {
24836
24962
  }
24837
- const fresh = randomBytes(SECRET_BYTES).toString("hex");
24963
+ const fresh = randomBytes2(SECRET_BYTES).toString("hex");
24838
24964
  try {
24839
24965
  mkdirSync8(dirname15(VISITOR_TOKEN_SECRET_FILE), { recursive: true, mode: 448 });
24840
- writeFileSync14(VISITOR_TOKEN_SECRET_FILE, fresh, { mode: 384, flag: "wx" });
24966
+ writeFileSync15(VISITOR_TOKEN_SECRET_FILE, fresh, { mode: 384, flag: "wx" });
24841
24967
  console.log(`[visitor-token] secret minted path=${VISITOR_TOKEN_SECRET_FILE}`);
24842
24968
  } catch {
24843
24969
  }
24844
- const hex = readFileSync40(VISITOR_TOKEN_SECRET_FILE, "utf-8").trim();
24970
+ const hex = readFileSync41(VISITOR_TOKEN_SECRET_FILE, "utf-8").trim();
24845
24971
  cachedSecret = Buffer.from(hex, "hex");
24846
24972
  return cachedSecret;
24847
24973
  }
@@ -24874,7 +25000,7 @@ function verifyVisitorToken(token, now = Date.now()) {
24874
25000
  const expected = signPayload(payloadJson, getSecret());
24875
25001
  const expectedBuf = Buffer.from(expected, "utf-8");
24876
25002
  const provBuf = Buffer.from(sigB64, "utf-8");
24877
- if (expectedBuf.length !== provBuf.length || !timingSafeEqual(expectedBuf, provBuf)) {
25003
+ if (expectedBuf.length !== provBuf.length || !timingSafeEqual2(expectedBuf, provBuf)) {
24878
25004
  return { ok: false, reason: "bad-sig" };
24879
25005
  }
24880
25006
  let payload;
@@ -24894,7 +25020,7 @@ var VISITOR_COOKIE_NAME = "mxy_v";
24894
25020
  var VISITOR_COOKIE_MAX_AGE_SECONDS = Math.floor(DEFAULT_TTL_MS / 1e3);
24895
25021
 
24896
25022
  // app/lib/brand-config.ts
24897
- import { existsSync as existsSync42, readFileSync as readFileSync41 } from "fs";
25023
+ import { existsSync as existsSync43, readFileSync as readFileSync42 } from "fs";
24898
25024
  import { join as join47 } from "path";
24899
25025
  var cached2 = null;
24900
25026
  var cachedAttempted = false;
@@ -24904,9 +25030,9 @@ function readBrandConfig() {
24904
25030
  const platformRoot5 = process.env.MAXY_PLATFORM_ROOT;
24905
25031
  if (!platformRoot5) return null;
24906
25032
  const brandPath = join47(platformRoot5, "config", "brand.json");
24907
- if (!existsSync42(brandPath)) return null;
25033
+ if (!existsSync43(brandPath)) return null;
24908
25034
  try {
24909
- cached2 = JSON.parse(readFileSync41(brandPath, "utf-8"));
25035
+ cached2 = JSON.parse(readFileSync42(brandPath, "utf-8"));
24910
25036
  return cached2;
24911
25037
  } catch {
24912
25038
  return null;
@@ -25403,14 +25529,14 @@ async function writeEvent(opts) {
25403
25529
  var visitor_event_default = app71;
25404
25530
 
25405
25531
  // server/routes/session.ts
25406
- import { resolve as resolve35 } from "path";
25407
- import { existsSync as existsSync43, writeFileSync as writeFileSync15, mkdirSync as mkdirSync9 } from "fs";
25408
- var UUID_RE4 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
25532
+ import { resolve as resolve37 } from "path";
25533
+ import { existsSync as existsSync44, writeFileSync as writeFileSync16, mkdirSync as mkdirSync9 } from "fs";
25534
+ var UUID_RE5 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
25409
25535
  function writeBrandingCache(accountId, agentSlug, branding) {
25410
25536
  try {
25411
- const cacheDir = resolve35(MAXY_DIR, "branding-cache", accountId);
25537
+ const cacheDir = resolve37(MAXY_DIR, "branding-cache", accountId);
25412
25538
  mkdirSync9(cacheDir, { recursive: true });
25413
- writeFileSync15(resolve35(cacheDir, `${agentSlug}.json`), JSON.stringify(branding), "utf-8");
25539
+ writeFileSync16(resolve37(cacheDir, `${agentSlug}.json`), JSON.stringify(branding), "utf-8");
25414
25540
  } catch (err) {
25415
25541
  console.error(`[branding] cache write failed: ${err instanceof Error ? err.message : String(err)}`);
25416
25542
  }
@@ -25420,7 +25546,7 @@ function parseVisitorCookie2(cookieHeader) {
25420
25546
  const match = cookieHeader.match(/(?:^|;\s*)maxy_visitor=([^;]*)/);
25421
25547
  if (!match) return null;
25422
25548
  const value = decodeURIComponent(match[1]).trim();
25423
- return UUID_RE4.test(value) ? value : null;
25549
+ return UUID_RE5.test(value) ? value : null;
25424
25550
  }
25425
25551
  function parseAccessSessionId2(cookieHeader) {
25426
25552
  if (!cookieHeader) return null;
@@ -25487,8 +25613,8 @@ app72.post("/", async (c) => {
25487
25613
  }
25488
25614
  let agentConfig = null;
25489
25615
  if (account) {
25490
- const agentDir = resolve35(account.accountDir, "agents", agentSlug);
25491
- if (!existsSync43(agentDir) || !existsSync43(resolve35(agentDir, "config.json"))) {
25616
+ const agentDir = resolve37(account.accountDir, "agents", agentSlug);
25617
+ if (!existsSync44(agentDir) || !existsSync44(resolve37(agentDir, "config.json"))) {
25492
25618
  return c.json({ error: "Agent not found" }, 404);
25493
25619
  }
25494
25620
  agentConfig = resolveAgentConfig(account.accountDir, agentSlug);
@@ -25518,7 +25644,7 @@ app72.post("/", async (c) => {
25518
25644
  );
25519
25645
  }
25520
25646
  }
25521
- if (body.session_key && typeof body.session_key === "string" && UUID_RE4.test(body.session_key)) {
25647
+ if (body.session_key && typeof body.session_key === "string" && UUID_RE5.test(body.session_key)) {
25522
25648
  if (visitorId) {
25523
25649
  const recent = await findRecentConversation(visitorId, accountId, agentSlug).catch(() => null);
25524
25650
  if (recent) {
@@ -25748,7 +25874,7 @@ var calendar_public_default = app73;
25748
25874
  // server/routes/portal-fetch.ts
25749
25875
  import { createReadStream as createReadStream3 } from "fs";
25750
25876
  import { stat as stat8, readFile as readFile11, realpath } from "fs/promises";
25751
- import { join as join48, resolve as resolve36, sep as sep11 } from "path";
25877
+ import { join as join48, resolve as resolve38, sep as sep11 } from "path";
25752
25878
  import { Readable as Readable3 } from "stream";
25753
25879
  var app74 = new Hono();
25754
25880
  var TAG41 = "[portal-fetch]";
@@ -25801,7 +25927,7 @@ ${expiresAtMs}`)
25801
25927
  return diff === 0;
25802
25928
  }
25803
25929
  async function readAccountSecret(accountId) {
25804
- const path = resolve36(DATA_ROOT, "accounts", accountId, "secrets", "data-portal.env");
25930
+ const path = resolve38(DATA_ROOT, "accounts", accountId, "secrets", "data-portal.env");
25805
25931
  let text;
25806
25932
  try {
25807
25933
  text = await readFile11(path, "utf8");
@@ -25837,7 +25963,7 @@ async function resolveFetchTarget(accountDir, relPath, ownerId) {
25837
25963
  const exposeFolders = await readExposeFolders2(accountDir);
25838
25964
  const { exposed } = resolveExposedDirs(schemaText, exposeFolders);
25839
25965
  if (exposed.length === 0 && !ownerId) return { ok: false, reason: "not-exposed" };
25840
- const lexical = resolve36(accountDir, relPath);
25966
+ const lexical = resolve38(accountDir, relPath);
25841
25967
  let root;
25842
25968
  let absolute;
25843
25969
  try {
@@ -25886,7 +26012,7 @@ async function handle(c, headOnly) {
25886
26012
  return c.json({ ok: false, error: "denied" }, 401);
25887
26013
  }
25888
26014
  const target = await resolveFetchTarget(
25889
- resolve36(DATA_ROOT, "accounts", accountId),
26015
+ resolve38(DATA_ROOT, "accounts", accountId),
25890
26016
  relPath,
25891
26017
  owner || void 0
25892
26018
  );
@@ -26000,7 +26126,7 @@ function startTimeEntryCensus(openSession, opts = {}) {
26000
26126
  }
26001
26127
 
26002
26128
  // app/lib/ledger-census.ts
26003
- import { readdirSync as readdirSync27, readFileSync as readFileSync42, statSync as statSync23 } from "fs";
26129
+ import { readdirSync as readdirSync28, readFileSync as readFileSync43, statSync as statSync23 } from "fs";
26004
26130
  import { join as join49 } from "path";
26005
26131
 
26006
26132
  // ../lib/ledger-core/dist/reconcile.js
@@ -26049,7 +26175,7 @@ var DAY_MS = 864e5;
26049
26175
  function countWriteRejects24h(logDir, now) {
26050
26176
  let entries2;
26051
26177
  try {
26052
- entries2 = readdirSync27(logDir).filter((f) => f.startsWith("mcp-ledger-") && f.endsWith(".log"));
26178
+ entries2 = readdirSync28(logDir).filter((f) => f.startsWith("mcp-ledger-") && f.endsWith(".log"));
26053
26179
  } catch {
26054
26180
  return 0;
26055
26181
  }
@@ -26058,7 +26184,7 @@ function countWriteRejects24h(logDir, now) {
26058
26184
  const path = join49(logDir, name);
26059
26185
  try {
26060
26186
  if (now - statSync23(path).mtimeMs > DAY_MS) continue;
26061
- for (const line of readFileSync42(path, "utf8").split("\n")) {
26187
+ for (const line of readFileSync43(path, "utf8").split("\n")) {
26062
26188
  if (line.includes("[graph-write] reject")) total += 1;
26063
26189
  }
26064
26190
  } catch {
@@ -26327,7 +26453,7 @@ function startGraphHealthTimer() {
26327
26453
 
26328
26454
  // app/lib/file-watcher.ts
26329
26455
  import * as fsp2 from "fs/promises";
26330
- import { resolve as resolve37, sep as sep12 } from "path";
26456
+ import { resolve as resolve39, sep as sep12 } from "path";
26331
26457
  var ACCOUNT_UUID_RE3 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
26332
26458
  var DEFAULT_COALESCE_MS = 500;
26333
26459
  var ROOTS = ["accounts"];
@@ -26346,7 +26472,7 @@ async function startFileWatcher(opts = {}) {
26346
26472
  const dropFn = opts.drop ?? dropFileIndex;
26347
26473
  for (const r of ROOTS) {
26348
26474
  try {
26349
- await fsp2.mkdir(resolve37(dataRoot, r), { recursive: true });
26475
+ await fsp2.mkdir(resolve39(dataRoot, r), { recursive: true });
26350
26476
  } catch (err) {
26351
26477
  console.error(
26352
26478
  `[file-watcher] start-failed root="${r}" err="${err.message}" \u2014 index will be maintained by the 5-min reconcile backstop only`
@@ -26367,7 +26493,7 @@ async function startFileWatcher(opts = {}) {
26367
26493
  timers.set(relativePath, t);
26368
26494
  }
26369
26495
  async function runHook(relativePath, accountId) {
26370
- const absolute = resolve37(dataRoot, relativePath);
26496
+ const absolute = resolve39(dataRoot, relativePath);
26371
26497
  let exists = false;
26372
26498
  try {
26373
26499
  const st = await fsp2.stat(absolute);
@@ -26391,7 +26517,7 @@ async function startFileWatcher(opts = {}) {
26391
26517
  }
26392
26518
  }
26393
26519
  async function watchRoot(rootName) {
26394
- const absRoot = resolve37(dataRoot, rootName);
26520
+ const absRoot = resolve39(dataRoot, rootName);
26395
26521
  try {
26396
26522
  const iter = fsp2.watch(absRoot, { recursive: true, signal: controller.signal });
26397
26523
  for await (const event of iter) {
@@ -26430,7 +26556,7 @@ async function startFileWatcher(opts = {}) {
26430
26556
 
26431
26557
  // app/lib/migrate-uploads.ts
26432
26558
  import { mkdir as mkdir4, readdir as readdir6, rename as rename4, rm as rm3 } from "fs/promises";
26433
- import { dirname as dirname16, relative as relative8, resolve as resolve38 } from "path";
26559
+ import { dirname as dirname16, relative as relative8, resolve as resolve40 } from "path";
26434
26560
  var ACCOUNT_UUID_RE4 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
26435
26561
  async function walkFiles(dir) {
26436
26562
  const out = [];
@@ -26441,7 +26567,7 @@ async function walkFiles(dir) {
26441
26567
  return out;
26442
26568
  }
26443
26569
  for (const e of entries2) {
26444
- const abs = resolve38(dir, e.name);
26570
+ const abs = resolve40(dir, e.name);
26445
26571
  if (e.isDirectory()) {
26446
26572
  out.push(...await walkFiles(abs));
26447
26573
  } else if (e.isFile()) {
@@ -26461,7 +26587,7 @@ async function relocateTree(srcDir, destDir, dataRoot, accountId, session) {
26461
26587
  let moved = 0;
26462
26588
  for (const oldAbs of files) {
26463
26589
  const suffix = relative8(srcDir, oldAbs);
26464
- const newAbs = resolve38(destDir, suffix);
26590
+ const newAbs = resolve40(destDir, suffix);
26465
26591
  await mkdir4(dirname16(newAbs), { recursive: true });
26466
26592
  await rename4(oldAbs, newAbs);
26467
26593
  moved++;
@@ -26488,7 +26614,7 @@ async function relocateTree(srcDir, destDir, dataRoot, accountId, session) {
26488
26614
  }
26489
26615
  async function migrateUploads(opts = {}) {
26490
26616
  const dataRoot = opts.dataRoot ?? DATA_ROOT;
26491
- const oldRoot = resolve38(dataRoot, "uploads");
26617
+ const oldRoot = resolve40(dataRoot, "uploads");
26492
26618
  let topEntries;
26493
26619
  try {
26494
26620
  topEntries = await readdir6(oldRoot, { withFileTypes: true });
@@ -26509,8 +26635,8 @@ async function migrateUploads(opts = {}) {
26509
26635
  const name = entry.name;
26510
26636
  if (ACCOUNT_UUID_RE4.test(name)) {
26511
26637
  moved += await relocateTree(
26512
- resolve38(oldRoot, name),
26513
- resolve38(dataRoot, "accounts", name, "uploads"),
26638
+ resolve40(oldRoot, name),
26639
+ resolve40(dataRoot, "accounts", name, "uploads"),
26514
26640
  dataRoot,
26515
26641
  name,
26516
26642
  session
@@ -26522,8 +26648,8 @@ async function migrateUploads(opts = {}) {
26522
26648
  continue;
26523
26649
  }
26524
26650
  moved += await relocateTree(
26525
- resolve38(oldRoot, "public"),
26526
- resolve38(dataRoot, "accounts", installAccountId, "uploads", "public"),
26651
+ resolve40(oldRoot, "public"),
26652
+ resolve40(dataRoot, "accounts", installAccountId, "uploads", "public"),
26527
26653
  dataRoot,
26528
26654
  null,
26529
26655
  // public uploads carry no graph nodes
@@ -26553,7 +26679,7 @@ async function migrateUploads(opts = {}) {
26553
26679
 
26554
26680
  // app/lib/migrate-admin-webchat-sidecars.ts
26555
26681
  import { readdir as readdir7, readFile as readFile12, rename as rename5, writeFile as writeFile4, unlink as unlink4 } from "fs/promises";
26556
- import { existsSync as existsSync44 } from "fs";
26682
+ import { existsSync as existsSync45 } from "fs";
26557
26683
  import { join as join50 } from "path";
26558
26684
  var ADMIN_ROLE2 = "admin";
26559
26685
  var WEBCHAT_CHANNEL2 = "webchat";
@@ -26583,7 +26709,7 @@ async function writeRaw(path, obj) {
26583
26709
  await rename5(tmp, path);
26584
26710
  } catch (err) {
26585
26711
  try {
26586
- if (existsSync44(tmp)) await unlink4(tmp);
26712
+ if (existsSync45(tmp)) await unlink4(tmp);
26587
26713
  } catch {
26588
26714
  }
26589
26715
  throw err;
@@ -26706,7 +26832,7 @@ async function migrateAdminWebchatSidecars(opts = {}) {
26706
26832
 
26707
26833
  // app/lib/migrate-sidecar-account-ids.ts
26708
26834
  import { readdir as readdir8, readFile as readFile13, rename as rename6, writeFile as writeFile5, unlink as unlink5 } from "fs/promises";
26709
- import { existsSync as existsSync45 } from "fs";
26835
+ import { existsSync as existsSync46 } from "fs";
26710
26836
  import { join as join51 } from "path";
26711
26837
  var SESSION_META_RE2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.meta\.json$/i;
26712
26838
  function projectSlugForCwd(cwd) {
@@ -26733,7 +26859,7 @@ async function writeRaw2(path, obj) {
26733
26859
  await rename6(tmp, path);
26734
26860
  } catch (err) {
26735
26861
  try {
26736
- if (existsSync45(tmp)) await unlink5(tmp);
26862
+ if (existsSync46(tmp)) await unlink5(tmp);
26737
26863
  } catch {
26738
26864
  }
26739
26865
  throw err;
@@ -27909,16 +28035,16 @@ var WebchatGateway = class _WebchatGateway {
27909
28035
  * The public /api/chat route awaits this to return the reply on the same SSE
27910
28036
  * response, preserving the pre-756 POST→single-blob browser contract. */
27911
28037
  awaitReply(key, timeoutMs) {
27912
- return new Promise((resolve44) => {
28038
+ return new Promise((resolve46) => {
27913
28039
  const timer = setTimeout(() => {
27914
28040
  this.replyAwaiters.delete(key);
27915
- resolve44({ timeout: true });
28041
+ resolve46({ timeout: true });
27916
28042
  }, timeoutMs);
27917
28043
  if (timer.unref) timer.unref();
27918
28044
  this.replyAwaiters.set(key, (r) => {
27919
28045
  clearTimeout(timer);
27920
28046
  this.replyAwaiters.delete(key);
27921
- resolve44(r);
28047
+ resolve46(r);
27922
28048
  });
27923
28049
  });
27924
28050
  }
@@ -27929,11 +28055,11 @@ var WebchatGateway = class _WebchatGateway {
27929
28055
  * terminal dialog stays answerable). */
27930
28056
  awaitPermissionVerdict(p, timeoutMs) {
27931
28057
  const k = _WebchatGateway.promptKey(p.key, p.requestId);
27932
- return new Promise((resolve44) => {
28058
+ return new Promise((resolve46) => {
27933
28059
  this.pendingPrompts.get(k)?.resolve({ timeout: true });
27934
28060
  const timer = setTimeout(() => {
27935
28061
  this.pendingPrompts.delete(k);
27936
- resolve44({ timeout: true });
28062
+ resolve46({ timeout: true });
27937
28063
  }, timeoutMs);
27938
28064
  if (timer.unref) timer.unref();
27939
28065
  this.pendingPrompts.set(k, {
@@ -27943,7 +28069,7 @@ var WebchatGateway = class _WebchatGateway {
27943
28069
  clearTimeout(timer);
27944
28070
  this.pendingPrompts.delete(k);
27945
28071
  this.deps.onPointerChange?.(p.key);
27946
- resolve44(r);
28072
+ resolve46(r);
27947
28073
  }
27948
28074
  });
27949
28075
  console.error(`[webchat:perm] op=open key=${keyDisplay(p.key)} id=${p.requestId} tool=${p.toolName}`);
@@ -28519,7 +28645,7 @@ async function fanOut(subscribers, text, onError, tag) {
28519
28645
 
28520
28646
  // app/lib/webchat/file-delivery.ts
28521
28647
  import { realpathSync as realpathSync9 } from "fs";
28522
- import { resolve as resolve39 } from "path";
28648
+ import { resolve as resolve41 } from "path";
28523
28649
 
28524
28650
  // app/lib/channel-pty-bridge/file-delivery.ts
28525
28651
  var SEND_USER_FILE = "SendUserFile";
@@ -28620,7 +28746,7 @@ function makeWebchatSendFile(entry) {
28620
28746
  console.error(`${TAG45} file-delivery reject reason=no-account sender=${entry.senderId}`);
28621
28747
  return { ok: false, error: "no-account" };
28622
28748
  }
28623
- const accountDir = resolve39(platformRoot2(), "..", "data/accounts", entry.accountId);
28749
+ const accountDir = resolve41(platformRoot2(), "..", "data/accounts", entry.accountId);
28624
28750
  try {
28625
28751
  const resolved = realpathSync9(filePath);
28626
28752
  const accountResolved = realpathSync9(accountDir);
@@ -29184,7 +29310,7 @@ function buildTelegramSpawnRequest(input) {
29184
29310
  // app/lib/telegram/outbound/send-document.ts
29185
29311
  import { realpathSync as realpathSync10 } from "fs";
29186
29312
  import { readFile as readFile14, stat as stat10 } from "fs/promises";
29187
- import { resolve as resolve40, basename as basename15 } from "path";
29313
+ import { resolve as resolve42, basename as basename15 } from "path";
29188
29314
  var TAG47 = "[telegram:outbound]";
29189
29315
  var TELEGRAM_DOCUMENT_MAX_BYTES = 50 * 1024 * 1024;
29190
29316
  async function sendTelegramDocument(input) {
@@ -29195,7 +29321,7 @@ async function sendTelegramDocument(input) {
29195
29321
  if (!maxyAccountId || !platformRoot5) {
29196
29322
  return { ok: false, status: 400, error: "Cannot validate file path: missing account or platform context" };
29197
29323
  }
29198
- const accountDir = resolve40(platformRoot5, "..", "data/accounts", maxyAccountId);
29324
+ const accountDir = resolve42(platformRoot5, "..", "data/accounts", maxyAccountId);
29199
29325
  let accountResolved;
29200
29326
  try {
29201
29327
  accountResolved = realpathSync10(accountDir);
@@ -29603,14 +29729,14 @@ function resolveScheduledEffectiveAccountForInstall(accountDir, destination) {
29603
29729
  }
29604
29730
 
29605
29731
  // server/lib/booking-site-accounts.ts
29606
- import { existsSync as existsSync46, readFileSync as readFileSync43 } from "fs";
29607
- import { resolve as resolve41 } from "path";
29732
+ import { existsSync as existsSync47, readFileSync as readFileSync44 } from "fs";
29733
+ import { resolve as resolve43 } from "path";
29608
29734
  function listBookingSiteAccounts(accounts) {
29609
29735
  return accounts.filter((a) => {
29610
- const availPath = resolve41(a.accountDir, "calendar-availability.json");
29611
- if (!existsSync46(availPath)) return false;
29736
+ const availPath = resolve43(a.accountDir, "calendar-availability.json");
29737
+ if (!existsSync47(availPath)) return false;
29612
29738
  try {
29613
- const cfg = JSON.parse(readFileSync43(availPath, "utf-8"));
29739
+ const cfg = JSON.parse(readFileSync44(availPath, "utf-8"));
29614
29740
  return typeof cfg.bookingDbName === "string" && cfg.bookingDbName.length > 0;
29615
29741
  } catch {
29616
29742
  return false;
@@ -29648,8 +29774,8 @@ function broadcastAdminShutdown(reason) {
29648
29774
 
29649
29775
  // ../lib/entitlement/src/index.ts
29650
29776
  import { createPublicKey, createHash as createHash6, verify as cryptoVerify } from "crypto";
29651
- import { existsSync as existsSync47, readFileSync as readFileSync44, statSync as statSync24 } from "fs";
29652
- import { resolve as resolve42 } from "path";
29777
+ import { existsSync as existsSync48, readFileSync as readFileSync45, statSync as statSync24 } from "fs";
29778
+ import { resolve as resolve44 } from "path";
29653
29779
 
29654
29780
  // ../lib/entitlement/src/canonicalize.ts
29655
29781
  function canonicalize(value) {
@@ -29684,7 +29810,7 @@ var PUBKEY_SHA256 = "8eee6bcb33545fd13b16d3199a5735ca5db5062834c7b49dfe4f23801d9
29684
29810
  var GRACE_DAYS = 7;
29685
29811
  var GRACE_MS = GRACE_DAYS * 24 * 60 * 60 * 1e3;
29686
29812
  function pubkeyPath(brand) {
29687
- return resolve42(brand.platformRoot, "lib", "entitlement", "rubytech-pubkey.pem");
29813
+ return resolve44(brand.platformRoot, "lib", "entitlement", "rubytech-pubkey.pem");
29688
29814
  }
29689
29815
  var memo = null;
29690
29816
  function memoKey(mtimeMs, account) {
@@ -29696,8 +29822,8 @@ function resolveEntitlement(brand, account) {
29696
29822
  if (brand.commercialMode !== true) {
29697
29823
  return logResolved(implicitTrust(account), null);
29698
29824
  }
29699
- const entitlementPath = resolve42(brand.configDir, "entitlement.json");
29700
- if (!existsSync47(entitlementPath)) {
29825
+ const entitlementPath = resolve44(brand.configDir, "entitlement.json");
29826
+ if (!existsSync48(entitlementPath)) {
29701
29827
  return logResolved(anonymousFallback("missing"), { reason: "missing" });
29702
29828
  }
29703
29829
  const stat11 = statSync24(entitlementPath);
@@ -29712,7 +29838,7 @@ function resolveEntitlement(brand, account) {
29712
29838
  function verifyAndResolve(brand, entitlementPath, account) {
29713
29839
  let pubkeyPem;
29714
29840
  try {
29715
- pubkeyPem = readFileSync44(pubkeyPath(brand), "utf-8");
29841
+ pubkeyPem = readFileSync45(pubkeyPath(brand), "utf-8");
29716
29842
  } catch (err) {
29717
29843
  return logResolved(anonymousFallback("pubkey-missing"), {
29718
29844
  reason: "pubkey-missing"
@@ -29726,7 +29852,7 @@ function verifyAndResolve(brand, entitlementPath, account) {
29726
29852
  }
29727
29853
  let envelope;
29728
29854
  try {
29729
- envelope = JSON.parse(readFileSync44(entitlementPath, "utf-8"));
29855
+ envelope = JSON.parse(readFileSync45(entitlementPath, "utf-8"));
29730
29856
  } catch {
29731
29857
  return logResolved(anonymousFallback("malformed"), { reason: "malformed" });
29732
29858
  }
@@ -29890,12 +30016,12 @@ installMediaDownloadGuard();
29890
30016
  var PLATFORM_ROOT6 = process.env.MAXY_PLATFORM_ROOT || "";
29891
30017
  var BRAND_JSON_PATH = PLATFORM_ROOT6 ? join52(PLATFORM_ROOT6, "config", "brand.json") : "";
29892
30018
  var BRAND = { productName: "Maxy", hostname: "maxy", configDir: ".maxy", marketingUrl: "https://getmaxy.com" };
29893
- if (BRAND_JSON_PATH && !existsSync48(BRAND_JSON_PATH)) {
30019
+ if (BRAND_JSON_PATH && !existsSync49(BRAND_JSON_PATH)) {
29894
30020
  console.error(`[brand] WARNING: brand.json not found at ${BRAND_JSON_PATH} \u2014 using Maxy defaults`);
29895
30021
  }
29896
- if (BRAND_JSON_PATH && existsSync48(BRAND_JSON_PATH)) {
30022
+ if (BRAND_JSON_PATH && existsSync49(BRAND_JSON_PATH)) {
29897
30023
  try {
29898
- const parsed = JSON.parse(readFileSync45(BRAND_JSON_PATH, "utf-8"));
30024
+ const parsed = JSON.parse(readFileSync46(BRAND_JSON_PATH, "utf-8"));
29899
30025
  BRAND = { ...BRAND, ...parsed };
29900
30026
  } catch (err) {
29901
30027
  console.error(`[brand] Failed to parse brand.json: ${err.message}`);
@@ -29930,8 +30056,8 @@ var brandLoginOpts = {
29930
30056
  var ALIAS_DOMAINS_PATH = join52(homedir4(), BRAND.configDir, "alias-domains.json");
29931
30057
  function loadAliasDomains() {
29932
30058
  try {
29933
- if (!existsSync48(ALIAS_DOMAINS_PATH)) return null;
29934
- const parsed = JSON.parse(readFileSync45(ALIAS_DOMAINS_PATH, "utf-8"));
30059
+ if (!existsSync49(ALIAS_DOMAINS_PATH)) return null;
30060
+ const parsed = JSON.parse(readFileSync46(ALIAS_DOMAINS_PATH, "utf-8"));
29935
30061
  if (!Array.isArray(parsed)) {
29936
30062
  console.error("[alias-domains] malformed alias-domains.json \u2014 expected array");
29937
30063
  return null;
@@ -30006,7 +30132,7 @@ var waGateway = new WaGateway({
30006
30132
  fetchStandingRules: fetchAccountStandingRules,
30007
30133
  resolveSessionOverride: (accountId, senderId) => resolveChannelOverride(accountId, "whatsapp", senderId),
30008
30134
  gatewayUrl: `http://127.0.0.1:${process.env.MAXY_UI_INTERNAL_PORT ?? ""}`,
30009
- serverPath: process.env.MAXY_WA_CHANNEL_SERVER_PATH ?? resolve43(process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, ".."), "services/whatsapp-channel/dist/server.js"),
30135
+ serverPath: process.env.MAXY_WA_CHANNEL_SERVER_PATH ?? resolve45(process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, ".."), "services/whatsapp-channel/dist/server.js"),
30010
30136
  // Task 751 / 1390 — file delivery on the native channel. `maxyAccountId` (the
30011
30137
  // path-validation scope) is the sender's effective SESSION account, resolved
30012
30138
  // once at the inbound gate and threaded here via the gateway's per-sender doc
@@ -30021,7 +30147,7 @@ var waGateway = new WaGateway({
30021
30147
  caption,
30022
30148
  accountId,
30023
30149
  maxyAccountId,
30024
- platformRoot: resolve43(process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, ".."))
30150
+ platformRoot: resolve45(process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, ".."))
30025
30151
  });
30026
30152
  return result.ok ? { ok: true, messageId: result.messageId } : { ok: false, error: result.error };
30027
30153
  },
@@ -30723,20 +30849,20 @@ app75.get("/agent-assets/:slug/:filename", (c) => {
30723
30849
  console.error(`[agent-assets] no-account slug=${slug} file=${filename}`);
30724
30850
  return c.text("Not found", 404);
30725
30851
  }
30726
- const filePath = resolve43(account.accountDir, "agents", slug, "assets", filename);
30727
- const expectedDir = resolve43(account.accountDir, "agents", slug, "assets");
30852
+ const filePath = resolve45(account.accountDir, "agents", slug, "assets", filename);
30853
+ const expectedDir = resolve45(account.accountDir, "agents", slug, "assets");
30728
30854
  if (!filePath.startsWith(expectedDir + "/")) {
30729
30855
  console.error(`[agent-assets] path-traversal-rejected slug=${slug} file=${filename}`);
30730
30856
  return c.text("Forbidden", 403);
30731
30857
  }
30732
- if (!existsSync48(filePath)) {
30858
+ if (!existsSync49(filePath)) {
30733
30859
  console.error(`[agent-assets] serve slug=${slug} file=${filename} status=404`);
30734
30860
  return c.text("Not found", 404);
30735
30861
  }
30736
30862
  const ext = "." + filename.split(".").pop()?.toLowerCase();
30737
30863
  const contentType = IMAGE_MIME[ext] || "application/octet-stream";
30738
30864
  console.log(`[agent-assets] serve slug=${slug} file=${filename} status=200`);
30739
- const body = readFileSync45(filePath);
30865
+ const body = readFileSync46(filePath);
30740
30866
  return c.body(body, 200, {
30741
30867
  "Content-Type": contentType,
30742
30868
  "Cache-Control": "public, max-age=3600"
@@ -30753,20 +30879,20 @@ app75.get("/generated/:filename", (c) => {
30753
30879
  console.error(`[generated] serve file=${filename} status=404`);
30754
30880
  return c.text("Not found", 404);
30755
30881
  }
30756
- const filePath = resolve43(account.accountDir, "generated", filename);
30757
- const expectedDir = resolve43(account.accountDir, "generated");
30882
+ const filePath = resolve45(account.accountDir, "generated", filename);
30883
+ const expectedDir = resolve45(account.accountDir, "generated");
30758
30884
  if (!filePath.startsWith(expectedDir + "/")) {
30759
30885
  console.error(`[generated] serve file=${filename} status=403`);
30760
30886
  return c.text("Forbidden", 403);
30761
30887
  }
30762
- if (!existsSync48(filePath)) {
30888
+ if (!existsSync49(filePath)) {
30763
30889
  console.error(`[generated] serve file=${filename} status=404`);
30764
30890
  return c.text("Not found", 404);
30765
30891
  }
30766
30892
  const ext = "." + filename.split(".").pop()?.toLowerCase();
30767
30893
  const contentType = IMAGE_MIME[ext] || "application/octet-stream";
30768
30894
  console.log(`[generated] serve file=${filename} status=200`);
30769
- const body = readFileSync45(filePath);
30895
+ const body = readFileSync46(filePath);
30770
30896
  return c.body(body, 200, {
30771
30897
  "Content-Type": contentType,
30772
30898
  "Cache-Control": "public, max-age=86400"
@@ -30779,9 +30905,9 @@ app75.route("/v", visitor_consent_default);
30779
30905
  var htmlCache = /* @__PURE__ */ new Map();
30780
30906
  var brandLogoPath = "/brand/maxy-monochrome.png";
30781
30907
  var brandIconPath = "/brand/maxy-monochrome.png";
30782
- if (BRAND_JSON_PATH && existsSync48(BRAND_JSON_PATH)) {
30908
+ if (BRAND_JSON_PATH && existsSync49(BRAND_JSON_PATH)) {
30783
30909
  try {
30784
- const fullBrand = JSON.parse(readFileSync45(BRAND_JSON_PATH, "utf-8"));
30910
+ const fullBrand = JSON.parse(readFileSync46(BRAND_JSON_PATH, "utf-8"));
30785
30911
  if (fullBrand.assets?.logo) brandLogoPath = `/brand/${fullBrand.assets.logo}`;
30786
30912
  brandIconPath = fullBrand.assets?.icon ? `/brand/${fullBrand.assets.icon}` : brandLogoPath;
30787
30913
  } catch {
@@ -30808,11 +30934,11 @@ var brandScript = `<script>window.__BRAND__=${JSON.stringify({
30808
30934
  var brandThemeColor = BRAND.defaultColors?.primary ?? "#000000";
30809
30935
  var brandBackgroundColor = BRAND.defaultColors?.background ?? "#ffffff";
30810
30936
  var brandAppIconsExist = [brandAppIcon192Path, brandAppIcon512Path, brandMaskableIconPath].every(
30811
- (p) => existsSync48(resolve43(process.cwd(), "public", p.replace(/^\//, "")))
30937
+ (p) => existsSync49(resolve45(process.cwd(), "public", p.replace(/^\//, "")))
30812
30938
  );
30813
30939
  var SW_SOURCE = (() => {
30814
30940
  try {
30815
- return readFileSync45(resolve43(process.cwd(), "public", "sw.js"), "utf-8");
30941
+ return readFileSync46(resolve45(process.cwd(), "public", "sw.js"), "utf-8");
30816
30942
  } catch {
30817
30943
  return null;
30818
30944
  }
@@ -30821,8 +30947,8 @@ function readInstalledVersion() {
30821
30947
  try {
30822
30948
  if (!PLATFORM_ROOT6) return "unknown";
30823
30949
  const versionFile = join52(PLATFORM_ROOT6, "config", `.${BRAND.hostname}-version`);
30824
- if (!existsSync48(versionFile)) return "unknown";
30825
- const content = readFileSync45(versionFile, "utf-8").trim();
30950
+ if (!existsSync49(versionFile)) return "unknown";
30951
+ const content = readFileSync46(versionFile, "utf-8").trim();
30826
30952
  return content || "unknown";
30827
30953
  } catch {
30828
30954
  return "unknown";
@@ -30833,7 +30959,7 @@ var versionScript = `<script>window.__MAXY_VERSION__=${JSON.stringify(INSTALLED_
30833
30959
  function cachedHtml(file) {
30834
30960
  let html = htmlCache.get(file);
30835
30961
  if (!html) {
30836
- html = readFileSync45(resolve43(process.cwd(), "public", file), "utf-8");
30962
+ html = readFileSync46(resolve45(process.cwd(), "public", file), "utf-8");
30837
30963
  const productNameEsc = escapeHtml(BRAND.productName);
30838
30964
  html = html.replace(/<title>([^<]*)<\/title>/, (_match, inner) => `<title>${escapeHtml(inner).replace(/Maxy/g, productNameEsc)}</title>`);
30839
30965
  html = html.replace('href="/favicon.ico"', `href="${escapeHtml(brandFaviconPath)}"`);
@@ -30855,8 +30981,8 @@ function loadBrandingCache(agentSlug) {
30855
30981
  const accountId = getDefaultAccountId();
30856
30982
  if (!accountId) return null;
30857
30983
  const cachePath = join52(configDir, "branding-cache", accountId, `${agentSlug}.json`);
30858
- if (!existsSync48(cachePath)) return null;
30859
- return JSON.parse(readFileSync45(cachePath, "utf-8"));
30984
+ if (!existsSync49(cachePath)) return null;
30985
+ return JSON.parse(readFileSync46(cachePath, "utf-8"));
30860
30986
  } catch {
30861
30987
  return null;
30862
30988
  }
@@ -30951,7 +31077,7 @@ app75.use("/vnc-popout.html", logViewerFetch);
30951
31077
  app75.get("/vnc-popout.html", (c) => {
30952
31078
  let html = htmlCache.get("vnc-popout.html");
30953
31079
  if (!html) {
30954
- html = readFileSync45(resolve43(process.cwd(), "public", "vnc-popout.html"), "utf-8");
31080
+ html = readFileSync46(resolve45(process.cwd(), "public", "vnc-popout.html"), "utf-8");
30955
31081
  const name = escapeHtml(BRAND.productName);
30956
31082
  html = html.replace("<title>Browser \u2014 Maxy</title>", `<title>${name}</title>`);
30957
31083
  html = html.replace("</head>", ` ${brandScript}
@@ -31104,9 +31230,9 @@ var httpServer = serve({ fetch: app75.fetch, port, hostname });
31104
31230
  console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
31105
31231
  {
31106
31232
  const reconcilePlatformRoot = process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, "..");
31107
- const reconcileScript = resolve43(reconcilePlatformRoot, "plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js");
31233
+ const reconcileScript = resolve45(reconcilePlatformRoot, "plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js");
31108
31234
  const runReconcile = (ctx) => {
31109
- if (!existsSync48(reconcileScript)) return;
31235
+ if (!existsSync49(reconcileScript)) return;
31110
31236
  try {
31111
31237
  const child = spawn3(process.execPath, [reconcileScript], {
31112
31238
  env: { ...process.env, PLATFORM_ROOT: reconcilePlatformRoot },
@@ -31145,14 +31271,14 @@ console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
31145
31271
  {
31146
31272
  const DREAM_CYCLE_SWEEP_INTERVAL_MS = 36e5;
31147
31273
  const dreamPlatformRoot = process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, "..");
31148
- const dreamSweepScript = resolve43(dreamPlatformRoot, "plugins/memory/mcp/dist/scripts/dream-cycle-sweep.js");
31274
+ const dreamSweepScript = resolve45(dreamPlatformRoot, "plugins/memory/mcp/dist/scripts/dream-cycle-sweep.js");
31149
31275
  registerLoop({
31150
31276
  name: "dream-cycle-sweep",
31151
31277
  intervalMs: DREAM_CYCLE_SWEEP_INTERVAL_MS,
31152
31278
  firstRunDelayMs: 3e4,
31153
31279
  detached: true,
31154
31280
  run: (ctx) => {
31155
- if (!existsSync48(dreamSweepScript)) return;
31281
+ if (!existsSync49(dreamSweepScript)) return;
31156
31282
  try {
31157
31283
  const child = spawn3(process.execPath, [dreamSweepScript], {
31158
31284
  env: { ...process.env, PLATFORM_ROOT: dreamPlatformRoot },
@@ -31169,10 +31295,10 @@ console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
31169
31295
  }
31170
31296
  {
31171
31297
  const outlookPlatformRoot = process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, "..");
31172
- const outlookScript = resolve43(outlookPlatformRoot, "plugins/outlook/mcp/dist/scripts/complete-registration.js");
31298
+ const outlookScript = resolve45(outlookPlatformRoot, "plugins/outlook/mcp/dist/scripts/complete-registration.js");
31173
31299
  const OUTLOOK_COMPLETE_INTERVAL_MS = 3e4;
31174
31300
  const runOutlookComplete = (ctx) => {
31175
- if (!existsSync48(outlookScript)) return;
31301
+ if (!existsSync49(outlookScript)) return;
31176
31302
  try {
31177
31303
  const child = spawn3(process.execPath, [outlookScript], {
31178
31304
  env: { ...process.env, PLATFORM_ROOT: outlookPlatformRoot },
@@ -31195,18 +31321,18 @@ console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
31195
31321
  }
31196
31322
  {
31197
31323
  const auditRoot = process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, "..");
31198
- const strandedAccountsDir = resolve43(auditRoot, "..", "data/accounts");
31324
+ const strandedAccountsDir = resolve45(auditRoot, "..", "data/accounts");
31199
31325
  const STRANDED_AUDIT_INTERVAL_MS = 3e5;
31200
31326
  const STRANDED_AGE_MS = 16 * 6e4;
31201
31327
  const STRANDED_UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
31202
31328
  const runStrandedAudit = () => {
31203
31329
  try {
31204
- if (!existsSync48(strandedAccountsDir)) return;
31330
+ if (!existsSync49(strandedAccountsDir)) return;
31205
31331
  const now = Date.now();
31206
- for (const name of readdirSync28(strandedAccountsDir)) {
31332
+ for (const name of readdirSync29(strandedAccountsDir)) {
31207
31333
  if (!STRANDED_UUID_RE.test(name)) continue;
31208
- const pendingPath2 = resolve43(strandedAccountsDir, name, "secrets/outlook/pending-devicecode.enc");
31209
- if (!existsSync48(pendingPath2)) continue;
31334
+ const pendingPath2 = resolve45(strandedAccountsDir, name, "secrets/outlook/pending-devicecode.enc");
31335
+ if (!existsSync49(pendingPath2)) continue;
31210
31336
  const ageMs2 = now - statSync25(pendingPath2).mtimeMs;
31211
31337
  if (ageMs2 > STRANDED_AGE_MS) {
31212
31338
  console.error(`[outlook-mcp] devicecode-stranded account=${name} ageSec=${Math.floor(ageMs2 / 1e3)}`);
@@ -31225,7 +31351,7 @@ console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
31225
31351
  }
31226
31352
  {
31227
31353
  const googleRoot = process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, "..");
31228
- const googleAccountsDir = resolve43(googleRoot, "..", "data/accounts");
31354
+ const googleAccountsDir = resolve45(googleRoot, "..", "data/accounts");
31229
31355
  const GOOGLE_PENDING_AUDIT_INTERVAL_MS = 3e5;
31230
31356
  const runGooglePendingAuditSafe = () => {
31231
31357
  try {
@@ -31240,10 +31366,10 @@ console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
31240
31366
  firstRunDelayMs: 27e3,
31241
31367
  run: runGooglePendingAuditSafe
31242
31368
  });
31243
- const googleAuditScript = resolve43(googleRoot, "plugins/google/mcp/dist/scripts/account-audit.js");
31369
+ const googleAuditScript = resolve45(googleRoot, "plugins/google/mcp/dist/scripts/account-audit.js");
31244
31370
  const GOOGLE_ACCOUNT_AUDIT_INTERVAL_MS = 36e5;
31245
31371
  const runGoogleAccountAudit = (ctx) => {
31246
- if (!existsSync48(googleAuditScript)) return;
31372
+ if (!existsSync49(googleAuditScript)) return;
31247
31373
  try {
31248
31374
  const child = spawn3(process.execPath, [googleAuditScript], {
31249
31375
  env: { ...process.env, PLATFORM_ROOT: googleRoot },
@@ -31336,7 +31462,7 @@ console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
31336
31462
  }
31337
31463
  {
31338
31464
  const publishPlatformRoot = process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, "..");
31339
- const publishScript = resolve43(publishPlatformRoot, "plugins/scheduling/mcp/dist/scripts/publish-availability.js");
31465
+ const publishScript = resolve45(publishPlatformRoot, "plugins/scheduling/mcp/dist/scripts/publish-availability.js");
31340
31466
  const PUBLISH_INTERVAL_MS = 3e5;
31341
31467
  const bookingAccounts = () => {
31342
31468
  try {
@@ -31347,7 +31473,7 @@ console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
31347
31473
  }
31348
31474
  };
31349
31475
  const spawnPublish = (account, ctx) => {
31350
- if (!existsSync48(publishScript)) return;
31476
+ if (!existsSync49(publishScript)) return;
31351
31477
  try {
31352
31478
  const child = spawn3(process.execPath, [publishScript], {
31353
31479
  env: {
@@ -31366,21 +31492,21 @@ console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
31366
31492
  }
31367
31493
  };
31368
31494
  const auditSnapshotAge = (account) => {
31369
- const availPath = resolve43(account.accountDir, "calendar-availability.json");
31495
+ const availPath = resolve45(account.accountDir, "calendar-availability.json");
31370
31496
  let hasBookingSite = false;
31371
31497
  try {
31372
- if (existsSync48(availPath)) {
31373
- const cfg = JSON.parse(readFileSync45(availPath, "utf-8"));
31498
+ if (existsSync49(availPath)) {
31499
+ const cfg = JSON.parse(readFileSync46(availPath, "utf-8"));
31374
31500
  hasBookingSite = typeof cfg.bookingDbName === "string" && cfg.bookingDbName.length > 0;
31375
31501
  }
31376
31502
  } catch {
31377
31503
  }
31378
31504
  if (!hasBookingSite) return;
31379
- const statePath = resolve43(account.accountDir, "state", "booking-availability", "last-publish.json");
31505
+ const statePath = resolve45(account.accountDir, "state", "booking-availability", "last-publish.json");
31380
31506
  let lastSuccessAt = null;
31381
- if (existsSync48(statePath)) {
31507
+ if (existsSync49(statePath)) {
31382
31508
  try {
31383
- const rec = JSON.parse(readFileSync45(statePath, "utf-8"));
31509
+ const rec = JSON.parse(readFileSync46(statePath, "utf-8"));
31384
31510
  lastSuccessAt = rec.lastSuccessAt ?? null;
31385
31511
  } catch {
31386
31512
  console.error(`[calendar-availability] op=audit accountId=${account.accountId} snapshotAgeMs=na reason=bad-state-file`);
@@ -31413,11 +31539,11 @@ startTimeEntryCensus(() => getSession());
31413
31539
  startLedgerCensus(() => getSession());
31414
31540
  {
31415
31541
  const auditPlatformRoot = process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, "..");
31416
- const auditScript = resolve43(auditPlatformRoot, "plugins/connector/mcp/dist/scripts/audit-connectors.js");
31542
+ const auditScript = resolve45(auditPlatformRoot, "plugins/connector/mcp/dist/scripts/audit-connectors.js");
31417
31543
  const auditLogDir = process.env.LOG_DIR ?? LOG_DIR;
31418
31544
  const CONNECTOR_AUDIT_INTERVAL_MS = 3e5;
31419
31545
  const runConnectorAudit = (ctx) => {
31420
- if (!existsSync48(auditScript)) return;
31546
+ if (!existsSync49(auditScript)) return;
31421
31547
  try {
31422
31548
  const child = spawn3(process.execPath, [auditScript], {
31423
31549
  env: { ...process.env, PLATFORM_ROOT: auditPlatformRoot, LOG_DIR: auditLogDir },
@@ -31537,11 +31663,11 @@ try {
31537
31663
  var ADMINUSER_RECONCILE_INTERVAL_MS = 60 * 60 * 1e3;
31538
31664
  async function runAdminUserReconcileTick() {
31539
31665
  try {
31540
- if (!existsSync48(USERS_FILE)) {
31666
+ if (!existsSync49(USERS_FILE)) {
31541
31667
  console.error("[adminuser-self-heal] skip reason=no-users-file");
31542
31668
  return;
31543
31669
  }
31544
- const usersRaw = readFileSync45(USERS_FILE, "utf-8").trim();
31670
+ const usersRaw = readFileSync46(USERS_FILE, "utf-8").trim();
31545
31671
  if (!usersRaw) {
31546
31672
  console.error("[adminuser-self-heal] skip reason=empty-users-file");
31547
31673
  return;
@@ -31593,8 +31719,8 @@ registerLoop({
31593
31719
  });
31594
31720
  var USERS_RECONCILE_INTERVAL_MS = 60 * 60 * 1e3;
31595
31721
  function countUsersRows() {
31596
- if (!existsSync48(USERS_FILE)) return 0;
31597
- const raw = readFileSync45(USERS_FILE, "utf-8").trim();
31722
+ if (!existsSync49(USERS_FILE)) return 0;
31723
+ const raw = readFileSync46(USERS_FILE, "utf-8").trim();
31598
31724
  if (!raw) return 0;
31599
31725
  const users = JSON.parse(raw);
31600
31726
  return users.filter((u) => typeof u.userId === "string").length;
@@ -31728,7 +31854,7 @@ if (bootAccountConfig?.whatsapp) {
31728
31854
  }
31729
31855
  init({
31730
31856
  configDir: configDirForWhatsApp,
31731
- platformRoot: resolve43(process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, "..")),
31857
+ platformRoot: resolve45(process.env.MAXY_PLATFORM_ROOT ?? join52(__dirname, "..")),
31732
31858
  accountConfig: bootAccountConfig,
31733
31859
  // Task 2074 — enrich with the sub-account name and fan out to every open
31734
31860
  // admin SSE stream. Fire-and-forget: the manager's persist path must not