@rubytech/create-maxy-code 0.1.343 → 0.1.345

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 (193) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/neo4j/schema.cypher +9 -5
  3. package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
  4. package/payload/platform/plugins/admin/PLUGIN.md +4 -1
  5. package/payload/platform/plugins/admin/mcp/dist/__tests__/admin-hostname.test.d.ts +2 -0
  6. package/payload/platform/plugins/admin/mcp/dist/__tests__/admin-hostname.test.d.ts.map +1 -0
  7. package/payload/platform/plugins/admin/mcp/dist/__tests__/admin-hostname.test.js +175 -0
  8. package/payload/platform/plugins/admin/mcp/dist/__tests__/admin-hostname.test.js.map +1 -0
  9. package/payload/platform/plugins/admin/mcp/dist/index.js +33 -0
  10. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  11. package/payload/platform/plugins/admin/mcp/dist/lib/admin-hostname.d.ts +15 -0
  12. package/payload/platform/plugins/admin/mcp/dist/lib/admin-hostname.d.ts.map +1 -0
  13. package/payload/platform/plugins/admin/mcp/dist/lib/admin-hostname.js +86 -0
  14. package/payload/platform/plugins/admin/mcp/dist/lib/admin-hostname.js.map +1 -0
  15. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +12 -8
  16. package/payload/platform/plugins/cloudflare/skills/calendar-site/SKILL.md +5 -5
  17. package/payload/platform/plugins/docs/references/calendar-booking.md +9 -7
  18. package/payload/platform/plugins/docs/references/internals.md +2 -0
  19. package/payload/platform/plugins/scheduling/PLUGIN.md +13 -0
  20. package/payload/platform/plugins/scheduling/mcp/dist/index.js +19 -5
  21. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  22. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-write.test.d.ts +2 -0
  23. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-write.test.d.ts.map +1 -0
  24. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-write.test.js +118 -0
  25. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-write.test.js.map +1 -0
  26. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/schedule-classify.test.d.ts +2 -0
  27. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/schedule-classify.test.d.ts.map +1 -0
  28. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/schedule-classify.test.js +59 -0
  29. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/schedule-classify.test.js.map +1 -0
  30. package/payload/platform/plugins/scheduling/mcp/dist/lib/meeting-write.d.ts +35 -0
  31. package/payload/platform/plugins/scheduling/mcp/dist/lib/meeting-write.d.ts.map +1 -0
  32. package/payload/platform/plugins/scheduling/mcp/dist/lib/meeting-write.js +123 -0
  33. package/payload/platform/plugins/scheduling/mcp/dist/lib/meeting-write.js.map +1 -0
  34. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-classify.d.ts +23 -0
  35. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-classify.d.ts.map +1 -0
  36. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-classify.js +38 -0
  37. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-classify.js.map +1 -0
  38. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts +11 -1
  39. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
  40. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +34 -2
  41. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  42. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  43. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
  44. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  45. package/payload/platform/templates/specialists/agents/personal-assistant.md +2 -0
  46. package/payload/server/public/assets/AdminLoginScreens-CpE_Nf5z.js +1 -0
  47. package/payload/server/public/assets/AdminShell-D3N3Aq04.js +1 -0
  48. package/payload/server/public/assets/Checkbox-DQGuYIRH.js +1 -0
  49. package/payload/server/public/assets/{admin-auth-fetch-9JCQ2FFm.css → OperatorConversations-DLfQEw1r.css} +1 -1
  50. package/payload/server/public/assets/OperatorConversations-g7aAQCDn.js +9 -0
  51. package/payload/server/public/assets/admin-BU0dY3_T.js +1 -0
  52. package/payload/server/public/assets/{arc-Crkz45LN.js → arc-DpkSQNto.js} +1 -1
  53. package/payload/server/public/assets/architecture-YZFGNWBL-Csj53u5T.js +1 -0
  54. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-C9JThHgP.js → architectureDiagram-Q4EWVU46-Bw7Yq8O9.js} +1 -1
  55. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DpsV_HXT.js → blockDiagram-DXYQGD6D-BBtJQFSz.js} +1 -1
  56. package/payload/server/public/assets/browser-B5ytGJAE.js +1 -0
  57. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CTm_6aKi.js → c4Diagram-AHTNJAMY-JAMgxzOr.js} +1 -1
  58. package/payload/server/public/assets/calendar-DFywoZ75.js +1 -0
  59. package/payload/server/public/assets/channel-BUQUAUts.js +1 -0
  60. package/payload/server/public/assets/chat-cxTK--65.js +1 -0
  61. package/payload/server/public/assets/{chunk-2KRD3SAO-1KSJW1q6.js → chunk-2KRD3SAO-eDugsc2L.js} +1 -1
  62. package/payload/server/public/assets/{chunk-336JU56O-C3t08Ip-.js → chunk-336JU56O-BXfECwdC.js} +2 -2
  63. package/payload/server/public/assets/chunk-426QAEUC-CdknReB2.js +1 -0
  64. package/payload/server/public/assets/{chunk-4BX2VUAB-kl1ze33n.js → chunk-4BX2VUAB-CByVeKCY.js} +1 -1
  65. package/payload/server/public/assets/{chunk-4TB4RGXK-DxpoDoHg.js → chunk-4TB4RGXK-CpY0DcUB.js} +1 -1
  66. package/payload/server/public/assets/{chunk-55IACEB6-WM9VJzha.js → chunk-55IACEB6-C3YxgyIb.js} +1 -1
  67. package/payload/server/public/assets/{chunk-5FUZZQ4R-CLH63ZH3.js → chunk-5FUZZQ4R-Bc0d7j8A.js} +1 -1
  68. package/payload/server/public/assets/{chunk-5PVQY5BW-DCTb8IAT.js → chunk-5PVQY5BW-CTUGMRIa.js} +1 -1
  69. package/payload/server/public/assets/{chunk-67CJDMHE-BSYzyaoH.js → chunk-67CJDMHE-CbdPnpLd.js} +1 -1
  70. package/payload/server/public/assets/{chunk-7N4EOEYR-CarJ7O2P.js → chunk-7N4EOEYR-Cjl2kevz.js} +1 -1
  71. package/payload/server/public/assets/{chunk-AA7GKIK3-DTNLyBpH.js → chunk-AA7GKIK3-BgozIh5p.js} +1 -1
  72. package/payload/server/public/assets/{chunk-BSJP7CBP-BFmHflHY.js → chunk-BSJP7CBP-6Ufq45NW.js} +1 -1
  73. package/payload/server/public/assets/{chunk-CIAEETIT-BpjG0IzU.js → chunk-CIAEETIT-BhhYuMnA.js} +1 -1
  74. package/payload/server/public/assets/{chunk-EDXVE4YY-2fSowhlW.js → chunk-EDXVE4YY-BfaJ3yDD.js} +1 -1
  75. package/payload/server/public/assets/{chunk-ENJZ2VHE-ClcranGV.js → chunk-ENJZ2VHE-C7-hIGVC.js} +1 -1
  76. package/payload/server/public/assets/{chunk-FMBD7UC4-DLq4BItQ.js → chunk-FMBD7UC4-BQvvyocF.js} +1 -1
  77. package/payload/server/public/assets/{chunk-FOC6F5B3-B9QI3Guz.js → chunk-FOC6F5B3-C6rBDOxH.js} +1 -1
  78. package/payload/server/public/assets/{chunk-ICPOFSXX-BAr-Mv1Z.js → chunk-ICPOFSXX-BjOJvkVa.js} +2 -2
  79. package/payload/server/public/assets/{chunk-K5T4RW27-8PvAHasY.js → chunk-K5T4RW27-kKowRHhn.js} +1 -1
  80. package/payload/server/public/assets/{chunk-KGLVRYIC--aGaDRH5.js → chunk-KGLVRYIC-bAEV_5eH.js} +1 -1
  81. package/payload/server/public/assets/{chunk-LIHQZDEY-BrWj7mw2.js → chunk-LIHQZDEY-BLvsQAfg.js} +1 -1
  82. package/payload/server/public/assets/{chunk-ORNJ4GCN-kYQmkMTi.js → chunk-ORNJ4GCN-BzYZfPZ7.js} +1 -1
  83. package/payload/server/public/assets/{chunk-OYMX7WX6-CIsryCWH.js → chunk-OYMX7WX6-CL7WRw42.js} +1 -1
  84. package/payload/server/public/assets/chunk-QZHKN3VN-8tHoEDE9.js +1 -0
  85. package/payload/server/public/assets/{chunk-U2HBQHQK-68X653e3.js → chunk-U2HBQHQK-BdcVGjau.js} +1 -1
  86. package/payload/server/public/assets/{chunk-X2U36JSP-v3v9soX3.js → chunk-X2U36JSP-C0CL_Jin.js} +1 -1
  87. package/payload/server/public/assets/{chunk-XPW4576I-CW5DPpop.js → chunk-XPW4576I-CsV7CUxH.js} +1 -1
  88. package/payload/server/public/assets/{chunk-YZCP3GAM-B1VP7Rl2.js → chunk-YZCP3GAM-Cj0_fLkR.js} +1 -1
  89. package/payload/server/public/assets/{chunk-ZZ45TVLE-DiJrujNY.js → chunk-ZZ45TVLE-DLuquyoY.js} +1 -1
  90. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BEGZ3DLg.js +1 -0
  91. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DsLxnm5U.js +1 -0
  92. package/payload/server/public/assets/clone-uiXbH_kh.js +1 -0
  93. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-BscXxLMc.js → cose-bilkent-S5V4N54A-BU3EOLXX.js} +1 -1
  94. package/payload/server/public/assets/{dagre-MBv6WlCS.js → dagre-BRq8C9NU.js} +1 -1
  95. package/payload/server/public/assets/{dagre-KV5264BT-DVgGlTQ1.js → dagre-KV5264BT-CoCAYhFc.js} +1 -1
  96. package/payload/server/public/assets/data-BVPOzSZ7.js +1 -0
  97. package/payload/server/public/assets/{diagram-5BDNPKRD-BmhCaO0a.js → diagram-5BDNPKRD-DBy5GNaQ.js} +1 -1
  98. package/payload/server/public/assets/{diagram-G4DWMVQ6-ChU9L8vz.js → diagram-G4DWMVQ6-l93MsBLv.js} +1 -1
  99. package/payload/server/public/assets/{diagram-MMDJMWI5-Oy409Zc_.js → diagram-MMDJMWI5-BIfXkVlL.js} +1 -1
  100. package/payload/server/public/assets/{diagram-TYMM5635-Cn1YByqk.js → diagram-TYMM5635-BuTJLBny.js} +1 -1
  101. package/payload/server/public/assets/{erDiagram-SMLLAGMA-e17yfLvr.js → erDiagram-SMLLAGMA-BwPxWDbP.js} +1 -1
  102. package/payload/server/public/assets/{flatten-Cl1Bc3dR.js → flatten-DtM0XAMt.js} +1 -1
  103. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-Dqt7sCVZ.js → flowDiagram-DWJPFMVM-BhPtHXMR.js} +1 -1
  104. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-B4IhwS2r.js → ganttDiagram-T4ZO3ILL-BlXjprdD.js} +1 -1
  105. package/payload/server/public/assets/gitGraph-7Q5UKJZL-D_2KrZoP.js +1 -0
  106. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BDw-PKcI.js → gitGraphDiagram-UUTBAWPF-BW36BDiu.js} +1 -1
  107. package/payload/server/public/assets/{graph-B8h8YAJu.js → graph-D0fPx1nX.js} +3 -3
  108. package/payload/server/public/assets/graph-labels-C4dkheQ8.js +1 -0
  109. package/payload/server/public/assets/{graphlib-DPIYk_sg.js → graphlib-Bjg3Tq-k.js} +1 -1
  110. package/payload/server/public/assets/info-OMHHGYJF-BP2TNwQ4.js +1 -0
  111. package/payload/server/public/assets/infoDiagram-42DDH7IO-D1kDtBOY.js +2 -0
  112. package/payload/server/public/assets/{isEmpty-D1pGOD1J.js → isEmpty-D__iH1WQ.js} +1 -1
  113. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BRIHsB3G.js → ishikawaDiagram-UXIWVN3A-CmB-bA_O.js} +1 -1
  114. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-aKNgmoHd.js → journeyDiagram-VCZTEJTY-Bt1fJKmc.js} +1 -1
  115. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-cwBwT-nm.js → kanban-definition-6JOO6SKY-DVbksz_J.js} +1 -1
  116. package/payload/server/public/assets/{line-DVtVRzUA.js → line-BX2Ugx3B.js} +1 -1
  117. package/payload/server/public/assets/{linear-DtoOFPO2.js → linear-Bdc-QJWI.js} +1 -1
  118. package/payload/server/public/assets/{mermaid-parser.core-G7YD_zO3.js → mermaid-parser.core-qv1e-J5x.js} +2 -2
  119. package/payload/server/public/assets/{mermaid.core-DpFyndHm.js → mermaid.core-C_d9YQX_.js} +3 -3
  120. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CYXK_Pvz.js → mindmap-definition-QFDTVHPH-DwKGvF14.js} +1 -1
  121. package/payload/server/public/assets/operator-DyrF6PQi.js +1 -0
  122. package/payload/server/public/assets/{ordinal-CBZeH4Yp.js → ordinal-BRQ5CzZY.js} +1 -1
  123. package/payload/server/public/assets/packet-4T2RLAQJ-BDg8fde8.js +1 -0
  124. package/payload/server/public/assets/page-BPIaNNW1.js +30 -0
  125. package/payload/server/public/assets/pie-ZZUOXDRM-CXDyYMkZ.js +1 -0
  126. package/payload/server/public/assets/{pieDiagram-DEJITSTG-DFo4N6WH.js → pieDiagram-DEJITSTG-dUvQC_4S.js} +1 -1
  127. package/payload/server/public/assets/public-BrIaS6m3.js +1 -0
  128. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-BlH5iIhl.js → quadrantDiagram-34T5L4WZ-CebX_oPa.js} +1 -1
  129. package/payload/server/public/assets/radar-PYXPWWZC-xen_zv8F.js +1 -0
  130. package/payload/server/public/assets/{reduce-PuPlFPRX.js → reduce-CkcXOmmJ.js} +1 -1
  131. package/payload/server/public/assets/{requirementDiagram-MS252O5E-D5WLty8A.js → requirementDiagram-MS252O5E-h2euIqGj.js} +1 -1
  132. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-vB85IxHG.js → sankeyDiagram-XADWPNL6-DCii3fkF.js} +1 -1
  133. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-Cxraa0Ee.js → sequenceDiagram-FGHM5R23-CQSGYmlq.js} +1 -1
  134. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BBPssYBx.js → stateDiagram-FHFEXIEX-CVtU0iXH.js} +1 -1
  135. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BywcXjtb.js +1 -0
  136. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-Bgk6PT62.js → timeline-definition-GMOUNBTQ-ChvsBltI.js} +1 -1
  137. package/payload/server/public/assets/treeView-SZITEDCU-2FBf_1It.js +1 -0
  138. package/payload/server/public/assets/treemap-W4RFUUIX-BDdb30P-.js +1 -0
  139. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-B-APTs3L.js → vennDiagram-DHZGUBPP-e-EZiiba.js} +1 -1
  140. package/payload/server/public/assets/wardley-RL74JXVD-BLq5MxjR.js +1 -0
  141. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-CkXJSs_i.js → wardleyDiagram-NUSXRM2D-4JaRn1s5.js} +1 -1
  142. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-BkyshPMV.js → xychartDiagram-5P7HB3ND-kxwmCNuM.js} +1 -1
  143. package/payload/server/public/browser.html +4 -5
  144. package/payload/server/public/calendar.html +4 -3
  145. package/payload/server/public/chat.html +6 -7
  146. package/payload/server/public/data.html +4 -5
  147. package/payload/server/public/graph.html +6 -7
  148. package/payload/server/public/index.html +6 -7
  149. package/payload/server/public/operator.html +8 -9
  150. package/payload/server/public/public.html +6 -7
  151. package/payload/server/server.js +135 -6
  152. package/payload/server/public/assets/AdminLoginScreens-KVvngpT2.js +0 -1
  153. package/payload/server/public/assets/AdminShell-DDKZhJRo.js +0 -1
  154. package/payload/server/public/assets/Checkbox-BJlS0tR2.js +0 -1
  155. package/payload/server/public/assets/OperatorConversations-_P3_KmAW.js +0 -1
  156. package/payload/server/public/assets/admin-BTQWgciK.js +0 -1
  157. package/payload/server/public/assets/admin-auth-fetch-BMOxrEnl.js +0 -9
  158. package/payload/server/public/assets/architecture-YZFGNWBL-Dma4Bgha.js +0 -1
  159. package/payload/server/public/assets/browser-CpOL9dN0.js +0 -1
  160. package/payload/server/public/assets/calendar-dRLyhghx.js +0 -1
  161. package/payload/server/public/assets/channel-B_-5bau1.js +0 -1
  162. package/payload/server/public/assets/chat-prZCVWvK.js +0 -1
  163. package/payload/server/public/assets/chunk-426QAEUC-Dirxdwjh.js +0 -1
  164. package/payload/server/public/assets/chunk-QZHKN3VN-Duipo1kI.js +0 -1
  165. package/payload/server/public/assets/classDiagram-6PBFFD2Q-B3kX5SuB.js +0 -1
  166. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D761c7Lr.js +0 -1
  167. package/payload/server/public/assets/clone-BrhFv6Tb.js +0 -1
  168. package/payload/server/public/assets/data-CeUT45cU.js +0 -1
  169. package/payload/server/public/assets/gitGraph-7Q5UKJZL-BCQAqtLy.js +0 -1
  170. package/payload/server/public/assets/graph-labels-BFrQ5kyH.js +0 -1
  171. package/payload/server/public/assets/info-OMHHGYJF-qU7hK50T.js +0 -1
  172. package/payload/server/public/assets/infoDiagram-42DDH7IO-KGdcJeTs.js +0 -2
  173. package/payload/server/public/assets/operator-D3fRwMfE.js +0 -1
  174. package/payload/server/public/assets/packet-4T2RLAQJ-DiU2yS9m.js +0 -1
  175. package/payload/server/public/assets/page-D0hQWIIV.js +0 -30
  176. package/payload/server/public/assets/pie-ZZUOXDRM-zHUKKlVv.js +0 -1
  177. package/payload/server/public/assets/public-DX4z0sCJ.js +0 -1
  178. package/payload/server/public/assets/radar-PYXPWWZC-BUnVoaPg.js +0 -1
  179. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BWmmUwDt.js +0 -1
  180. package/payload/server/public/assets/treeView-SZITEDCU-C3Y-Q52h.js +0 -1
  181. package/payload/server/public/assets/treemap-W4RFUUIX-Dk0qZpAg.js +0 -1
  182. package/payload/server/public/assets/wardley-RL74JXVD-BAWI02OA.js +0 -1
  183. /package/payload/server/public/assets/{_baseFor-brRjpUOX.js → _baseFor-SRtUHe7G.js} +0 -0
  184. /package/payload/server/public/assets/{array-BGFCBI0e.js → array-BpsnM-Py.js} +0 -0
  185. /package/payload/server/public/assets/{cytoscape.esm-TvRJ2tGX.js → cytoscape.esm-D4Rl1H5h.js} +0 -0
  186. /package/payload/server/public/assets/{defaultLocale-CRZydyG6.js → defaultLocale-C7sQPl-O.js} +0 -0
  187. /package/payload/server/public/assets/{dist-B0CkUodR.js → dist-CtUNt3w8.js} +0 -0
  188. /package/payload/server/public/assets/{init-B8gtcn7T.js → init-BydxaDEV.js} +0 -0
  189. /package/payload/server/public/assets/{katex-RxgSu_dy.js → katex-B0fVeDx4.js} +0 -0
  190. /package/payload/server/public/assets/{path-DZF-JdEe.js → path-jlWYQ2i9.js} +0 -0
  191. /package/payload/server/public/assets/{preload-helper-CQ36nxok.js → preload-helper-uTix4PVD.js} +0 -0
  192. /package/payload/server/public/assets/{rough.esm-6CnTHTkH.js → rough.esm-c4PR5shF.js} +0 -0
  193. /package/payload/server/public/assets/{src-CR_MU8uy.js → src-48kCpScq.js} +0 -0
