@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-sitedesk-code",
3
- "version": "0.1.527",
3
+ "version": "0.1.529",
4
4
  "description": "Install SiteDesk — automated back office for independent building contractors",
5
5
  "bin": {
6
6
  "create-sitedesk-code": "./dist/index.js"
@@ -0,0 +1,21 @@
1
+ /** The `account.json` field holding the token. */
2
+ export declare const INGEST_TOKEN_FIELD: "ingestToken";
3
+ /** The account's current token, or null when none is set or it is malformed. */
4
+ export declare function readIngestToken(accountsDir: string, accountId: string): string | null;
5
+ /** Mint on first call; return the existing token unchanged on every call after. */
6
+ export declare function ensureIngestToken(accountsDir: string, accountId: string): {
7
+ token: string;
8
+ minted: boolean;
9
+ };
10
+ /** Issue a replacement, invalidating every extension install holding the old one. */
11
+ export declare function rotateIngestToken(accountsDir: string, accountId: string): string;
12
+ /**
13
+ * Reverse lookup: which account owns this token.
14
+ *
15
+ * Compared with `timingSafeEqual` because the token is a bearer secret and a
16
+ * length- or prefix-sensitive compare leaks it across repeated calls. The shape
17
+ * check runs first so a malformed input costs no disk reads at all — which is
18
+ * the common case, since a pasted conversation session key is a UUID.
19
+ */
20
+ export declare function resolveAccountIdByIngestToken(accountsDir: string, token: string): string | null;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwBA,kDAAkD;AAClD,eAAO,MAAM,kBAAkB,EAAG,aAAsB,CAAC;AA2CzD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrF;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAIpC;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhF;AA0BD;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAYf"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INGEST_TOKEN_FIELD = void 0;
4
+ exports.readIngestToken = readIngestToken;
5
+ exports.ensureIngestToken = ensureIngestToken;
6
+ exports.rotateIngestToken = rotateIngestToken;
7
+ exports.resolveAccountIdByIngestToken = resolveAccountIdByIngestToken;
8
+ /**
9
+ * Per-account LinkedIn ingest token (Task 2208).
10
+ *
11
+ * The admin browser's `session_key` cannot serve as the extension's credential.
12
+ * It lives in an in-memory Map with a 24h TTL (`platform/ui/app/lib/claude-agent/
13
+ * session-store.ts`), every service restart wipes it, and starting a new chat
14
+ * session rotates it. No cookie ever carried it either, so the documented
15
+ * "copy session_key from the cookie" instruction named something that does not
16
+ * exist and operators pasted conversation session keys instead.
17
+ *
18
+ * This token is a durable bearer secret held in `account.json`: minted once on
19
+ * request by the `linkedin-ingest-token` admin MCP tool, then stable across
20
+ * restarts, new sessions and time.
21
+ *
22
+ * Pure by construction. Callers supply `accountsDir`, and the reverse lookup
23
+ * takes the account-id list from `account-enumeration` as a parameter, so this
24
+ * module reads no environment and depends on no sibling lib.
25
+ */
26
+ const node_crypto_1 = require("node:crypto");
27
+ const node_fs_1 = require("node:fs");
28
+ const node_path_1 = require("node:path");
29
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
30
+ /** The `account.json` field holding the token. */
31
+ exports.INGEST_TOKEN_FIELD = "ingestToken";
32
+ const TOKEN_BYTES = 32;
33
+ /** 32 bytes hex-encoded. Anything else on disk is treated as absent. */
34
+ const TOKEN_RE = /^[0-9a-f]{64}$/;
35
+ function configPath(accountsDir, accountId) {
36
+ return (0, node_path_1.resolve)(accountsDir, accountId, "account.json");
37
+ }
38
+ /**
39
+ * null on a missing or unparseable config. Corruption is never a partial read:
40
+ * a half-understood account.json must not produce a token decision.
41
+ */
42
+ function readConfig(accountsDir, accountId) {
43
+ const path = configPath(accountsDir, accountId);
44
+ if (!(0, node_fs_1.existsSync)(path))
45
+ return null;
46
+ try {
47
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, "utf-8"));
48
+ return parsed !== null && typeof parsed === "object"
49
+ ? parsed
50
+ : null;
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ function writeToken(accountsDir, accountId) {
57
+ const config = readConfig(accountsDir, accountId);
58
+ if (!config) {
59
+ throw new Error(`[ingest-token] no readable account.json for accountId=${accountId}`);
60
+ }
61
+ const token = (0, node_crypto_1.randomBytes)(TOKEN_BYTES).toString("hex");
62
+ config[exports.INGEST_TOKEN_FIELD] = token;
63
+ (0, node_fs_1.writeFileSync)(configPath(accountsDir, accountId), JSON.stringify(config, null, 2) + "\n", "utf-8");
64
+ return token;
65
+ }
66
+ /** The account's current token, or null when none is set or it is malformed. */
67
+ function readIngestToken(accountsDir, accountId) {
68
+ const value = readConfig(accountsDir, accountId)?.[exports.INGEST_TOKEN_FIELD];
69
+ return typeof value === "string" && TOKEN_RE.test(value) ? value : null;
70
+ }
71
+ /** Mint on first call; return the existing token unchanged on every call after. */
72
+ function ensureIngestToken(accountsDir, accountId) {
73
+ const existing = readIngestToken(accountsDir, accountId);
74
+ if (existing)
75
+ return { token: existing, minted: false };
76
+ return { token: writeToken(accountsDir, accountId), minted: true };
77
+ }
78
+ /** Issue a replacement, invalidating every extension install holding the old one. */
79
+ function rotateIngestToken(accountsDir, accountId) {
80
+ return writeToken(accountsDir, accountId);
81
+ }
82
+ /**
83
+ * Every UUID-shaped account dir carrying an account.json, scanned fresh.
84
+ *
85
+ * Deliberately NOT `account-enumeration`'s `enumerateValidAccountIds`: that is a
86
+ * per-process cached list, and its own module doc records that the install-time
87
+ * invariant no longer holds because `account_create` provisions sub-accounts
88
+ * during a live session, so the cached list is stale for exactly the account
89
+ * that just minted a token. This endpoint runs once per pill click, at human
90
+ * rate, so a fresh readdir is the right trade against a token that authenticates
91
+ * only after a restart.
92
+ */
93
+ function listAccountIdsOnDisk(accountsDir) {
94
+ if (!(0, node_fs_1.existsSync)(accountsDir))
95
+ return [];
96
+ let entries;
97
+ try {
98
+ entries = (0, node_fs_1.readdirSync)(accountsDir);
99
+ }
100
+ catch {
101
+ return [];
102
+ }
103
+ return entries.filter((name) => UUID_RE.test(name) && (0, node_fs_1.existsSync)((0, node_path_1.resolve)(accountsDir, name, "account.json")));
104
+ }
105
+ /**
106
+ * Reverse lookup: which account owns this token.
107
+ *
108
+ * Compared with `timingSafeEqual` because the token is a bearer secret and a
109
+ * length- or prefix-sensitive compare leaks it across repeated calls. The shape
110
+ * check runs first so a malformed input costs no disk reads at all — which is
111
+ * the common case, since a pasted conversation session key is a UUID.
112
+ */
113
+ function resolveAccountIdByIngestToken(accountsDir, token) {
114
+ if (typeof token !== "string" || !TOKEN_RE.test(token))
115
+ return null;
116
+ const probe = Buffer.from(token, "utf-8");
117
+ for (const accountId of listAccountIdsOnDisk(accountsDir)) {
118
+ const stored = readIngestToken(accountsDir, accountId);
119
+ if (!stored)
120
+ continue;
121
+ const candidate = Buffer.from(stored, "utf-8");
122
+ if (candidate.length === probe.length && (0, node_crypto_1.timingSafeEqual)(candidate, probe)) {
123
+ return accountId;
124
+ }
125
+ }
126
+ return null;
127
+ }
128
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Per-account LinkedIn ingest token (Task 2208).
3
+ *
4
+ * The admin browser's `session_key` cannot serve as the extension's credential.
5
+ * It lives in an in-memory Map with a 24h TTL (`platform/ui/app/lib/claude-agent/
6
+ * session-store.ts`), every service restart wipes it, and starting a new chat
7
+ * session rotates it. No cookie ever carried it either, so the documented
8
+ * "copy session_key from the cookie" instruction named something that does not
9
+ * exist and operators pasted conversation session keys instead.
10
+ *
11
+ * This token is a durable bearer secret held in `account.json`: minted once on
12
+ * request by the `linkedin-ingest-token` admin MCP tool, then stable across
13
+ * restarts, new sessions and time.
14
+ *
15
+ * Pure by construction. Callers supply `accountsDir`, and the reverse lookup
16
+ * takes the account-id list from `account-enumeration` as a parameter, so this
17
+ * module reads no environment and depends on no sibling lib.
18
+ */
19
+ import { randomBytes, timingSafeEqual } from "node:crypto";
20
+ import { existsSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
21
+ import { resolve } from "node:path";
22
+
23
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
24
+
25
+ /** The `account.json` field holding the token. */
26
+ export const INGEST_TOKEN_FIELD = "ingestToken" as const;
27
+
28
+ const TOKEN_BYTES = 32;
29
+
30
+ /** 32 bytes hex-encoded. Anything else on disk is treated as absent. */
31
+ const TOKEN_RE = /^[0-9a-f]{64}$/;
32
+
33
+ function configPath(accountsDir: string, accountId: string): string {
34
+ return resolve(accountsDir, accountId, "account.json");
35
+ }
36
+
37
+ /**
38
+ * null on a missing or unparseable config. Corruption is never a partial read:
39
+ * a half-understood account.json must not produce a token decision.
40
+ */
41
+ function readConfig(accountsDir: string, accountId: string): Record<string, unknown> | null {
42
+ const path = configPath(accountsDir, accountId);
43
+ if (!existsSync(path)) return null;
44
+ try {
45
+ const parsed: unknown = JSON.parse(readFileSync(path, "utf-8"));
46
+ return parsed !== null && typeof parsed === "object"
47
+ ? (parsed as Record<string, unknown>)
48
+ : null;
49
+ } catch {
50
+ return null;
51
+ }
52
+ }
53
+
54
+ function writeToken(accountsDir: string, accountId: string): string {
55
+ const config = readConfig(accountsDir, accountId);
56
+ if (!config) {
57
+ throw new Error(`[ingest-token] no readable account.json for accountId=${accountId}`);
58
+ }
59
+ const token = randomBytes(TOKEN_BYTES).toString("hex");
60
+ config[INGEST_TOKEN_FIELD] = token;
61
+ writeFileSync(
62
+ configPath(accountsDir, accountId),
63
+ JSON.stringify(config, null, 2) + "\n",
64
+ "utf-8",
65
+ );
66
+ return token;
67
+ }
68
+
69
+ /** The account's current token, or null when none is set or it is malformed. */
70
+ export function readIngestToken(accountsDir: string, accountId: string): string | null {
71
+ const value = readConfig(accountsDir, accountId)?.[INGEST_TOKEN_FIELD];
72
+ return typeof value === "string" && TOKEN_RE.test(value) ? value : null;
73
+ }
74
+
75
+ /** Mint on first call; return the existing token unchanged on every call after. */
76
+ export function ensureIngestToken(
77
+ accountsDir: string,
78
+ accountId: string,
79
+ ): { token: string; minted: boolean } {
80
+ const existing = readIngestToken(accountsDir, accountId);
81
+ if (existing) return { token: existing, minted: false };
82
+ return { token: writeToken(accountsDir, accountId), minted: true };
83
+ }
84
+
85
+ /** Issue a replacement, invalidating every extension install holding the old one. */
86
+ export function rotateIngestToken(accountsDir: string, accountId: string): string {
87
+ return writeToken(accountsDir, accountId);
88
+ }
89
+
90
+ /**
91
+ * Every UUID-shaped account dir carrying an account.json, scanned fresh.
92
+ *
93
+ * Deliberately NOT `account-enumeration`'s `enumerateValidAccountIds`: that is a
94
+ * per-process cached list, and its own module doc records that the install-time
95
+ * invariant no longer holds because `account_create` provisions sub-accounts
96
+ * during a live session, so the cached list is stale for exactly the account
97
+ * that just minted a token. This endpoint runs once per pill click, at human
98
+ * rate, so a fresh readdir is the right trade against a token that authenticates
99
+ * only after a restart.
100
+ */
101
+ function listAccountIdsOnDisk(accountsDir: string): string[] {
102
+ if (!existsSync(accountsDir)) return [];
103
+ let entries: string[];
104
+ try {
105
+ entries = readdirSync(accountsDir);
106
+ } catch {
107
+ return [];
108
+ }
109
+ return entries.filter(
110
+ (name) => UUID_RE.test(name) && existsSync(resolve(accountsDir, name, "account.json")),
111
+ );
112
+ }
113
+
114
+ /**
115
+ * Reverse lookup: which account owns this token.
116
+ *
117
+ * Compared with `timingSafeEqual` because the token is a bearer secret and a
118
+ * length- or prefix-sensitive compare leaks it across repeated calls. The shape
119
+ * check runs first so a malformed input costs no disk reads at all — which is
120
+ * the common case, since a pasted conversation session key is a UUID.
121
+ */
122
+ export function resolveAccountIdByIngestToken(
123
+ accountsDir: string,
124
+ token: string,
125
+ ): string | null {
126
+ if (typeof token !== "string" || !TOKEN_RE.test(token)) return null;
127
+ const probe = Buffer.from(token, "utf-8");
128
+ for (const accountId of listAccountIdsOnDisk(accountsDir)) {
129
+ const stored = readIngestToken(accountsDir, accountId);
130
+ if (!stored) continue;
131
+ const candidate = Buffer.from(stored, "utf-8");
132
+ if (candidate.length === probe.length && timingSafeEqual(candidate, probe)) {
133
+ return accountId;
134
+ }
135
+ }
136
+ return null;
137
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "src"
6
+ },
7
+ "include": ["src"]
8
+ }
@@ -78,6 +78,11 @@ export interface DispatchDestination {
78
78
  channel: AgentChannel;
79
79
  destination: string;
80
80
  label: DispatchLabel;
81
+ /** Task 2204 — a display-only person name, attached by a CALLER that has a
82
+ * graph to read. `listDispatchDestinations` never sets it: this module reads
83
+ * account.json and nothing else, and `validateAgentDestination` never
84
+ * consults it. Absent means no `:Person` matched, which is not an error. */
85
+ name?: string;
81
86
  }
82
87
  /**
83
88
  * Every destination `accountId` may legally bind, computed from the same lists
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAC1C;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnG;wCACwC;AACxC,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,sCAAsC;AACtC,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;uCAEuC;AACvC,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,cAAc,CAAC;AAC3F,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG;IAAE,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAwDrG;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAOf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,MAAM,GAClB,mBAAmB,CAkBrB;AAED;;uDAEuD;AACvD,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAEjF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,mBAAmB,EAAE,CAsCxB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAC1C;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnG;wCACwC;AACxC,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,sCAAsC;AACtC,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;uCAEuC;AACvC,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,cAAc,CAAC;AAC3F,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG;IAAE,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAwDrG;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAOf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,MAAM,GAClB,mBAAmB,CAkBrB;AAED;;uDAEuD;AACvD,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAEjF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,aAAa,CAAC;IACrB;;;iFAG6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,mBAAmB,EAAE,CAsCxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -211,6 +211,11 @@ export interface DispatchDestination {
211
211
  channel: AgentChannel;
212
212
  destination: string;
213
213
  label: DispatchLabel;
214
+ /** Task 2204 — a display-only person name, attached by a CALLER that has a
215
+ * graph to read. `listDispatchDestinations` never sets it: this module reads
216
+ * account.json and nothing else, and `validateAgentDestination` never
217
+ * consults it. Absent means no `:Person` matched, which is not an error. */
218
+ name?: string;
214
219
  }
