@rubytech/create-realagent-code 0.1.316 → 0.1.319

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 (273) hide show
  1. package/package.json +2 -2
  2. package/payload/platform/lib/mcp-eager/dist/index.d.ts +0 -20
  3. package/payload/platform/lib/mcp-eager/dist/index.d.ts.map +1 -1
  4. package/payload/platform/lib/mcp-eager/dist/index.js +2 -1
  5. package/payload/platform/lib/mcp-eager/dist/index.js.map +1 -1
  6. package/payload/platform/lib/mcp-eager/src/index.ts +3 -1
  7. package/payload/platform/lib/mcp-lifeline/dist/index.d.ts +8 -0
  8. package/payload/platform/lib/mcp-lifeline/dist/index.d.ts.map +1 -0
  9. package/payload/platform/lib/mcp-lifeline/dist/index.js +71 -0
  10. package/payload/platform/lib/mcp-lifeline/dist/index.js.map +1 -0
  11. package/payload/platform/lib/mcp-lifeline/package.json +7 -0
  12. package/payload/platform/lib/mcp-lifeline/src/__tests__/lifeline.test.ts +146 -0
  13. package/payload/platform/lib/mcp-lifeline/src/index.ts +78 -0
  14. package/payload/platform/lib/mcp-lifeline/tsconfig.json +9 -0
  15. package/payload/platform/lib/mcp-lifeline/vitest.config.ts +9 -0
  16. package/payload/platform/lib/models/dist/index.d.ts +8 -0
  17. package/payload/platform/lib/models/dist/index.d.ts.map +1 -1
  18. package/payload/platform/lib/models/dist/index.js +20 -1
  19. package/payload/platform/lib/models/dist/index.js.map +1 -1
  20. package/payload/platform/lib/models/src/index.ts +22 -0
  21. package/payload/platform/package.json +5 -2
  22. package/payload/platform/plugins/admin/mcp/dist/index.js +11 -10
  23. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  24. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +19 -10
  25. package/payload/platform/plugins/docs/references/admin-ui.md +4 -2
  26. package/payload/platform/plugins/docs/references/internals.md +14 -7
  27. package/payload/platform/plugins/memory/mcp/dist/index.js +32 -31
  28. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  29. package/payload/platform/plugins/outlook/mcp/dist/index.js +8 -7
  30. package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
  31. package/payload/platform/plugins/quickbooks/mcp/dist/index.js +12 -11
  32. package/payload/platform/plugins/quickbooks/mcp/dist/index.js.map +1 -1
  33. package/payload/platform/plugins/replicate/mcp/dist/index.js +4 -3
  34. package/payload/platform/plugins/replicate/mcp/dist/index.js.map +1 -1
  35. package/payload/platform/plugins/whatsapp/mcp/dist/index.js +11 -10
  36. package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
  37. package/payload/platform/scripts/__tests__/check-no-raw-mcp-registrations.test.sh +57 -0
  38. package/payload/platform/scripts/check-no-raw-mcp-registrations.mjs +70 -0
  39. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/http-server.js +57 -9
  41. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  42. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +5 -0
  43. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  44. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +7 -0
  45. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  46. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
  47. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +3 -12
  48. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  49. package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts +8 -0
  50. package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts.map +1 -1
  51. package/payload/platform/services/claude-session-manager/dist/session-sidecar.js +9 -0
  52. package/payload/platform/services/claude-session-manager/dist/session-sidecar.js.map +1 -1
  53. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +5 -0
  54. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  55. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +15 -0
  56. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  57. package/payload/premium-plugins/real-agent/lib/mcp-lifeline/dist/index.d.ts +8 -0
  58. package/payload/premium-plugins/real-agent/lib/mcp-lifeline/dist/index.d.ts.map +1 -0
  59. package/payload/premium-plugins/real-agent/lib/mcp-lifeline/dist/index.js +71 -0
  60. package/payload/premium-plugins/real-agent/lib/mcp-lifeline/dist/index.js.map +1 -0
  61. package/payload/premium-plugins/real-agent/lib/mcp-lifeline/package.json +7 -0
  62. package/payload/premium-plugins/real-agent/plugins/buyers/mcp/dist/index.js +9 -8
  63. package/payload/premium-plugins/real-agent/plugins/buyers/mcp/dist/index.js.map +1 -1
  64. package/payload/premium-plugins/real-agent/plugins/buyers/mcp/src/index.ts +9 -8
  65. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.js +28 -27
  66. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.js.map +1 -1
  67. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/index.ts +28 -27
  68. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.js +23 -22
  69. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.js.map +1 -1
  70. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/index.ts +23 -22
  71. package/payload/server/{chunk-Q7EWROVN.js → chunk-NCRJQEZ3.js} +0 -101
  72. package/payload/server/maxy-edge.js +1 -1
  73. package/payload/server/public/assets/AdminLoginScreens-CrdmA3KA.js +1 -0
  74. package/payload/server/public/assets/AdminShell-0meAFBva.js +1 -0
  75. package/payload/server/public/assets/Checkbox-DXisJRUK.js +1 -0
  76. package/payload/server/public/assets/OperatorConversations-DBy2G8q3.js +9 -0
  77. package/payload/server/public/assets/OperatorConversations-DvRXfq3q.css +1 -0
  78. package/payload/server/public/assets/admin-DX5lZxWt.js +1 -0
  79. package/payload/server/public/assets/{arc-J2g2u5Xv.js → arc-CxLB9WCE.js} +1 -1
  80. package/payload/server/public/assets/architecture-YZFGNWBL-DN-MYxff.js +1 -0
  81. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CN0BXxpE.js → architectureDiagram-Q4EWVU46-D-EdJPSY.js} +1 -1
  82. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-HX-8wF2p.js → blockDiagram-DXYQGD6D-CXx9RgCm.js} +1 -1
  83. package/payload/server/public/assets/browser-Bxx8w8BA.js +1 -0
  84. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-wIuarKF5.js → c4Diagram-AHTNJAMY-RFBXEe0B.js} +1 -1
  85. package/payload/server/public/assets/channel-y27xl53N.js +1 -0
  86. package/payload/server/public/assets/chat-CT9YrNtI.js +1 -0
  87. package/payload/server/public/assets/{chunk-2KRD3SAO-Buz7egJZ.js → chunk-2KRD3SAO-DBqAFwK9.js} +1 -1
  88. package/payload/server/public/assets/{chunk-336JU56O-_JcFXJqc.js → chunk-336JU56O-DdnFEz6R.js} +2 -2
  89. package/payload/server/public/assets/chunk-426QAEUC-D8Iwaegm.js +1 -0
  90. package/payload/server/public/assets/{chunk-4BX2VUAB-DUR5Dg3M.js → chunk-4BX2VUAB-cnw-3Gbs.js} +1 -1
  91. package/payload/server/public/assets/{chunk-4TB4RGXK-BRIqQ9st.js → chunk-4TB4RGXK-BnqJ0bDc.js} +1 -1
  92. package/payload/server/public/assets/{chunk-55IACEB6-CezTHWXL.js → chunk-55IACEB6-BwyHvvzo.js} +1 -1
  93. package/payload/server/public/assets/{chunk-5FUZZQ4R-DHYUPzF1.js → chunk-5FUZZQ4R-DXA9U02I.js} +1 -1
  94. package/payload/server/public/assets/{chunk-5PVQY5BW-BVn4_fI5.js → chunk-5PVQY5BW-D78bZ_8D.js} +1 -1
  95. package/payload/server/public/assets/{chunk-67CJDMHE-BBLA8Mbi.js → chunk-67CJDMHE-CtE_Mgv7.js} +1 -1
  96. package/payload/server/public/assets/{chunk-7N4EOEYR-CdWfEI5c.js → chunk-7N4EOEYR-CUZDaySl.js} +1 -1
  97. package/payload/server/public/assets/{chunk-AA7GKIK3-tS11knCR.js → chunk-AA7GKIK3-CYQ3jO4X.js} +1 -1
  98. package/payload/server/public/assets/{chunk-BSJP7CBP-GEu1OOZ6.js → chunk-BSJP7CBP-BbA_HyTR.js} +1 -1
  99. package/payload/server/public/assets/{chunk-CIAEETIT-DKrNbbp_.js → chunk-CIAEETIT-D7_YqRhG.js} +1 -1
  100. package/payload/server/public/assets/{chunk-EDXVE4YY-B0InXNyr.js → chunk-EDXVE4YY-B23LrtSw.js} +1 -1
  101. package/payload/server/public/assets/{chunk-ENJZ2VHE-CO7lkHdm.js → chunk-ENJZ2VHE-D3fTHYKN.js} +1 -1
  102. package/payload/server/public/assets/{chunk-FMBD7UC4-CMj74lWo.js → chunk-FMBD7UC4-DFAA2tyh.js} +1 -1
  103. package/payload/server/public/assets/{chunk-FOC6F5B3-CLnKQoXw.js → chunk-FOC6F5B3-BF4IHvlI.js} +1 -1
  104. package/payload/server/public/assets/{chunk-ICPOFSXX-CdiEKIaz.js → chunk-ICPOFSXX-DBUGemHy.js} +2 -2
  105. package/payload/server/public/assets/{chunk-K5T4RW27-B6LA3fiv.js → chunk-K5T4RW27-rMMs08Eh.js} +1 -1
  106. package/payload/server/public/assets/{chunk-KGLVRYIC-DrhRrb8Q.js → chunk-KGLVRYIC-BD2r8R2G.js} +1 -1
  107. package/payload/server/public/assets/{chunk-LIHQZDEY-DVQukevB.js → chunk-LIHQZDEY-D4sYTTwM.js} +1 -1
  108. package/payload/server/public/assets/{chunk-ORNJ4GCN-ZMLkoDhP.js → chunk-ORNJ4GCN-CAs_uFzb.js} +1 -1
  109. package/payload/server/public/assets/{chunk-OYMX7WX6-C0dJkynG.js → chunk-OYMX7WX6-Fkp-2ORc.js} +1 -1
  110. package/payload/server/public/assets/chunk-QZHKN3VN-qHqDpwz3.js +1 -0
  111. package/payload/server/public/assets/{chunk-U2HBQHQK-BQ9BPIFZ.js → chunk-U2HBQHQK-D_pxZh25.js} +1 -1
  112. package/payload/server/public/assets/{chunk-X2U36JSP-CAonGMOd.js → chunk-X2U36JSP-CeVmvvRf.js} +1 -1
  113. package/payload/server/public/assets/{chunk-XPW4576I-D5C_WNlk.js → chunk-XPW4576I-iWP54fKp.js} +1 -1
  114. package/payload/server/public/assets/{chunk-YZCP3GAM-Ecdvzekb.js → chunk-YZCP3GAM-CNtbWJNN.js} +1 -1
  115. package/payload/server/public/assets/{chunk-ZZ45TVLE-BsFZd1cN.js → chunk-ZZ45TVLE-BmlFjU_9.js} +1 -1
  116. package/payload/server/public/assets/classDiagram-6PBFFD2Q-DgVoYWhO.js +1 -0
  117. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-C0WNP3uN.js +1 -0
  118. package/payload/server/public/assets/clone-D50F_pvg.js +1 -0
  119. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-DBWHaIwm.js → cose-bilkent-S5V4N54A-C7YmF1Pg.js} +1 -1
  120. package/payload/server/public/assets/{dagre-Dr7ZJYeS.js → dagre-BAmiDDtR.js} +1 -1
  121. package/payload/server/public/assets/{dagre-KV5264BT-oIJddk7m.js → dagre-KV5264BT-Ca3ESJhc.js} +1 -1
  122. package/payload/server/public/assets/data-B9NtsXgF.js +1 -0
  123. package/payload/server/public/assets/{diagram-5BDNPKRD-CEVxqOZ4.js → diagram-5BDNPKRD-BgT1ORf2.js} +1 -1
  124. package/payload/server/public/assets/{diagram-G4DWMVQ6-BovF7Rjx.js → diagram-G4DWMVQ6-BTaUIiem.js} +1 -1
  125. package/payload/server/public/assets/{diagram-MMDJMWI5-BhrF8zoF.js → diagram-MMDJMWI5-Bdb2g6Uo.js} +1 -1
  126. package/payload/server/public/assets/{diagram-TYMM5635-DCUYwxtR.js → diagram-TYMM5635-CkLGC0zZ.js} +1 -1
  127. package/payload/server/public/assets/{dist-DSsFp0Qd.js → dist-Bkbhs3jw.js} +1 -1
  128. package/payload/server/public/assets/{erDiagram-SMLLAGMA-BS2-HdCg.js → erDiagram-SMLLAGMA-D_sj4DMg.js} +1 -1
  129. package/payload/server/public/assets/{flatten-BZMXCpLh.js → flatten-E2Sr0FeD.js} +1 -1
  130. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BzSFLoea.js → flowDiagram-DWJPFMVM-iLERoZTe.js} +1 -1
  131. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-1-3QU7mT.js → ganttDiagram-T4ZO3ILL-D60hjMBy.js} +1 -1
  132. package/payload/server/public/assets/gitGraph-7Q5UKJZL-D-L2yzYf.js +1 -0
  133. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-fTrJ35Wk.js → gitGraphDiagram-UUTBAWPF-Di0XM6fi.js} +1 -1
  134. package/payload/server/public/assets/{graph-BZNc3EXa.js → graph-B59N222f.js} +3 -3
  135. package/payload/server/public/assets/graph-labels-70w-1ov0.js +1 -0
  136. package/payload/server/public/assets/{graphlib-rlEzI2qD.js → graphlib-C8fUP7uV.js} +1 -1
  137. package/payload/server/public/assets/info-OMHHGYJF-BQn6jndO.js +1 -0
  138. package/payload/server/public/assets/infoDiagram-42DDH7IO-BwMdbiXg.js +2 -0
  139. package/payload/server/public/assets/{isEmpty-DaYIrHay.js → isEmpty-CLz-UprQ.js} +1 -1
  140. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-0eU_UtlT.js → ishikawaDiagram-UXIWVN3A-CwgI4B5Z.js} +1 -1
  141. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-BKLeZohp.js → journeyDiagram-VCZTEJTY-CxBu-tze.js} +1 -1
  142. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Dq72xyaN.js → kanban-definition-6JOO6SKY-D2qlheA5.js} +1 -1
  143. package/payload/server/public/assets/{line-LQhmDT8k.js → line-Bdod7uzQ.js} +1 -1
  144. package/payload/server/public/assets/{linear-BGotDbGs.js → linear-BiVe6QzC.js} +1 -1
  145. package/payload/server/public/assets/{mermaid-parser.core-DoLdho1V.js → mermaid-parser.core-xZN7hC6M.js} +2 -2
  146. package/payload/server/public/assets/{mermaid.core-C1RRyHGm.js → mermaid.core-D0IylAac.js} +3 -3
  147. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-vUVVVyV1.js → mindmap-definition-QFDTVHPH-J_Szhwf1.js} +1 -1
  148. package/payload/server/public/assets/operator-DpRAhwQN.js +1 -0
  149. package/payload/server/public/assets/{ordinal-BqEhkPyh.js → ordinal-5RtyPJVt.js} +1 -1
  150. package/payload/server/public/assets/packet-4T2RLAQJ-DmkQBx4h.js +1 -0
  151. package/payload/server/public/assets/page-Ehjc9b9V.js +30 -0
  152. package/payload/server/public/assets/pie-ZZUOXDRM-DDnxYUBm.js +1 -0
  153. package/payload/server/public/assets/{pieDiagram-DEJITSTG-B9Pl6Qhc.js → pieDiagram-DEJITSTG-CV5DxUVx.js} +1 -1
  154. package/payload/server/public/assets/public-BcqXGSaE.js +1 -0
  155. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-Drn9T81A.js → quadrantDiagram-34T5L4WZ-BsFMVizF.js} +1 -1
  156. package/payload/server/public/assets/radar-PYXPWWZC-7H4k0ChM.js +1 -0
  157. package/payload/server/public/assets/{reduce-T2IuntYP.js → reduce-B3Mw_0s1.js} +1 -1
  158. package/payload/server/public/assets/{requirementDiagram-MS252O5E-C0PAItJm.js → requirementDiagram-MS252O5E-C5eRRvGc.js} +1 -1
  159. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-BR42Mtwd.js → sankeyDiagram-XADWPNL6-CJYv5gpw.js} +1 -1
  160. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-c2lR9UOS.js → sequenceDiagram-FGHM5R23-B25563_2.js} +1 -1
  161. package/payload/server/public/assets/{src-DXUM2BJo.js → src-BKOAoFQc.js} +1 -1
  162. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BcHhtqsZ.js → stateDiagram-FHFEXIEX-BLyNJYOA.js} +1 -1
  163. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BSVuxZxz.js +1 -0
  164. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-Ax32c10H.js → timeline-definition-GMOUNBTQ-D-HgOM6Q.js} +1 -1
  165. package/payload/server/public/assets/treeView-SZITEDCU-BLXWTQtW.js +1 -0
  166. package/payload/server/public/assets/treemap-W4RFUUIX-DiePDF5d.js +1 -0
  167. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BxePewPq.js → vennDiagram-DHZGUBPP-Cw1JElYp.js} +1 -1
  168. package/payload/server/public/assets/wardley-RL74JXVD-OSUWK5LN.js +1 -0
  169. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-DmJwZ2f5.js → wardleyDiagram-NUSXRM2D-BqMWzEko.js} +1 -1
  170. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-YjHomudv.js → xychartDiagram-5P7HB3ND-DBp71TLT.js} +1 -1
  171. package/payload/server/public/browser.html +5 -8
  172. package/payload/server/public/chat.html +8 -12
  173. package/payload/server/public/data.html +5 -7
  174. package/payload/server/public/graph.html +7 -10
  175. package/payload/server/public/index.html +8 -11
  176. package/payload/server/public/operator.html +10 -14
  177. package/payload/server/public/public.html +8 -10
  178. package/payload/server/server.js +276 -219
  179. package/payload/server/public/assets/AccessGate-bu988Xo-.js +0 -1
  180. package/payload/server/public/assets/AdminLoginScreens-BCYaOOuk.js +0 -1
  181. package/payload/server/public/assets/AdminShell-DSjJ4Biu.js +0 -1
  182. package/payload/server/public/assets/Checkbox-B4Dbvjls.js +0 -1
  183. package/payload/server/public/assets/OperatorConversations-XsXP7-P-.js +0 -1
  184. package/payload/server/public/assets/OperatorConversations-qc_xy7Az.css +0 -1
  185. package/payload/server/public/assets/admin-m0797WGA.js +0 -1
  186. package/payload/server/public/assets/architecture-YZFGNWBL-C6nkAxzW.js +0 -1
  187. package/payload/server/public/assets/audio-attachment-mime-Jm4KJ4YC.js +0 -30
  188. package/payload/server/public/assets/brand-D8LClgr_.js +0 -9
  189. package/payload/server/public/assets/brand-DvttVeGB.css +0 -1
  190. package/payload/server/public/assets/browser-CBjNMPsz.js +0 -1
  191. package/payload/server/public/assets/channel-Q39xIXyT.js +0 -1
  192. package/payload/server/public/assets/chat-Sg-RGuV6.js +0 -1
  193. package/payload/server/public/assets/chunk-426QAEUC-CCYjp9C2.js +0 -1
  194. package/payload/server/public/assets/chunk-QZHKN3VN-BNBxnHZh.js +0 -1
  195. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BShusfby.js +0 -1
  196. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D4ivPLFF.js +0 -1
  197. package/payload/server/public/assets/clone-CjEM8LwB.js +0 -1
  198. package/payload/server/public/assets/data-CEqE4BDw.js +0 -1
  199. package/payload/server/public/assets/gitGraph-7Q5UKJZL-Btp3PwZh.js +0 -1
  200. package/payload/server/public/assets/graph-labels-Bj5yM9bI.js +0 -1
  201. package/payload/server/public/assets/info-OMHHGYJF-CPt2y6_L.js +0 -1
  202. package/payload/server/public/assets/infoDiagram-42DDH7IO-CpXNTMgd.js +0 -2
  203. package/payload/server/public/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
  204. package/payload/server/public/assets/inter-cyrillic-400-normal-obahsSVq.woff2 +0 -0
  205. package/payload/server/public/assets/inter-cyrillic-500-normal-BasfLYem.woff2 +0 -0
  206. package/payload/server/public/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
  207. package/payload/server/public/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2 +0 -0
  208. package/payload/server/public/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
  209. package/payload/server/public/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2 +0 -0
  210. package/payload/server/public/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
  211. package/payload/server/public/assets/inter-greek-400-normal-B4URO6DV.woff2 +0 -0
  212. package/payload/server/public/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
  213. package/payload/server/public/assets/inter-greek-500-normal-BIZE56-Y.woff2 +0 -0
  214. package/payload/server/public/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
  215. package/payload/server/public/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2 +0 -0
  216. package/payload/server/public/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
  217. package/payload/server/public/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
  218. package/payload/server/public/assets/inter-greek-ext-500-normal-C4iEst2y.woff2 +0 -0
  219. package/payload/server/public/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
  220. package/payload/server/public/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
  221. package/payload/server/public/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
  222. package/payload/server/public/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
  223. package/payload/server/public/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
  224. package/payload/server/public/assets/inter-latin-ext-400-normal-C1nco2VV.woff2 +0 -0
  225. package/payload/server/public/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
  226. package/payload/server/public/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2 +0 -0
  227. package/payload/server/public/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
  228. package/payload/server/public/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  229. package/payload/server/public/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  230. package/payload/server/public/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
  231. package/payload/server/public/assets/newsreader-latin-300-normal-AOSWdb_s.woff +0 -0
  232. package/payload/server/public/assets/newsreader-latin-300-normal-FGBQ0wlI.woff2 +0 -0
  233. package/payload/server/public/assets/newsreader-latin-400-normal-BFBkh4jY.woff2 +0 -0
  234. package/payload/server/public/assets/newsreader-latin-400-normal-gRTjlS2D.woff +0 -0
  235. package/payload/server/public/assets/newsreader-latin-500-normal-B66TYsaK.woff2 +0 -0
  236. package/payload/server/public/assets/newsreader-latin-500-normal-DFwuUcdu.woff +0 -0
  237. package/payload/server/public/assets/newsreader-latin-ext-300-normal-CFtw49Zd.woff +0 -0
  238. package/payload/server/public/assets/newsreader-latin-ext-300-normal-DRMzurxT.woff2 +0 -0
  239. package/payload/server/public/assets/newsreader-latin-ext-400-normal-DYA1XoQK.woff +0 -0
  240. package/payload/server/public/assets/newsreader-latin-ext-400-normal-svq1FPys.woff2 +0 -0
  241. package/payload/server/public/assets/newsreader-latin-ext-500-normal-BNHmvKvI.woff2 +0 -0
  242. package/payload/server/public/assets/newsreader-latin-ext-500-normal-CZruMFou.woff +0 -0
  243. package/payload/server/public/assets/newsreader-vietnamese-300-normal-CsrIkm-V.woff +0 -0
  244. package/payload/server/public/assets/newsreader-vietnamese-300-normal-D3VHEe81.woff2 +0 -0
  245. package/payload/server/public/assets/newsreader-vietnamese-400-normal-BekUZro8.woff +0 -0
  246. package/payload/server/public/assets/newsreader-vietnamese-400-normal-DdKr49mV.woff2 +0 -0
  247. package/payload/server/public/assets/newsreader-vietnamese-500-normal-BEAbKU8A.woff +0 -0
  248. package/payload/server/public/assets/newsreader-vietnamese-500-normal-CL6a8tp2.woff2 +0 -0
  249. package/payload/server/public/assets/operator-Bph7mx87.js +0 -1
  250. package/payload/server/public/assets/packet-4T2RLAQJ-Cwc-j_AI.js +0 -1
  251. package/payload/server/public/assets/page-CtWCeXdg.js +0 -1
  252. package/payload/server/public/assets/pie-ZZUOXDRM-BZ9fjD1_.js +0 -1
  253. package/payload/server/public/assets/public-gxHCJCs3.js +0 -6
  254. package/payload/server/public/assets/public-next-C3clISGQ.js +0 -1
  255. package/payload/server/public/assets/public-vnj7OhQj.css +0 -1
  256. package/payload/server/public/assets/radar-PYXPWWZC-BNz5Rt9V.js +0 -1
  257. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BUQ_F4eP.js +0 -1
  258. package/payload/server/public/assets/treeView-SZITEDCU-DcVCQgp1.js +0 -1
  259. package/payload/server/public/assets/treemap-W4RFUUIX-Bm12mwGd.js +0 -1
  260. package/payload/server/public/assets/useSelectionMode-BMn70cch.js +0 -5
  261. package/payload/server/public/assets/wardley-RL74JXVD-47Z3ymtK.js +0 -1
  262. package/payload/server/public/public-next.html +0 -25
  263. /package/payload/server/public/assets/{_baseFor-Y5mTRiRv.js → _baseFor-DVaNaTfF.js} +0 -0
  264. /package/payload/server/public/assets/{admin-types-D2qTXuCg.js → admin-types-CJrGd46U.js} +0 -0
  265. /package/payload/server/public/assets/{array-BwJyW1Dp.js → array-8_H1156C.js} +0 -0
  266. /package/payload/server/public/assets/{chunk-CAM3fms7.js → chunk-Pqm5yXtL.js} +0 -0
  267. /package/payload/server/public/assets/{cytoscape.esm-D95TtHqz.js → cytoscape.esm-h10p_6j-.js} +0 -0
  268. /package/payload/server/public/assets/{defaultLocale-kiwRz9Au.js → defaultLocale-pD7tFa1r.js} +0 -0
  269. /package/payload/server/public/assets/{init-CKZirZ49.js → init-CwJ4b81e.js} +0 -0
  270. /package/payload/server/public/assets/{katex-8mXVa4k3.js → katex-DJPjIBAI.js} +0 -0
  271. /package/payload/server/public/assets/{path-B0d9ncVi.js → path-CK8wrAxY.js} +0 -0
  272. /package/payload/server/public/assets/{preload-helper-C5gCWwwF.js → preload-helper-Bf_JiD2A.js} +0 -0
  273. /package/payload/server/public/assets/{rough.esm-BWqoIFNR.js → rough.esm-Dwml_la6.js} +0 -0