@@ -0,0 +1,15 @@
1
+ export type AdminHostnameSource = "cloudflared-config.yml";
2
+ export interface AdminHostnameHit {
3
+ hostname: string;
4
+ isApex: boolean;
5
+ source: AdminHostnameSource;
6
+ }
7
+ export interface AdminHostnameMiss {
8
+ hostname: null;
9
+ isApex: null;
10
+ source: null;
11
+ reason: "no-admin-host";
12
+ }
13
+ export type AdminHostnameResult = AdminHostnameHit | AdminHostnameMiss;
14
+ export declare function resolveAdminHostname(configDir: string): AdminHostnameResult;
15
+ //# sourceMappingURL=admin-hostname.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-hostname.d.ts","sourceRoot":"","sources":["../../src/lib/admin-hostname.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAuDvE,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAU3E"}
@@ -0,0 +1,86 @@
1
+ // admin-hostname resolver — the admin-host twin of public-hostname.ts.
2
+ //
3
+ // Where public-hostname returns the operator's public-facing host, this
4
+ // returns the admin host: the surface that serves /calendar and the rest of
5
+ // the admin shell behind sign-in. The two are different hosts, often on
6
+ // different base domains (public `maxy.chat`, admin `admin.maxy.bot`), so the
7
+ // admin host can never be string-derived from the public one. It is read from
8
+ // the same files cloudflared and platform/ui/server already trust to route.
9
+ //
10
+ // The admin host is defined exactly as classifyHost() defines it in
11
+ // platform/ui/server/public-host-gate.ts: the ingress hostname that routes to
12
+ // the brand UI over http and is neither public (public. prefix or an
13
+ // alias-domains.json entry) nor operator (an operator-domains.json entry).
14
+ // Only http:// ingress rules are considered, so ssh:// and tcp:// rows (off-LAN
15
+ // SSH/SMB) can never be mistaken for the admin host. When more than one
16
+ // admin-class host exists, the first in file order wins — admin is listed
17
+ // first by every documented config.
18
+ import { existsSync, readFileSync } from "node:fs";
19
+ import { join } from "node:path";
20
+ function isExcluded(host) {
21
+ return host === "localhost" || host.endsWith(".local");
22
+ }
23
+ // Apex = single domain (e.g. "maxy.bot"), with optional `www.` prefix stripped.
24
+ function isApex(host) {
25
+ const stripped = host.startsWith("www.") ? host.slice(4) : host;
26
+ return stripped.split(".").length === 2;
27
+ }
28
+ // Read the ingress hostnames whose service is an http:// URL — the brand UI
29
+ // surfaces. cloudflared writes each rule as a `- hostname:` line followed by a
30
+ // `service:` line; the catch-all `- service: http_status:404` carries no
31
+ // hostname. ssh:// and tcp:// rows are dropped here so they never reach the
32
+ // admin-class filter.
33
+ function readUiIngressHostnames(configDir) {
34
+ const path = join(configDir, "cloudflared", "config.yml");
35
+ if (!existsSync(path))
36
+ return [];
37
+ let yaml;
38
+ try {
39
+ yaml = readFileSync(path, "utf-8");
40
+ }
41
+ catch {
42
+ return [];
43
+ }
44
+ const hosts = [];
45
+ let pendingHost = null;
46
+ for (const line of yaml.split("\n")) {
47
+ const hostMatch = line.match(/^\s*-\s*hostname:\s*(\S+)/);
48
+ if (hostMatch) {
49
+ pendingHost = hostMatch[1];
50
+ continue;
51
+ }
52
+ const serviceMatch = line.match(/^\s*service:\s*(\S+)/);
53
+ if (serviceMatch && pendingHost) {
54
+ if (serviceMatch[1].startsWith("http://"))
55
+ hosts.push(pendingHost);
56
+ pendingHost = null;
57
+ }
58
+ }
59
+ return hosts.filter((h) => !isExcluded(h));
60
+ }
61
+ function readStringArray(configDir, file) {
62
+ const path = join(configDir, file);
63
+ if (!existsSync(path))
64
+ return new Set();
65
+ try {
66
+ const parsed = JSON.parse(readFileSync(path, "utf-8"));
67
+ if (!Array.isArray(parsed))
68
+ return new Set();
69
+ return new Set(parsed.filter((h) => typeof h === "string" && h.length > 0));
70
+ }
71
+ catch {
72
+ return new Set();
73
+ }
74
+ }
75
+ export function resolveAdminHostname(configDir) {
76
+ const uiHosts = readUiIngressHostnames(configDir);
77
+ const alias = readStringArray(configDir, "alias-domains.json");
78
+ const operator = readStringArray(configDir, "operator-domains.json");
79
+ const isPublic = (h) => h.startsWith("public.") || alias.has(h);
80
+ const chosen = uiHosts.find((h) => !isPublic(h) && !operator.has(h));
81
+ if (chosen !== undefined) {
82
+ return { hostname: chosen, isApex: isApex(chosen), source: "cloudflared-config.yml" };
83
+ }
84
+ return { hostname: null, isApex: null, source: null, reason: "no-admin-host" };
85
+ }
86
+ //# sourceMappingURL=admin-hostname.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-hostname.js","sourceRoot":"","sources":["../../src/lib/admin-hostname.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: platform-architecture
3
3
  description: Use when grounding any documented-surface claim about what Maxy ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