215
220
 
216
221
  /**
@@ -10,8 +10,8 @@
10
10
  "pdf-lib": "^1.17.1"
11
11
  },
12
12
  "scripts": {
13
- "build": "tsc -p lib/account-schema-regions/tsconfig.json && tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-lifeline/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/account-scope/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/ledger-core/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/active-rules/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json && tsc -p lib/storage-broker/tsconfig.json && tsc -p lib/routine-templates/tsconfig.json && tsc -p lib/agent-dispatch-rule/tsconfig.json && tsc -p services/claude-session-manager/tsconfig.json && tsc -p services/whatsapp-channel/tsconfig.json && tsc -p services/webchat-channel/tsconfig.json && tsc -p services/telegram-channel/tsconfig.json && NODE_OPTIONS='--max-old-space-size=8192' tsc -b plugins/*/mcp/tsconfig.json",
14
- "build:lib": "tsc -p lib/account-schema-regions/tsconfig.json && tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-lifeline/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/account-scope/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/ledger-core/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/active-rules/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json && tsc -p lib/storage-broker/tsconfig.json && tsc -p lib/routine-templates/tsconfig.json && tsc -p lib/agent-dispatch-rule/tsconfig.json",
13
+ "build": "tsc -p lib/account-schema-regions/tsconfig.json && tsc -p lib/account-ingest-token/tsconfig.json && tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-lifeline/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/account-scope/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/ledger-core/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/active-rules/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json && tsc -p lib/storage-broker/tsconfig.json && tsc -p lib/routine-templates/tsconfig.json && tsc -p lib/agent-dispatch-rule/tsconfig.json && tsc -p services/claude-session-manager/tsconfig.json && tsc -p services/whatsapp-channel/tsconfig.json && tsc -p services/webchat-channel/tsconfig.json && tsc -p services/telegram-channel/tsconfig.json && NODE_OPTIONS='--max-old-space-size=8192' tsc -b plugins/*/mcp/tsconfig.json",
14
+ "build:lib": "tsc -p lib/account-schema-regions/tsconfig.json && tsc -p lib/account-ingest-token/tsconfig.json && tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-lifeline/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/account-scope/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/ledger-core/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/active-rules/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json && tsc -p lib/storage-broker/tsconfig.json && tsc -p lib/routine-templates/tsconfig.json && tsc -p lib/agent-dispatch-rule/tsconfig.json",
15
15
  "gen:canonical-tools": "node scripts/generate-canonical-tool-names.mjs",
