@rubytech/create-maxy-code 0.1.114 → 0.1.115

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 (711) hide show
  1. package/dist/__tests__/installer-specialist-registration.test.js +40 -1
  2. package/dist/__tests__/premium-bundle-gate.test.js +59 -0
  3. package/dist/index.js +24 -1
  4. package/dist/specialist-registration.js +15 -0
  5. package/package.json +1 -1
  6. package/payload/platform/config/brand.json +1 -1
  7. package/payload/platform/neo4j/schema.cypher +1 -1
  8. package/payload/platform/plugins/.claude-plugin/marketplace.json +0 -5
  9. package/payload/platform/plugins/contacts/mcp/dist/index.js +3 -3
  10. package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -1
  11. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +1 -1
  12. package/payload/platform/plugins/docs/references/contacts-guide.md +1 -9
  13. package/payload/platform/plugins/docs/references/getting-started.md +1 -1
  14. package/payload/platform/plugins/docs/references/internals.md +1 -1
  15. package/payload/platform/plugins/docs/references/platform.md +1 -1
  16. package/payload/platform/plugins/docs/references/plugins-guide.md +1 -2
  17. package/payload/platform/plugins/linkedin-import/PLUGIN.md +1 -1
  18. package/payload/platform/plugins/memory/PLUGIN.md +1 -1
  19. package/payload/platform/plugins/sales/.claude-plugin/plugin.json +1 -1
  20. package/payload/platform/plugins/sales/PLUGIN.md +9 -9
  21. package/payload/platform/plugins/sales/references/close-tracking.md +6 -6
  22. package/payload/platform/plugins/sales/references/faq.md +1 -5
  23. package/payload/platform/plugins/sales/references/objection-handling.md +2 -2
  24. package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
  25. package/payload/platform/plugins/scheduling/mcp/dist/index.js +2 -2
  26. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  27. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js +1 -1
  28. package/payload/platform/plugins/venture-studio/skills/office-hours/SKILL.md +3 -3
  29. package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/landing-page.md +4 -4
  30. package/payload/platform/plugins/workflows/PLUGIN.md +1 -1
  31. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts +1 -1
  32. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +2 -2
  33. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
  34. package/payload/platform/scripts/conversation-id-allowlist.txt +0 -7
  35. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  36. package/payload/platform/services/claude-session-manager/dist/http-server.js +42 -1
  37. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  38. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +34 -0
  39. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +83 -2
  41. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  42. package/payload/platform/templates/specialists/agents/project-manager.md +1 -3
  43. package/payload/premium-plugins/.claude-plugin/marketplace.json +0 -10
  44. package/payload/premium-plugins/venture-studio/skills/office-hours/SKILL.md +3 -3
  45. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/landing-page.md +4 -4
  46. package/payload/server/{chunk-FSPPVVWM.js → chunk-FJCI6X3H.js} +192 -0
  47. package/payload/server/maxy-edge.js +1 -1
  48. package/payload/server/public/assets/{ChatInput-CsnIedhS.js → ChatInput-CJo_77bp.js} +5 -1
  49. package/payload/server/public/assets/{Checkbox-CWugFyFT.js → Checkbox-YrQovXpN.js} +1 -1
  50. package/payload/server/public/assets/{admin-D3gZuyUn.js → admin-DOxHsV7g.js} +25 -25
  51. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CeTRKWDb.js → architectureDiagram-Q4EWVU46-Breg9-99.js} +1 -1
  52. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DeeIX5U3.js → blockDiagram-DXYQGD6D-DXf1_673.js} +1 -1
  53. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CFsqZuil.js → c4Diagram-AHTNJAMY-CSZ36W4-.js} +1 -1
  54. package/payload/server/public/assets/channel-BmZnt3PP.js +1 -0
  55. package/payload/server/public/assets/{chunk-336JU56O-DpIXuFM0.js → chunk-336JU56O-DsrLk2eK.js} +2 -2
  56. package/payload/server/public/assets/{chunk-426QAEUC-Qk8qqrvA.js → chunk-426QAEUC-JpNfNf81.js} +1 -1
  57. package/payload/server/public/assets/{chunk-4TB4RGXK-DtM8-CUn.js → chunk-4TB4RGXK-DmClEAD0.js} +1 -1
  58. package/payload/server/public/assets/{chunk-5FUZZQ4R-CrSQ4ySU.js → chunk-5FUZZQ4R-BI9blW3N.js} +1 -1
  59. package/payload/server/public/assets/{chunk-5PVQY5BW-Bn2nQwdj.js → chunk-5PVQY5BW-BbgttEFO.js} +1 -1
  60. package/payload/server/public/assets/{chunk-EDXVE4YY-CzCPnR0P.js → chunk-EDXVE4YY-BX_LCFOx.js} +1 -1
  61. package/payload/server/public/assets/{chunk-ENJZ2VHE-CgZj9RoG.js → chunk-ENJZ2VHE-Bb7EoD0w.js} +1 -1
  62. package/payload/server/public/assets/{chunk-ICPOFSXX-wy-eNjwW.js → chunk-ICPOFSXX-DH8uQk-s.js} +1 -1
  63. package/payload/server/public/assets/{chunk-OYMX7WX6-CMmJtL8S.js → chunk-OYMX7WX6-FH5kgXsw.js} +1 -1
  64. package/payload/server/public/assets/{chunk-U2HBQHQK-CFCW7OaT.js → chunk-U2HBQHQK-D_ljlkHr.js} +1 -1
  65. package/payload/server/public/assets/{chunk-X2U36JSP-Bgh-CJSN.js → chunk-X2U36JSP-BX3EmZvm.js} +1 -1
  66. package/payload/server/public/assets/{chunk-YZCP3GAM-BXKwZ4vN.js → chunk-YZCP3GAM-Vu7-E93h.js} +1 -1
  67. package/payload/server/public/assets/{chunk-ZZ45TVLE-BiOuK5NP.js → chunk-ZZ45TVLE-CwjhNPX5.js} +1 -1
  68. package/payload/server/public/assets/classDiagram-6PBFFD2Q-kmMLFUpV.js +1 -0
  69. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BV7Ae8ct.js +1 -0
  70. package/payload/server/public/assets/clone-B5eqoN9I.js +1 -0
  71. package/payload/server/public/assets/{dagre-DyCxa9Q2.js → dagre-Ce6gsj0C.js} +1 -1
  72. package/payload/server/public/assets/{dagre-KV5264BT-Cffo_hmf.js → dagre-KV5264BT-BaMGpsoy.js} +1 -1
  73. package/payload/server/public/assets/data-NMvGx6jm.js +1 -0
  74. package/payload/server/public/assets/{diagram-5BDNPKRD-Bt93Du3V.js → diagram-5BDNPKRD-CHEE9rjq.js} +1 -1
  75. package/payload/server/public/assets/{diagram-G4DWMVQ6-v4r-tBsC.js → diagram-G4DWMVQ6-C98sZLW1.js} +1 -1
  76. package/payload/server/public/assets/{diagram-MMDJMWI5-DKrVPOP-.js → diagram-MMDJMWI5-DNvMGsTZ.js} +1 -1
  77. package/payload/server/public/assets/{diagram-TYMM5635-B1PzWQb9.js → diagram-TYMM5635-Cdte4IBa.js} +1 -1
  78. package/payload/server/public/assets/{erDiagram-SMLLAGMA-ClQzsQAs.js → erDiagram-SMLLAGMA-C9VZsWXK.js} +1 -1
  79. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-h3IbpN_7.js → flowDiagram-DWJPFMVM-tuP5fzzR.js} +1 -1
  80. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-ClaxOJi8.js → ganttDiagram-T4ZO3ILL-SJgRPUwx.js} +1 -1
  81. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-pM-U4ClD.js → gitGraphDiagram-UUTBAWPF-DU_cI_50.js} +1 -1
  82. package/payload/server/public/assets/graph-BkwTCV2Y.js +1 -0
  83. package/payload/server/public/assets/graph-labels-h39S93Xo.js +1 -0
  84. package/payload/server/public/assets/{graphlib-CwimOv_M.js → graphlib-D_nAsvmx.js} +1 -1
  85. package/payload/server/public/assets/{infoDiagram-42DDH7IO-DcO3Giwe.js → infoDiagram-42DDH7IO-Cj2Y19m6.js} +1 -1
  86. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BcdSL5VS.js → ishikawaDiagram-UXIWVN3A-DMc1xq1y.js} +1 -1
  87. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CYahHYzf.js → journeyDiagram-VCZTEJTY-C4CRAQma.js} +1 -1
  88. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Cl5KhoS4.js → kanban-definition-6JOO6SKY-CTr4AldU.js} +1 -1
  89. package/payload/server/public/assets/lib-Bnh57com.js +29 -0
  90. package/payload/server/public/assets/{line-d_2oTxLp.js → line-Btlm_IAl.js} +1 -1
  91. package/payload/server/public/assets/{mermaid-parser.core-CMMDGv3x.js → mermaid-parser.core-DXFdj_y1.js} +1 -1
  92. package/payload/server/public/assets/{mermaid.core-DK9ENGbr.js → mermaid.core-DFBhoCr5.js} +3 -3
  93. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-mA3x3MFG.js → mindmap-definition-QFDTVHPH-r9gVQybo.js} +1 -1
  94. package/payload/server/public/assets/{page-CgDmg_fX.js → page-B0iMmY6t.js} +1 -1
  95. package/payload/server/public/assets/{page-D9lluVl7.js → page-zQ79YCEt.js} +2 -2
  96. package/payload/server/public/assets/{pieDiagram-DEJITSTG-CW1nGFlY.js → pieDiagram-DEJITSTG-CHKZjSaH.js} +1 -1
  97. package/payload/server/public/assets/{public-DdLMkNdS.js → public-DyGWgfaZ.js} +4 -4
  98. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DI5igJhR.js → quadrantDiagram-34T5L4WZ-CSGR1HJr.js} +1 -1
  99. package/payload/server/public/assets/{requirementDiagram-MS252O5E-DyVeI4e_.js → requirementDiagram-MS252O5E-DZ6hX9D6.js} +1 -1
  100. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-CCTTBYKY.js → sankeyDiagram-XADWPNL6-DbZBKh0m.js} +1 -1
  101. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-hVVf35ly.js → sequenceDiagram-FGHM5R23-BHHpb8dt.js} +1 -1
  102. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-CSLuQDUX.js → stateDiagram-FHFEXIEX-DQ1jiLB4.js} +1 -1
  103. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CByT2RzF.js +1 -0
  104. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-sxC3W8Q4.js → timeline-definition-GMOUNBTQ-BlGiEU7p.js} +1 -1
  105. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Ro-ton6Z.js → vennDiagram-DHZGUBPP-DmEH-hsB.js} +1 -1
  106. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-T-dKD0Zx.js → wardleyDiagram-NUSXRM2D-C7KJJ40d.js} +1 -1
  107. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CfProPts.js → xychartDiagram-5P7HB3ND-JDnusCaa.js} +1 -1
  108. package/payload/server/public/data.html +4 -4
  109. package/payload/server/public/graph.html +5 -5
  110. package/payload/server/public/index.html +7 -7
  111. package/payload/server/public/public.html +4 -4
  112. package/payload/server/server.js +52 -8
  113. package/payload/platform/plugins/waitlist/.claude-plugin/plugin.json +0 -17
  114. package/payload/platform/plugins/waitlist/PLUGIN.md +0 -86
  115. package/payload/platform/plugins/waitlist/mcp/dist/index.d.ts +0 -2
  116. package/payload/platform/plugins/waitlist/mcp/dist/index.d.ts.map +0 -1
  117. package/payload/platform/plugins/waitlist/mcp/dist/index.js +0 -388
  118. package/payload/platform/plugins/waitlist/mcp/dist/index.js.map +0 -1
  119. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.d.ts +0 -16
  120. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.d.ts.map +0 -1
  121. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.js +0 -58
  122. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.js.map +0 -1
  123. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.d.ts +0 -3
  124. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.d.ts.map +0 -1
  125. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.js +0 -48
  126. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.js.map +0 -1
  127. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts +0 -5
  128. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts.map +0 -1
  129. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +0 -40
  130. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +0 -1
  131. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.d.ts +0 -2
  132. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.d.ts.map +0 -1
  133. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js +0 -70
  134. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js.map +0 -1
  135. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.d.ts +0 -34
  136. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.d.ts.map +0 -1
  137. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.js +0 -129
  138. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.js.map +0 -1
  139. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.d.ts +0 -27
  140. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.d.ts.map +0 -1
  141. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.js +0 -127
  142. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.js.map +0 -1
  143. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.d.ts +0 -23
  144. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.d.ts.map +0 -1
  145. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.js +0 -58
  146. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.js.map +0 -1
  147. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts +0 -83
  148. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts.map +0 -1
  149. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js +0 -433
  150. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js.map +0 -1
  151. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.d.ts +0 -19
  152. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.d.ts.map +0 -1
  153. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.js +0 -81
  154. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.js.map +0 -1
  155. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.d.ts +0 -28
  156. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.d.ts.map +0 -1
  157. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.js +0 -50
  158. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.js.map +0 -1
  159. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts +0 -33
  160. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts.map +0 -1
  161. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +0 -297
  162. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +0 -1
  163. package/payload/platform/plugins/waitlist/mcp/package.json +0 -23
  164. package/payload/platform/plugins/waitlist/mcp/vitest.config.ts +0 -9
  165. package/payload/premium-plugins/real-agent/BUNDLE.md +0 -47
  166. package/payload/premium-plugins/real-agent/agents/buyer-enquiry/IDENTITY.md +0 -13
  167. package/payload/premium-plugins/real-agent/agents/buyer-enquiry/SOUL.md +0 -19
  168. package/payload/premium-plugins/real-agent/agents/buyer-enquiry/template.json +0 -9
  169. package/payload/premium-plugins/real-agent/agents/compliance.md +0 -317
  170. package/payload/premium-plugins/real-agent/agents/listing-curator.md +0 -152
  171. package/payload/premium-plugins/real-agent/agents/negotiator.md +0 -167
  172. package/payload/premium-plugins/real-agent/agents/valuer.md +0 -155
  173. package/payload/premium-plugins/real-agent/plugins/.claude-plugin/marketplace.json +0 -68
  174. package/payload/premium-plugins/real-agent/plugins/brochures/.claude-plugin/plugin.json +0 -8
  175. package/payload/premium-plugins/real-agent/plugins/brochures/PLUGIN.md +0 -38
  176. package/payload/premium-plugins/real-agent/plugins/brochures/commands/make-brochure.md +0 -11
  177. package/payload/premium-plugins/real-agent/plugins/brochures/skills/a4-print-documents/SKILL.md +0 -478
  178. package/payload/premium-plugins/real-agent/plugins/brochures/skills/brand-design/SKILL.md +0 -235
  179. package/payload/premium-plugins/real-agent/plugins/brochures/skills/make-brochure/SKILL.md +0 -355
  180. package/payload/premium-plugins/real-agent/plugins/brochures/skills/make-brochure/references/seller-brief-template.md +0 -115
  181. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/SKILL.md +0 -195
  182. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/build.md +0 -689
  183. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/copy.md +0 -211
  184. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/images.md +0 -166
  185. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/index-landing.md +0 -376
  186. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/index.html +0 -1290
  187. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/placeholders.md +0 -250
  188. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/registers.md +0 -105
  189. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/seller-brief.md +0 -56
  190. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/structure.md +0 -249
  191. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/template.html +0 -2400
  192. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-extract/SKILL.md +0 -366
  193. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-market-report/SKILL.md +0 -100
  194. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-market-report/references/render.py +0 -267
  195. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-market-report/references/template.html +0 -266
  196. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-socials/SKILL.md +0 -143
  197. package/payload/premium-plugins/real-agent/plugins/buyers/.claude-plugin/plugin.json +0 -8
  198. package/payload/premium-plugins/real-agent/plugins/buyers/PLUGIN.md +0 -35
  199. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-feedback/SKILL.md +0 -109
  200. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/SKILL.md +0 -42
  201. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-qualification-questions.md +0 -16
  202. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-qualification.md +0 -59
  203. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-scripts.md +0 -63
  204. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-working-scripts.md +0 -54
  205. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/feedback-collection.md +0 -42
  206. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/offer-capture.md +0 -38
  207. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/viewing-booking.md +0 -32
  208. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/viewing-management.md +0 -52
  209. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/SKILL.md +0 -407
  210. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/care-fees-guide.md +0 -68
  211. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/divorce-sales-guide.md +0 -61
  212. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/downsizing-guide.md +0 -45
  213. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/first-time-buyers.md +0 -92
  214. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/first-time-sellers.md +0 -78
  215. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/probate-guide.md +0 -53
  216. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/upsizing-guide.md +0 -41
  217. package/payload/premium-plugins/real-agent/plugins/buyers/skills/property-enquiry/SKILL.md +0 -126
  218. package/payload/premium-plugins/real-agent/plugins/buyers/skills/property-recommender/SKILL.md +0 -116
  219. package/payload/premium-plugins/real-agent/plugins/buyers/skills/viewing-management/SKILL.md +0 -111
  220. package/payload/premium-plugins/real-agent/plugins/estate-business/.claude-plugin/plugin.json +0 -8
  221. package/payload/premium-plugins/real-agent/plugins/estate-business/PLUGIN.md +0 -64
  222. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/SKILL.md +0 -133
  223. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/buy-back-your-time.md +0 -37
  224. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/firewave-gost-scorecards.md +0 -14
  225. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/keller-org-model.md +0 -17
  226. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/lencioni-team-models.md +0 -22
  227. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/listing-management-system.md +0 -11
  228. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/net-figure-form.md +0 -11
  229. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/serhant-bizinbox-notes.md +0 -13
  230. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/team-roles-commission.md +0 -14
  231. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/va-2026-ops.md +0 -43
  232. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/wingman-structure.md +0 -13
  233. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/SKILL.md +0 -32
  234. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/crm-systems.md +0 -57
  235. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/hiring-guide.md +0 -59
  236. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/impact-framework.md +0 -47
  237. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/minutes-equal-money.md +0 -55
  238. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/team-management.md +0 -48
  239. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/commission-calculator/SKILL.md +0 -40
  240. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/SKILL.md +0 -52
  241. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/12-reasons.md +0 -39
  242. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/95-5-system.md +0 -66
  243. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/agent-attraction-scripts.md +0 -90
  244. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/business-partnership.md +0 -92
  245. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/exp-model-overview.md +0 -66
  246. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/model-comparison.md +0 -66
  247. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/revenue-share-explained.md +0 -57
  248. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/month-end-close/SKILL.md +0 -69
  249. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/payment-batch-stager/SKILL.md +0 -42
  250. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/period-reconciler/SKILL.md +0 -42
  251. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/SKILL.md +0 -117
  252. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/attraction-agent-notes.md +0 -31
  253. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/attraction-agent.md +0 -58
  254. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/authenticity-boundaries.md +0 -28
  255. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/become-a-brand-leader-notes.md +0 -19
  256. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/blast-formula.md +0 -42
  257. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/brand-leader.md +0 -48
  258. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/brand-strategy-system.md +0 -59
  259. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/content-engine.md +0 -49
  260. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/firewave-blast-and-blogging.md +0 -23
  261. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/gary-v-content.md +0 -52
  262. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/gary-v-principles.md +0 -20
  263. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/oversubscribed-positioning.md +0 -18
  264. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/platforms.md +0 -41
  265. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/priestley-oversubscribed.md +0 -54
  266. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/storeys-style-examples.md +0 -25
  267. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/visual-identity.md +0 -27
  268. package/payload/premium-plugins/real-agent/plugins/estate-coaching/.claude-plugin/plugin.json +0 -8
  269. package/payload/premium-plugins/real-agent/plugins/estate-coaching/PLUGIN.md +0 -54
  270. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/SKILL.md +0 -371
  271. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/atomic-habits.md +0 -52
  272. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/daily-routine-scorecard.md +0 -104
  273. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/hp6-model.md +0 -63
  274. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/twelve-week-year.md +0 -71
  275. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/SKILL.md +0 -36
  276. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/references/coaching-boundaries.md +0 -56
  277. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/references/feedback-framework.md +0 -61
  278. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/references/performance-framework.md +0 -109
  279. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/SKILL.md +0 -421
  280. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/coaching-exercises.md +0 -86
  281. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/goal-setting.md +0 -78
  282. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/one-to-one-framework.md +0 -92
  283. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/soi-workbook.md +0 -103
  284. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/SKILL.md +0 -410
  285. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/agent-training-guide.md +0 -70
  286. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/business-in-a-box.md +0 -72
  287. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/buyers-guide.md +0 -53
  288. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/codo-method.md +0 -72
  289. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/website-planning-guide.md +0 -79
  290. package/payload/premium-plugins/real-agent/plugins/estate-sales/.claude-plugin/plugin.json +0 -8
  291. package/payload/premium-plugins/real-agent/plugins/estate-sales/PLUGIN.md +0 -52
  292. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/chase-progression/SKILL.md +0 -107
  293. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/SKILL.md +0 -35
  294. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/deal-saving.md +0 -47
  295. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/negotiation-deep-guide.md +0 -64
  296. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/negotiation-prep-principles.md +0 -29
  297. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/negotiation-techniques.md +0 -42
  298. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/offer-presentation.md +0 -43
  299. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/risk-scorer/SKILL.md +0 -42
  300. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-closer/SKILL.md +0 -24
  301. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-closer/references/serhant-emotion-stages.md +0 -36
  302. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/SKILL.md +0 -30
  303. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/chris-voss-discovery.md +0 -88
  304. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/firewave-gost-journey.md +0 -68
  305. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/phil-jones-openers.md +0 -78
  306. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/pre-listing-checklist.md +0 -77
  307. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/serhant-improv.md +0 -22
  308. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/tom-ferry-discovery.md +0 -103
  309. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/vendor-motivation-competitor.md +0 -52
  310. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/SKILL.md +0 -29
  311. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/chris-voss-negotiation.md +0 -70
  312. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/phil-jones-price-words.md +0 -40
  313. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/serhant-negotiation-plus.md +0 -55
  314. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/tom-panos-commission-pricing.md +0 -57
  315. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/tony-morris-questioning.md +0 -54
  316. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-progression/SKILL.md +0 -27
  317. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-progression/references/conveyancing-guide.md +0 -54
  318. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-progression/references/transaction-tracking.md +0 -66
  319. package/payload/premium-plugins/real-agent/plugins/estate-teaching/.claude-plugin/plugin.json +0 -8
  320. package/payload/premium-plugins/real-agent/plugins/estate-teaching/PLUGIN.md +0 -30
  321. package/payload/premium-plugins/real-agent/plugins/estate-teaching/skills/content-directory/SKILL.md +0 -39
  322. package/payload/premium-plugins/real-agent/plugins/estate-teaching/skills/content-directory/references/module-delivery.md +0 -65
  323. package/payload/premium-plugins/real-agent/plugins/estate-teaching/skills/content-directory/references/progress-tracking.md +0 -47
  324. package/payload/premium-plugins/real-agent/plugins/leads/.claude-plugin/plugin.json +0 -8
  325. package/payload/premium-plugins/real-agent/plugins/leads/PLUGIN.md +0 -61
  326. package/payload/premium-plugins/real-agent/plugins/leads/skills/chain-progression-tracker/SKILL.md +0 -51
  327. package/payload/premium-plugins/real-agent/plugins/leads/skills/diary-builder/SKILL.md +0 -38
  328. package/payload/premium-plugins/real-agent/plugins/leads/skills/enquiry-triage/SKILL.md +0 -36
  329. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/SKILL.md +0 -137
  330. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/buyer-search-letter.md +0 -28
  331. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/buyer-search-letters.md +0 -37
  332. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/database-reactivation.md +0 -30
  333. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/email-nurture-sequences.md +0 -45
  334. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/facebook-referrals.md +0 -30
  335. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/firewave-email-nurture-sequences.md +0 -41
  336. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/keller-33-touch.md +0 -34
  337. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/neighbour-letters.md +0 -31
  338. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/neighbour-notification-letter.md +0 -20
  339. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/ofi-follow-up-dialogue.md +0 -22
  340. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/ofi-follow-up.md +0 -26
  341. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/serhant-three-fs-plus.md +0 -21
  342. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sharran-10x10x10.md +0 -18
  343. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sms-templates.md +0 -40
  344. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sphere-of-influence-notes.md +0 -34
  345. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sphere-of-influence.md +0 -60
  346. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/tom-panos-sms-templates.md +0 -59
  347. package/payload/premium-plugins/real-agent/plugins/leads/skills/morning-round/SKILL.md +0 -72
  348. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/SKILL.md +0 -33
  349. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/database-matching.md +0 -30
  350. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/database-value.md +0 -53
  351. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/prospecting-dialogues.md +0 -24
  352. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/reactivation.md +0 -34
  353. package/payload/premium-plugins/real-agent/plugins/listings/.claude-plugin/plugin.json +0 -8
  354. package/payload/premium-plugins/real-agent/plugins/listings/PLUGIN.md +0 -100
  355. package/payload/premium-plugins/real-agent/plugins/listings/skills/comparable-finder/SKILL.md +0 -52
  356. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/SKILL.md +0 -28
  357. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/kerb-appeal.md +0 -38
  358. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/photo-day.md +0 -59
  359. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/situational-tips.md +0 -50
  360. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/staging-guide.md +0 -52
  361. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-copy-writer/SKILL.md +0 -55
  362. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/SKILL.md +0 -286
  363. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/booking-script.md +0 -51
  364. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/objection-scripts.md +0 -193
  365. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/penhaul-presentation.md +0 -123
  366. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/pre-listing-kit.md +0 -139
  367. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/set-to-sell.md +0 -55
  368. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/sharran-frameworks.md +0 -107
  369. package/payload/premium-plugins/real-agent/plugins/listings/skills/local-market-stats/SKILL.md +0 -33
  370. package/payload/premium-plugins/real-agent/plugins/listings/skills/new-instruction/SKILL.md +0 -77
  371. package/payload/premium-plugins/real-agent/plugins/listings/skills/particulars-builder/SKILL.md +0 -48
  372. package/payload/premium-plugins/real-agent/plugins/listings/skills/portal-launch-scheduler/SKILL.md +0 -49
  373. package/payload/premium-plugins/real-agent/plugins/listings/skills/pricing-scenario-builder/SKILL.md +0 -35
  374. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/SKILL.md +0 -337
  375. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/auction-report-template.md +0 -41
  376. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/coming-soon-campaign.md +0 -43
  377. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/direct-mail-templates.md +0 -121
  378. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/eoi-form-template.md +0 -62
  379. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/monthly-scorecard.md +0 -63
  380. package/payload/premium-plugins/real-agent/plugins/listings/skills/supplier-booker/SKILL.md +0 -39
  381. package/payload/premium-plugins/real-agent/plugins/listings/skills/talk-track-composer/SKILL.md +0 -36
  382. package/payload/premium-plugins/real-agent/plugins/listings/skills/terms-of-business-drafter/SKILL.md +0 -54
  383. package/payload/premium-plugins/real-agent/plugins/listings/skills/valuation-prep/SKILL.md +0 -69
  384. package/payload/premium-plugins/real-agent/plugins/loop/.claude-plugin/plugin.json +0 -8
  385. package/payload/premium-plugins/real-agent/plugins/loop/PLUGIN.md +0 -261
  386. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.d.ts +0 -2
  387. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.d.ts.map +0 -1
  388. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.js +0 -320
  389. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.js.map +0 -1
  390. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.d.ts +0 -10
  391. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.d.ts.map +0 -1
  392. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.js +0 -88
  393. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.js.map +0 -1
  394. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.d.ts +0 -3
  395. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.d.ts.map +0 -1
  396. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.js +0 -48
  397. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.js.map +0 -1
  398. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.d.ts +0 -22
  399. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.d.ts.map +0 -1
  400. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.js +0 -165
  401. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.js.map +0 -1
  402. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.d.ts +0 -82
  403. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +0 -1
  404. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.js +0 -392
  405. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.js.map +0 -1
  406. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.d.ts +0 -5
  407. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +0 -1
  408. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js +0 -40
  409. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js.map +0 -1
  410. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.d.ts +0 -12
  411. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.d.ts.map +0 -1
  412. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.js +0 -22
  413. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.js.map +0 -1
  414. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +0 -10
  415. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +0 -1
  416. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.js +0 -24
  417. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.js.map +0 -1
  418. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.d.ts +0 -16
  419. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.d.ts.map +0 -1
  420. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.js +0 -35
  421. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.js.map +0 -1
  422. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.d.ts +0 -5
  423. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  424. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.js +0 -9
  425. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.js.map +0 -1
  426. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.d.ts +0 -4
  427. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.d.ts.map +0 -1
  428. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.js +0 -14
  429. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.js.map +0 -1
  430. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.d.ts +0 -9
  431. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.d.ts.map +0 -1
  432. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.js +0 -43
  433. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.js.map +0 -1
  434. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +0 -6
  435. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +0 -1
  436. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.js +0 -7
  437. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +0 -1
  438. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +0 -9
  439. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +0 -1
  440. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.js +0 -16
  441. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +0 -1
  442. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +0 -15
  443. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +0 -1
  444. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.js +0 -11
  445. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +0 -1
  446. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.d.ts +0 -10
  447. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +0 -1
  448. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.js +0 -39
  449. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.js.map +0 -1
  450. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.d.ts +0 -9
  451. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +0 -1
  452. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.js +0 -125
  453. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.js.map +0 -1
  454. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.d.ts +0 -18
  455. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.d.ts.map +0 -1
  456. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.js +0 -87
  457. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.js.map +0 -1
  458. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.d.ts +0 -10
  459. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +0 -1
  460. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.js +0 -82
  461. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.js.map +0 -1
  462. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.d.ts +0 -33
  463. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.d.ts.map +0 -1
  464. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.js +0 -19
  465. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.js.map +0 -1
  466. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.d.ts +0 -11
  467. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +0 -1
  468. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.js +0 -26
  469. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.js.map +0 -1
  470. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.d.ts +0 -15
  471. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.d.ts.map +0 -1
  472. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.js +0 -11
  473. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.js.map +0 -1
  474. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.d.ts +0 -16
  475. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.d.ts.map +0 -1
  476. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.js +0 -41
  477. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.js.map +0 -1
  478. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.d.ts +0 -9
  479. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.d.ts.map +0 -1
  480. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.js +0 -19
  481. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.js.map +0 -1
  482. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.d.ts +0 -13
  483. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.d.ts.map +0 -1
  484. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.js +0 -49
  485. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.js.map +0 -1
  486. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.d.ts +0 -7
  487. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +0 -1
  488. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.js +0 -19
  489. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.js.map +0 -1
  490. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.d.ts +0 -5
  491. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.d.ts.map +0 -1
  492. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.js +0 -32
  493. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.js.map +0 -1
  494. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.d.ts +0 -14
  495. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +0 -1
  496. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.js +0 -11
  497. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.js.map +0 -1
  498. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +0 -9
  499. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +0 -1
  500. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.js +0 -85
  501. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.js.map +0 -1
  502. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.d.ts +0 -13
  503. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +0 -1
  504. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.js +0 -44
  505. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.js.map +0 -1
  506. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.d.ts +0 -14
  507. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +0 -1
  508. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.js +0 -18
  509. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.js.map +0 -1
  510. package/payload/premium-plugins/real-agent/plugins/loop/mcp/package-lock.json +0 -2549
  511. package/payload/premium-plugins/real-agent/plugins/loop/mcp/package.json +0 -21
  512. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/loop-swagger.snapshot.json +0 -26467
  513. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/new-tool-shape.test.ts +0 -99
  514. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/plugin-md-time-doctrine.test.ts +0 -132
  515. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/swagger-write-coverage.test.ts +0 -154
  516. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/index.ts +0 -498
  517. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/crypto.ts +0 -105
  518. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/file-crypto.ts +0 -54
  519. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/key-store.ts +0 -221
  520. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/loop-api.ts +0 -567
  521. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/neo4j.ts +0 -51
  522. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/auto-responder.ts +0 -80
  523. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/customer-preferences.ts +0 -66
  524. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/feedback.ts +0 -86
  525. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/key-deregister.ts +0 -12
  526. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/key-list.ts +0 -19
  527. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/key-register.ts +0 -70
  528. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-enquiry.ts +0 -27
  529. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-match-batch.ts +0 -53
  530. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-match-request.ts +0 -42
  531. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-match.ts +0 -84
  532. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/people-detail.ts +0 -245
  533. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/people-search.ts +0 -180
  534. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-detail.ts +0 -145
  535. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-intent.ts +0 -84
  536. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-listed.ts +0 -81
  537. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-search.ts +0 -92
  538. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-sold.ts +0 -67
  539. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/supplier.ts +0 -129
  540. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/team-availability.ts +0 -52
  541. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/team-info.ts +0 -95
  542. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-create.ts +0 -41
  543. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-detail.ts +0 -171
  544. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-search.ts +0 -92
  545. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-update.ts +0 -53
  546. package/payload/premium-plugins/real-agent/plugins/loop/mcp/tsconfig.json +0 -20
  547. package/payload/premium-plugins/real-agent/plugins/loop/mcp/vitest.config.ts +0 -9
  548. package/payload/premium-plugins/real-agent/plugins/loop/skills/compliance-flag-checker/SKILL.md +0 -53
  549. package/payload/premium-plugins/real-agent/plugins/loop/skills/priority-ranker/SKILL.md +0 -40
  550. package/payload/premium-plugins/real-agent/plugins/loop/skills/tone-matched-drafter/SKILL.md +0 -53
  551. package/payload/premium-plugins/real-agent/plugins/loop/skills/variance-narrator/SKILL.md +0 -50
  552. package/payload/premium-plugins/real-agent/plugins/loop/skills/vendor-research/SKILL.md +0 -54
  553. package/payload/premium-plugins/real-agent/plugins/preval/.claude-plugin/plugin.json +0 -8
  554. package/payload/premium-plugins/real-agent/plugins/preval/PLUGIN.md +0 -55
  555. package/payload/premium-plugins/real-agent/plugins/preval/hooks/preval-prompt-required.sh +0 -140
  556. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/SKILL.md +0 -198
  557. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/__tests__/adherence.test.py +0 -373
  558. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/render.py +0 -814
  559. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/template-inputs.schema.json +0 -204
  560. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/template.html +0 -381
  561. package/payload/premium-plugins/real-agent/plugins/property-data/.claude-plugin/plugin.json +0 -8
  562. package/payload/premium-plugins/real-agent/plugins/property-data/PLUGIN.md +0 -181
  563. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.d.ts +0 -2
  564. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.d.ts.map +0 -1
  565. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.js +0 -236
  566. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.js.map +0 -1
  567. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.d.ts +0 -3
  568. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.d.ts.map +0 -1
  569. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.js +0 -72
  570. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.js.map +0 -1
  571. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.d.ts +0 -3
  572. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.d.ts.map +0 -1
  573. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.js +0 -49
  574. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.js.map +0 -1
  575. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.d.ts +0 -15
  576. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.d.ts.map +0 -1
  577. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.js +0 -135
  578. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.js.map +0 -1
  579. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.d.ts +0 -5
  580. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.d.ts.map +0 -1
  581. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.js +0 -38
  582. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.js.map +0 -1
  583. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.d.ts +0 -28
  584. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.d.ts.map +0 -1
  585. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.js +0 -101
  586. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.js.map +0 -1
  587. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.d.ts +0 -24
  588. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.d.ts.map +0 -1
  589. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.js +0 -33
  590. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.js.map +0 -1
  591. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.d.ts +0 -4
  592. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  593. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.js +0 -9
  594. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.js.map +0 -1
  595. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.d.ts +0 -4
  596. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.d.ts.map +0 -1
  597. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.js +0 -10
  598. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.js.map +0 -1
  599. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.d.ts +0 -5
  600. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.d.ts.map +0 -1
  601. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.js +0 -50
  602. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.js.map +0 -1
  603. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/package-lock.json +0 -2566
  604. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/package.json +0 -21
  605. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/endpoints.test.ts +0 -252
  606. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/key-roundtrip.test.ts +0 -107
  607. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/propertydata-api.test.ts +0 -184
  608. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/schema-parity.test.ts +0 -62
  609. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/index.ts +0 -409
  610. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/crypto.ts +0 -79
  611. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/file-crypto.ts +0 -55
  612. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/key-store.ts +0 -181
  613. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/neo4j.ts +0 -47
  614. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/propertydata-api.ts +0 -120
  615. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/endpoints.ts +0 -47
  616. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/key-deregister.ts +0 -9
  617. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/key-list.ts +0 -10
  618. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/key-register.ts +0 -54
  619. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/tsconfig.json +0 -20
  620. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/vitest.config.ts +0 -8
  621. package/payload/premium-plugins/real-agent/plugins/property-data/skills/property-data/SKILL.md +0 -77
  622. package/payload/premium-plugins/real-agent/plugins/vendors/.claude-plugin/plugin.json +0 -8
  623. package/payload/premium-plugins/real-agent/plugins/vendors/PLUGIN.md +0 -33
  624. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/SKILL.md +0 -42
  625. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/fee-protection-and-agenda.md +0 -28
  626. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/listing-scripts.md +0 -44
  627. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/negotiation-deep-guide.md +0 -70
  628. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/price-alignment-scripts.md +0 -33
  629. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/price-alignment.md +0 -34
  630. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/scenario-scripts.md +0 -38
  631. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/seller-engagement.md +0 -51
  632. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/valuation-booking.md +0 -76
  633. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/vendor-scripts.md +0 -63
  634. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/vendor-updates.md +0 -41
  635. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-updates/SKILL.md +0 -153
  636. package/payload/premium-plugins/real-agent/specs/00-architecture-and-customization.md +0 -122
  637. package/payload/premium-plugins/real-agent/specs/01-morning-round.md +0 -76
  638. package/payload/premium-plugins/real-agent/specs/02-valuation-prep.md +0 -81
  639. package/payload/premium-plugins/real-agent/specs/03-new-instruction.md +0 -96
  640. package/payload/premium-plugins/real-agent/specs/04-chase-progression.md +0 -120
  641. package/payload/premium-plugins/real-agent/specs/05-month-end-close.md +0 -79
  642. package/payload/premium-plugins/teaching/.claude-plugin/plugin.json +0 -8
  643. package/payload/premium-plugins/teaching/PLUGIN.md +0 -58
  644. package/payload/premium-plugins/teaching/skills/interactive-tutor/SKILL.md +0 -59
  645. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/assessment.md +0 -70
  646. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/classroom-conduct.md +0 -43
  647. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/teaching-modes.md +0 -83
  648. package/payload/premium-plugins/teaching/skills/lesson-planner/SKILL.md +0 -48
  649. package/payload/premium-plugins/teaching/skills/lesson-planner/references/context-gathering.md +0 -41
  650. package/payload/premium-plugins/teaching/skills/lesson-planner/references/plan-structure.md +0 -94
  651. package/payload/premium-plugins/teaching/skills/study-pack-builder/SKILL.md +0 -52
  652. package/payload/premium-plugins/teaching/skills/study-pack-builder/references/disaggregation.md +0 -49
  653. package/payload/premium-plugins/teaching/skills/study-pack-builder/references/materials.md +0 -116
  654. package/payload/premium-plugins/writer-craft/.claude-plugin/plugin.json +0 -8
  655. package/payload/premium-plugins/writer-craft/PLUGIN.md +0 -88
  656. package/payload/premium-plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +0 -92
  657. package/payload/premium-plugins/writer-craft/skills/citation-style/SKILL.md +0 -94
  658. package/payload/premium-plugins/writer-craft/skills/citation-style/references/book-and-chapter-models.md +0 -77
  659. package/payload/premium-plugins/writer-craft/skills/citation-style/references/citation-rules.md +0 -103
  660. package/payload/premium-plugins/writer-craft/skills/citation-style/references/journal-article-models.md +0 -74
  661. package/payload/premium-plugins/writer-craft/skills/citation-style/references/other-source-models.md +0 -146
  662. package/payload/premium-plugins/writer-craft/skills/citation-style/references/reference-list-rules.md +0 -70
  663. package/payload/premium-plugins/writer-craft/skills/editorial-practice/SKILL.md +0 -108
  664. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/copyediting.md +0 -73
  665. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/developmental-editing.md +0 -85
  666. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/genre-specific-editing.md +0 -78
  667. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/line-editing.md +0 -55
  668. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/self-editing.md +0 -89
  669. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/SKILL.md +0 -114
  670. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/audience-analysis.md +0 -73
  671. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/crafting-persuasive-story.md +0 -76
  672. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/persuasion-case-studies.md +0 -67
  673. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/transformation-framework.md +0 -86
  674. package/payload/premium-plugins/writer-craft/skills/point-of-view/SKILL.md +0 -97
  675. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/indirect-narration.md +0 -72
  676. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/pov-types-and-voice.md +0 -91
  677. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/protagonist-filter.md +0 -71
  678. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/tense-and-person.md +0 -85
  679. package/payload/premium-plugins/writer-craft/skills/prose-craft/SKILL.md +0 -100
  680. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/punctuation-and-grammar.md +0 -72
  681. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/repetition.md +0 -71
  682. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/sound-and-rhythm.md +0 -64
  683. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/word-economy.md +0 -93
  684. package/payload/premium-plugins/writer-craft/skills/reader-engagement/SKILL.md +0 -100
  685. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/cause-effect-setup-payoff.md +0 -79
  686. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/conflict-escalation.md +0 -81
  687. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/hooking-readers.md +0 -67
  688. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/neurochemistry-of-engagement.md +0 -94
  689. package/payload/premium-plugins/writer-craft/skills/review-manuscript/SKILL.md +0 -111
  690. package/payload/premium-plugins/writer-craft/skills/review-manuscript/references/review-manuscript-checklist.md +0 -119
  691. package/payload/premium-plugins/writer-craft/skills/review-prose/SKILL.md +0 -99
  692. package/payload/premium-plugins/writer-craft/skills/review-prose/references/prose-review-checklist.md +0 -112
  693. package/payload/premium-plugins/writer-craft/skills/review-scene/SKILL.md +0 -99
  694. package/payload/premium-plugins/writer-craft/skills/review-scene/references/scene-analysis-framework.md +0 -95
  695. package/payload/premium-plugins/writer-craft/skills/story-architecture/SKILL.md +0 -106
  696. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/blueprinting-and-scene-cards.md +0 -118
  697. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/inner-issue-and-protagonist-goal.md +0 -66
  698. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/misbelief-desire-worldview.md +0 -87
  699. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/origin-scenes-and-escalation.md +0 -82
  700. package/payload/premium-plugins/writer-craft/skills/story-blueprint/SKILL.md +0 -133
  701. package/payload/premium-plugins/writer-craft/skills/story-blueprint/references/blueprinting-exercises.md +0 -118
  702. package/payload/premium-plugins/writer-craft/skills/story-blueprint/references/blueprinting-process.md +0 -128
  703. package/payload/server/public/assets/channel-CrSx5mnG.js +0 -1
  704. package/payload/server/public/assets/classDiagram-6PBFFD2Q-C3IDJsqN.js +0 -1
  705. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BOIrJ5Zb.js +0 -1
  706. package/payload/server/public/assets/clone-P8Fkz7JD.js +0 -1
  707. package/payload/server/public/assets/data-DRfwJPja.js +0 -1
  708. package/payload/server/public/assets/graph-B4FFYwus.js +0 -1
  709. package/payload/server/public/assets/graph-labels-Cpk9Ktt0.js +0 -1
  710. package/payload/server/public/assets/lib--yuBd0Xi.js +0 -33
  711. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-C5JejhQU.js +0 -1