4
- content-hash: sha256:fd3531bf43b1c57e87512398e56b517563f2a5b44b28a00250dceeab8a68a92c
4
+ content-hash: sha256:6d66051a9fd247fcf18cfa9c2e47da21f109c58c043b0a12c697e3a804dfaae8
5
5
  brand: maxy-code
6
6
  product-name: Maxy
7
7
  ---
@@ -1886,19 +1886,21 @@ Source: https://docs.getmaxy.com/calendar-booking.md
1886
1886
 
1887
1887
  # Calendar and booking
1888
1888
 
1889
- Maxy gives you a calendar of your meetings and a public page where people can book time with you. They are two sides of the same data: the meetings the calendar shows are the same meetings a booking creates.
1889
+ Maxy gives you a calendar of your schedule and a public page where people can book time with you. The calendar and the booking page are two sides of the same data: a booking someone makes shows up on your calendar straight away.
1890
1890
 
1891
1891
  ## The admin calendar
1892
1892
 
1893
- Open `/calendar` on your Maxy address (the same sign-in as the dashboard). It shows your meetings in four views:
1893
+ Open `/calendar` on your Maxy address (the same sign-in as the dashboard). It shows your schedule in four views:
1894
1894
 
1895
- - **Day** and **Week** show an hour grid with each meeting as a timed block.
1896
- - **Month** shows the familiar month grid with a few meetings per day.
1897
- - **Year** shows twelve small months; days with a meeting carry a dot, and clicking a month opens it.
1895
+ - **Day** and **Week** show an hour grid with each timed entry as a block.
1896
+ - **Month** shows the familiar month grid with a few entries per day.
1897
+ - **Year** shows twelve small months; days with something on them carry a dot, and clicking a month opens it.
1898
1898
 