16
16
  "build:memory": "tsc -p plugins/memory/mcp/tsconfig.json",
17
17
  "build:contacts": "tsc -p plugins/contacts/mcp/tsconfig.json",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "admin",
3
- "description": "Platform administration plugin. Provides system-status, public-hostname (deterministic Cloudflare public-URL resolver, single call returning the operator's canonical hostname so agents never guess property names on :CloudflareHostname nodes), admin-hostname (the admin-host twin of public-hostname — resolves the host that serves /calendar and the rest of the admin shell behind sign-in from the same ingress + alias + operator files, so agents point the operator at the admin /calendar URL instead of the public host that 404s it), publish-site (move an extracted static-site tree under <accountDir>/sites/<slug>/, emit one canonical path slug, and refresh llms.txt at the site root — typed refusal taxonomy replaces the prior skill-prose contract), brand-settings, account-manage, capabilities-here (deterministic install-introspection — returns enabledPlugins, tier, models, installed platform + premium specialists, registered Claude Code agent types, and the brand block as a single JSON object; the canonical tool for grounding any claim about what is enabled on the current account), account-update, the multi-account managed-service lifecycle tools (account_list, account_create, account_delete, account_purge, account_channel_routing, account_channel_routing_set — one Rubytech operator hosting N client accounts on one house install; create/delete/purge are operator-only and purge is two-step with a typed confirmation; account_create requires the client business owner's real name (ownerName), refusing a blank or the placeholder \"Owner\" and seeding it onto the sub-account's owner AdminUser and owner Person, and requires the owner's IANA timezone (timezone) — refusing a blank or a non-IANA value — seeding it onto the owner UserProfile marked owner-set so scheduling reads the owner's real zone from the start rather than the box's server default, while a managing house admin (its userId) is optional — when supplied it is validated as a live house admin and recorded as the sub-account's managingAdminUserId, and when omitted the sub-account is unmanaged and its passive-intake tasks route to the install's primary admin; account_reassign_admin repoints a client sub-account's managing admin to another live house admin (the repair path for a dangling managingAdminUserId, or to record one on an unmanaged account); account_roster is the canonical per-account identity view — one row per sub-account giving business name, role, the managing house admin resolved to a name with status (assigned/absent/dangling), the business owner from the graph with status (named/nameless), and the WhatsApp account-manager binding if any, each field carrying what it means and does not (managing admin is the responsible house team member not the owner; account manager is WhatsApp routing only with no admin rights), so the agent never stitches admin-list + account.json + whatsapp-config; account_set_owner_name names (or corrects) a client sub-account's business owner by writing the owned Person — the canonical name source — refusing a blank or the placeholder \"Owner\", the guarded repair for a nameless owner (the standing identity-audit op=nameless-owned-person detector); account_channel_routing_set repoints the install's single WhatsApp/Telegram inbound stream to a different sub-account), admin-add (refuses on a client sub-account, where admin access is already install-wide so a per-operator seat grants nothing — the sub-account's one identity, its business owner, is set at account creation; the house account, where operators hold PIN logins and admins[] rows, is unchanged), admin-remove (refuses to remove a house admin who still manages one or more client sub-accounts, naming them so the operator reassigns each with account_reassign_admin first — never silently orphans them), admin-list, admin-update-pin, agent-list, agent-config-read, logs-read, cpu-triage-start and cpu-triage-read (the two-call device CPU diagnostic — start spawns a detached sampling run across at least one full 120s reconcile cycle and returns a run handle immediately, read returns running/complete/failed with the per-core distribution; no admin tool blocks through a sampling window, and no spot reading is obtainable), plugin-read, skill-load (one-call resolve+read for SKILL.md by skill name, the canonical primitive for loading a named skill; plugin-read remains the reader for references/* and PLUGIN.md), skill-search (free-text intent → skill resolver: ranks every plugin skill's SKILL.md name+description against a query and returns the top owners with their canonical skills/<slug>/ path, so intent→skill mapping survives the available-skills menu leaving context after a compaction), store-skill (deterministic write counterpart to plugin-read; persists operator-authored skills as plugin files under the active account), session-reset, session-resume, wifi, and action-approval tools (action-pending, action-approve, action-reject, action-edit) for managing the SiteDesk platform.",
3
+ "description": "Platform administration plugin. Provides system-status, public-hostname (deterministic Cloudflare public-URL resolver, single call returning the operator's canonical hostname so agents never guess property names on :CloudflareHostname nodes), admin-hostname (the admin-host twin of public-hostname — resolves the host that serves /calendar and the rest of the admin shell behind sign-in from the same ingress + alias + operator files, so agents point the operator at the admin /calendar URL instead of the public host that 404s it), publish-site (move an extracted static-site tree under <accountDir>/sites/<slug>/, emit one canonical path slug, and refresh llms.txt at the site root — typed refusal taxonomy replaces the prior skill-prose contract), brand-settings, account-manage, capabilities-here (deterministic install-introspection — returns enabledPlugins, tier, models, installed platform + premium specialists, registered Claude Code agent types, and the brand block as a single JSON object; the canonical tool for grounding any claim about what is enabled on the current account), linkedin-ingest-token (returns the account's durable LinkedIn ingest token — the one credential the SiteDesk LinkedIn Ingest Chrome extension needs in its options page; minted on first call then stable across restarts and new chat sessions, and never a conversation session key nor the admin browser's session_key, which the ingest route rejects; action='rotate' replaces it and invalidates every existing extension install), account-update, the multi-account managed-service lifecycle tools (account_list, account_create, account_delete, account_purge, account_channel_routing, account_channel_routing_set — one Rubytech operator hosting N client accounts on one house install; create/delete/purge are operator-only and purge is two-step with a typed confirmation; account_create requires the client business owner's real name (ownerName), refusing a blank or the placeholder \"Owner\" and seeding it onto the sub-account's owner AdminUser and owner Person, and requires the owner's IANA timezone (timezone) — refusing a blank or a non-IANA value — seeding it onto the owner UserProfile marked owner-set so scheduling reads the owner's real zone from the start rather than the box's server default, while a managing house admin (its userId) is optional — when supplied it is validated as a live house admin and recorded as the sub-account's managingAdminUserId, and when omitted the sub-account is unmanaged and its passive-intake tasks route to the install's primary admin; account_reassign_admin repoints a client sub-account's managing admin to another live house admin (the repair path for a dangling managingAdminUserId, or to record one on an unmanaged account); account_roster is the canonical per-account identity view — one row per sub-account giving business name, role, the managing house admin resolved to a name with status (assigned/absent/dangling), the business owner from the graph with status (named/nameless), and the WhatsApp account-manager binding if any, each field carrying what it means and does not (managing admin is the responsible house team member not the owner; account manager is WhatsApp routing only with no admin rights), so the agent never stitches admin-list + account.json + whatsapp-config; account_set_owner_name names (or corrects) a client sub-account's business owner by writing the owned Person — the canonical name source — refusing a blank or the placeholder \"Owner\", the guarded repair for a nameless owner (the standing identity-audit op=nameless-owned-person detector); account_channel_routing_set repoints the install's single WhatsApp/Telegram inbound stream to a different sub-account), admin-add (refuses on a client sub-account, where admin access is already install-wide so a per-operator seat grants nothing — the sub-account's one identity, its business owner, is set at account creation; the house account, where operators hold PIN logins and admins[] rows, is unchanged), admin-remove (refuses to remove a house admin who still manages one or more client sub-accounts, naming them so the operator reassigns each with account_reassign_admin first — never silently orphans them), admin-list, admin-update-pin, agent-list, agent-config-read, logs-read, cpu-triage-start and cpu-triage-read (the two-call device CPU diagnostic — start spawns a detached sampling run across at least one full 120s reconcile cycle and returns a run handle immediately, read returns running/complete/failed with the per-core distribution; no admin tool blocks through a sampling window, and no spot reading is obtainable), plugin-read, skill-load (one-call resolve+read for SKILL.md by skill name, the canonical primitive for loading a named skill; plugin-read remains the reader for references/* and PLUGIN.md), skill-search (free-text intent → skill resolver: ranks every plugin skill's SKILL.md name+description against a query and returns the top owners with their canonical skills/<slug>/ path, so intent→skill mapping survives the available-skills menu leaving context after a compaction), store-skill (deterministic write counterpart to plugin-read; persists operator-authored skills as plugin files under the active account), session-reset, session-resume, wifi, and action-approval tools (action-pending, action-approve, action-reject, action-edit) for managing the SiteDesk platform.",
4
4
  "version": "0.1.0",