@@ -8,6 +8,7 @@ import { keyRegister } from "./tools/key-register.js";
8
8
  import { keyDeregister } from "./tools/key-deregister.js";
9
9
  import { keyList } from "./tools/key-list.js";
10
10
  import { valuationSale, valuationRent, prices, pricesRent, soldPrices, demand, yields, growth, nationalHpi, pricesPerSqf, soldPricesPerSqf, crime, floodRisk, councilTax, planningApplications, addressMatchUprn, growthPsf, demandRent, propertyTypes, } from "./tools/endpoints.js";
11
+ import { lifelineTool } from "../../../../lib/mcp-lifeline/dist/index.js";
11
12
  import { closeDriver } from "./lib/neo4j.js";
12
13
  import { KeyNotRegisteredError, PropertyDataError, BadResponseError, } from "./lib/propertydata-api.js";
13
14
  import { selectKeyStore } from "./lib/key-store.js";
@@ -52,7 +53,7 @@ function endpointHandler(fn) {
52
53
  // ─────────────────────────────────────────────────────────────────
53
54
  // Key Management
54
55
  // ─────────────────────────────────────────────────────────────────
55
- server.tool("property-data-key-register", "Register the account's PropertyData API key. Validates the key against PropertyData's /national-hpi endpoint, encrypts it with AES-256-GCM, and stores it in Neo4j. One key per account; re-registering overwrites the existing key.", {
56
+ lifelineTool(server, "property-data-key-register", "Register the account's PropertyData API key. Validates the key against PropertyData's /national-hpi endpoint, encrypts it with AES-256-GCM, and stores it in Neo4j. One key per account; re-registering overwrites the existing key.", {
56
57
  apiKey: z.string().min(8).describe("PropertyData API key from propertydata.co.uk dashboard"),
57
58
  }, async ({ apiKey }) => {
58
59
  try {
@@ -70,7 +71,7 @@ server.tool("property-data-key-register", "Register the account's PropertyData A
70
71
  return errorEnvelope(err);
71
72
  }
72
73
  });
73
- server.tool("property-data-key-deregister", "Remove the account's PropertyData API key. The encrypted key is permanently deleted from Neo4j.", {}, async () => {
74
+ lifelineTool(server, "property-data-key-deregister", "Remove the account's PropertyData API key. The encrypted key is permanently deleted from Neo4j.", {}, async () => {
74
75
  try {
75
76
  await keyDeregister({ accountId });
76
77
  return {
@@ -81,7 +82,7 @@ server.tool("property-data-key-deregister", "Remove the account's PropertyData A
81
82
  return errorEnvelope(err);
82
83
  }
83
84
  });
84
- server.tool("property-data-key-list", "Show whether a PropertyData API key is registered for this account. Never reveals the key value.", {}, async () => {
85
+ lifelineTool(server, "property-data-key-list", "Show whether a PropertyData API key is registered for this account. Never reveals the key value.", {}, async () => {
85
86
  try {
86
87
  const text = await keyList({ accountId });
87
88
  return { content: [{ type: "text", text }] };
@@ -107,8 +108,8 @@ const valuationSchema = {
107
108
  .optional()
108
109
  .describe("Finish quality"),
109
110
  };
110
- server.tool("property-data-valuation-sale", "Point sale-price estimate for a property given postcode + attributes. Returns point estimate plus comparables.", valuationSchema, endpointHandler(valuationSale));
111
- server.tool("property-data-valuation-rent", "Point rent estimate (PCM) for a property given postcode + attributes. Returns point estimate plus comparables.", valuationSchema, endpointHandler(valuationRent));
111
+ lifelineTool(server, "property-data-valuation-sale", "Point sale-price estimate for a property given postcode + attributes. Returns point estimate plus comparables.", valuationSchema, endpointHandler(valuationSale));
112
+ lifelineTool(server, "property-data-valuation-rent", "Point rent estimate (PCM) for a property given postcode + attributes. Returns point estimate plus comparables.", valuationSchema, endpointHandler(valuationRent));
112
113
  // ─────────────────────────────────────────────────────────────────
113
114
  // Asking-price distributions
114
115
  // ─────────────────────────────────────────────────────────────────
@@ -120,12 +121,12 @@ const pricesSchema = {
120
121
  .describe("Filter by property type"),
121
122
  bedrooms: z.number().int().min(0).optional().describe("Filter by bedroom count"),
122
123
  };
123
- server.tool("property-data-prices", "Asking-price distribution for sale listings in a postcode — mean, median, 80th percentile.", pricesSchema, endpointHandler(prices));
124
- server.tool("property-data-prices-rent", "Asking-price distribution for rental listings in a postcode — mean, median, 80th percentile (PCM).", pricesSchema, endpointHandler(pricesRent));
124
+ lifelineTool(server, "property-data-prices", "Asking-price distribution for sale listings in a postcode — mean, median, 80th percentile.", pricesSchema, endpointHandler(prices));
125
+ lifelineTool(server, "property-data-prices-rent", "Asking-price distribution for rental listings in a postcode — mean, median, 80th percentile (PCM).", pricesSchema, endpointHandler(pricesRent));
125
126
  // ─────────────────────────────────────────────────────────────────
126
127
  // Sold prices (Land Registry)
127
128
  // ─────────────────────────────────────────────────────────────────
128
- server.tool("property-data-sold-prices", "Land Registry sold transactions for a postcode, optionally filtered by age, type, and bedrooms.", {
129
+ lifelineTool(server, "property-data-sold-prices", "Land Registry sold transactions for a postcode, optionally filtered by age, type, and bedrooms.", {
129
130
  postcode: z.string().min(2).describe("UK postcode (outcode or full)"),
130
131
  max_age: z.number().int().min(1).optional().describe("Max transaction age in months"),
131
132
  type: z
@@ -137,13 +138,13 @@ server.tool("property-data-sold-prices", "Land Registry sold transactions for a
137
138
  // ─────────────────────────────────────────────────────────────────
138
139
  // Demand / yields / growth / national HPI
139
140
  // ─────────────────────────────────────────────────────────────────
140
- server.tool("property-data-demand", "Demand signals for a postcode — count of properties for sale and average days to sell-STC.", { postcode: z.string().min(2).describe("UK postcode (outcode or full)") }, endpointHandler(demand));
141
- server.tool("property-data-yields", "Gross rental yield for a postcode and bedroom count.", {
141
+ lifelineTool(server, "property-data-demand", "Demand signals for a postcode — count of properties for sale and average days to sell-STC.", { postcode: z.string().min(2).describe("UK postcode (outcode or full)") }, endpointHandler(demand));
142
+ lifelineTool(server, "property-data-yields", "Gross rental yield for a postcode and bedroom count.", {
142
143
  postcode: z.string().min(2).describe("UK postcode (outcode or full)"),
143
144
  bedrooms: z.number().int().min(0).describe("Bedroom count"),
144
145
  }, endpointHandler(yields));
145
- server.tool("property-data-growth", "Short-term and long-term price growth signals for a postcode.", { postcode: z.string().min(2).describe("UK postcode (outcode or full)") }, endpointHandler(growth));
146
- server.tool("property-data-national-hpi", "UK national house-price index series. No postcode required.", {}, endpointHandler(nationalHpi));
146
+ lifelineTool(server, "property-data-growth", "Short-term and long-term price growth signals for a postcode.", { postcode: z.string().min(2).describe("UK postcode (outcode or full)") }, endpointHandler(growth));
147
+ lifelineTool(server, "property-data-national-hpi", "UK national house-price index series. No postcode required.", {}, endpointHandler(nationalHpi));
147
148
  // ─────────────────────────────────────────────────────────────────
148
149
  // Task 144 — £/sqft baselines and growth
149
150
  // ─────────────────────────────────────────────────────────────────
@@ -155,8 +156,8 @@ const pricesPerSqfSchema = {
155
156
  .describe("Filter by property type"),
156
157
  bedrooms: z.number().int().min(0).optional().describe("Filter by bedroom count"),
157
158
  };
158
- server.tool("property-data-prices-per-sqf", "Asking £/sqft distribution for sale listings in a postcode — avg plus 70/80/90/100% percentile ranges, with the raw listings that have square-foot data. Use for the asking £/sqft KPI on a market report. Costs 1 credit per call.", pricesPerSqfSchema, endpointHandler(pricesPerSqf));
159
- server.tool("property-data-sold-prices-per-sqf", "Land Registry sold £/sqft distribution for a postcode — avg plus percentile ranges, up to 20 raw sales with square-foot data and a sales-window date range. Use for the achieved £/sqft KPI. Costs 1 credit per call.", {
159
+ lifelineTool(server, "property-data-prices-per-sqf", "Asking £/sqft distribution for sale listings in a postcode — avg plus 70/80/90/100% percentile ranges, with the raw listings that have square-foot data. Use for the asking £/sqft KPI on a market report. Costs 1 credit per call.", pricesPerSqfSchema, endpointHandler(pricesPerSqf));
160
+ lifelineTool(server, "property-data-sold-prices-per-sqf", "Land Registry sold £/sqft distribution for a postcode — avg plus percentile ranges, up to 20 raw sales with square-foot data and a sales-window date range. Use for the achieved £/sqft KPI. Costs 1 credit per call.", {
160
161
  postcode: z.string().min(2).describe("UK postcode (outcode or full)"),
161
162
  type: z
162
163
  .enum(["detached", "semi-detached", "terraced", "flat"])
@@ -165,7 +166,7 @@ server.tool("property-data-sold-prices-per-sqf", "Land Registry sold £/sqft dis
165
166
  bedrooms: z.number().int().min(0).optional().describe("Filter by bedroom count"),
166
167
  max_age: z.number().int().min(1).optional().describe("Max transaction age in months"),
167
168
  }, endpointHandler(soldPricesPerSqf));
168
- server.tool("property-data-growth-psf", "7-year £/sqft series with year-on-year percent change for a postcode. Use for the £/sqft growth chart on a market report. Costs 1 credit per call.", {
169
+ lifelineTool(server, "property-data-growth-psf", "7-year £/sqft series with year-on-year percent change for a postcode. Use for the £/sqft growth chart on a market report. Costs 1 credit per call.", {
169
170
  postcode: z.string().min(2).describe("UK postcode (outcode or full)"),
170
171
  type: z
171
172
  .enum(["detached", "semi-detached", "terraced", "flat"])
@@ -175,7 +176,7 @@ server.tool("property-data-growth-psf", "7-year £/sqft series with year-on-year
175
176
  // ─────────────────────────────────────────────────────────────────
176
177
  // Task 144 — Area risk and cost of occupancy
177
178
  // ─────────────────────────────────────────────────────────────────
178
- server.tool("property-data-crime", "Recent crime statistics for a postcode (or location / town) — per-1,000 rate, 12-month total, breakdown by crime type, and per-month observations. Use for the area-risk pillar. Costs 1 credit per call.", {
179
+ lifelineTool(server, "property-data-crime", "Recent crime statistics for a postcode (or location / town) — per-1,000 rate, 12-month total, breakdown by crime type, and per-month observations. Use for the area-risk pillar. Costs 1 credit per call.", {
179
180
  postcode: z.string().min(2).optional().describe("UK postcode (outcode or full)"),
180
181
  location: z
181
182
  .string()
@@ -183,16 +184,16 @@ server.tool("property-data-crime", "Recent crime statistics for a postcode (or l
183
184
  .describe("Latitude,longitude pair (e.g. '51.5074,-0.1278'). Alternative to postcode."),
184
185
  town: z.string().optional().describe("UK town name. Alternative to postcode."),
185
186
  }, endpointHandler(crime));
186
- server.tool("property-data-flood-risk", "River and sea flood-risk rating for a full UK postcode. Use for area-risk reporting and lender-ready disclosures. Requires a full postcode (not outcode). Costs 1 credit per call.", {
187
+ lifelineTool(server, "property-data-flood-risk", "River and sea flood-risk rating for a full UK postcode. Use for area-risk reporting and lender-ready disclosures. Requires a full postcode (not outcode). Costs 1 credit per call.", {
187
188
  postcode: z.string().min(5).describe("Full UK postcode (not outcode)"),
188
189
  }, endpointHandler(floodRisk));
189
- server.tool("property-data-council-tax", "Council-tax authority, rating, and per-band charges (A–H) for a full UK postcode, plus any per-property bands the API returns. Use for cost-of-occupancy disclosures. Requires a full postcode. Costs 1 credit per call.", {
190
+ lifelineTool(server, "property-data-council-tax", "Council-tax authority, rating, and per-band charges (A–H) for a full UK postcode, plus any per-property bands the API returns. Use for cost-of-occupancy disclosures. Requires a full postcode. Costs 1 credit per call.", {
190
191
  postcode: z.string().min(5).describe("Full UK postcode (not outcode)"),
191
192
  }, endpointHandler(councilTax));
192
193
  // ─────────────────────────────────────────────────────────────────
193
194
  // Task 144 — Planning precedent and address resolution
194
195
  // ─────────────────────────────────────────────────────────────────
195
- server.tool("property-data-planning-applications", "Planning applications within a radius of a postcode — references, proposals, decisions, appeals, distance. Use for development precedent and pre-purchase risk. Costs 2 credits per call. Throttled to ~4 calls per 10 seconds upstream — wrap in the preval skill for fan-out, do not loop directly.", {
196
+ lifelineTool(server, "property-data-planning-applications", "Planning applications within a radius of a postcode — references, proposals, decisions, appeals, distance. Use for development precedent and pre-purchase risk. Costs 2 credits per call. Throttled to ~4 calls per 10 seconds upstream — wrap in the preval skill for fan-out, do not loop directly.", {
196
197
  postcode: z.string().min(2).describe("UK postcode (outcode or full)"),
197
198
  decision_rating: z
198
199
  .enum(["positive", "neutral", "negative"])
@@ -207,13 +208,13 @@ server.tool("property-data-planning-applications", "Planning applications within
207
208
  .describe("Max age of decision in months"),
208
209
  results: z.number().int().min(1).max(100).optional().describe("Max results to return"),
209
210
  }, endpointHandler(planningApplications));
210
- server.tool("property-data-address-match-uprn", "Resolve a full UK address string to its UPRN, address classification, and lat/lng. Use for CRM hygiene and unique-property identification. Costs 10 credits per call — do not fan out blindly; call once per address you actually need to resolve.", {
211
+ lifelineTool(server, "property-data-address-match-uprn", "Resolve a full UK address string to its UPRN, address classification, and lat/lng. Use for CRM hygiene and unique-property identification. Costs 10 credits per call — do not fan out blindly; call once per address you actually need to resolve.", {
211
212
  address: z.string().min(5).describe("Full UK address (line one + postcode)"),
212
213
  }, endpointHandler(addressMatchUprn));
213
214
  // ─────────────────────────────────────────────────────────────────
214
215
  // Task 144 — Rental demand and property-type mix
215
216
  // ─────────────────────────────────────────────────────────────────
216
- server.tool("property-data-demand-rent", "Rental demand signals for a postcode — for-rent count, lets per month, turnover percent, months of inventory, days on market, and a rating. Use for the rental pillar on a market report. Costs 1 credit per call.", {
217
+ lifelineTool(server, "property-data-demand-rent", "Rental demand signals for a postcode — for-rent count, lets per month, turnover percent, months of inventory, days on market, and a rating. Use for the rental pillar on a market report. Costs 1 credit per call.", {
217
218
  postcode: z.string().min(2).describe("UK postcode (outcode or full)"),
218
219
  bedrooms: z.number().int().min(0).optional().describe("Filter by bedroom count"),
219
220
  type: z
@@ -221,7 +222,7 @@ server.tool("property-data-demand-rent", "Rental demand signals for a postcode
221
222
  .optional()
222
223
  .describe("Filter by property type"),
223
224
  }, endpointHandler(demandRent));
224
- server.tool("property-data-property-types", "Output-area property-type distribution (percent by class — detached, semi-detached, terraced, flat) for a postcode. Use for the property-type mix doughnut on a market report. Costs 1 credit per call.", {
225
+ lifelineTool(server, "property-data-property-types", "Output-area property-type distribution (percent by class — detached, semi-detached, terraced, flat) for a postcode. Use for the property-type mix doughnut on a market report. Costs 1 credit per call.", {
225
226
  postcode: z.string().min(2).describe("UK postcode (outcode or full)"),
226
227
  }, endpointHandler(propertyTypes));
227
228
  // ─────────────────────────────────────────────────────────────────
@@ -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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"}
@@ -29,6 +29,7 @@ import {
29
29
  demandRent,
30
30
  propertyTypes,
31
31
  } from "./tools/endpoints.js";
32
+ import { lifelineTool } from "../../../../../../platform/lib/mcp-lifeline/dist/index.js";
32
33
  import { closeDriver } from "./lib/neo4j.js";
33
34
  import {
34
35
  KeyNotRegisteredError,
@@ -84,7 +85,7 @@ function endpointHandler<P extends Record<string, unknown>>(
84
85
  // Key Management
85
86
  // ─────────────────────────────────────────────────────────────────
86
87
 
87
- server.tool(
88
+ lifelineTool(server,
88
89
  "property-data-key-register",
89
90
  "Register the account's PropertyData API key. Validates the key against PropertyData's /national-hpi endpoint, encrypts it with AES-256-GCM, and stores it in Neo4j. One key per account; re-registering overwrites the existing key.",
90
91
  {
@@ -107,7 +108,7 @@ server.tool(
107
108
  },
108
109
  );
109
110
 
110
- server.tool(
111
+ lifelineTool(server,
111
112
  "property-data-key-deregister",
112
113
  "Remove the account's PropertyData API key. The encrypted key is permanently deleted from Neo4j.",
113
114
  {},
@@ -123,7 +124,7 @@ server.tool(
123
124
  },
124
125
  );
125
126
 
126
- server.tool(
127
+ lifelineTool(server,
127
128
  "property-data-key-list",
128
129
  "Show whether a PropertyData API key is registered for this account. Never reveals the key value.",
129
130
  {},
@@ -156,14 +157,14 @@ const valuationSchema = {
156
157
  .describe("Finish quality"),
157
158
  };
158
159
 
159
- server.tool(
160
+ lifelineTool(server,
160
161
  "property-data-valuation-sale",
161
162
  "Point sale-price estimate for a property given postcode + attributes. Returns point estimate plus comparables.",
162
163
  valuationSchema,
163
164
  endpointHandler(valuationSale),
164
165
  );
165
166
 
166
- server.tool(
167
+ lifelineTool(server,
167
168
  "property-data-valuation-rent",
168
169
  "Point rent estimate (PCM) for a property given postcode + attributes. Returns point estimate plus comparables.",
169
170
  valuationSchema,
@@ -183,14 +184,14 @@ const pricesSchema = {
183
184
  bedrooms: z.number().int().min(0).optional().describe("Filter by bedroom count"),
184
185
  };
185
186
 
186
- server.tool(
187
+ lifelineTool(server,
187
188
  "property-data-prices",
188
189
  "Asking-price distribution for sale listings in a postcode — mean, median, 80th percentile.",
189
190
  pricesSchema,
190
191
  endpointHandler(prices),
191
192
  );
192
193
 
193
- server.tool(
194
+ lifelineTool(server,
194
195
  "property-data-prices-rent",
195
196
  "Asking-price distribution for rental listings in a postcode — mean, median, 80th percentile (PCM).",
196
197
  pricesSchema,
@@ -201,7 +202,7 @@ server.tool(
201
202
  // Sold prices (Land Registry)
202
203
  // ─────────────────────────────────────────────────────────────────
203
204
 
204
- server.tool(
205
+ lifelineTool(server,
205
206
  "property-data-sold-prices",
206
207
  "Land Registry sold transactions for a postcode, optionally filtered by age, type, and bedrooms.",
207
208
  {
@@ -220,14 +221,14 @@ server.tool(
220
221
  // Demand / yields / growth / national HPI
221
222
  // ─────────────────────────────────────────────────────────────────
222
223
 
223
- server.tool(
224
+ lifelineTool(server,
224
225
  "property-data-demand",
225
226
  "Demand signals for a postcode — count of properties for sale and average days to sell-STC.",
226
227
  { postcode: z.string().min(2).describe("UK postcode (outcode or full)") },
227
228
  endpointHandler(demand),
228
229
  );
229
230
 
230
- server.tool(
231
+ lifelineTool(server,
231
232
  "property-data-yields",
232
233
  "Gross rental yield for a postcode and bedroom count.",
233
234
  {
@@ -237,14 +238,14 @@ server.tool(
237
238
  endpointHandler(yields),
238
239
  );
239
240
 
240
- server.tool(
241
+ lifelineTool(server,
241
242
  "property-data-growth",
242
243
  "Short-term and long-term price growth signals for a postcode.",
243
244
  { postcode: z.string().min(2).describe("UK postcode (outcode or full)") },
244
245
  endpointHandler(growth),
245
246
  );
246
247
 
247
- server.tool(
248
+ lifelineTool(server,
248
249
  "property-data-national-hpi",
249
250
  "UK national house-price index series. No postcode required.",
250
251
  {},
@@ -264,14 +265,14 @@ const pricesPerSqfSchema = {
264
265
  bedrooms: z.number().int().min(0).optional().describe("Filter by bedroom count"),
265
266
  };
266
267
 
267
- server.tool(
268
+ lifelineTool(server,
268
269
  "property-data-prices-per-sqf",
269
270
  "Asking £/sqft distribution for sale listings in a postcode — avg plus 70/80/90/100% percentile ranges, with the raw listings that have square-foot data. Use for the asking £/sqft KPI on a market report. Costs 1 credit per call.",
270
271
  pricesPerSqfSchema,
271
272
  endpointHandler(pricesPerSqf),
272
273
  );
273
274
 
274
- server.tool(
275
+ lifelineTool(server,
275
276
  "property-data-sold-prices-per-sqf",
276
277
  "Land Registry sold £/sqft distribution for a postcode — avg plus percentile ranges, up to 20 raw sales with square-foot data and a sales-window date range. Use for the achieved £/sqft KPI. Costs 1 credit per call.",
277
278
  {
@@ -286,7 +287,7 @@ server.tool(
286
287
  endpointHandler(soldPricesPerSqf),
287
288
  );
288
289
 
289
- server.tool(
290
+ lifelineTool(server,
290
291
  "property-data-growth-psf",
291
292
  "7-year £/sqft series with year-on-year percent change for a postcode. Use for the £/sqft growth chart on a market report. Costs 1 credit per call.",
292
293
  {
@@ -303,7 +304,7 @@ server.tool(
303
304
  // Task 144 — Area risk and cost of occupancy
304
305
  // ─────────────────────────────────────────────────────────────────
305
306
 
306
- server.tool(
307
+ lifelineTool(server,
307
308
  "property-data-crime",
308
309
  "Recent crime statistics for a postcode (or location / town) — per-1,000 rate, 12-month total, breakdown by crime type, and per-month observations. Use for the area-risk pillar. Costs 1 credit per call.",
309
310
  {
@@ -317,7 +318,7 @@ server.tool(
317
318
  endpointHandler(crime),
318
319
  );
319
320
 
320
- server.tool(
321
+ lifelineTool(server,
321
322
  "property-data-flood-risk",
322
323
  "River and sea flood-risk rating for a full UK postcode. Use for area-risk reporting and lender-ready disclosures. Requires a full postcode (not outcode). Costs 1 credit per call.",
323
324
  {
@@ -326,7 +327,7 @@ server.tool(
326
327
  endpointHandler(floodRisk),
327
328
  );
328
329
 
329
- server.tool(
330
+ lifelineTool(server,
330
331
  "property-data-council-tax",
331
332
  "Council-tax authority, rating, and per-band charges (A–H) for a full UK postcode, plus any per-property bands the API returns. Use for cost-of-occupancy disclosures. Requires a full postcode. Costs 1 credit per call.",
332
333
  {
@@ -339,7 +340,7 @@ server.tool(
339
340
  // Task 144 — Planning precedent and address resolution
340
341
  // ─────────────────────────────────────────────────────────────────
341
342
 
342
- server.tool(
343
+ lifelineTool(server,
343
344
  "property-data-planning-applications",
344
345
  "Planning applications within a radius of a postcode — references, proposals, decisions, appeals, distance. Use for development precedent and pre-purchase risk. Costs 2 credits per call. Throttled to ~4 calls per 10 seconds upstream — wrap in the preval skill for fan-out, do not loop directly.",
345
346
  {
@@ -360,7 +361,7 @@ server.tool(
360
361
  endpointHandler(planningApplications),
361
362
  );
362
363
 
363
- server.tool(
364
+ lifelineTool(server,
364
365
  "property-data-address-match-uprn",
365
366
  "Resolve a full UK address string to its UPRN, address classification, and lat/lng. Use for CRM hygiene and unique-property identification. Costs 10 credits per call — do not fan out blindly; call once per address you actually need to resolve.",
366
367
  {
@@ -373,7 +374,7 @@ server.tool(
373
374
  // Task 144 — Rental demand and property-type mix
374
375
  // ─────────────────────────────────────────────────────────────────
375
376
 
376
- server.tool(
377
+ lifelineTool(server,
377
378
  "property-data-demand-rent",
378
379
  "Rental demand signals for a postcode — for-rent count, lets per month, turnover percent, months of inventory, days on market, and a rating. Use for the rental pillar on a market report. Costs 1 credit per call.",
379
380
  {
@@ -387,7 +388,7 @@ server.tool(
387
388
  endpointHandler(demandRent),
388
389
  );
389
390
 
390
- server.tool(
391
+ lifelineTool(server,
391
392
  "property-data-property-types",
392
393
  "Output-area property-type distribution (percent by class — detached, semi-detached, terraced, flat) for a postcode. Use for the property-type mix doughnut on a market report. Costs 1 credit per call.",
393
394
  {
@@ -3548,7 +3548,6 @@ var PUBLIC_ALLOWED_PREFIXES = [
3548
3548
  "/api/public-reader/",
3549
3549
  "/api/access/",
3550
3550
  "/api/health",
3551
- "/api/group/",
3552
3551
  "/api/telegram/",
3553
3552
  // QuickBooks OAuth consent callback. Intuit redirects the operator's browser
3554
3553
  // here with no admin cookie; the route authenticates by validating the OAuth
@@ -4410,102 +4409,6 @@ async function findRecentConversation(visitorId, accountId, agentSlug, maxAgeHou
4410
4409
  await session.close();
4411
4410
  }
4412
4411
  }
4413
- async function findGroupBySlug(groupSlug, accountId) {
4414
- const session = getSession();
4415
- try {
4416
- const result = await session.run(
4417
- `MATCH (c:Conversation {groupSlug: $groupSlug, accountId: $accountId, type: 'group'})
4418
- WHERE NOT c:Trashed
4419
- RETURN c.sessionId AS sessionId, c.groupName AS groupName, c.agentSlug AS agentSlug`,
4420
- { groupSlug, accountId },
4421
- { timeout: 2e3 }
4422
- );
4423
- const record = result.records[0];
4424
- if (!record) return null;
4425
- return {
4426
- sessionId: record.get("sessionId"),
4427
- groupName: record.get("groupName"),
4428
- agentSlug: record.get("agentSlug")
4429
- };
4430
- } catch (err) {
4431
- console.error(`[group] findGroupBySlug failed: ${err instanceof Error ? err.message : String(err)}`);
4432
- return null;
4433
- } finally {
4434
- await session.close();
4435
- }
4436
- }
4437
- async function getGroupParticipants(sessionId) {
4438
- const session = getSession();
4439
- try {
4440
- const result = await session.run(
4441
- `MATCH (p:Person)-[r:PARTICIPATES_IN]->(c:Conversation {sessionId: $sessionId})
4442
- RETURN p.givenName AS givenName, p.familyName AS familyName,
4443
- r.displayName AS displayName, r.joinedAt AS joinedAt, r.visitorId AS visitorId`,
4444
- { sessionId }
4445
- );
4446
- return result.records.map((r) => ({
4447
- displayName: r.get("displayName") || r.get("givenName"),
4448
- givenName: r.get("givenName"),
4449
- familyName: r.get("familyName"),
4450
- joinedAt: String(r.get("joinedAt")),
4451
- visitorId: r.get("visitorId")
4452
- }));
4453
- } catch (err) {
4454
- console.error(`[group] getGroupParticipants failed: ${err instanceof Error ? err.message : String(err)}`);
4455
- return [];
4456
- } finally {
4457
- await session.close();
4458
- }
4459
- }
4460
- async function checkGroupMembership(sessionId, visitorId) {
4461
- const session = getSession();
4462
- try {
4463
- const result = await session.run(
4464
- `MATCH (p:Person)-[r:PARTICIPATES_IN]->(c:Conversation {sessionId: $sessionId})
4465
- WHERE r.visitorId = $visitorId
4466
- RETURN r.displayName AS displayName
4467
- LIMIT 1`,
4468
- { sessionId, visitorId }
4469
- );
4470
- return result.records[0]?.get("displayName") ?? null;
4471
- } catch (err) {
4472
- console.error(`[group] checkGroupMembership failed: ${err instanceof Error ? err.message : String(err)}`);
4473
- return null;
4474
- } finally {
4475
- await session.close();
4476
- }
4477
- }
4478
- async function bindVisitorToGroup(sessionId, visitorId, personEmail, personPhone) {
4479
- const session = getSession();
4480
- try {
4481
- const result = await session.run(
4482
- `MATCH (p:Person)-[r:PARTICIPATES_IN]->(c:Conversation {sessionId: $sessionId})
4483
- WHERE ($email IS NOT NULL AND p.email = $email)
4484
- OR ($phone IS NOT NULL AND p.telephone = $phone)
4485
- SET r.visitorId = $visitorId
4486
- RETURN r.displayName AS displayName
4487
- LIMIT 1`,
4488
- {
4489
- sessionId,
4490
- visitorId,
4491
- email: personEmail ?? null,
4492
- phone: personPhone ?? null
4493
- }
4494
- );
4495
- const name = result.records[0]?.get("displayName");
4496
- if (name) {
4497
- console.error(`[group] joined id=${sessionId.slice(0, 8)}\u2026 visitor=${visitorId.slice(0, 8)}\u2026`);
4498
- } else {
4499
- console.error(`[group] auth-denied id=${sessionId.slice(0, 8)}\u2026 visitor=${visitorId.slice(0, 8)}\u2026`);
4500
- }
4501
- return name ? { displayName: name } : null;
4502
- } catch (err) {
4503
- console.error(`[group] bindVisitorToGroup failed: ${err instanceof Error ? err.message : String(err)}`);
4504
- return null;
4505
- } finally {
4506
- await session.close();
4507
- }
4508
- }
4509
4412
  var HEX_COLOR_RE = /^#[0-9a-fA-F]{3,8}$/;
4510
4413
  async function fetchBranding(accountId) {
4511
4414
  const session = getSession();
@@ -5905,10 +5808,6 @@ export {
5905
5808
  GREETING_DIRECTIVE,
5906
5809
  ensureConversation,
5907
5810
  findRecentConversation,
5908
- findGroupBySlug,
5909
- getGroupParticipants,
5910
- checkGroupMembership,
5911
- bindVisitorToGroup,
5912
5811
  fetchBranding,
5913
5812
  persistMessage,
5914
5813
  getAgentSessionIdForConversation,
@@ -16,7 +16,7 @@ import {
16
16
  sanitizeClientCorrId,
17
17
  vncLog,
18
18
  websockifyLog
19
- } from "./chunk-Q7EWROVN.js";
19
+ } from "./chunk-NCRJQEZ3.js";
20
20
  import "./chunk-PFF6I7KP.js";
21
21
 
22
22
  // server/edge.ts
@@ -0,0 +1 @@
1
+ import{o as e}from"./chunk-Pqm5yXtL.js";import{E as t,L as n,N as r,b as i,v as a,y as o}from"./OperatorConversations-DBy2G8q3.js";import{i as s}from"./admin-types-CJrGd46U.js";import{d as c,v as l}from"./AdminShell-0meAFBva.js";import{t as u}from"./Checkbox-DXisJRUK.js";var d=`admin-landing-redirected`,f=`/graph`;function p(e){return e.variant===`operator`?!1:e.appState===`chat`&&!e.alreadyRedirected}var m=e(n(),1);function h(e=`admin`){let[t,n]=(0,m.useState)(`loading`),[i,a]=(0,m.useState)(``),[o,c]=(0,m.useState)(``),[u,h]=(0,m.useState)(``),[g,_]=(0,m.useState)(!1),[v,y]=(0,m.useState)(!1),[b,x]=(0,m.useState)(!1),[S,C]=(0,m.useState)(!1),[w,T]=(0,m.useState)(!1),[E,D]=(0,m.useState)(null),[O,k]=(0,m.useState)(null),[A,j]=(0,m.useState)(void 0),[M,N]=(0,m.useState)(null),[P,F]=(0,m.useState)(void 0),[I,L]=(0,m.useState)(null),[ee,R]=(0,m.useState)(null),[z,B]=(0,m.useState)([]),[V,H]=(0,m.useState)(!1),[U,W]=(0,m.useState)(void 0),G=(0,m.useRef)(void 0),[K,q]=(0,m.useState)(!1);(0,m.useEffect)(()=>{typeof window>`u`||fetch(`/api/remote-auth/status`).then(e=>e.ok?e.json():null).then(e=>{e?.configured&&q(!0)}).catch(()=>{})},[]);let J=(0,m.useRef)(null),Y=(0,m.useRef)(null);(0,m.useEffect)(()=>{async function e(){let e=null;try{e=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!e)return!1;try{let t=await fetch(`/api/admin/session?session_key=${encodeURIComponent(e)}`);if(t.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}return!1}if(!t.ok)return!1;let r=await t.json();D(r.session_key),R(r.sessionId??null),j(r.businessName),N(r.role??null),F(r.userName===void 0?null:r.userName),L(r.avatar??null);let i=s(r.thinkingView);return G.current=i,W(i),n(`chat`),!0}catch(e){return console.error(`[admin] session restore failed:`,e),!1}}async function t(r=2){try{let i=await fetch(`/api/health`);if(!i.ok){if(r>0)return await new Promise(e=>setTimeout(e,1500)),t(r-1);console.error(`[admin] health check returned ${i.status} after retries`),n(`set-pin`);return}let a=await i.json();if(!a.pin_configured){n(`set-pin`);return}if(!a.claude_authenticated){n(`connect-claude`);return}if(await e())return;n(`enter-pin`)}catch(e){if(r>0)return await new Promise(e=>setTimeout(e,1500)),t(r-1);console.error(`[admin] health check failed:`,e),n(`set-pin`)}}t()},[]),(0,m.useEffect)(()=>{t===`chat`&&fetch(`/api/admin/claude-info`).then(e=>{if(e.ok)return e.json()}).then(e=>{e&&k(e)}).catch(()=>{})},[t]),(0,m.useEffect)(()=>{if(typeof window>`u`)return;let n=!1;try{n=sessionStorage.getItem(d)===`1`}catch{}if(p({appState:t,alreadyRedirected:n,variant:e})){try{sessionStorage.setItem(d,`1`)}catch{}console.info(`[admin-ui] landing-redirect target=${f}`),window.location.replace(f)}},[t,e]);let X=(0,m.useRef)(null);(0,m.useEffect)(()=>{if(t!==`chat`)return;let e=setInterval(async()=>{try{let e=await fetch(`/api/health`);if(e.ok){let t=await e.json();if(t.auth_status===`dead`||t.auth_status===`missing`){n(`connect-claude`);return}}}catch{}if(E)try{let e=await fetch(`/api/admin/session?session_key=${encodeURIComponent(E)}`);if(e.status!==401)return;let t=(await e.clone().json().catch(()=>null))?.code??`unknown-401`;if(t===`remote-auth-required`){r(`heartbeat`,`/api/admin/session`);return}console.warn(`[admin-auth] outcome=heartbeat-detected-expiry code=${t}`),X.current?.()}catch{}},300*1e3);return()=>clearInterval(e)},[t,E]),(0,m.useEffect)(()=>{t===`connect-claude`&&fetch(`/api/health`).then(e=>e.ok?e.json():null).then(e=>{e?.claude_authenticated&&n(`enter-pin`)}).catch(()=>{})},[t]);async function Z(e,t){y(!0);try{let r=await fetch(`/api/admin/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:e,...t?{accountId:t}:{}})});if(!r.ok){h((await r.json().catch(()=>({}))).error||`Invalid PIN`);return}let i=await r.json();if(i.accounts&&!i.session_key){console.log(`[admin] account picker shown: userId=${i.userId} accountCount=${i.accounts.length}`),B(i.accounts),n(`account-picker`);return}D(i.session_key),R(i.sessionId??null),j(i.businessName),N(i.role??null),F(i.userName===void 0?null:i.userName),L(i.avatar??null);let o=s(i.thinkingView);if(G.current=o,W(o),t)try{sessionStorage.setItem(`maxy-account-id`,t)}catch{}try{sessionStorage.setItem(`maxy-admin-session-key`,i.session_key)}catch{}a(``),n(`chat`)}catch(e){console.error(`[admin] connection error:`,e),h(`Could not connect.`)}finally{y(!1),H(!1)}}let Q=(0,m.useCallback)(async e=>{if(e.preventDefault(),v)return;h(``);let t=o.trim();if(!t){h(`Please enter your name.`);return}if(i.length<4){h(`PIN must be at least 4 characters.`);return}let r=i;y(!0);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:r,name:t})});if(!e.ok){let t=await e.json().catch(()=>({}));if(e.status===409){console.log(`[admin] PIN already configured — re-checking health`);try{let e=await fetch(`/api/health`);if(e.ok){let r=await e.json();r.pin_configured&&r.claude_authenticated?n(`enter-pin`):r.pin_configured?n(`connect-claude`):h(t.error||`Failed to set PIN.`)}else n(`enter-pin`)}catch{n(`enter-pin`)}return}h(t.error||`Failed to set PIN.`);return}let i=await fetch(`/api/health`);if((i.ok?await i.json():null)?.claude_authenticated){await Z(r);return}a(``),n(`connect-claude`)}catch(e){console.error(`[admin] connection error:`,e),h(`Could not connect.`)}finally{y(!1)}},[i,v,o]),te=(0,m.useCallback)(async e=>{e.preventDefault(),h(``),await Z(i)},[i]),ne=(0,m.useCallback)(async()=>{T(!0);try{if(!await l())return console.warn(`[admin-ui] claude-disconnect not verified — credentials may persist; staying put`),!1;D(null),N(null),F(void 0),L(null);try{sessionStorage.removeItem(`maxy-admin-session-key`),sessionStorage.removeItem(`maxy-account-id`),sessionStorage.removeItem(d)}catch{}return n(`connect-claude`),!0}finally{T(!1)}},[]),$=(0,m.useCallback)(()=>{D(null),N(null),F(void 0),L(null);try{sessionStorage.removeItem(`maxy-admin-session-key`),sessionStorage.removeItem(`maxy-account-id`),sessionStorage.removeItem(d)}catch{}a(``),h(``),n(`enter-pin`)},[]);return(0,m.useEffect)(()=>{X.current=$},[$]),{appState:t,setAppState:n,pin:i,setPin:a,operatorName:o,setOperatorName:c,pinError:u,setPinError:h,showPin:g,setShowPin:_,pinLoading:v,authPolling:b,setAuthPolling:x,authLoading:S,setAuthLoading:C,disconnecting:w,cacheKey:E,setCacheKey:D,claudeInfo:O,setClaudeInfo:k,businessName:A,role:M,userName:P,userAvatar:I,sessionId:ee,setSessionId:R,accounts:z,accountPickerLoading:V,expandAll:U,setExpandAll:W,expandAllDefaultRef:G,remoteAuthEnabled:K,pinInputRef:J,setPinFormRef:Y,handleSetPin:Q,handleLogin:te,handleAccountSelect:(0,m.useCallback)(async e=>{H(!0),h(``),await Z(i,e)},[i]),handleDisconnect:ne,handleLogout:$,handleChangePin:(0,m.useCallback)(async()=>{if(!i){h(`Enter your current PIN first.`);return}y(!0),h(``);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify({currentPin:i})});if(!e.ok){h((await e.json().catch(()=>({error:`Incorrect PIN.`}))).error||`Incorrect PIN.`);return}a(``),h(``),n(`set-pin`)}catch(e){console.error(`[admin-auth] change pin failed:`,e),h(e instanceof Error?e.message:String(e))}finally{y(!1)}},[i])}}var g=i();function _({inputRef:e,value:t,onChange:n,onComplete:r,showPin:i,autoFocus:a}){let o=(0,m.useRef)([]);function s(e,r){r.key===`Backspace`?(r.preventDefault(),t[e]?n(t.slice(0,e)+t.slice(e+1)):e>0&&(n(t.slice(0,e-1)+t.slice(e)),o.current[e-1]?.focus())):r.key===`ArrowLeft`&&e>0?o.current[e-1]?.focus():r.key===`ArrowRight`&&e<5?o.current[e+1]?.focus():r.key===`Enter`&&(r.preventDefault(),r.currentTarget.form?.requestSubmit())}function c(e,i){let a=i.nativeEvent.data;if(!a||!/^\d$/.test(a))return;let s=t.split(``);for(s[e]=a;s.length<e;)s.push(``);let c=s.join(``).replace(/\D/g,``).slice(0,6);n(c),c.length===6?r?.(c):e<5&&o.current[e+1]?.focus()}function l(e){e.preventDefault();let t=e.clipboardData.getData(`text`).replace(/\D/g,``).slice(0,6);t&&(n(t),t.length===6?r?.(t):o.current[t.length]?.focus())}return(0,g.jsx)(`div`,{className:`pin-field`,children:Array.from({length:6}).map((n,r)=>(0,g.jsx)(`input`,{ref:t=>{o.current[r]=t,r===0&&e&&(e.current=t)},type:`text`,inputMode:`numeric`,className:`pin-box${t[r]?` pin-box-filled`:``}`,value:t[r]?i?t[r]:`•`:``,onKeyDown:e=>s(r,e),onInput:e=>c(r,e),onPaste:l,onFocus:e=>e.target.select(),autoFocus:a&&r===0,autoComplete:`off`,maxLength:1,"aria-label":`PIN digit ${r+1}`},r))})}function v(e){let{pin:t,setPin:n,showPin:r,setShowPin:i,pinLoading:s,pinError:l,pinInputRef:d,setPinFormRef:f,onSubmit:p,operatorName:m,setOperatorName:h}=e;return(0,g.jsx)(`div`,{className:`connect-page`,children:(0,g.jsxs)(`div`,{className:`connect-content`,children:[(0,g.jsx)(`img`,{src:o,alt:a.productName,className:`connect-logo connect-logo--maxy`}),!a.logoContainsName&&(0,g.jsxs)(`h1`,{className:`connect-title`,children:[`Welcome to `,a.productName]}),(0,g.jsxs)(`p`,{className:`connect-subtitle`,children:[`Tell `,a.productName,` who you are, then choose a PIN.`]}),(0,g.jsxs)(`form`,{ref:f,onSubmit:p,className:`connect-pin-form`,children:[(0,g.jsxs)(`div`,{className:`pin-input-row`,children:[(0,g.jsx)(`input`,{type:`text`,className:`connect-name-input`,placeholder:`Your full name`,value:m,onChange:e=>h(e.target.value),autoComplete:`name`,autoFocus:!0,required:!0,"aria-label":`Your full name`}),(0,g.jsx)(`div`,{style:{width:38,flexShrink:0},"aria-hidden":`true`})]}),(0,g.jsxs)(`div`,{className:`pin-input-row`,children:[(0,g.jsx)(_,{inputRef:d,value:t,onChange:n,onComplete:()=>{},showPin:r}),(0,g.jsx)(c,{variant:`send`,type:`submit`,disabled:!t||!m.trim(),loading:s,"aria-label":`Set PIN`,children:(0,g.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,g.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,g.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,g.jsx)(u,{checked:r,onChange:()=>i(e=>!e),label:`Show PIN`})]}),l&&(0,g.jsx)(`p`,{className:`admin-pin-error`,children:l})]})})}function y(e){let{pin:t,setPin:n,showPin:r,setShowPin:i,pinLoading:s,pinError:l,pinInputRef:d,onSubmit:f,onChangePin:p,remoteAuthEnabled:m,onSignOutRemote:h}=e;return(0,g.jsxs)(`div`,{className:`connect-page`,children:[m&&h&&(0,g.jsx)(`button`,{type:`button`,className:`connect-signout`,onClick:h,children:`Sign out`}),(0,g.jsxs)(`div`,{className:`connect-content`,children:[(0,g.jsx)(`img`,{src:o,alt:a.productName,className:`connect-logo connect-logo--maxy`}),!a.logoContainsName&&(0,g.jsx)(`h1`,{className:`connect-title`,children:a.productName}),(0,g.jsxs)(`form`,{onSubmit:f,className:`connect-pin-form`,children:[(0,g.jsxs)(`div`,{className:`pin-input-row`,children:[(0,g.jsx)(_,{inputRef:d,value:t,onChange:n,onComplete:()=>{},showPin:r,autoFocus:!0}),(0,g.jsx)(c,{variant:`send`,type:`submit`,disabled:!t,loading:s,children:(0,g.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,g.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,g.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,g.jsxs)(`div`,{className:`pin-options`,children:[(0,g.jsx)(u,{checked:r,onChange:()=>i(e=>!e),label:`Show PIN`}),(0,g.jsx)(c,{type:`button`,variant:`ghost`,onClick:p,children:`Change PIN`})]})]}),l&&(0,g.jsx)(`p`,{className:`admin-pin-error`,children:l})]})]})}function b(e){let{accounts:n,loading:r,error:i,onSelect:s}=e;return(0,g.jsx)(`div`,{className:`connect-page`,children:(0,g.jsxs)(`div`,{className:`connect-content`,children:[(0,g.jsx)(`img`,{src:o,alt:a.productName,className:`connect-logo connect-logo--maxy`}),!a.logoContainsName&&(0,g.jsx)(`h1`,{className:`connect-title`,children:a.productName}),(0,g.jsx)(`p`,{className:`connect-subtitle`,children:`Select an account`}),(0,g.jsx)(`div`,{className:`account-picker-list`,children:n.map(e=>(0,g.jsxs)(`button`,{className:`account-picker-card`,onClick:()=>s(e.accountId),disabled:r,type:`button`,children:[(0,g.jsx)(`span`,{className:`account-picker-name`,children:e.businessName||e.accountId}),(0,g.jsx)(`span`,{className:`account-picker-role`,children:e.role}),r&&(0,g.jsx)(t,{className:`account-picker-spinner`,size:16})]},e.accountId))}),i&&(0,g.jsx)(`p`,{className:`admin-pin-error`,children:i})]})})}function x(e){let{authPolling:t,setAuthPolling:n,authLoading:r,setAuthLoading:i,pinError:s,setPinError:l,setAppState:u}=e,[d,f]=(0,m.useState)(!1),[p,h]=(0,m.useState)(!1);async function _(){h(!0),l(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`launch-browser`})})).json();e.launched?f(!0):e.error&&l(e.error)}catch(e){console.error(`[admin] browser launch error:`,e),l(`Could not launch browser.`)}h(!1)}async function v(){i(!0),l(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`})).json();if(e.started){n(!0),f(!0),i(!1);for(let e=0;e<120;e++)if(await new Promise(e=>setTimeout(e,2e3)),(await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`wait`})})).json()).authenticated){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),u(`enter-pin`);return}l(`Timed out waiting for sign-in. Try again.`),n(!1)}else e.error&&l(e.error)}catch(e){console.error(`[admin] auth flow error:`,e),l(`Could not start auth flow.`)}i(!1)}async function y(){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),n(!1),l(``)}return t||d?(0,g.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,height:`100dvh`,overflow:`auto`},children:[(0,g.jsxs)(`header`,{className:`chat-header`,style:{paddingBottom:`12px`,flexShrink:0,position:`relative`,maxWidth:`680px`,width:`100%`,margin:`0 auto`,padding:`24px 20px 12px`},children:[t?(0,g.jsx)(`button`,{onClick:y,style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Cancel`,children:`✕`}):(0,g.jsx)(`button`,{onClick:()=>f(!1),style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Close browser`,children:`✕`}),(0,g.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`chat-logo`}),(0,g.jsx)(`h1`,{className:`chat-tagline`,children:`Connect Claude`}),(0,g.jsx)(`p`,{className:`chat-intro`,children:t?`Sign in and authorize in the browser below.`:`Open your email or prepare your accounts, then sign in.`}),!t&&(0,g.jsx)(`div`,{style:{marginTop:`12px`},children:(0,g.jsx)(c,{variant:`primary`,onClick:v,disabled:r,children:r?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`})})]}),(0,g.jsx)(`div`,{style:{flex:1,display:`flex`,flexDirection:`column`,minHeight:0,gap:`10px`,padding:`0 0 16px`},children:(0,g.jsx)(`iframe`,{src:`/vnc-viewer.html`,style:{flex:1,width:`100%`,minHeight:0,border:`none`,background:`#111`,display:`block`},title:`Claude Sign-in`})}),s&&(0,g.jsx)(`p`,{className:`admin-pin-error`,style:{textAlign:`center`,padding:`0 20px 16px`},children:s})]}):(0,g.jsx)(`div`,{className:`connect-page`,children:(0,g.jsxs)(`div`,{className:`connect-content`,children:[(0,g.jsxs)(`div`,{className:`connect-logos`,children:[(0,g.jsx)(`div`,{className:`connect-logo-wrap`,children:(0,g.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`connect-logo`})}),(0,g.jsx)(`svg`,{className:`connect-arrow`,viewBox:`0 0 48 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:(0,g.jsx)(`path`,{d:`M0 12h44m0 0l-8-8m8 8l-8 8`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`})}),(0,g.jsxs)(`div`,{className:`connect-logo-wrap`,children:[(0,g.jsx)(`img`,{src:o,alt:a.productName,className:`connect-logo connect-logo--maxy`}),!a.logoContainsName&&(0,g.jsx)(`span`,{className:`connect-logo-label`,children:a.productName})]})]}),(0,g.jsxs)(`h1`,{className:`connect-title`,children:[`Connect Claude to power `,a.productName]}),(0,g.jsx)(`p`,{className:`connect-subtitle`,children:`Sign in with your Anthropic account to get started.`}),(0,g.jsx)(c,{variant:`primary`,onClick:v,disabled:r,children:r?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`}),(0,g.jsx)(`p`,{style:{marginTop:`6px`,fontSize:`11px`,color:`#999`,maxWidth:`300px`,textAlign:`center`,lineHeight:`1.4`},children:`First time? You may need to sign into your email and Anthropic account in the browser before connecting.`}),(0,g.jsx)(`button`,{onClick:_,disabled:p,style:{marginTop:`12px`,background:`none`,border:`none`,color:`var(--color-primary, #666)`,fontSize:`13px`,cursor:`pointer`,textDecoration:`underline`,textUnderlineOffset:`3px`},children:p?`Launching…`:`Open browser first`}),s&&(0,g.jsx)(`p`,{className:`admin-pin-error`,children:s})]})})}function S({auth:e}){return e.appState===`loading`?(0,g.jsx)(`div`,{className:`connect-page`}):e.appState===`set-pin`?(0,g.jsx)(v,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,setPinFormRef:e.setPinFormRef,onSubmit:e.handleSetPin,operatorName:e.operatorName,setOperatorName:e.setOperatorName}):e.appState===`connect-claude`?(0,g.jsx)(x,{authPolling:e.authPolling,setAuthPolling:e.setAuthPolling,authLoading:e.authLoading,setAuthLoading:e.setAuthLoading,pinError:e.pinError,setPinError:e.setPinError,setAppState:e.setAppState}):e.appState===`enter-pin`?(0,g.jsx)(y,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,onSubmit:e.handleLogin,onChangePin:e.handleChangePin,remoteAuthEnabled:e.remoteAuthEnabled,onSignOutRemote:()=>{console.info(`[admin-ui] remote-auth sign-out → /__remote-auth/logout`),window.location.href=`/__remote-auth/logout`}}):e.appState===`account-picker`?(0,g.jsx)(b,{accounts:e.accounts,loading:e.accountPickerLoading,error:e.pinError,onSelect:e.handleAccountSelect}):null}export{h as n,S as t};