1899
- Use **Today** and the arrows to move around, and the view buttons to switch. The calendar reads your live meetings, so anything in your graph (imported from a calendar export, or created by a booking) appears here. The view is read-only: it shows meetings, it does not create or edit them.
1899
+ Use **Today** and the arrows to move around, and the view buttons to switch. The calendar reads everything time-bound in your graph: meetings imported from a calendar export or created by a booking, appointments Maxy schedules for you in chat, and tasks that have a due date (shown on their day).
1900
1900
 
1901
- The meetings come from the same `:Meeting` records the rest of Maxy uses, scoped to your account.
1901
+ Click any entry to open its details: the full title, time, location, and who is attending. For a booked meeting you can also edit its title, time, or location, or delete it, and the grid updates straight away. Appointments Maxy schedules and due-dated tasks are shown for detail only and are changed where they are created, not here. New meetings are still made by a booking or by asking Maxy in chat, not from the calendar.
1902
+
1903
+ Everything on the calendar comes from records the rest of Maxy already uses, scoped to your account.
1902
1904
 
1903
1905
  ## The public booking page
1904
1906
 
@@ -3340,6 +3342,8 @@ Maxy hosts a generic per-account static-tree publish surface at `https://public.
3340
3342
 
3341
3343
  **Deterministic public-hostname surface.** The `<public-host>` half of the URL the operator pastes is resolved by the `mcp__plugin_admin_admin__public-hostname` MCP tool. It reads `<configDir>/cloudflared/config.yml` (ingress list) then falls back to `<configDir>/alias-domains.json` — the same two files `cloudflared` and `platform/ui/server/index.ts`'s `isPublicHost()` already trust to route. Returns `{hostname, isApex, source}` on hit (`source` is `"cloudflared-config.yml"` or `"alias-domains.json"`), or `{hostname:null, source:null, reason:"no-tunnel"}` on miss. Tiebreak: apex wins over subdomain (single-label, or `www.<apex>` stripped). `publish-site` step 6 calls it after the move and emits the full URL (`https://<hostname><path-slug>`) in the same turn. Graph queries are no longer involved — any earlier graph-backed resolver returned `(none)` on accounts bootstrapped without `cloudflare-task-tracker.ts` writes (laptop Real Agent, manual `cloudflared` setup), the `llm-framing-deterministic` recurrence class. The graph-mcp shim additionally runs a sequential envelope-warning probe on every read response — when Neo4j emits `gql_status` codes matching `^0[12]N5\d$` (e.g. `01N52` "property does not exist"), the shim stitches them into a prefix content block on the response so property-name misses surface to the agent inline instead of returning silent `[]`. Probe failure is best-effort: the upstream response forwards unchanged with `[mcp:graph] probe-error`.