5
5
  "author": {
6
6
  "name": "Rubytech LLC"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: admin
3
3
  surface: platform
4
- description: "Platform administration plugin. Provides system-status, public-hostname (deterministic Cloudflare public-URL resolver, single call returning the operator's canonical hostname so agents never guess property names on :CloudflareHostname nodes), admin-hostname (the admin-host twin of public-hostname — resolves the host that serves /calendar and the rest of the admin shell behind sign-in from the same ingress + alias + operator files, so agents point the operator at the admin /calendar URL instead of the public host that 404s it), publish-site (move an extracted static-site tree under <accountDir>/sites/<slug>/, emit one canonical path slug, and refresh llms.txt at the site root — typed refusal taxonomy replaces the prior skill-prose contract), brand-settings, account-manage, capabilities-here (deterministic install-introspection — returns enabledPlugins, tier, models, installed platform + premium specialists, registered Claude Code agent types, and the brand block as a single JSON object; the canonical tool for grounding any claim about what is enabled on the current account), account-update, the multi-account managed-service lifecycle tools (account_list, account_create, account_delete, account_purge, account_channel_routing, account_channel_routing_set — one Rubytech operator hosting N client accounts on one house install; create/delete/purge are operator-only and purge is two-step with a typed confirmation; account_create requires the client business owner's real name (ownerName), refusing a blank or the placeholder "Owner" and seeding it onto the sub-account's owner AdminUser and owner Person, and requires the owner's IANA timezone (timezone) — refusing a blank or a non-IANA value — seeding it onto the owner UserProfile marked owner-set so scheduling reads the owner's real zone from the start rather than the box's server default, while a managing house admin (its userId) is optional — when supplied it is validated as a live house admin and recorded as the sub-account's managingAdminUserId, and when omitted the sub-account is unmanaged and its passive-intake tasks route to the install's primary admin; account_reassign_admin repoints a client sub-account's managing admin to another live house admin (the repair path for a dangling managingAdminUserId, or to record one on an unmanaged account); account_roster is the canonical per-account identity view — one row per sub-account giving business name, role, the managing house admin resolved to a name with status (assigned/absent/dangling), the business owner from the graph with status (named/nameless), and the WhatsApp account-manager binding if any, each field carrying what it means and does not (managing admin is the responsible house team member not the owner; account manager is WhatsApp routing only with no admin rights), so the agent never stitches admin-list + account.json + whatsapp-config; account_set_owner_name names (or corrects) a client sub-account's business owner by writing the owned Person — the canonical name source — refusing a blank or the placeholder "Owner", the guarded repair for a nameless owner (the standing identity-audit op=nameless-owned-person detector); account_channel_routing_set repoints the install's single WhatsApp/Telegram inbound stream to a different sub-account), admin-add (refuses on a client sub-account, where admin access is already install-wide so a per-operator seat grants nothing — the sub-account's one identity, its business owner, is set at account creation; the house account, where operators hold PIN logins and admins[] rows, is unchanged), admin-remove (refuses to remove a house admin who still manages one or more client sub-accounts, naming them so the operator reassigns each with account_reassign_admin first — never silently orphans them), admin-list, admin-update-pin, agent-list, agent-config-read, logs-read, cpu-triage-start and cpu-triage-read (the two-call device CPU diagnostic — start spawns a detached sampling run across at least one full 120s reconcile cycle and returns a run handle immediately, read returns running/complete/failed with the per-core distribution; no admin tool blocks through a sampling window, and no spot reading is obtainable), plugin-read, skill-load (one-call resolve+read for SKILL.md by skill name, the canonical primitive for loading a named skill; plugin-read remains the reader for references/* and PLUGIN.md), skill-search (free-text intent → skill resolver: ranks every plugin skill's SKILL.md name+description against a query and returns the top owners with their canonical skills/<slug>/ path, so intent→skill mapping survives the available-skills menu leaving context after a compaction), store-skill (deterministic write counterpart to plugin-read; persists operator-authored skills as plugin files under the active account), session-reset, session-resume, wifi, and action-approval tools (action-pending, action-approve, action-reject, action-edit) for managing the SiteDesk platform."
4
+ description: "Platform administration plugin. Provides system-status, public-hostname (deterministic Cloudflare public-URL resolver, single call returning the operator's canonical hostname so agents never guess property names on :CloudflareHostname nodes), admin-hostname (the admin-host twin of public-hostname — resolves the host that serves /calendar and the rest of the admin shell behind sign-in from the same ingress + alias + operator files, so agents point the operator at the admin /calendar URL instead of the public host that 404s it), publish-site (move an extracted static-site tree under <accountDir>/sites/<slug>/, emit one canonical path slug, and refresh llms.txt at the site root — typed refusal taxonomy replaces the prior skill-prose contract), brand-settings, account-manage, capabilities-here (deterministic install-introspection — returns enabledPlugins, tier, models, installed platform + premium specialists, registered Claude Code agent types, and the brand block as a single JSON object; the canonical tool for grounding any claim about what is enabled on the current account), linkedin-ingest-token (returns the account's durable LinkedIn ingest token — the one credential the SiteDesk LinkedIn Ingest Chrome extension needs in its options page; minted on first call then stable across restarts and new chat sessions, and never a conversation session key nor the admin browser's session_key, which the ingest route rejects; action='rotate' replaces it and invalidates every existing extension install), account-update, the multi-account managed-service lifecycle tools (account_list, account_create, account_delete, account_purge, account_channel_routing, account_channel_routing_set — one Rubytech operator hosting N client accounts on one house install; create/delete/purge are operator-only and purge is two-step with a typed confirmation; account_create requires the client business owner's real name (ownerName), refusing a blank or the placeholder "Owner" and seeding it onto the sub-account's owner AdminUser and owner Person, and requires the owner's IANA timezone (timezone) — refusing a blank or a non-IANA value — seeding it onto the owner UserProfile marked owner-set so scheduling reads the owner's real zone from the start rather than the box's server default, while a managing house admin (its userId) is optional — when supplied it is validated as a live house admin and recorded as the sub-account's managingAdminUserId, and when omitted the sub-account is unmanaged and its passive-intake tasks route to the install's primary admin; account_reassign_admin repoints a client sub-account's managing admin to another live house admin (the repair path for a dangling managingAdminUserId, or to record one on an unmanaged account); account_roster is the canonical per-account identity view — one row per sub-account giving business name, role, the managing house admin resolved to a name with status (assigned/absent/dangling), the business owner from the graph with status (named/nameless), and the WhatsApp account-manager binding if any, each field carrying what it means and does not (managing admin is the responsible house team member not the owner; account manager is WhatsApp routing only with no admin rights), so the agent never stitches admin-list + account.json + whatsapp-config; account_set_owner_name names (or corrects) a client sub-account's business owner by writing the owned Person — the canonical name source — refusing a blank or the placeholder "Owner", the guarded repair for a nameless owner (the standing identity-audit op=nameless-owned-person detector); account_channel_routing_set repoints the install's single WhatsApp/Telegram inbound stream to a different sub-account), admin-add (refuses on a client sub-account, where admin access is already install-wide so a per-operator seat grants nothing — the sub-account's one identity, its business owner, is set at account creation; the house account, where operators hold PIN logins and admins[] rows, is unchanged), admin-remove (refuses to remove a house admin who still manages one or more client sub-accounts, naming them so the operator reassigns each with account_reassign_admin first — never silently orphans them), admin-list, admin-update-pin, agent-list, agent-config-read, logs-read, cpu-triage-start and cpu-triage-read (the two-call device CPU diagnostic — start spawns a detached sampling run across at least one full 120s reconcile cycle and returns a run handle immediately, read returns running/complete/failed with the per-core distribution; no admin tool blocks through a sampling window, and no spot reading is obtainable), plugin-read, skill-load (one-call resolve+read for SKILL.md by skill name, the canonical primitive for loading a named skill; plugin-read remains the reader for references/* and PLUGIN.md), skill-search (free-text intent → skill resolver: ranks every plugin skill's SKILL.md name+description against a query and returns the top owners with their canonical skills/<slug>/ path, so intent→skill mapping survives the available-skills menu leaving context after a compaction), store-skill (deterministic write counterpart to plugin-read; persists operator-authored skills as plugin files under the active account), session-reset, session-resume, wifi, and action-approval tools (action-pending, action-approve, action-reject, action-edit) for managing the SiteDesk platform."
5
5
  account-owned-files: [{"file": "webchat-channel-bindings.json", "description": "Routes this account's inbound admin webchat messages. Written by the session manager's webchat-channel-store."}, {"file": "wa-channel-bindings.json", "description": "Routes this account's inbound WhatsApp messages. Written by the session manager's wa-channel-store, which runs on every brand whether or not the whatsapp plugin ships."}, {"file": "telegram-channel-bindings.json", "description": "Routes this account's inbound Telegram messages. Written by the session manager's telegram-channel-store, which runs on every brand whether or not the telegram plugin ships."}, {"file": "canonical-webchat-session.json", "description": "Pins the account's canonical webchat session. Written by the admin UI server."}, {"file": "session-titles.json", "description": "Operator renames of sessions. Written by the session manager's title stores."}, {"file": "agents-disabled.json", "description": "Names the agents the operator switched off. Written by the admin agents route; provision reads it to re-apply the disables and never creates it."}]
6
6
  tools:
7
7
  - name: system-status
@@ -32,6 +32,10 @@ tools:
32
32
  publicAllowlist: false
33
33
  adminAllowlist: true
34
34
  riskClass: read
35
+ - name: linkedin-ingest-token
36
+ publicAllowlist: false
37
+ adminAllowlist: true
38
+ riskClass: write_local
35
39
  - name: account-update
36
40
  publicAllowlist: false
37
41
  adminAllowlist: false
@@ -9,10 +9,15 @@
9
9
  # 5. Write to projects/Acme/deploy/sources/a.txt -> BLOCK over-deep
10
10
  # 6. Write to projects/Acme/deploy/a.txt -> BLOCK over-deep
11
11
  # 7. Write to whim/x.txt (novel top-level) -> BLOCK top-level
12
- # 8. Write to an absolute path outside the account dir -> ALLOW (not our concern)
12
+ # 8. Write to an absolute path outside the accounts root -> ALLOW (not our concern)
13
13
  # 9. NotebookEdit over-deep (notebook_path) -> BLOCK over-deep
14
14
  # 10. Empty stdin (cannot inspect) -> BLOCK fail-closed
15
15
  # 11. Allowed-set parse matches the documented set -> assertion
16
+ # 12. Edit into a SIBLING account under the accounts root -> BLOCK cross-account
17
+ # 13. Same, with HOUSE_ADMIN_SCOPE set (no house exception)-> BLOCK cross-account
18
+ # 14. Same, from an account with no SCHEMA.md -> BLOCK cross-account
19
+ # 15. Write into a sibling dir with no account.json -> ALLOW (not an account)
20
+ # 16. Symlink under this account resolving into a sibling -> BLOCK cross-account
16
21
  set -u
17
22
 
18
23
  HOOK="$(cd "$(dirname "$0")/.." && pwd)/fs-schema-guard.sh"
@@ -37,6 +42,30 @@ cp "$TEMPLATE" "$ACCT_D/SCHEMA.md"
37
42
  awk '1; /^```allowed-top-level$/{print "jobs"}' "$ACCT_D/SCHEMA.md" > "$ACCT_D/SCHEMA.md.tmp" && mv "$ACCT_D/SCHEMA.md.tmp" "$ACCT_D/SCHEMA.md"
38
43
  mkdir -p "$ACCT_D/jobs/5-oaktree/Quotations"
39
44
 
45
+ # A two-account accounts root, modelling data/accounts/<id>/. $ACCT and $ACCT_D
46
+ # above are independent mktemp dirs with no shared account parent, so the
47
+ # cross-account cases need their own root. Each account carries the account.json
48
+ # marker the guard uses to recognise a sibling; `notanaccount` deliberately does
49
+ # not, so the guard must leave it alone.
50
+ ROOT=$(mktemp -d)
51
+ trap 'rm -rf "$ACCT" "$ACCT_D" "$ROOT"' EXIT
52
+ ACCT_OWN="$ROOT/68b50910-own"
53
+ ACCT_SIB="$ROOT/5e99bba5-sibling"
54
+ mkdir -p "$ACCT_OWN/documents" "$ACCT_SIB/sites/public" "$ROOT/notanaccount/sites"
55
+ cp "$TEMPLATE" "$ACCT_OWN/SCHEMA.md"
56
+ cp "$TEMPLATE" "$ACCT_SIB/SCHEMA.md"
57
+ printf '{"accountId":"68b50910-own","role":"client"}' > "$ACCT_OWN/account.json"
58
+ printf '{"accountId":"5e99bba5-sibling","role":"house"}' > "$ACCT_SIB/account.json"
59
+ # An account with NO SCHEMA.md: the missing-schema fail-open governs its own
60
+ # layout only and must not open the cross-account hole.
61
+ ACCT_NOSCHEMA="$ROOT/f4fccf17-noschema"
62
+ mkdir -p "$ACCT_NOSCHEMA"
63
+ printf '{"accountId":"f4fccf17-noschema","role":"client"}' > "$ACCT_NOSCHEMA/account.json"
64
+ # A symlink inside the own account pointing at the sibling. Containment must be
65
+ # tested on the resolved path: a lexical check treats this as an own-account path
66
+ # and the write lands in the sibling anyway.
67
+ ln -s "$ACCT_SIB/sites" "$ACCT_OWN/documents/escape"
68
+
40
69
  PASS=0; FAIL=0
41
70
  # Run one case in the account dir as cwd.
42
71
  # $1 name $2 stdin $3 expected_exit $4 expected_log_re ("" = none)
@@ -53,6 +82,22 @@ run_case() {
53
82
  else echo "FAIL: $name (exit=$actual, want $exp; log want /$re/)" >&2; FAIL=$((FAIL+1)); fi
54
83
  }
55
84
 
85
+ # Same contract as run_case, with HOUSE_ADMIN_SCOPE set for the single call. The
86
+ # block must not consult it: a house session is fenced on the native path exactly
87
+ # like a sub-account session, and the gated file tools are its cross-account route.
88
+ run_case_house() {
89
+ local name="$1" stdin="$2" exp="$3" re="$4" acct="$5" ef actual
90
+ ef=$(mktemp)
91
+ ( cd "$acct" && printf '%s' "$stdin" | HOUSE_ADMIN_SCOPE=install-wide bash "$HOOK" >/dev/null 2>"$ef" )
92
+ actual=$?
93
+ local sc; sc=$(cat "$ef"); rm -f "$ef"
94
+ local ok=1
95
+ [ "$actual" -eq "$exp" ] || ok=0
96
+ if [ -n "$re" ] && ! printf '%s' "$sc" | grep -Eq "$re"; then ok=0; fi
97
+ if [ $ok -eq 1 ]; then echo "PASS: $name (exit=$actual)"; PASS=$((PASS+1));
98
+ else echo "FAIL: $name (exit=$actual, want $exp; log want /$re/)" >&2; FAIL=$((FAIL+1)); fi
99
+ }
100
+
56
101
  mkenv() { printf '{"hook_event_name":"PreToolUse","tool_name":"%s","tool_input":{"%s":"%s"}}' "$1" "$2" "$3"; }
57
102
 
58
103
  run_case "non-write allow" "$(mkenv Bash command 'ls')" 0 ""
@@ -172,5 +217,41 @@ NOREASON=$(awk '/^```agent-denied-top-level$/{f=1;next} /^```$/{f=0} f' "$ACCT/S
172
217
  if [ -z "$NOREASON" ]; then echo "PASS: deny-set reasons"; PASS=$((PASS+1));
173
218
  else echo "FAIL: deny-set reasons missing for [$NOREASON]" >&2; FAIL=$((FAIL+1)); fi
174
219
 
220
+ # Cross-account: another account's data dir is refused for every session, and the
221
+ # refusal names the target so the log says which account was reached for.
222
+ run_case "xacct edit blocked" \
223
+ "$(mkenv Edit file_path "$ACCT_SIB/sites/public/index.html")" \
224
+ 2 'reason=cross-account target=5e99bba5' "$ACCT_OWN"
225
+
226
+ # A house-scoped session is fenced on the native path exactly like a sub-account
227
+ # one: the gated file tools are the audited cross-account route.
228
+ run_case_house "xacct blocked with house scope" \
229
+ "$(mkenv Edit file_path "$ACCT_SIB/sites/public/index.html")" \
230
+ 2 'reason=cross-account' "$ACCT_OWN"
231
+
232
+ # The block precedes the schema parse, so an account with no SCHEMA.md still
233
+ # cannot reach a sibling — the fail-open governs its own layout only.
234
+ run_case "xacct blocked without own schema" \
235
+ "$(mkenv Write file_path "$ACCT_SIB/sites/public/x.html")" \
236
+ 2 'reason=cross-account' "$ACCT_NOSCHEMA"
237
+
238
+ # A directory that merely shares the accounts root is not an account, so it is
239
+ # not this hook's business.
240
+ run_case "sibling without account marker allowed" \
241
+ "$(mkenv Write file_path "$ROOT/notanaccount/sites/x.html")" \
242
+ 0 "" "$ACCT_OWN"
243
+
244
+ # The own-account path is unchanged by the new verdict.
245
+ run_case "own account absolute write allowed" \
246
+ "$(mkenv Write file_path "$ACCT_OWN/documents/a.pdf")" \
247
+ 0 "" "$ACCT_OWN"
248
+
249
+ # A path that is lexically inside this account but resolves into a sibling is
250
+ # still cross-account. Containment is tested on the resolved path, so a symlink
251
+ # planted under the own account does not become a way through.
252
+ run_case "symlink into a sibling blocked" \
253
+ "$(mkenv Edit file_path "$ACCT_OWN/documents/escape/index.html")" \
254
+ 2 'reason=cross-account target=5e99bba5' "$ACCT_OWN"
255
+
175
256
  echo "----- $PASS passed, $FAIL failed -----"
176
257
  [ $FAIL -eq 0 ]