@@ -1,814 +0,0 @@
1
- """property-preval renderer.
2
-
3
- Substitutes <!-- REPLACE: <slot> --> placeholders in template.html with values
4
- derived from one inputs.json (shape: template-inputs.schema.json), drives
5
- Chrome headless to produce a 7-page A4 PDF, and asserts page count == 7.
6
-
7
- Fails loud on any missing / unverifiable load-bearing input. No silent
8
- fallback modes — see _assert_inputs. Task 157 layers provenance gates
9
- (agent_listings[].origin, agent_overrides.brand_selected_by_operator) on
10
- top of 156's load-bearing-input checks. `subject.narrative` and
11
- `market_summary` are agent-composed from the 12-call fan-out, not
12
- operator-supplied — only the `paragraphs >= 2` sanity check survives.
13
-
14
- Usage:
15
- python3 render.py inputs.json
16
- """
17
- from __future__ import annotations
18
- import html, json, re, shutil, subprocess, sys, time
19
- from pathlib import Path
20
-
21
-
22
- M2_TO_SQFT = 10.7639
23
-
24
-
25
- def _money(n: int) -> str:
26
- return f"£{int(n):,}"
27
-
28
-
29
- # _range_money retired with the page-2 valuation panel. The pack no longer
30
- # quotes a numeric range — the human estate agent values in person.
31
-
32
-
33
- # ---------------- helpers ----------------
34
-
35
- def _short_address(address: str) -> str:
36
- """First two address tokens for the cover meta strip."""
37
- parts = [p.strip() for p in address.split(",")]
38
- return ", ".join(parts[:2]) if len(parts) >= 2 else address
39
-
40
-
41
- def _sold_comps_rows(rows: list[dict]) -> str:
42
- if not rows:
43
- return '<tr><td colspan="5" class="muted">No sold transactions in the sample.</td></tr>'
44
- return "".join(
45
- f"<tr><td>{html.escape(r['date'])}</td>"
46
- f"<td>{html.escape(r['address'])}</td>"
47
- f"<td>{html.escape(r['type'])}</td>"
48
- f"<td>{r['beds'] if r.get('beds') else '—'}</td>"
49
- f"<td class=\"num\">{_money(r['price'])}</td></tr>"
50
- for r in rows[:6]
51
- )
52
-
53
-
54
- def _asking_comps_tiles(rows: list[dict]) -> str:
55
- if not rows:
56
- return '<div class="muted">No live asking comps in the sample.</div>'
57
- out = []
58
- for r in rows[:4]:
59
- meta_bits = []
60
- if r.get("beds"):
61
- meta_bits.append(f"{r['beds']} bed")
62
- if r.get("type"):
63
- meta_bits.append(html.escape(r["type"]))
64
- meta = " · ".join(meta_bits) or "&nbsp;"
65
- out.append(
66
- f'<div class="ask-tile">'
67
- f'<div class="addr">{html.escape(r["address"])}</div>'
68
- f'<div class="price">{_money(r["price"])}</div>'
69
- f'<div class="meta">{meta}</div>'
70
- f"</div>"
71
- )
72
- return "".join(out)
73
-
74
-
75
- def _type_dist_rows(rows: list[dict]) -> str:
76
- if not rows:
77
- return '<div class="muted">No property-type mix data.</div>'
78
- ordered = sorted(rows, key=lambda r: float(r["pct"]), reverse=True)
79
- return "".join(
80
- f'<div class="dist-row">'
81
- f'<div class="name">{html.escape(r["name"])}</div>'
82
- f'<div class="bar"><span{" class=gold" if i == 0 else ""} style="width:{float(r["pct"]):.0f}%"></span></div>'
83
- f'<div class="pct">{float(r["pct"]):.1f}%</div>'
84
- f"</div>"
85
- for i, r in enumerate(ordered)
86
- )
87
-
88
-
89
- def _spark_svg(price_series: list[dict], psf_series: list[dict]) -> str:
90
- """Two-line sparkline in a 1000x380 viewBox SVG, no external deps."""
91
- W, H = 1000, 380
92
- pad_l, pad_r, pad_t, pad_b = 70, 30, 30, 50
93
- iw, ih = W - pad_l - pad_r, H - pad_t - pad_b
94
-
95
- def _line(series, key, css_pl, css_pt):
96
- if not series:
97
- return ""
98
- ys = [float(p[key]) for p in series]
99
- ymin, ymax = min(ys), max(ys)
100
- if ymax == ymin:
101
- ymax = ymin + 1
102
- n = len(series)
103
- pts, circles, labels = [], [], []
104
- for i, p in enumerate(series):
105
- x = pad_l + (i * iw / max(1, n - 1))
106
- y = pad_t + ih - ((float(p[key]) - ymin) / (ymax - ymin)) * ih
107
- pts.append(f"{x:.1f},{y:.1f}")
108
- circles.append(f'<circle class="{css_pt}" cx="{x:.1f}" cy="{y:.1f}" r="3"/>')
109
- labels.append(
110
- f'<text x="{x:.1f}" y="{H - 18}" text-anchor="middle">{html.escape(p["label"])}</text>'
111
- )
112
- return (
113
- f'<polyline class="{css_pl}" points="{" ".join(pts)}"/>'
114
- + "".join(circles) + "".join(labels)
115
- )
116
-
117
- axis = (
118
- f'<line class="axis" x1="{pad_l}" y1="{pad_t + ih}" x2="{W - pad_r}" y2="{pad_t + ih}"/>'
119
- )
120
- body = axis + _line(price_series, "price", "pl", "pt") + _line(psf_series, "psf", "pl-psf", "pt-psf")
121
- return (
122
- f'<svg class="spark" viewBox="0 0 {W} {H}" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">{body}</svg>'
123
- )
124
-
125
-
126
- def _summary_paragraphs(paras: list[str]) -> str:
127
- if not paras:
128
- return ""
129
- out = [f'<p class="dropcap">{html.escape(paras[0])}</p>']
130
- for p in paras[1:]:
131
- out.append(f"<p>{html.escape(p)}</p>")
132
- return "".join(out)
133
-
134
-
135
- def _variant_css(inputs: dict) -> str:
136
- """Compose CSS override block for the 'on-brand' variant.
137
-
138
- Premium variant keeps the editorial Cormorant/Lora/Inter typography lock
139
- — only the brand's colour tokens and logo are applied. On-brand variant
140
- overrides --display / --body / --sans with brand.font_display +
141
- brand.font_body — pack typography follows the agent's DESIGN.md end-to-end.
142
-
143
- Returns empty string for premium (no overrides applied).
144
- """
145
- variant = (inputs.get("variant") or "premium").lower()
146
- if variant != "on-brand":
147
- return ""
148
- brand = inputs.get("brand") or {}
149
- fd = brand.get("font_display") or ""
150
- fb = brand.get("font_body") or fd
151
- if not fd:
152
- return ""
153
- return (
154
- '<style>:root{'
155
- f'--display:{fd};'
156
- f'--body:{fb};'
157
- f'--sans:{fd};'
158
- '}</style>'
159
- )
160
-
161
-
162
- def _wordmark(brand: dict, variant: str, out_dir: Path) -> str:
163
- """variant ∈ {'light', 'dark'}. Mirrors property-market-report's wordmark."""
164
- key = "logo_light" if variant == "light" else "logo_dark"
165
- logo_path = brand.get(key)
166
- if logo_path:
167
- src = Path(logo_path).expanduser()
168
- dest_dir = out_dir / "img"
169
- dest_dir.mkdir(parents=True, exist_ok=True)
170
- dest = dest_dir / src.name
171
- if src.resolve() != dest.resolve():
172
- shutil.copy2(src, dest)
173
- rel = f"img/{src.name}"
174
- height = "14mm" if variant == "light" else "9mm"
175
- return f'<img src="{html.escape(rel)}" alt="{html.escape(brand["name"])}" style="height:{height};width:auto;display:block">'
176
- cls = "wm light" if variant == "light" else "wm small"
177
- return (
178
- f'<div class="{cls}">'
179
- f'<span class="wm-name">{html.escape(brand["name"])}</span>'
180
- f'<span class="wm-sub">{html.escape(brand["tagline"])}</span>'
181
- f"</div>"
182
- )
183
-
184
-
185
- def _hero_asset(subject: dict, out_dir: Path) -> str:
186
- """Copy subject.cover_hero into img/ and return the relative path. URLs pass through."""
187
- hero = subject["cover_hero"]
188
- if hero.startswith(("http://", "https://", "data:")):
189
- return hero
190
- src = Path(hero).expanduser()
191
- if not src.exists():
192
- raise FileNotFoundError(f"subject.cover_hero not found: {src}")
193
- dest_dir = out_dir / "img"
194
- dest_dir.mkdir(parents=True, exist_ok=True)
195
- dest = dest_dir / f"hero{src.suffix.lower()}"
196
- if src.resolve() != dest.resolve():
197
- shutil.copy2(src, dest)
198
- return f"img/{dest.name}"
199
-
200
-
201
- def _listing_card(p: dict, index: int, out_dir: Path) -> str:
202
- addr_parts = [x.strip() for x in p["address"].split(",")]
203
- addr = html.escape(addr_parts[0])
204
- chips = []
205
- if p.get("beds"): chips.append(f"{p['beds']} bed")
206
- if p.get("type"): chips.append(html.escape(p["type"]))
207
- chips_html = "".join(f"<span>{c}</span>" for c in chips)
208
- img_src = ""
209
- if p.get("image"):
210
- src = Path(p["image"]).expanduser() if not str(p["image"]).startswith(("http://", "https://", "data:")) else None
211
- if src and src.exists():
212
- dest_dir = out_dir / "img"
213
- dest_dir.mkdir(parents=True, exist_ok=True)
214
- dest = dest_dir / f"agent-{index:02d}-{p['slug']}{src.suffix.lower()}"
215
- if src.resolve() != dest.resolve():
216
- shutil.copy2(src, dest)
217
- img_src = f"img/{dest.name}"
218
- elif src is None:
219
- img_src = str(p["image"])
220
- status = p.get("status", "")
221
- badge_cls = {"Sold": "sold", "Under offer": "under"}.get(status, "")
222
- photo = (
223
- f'<div class="photo">'
224
- f'{f"<img src=\"{html.escape(img_src)}\" alt=\"{addr}\">" if img_src else ""}'
225
- f'<div class="badge {badge_cls}">{html.escape(status)}</div>'
226
- f"</div>"
227
- )
228
- meta = (
229
- f'<div class="meta">'
230
- f'<div class="addr">{addr}</div>'
231
- f'<div class="price">{_money(p["price"])}</div>'
232
- f'<div class="kfs">{chips_html}</div>'
233
- f"</div>"
234
- )
235
- inner = photo + meta
236
- if p.get("url"):
237
- return f'<a class="listing" href="{html.escape(p["url"])}" target="_blank" rel="noopener">{inner}</a>'
238
- return f'<div class="listing">{inner}</div>'
239
-
240
-
241
- def _agent_listings_cards(rows: list[dict], out_dir: Path) -> str:
242
- if not rows:
243
- return '<div class="muted" style="margin-top:5mm">No recent listings supplied.</div>'
244
- return "".join(_listing_card(p, i, out_dir) for i, p in enumerate(rows[:6]))
245
-
246
-
247
- # ---------------- subject facts ----------------
248
-
249
- def _notable_features_block(subject: dict) -> str:
250
- """Label-only bullet list from subject.adjustments[].label. No numbers.
251
-
252
- The pre-valuation pack does NOT quote an estimate or a range — the
253
- human agent values the property in person. Adjustments survive only
254
- as a "Notable features" list (operator-supplied facts the agent
255
- wants visible on the cover-side of the pitch); delta_pct is held in
256
- the schema for backward compat but is no longer rendered.
257
- """
258
- adjustments = subject.get("adjustments") or []
259
- if not adjustments:
260
- return ""
261
- items = "".join(
262
- f'<li>{html.escape(adj["label"])}</li>' for adj in adjustments
263
- )
264
- return (
265
- '<div class="notable-features" style="margin-top:6mm">'
266
- '<div class="eyebrow" style="margin-bottom:2mm">Notable features</div>'
267
- f'<ul style="margin:0;padding-left:5mm;line-height:1.5">{items}</ul>'
268
- '</div>'
269
- )
270
-
271
-
272
- def _derived_sqft(subject: dict) -> int:
273
- return round(float(subject["total_floor_area_m2"]) * M2_TO_SQFT)
274
-
275
-
276
- def _kpi_subject_sqft(subject: dict) -> tuple[str, str]:
277
- sqft = _derived_sqft(subject)
278
- m2 = float(subject["total_floor_area_m2"])
279
- return f"{sqft:,}", f"≈ {m2:.0f} m² · from EPC certificate"
280
-
281
-
282
- def _kpi_subject_epc(subject: dict) -> tuple[str, str]:
283
- current = subject["current_energy_rating"]
284
- lodgement = subject["lodgement_date"]
285
- return current, f"lodged {lodgement}"
286
-
287
-
288
- # ---------------- input assertions ----------------
289
-
290
- class PrevalAbort(RuntimeError):
291
- """Raised when a load-bearing input is missing or unverifiable.
292
-
293
- .cause is the short slug logged as `reason=<cause>` and shown in the
294
- operator's remediation hint.
295
- """
296
- def __init__(self, cause: str, hint: str):
297
- super().__init__(f"{cause}: {hint}")
298
- self.cause = cause
299
- self.hint = hint
300
-
301
-
302
- _STREET_TOKEN_STOPWORDS = {
303
- "the", "a", "an", "of", "and",
304
- "road", "street", "drive", "lane", "avenue", "close", "court",
305
- "place", "way", "gardens", "crescent", "hill", "rise", "grove",
306
- "terrace", "mews", "square", "park", "walk", "row",
307
- "rd", "st", "dr", "ln", "ave", "cl", "ct", "pl",
308
- }
309
-
310
-
311
- def _street_token(address: str) -> str | None:
312
- """First non-stopword token from the address's street component.
313
-
314
- Used to detect cover_hero photos sourced from a sister property folder.
315
- "9 Phoenix Drive, Bishop's Stortford, CM23 2UJ" → "phoenix".
316
- """
317
- if not address:
318
- return None
319
- first = address.split(",")[0].strip().lower()
320
- for raw in re.split(r"[^a-z]+", first):
321
- if raw and not raw.isdigit() and raw not in _STREET_TOKEN_STOPWORDS:
322
- return raw
323
- return None
324
-
325
-
326
- def _assert_path_image(path_str: str, min_w: int = 1200, min_h: int = 800) -> None:
327
- """Existence + dimension check. Symlinks pointing into another property's
328
- folder are rejected (cover-hero cross-contamination guard)."""
329
- p = Path(path_str).expanduser()
330
- if not p.exists():
331
- raise PrevalAbort(
332
- "subject-cover-hero-missing",
333
- f"cover_hero path does not exist: {p}",
334
- )
335
- if p.is_symlink():
336
- target = p.resolve()
337
- parts = target.parts
338
- if "properties" in parts:
339
- raise PrevalAbort(
340
- "subject-cover-hero-symlinked-foreign",
341
- f"cover_hero is a symlink into another property's folder: {target}",
342
- )
343
- w, h = _image_dimensions(p)
344
- if w is None or h is None:
345
- raise PrevalAbort(
346
- "subject-cover-hero-unreadable",
347
- f"cover_hero is not a readable PNG or JPEG: {p}",
348
- )
349
- if w < min_w or h < min_h:
350
- raise PrevalAbort(
351
- "subject-cover-hero-too-small",
352
- f"cover_hero is {w}×{h}, below the {min_w}×{min_h} minimum: {p}",
353
- )
354
-
355
-
356
- def _image_dimensions(p: Path) -> tuple[int | None, int | None]:
357
- """Return (width, height) for PNG or JPEG. None on any failure."""
358
- try:
359
- with p.open("rb") as f:
360
- head = f.read(24)
361
- if len(head) < 24:
362
- return None, None
363
- if head[:8] == b"\x89PNG\r\n\x1a\n":
364
- w = int.from_bytes(head[16:20], "big")
365
- h = int.from_bytes(head[20:24], "big")
366
- return w, h
367
- if head[:2] == b"\xff\xd8":
368
- f.seek(2)
369
- while True:
370
- b = f.read(1)
371
- while b and b != b"\xff":
372
- b = f.read(1)
373
- marker = f.read(1)
374
- if not marker:
375
- return None, None
376
- if 0xC0 <= marker[0] <= 0xCF and marker[0] not in (0xC4, 0xC8, 0xCC):
377
- f.read(3)
378
- h = int.from_bytes(f.read(2), "big")
379
- w = int.from_bytes(f.read(2), "big")
380
- return w, h
381
- seg_len = int.from_bytes(f.read(2), "big")
382
- f.seek(seg_len - 2, 1)
383
- return None, None
384
- except OSError:
385
- return None, None
386
-
387
-
388
- def _assert_inputs(inputs: dict) -> None:
389
- """Fail loud on any missing or unverifiable load-bearing input.
390
-
391
- Task 156 causes (load-bearing inputs):
392
- subject-cover-hero-*, brand-unresolved,
393
- agent-listings-empty, market-summary-too-thin.
394
-
395
- Task 157 causes (provenance — agent didn't invent the input):
396
- cover-hero-not-subject, agent-listings-invented, brand-invented.
397
- (`market-summary-invented` retired: market_summary is agent-composed
398
- from the fan-out, not operator-supplied; only the paragraphs>=2
399
- sanity check remains, surfaced as `market-summary-too-thin`.)
400
-
401
- Task 163 cause (EPC certificate paste-in completes 157's mandate):
402
- epc-certificate-not-supplied — any of total_floor_area_m2,
403
- current_energy_rating, lodgement_date is null/missing.
404
- """
405
- subject = inputs.get("subject") or {}
406
- address = inputs.get("address") or ""
407
- overrides = inputs.get("agent_overrides") or {}
408
-
409
- # --- 163: EPC certificate fields are operator paste-in ---
410
- missing_epc = [
411
- f for f in ("total_floor_area_m2", "current_energy_rating", "lodgement_date")
412
- if not subject.get(f)
413
- ]
414
- if missing_epc:
415
- raise PrevalAbort(
416
- "epc-certificate-not-supplied",
417
- f"subject is missing EPC certificate field(s) {missing_epc}. "
418
- "Paste total_floor_area_m2, current_energy_rating, and lodgement_date "
419
- "from the EPC certificate into subject before re-invoking. "
420
- "No mid-run prompt — the operator supplies the certificate before invocation.",
421
- )
422
-
423
- hero = subject.get("cover_hero")
424
- if not hero:
425
- raise PrevalAbort(
426
- "subject-cover-hero-missing",
427
- "subject.cover_hero is required for the cover page.",
428
- )
429
- if not hero.startswith(("http://", "https://", "data:")):
430
- _assert_path_image(hero)
431
-
432
- brand = inputs.get("brand") or {}
433
- required_brand = ("name", "tagline", "primary", "primary_dark", "accent", "paper", "paper_banded", "rule")
434
- missing_brand = [k for k in required_brand if not brand.get(k)]
435
- if missing_brand:
436
- raise PrevalAbort(
437
- "brand-unresolved",
438
- f"brand is missing required token(s) {missing_brand} — resolve from the agent's on-disk DESIGN.md before invocation.",
439
- )
440
-
441
- if not inputs.get("agent_listings"):
442
- raise PrevalAbort(
443
- "agent-listings-empty",
444
- "agent_listings is empty — paste at least one recent listing for the closing page.",
445
- )
446
-
447
- ms = inputs.get("market_summary") or {}
448
- paras = ms.get("paragraphs") or []
449
- if len(paras) < 2:
450
- raise PrevalAbort(
451
- "market-summary-too-thin",
452
- f"market_summary.paragraphs has {len(paras)} entries — minimum 2.",
453
- )
454
-
455
- # --- 157: provenance gates ---
456
- if hero and not hero.startswith(("http://", "https://", "data:")):
457
- hero_lc = hero.lower()
458
- match = re.search(r"/properties?/([^/]+)/", hero_lc)
459
- if match:
460
- slug = match.group(1)
461
- street = _street_token(address)
462
- if street and street not in slug:
463
- raise PrevalAbort(
464
- "cover-hero-not-subject",
465
- f"subject.cover_hero ({hero}) sits in a property folder whose "
466
- f"slug ({slug}) does not contain the subject street token "
467
- f"({street}). Prompt the operator for the subject's own photo.",
468
- )
469
-
470
- if not overrides.get("listings_status_curated"):
471
- for listing in inputs.get("agent_listings") or []:
472
- origin = (listing or {}).get("origin")
473
- if not origin or origin == "operator":
474
- continue
475
- src = Path(str(origin)).expanduser()
476
- if not src.exists():
477
- continue
478
- try:
479
- source = json.loads(src.read_text())
480
- except (OSError, json.JSONDecodeError):
481
- continue
482
- if source.get("status") in (None, "") and listing.get("status"):
483
- raise PrevalAbort(
484
- "agent-listings-invented",
485
- f"agent_listings entry {listing.get('slug')} has status "
486
- f"'{listing['status']}' but source {src} carries status:null. "
487
- "Prompt the operator to confirm each status, then set "
488
- "agent_overrides.listings_status_curated: true.",
489
- )
490
-
491
- if brand.get("name") and not overrides.get("brand_selected_by_operator"):
492
- raise PrevalAbort(
493
- "brand-invented",
494
- f"brand.name ('{brand['name']}') was set without "
495
- "agent_overrides.brand_selected_by_operator: true. Ask the operator "
496
- "which estate agent is pitching for this instruction; the presence "
497
- "of a DESIGN.md on disk does not authorise selection.",
498
- )
499
-
500
-
501
- # ---------------- render ----------------
502
-
503
- def render(inputs: dict, out_dir: Path, template_path: Path | None = None) -> Path:
504
- _assert_inputs(inputs)
505
-
506
- template_path = template_path or (Path(__file__).parent / "template.html")
507
- tmpl = template_path.read_text()
508
-
509
- brand = inputs["brand"]
510
- subject = inputs["subject"]
511
- v = inputs["valuation"]
512
- a = inputs["area"]
513
- d = inputs["demand_trend"]
514
- ms = inputs["market_summary"]
515
- r = d["rental"]
516
-
517
- out_dir.mkdir(parents=True, exist_ok=True)
518
-
519
- subject_sqft, subject_sqft_sub = _kpi_subject_sqft(subject)
520
- subject_epc, subject_epc_sub = _kpi_subject_epc(subject)
521
-
522
- yoy = d.get("yoy_growth_pct")
523
- if yoy is None and len(d.get("growth_series", [])) >= 2:
524
- last, prev = d["growth_series"][-1]["price"], d["growth_series"][-2]["price"]
525
- yoy = (last - prev) / prev * 100.0
526
- yoy_str = f"{yoy:+.1f}%" if yoy is not None else "—"
527
-
528
- psf = d.get("sales_per_month")
529
- if psf is None:
530
- psf = max(1, round(d["for_sale"] / 7))
531
-
532
- slots = {
533
- "variant_css": _variant_css(inputs),
534
- "brand_name": brand["name"],
535
- "brand_tagline": brand["tagline"],
536
- "prepared_by": brand.get("agent_name") or brand["name"],
537
- "brand_primary": brand["primary"],
538
- "brand_primary_dark": brand["primary_dark"],
539
- "brand_accent": brand["accent"],
540
- "brand_paper": brand["paper"],
541
- "brand_paper_banded": brand["paper_banded"],
542
- "brand_rule": brand["rule"],
543
- "wordmark_light": _wordmark(brand, "light", out_dir),
544
- "wordmark_dark": _wordmark(brand, "dark", out_dir),
545
-
546
- "subject_hero_path": _hero_asset(subject, out_dir),
547
- "address": inputs["address"],
548
- "address_short": _short_address(inputs["address"]),
549
- "postcode": inputs["postcode"],
550
- "generated": inputs["generated"],
551
-
552
- "kpi_subject_sqft": subject_sqft,
553
- "kpi_subject_sqft_sub": subject_sqft_sub,
554
- "kpi_subject_beds": str(subject.get("beds") or "—"),
555
- "kpi_subject_epc": subject_epc,
556
- "kpi_subject_epc_sub": subject_epc_sub,
557
- "kpi_subject_type": subject.get("type") or "—",
558
- "kpi_subject_tenure": subject.get("tenure") or "Tenure unknown",
559
- "notable_features": _notable_features_block(subject),
560
- "subject_narrative": subject.get("narrative") or "",
561
-
562
- "summary_headline": ms["headline"],
563
- "summary_paragraphs": _summary_paragraphs(ms["paragraphs"]),
564
- "kpi_avg_asking": _money(v["avg_asking"]),
565
- "kpi_avg_sold": _money(v["avg_sold"]),
566
- "kpi_psf": _money(v["asking_psf"]),
567
- "kpi_yoy": yoy_str,
568
- "demand_rating": d["demand_rating"],
569
- "gauge_position": ms["demand_gauge_position"],
570
- "price_growth_note": ms["price_growth_note"],
571
- "demand_note": ms["demand_note"],
572
- "spark_svg": _spark_svg(d.get("growth_series", []), d.get("growth_psf_series", [])),
573
- "type_dist_rows": _type_dist_rows(d.get("type_dist", [])),
574
- "rental_rating": r["demand_rating"],
575
- "rental_for_rent": str(r["for_rent"]),
576
- "rental_dom": str(r["dom"]),
577
- "rental_turnover": f"{r['turnover_pct']}%",
578
-
579
- "sold_comps_rows": _sold_comps_rows(v.get("sold_comps", [])),
580
- "asking_comps_tiles": _asking_comps_tiles(v.get("asking_comps", [])),
581
-
582
- "agent_listings_cards": _agent_listings_cards(inputs["agent_listings"], out_dir),
583
- }
584
-
585
- text_slots = {
586
- "address", "address_short", "postcode", "generated",
587
- "brand_name", "brand_tagline", "prepared_by",
588
- "kpi_subject_beds", "kpi_subject_epc", "kpi_subject_epc_sub",
589
- "kpi_subject_sqft", "kpi_subject_sqft_sub",
590
- "kpi_subject_type", "kpi_subject_tenure",
591
- "summary_headline", "demand_rating",
592
- "price_growth_note", "demand_note", "subject_narrative",
593
- "rental_rating", "rental_for_rent", "rental_dom", "rental_turnover",
594
- }
595
- for k in text_slots:
596
- slots[k] = html.escape(str(slots[k]))
597
-
598
- out = tmpl
599
- for k, val in slots.items():
600
- out = out.replace(f"<!-- REPLACE: {k} -->", val)
601
-
602
- leftovers = re.findall(r"<!-- REPLACE: (\w+) -->", out)
603
- if leftovers:
604
- raise RuntimeError(
605
- "template has unfilled placeholders: " + ", ".join(sorted(set(leftovers)))
606
- )
607
-
608
- out_path = out_dir / "index.html"
609
- out_path.write_text(out)
610
- return out_path
611
-
612
-
613
- def render_pdf(out_dir: Path, pdf_name: str) -> Path:
614
- chrome = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
615
- if not Path(chrome).exists():
616
- raise FileNotFoundError(
617
- "Chrome not found at " + chrome + " — install Chrome or override the path."
618
- )
619
- pdf_path = out_dir / pdf_name
620
- subprocess.run([
621
- chrome, "--headless", "--disable-gpu", "--no-pdf-header-footer",
622
- f"--print-to-pdf={pdf_path.resolve()}", "--virtual-time-budget=30000",
623
- f"file://{(out_dir / 'index.html').resolve()}",
624
- ], check=True, capture_output=True)
625
- return pdf_path
626
-
627
-
628
- _PAGE_OBJ_RE = re.compile(rb"/Type\s*/Page(?![sA-Za-z])")
629
-
630
-
631
- def _count_pages(pdf_path: Path) -> int:
632
- pdfinfo = shutil.which("pdfinfo")
633
- if pdfinfo:
634
- result = subprocess.run(
635
- [pdfinfo, str(pdf_path)], check=True, capture_output=True, text=True,
636
- )
637
- for line in result.stdout.splitlines():
638
- if line.startswith("Pages:"):
639
- return int(line.split(":", 1)[1].strip())
640
- raise RuntimeError(f"pdfinfo emitted no Pages line for {pdf_path}")
641
- return len(_PAGE_OBJ_RE.findall(pdf_path.read_bytes()))
642
-
643
-
644
- def assert_page_count(pdf_path: Path, expected: int) -> int:
645
- n = _count_pages(pdf_path)
646
- if n != expected:
647
- raise RuntimeError(
648
- f"page-count mismatch: expected {expected}, got {n} ({pdf_path}) — "
649
- "tighten panel padding for the overflowing page"
650
- )
651
- return n
652
-
653
-
654
- # The 12 PropertyData fan-out tools the preval skill is contracted to call.
655
- # Each tool the MCP server runs emits a `[property-data] tool=<name> ...` line
656
- # (see propertydata-api.ts:92). The watchdog asserts every one of these names
657
- # appears in the log within the 60s budget after `[preval] start`; a missing
658
- # line means the fan-out silently dropped a call and the agent was about to
659
- # render against an incomplete payload.
660
- EXPECTED_PROPERTY_DATA_TOOLS = (
661
- "property-data-prices",
662
- "property-data-prices-per-sqf",
663
- "property-data-sold-prices",
664
- "property-data-sold-prices-per-sqf",
665
- "property-data-growth",
666
- "property-data-growth-psf",
667
- "property-data-demand",
668
- "property-data-demand-rent",
669
- "property-data-property-types",
670
- "property-data-crime",
671
- "property-data-flood-risk",
672
- "property-data-council-tax",
673
- )
674
-
675
-
676
- def _missing_property_data_tools(log_text: str) -> list[str]:
677
- """Return EXPECTED_PROPERTY_DATA_TOOLS that have no `[property-data] tool=<name>` line in log_text."""
678
- return [
679
- name for name in EXPECTED_PROPERTY_DATA_TOOLS
680
- if f"[property-data] tool={name} " not in log_text
681
- and not log_text.endswith(f"[property-data] tool={name}")
682
- and f"[property-data] tool={name}\n" not in log_text
683
- ]
684
-
685
-
686
- def _assert_observability_logs(log_path: Path, *, deadline_s: float = 60.0,
687
- poll_s: float = 2.0, _now=time.monotonic,
688
- _sleep=time.sleep) -> None:
689
- """Poll the log until every PropertyData fan-out tool emitted its line.
690
-
691
- Aborts with cause `observability-missing tool=<name>` once deadline_s
692
- elapses if any expected name is still missing. `_now` and `_sleep` are
693
- injectable for tests so the 60s budget can be exercised without
694
- wall-clock waits.
695
- """
696
- deadline = _now() + deadline_s
697
- while True:
698
- try:
699
- text = log_path.read_text()
700
- except OSError:
701
- text = ""
702
- missing = _missing_property_data_tools(text)
703
- if not missing:
704
- return
705
- if _now() >= deadline:
706
- raise PrevalAbort(
707
- f"observability-missing tool={missing[0]}",
708
- f"PropertyData tool {missing[0]} did not emit "
709
- f"`[property-data] tool={missing[0]} ...` within {int(deadline_s)}s "
710
- "of [preval] start. The fan-out silently dropped one or more calls; "
711
- "re-invoke and confirm every PropertyData tool returned before render. "
712
- f"Other missing tool(s): {missing[1:] or 'none'}.",
713
- )
714
- _sleep(poll_s)
715
-
716
-
717
- def _pick_log_path(out_dir: Path) -> Path:
718
- """~/.maxy/logs/server.log if writable, else <out_dir>/preval.log.
719
-
720
- Aborts with `log-destination-unavailable` if neither is writable —
721
- silent runs are a contract violation.
722
- """
723
- primary = Path("~/.maxy/logs/server.log").expanduser()
724
- for candidate in (primary, out_dir / "preval.log"):
725
- try:
726
- candidate.parent.mkdir(parents=True, exist_ok=True)
727
- with candidate.open("a"):
728
- pass
729
- return candidate
730
- except OSError:
731
- continue
732
- raise PrevalAbort(
733
- "log-destination-unavailable",
734
- "Neither ~/.maxy/logs/server.log nor <out_dir>/preval.log is writable. "
735
- "Fix filesystem permissions before re-running.",
736
- )
737
-
738
-
739
- def _log_line(log_path: Path | None, line: str) -> None:
740
- if log_path is not None:
741
- try:
742
- with log_path.open("a") as f:
743
- f.write(line + "\n")
744
- except OSError:
745
- pass
746
- print(line, file=sys.stderr)
747
-
748
-
749
- def _abort(cause: str, hint: str, *, address: str, postcode: str, t0: float,
750
- out_dir: Path | None, log_path: Path | None) -> None:
751
- ms = int((time.monotonic() - t0) * 1000)
752
- _log_line(
753
- log_path,
754
- f'[preval] aborted reason={cause} address="{address}" postcode={postcode} ms={ms}',
755
- )
756
- print(hint, file=sys.stderr)
757
- if out_dir is not None:
758
- p = out_dir / "index.html"
759
- if p.exists():
760
- p.unlink()
761
- sys.exit(2)
762
-
763
-
764
- def main():
765
- t0 = time.monotonic()
766
- if len(sys.argv) < 2:
767
- print("Usage: render.py <inputs.json>", file=sys.stderr)
768
- sys.exit(2)
769
- inputs = json.loads(Path(sys.argv[1]).read_text())
770
- out_dir = Path(inputs["out_dir"]).expanduser()
771
- out_dir.mkdir(parents=True, exist_ok=True)
772
- base = inputs["filename_stem"]
773
- address = inputs.get("address", "")
774
- postcode = inputs.get("postcode", "")
775
-
776
- try:
777
- log_path = _pick_log_path(out_dir)
778
- except PrevalAbort as e:
779
- _abort(e.cause, e.hint, address=address, postcode=postcode, t0=t0,
780
- out_dir=out_dir, log_path=None)
781
-
782
- _log_line(log_path, f'[preval] start address="{address}" postcode={postcode}')
783
-
784
- try:
785
- _assert_observability_logs(log_path)
786
- except PrevalAbort as e:
787
- _abort(e.cause, e.hint, address=address, postcode=postcode, t0=t0,
788
- out_dir=out_dir, log_path=log_path)
789
-
790
- try:
791
- render(inputs, out_dir)
792
- pdf = render_pdf(out_dir, f"{base}.pdf")
793
- pages = assert_page_count(pdf, 7)
794
- except PrevalAbort as e:
795
- pdf_path = out_dir / f"{base}.pdf"
796
- if pdf_path.exists():
797
- pdf_path.unlink()
798
- _abort(e.cause, e.hint, address=address, postcode=postcode, t0=t0,
799
- out_dir=out_dir, log_path=log_path)
800
- except RuntimeError as e:
801
- pdf_path = out_dir / f"{base}.pdf"
802
- if pdf_path.exists():
803
- pdf_path.unlink()
804
- _abort("render-error", str(e), address=address, postcode=postcode, t0=t0,
805
- out_dir=out_dir, log_path=log_path)
806
-
807
- ms = int((time.monotonic() - t0) * 1000)
808
- _log_line(log_path, f"[preval] done pdf={pdf} pages={pages} ms={ms}")
809
- print(f"HTML → {out_dir/'index.html'}")
810
- print(f"PDF → {pdf} ({pages} pages)")
811
-
812
-
813
- if __name__ == "__main__":
814
- main()