3342
3344
 
3345
+ **Deterministic admin-hostname surface.** The admin shell — `/calendar` and every other authenticated route — is served only on the admin host, never the public host (`/calendar` returns `404 Not found` on a public host). The `mcp__plugin_admin_admin__admin-hostname` MCP tool is the admin-host twin of `public-hostname`: it resolves the host an operator should be pointed at for an admin-surface URL. It reads `<configDir>/cloudflared/config.yml` ingress, keeps only rules whose `service:` is an `http://` URL (so `ssh://`/`tcp://` off-LAN rows are excluded), and returns the first such hostname that is neither public (`public.` prefix or a `<configDir>/alias-domains.json` entry) nor operator (a `<configDir>/operator-domains.json` entry) — exactly the admin class of `classifyHost()` in `platform/ui/server/public-host-gate.ts`. Returns `{hostname, isApex, source:"cloudflared-config.yml"}` on hit, or `{hostname:null, source:null, reason:"no-admin-host"}` on miss. The admin host is often a different base domain from the public host (public `maxy.chat`, admin `admin.maxy.bot`), so it can never be string-derived from the public one — the `calendar-site` skill calls this tool to surface the admin `/calendar` link instead of guessing.
3346
+
3343
3347
  ### Cross-tab session rotation
3344
3348
 
3345
3349
  When you click "New conversation" in the chat tab, Maxy mints a fresh admin session key on the server and clears the old one. Sibling admin tabs (`/graph`, `/data`) opened in the same browser keep working without re-login: the chat tab broadcasts the new key on a same-origin channel so each sibling tab updates its captured key instantly, and any in-flight admin request that 401s with the rotation-orphan code retries once after re-reading the latest key from per-tab storage. If neither path recovers (browser locked down, second 401 after retry, session expired), the tab shows a single banner — "Your admin session was renewed in another tab. Click to reload." — and one click sends you back through login. No silent 401s; no re-clicking through the same trash icon hoping it sticks. See `.docs/web-chat.md` "Cross-tab rotation contract" for the wire-level `code` taxonomy and observability surfaces.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: calendar-site
3
- description: Stand up a public "book time with me" page on a custom domain, backed by the account calendar. This is the skill behind "give me a booking link", "put up a Calendly-style page", "let people book a call with me", "deploy the booking site", and "set my availability for bookings". It writes the account availability window (one duration, one weekly window, one buffer), assembles the booking page plus its D1 capture into the canonical Pages tree, provisions the D1 bookings table, deploys to Cloudflare Pages via the site-deploy skill on the booking domain, and gates done on a live booking page whose open slots load from the brand tunnel and whose test submission lands in D1. The admin calendar that shows the resulting meetings is served separately at /calendar on the brand tunnel and needs no deploy. Admin-run; holds Bash and the account secrets surface.
3
+ description: Stand up a public "book time with me" page on a custom domain, backed by the account calendar. This is the skill behind "give me a booking link", "put up a Calendly-style page", "let people book a call with me", "deploy the booking site", and "set my availability for bookings". It writes the account availability window (one duration, one weekly window, one buffer), assembles the booking page plus its D1 capture into the canonical Pages tree, provisions the D1 bookings table, deploys to Cloudflare Pages via the site-deploy skill on the booking domain, and gates done on a live booking page whose open slots load from the brand tunnel and whose test submission lands in D1. The admin calendar that shows the resulting meetings is served separately at /calendar on the admin host (resolve it with the admin-hostname tool, never the public host, which 404s /calendar) and needs no deploy. Admin-run; holds Bash and the account secrets surface.
4
4
  ---
5
5
 
6
6
  # Stand up a calendar booking site
@@ -13,15 +13,15 @@ This is an outcome contract, not a copy of the Pages mechanics. The deploy, cust
13
13
 
14
14
  - It produces the **public booking page** on a custom domain (the booking domain), backed by a D1 `bookings` table.
15
15
  - It writes the **availability config** the platform free/busy endpoint reads.
16
- - It does **not** deploy the admin calendar. The four-view admin calendar (Day, Week, Month, Year) is served by the install itself at `https://<brand-tunnel-domain>/calendar`, behind the existing admin sign-in. Point the operator there once the booking site is live; there is nothing to deploy for it.
16
+ - It does **not** deploy the admin calendar. The four-view admin calendar (Day, Week, Month, Year) is served by the install itself at `https://<admin-host>/calendar`, behind the existing admin sign-in. The `<admin-host>` is **not** the public host; `/calendar` 404s on the public host. Resolve the admin host with the `admin-hostname` tool (the admin-host twin of `public-hostname`; it reads the cloudflared ingress and returns the host that is neither public nor operator), then point the operator at `https://<admin-host>/calendar` once the booking site is live. There is nothing to deploy for it.
17
17
 
18
18
  ## The two routes and why only one is deployed
19
19
 
20
- A booking visitor and the admin look at the same `:Meeting` data from opposite sides:
20
+ A booking visitor and the admin look at the booking from opposite sides — the visitor sees only free/busy, the admin sees the booked meeting in full alongside the rest of their schedule:
21
21
 
22
22
  | Surface | Where it lives | Gate | Reads |
23
23
  |---|---|---|---|
24
- | Admin calendar (4 views) | the install, at `/calendar` on the brand tunnel | admin sign-in | full `:Meeting` detail for the account |
24
+ | Admin calendar (4 views) | the install, at `/calendar` on the admin host (resolve via `admin-hostname`) | admin sign-in | every time-bound item for the account — booked and imported meetings, agent-scheduled appointments, and tasks with a due date |
25
25
  | Public booking page | Cloudflare Pages, on the booking domain | open | free/busy only, never any meeting detail |
26
26
 
27
27
  Only the public page is deployed here, because it must stay reachable and keep capturing bookings even when the install device is briefly offline. The admin calendar is dynamic, account-scoped, and authenticated, so it is served by the install over the tunnel and is same-origin with its data. Do not try to put the admin calendar on Pages.
@@ -75,7 +75,7 @@ CLOUDFLARE_API_TOKEN="${PAGES_D1}" wrangler d1 execute <db-name> --remote --comm
75
75
  "SELECT bookingId FROM bookings WHERE swept = 0;"
76
76
  ```
77
77
 
78
- The install reconciles accepted rows into `:Meeting` nodes on its own interval, so the test submission will appear in the admin calendar at `/calendar` within a couple of minutes and can be removed there or left as proof. Tell the operator the booking link (the booking domain) and the admin calendar link (`/calendar` on the brand tunnel) in the result.
78
+ The install reconciles accepted rows into `:Meeting` nodes on its own interval, so the test submission will appear in the admin calendar at `/calendar` within a couple of minutes and can be removed there or left as proof. Tell the operator the booking link (the booking domain) and the admin calendar link (`https://<admin-host>/calendar`, with `<admin-host>` resolved via the `admin-hostname` tool, not the public host) in the result.
79
79
 
80
80
  ## Tool discipline
81
81
 
@@ -1,18 +1,20 @@
1
1
  # Calendar and booking
2
2
 
3
- Maxy gives you a calendar of your meetings and a public page where people can book time with you. They are two sides of the same data: the meetings the calendar shows are the same meetings a booking creates.
3
+ Maxy gives you a calendar of your schedule and a public page where people can book time with you. The calendar and the booking page are two sides of the same data: a booking someone makes shows up on your calendar straight away.
4
4
 
5
5
  ## The admin calendar
6
6
 
7
- Open `/calendar` on your Maxy address (the same sign-in as the dashboard). It shows your meetings in four views:
7
+ Open `/calendar` on your Maxy address (the same sign-in as the dashboard). It shows your schedule in four views:
8
8
 
9
- - **Day** and **Week** show an hour grid with each meeting as a timed block.
10
- - **Month** shows the familiar month grid with a few meetings per day.
11
- - **Year** shows twelve small months; days with a meeting carry a dot, and clicking a month opens it.
9
+ - **Day** and **Week** show an hour grid with each timed entry as a block.
10
+ - **Month** shows the familiar month grid with a few entries per day.
11
+ - **Year** shows twelve small months; days with something on them carry a dot, and clicking a month opens it.
12
12
 
13
- Use **Today** and the arrows to move around, and the view buttons to switch. The calendar reads your live meetings, so anything in your graph (imported from a calendar export, or created by a booking) appears here. The view is read-only: it shows meetings, it does not create or edit them.
13
+ Use **Today** and the arrows to move around, and the view buttons to switch. The calendar reads everything time-bound in your graph: meetings imported from a calendar export or created by a booking, appointments Maxy schedules for you in chat, and tasks that have a due date (shown on their day).
14
14
 
15
- The meetings come from the same `:Meeting` records the rest of Maxy uses, scoped to your account.
15
+ Click any entry to open its details: the full title, time, location, and who is attending. For a booked meeting you can also edit its title, time, or location, or delete it, and the grid updates straight away. Appointments Maxy schedules and due-dated tasks are shown for detail only and are changed where they are created, not here. New meetings are still made by a booking or by asking Maxy in chat, not from the calendar.
16
+
17
+ Everything on the calendar comes from records the rest of Maxy already uses, scoped to your account.
16
18
 
17
19
  ## The public booking page
18
20
 
@@ -339,6 +339,8 @@ Each row in the Conversations modal exposes a `View logs` row-action that opens
339
339
 
340
340
  **Deterministic public-hostname surface.** The `<public-host>` half of the URL the operator pastes is resolved by the `mcp__plugin_admin_admin__public-hostname` MCP tool. It reads `<configDir>/cloudflared/config.yml` (ingress list) then falls back to `<configDir>/alias-domains.json` — the same two files `cloudflared` and `platform/ui/server/index.ts`'s `isPublicHost()` already trust to route. Returns `{hostname, isApex, source}` on hit (`source` is `"cloudflared-config.yml"` or `"alias-domains.json"`), or `{hostname:null, source:null, reason:"no-tunnel"}` on miss. Tiebreak: apex wins over subdomain (single-label, or `www.<apex>` stripped). `publish-site` step 6 calls it after the move and emits the full URL (`https://<hostname><path-slug>`) in the same turn. Graph queries are no longer involved — any earlier graph-backed resolver returned `(none)` on accounts bootstrapped without `cloudflare-task-tracker.ts` writes (laptop Real Agent, manual `cloudflared` setup), the `llm-framing-deterministic` recurrence class. The graph-mcp shim additionally runs a sequential envelope-warning probe on every read response — when Neo4j emits `gql_status` codes matching `^0[12]N5\d$` (e.g. `01N52` "property does not exist"), the shim stitches them into a prefix content block on the response so property-name misses surface to the agent inline instead of returning silent `[]`. Probe failure is best-effort: the upstream response forwards unchanged with `[mcp:graph] probe-error`.
341
341
 
342
+ **Deterministic admin-hostname surface.** The admin shell — `/calendar` and every other authenticated route — is served only on the admin host, never the public host (`/calendar` returns `404 Not found` on a public host). The `mcp__plugin_admin_admin__admin-hostname` MCP tool is the admin-host twin of `public-hostname`: it resolves the host an operator should be pointed at for an admin-surface URL. It reads `<configDir>/cloudflared/config.yml` ingress, keeps only rules whose `service:` is an `http://` URL (so `ssh://`/`tcp://` off-LAN rows are excluded), and returns the first such hostname that is neither public (`public.` prefix or a `<configDir>/alias-domains.json` entry) nor operator (a `<configDir>/operator-domains.json` entry) — exactly the admin class of `classifyHost()` in `platform/ui/server/public-host-gate.ts`. Returns `{hostname, isApex, source:"cloudflared-config.yml"}` on hit, or `{hostname:null, source:null, reason:"no-admin-host"}` on miss. The admin host is often a different base domain from the public host (public `maxy.chat`, admin `admin.maxy.bot`), so it can never be string-derived from the public one — the `calendar-site` skill calls this tool to surface the admin `/calendar` link instead of guessing.
343
+
342
344
  ### Cross-tab session rotation
343
345
 
344
346
  When you click "New conversation" in the chat tab, {{productName}} mints a fresh admin session key on the server and clears the old one. Sibling admin tabs (`/graph`, `/data`) opened in the same browser keep working without re-login: the chat tab broadcasts the new key on a same-origin channel so each sibling tab updates its captured key instantly, and any in-flight admin request that 401s with the rotation-orphan code retries once after re-reading the latest key from per-tab storage. If neither path recovers (browser locked down, second 401 after retry, session expired), the tab shows a single banner — "Your admin session was renewed in another tab. Click to reload." — and one click sends you back through login. No silent 401s; no re-clicking through the same trash icon hoping it sticks. See `.docs/web-chat.md` "Cross-tab rotation contract" for the wire-level `code` taxonomy and observability surfaces.
@@ -58,6 +58,19 @@ Manages events, appointments, and recurring triggers in the graph. Events are di
58
58
 
59
59
  Create events immediately when the user identifies something time-bound — an appointment, a reminder, a recurring briefing. Confirm after creation; don't ask permission first.
60
60
 
61
+ ## Meetings vs events — what `schedule-event` writes
62
+
63
+ `schedule-event` writes one of two graph nodes, decided from the parameters you pass — never from keywords in the title:
64
+
65
+ - A **`:Meeting`** when the thing is a real calendar appointment: you pass `attendees` with a counterparty (an `email` or a resolved `nodeId`), **or** you pass a bounded slot (both `startDate` and `endDate`) with no `recurrence` and no `action`. A meeting is `(accountId, uid)`-idempotent (the uid is a content hash of account + title + start, so re-booking the same appointment writes no duplicate) and carries `(:Person)-[:ATTENDED]->(:Meeting)` edges for each resolvable counterparty. This is the same node shape that `.ics` import and public-booking reconcile write, so one real meeting never ends up as both a meeting and an event.
66
+ - An **`:Event`** when the thing is a scheduler primitive: a `recurrence` (recurring trigger) or an `action` (auto-dispatch) is present, **or** it is a bare one-time reminder (a `startDate` with no end and no counterparty).
67
+
68
+ To book a meeting with someone, resolve the counterparty to a `:Person` first (via `memory-search`) and pass their `nodeId` in `attendees`; pass `email` (with optional `name`) when you only have an address and want a stub created. A name-only attendee is informational and links no person — it does not, by itself, make the write a meeting.
69
+
70
+ The chosen bucket is logged on every write: `[schedule-event] op=write label=Meeting|Event reason=<discriminator>`.
71
+
72
+ Backfilling already-written `:Event` appointments into `:Meeting` is a separate divergence-driven migration, not part of this write path.
73
+
61
74
  ## One-time vs recurring
62
75
 
63
76
  - **One-time events** have a `startDate` and optionally an `endDate`. They transition to `due` when their time arrives (via the platform cron) and to `completed` when the agent or user marks them done.
@@ -61,20 +61,25 @@ const eventStatusSchema = z
61
61
  // ---------------------------------------------------------------------------
62
62
  // schedule-event
63
63
  // ---------------------------------------------------------------------------
64
- eagerTool(server, "schedule-event", "Create a scheduled event or appointment. For one-time events, provide startDate. For recurring events, also provide a recurrence (cron expression, e.g. '0 8 * * 1-5' for weekdays at 8am). Pass sessionKey to link to the current conversation. Pass action to auto-execute an MCP tool when the event fires.", {
65
- name: z.string().describe("Short event title"),
64
+ eagerTool(server, "schedule-event", "Create a scheduled event or appointment. A genuine meeting (a bounded start+end appointment, usually with a counterparty) is recorded as a calendar meeting; pass attendees to link the people involved. A recurring trigger or an auto-dispatch action is recorded as an event. For one-time events, provide startDate. For recurring events, also provide a recurrence (cron expression, e.g. '0 8 * * 1-5' for weekdays at 8am). Pass sessionKey to link to the current conversation. Pass action to auto-execute an MCP tool when the event fires.", {
65
+ name: z.string().describe("Short event or meeting title"),
66
66
  description: z.string().optional().describe("Event details"),
67
67
  startDate: z.string().describe("ISO 8601 datetime for the event start"),
68
- endDate: z.string().optional().describe("ISO 8601 datetime for the event end"),
68
+ endDate: z.string().optional().describe("ISO 8601 datetime for the event end. A bounded slot (start+end) with no recurrence/action records a meeting."),
69
69
  location: z.string().optional().describe("Event location (free text)"),
70
- recurrence: z.string().optional().describe("Cron expression for recurring events (5-field: min hour dom mon dow). Omit for one-time events."),
70
+ recurrence: z.string().optional().describe("Cron expression for recurring events (5-field: min hour dom mon dow). Omit for one-time events. Always records an event, never a meeting."),
71
71
  timezone: z.string().optional().describe("IANA timezone (e.g. Europe/London). Defaults to account timezone."),
72
72
  sessionKey: z.string().optional().describe("Current session key — links this event to the conversation"),
73
+ attendees: z.array(z.object({
74
+ email: z.string().optional().describe("Counterparty email — the key the person is matched or created on"),
75
+ name: z.string().optional().describe("Counterparty display name (used when creating a new person stub)"),
76
+ nodeId: z.string().optional().describe("elementId of an already-resolved Person to link directly"),
77
+ })).optional().describe("Meeting counterparties. A counterparty with an email or a resolved nodeId records this as a meeting and links the person as an attendee. Resolve the person via memory-search first where possible."),
73
78
  action: z.object({
74
79
  plugin: z.string().describe("Plugin name that exposes the tool (e.g. 'memory')"),
75
80
  tool: z.string().describe("MCP tool name to call when the event fires (e.g. 'memory-search')"),
76
81
  args: z.record(z.unknown()).optional().describe("Arguments to pass to the tool call"),
77
- }).optional().describe("Automated action: dispatches an MCP tool call when the event fires. The plugin must exist in platform/plugins/."),
82
+ }).optional().describe("Automated action: dispatches an MCP tool call when the event fires. The plugin must exist in platform/plugins/. Always records an event, never a meeting."),
78
83
  }, async (params) => {
79
84
  if (!accountId)
80
85
  return refuseNoAccount("schedule-event");
@@ -87,6 +92,15 @@ eagerTool(server, "schedule-event", "Create a scheduled event or appointment. Fo
87
92
  sessionKey: params.sessionKey ?? sessionId,
88
93
  createdBy: { agent: agentSlug, session: sessionId, tool: "schedule-event" },
89
94
  });
95
+ if (result.label === "Meeting") {
96
+ const parts = [`Meeting created: "${params.name}"`];
97
+ parts.push(`starts: ${formatCombined(params.startDate, timezone)}`);
98
+ if (params.endDate)
99
+ parts.push(`ends: ${formatCombined(params.endDate, timezone)}`);
100
+ if (result.attendeesLinked)
101
+ parts.push(`attendees linked: ${result.attendeesLinked}`);
102
+ return { content: [{ type: "text", text: parts.join(", ") }] };
103
+ }
90
104
  const parts = [`Event created: "${params.name}" (ID: ${result.eventId})`];
91
105
  parts.push(`starts: ${formatCombined(params.startDate, timezone)}`);
92
106
  if (params.recurrence)
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=meeting-write.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-write.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/meeting-write.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,118 @@
1
+ // Task 1023. Real MERGE idempotency is a live-Neo4j property; these tests pin
2
+ // the contract the JS owns: a deterministic (accountId, uid) content-hash key,
3
+ // the :Meeting MERGE shape, the PART_OF provenance link, and the attendee branch
4
+ // (same-account email link / cross-account skip / resolved nodeId / name-only).
5
+ import { describe, it, expect, vi } from "vitest";
6
+ import { writeMeeting, meetingUid } from "../meeting-write.js";
7
+ const base = {
8
+ accountId: "acct-1",
9
+ name: "Discovery call",
10
+ startDate: "2026-06-22T14:00:00Z",
11
+ endDate: "2026-06-22T14:30:00Z",
12
+ createdBy: { agent: "personal-assistant", session: "sess-1", tool: "schedule-event" },
13
+ };
14
+ // Fake session that routes each run() by the cypher it sees, capturing cyphers +
15
+ // params. `created` controls the meeting MERGE; `personOwner` controls the
16
+ // same-account/foreign branch for an email attendee; `nodeIdLinks` controls
17
+ // whether a nodeId attendee resolved under this account.
18
+ function makeSession(opts) {
19
+ const cyphers = [];
20
+ const params = [];
21
+ const run = vi.fn(async (cypher, p) => {
22
+ cyphers.push(cypher);
23
+ params.push(p);
24
+ if (cypher.includes("MERGE (m:Meeting")) {
25
+ return { records: [{ get: (k) => (k === "created" ? opts.created ?? true : "el-meeting-1") }] };
26
+ }
27
+ if (cypher.includes("MERGE (p:Person {email:")) {
28
+ const linked = opts.personOwner === undefined || opts.personOwner === p.accountId;
29
+ return { records: [{ get: () => linked }] };
30
+ }
31
+ if (cypher.includes("MATCH (p:Person) WHERE elementId(p)")) {
32
+ // The real query's same-account MATCH yields a row only when the Person
33
+ // resolves under this account; a foreign/missing nodeId returns zero rows.
34
+ return { records: opts.nodeIdLinks ? [{ get: () => true }] : [] };
35
+ }
36
+ return { records: [] };
37
+ });
38
+ return { session: { run }, run, cyphers, params };
39
+ }
40
+ describe("meetingUid", () => {
41
+ it("is deterministic and normalizes title casing/whitespace", () => {
42
+ const a = meetingUid("acct-1", "Discovery Call", "2026-06-22T14:00:00Z");
43
+ const b = meetingUid("acct-1", " discovery call ", "2026-06-22T14:00:00Z");
44
+ expect(a).toBe(b);
45
+ expect(a).toMatch(/^sched-[0-9a-f]{32}$/);
46
+ });
47
+ it("differs by account, title, and start", () => {
48
+ const u = meetingUid("acct-1", "Discovery call", "2026-06-22T14:00:00Z");
49
+ expect(u).not.toBe(meetingUid("acct-2", "Discovery call", "2026-06-22T14:00:00Z"));
50
+ expect(u).not.toBe(meetingUid("acct-1", "Other", "2026-06-22T14:00:00Z"));
51
+ expect(u).not.toBe(meetingUid("acct-1", "Discovery call", "2026-06-22T15:00:00Z"));
52
+ });
53
+ });
54
+ describe("writeMeeting", () => {
55
+ it("MERGEs the meeting on (accountId, uid) with the schedule-event source", async () => {
56
+ const { session, cyphers, params } = makeSession({ created: true });
57
+ const r = await writeMeeting(session, base);
58
+ expect(r.created).toBe(true);
59
+ expect(r.meetingId).toBe("el-meeting-1");
60
+ expect(r.uid).toBe(meetingUid(base.accountId, base.name, base.startDate));
61
+ expect(params[0].uid).toBe(r.uid);
62
+ expect(params[0].accountId).toBe("acct-1");
63
+ expect(cyphers[0]).toMatch(/MERGE \(m:Meeting \{accountId: \$accountId, uid: \$uid\}\)/);
64
+ expect(cyphers[0]).toMatch(/m\.source = 'schedule-event'/);
65
+ });
66
+ it("links PART_OF to the session Conversation when a sessionKey is given", async () => {
67
+ const { session, cyphers } = makeSession({ created: true });
68
+ await writeMeeting(session, { ...base, sessionKey: "sess-1" });
69
+ expect(cyphers.some((c) => c.includes("MERGE (m)-[r:PART_OF]->(c)"))).toBe(true);
70
+ });
71
+ it("writes no PART_OF when there is no sessionKey", async () => {
72
+ const { session, cyphers } = makeSession({ created: true });
73
+ await writeMeeting(session, base);
74
+ expect(cyphers.some((c) => c.includes("PART_OF"))).toBe(false);
75
+ });
76
+ it("links a same-account email counterparty via ATTENDED", async () => {
77
+ const { session, cyphers, params } = makeSession({ created: true, personOwner: "acct-1" });
78
+ const r = await writeMeeting(session, { ...base, attendees: [{ email: "Josh@Goff.com", name: "Josh" }] });
79
+ expect(r.attendeesLinked).toBe(1);
80
+ expect(r.crossAccountSkipped).toBe(0);
81
+ expect(cyphers.some((c) => c.includes("MERGE (p)-[r:ATTENDED]->(m)"))).toBe(true);
82
+ // email is lowercased before the MERGE.
83
+ const personCall = params.find((p) => p.email !== undefined);
84
+ expect(personCall?.email).toBe("josh@goff.com");
85
+ });
86
+ it("skips a cross-account email counterparty but still lands the meeting", async () => {
87
+ const { session } = makeSession({ created: true, personOwner: "other-account" });
88
+ const r = await writeMeeting(session, { ...base, attendees: [{ email: "foreign@x.com" }] });
89
+ expect(r.created).toBe(true);
90
+ expect(r.attendeesLinked).toBe(0);
91
+ expect(r.crossAccountSkipped).toBe(1);
92
+ });
93
+ it("links a resolved same-account nodeId counterparty", async () => {
94
+ const { session } = makeSession({ created: true, nodeIdLinks: true });
95
+ const r = await writeMeeting(session, { ...base, attendees: [{ nodeId: "el-person-9" }] });
96
+ expect(r.attendeesLinked).toBe(1);
97
+ expect(r.crossAccountSkipped).toBe(0);
98
+ });
99
+ it("skips a nodeId that does not resolve under this account", async () => {
100
+ const { session } = makeSession({ created: true, nodeIdLinks: false });
101
+ const r = await writeMeeting(session, { ...base, attendees: [{ nodeId: "el-foreign" }] });
102
+ expect(r.attendeesLinked).toBe(0);
103
+ expect(r.crossAccountSkipped).toBe(1);
104
+ });
105
+ it("writes no attendee link for a name-only counterparty", async () => {
106
+ const { session, cyphers } = makeSession({ created: true });
107
+ const r = await writeMeeting(session, { ...base, attendees: [{ name: "No Email" }] });
108
+ expect(r.attendeesLinked).toBe(0);
109
+ expect(r.crossAccountSkipped).toBe(0);
110
+ expect(cyphers.some((c) => c.includes("ATTENDED"))).toBe(false);
111
+ });
112
+ it("reports created=false on the idempotent re-run", async () => {
113
+ const { session } = makeSession({ created: false });
114
+ const r = await writeMeeting(session, base);
115
+ expect(r.created).toBe(false);
116
+ });
117
+ });
118
+ //# sourceMappingURL=meeting-write.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-write.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/meeting-write.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schedule-classify.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-classify.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/schedule-classify.test.ts"],"names":[],"mappings":""}