@rubytech/create-maxy-code 0.1.114 → 0.1.116

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 (722) 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/admin/PLUGIN.md +1 -0
  10. package/payload/platform/plugins/admin/hooks/signal-detector-stop.sh +309 -0
  11. package/payload/platform/plugins/contacts/mcp/dist/index.js +3 -3
  12. package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -1
  13. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +1 -1
  14. package/payload/platform/plugins/docs/references/contacts-guide.md +1 -9
  15. package/payload/platform/plugins/docs/references/getting-started.md +1 -1
  16. package/payload/platform/plugins/docs/references/internals.md +1 -1
  17. package/payload/platform/plugins/docs/references/platform.md +1 -1
  18. package/payload/platform/plugins/docs/references/plugins-guide.md +1 -2
  19. package/payload/platform/plugins/linkedin-import/PLUGIN.md +1 -1
  20. package/payload/platform/plugins/memory/PLUGIN.md +8 -1
  21. package/payload/platform/plugins/memory/mcp/dist/index.js +32 -0
  22. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  23. package/payload/platform/plugins/memory/mcp/dist/tools/memory-signals-recent.d.ts +35 -0
  24. package/payload/platform/plugins/memory/mcp/dist/tools/memory-signals-recent.d.ts.map +1 -0
  25. package/payload/platform/plugins/memory/mcp/dist/tools/memory-signals-recent.js +73 -0
  26. package/payload/platform/plugins/memory/mcp/dist/tools/memory-signals-recent.js.map +1 -0
  27. package/payload/platform/plugins/sales/.claude-plugin/plugin.json +1 -1
  28. package/payload/platform/plugins/sales/PLUGIN.md +9 -9
  29. package/payload/platform/plugins/sales/references/close-tracking.md +6 -6
  30. package/payload/platform/plugins/sales/references/faq.md +1 -5
  31. package/payload/platform/plugins/sales/references/objection-handling.md +2 -2
  32. package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
  33. package/payload/platform/plugins/scheduling/mcp/dist/index.js +2 -2
  34. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  35. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js +1 -1
  36. package/payload/platform/plugins/venture-studio/skills/office-hours/SKILL.md +3 -3
  37. package/payload/platform/plugins/venture-studio/skills/zero-to-prototype/references/landing-page.md +4 -4
  38. package/payload/platform/plugins/workflows/PLUGIN.md +1 -1
  39. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts +1 -1
  40. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +2 -2
  41. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
  42. package/payload/platform/scripts/conversation-id-allowlist.txt +0 -7
  43. package/payload/platform/scripts/seed-neo4j.sh +2 -1
  44. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  45. package/payload/platform/services/claude-session-manager/dist/http-server.js +42 -1
  46. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  47. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +34 -0
  48. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  49. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +83 -2
  50. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  51. package/payload/platform/templates/agents/admin/IDENTITY.md +12 -0
  52. package/payload/platform/templates/specialists/agents/project-manager.md +1 -3
  53. package/payload/platform/templates/specialists/agents/signal-detector.md +129 -0
  54. package/payload/premium-plugins/.claude-plugin/marketplace.json +0 -10
  55. package/payload/premium-plugins/venture-studio/skills/office-hours/SKILL.md +3 -3
  56. package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/landing-page.md +4 -4
  57. package/payload/server/{chunk-FSPPVVWM.js → chunk-FJCI6X3H.js} +192 -0
  58. package/payload/server/maxy-edge.js +1 -1
  59. package/payload/server/public/assets/{ChatInput-CsnIedhS.js → ChatInput-CJo_77bp.js} +5 -1
  60. package/payload/server/public/assets/{Checkbox-CWugFyFT.js → Checkbox-YrQovXpN.js} +1 -1
  61. package/payload/server/public/assets/{admin-D3gZuyUn.js → admin-DloKrK2i.js} +25 -25
  62. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CeTRKWDb.js → architectureDiagram-Q4EWVU46-Breg9-99.js} +1 -1
  63. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DeeIX5U3.js → blockDiagram-DXYQGD6D-DXf1_673.js} +1 -1
  64. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CFsqZuil.js → c4Diagram-AHTNJAMY-CSZ36W4-.js} +1 -1
  65. package/payload/server/public/assets/channel-BmZnt3PP.js +1 -0
  66. package/payload/server/public/assets/{chunk-336JU56O-DpIXuFM0.js → chunk-336JU56O-DsrLk2eK.js} +2 -2
  67. package/payload/server/public/assets/{chunk-426QAEUC-Qk8qqrvA.js → chunk-426QAEUC-JpNfNf81.js} +1 -1
  68. package/payload/server/public/assets/{chunk-4TB4RGXK-DtM8-CUn.js → chunk-4TB4RGXK-DmClEAD0.js} +1 -1
  69. package/payload/server/public/assets/{chunk-5FUZZQ4R-CrSQ4ySU.js → chunk-5FUZZQ4R-BI9blW3N.js} +1 -1
  70. package/payload/server/public/assets/{chunk-5PVQY5BW-Bn2nQwdj.js → chunk-5PVQY5BW-BbgttEFO.js} +1 -1
  71. package/payload/server/public/assets/{chunk-EDXVE4YY-CzCPnR0P.js → chunk-EDXVE4YY-BX_LCFOx.js} +1 -1
  72. package/payload/server/public/assets/{chunk-ENJZ2VHE-CgZj9RoG.js → chunk-ENJZ2VHE-Bb7EoD0w.js} +1 -1
  73. package/payload/server/public/assets/{chunk-ICPOFSXX-wy-eNjwW.js → chunk-ICPOFSXX-DH8uQk-s.js} +1 -1
  74. package/payload/server/public/assets/{chunk-OYMX7WX6-CMmJtL8S.js → chunk-OYMX7WX6-FH5kgXsw.js} +1 -1
  75. package/payload/server/public/assets/{chunk-U2HBQHQK-CFCW7OaT.js → chunk-U2HBQHQK-D_ljlkHr.js} +1 -1
  76. package/payload/server/public/assets/{chunk-X2U36JSP-Bgh-CJSN.js → chunk-X2U36JSP-BX3EmZvm.js} +1 -1
  77. package/payload/server/public/assets/{chunk-YZCP3GAM-BXKwZ4vN.js → chunk-YZCP3GAM-Vu7-E93h.js} +1 -1
  78. package/payload/server/public/assets/{chunk-ZZ45TVLE-BiOuK5NP.js → chunk-ZZ45TVLE-CwjhNPX5.js} +1 -1
  79. package/payload/server/public/assets/classDiagram-6PBFFD2Q-kmMLFUpV.js +1 -0
  80. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BV7Ae8ct.js +1 -0
  81. package/payload/server/public/assets/clone-B5eqoN9I.js +1 -0
  82. package/payload/server/public/assets/{dagre-DyCxa9Q2.js → dagre-Ce6gsj0C.js} +1 -1
  83. package/payload/server/public/assets/{dagre-KV5264BT-Cffo_hmf.js → dagre-KV5264BT-BaMGpsoy.js} +1 -1
  84. package/payload/server/public/assets/data-NMvGx6jm.js +1 -0
  85. package/payload/server/public/assets/{diagram-5BDNPKRD-Bt93Du3V.js → diagram-5BDNPKRD-CHEE9rjq.js} +1 -1
  86. package/payload/server/public/assets/{diagram-G4DWMVQ6-v4r-tBsC.js → diagram-G4DWMVQ6-C98sZLW1.js} +1 -1
  87. package/payload/server/public/assets/{diagram-MMDJMWI5-DKrVPOP-.js → diagram-MMDJMWI5-DNvMGsTZ.js} +1 -1
  88. package/payload/server/public/assets/{diagram-TYMM5635-B1PzWQb9.js → diagram-TYMM5635-Cdte4IBa.js} +1 -1
  89. package/payload/server/public/assets/{erDiagram-SMLLAGMA-ClQzsQAs.js → erDiagram-SMLLAGMA-C9VZsWXK.js} +1 -1
  90. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-h3IbpN_7.js → flowDiagram-DWJPFMVM-tuP5fzzR.js} +1 -1
  91. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-ClaxOJi8.js → ganttDiagram-T4ZO3ILL-SJgRPUwx.js} +1 -1
  92. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-pM-U4ClD.js → gitGraphDiagram-UUTBAWPF-DU_cI_50.js} +1 -1
  93. package/payload/server/public/assets/graph-CN60KyTy.js +1 -0
  94. package/payload/server/public/assets/graph-labels-h39S93Xo.js +1 -0
  95. package/payload/server/public/assets/{graphlib-CwimOv_M.js → graphlib-D_nAsvmx.js} +1 -1
  96. package/payload/server/public/assets/{infoDiagram-42DDH7IO-DcO3Giwe.js → infoDiagram-42DDH7IO-Cj2Y19m6.js} +1 -1
  97. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BcdSL5VS.js → ishikawaDiagram-UXIWVN3A-DMc1xq1y.js} +1 -1
  98. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CYahHYzf.js → journeyDiagram-VCZTEJTY-C4CRAQma.js} +1 -1
  99. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Cl5KhoS4.js → kanban-definition-6JOO6SKY-CTr4AldU.js} +1 -1
  100. package/payload/server/public/assets/lib-Bnh57com.js +29 -0
  101. package/payload/server/public/assets/{line-d_2oTxLp.js → line-Btlm_IAl.js} +1 -1
  102. package/payload/server/public/assets/{mermaid-parser.core-CMMDGv3x.js → mermaid-parser.core-DXFdj_y1.js} +1 -1
  103. package/payload/server/public/assets/{mermaid.core-DK9ENGbr.js → mermaid.core-DFBhoCr5.js} +3 -3
  104. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-mA3x3MFG.js → mindmap-definition-QFDTVHPH-r9gVQybo.js} +1 -1
  105. package/payload/server/public/assets/{page-CgDmg_fX.js → page-B0iMmY6t.js} +1 -1
  106. package/payload/server/public/assets/{page-D9lluVl7.js → page-CFRU-BdJ.js} +2 -2
  107. package/payload/server/public/assets/{pieDiagram-DEJITSTG-CW1nGFlY.js → pieDiagram-DEJITSTG-CHKZjSaH.js} +1 -1
  108. package/payload/server/public/assets/{public-DdLMkNdS.js → public-DyGWgfaZ.js} +4 -4
  109. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DI5igJhR.js → quadrantDiagram-34T5L4WZ-CSGR1HJr.js} +1 -1
  110. package/payload/server/public/assets/{requirementDiagram-MS252O5E-DyVeI4e_.js → requirementDiagram-MS252O5E-DZ6hX9D6.js} +1 -1
  111. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-CCTTBYKY.js → sankeyDiagram-XADWPNL6-DbZBKh0m.js} +1 -1
  112. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-hVVf35ly.js → sequenceDiagram-FGHM5R23-BHHpb8dt.js} +1 -1
  113. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-CSLuQDUX.js → stateDiagram-FHFEXIEX-DQ1jiLB4.js} +1 -1
  114. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CByT2RzF.js +1 -0
  115. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-sxC3W8Q4.js → timeline-definition-GMOUNBTQ-BlGiEU7p.js} +1 -1
  116. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Ro-ton6Z.js → vennDiagram-DHZGUBPP-DmEH-hsB.js} +1 -1
  117. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-T-dKD0Zx.js → wardleyDiagram-NUSXRM2D-C7KJJ40d.js} +1 -1
  118. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CfProPts.js → xychartDiagram-5P7HB3ND-JDnusCaa.js} +1 -1
  119. package/payload/server/public/data.html +4 -4
  120. package/payload/server/public/graph.html +5 -5
  121. package/payload/server/public/index.html +7 -7
  122. package/payload/server/public/public.html +4 -4
  123. package/payload/server/server.js +52 -8
  124. package/payload/platform/plugins/waitlist/.claude-plugin/plugin.json +0 -17
  125. package/payload/platform/plugins/waitlist/PLUGIN.md +0 -86
  126. package/payload/platform/plugins/waitlist/mcp/dist/index.d.ts +0 -2
  127. package/payload/platform/plugins/waitlist/mcp/dist/index.d.ts.map +0 -1
  128. package/payload/platform/plugins/waitlist/mcp/dist/index.js +0 -388
  129. package/payload/platform/plugins/waitlist/mcp/dist/index.js.map +0 -1
  130. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.d.ts +0 -16
  131. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.d.ts.map +0 -1
  132. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.js +0 -58
  133. package/payload/platform/plugins/waitlist/mcp/dist/lib/admin-model.js.map +0 -1
  134. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.d.ts +0 -3
  135. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.d.ts.map +0 -1
  136. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.js +0 -48
  137. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.js.map +0 -1
  138. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts +0 -5
  139. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts.map +0 -1
  140. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +0 -40
  141. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +0 -1
  142. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.d.ts +0 -2
  143. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.d.ts.map +0 -1
  144. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js +0 -70
  145. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js.map +0 -1
  146. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.d.ts +0 -34
  147. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.d.ts.map +0 -1
  148. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.js +0 -129
  149. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.js.map +0 -1
  150. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.d.ts +0 -27
  151. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.d.ts.map +0 -1
  152. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.js +0 -127
  153. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.js.map +0 -1
  154. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.d.ts +0 -23
  155. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.d.ts.map +0 -1
  156. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.js +0 -58
  157. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.js.map +0 -1
  158. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts +0 -83
  159. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts.map +0 -1
  160. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js +0 -433
  161. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js.map +0 -1
  162. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.d.ts +0 -19
  163. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.d.ts.map +0 -1
  164. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.js +0 -81
  165. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.js.map +0 -1
  166. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.d.ts +0 -28
  167. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.d.ts.map +0 -1
  168. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.js +0 -50
  169. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.js.map +0 -1
  170. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts +0 -33
  171. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts.map +0 -1
  172. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +0 -297
  173. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +0 -1
  174. package/payload/platform/plugins/waitlist/mcp/package.json +0 -23
  175. package/payload/platform/plugins/waitlist/mcp/vitest.config.ts +0 -9
  176. package/payload/premium-plugins/real-agent/BUNDLE.md +0 -47
  177. package/payload/premium-plugins/real-agent/agents/buyer-enquiry/IDENTITY.md +0 -13
  178. package/payload/premium-plugins/real-agent/agents/buyer-enquiry/SOUL.md +0 -19
  179. package/payload/premium-plugins/real-agent/agents/buyer-enquiry/template.json +0 -9
  180. package/payload/premium-plugins/real-agent/agents/compliance.md +0 -317
  181. package/payload/premium-plugins/real-agent/agents/listing-curator.md +0 -152
  182. package/payload/premium-plugins/real-agent/agents/negotiator.md +0 -167
  183. package/payload/premium-plugins/real-agent/agents/valuer.md +0 -155
  184. package/payload/premium-plugins/real-agent/plugins/.claude-plugin/marketplace.json +0 -68
  185. package/payload/premium-plugins/real-agent/plugins/brochures/.claude-plugin/plugin.json +0 -8
  186. package/payload/premium-plugins/real-agent/plugins/brochures/PLUGIN.md +0 -38
  187. package/payload/premium-plugins/real-agent/plugins/brochures/commands/make-brochure.md +0 -11
  188. package/payload/premium-plugins/real-agent/plugins/brochures/skills/a4-print-documents/SKILL.md +0 -478
  189. package/payload/premium-plugins/real-agent/plugins/brochures/skills/brand-design/SKILL.md +0 -235
  190. package/payload/premium-plugins/real-agent/plugins/brochures/skills/make-brochure/SKILL.md +0 -355
  191. package/payload/premium-plugins/real-agent/plugins/brochures/skills/make-brochure/references/seller-brief-template.md +0 -115
  192. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/SKILL.md +0 -195
  193. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/build.md +0 -689
  194. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/copy.md +0 -211
  195. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/images.md +0 -166
  196. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/index-landing.md +0 -376
  197. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/index.html +0 -1290
  198. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/placeholders.md +0 -250
  199. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/registers.md +0 -105
  200. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/seller-brief.md +0 -56
  201. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/structure.md +0 -249
  202. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-brochure/references/template.html +0 -2400
  203. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-extract/SKILL.md +0 -366
  204. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-market-report/SKILL.md +0 -100
  205. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-market-report/references/render.py +0 -267
  206. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-market-report/references/template.html +0 -266
  207. package/payload/premium-plugins/real-agent/plugins/brochures/skills/property-socials/SKILL.md +0 -143
  208. package/payload/premium-plugins/real-agent/plugins/buyers/.claude-plugin/plugin.json +0 -8
  209. package/payload/premium-plugins/real-agent/plugins/buyers/PLUGIN.md +0 -35
  210. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-feedback/SKILL.md +0 -109
  211. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/SKILL.md +0 -42
  212. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-qualification-questions.md +0 -16
  213. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-qualification.md +0 -59
  214. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-scripts.md +0 -63
  215. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/buyer-working-scripts.md +0 -54
  216. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/feedback-collection.md +0 -42
  217. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/offer-capture.md +0 -38
  218. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/viewing-booking.md +0 -32
  219. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-management/references/viewing-management.md +0 -52
  220. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/SKILL.md +0 -407
  221. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/care-fees-guide.md +0 -68
  222. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/divorce-sales-guide.md +0 -61
  223. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/downsizing-guide.md +0 -45
  224. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/first-time-buyers.md +0 -92
  225. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/first-time-sellers.md +0 -78
  226. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/probate-guide.md +0 -53
  227. package/payload/premium-plugins/real-agent/plugins/buyers/skills/buyer-seller-guides/references/upsizing-guide.md +0 -41
  228. package/payload/premium-plugins/real-agent/plugins/buyers/skills/property-enquiry/SKILL.md +0 -126
  229. package/payload/premium-plugins/real-agent/plugins/buyers/skills/property-recommender/SKILL.md +0 -116
  230. package/payload/premium-plugins/real-agent/plugins/buyers/skills/viewing-management/SKILL.md +0 -111
  231. package/payload/premium-plugins/real-agent/plugins/estate-business/.claude-plugin/plugin.json +0 -8
  232. package/payload/premium-plugins/real-agent/plugins/estate-business/PLUGIN.md +0 -64
  233. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/SKILL.md +0 -133
  234. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/buy-back-your-time.md +0 -37
  235. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/firewave-gost-scorecards.md +0 -14
  236. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/keller-org-model.md +0 -17
  237. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/lencioni-team-models.md +0 -22
  238. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/listing-management-system.md +0 -11
  239. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/net-figure-form.md +0 -11
  240. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/serhant-bizinbox-notes.md +0 -13
  241. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/team-roles-commission.md +0 -14
  242. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/va-2026-ops.md +0 -43
  243. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-growth/references/wingman-structure.md +0 -13
  244. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/SKILL.md +0 -32
  245. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/crm-systems.md +0 -57
  246. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/hiring-guide.md +0 -59
  247. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/impact-framework.md +0 -47
  248. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/minutes-equal-money.md +0 -55
  249. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/business-operations/references/team-management.md +0 -48
  250. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/commission-calculator/SKILL.md +0 -40
  251. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/SKILL.md +0 -52
  252. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/12-reasons.md +0 -39
  253. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/95-5-system.md +0 -66
  254. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/agent-attraction-scripts.md +0 -90
  255. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/business-partnership.md +0 -92
  256. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/exp-model-overview.md +0 -66
  257. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/model-comparison.md +0 -66
  258. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/exp-partnership/references/revenue-share-explained.md +0 -57
  259. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/month-end-close/SKILL.md +0 -69
  260. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/payment-batch-stager/SKILL.md +0 -42
  261. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/period-reconciler/SKILL.md +0 -42
  262. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/SKILL.md +0 -117
  263. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/attraction-agent-notes.md +0 -31
  264. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/attraction-agent.md +0 -58
  265. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/authenticity-boundaries.md +0 -28
  266. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/become-a-brand-leader-notes.md +0 -19
  267. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/blast-formula.md +0 -42
  268. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/brand-leader.md +0 -48
  269. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/brand-strategy-system.md +0 -59
  270. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/content-engine.md +0 -49
  271. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/firewave-blast-and-blogging.md +0 -23
  272. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/gary-v-content.md +0 -52
  273. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/gary-v-principles.md +0 -20
  274. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/oversubscribed-positioning.md +0 -18
  275. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/platforms.md +0 -41
  276. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/priestley-oversubscribed.md +0 -54
  277. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/storeys-style-examples.md +0 -25
  278. package/payload/premium-plugins/real-agent/plugins/estate-business/skills/personal-branding/references/visual-identity.md +0 -27
  279. package/payload/premium-plugins/real-agent/plugins/estate-coaching/.claude-plugin/plugin.json +0 -8
  280. package/payload/premium-plugins/real-agent/plugins/estate-coaching/PLUGIN.md +0 -54
  281. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/SKILL.md +0 -371
  282. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/atomic-habits.md +0 -52
  283. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/daily-routine-scorecard.md +0 -104
  284. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/hp6-model.md +0 -63
  285. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/agent-performance/references/twelve-week-year.md +0 -71
  286. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/SKILL.md +0 -36
  287. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/references/coaching-boundaries.md +0 -56
  288. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/references/feedback-framework.md +0 -61
  289. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/bespoke-coaching/references/performance-framework.md +0 -109
  290. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/SKILL.md +0 -421
  291. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/coaching-exercises.md +0 -86
  292. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/goal-setting.md +0 -78
  293. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/one-to-one-framework.md +0 -92
  294. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/coaching-toolkit/references/soi-workbook.md +0 -103
  295. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/SKILL.md +0 -410
  296. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/agent-training-guide.md +0 -70
  297. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/business-in-a-box.md +0 -72
  298. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/buyers-guide.md +0 -53
  299. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/codo-method.md +0 -72
  300. package/payload/premium-plugins/real-agent/plugins/estate-coaching/skills/serhant-training/references/website-planning-guide.md +0 -79
  301. package/payload/premium-plugins/real-agent/plugins/estate-sales/.claude-plugin/plugin.json +0 -8
  302. package/payload/premium-plugins/real-agent/plugins/estate-sales/PLUGIN.md +0 -52
  303. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/chase-progression/SKILL.md +0 -107
  304. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/SKILL.md +0 -35
  305. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/deal-saving.md +0 -47
  306. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/negotiation-deep-guide.md +0 -64
  307. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/negotiation-prep-principles.md +0 -29
  308. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/negotiation-techniques.md +0 -42
  309. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/negotiation/references/offer-presentation.md +0 -43
  310. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/risk-scorer/SKILL.md +0 -42
  311. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-closer/SKILL.md +0 -24
  312. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-closer/references/serhant-emotion-stages.md +0 -36
  313. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/SKILL.md +0 -30
  314. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/chris-voss-discovery.md +0 -88
  315. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/firewave-gost-journey.md +0 -68
  316. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/phil-jones-openers.md +0 -78
  317. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/pre-listing-checklist.md +0 -77
  318. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/serhant-improv.md +0 -22
  319. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/tom-ferry-discovery.md +0 -103
  320. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-discovery/references/vendor-motivation-competitor.md +0 -52
  321. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/SKILL.md +0 -29
  322. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/chris-voss-negotiation.md +0 -70
  323. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/phil-jones-price-words.md +0 -40
  324. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/serhant-negotiation-plus.md +0 -55
  325. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/tom-panos-commission-pricing.md +0 -57
  326. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-negotiation/references/tony-morris-questioning.md +0 -54
  327. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-progression/SKILL.md +0 -27
  328. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-progression/references/conveyancing-guide.md +0 -54
  329. package/payload/premium-plugins/real-agent/plugins/estate-sales/skills/sales-progression/references/transaction-tracking.md +0 -66
  330. package/payload/premium-plugins/real-agent/plugins/estate-teaching/.claude-plugin/plugin.json +0 -8
  331. package/payload/premium-plugins/real-agent/plugins/estate-teaching/PLUGIN.md +0 -30
  332. package/payload/premium-plugins/real-agent/plugins/estate-teaching/skills/content-directory/SKILL.md +0 -39
  333. package/payload/premium-plugins/real-agent/plugins/estate-teaching/skills/content-directory/references/module-delivery.md +0 -65
  334. package/payload/premium-plugins/real-agent/plugins/estate-teaching/skills/content-directory/references/progress-tracking.md +0 -47
  335. package/payload/premium-plugins/real-agent/plugins/leads/.claude-plugin/plugin.json +0 -8
  336. package/payload/premium-plugins/real-agent/plugins/leads/PLUGIN.md +0 -61
  337. package/payload/premium-plugins/real-agent/plugins/leads/skills/chain-progression-tracker/SKILL.md +0 -51
  338. package/payload/premium-plugins/real-agent/plugins/leads/skills/diary-builder/SKILL.md +0 -38
  339. package/payload/premium-plugins/real-agent/plugins/leads/skills/enquiry-triage/SKILL.md +0 -36
  340. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/SKILL.md +0 -137
  341. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/buyer-search-letter.md +0 -28
  342. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/buyer-search-letters.md +0 -37
  343. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/database-reactivation.md +0 -30
  344. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/email-nurture-sequences.md +0 -45
  345. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/facebook-referrals.md +0 -30
  346. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/firewave-email-nurture-sequences.md +0 -41
  347. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/keller-33-touch.md +0 -34
  348. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/neighbour-letters.md +0 -31
  349. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/neighbour-notification-letter.md +0 -20
  350. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/ofi-follow-up-dialogue.md +0 -22
  351. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/ofi-follow-up.md +0 -26
  352. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/serhant-three-fs-plus.md +0 -21
  353. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sharran-10x10x10.md +0 -18
  354. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sms-templates.md +0 -40
  355. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sphere-of-influence-notes.md +0 -34
  356. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/sphere-of-influence.md +0 -60
  357. package/payload/premium-plugins/real-agent/plugins/leads/skills/lead-nurturing/references/tom-panos-sms-templates.md +0 -59
  358. package/payload/premium-plugins/real-agent/plugins/leads/skills/morning-round/SKILL.md +0 -72
  359. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/SKILL.md +0 -33
  360. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/database-matching.md +0 -30
  361. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/database-value.md +0 -53
  362. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/prospecting-dialogues.md +0 -24
  363. package/payload/premium-plugins/real-agent/plugins/leads/skills/prospecting/references/reactivation.md +0 -34
  364. package/payload/premium-plugins/real-agent/plugins/listings/.claude-plugin/plugin.json +0 -8
  365. package/payload/premium-plugins/real-agent/plugins/listings/PLUGIN.md +0 -100
  366. package/payload/premium-plugins/real-agent/plugins/listings/skills/comparable-finder/SKILL.md +0 -52
  367. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/SKILL.md +0 -28
  368. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/kerb-appeal.md +0 -38
  369. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/photo-day.md +0 -59
  370. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/situational-tips.md +0 -50
  371. package/payload/premium-plugins/real-agent/plugins/listings/skills/home-preparation/references/staging-guide.md +0 -52
  372. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-copy-writer/SKILL.md +0 -55
  373. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/SKILL.md +0 -286
  374. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/booking-script.md +0 -51
  375. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/objection-scripts.md +0 -193
  376. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/penhaul-presentation.md +0 -123
  377. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/pre-listing-kit.md +0 -139
  378. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/set-to-sell.md +0 -55
  379. package/payload/premium-plugins/real-agent/plugins/listings/skills/listing-presentation/references/sharran-frameworks.md +0 -107
  380. package/payload/premium-plugins/real-agent/plugins/listings/skills/local-market-stats/SKILL.md +0 -33
  381. package/payload/premium-plugins/real-agent/plugins/listings/skills/new-instruction/SKILL.md +0 -77
  382. package/payload/premium-plugins/real-agent/plugins/listings/skills/particulars-builder/SKILL.md +0 -48
  383. package/payload/premium-plugins/real-agent/plugins/listings/skills/portal-launch-scheduler/SKILL.md +0 -49
  384. package/payload/premium-plugins/real-agent/plugins/listings/skills/pricing-scenario-builder/SKILL.md +0 -35
  385. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/SKILL.md +0 -337
  386. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/auction-report-template.md +0 -41
  387. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/coming-soon-campaign.md +0 -43
  388. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/direct-mail-templates.md +0 -121
  389. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/eoi-form-template.md +0 -62
  390. package/payload/premium-plugins/real-agent/plugins/listings/skills/property-marketing/references/monthly-scorecard.md +0 -63
  391. package/payload/premium-plugins/real-agent/plugins/listings/skills/supplier-booker/SKILL.md +0 -39
  392. package/payload/premium-plugins/real-agent/plugins/listings/skills/talk-track-composer/SKILL.md +0 -36
  393. package/payload/premium-plugins/real-agent/plugins/listings/skills/terms-of-business-drafter/SKILL.md +0 -54
  394. package/payload/premium-plugins/real-agent/plugins/listings/skills/valuation-prep/SKILL.md +0 -69
  395. package/payload/premium-plugins/real-agent/plugins/loop/.claude-plugin/plugin.json +0 -8
  396. package/payload/premium-plugins/real-agent/plugins/loop/PLUGIN.md +0 -261
  397. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.d.ts +0 -2
  398. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.d.ts.map +0 -1
  399. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.js +0 -320
  400. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.js.map +0 -1
  401. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.d.ts +0 -10
  402. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.d.ts.map +0 -1
  403. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.js +0 -88
  404. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/crypto.js.map +0 -1
  405. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.d.ts +0 -3
  406. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.d.ts.map +0 -1
  407. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.js +0 -48
  408. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/file-crypto.js.map +0 -1
  409. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.d.ts +0 -22
  410. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.d.ts.map +0 -1
  411. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.js +0 -165
  412. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/key-store.js.map +0 -1
  413. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.d.ts +0 -82
  414. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +0 -1
  415. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.js +0 -392
  416. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/loop-api.js.map +0 -1
  417. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.d.ts +0 -5
  418. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +0 -1
  419. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js +0 -40
  420. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js.map +0 -1
  421. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.d.ts +0 -12
  422. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.d.ts.map +0 -1
  423. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.js +0 -22
  424. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/auto-responder.js.map +0 -1
  425. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +0 -10
  426. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +0 -1
  427. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.js +0 -24
  428. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/customer-preferences.js.map +0 -1
  429. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.d.ts +0 -16
  430. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.d.ts.map +0 -1
  431. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.js +0 -35
  432. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/feedback.js.map +0 -1
  433. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.d.ts +0 -5
  434. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  435. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.js +0 -9
  436. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-deregister.js.map +0 -1
  437. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.d.ts +0 -4
  438. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.d.ts.map +0 -1
  439. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.js +0 -14
  440. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-list.js.map +0 -1
  441. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.d.ts +0 -9
  442. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.d.ts.map +0 -1
  443. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.js +0 -43
  444. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/key-register.js.map +0 -1
  445. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +0 -6
  446. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +0 -1
  447. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.js +0 -7
  448. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +0 -1
  449. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +0 -9
  450. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +0 -1
  451. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.js +0 -16
  452. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +0 -1
  453. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +0 -15
  454. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +0 -1
  455. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.js +0 -11
  456. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +0 -1
  457. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.d.ts +0 -10
  458. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +0 -1
  459. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.js +0 -39
  460. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/marketing-match.js.map +0 -1
  461. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.d.ts +0 -9
  462. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +0 -1
  463. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.js +0 -125
  464. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-detail.js.map +0 -1
  465. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.d.ts +0 -18
  466. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.d.ts.map +0 -1
  467. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.js +0 -87
  468. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/people-search.js.map +0 -1
  469. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.d.ts +0 -10
  470. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +0 -1
  471. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.js +0 -82
  472. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-detail.js.map +0 -1
  473. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.d.ts +0 -33
  474. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.d.ts.map +0 -1
  475. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.js +0 -19
  476. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-intent.js.map +0 -1
  477. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.d.ts +0 -11
  478. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +0 -1
  479. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.js +0 -26
  480. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-listed.js.map +0 -1
  481. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.d.ts +0 -15
  482. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.d.ts.map +0 -1
  483. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.js +0 -11
  484. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-request.js.map +0 -1
  485. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.d.ts +0 -16
  486. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.d.ts.map +0 -1
  487. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.js +0 -41
  488. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-search.js.map +0 -1
  489. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.d.ts +0 -9
  490. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.d.ts.map +0 -1
  491. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.js +0 -19
  492. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/property-sold.js.map +0 -1
  493. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.d.ts +0 -13
  494. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.d.ts.map +0 -1
  495. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.js +0 -49
  496. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/supplier.js.map +0 -1
  497. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.d.ts +0 -7
  498. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +0 -1
  499. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.js +0 -19
  500. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-availability.js.map +0 -1
  501. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.d.ts +0 -5
  502. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.d.ts.map +0 -1
  503. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.js +0 -32
  504. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/team-info.js.map +0 -1
  505. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.d.ts +0 -14
  506. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +0 -1
  507. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.js +0 -11
  508. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-create.js.map +0 -1
  509. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +0 -9
  510. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +0 -1
  511. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.js +0 -85
  512. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-detail.js.map +0 -1
  513. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.d.ts +0 -13
  514. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +0 -1
  515. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.js +0 -44
  516. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-search.js.map +0 -1
  517. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.d.ts +0 -14
  518. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +0 -1
  519. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.js +0 -18
  520. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/tools/viewing-update.js.map +0 -1
  521. package/payload/premium-plugins/real-agent/plugins/loop/mcp/package-lock.json +0 -2549
  522. package/payload/premium-plugins/real-agent/plugins/loop/mcp/package.json +0 -21
  523. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/loop-swagger.snapshot.json +0 -26467
  524. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/new-tool-shape.test.ts +0 -99
  525. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/plugin-md-time-doctrine.test.ts +0 -132
  526. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/__tests__/swagger-write-coverage.test.ts +0 -154
  527. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/index.ts +0 -498
  528. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/crypto.ts +0 -105
  529. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/file-crypto.ts +0 -54
  530. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/key-store.ts +0 -221
  531. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/loop-api.ts +0 -567
  532. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/neo4j.ts +0 -51
  533. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/auto-responder.ts +0 -80
  534. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/customer-preferences.ts +0 -66
  535. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/feedback.ts +0 -86
  536. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/key-deregister.ts +0 -12
  537. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/key-list.ts +0 -19
  538. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/key-register.ts +0 -70
  539. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-enquiry.ts +0 -27
  540. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-match-batch.ts +0 -53
  541. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-match-request.ts +0 -42
  542. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/marketing-match.ts +0 -84
  543. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/people-detail.ts +0 -245
  544. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/people-search.ts +0 -180
  545. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-detail.ts +0 -145
  546. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-intent.ts +0 -84
  547. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-listed.ts +0 -81
  548. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-search.ts +0 -92
  549. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/property-sold.ts +0 -67
  550. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/supplier.ts +0 -129
  551. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/team-availability.ts +0 -52
  552. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/team-info.ts +0 -95
  553. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-create.ts +0 -41
  554. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-detail.ts +0 -171
  555. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-search.ts +0 -92
  556. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/tools/viewing-update.ts +0 -53
  557. package/payload/premium-plugins/real-agent/plugins/loop/mcp/tsconfig.json +0 -20
  558. package/payload/premium-plugins/real-agent/plugins/loop/mcp/vitest.config.ts +0 -9
  559. package/payload/premium-plugins/real-agent/plugins/loop/skills/compliance-flag-checker/SKILL.md +0 -53
  560. package/payload/premium-plugins/real-agent/plugins/loop/skills/priority-ranker/SKILL.md +0 -40
  561. package/payload/premium-plugins/real-agent/plugins/loop/skills/tone-matched-drafter/SKILL.md +0 -53
  562. package/payload/premium-plugins/real-agent/plugins/loop/skills/variance-narrator/SKILL.md +0 -50
  563. package/payload/premium-plugins/real-agent/plugins/loop/skills/vendor-research/SKILL.md +0 -54
  564. package/payload/premium-plugins/real-agent/plugins/preval/.claude-plugin/plugin.json +0 -8
  565. package/payload/premium-plugins/real-agent/plugins/preval/PLUGIN.md +0 -55
  566. package/payload/premium-plugins/real-agent/plugins/preval/hooks/preval-prompt-required.sh +0 -140
  567. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/SKILL.md +0 -198
  568. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/__tests__/adherence.test.py +0 -373
  569. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/render.py +0 -814
  570. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/template-inputs.schema.json +0 -204
  571. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/template.html +0 -381
  572. package/payload/premium-plugins/real-agent/plugins/property-data/.claude-plugin/plugin.json +0 -8
  573. package/payload/premium-plugins/real-agent/plugins/property-data/PLUGIN.md +0 -181
  574. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.d.ts +0 -2
  575. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.d.ts.map +0 -1
  576. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.js +0 -236
  577. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.js.map +0 -1
  578. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.d.ts +0 -3
  579. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.d.ts.map +0 -1
  580. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.js +0 -72
  581. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/crypto.js.map +0 -1
  582. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.d.ts +0 -3
  583. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.d.ts.map +0 -1
  584. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.js +0 -49
  585. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/file-crypto.js.map +0 -1
  586. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.d.ts +0 -15
  587. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.d.ts.map +0 -1
  588. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.js +0 -135
  589. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/key-store.js.map +0 -1
  590. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.d.ts +0 -5
  591. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.d.ts.map +0 -1
  592. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.js +0 -38
  593. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/neo4j.js.map +0 -1
  594. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.d.ts +0 -28
  595. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.d.ts.map +0 -1
  596. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.js +0 -101
  597. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/lib/propertydata-api.js.map +0 -1
  598. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.d.ts +0 -24
  599. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.d.ts.map +0 -1
  600. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.js +0 -33
  601. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/endpoints.js.map +0 -1
  602. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.d.ts +0 -4
  603. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  604. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.js +0 -9
  605. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-deregister.js.map +0 -1
  606. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.d.ts +0 -4
  607. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.d.ts.map +0 -1
  608. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.js +0 -10
  609. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-list.js.map +0 -1
  610. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.d.ts +0 -5
  611. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.d.ts.map +0 -1
  612. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.js +0 -50
  613. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/tools/key-register.js.map +0 -1
  614. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/package-lock.json +0 -2566
  615. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/package.json +0 -21
  616. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/endpoints.test.ts +0 -252
  617. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/key-roundtrip.test.ts +0 -107
  618. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/propertydata-api.test.ts +0 -184
  619. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/__tests__/schema-parity.test.ts +0 -62
  620. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/index.ts +0 -409
  621. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/crypto.ts +0 -79
  622. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/file-crypto.ts +0 -55
  623. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/key-store.ts +0 -181
  624. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/neo4j.ts +0 -47
  625. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/lib/propertydata-api.ts +0 -120
  626. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/endpoints.ts +0 -47
  627. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/key-deregister.ts +0 -9
  628. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/key-list.ts +0 -10
  629. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/tools/key-register.ts +0 -54
  630. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/tsconfig.json +0 -20
  631. package/payload/premium-plugins/real-agent/plugins/property-data/mcp/vitest.config.ts +0 -8
  632. package/payload/premium-plugins/real-agent/plugins/property-data/skills/property-data/SKILL.md +0 -77
  633. package/payload/premium-plugins/real-agent/plugins/vendors/.claude-plugin/plugin.json +0 -8
  634. package/payload/premium-plugins/real-agent/plugins/vendors/PLUGIN.md +0 -33
  635. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/SKILL.md +0 -42
  636. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/fee-protection-and-agenda.md +0 -28
  637. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/listing-scripts.md +0 -44
  638. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/negotiation-deep-guide.md +0 -70
  639. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/price-alignment-scripts.md +0 -33
  640. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/price-alignment.md +0 -34
  641. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/scenario-scripts.md +0 -38
  642. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/seller-engagement.md +0 -51
  643. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/valuation-booking.md +0 -76
  644. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/vendor-scripts.md +0 -63
  645. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-communication/references/vendor-updates.md +0 -41
  646. package/payload/premium-plugins/real-agent/plugins/vendors/skills/vendor-updates/SKILL.md +0 -153
  647. package/payload/premium-plugins/real-agent/specs/00-architecture-and-customization.md +0 -122
  648. package/payload/premium-plugins/real-agent/specs/01-morning-round.md +0 -76
  649. package/payload/premium-plugins/real-agent/specs/02-valuation-prep.md +0 -81
  650. package/payload/premium-plugins/real-agent/specs/03-new-instruction.md +0 -96
  651. package/payload/premium-plugins/real-agent/specs/04-chase-progression.md +0 -120
  652. package/payload/premium-plugins/real-agent/specs/05-month-end-close.md +0 -79
  653. package/payload/premium-plugins/teaching/.claude-plugin/plugin.json +0 -8
  654. package/payload/premium-plugins/teaching/PLUGIN.md +0 -58
  655. package/payload/premium-plugins/teaching/skills/interactive-tutor/SKILL.md +0 -59
  656. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/assessment.md +0 -70
  657. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/classroom-conduct.md +0 -43
  658. package/payload/premium-plugins/teaching/skills/interactive-tutor/references/teaching-modes.md +0 -83
  659. package/payload/premium-plugins/teaching/skills/lesson-planner/SKILL.md +0 -48
  660. package/payload/premium-plugins/teaching/skills/lesson-planner/references/context-gathering.md +0 -41
  661. package/payload/premium-plugins/teaching/skills/lesson-planner/references/plan-structure.md +0 -94
  662. package/payload/premium-plugins/teaching/skills/study-pack-builder/SKILL.md +0 -52
  663. package/payload/premium-plugins/teaching/skills/study-pack-builder/references/disaggregation.md +0 -49
  664. package/payload/premium-plugins/teaching/skills/study-pack-builder/references/materials.md +0 -116
  665. package/payload/premium-plugins/writer-craft/.claude-plugin/plugin.json +0 -8
  666. package/payload/premium-plugins/writer-craft/PLUGIN.md +0 -88
  667. package/payload/premium-plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +0 -92
  668. package/payload/premium-plugins/writer-craft/skills/citation-style/SKILL.md +0 -94
  669. package/payload/premium-plugins/writer-craft/skills/citation-style/references/book-and-chapter-models.md +0 -77
  670. package/payload/premium-plugins/writer-craft/skills/citation-style/references/citation-rules.md +0 -103
  671. package/payload/premium-plugins/writer-craft/skills/citation-style/references/journal-article-models.md +0 -74
  672. package/payload/premium-plugins/writer-craft/skills/citation-style/references/other-source-models.md +0 -146
  673. package/payload/premium-plugins/writer-craft/skills/citation-style/references/reference-list-rules.md +0 -70
  674. package/payload/premium-plugins/writer-craft/skills/editorial-practice/SKILL.md +0 -108
  675. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/copyediting.md +0 -73
  676. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/developmental-editing.md +0 -85
  677. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/genre-specific-editing.md +0 -78
  678. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/line-editing.md +0 -55
  679. package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/self-editing.md +0 -89
  680. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/SKILL.md +0 -114
  681. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/audience-analysis.md +0 -73
  682. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/crafting-persuasive-story.md +0 -76
  683. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/persuasion-case-studies.md +0 -67
  684. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/transformation-framework.md +0 -86
  685. package/payload/premium-plugins/writer-craft/skills/point-of-view/SKILL.md +0 -97
  686. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/indirect-narration.md +0 -72
  687. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/pov-types-and-voice.md +0 -91
  688. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/protagonist-filter.md +0 -71
  689. package/payload/premium-plugins/writer-craft/skills/point-of-view/references/tense-and-person.md +0 -85
  690. package/payload/premium-plugins/writer-craft/skills/prose-craft/SKILL.md +0 -100
  691. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/punctuation-and-grammar.md +0 -72
  692. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/repetition.md +0 -71
  693. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/sound-and-rhythm.md +0 -64
  694. package/payload/premium-plugins/writer-craft/skills/prose-craft/references/word-economy.md +0 -93
  695. package/payload/premium-plugins/writer-craft/skills/reader-engagement/SKILL.md +0 -100
  696. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/cause-effect-setup-payoff.md +0 -79
  697. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/conflict-escalation.md +0 -81
  698. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/hooking-readers.md +0 -67
  699. package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/neurochemistry-of-engagement.md +0 -94
  700. package/payload/premium-plugins/writer-craft/skills/review-manuscript/SKILL.md +0 -111
  701. package/payload/premium-plugins/writer-craft/skills/review-manuscript/references/review-manuscript-checklist.md +0 -119
  702. package/payload/premium-plugins/writer-craft/skills/review-prose/SKILL.md +0 -99
  703. package/payload/premium-plugins/writer-craft/skills/review-prose/references/prose-review-checklist.md +0 -112
  704. package/payload/premium-plugins/writer-craft/skills/review-scene/SKILL.md +0 -99
  705. package/payload/premium-plugins/writer-craft/skills/review-scene/references/scene-analysis-framework.md +0 -95
  706. package/payload/premium-plugins/writer-craft/skills/story-architecture/SKILL.md +0 -106
  707. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/blueprinting-and-scene-cards.md +0 -118
  708. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/inner-issue-and-protagonist-goal.md +0 -66
  709. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/misbelief-desire-worldview.md +0 -87
  710. package/payload/premium-plugins/writer-craft/skills/story-architecture/references/origin-scenes-and-escalation.md +0 -82
  711. package/payload/premium-plugins/writer-craft/skills/story-blueprint/SKILL.md +0 -133
  712. package/payload/premium-plugins/writer-craft/skills/story-blueprint/references/blueprinting-exercises.md +0 -118
  713. package/payload/premium-plugins/writer-craft/skills/story-blueprint/references/blueprinting-process.md +0 -128
  714. package/payload/server/public/assets/channel-CrSx5mnG.js +0 -1
  715. package/payload/server/public/assets/classDiagram-6PBFFD2Q-C3IDJsqN.js +0 -1
  716. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BOIrJ5Zb.js +0 -1
  717. package/payload/server/public/assets/clone-P8Fkz7JD.js +0 -1
  718. package/payload/server/public/assets/data-DRfwJPja.js +0 -1
  719. package/payload/server/public/assets/graph-B4FFYwus.js +0 -1
  720. package/payload/server/public/assets/graph-labels-Cpk9Ktt0.js +0 -1
  721. package/payload/server/public/assets/lib--yuBd0Xi.js +0 -33
  722. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-C5JejhQU.js +0 -1
@@ -1,366 +0,0 @@
1
- ---
2
- name: property-extract
3
- description: Use when a live property listing URL on any UK estate-agent website needs to be turned into a local property assets directory containing photos, floorplans, EPC documents, and structured metadata that the property-brochure skill can consume. Trigger phrases include "extract property from <url>", "get property details from <url>", "scrape this listing", "pull all the photos from <listing>", "stage assets for the brochure", or any request that names a live property URL and asks for the photos, floorplans, and details to be saved locally.
4
- allowed-tools:
5
- - Bash
6
- - Read
7
- - Write
8
- - Edit
9
- - Glob
10
- - Grep
11
- - WebFetch
12
- ---
13
-
14
- # property-extract
15
-
16
- Turn one publicly-accessible property listing URL into a self-contained property assets directory that `property-brochure` can consume without re-visiting the source site.
17
-
18
- The contract is **portal-agnostic**: the output shape is the same whether the source is an agent's own site (Muvin / Loop CRM tenants, custom builds) or a portal (Rightmove, Zoopla, OnTheMarket, OpenRent). The static-HTML probe is the cheap default; when it returns no asset URLs or the data is tab-bound, fall back to a headless browser. See **Process — high level**.
19
-
20
- ## Outcome contract
21
-
22
- The skill is **complete** when the target directory contains exactly this structure:
23
-
24
- ```
25
- <output-dir>/<property-slug>-<listing-id>/
26
- property.json # structured metadata
27
- description.md # human-readable description + agent + EPC + council tax
28
- epc/ # EPC certificate PDF/image, OR empty if rating is "TBC"
29
- floorplans/ # all floorplan images, original filenames
30
- images/ # all property photographs and renders, original filenames
31
- ```
32
-
33
- Every photograph and floorplan referenced by the listing must be downloaded. `epc/` may legitimately be empty (if no EPC has been issued); `images/` and `floorplans/` must not be empty if the listing exposes any.
34
-
35
- Do **not** pre-create a `brochure/` slot. `property-brochure` writes its deliverable directly to `<property_dir>/output/` — see `property-brochure/SKILL.md → Reference standard`. An empty `brochure/` next to `output/` is the legacy layout and a defect.
36
-
37
- `<property-slug>` comes from the URL path segment (e.g. `<street-locality-postcode>` for Loop-CRM-style URLs, or whatever slug component the source portal exposes). `<listing-id>` is the numeric ID, also from the URL. Concatenating them keeps the folder both human-readable and unique even when the same street has multiple listings.
38
-
39
- Anything else (raw HTML dumps, `/tmp` files, intermediate URL lists) must be cleaned up before reporting completion.
40
-
41
- ## Inputs
42
-
43
- Required: a property listing URL, fully-formed and publicly accessible. If only a postcode or property name is given, decline and ask for the URL — listings are uniquely identified by their numeric IDs, and there is no reliable way to infer one from a description.
44
-
45
- Optional: an output directory. The default is `<brand_dir>/properties/`, where `<brand_dir>` is the brand workspace for the agent that owns the listing. If a brand pack already exists at `<brand_dir>/DESIGN.md`, properties nest under `<brand_dir>/properties/`. If the brand workspace cannot be located, fall back to `./properties/` in the caller's current working directory.
46
-
47
- The property directory **must** sit inside its brand workspace at `<brand_dir>/properties/<property_slug>-<listing_id>/` — never as a sibling of the brand workspace, never inside another property's folder. This is the contract `make-brochure` and `property-brochure` read against.
48
-
49
- ## Scope boundaries
50
-
51
- | In scope | Out of scope |
52
- |---|---|
53
- | Download every CDN-hosted image, floorplan and EPC asset referenced by the listing page | Stripping AI-generated images from the photo set — keep them all and flag in metadata |
54
- | Extract description copy verbatim from whichever description container the page exposes | Paraphrasing or rewriting the description — the brochure step owns voice |
55
- | Capture a screenshot of any map element by heuristic (provider-agnostic — Google Maps iframe, Mapbox canvas, static-map `<img>`, custom embed) | Synthesising a map when the listing has none (no postcode-centroid renders, no AI maps) |
56
- | Property description, key features, price, specs, agent contact | Walkthrough video transcription (the property-brochure skill handles that separately if the user supplies one) |
57
- | EPC rating as a value, EPC certificate PDF if linked from the page | EPC certificate retrieval from the EPC Register — that's a separate lookup; if the listing does not link the certificate, leave `epc/` empty and record `"epc_rating": "TBC"` (or the band shown) in `property.json` |
58
- | Council tax band as shown on the page | Council tax band verification against VOA — out of scope |
59
- | Material Information visible on the listing page (tenure, council tax, EPC) | Full Part A/B/C compliance gathering — that's the brochure assembly step's job |
60
-
61
- The skill is portal-agnostic. The Loop-CRM CDN pattern (`*.b-cdn.net/propertyimages/...`, `*.b-cdn.net/floorplans/...`) is one common example that the static-HTML probe handles cheaply; agency-specific platforms (Rightmove, Zoopla, OnTheMarket, OpenRent, custom builds) JS-render most data and require the Playwright fallback documented in **Process — high level** step 4b. When the static probe returns no asset URLs or critical fields are tab-bound, escalate to the headless-browser fallback as a first-class path, not a conditional one. If even that returns nothing, stop and report `STATUS: BLOCKED` — do not synthesise an asset list.
62
-
63
- ## Artifact contracts
64
-
65
- ### Folder layout
66
-
67
- The three subfolders (`images/`, `floorplans/`, `epc/`) are **mandatory and named exactly** as specified — they are part of the contract that `property-brochure` reads against. Do not pluralise differently, do not collapse `epc/` into `floorplans/`, do not add a sibling `videos/` or `brochure/` folder. If a future asset class needs accommodating, propose a contract change to the plugin first.
68
-
69
- ### `images/`
70
-
71
- Every URL on the page pointing at an image asset is in scope. On Loop-CRM tenants the pattern is `b-cdn.net/propertyimages/<tenant-uuid>/<listing-id>/` — two example buckets in active use as of April 2026 are `loop-app.b-cdn.net` (older 2024-vintage uploads) and `loopcrm.b-cdn.net` (newer 2026 additions including drone shots, AI-staged renders, screenshots). Other portals serve from their own hosts (e.g. Rightmove's `media.rightmove.co.uk`); the rule is the same — grep every image URL the page emits, deduplicate, download all of them.
72
-
73
- Preserve the original filenames — many tenants encode upload timestamps as Unix epochs in the filename (e.g. `DSC01495_1727361503898.jpg` → 26 Sept 2024) which are useful for ordering and de-duplication later. Where filenames carry no timestamp, fall back to download order.
74
-
75
- Image categories observable from filename prefixes:
76
-
77
- | Prefix | Origin |
78
- |---|---|
79
- | `DSC*`, `IMG*` | Photographer's DSLR/mirrorless |
80
- | `DJI_*` | Drone imagery |
81
- | `ChatGPT-Image-*` | AI-staged render |
82
- | `Screenshot-*` | Map/aerial screenshot from a desktop tool |
83
- | `iPhone*`, `WhatsApp*` | Quick mobile snaps (lower resolution) |
84
-
85
- Record the count per prefix in `property.json` under `media.image_breakdown` — `property-brochure` uses this to pick the right photo for each slot.
86
-
87
- #### Curator-friendly rename — "<Property Name> N.jpg"
88
-
89
- After downloading, **also rename the images to `<Property Name> N.jpg`** (1-indexed, ordered by upload timestamp parsed from the original filename) so a human curator can browse `images/` in Finder/Preview and intuitively pick which photo goes in which slot. The downstream `property-brochure` slot map references `images/<property-slug>-NN.webp`, where `NN` matches the curator-chosen `N` 1:1 — so renaming source images to that order at extract time makes the entire pipeline traceable: the curator sees `<Property Name> 22.jpg` in Finder, the brochure HTML references `images/<property-slug>-22.webp`, and a search across either resolves to the same photograph.
90
-
91
- The rename is **not** a replacement of the original CDN-named files — those are preserved as-is for timestamp ordering and de-duplication. The renamed files are the same bytes (or a `cp`/`ln` of the originals), placed alongside, with the new `<Property Name> N.jpg` filenames.
92
-
93
- Recipe:
94
-
95
- ```bash
96
- cd <property_dir>/images
97
- i=1
98
- # Sort original CDN files by their embedded epoch timestamp (DSC01525_1727361503... → 1727361503)
99
- for src in $(ls -1 | grep -E '^(DSC|DJI|ChatGPT-Image|Screenshot|IMG|iPhone|WhatsApp)' | \
100
- awk -F_ '{print $0, $NF}' | sort -k2 -n | awk '{print $1}'); do
101
- cp "$src" "<Property Name> ${i}.jpg"
102
- i=$((i+1))
103
- done
104
- ```
105
-
106
- The `<Property Name>` is taken from `property.json -> property_name` (see *Property name vs address* below). If the property has no distinct name (uncommon at this register), use the first part of the address (the street name).
107
-
108
- Record the original-to-curator-name mapping in `property.json -> media.image_curator_map` so the rename is reversible:
109
-
110
- ```json
111
- "media": {
112
- "image_curator_map": {
113
- "The Old Rectory 1.jpg": "DJI_0125_1777122816019.jpg",
114
- "The Old Rectory 2.jpg": "DJI_0115_1777122829462.jpg",
115
- "...": "..."
116
- }
117
- }
118
- ```
119
-
120
- ### `floorplans/`
121
-
122
- Every URL on the page pointing at a floorplan asset is in scope. On Loop-CRM tenants the pattern is `b-cdn.net/floorplans/<tenant-uuid>/<listing-id>/`; other portals serve from their own hosts. Listings typically ship one floorplan per floor (so 1–3 files for a UK home). Preserve original filenames.
123
-
124
- ### `epc/`
125
-
126
- If the page links a PDF whose URL contains `epc` or whose link text mentions "EPC" / "Energy Performance Certificate", download it here. If the page only states a rating ("EPC rating: D") without linking a certificate, leave the folder empty and reflect the rating in `property.json`. If the rating is "TBC", record that exact string — do not guess.
127
-
128
- ### Map — extract or omit
129
-
130
- **Maps are extracted, never synthesized.** If the listing doesn't supply one, the brochure ships without a map. No fallback to OSM static maps, no postcode-geocoded re-render via postcodes.io, no AI-generated map artwork. Postcode centroids can mislead about exact location, and the brochure should reflect what the agency actually publishes — not what the pipeline could imagine.
131
-
132
- The capture is **provider-agnostic by design.** Estate agents embed maps in many ways: Google Maps iframes (common on Loop-CRM tenants), Mapbox or Leaflet `<div>`+canvas instantiations (custom builds), `<img>` static-map renders (used by some portal-style listings), Apple Maps embeds, custom-class wrappers — and that list will only grow. Don't hard-code a single CMS's markup. Instead: **find a map element by heuristic, screenshot it, save the bytes.** The provider's brand and tile style come along for the ride.
133
-
134
- **Detect.** Render the listing page in a real browser (Playwright). Try these heuristics in order, taking the first non-empty hit:
135
-
136
- 1. **Iframes whose src points at a known map provider:** `iframe[src*="maps.google"], iframe[src*="google.com/maps"], iframe[src*="mapbox.com"], iframe[src*="apple.com/maps"], iframe[src*="bing.com/maps"], iframe[src*="openstreetmap"]`.
137
- 2. **Containers whose class or id contains "map":** `[class*="property-map"], [class*="location-map"], [class*="section__map"], [class*="listing-map"], [id*="property-map"], [id*="location-map"]`. Filter out obvious false positives by element size (the map should be at least 300×300 in rendered pixels).
138
- 3. **`<img>` elements whose src points at a static-map service:** `img[src*="staticmap"], img[src*="maps.googleapis.com/maps/api/staticmap"], img[src*="api.mapbox.com/styles"]`.
139
- 4. **Visual fallback** (only if 1–3 fail and the user has confirmed the listing should have one): scan the page for a square-ish element ≥ 400×400 px containing a `<canvas>` (Mapbox-GL / Leaflet rasters). This is best-effort — log what was found and let the user verify.
140
-
141
- Take the first hit. If all heuristics return nothing, the listing has no map: stop, write `media.map: null`, do not synthesize.
142
-
143
- **Capture.**
144
-
145
- 1. Navigate to the listing URL with Playwright.
146
- 2. Scroll the detected element into view (`element.scrollIntoViewIfNeeded()`).
147
- 3. Wait for tiles to load — `page.waitForLoadState('networkidle')` or a 2-second buffer after scroll, plus an extra 1-second beat for canvas-based maps that fade in.
148
- 4. Screenshot the **element**, not the page: `element.screenshot({path: '<property_dir>/images/map.png'})`. This captures whatever the agency renders, using whatever provider and API key they've already paid for, at the visual size their site presents.
149
- 5. Convert PNG → WebP via `cwebp -q 86 -m 6 -mt -resize 1500 0 map.png -o map.webp`. Target ~1500 px wide.
150
- 6. Discard the intermediate `map.png`; `map.webp` is the asset.
151
-
152
- **Coordinates** (best-effort, optional). If the detected element is a Google Maps iframe whose `src` exposes `q=<lat>,<lon>` or `&center=<lat>,<lon>`, parse and record the coords under `address.geo`. If the element is a Mapbox iframe with `?center=lon,lat` in the URL, parse those. If the element is a div+canvas with no obvious URL, leave `address.geo: null` — coordinates aren't required for the map slot to render, since the screenshot is the asset. Coordinates are nice-to-have metadata, not gating data.
153
-
154
- **Record in `property.json`.** Add two slots:
155
-
156
- - Under `media`, set `map`: `"map.webp"` (filename, no path — the brochure resolves it inside `output/images/`).
157
- - Under `address`, set `geo`: `{"latitude": <float>, "longitude": <float>, "source": "<provider-token>", "embed_url": "<src or null>"}` if coords were parseable; otherwise `null`. The `source` token is one of `google_maps_iframe`, `mapbox_iframe`, `apple_maps_iframe`, `static_map_image`, or `unknown` (when only a screenshot was captured).
158
-
159
- **Absent case.** If no map element was detected, write `address.geo: null` and `media.map: null`. Do nothing else. The brochure step reads these nulls and removes its conditional map slot.
160
-
161
- **Capture failure.** If a map element was detected but the screenshot fails (page rendered without tiles loading, rate-limited tile servers, transient network blip), record `media.map: null` and emit a `DONE_WITH_CONCERNS` listing the failure and the detected element — do not ship a half-cooked broken-image link. Any coords parsed from URLs may still be recorded so a later run can retry.
162
-
163
- The rule, in one line: **extract or omit**.
164
-
165
- ### Property name vs address — they are not the same field
166
-
167
- At the super-premium register, many properties have a **distinct name** that is separate from the postal address: *The Old Rectory*, *Mill House*, *Beacon House*. The brochure's cover hero is the property name; the subtitle is the address. The two must be captured separately at extraction time.
168
-
169
- Detect the property name by:
170
-
171
- 1. Looking for "<Name>, <street>" patterns in the listing's title or H1 (e.g. "The Old Rectory, Mill Lane").
172
- 2. Looking for a name that is *not* a numbered street address (numbered addresses like "12 Mill Lane" don't have a separate name).
173
- 3. Cross-checking with a Sprift / Land Registry report — if the title is registered as "<Name> at <street>", that's the property name.
174
-
175
- Record both in `property.json`:
176
-
177
- ```json
178
- "property_name": "The Old Rectory", // or null if the property has no distinct name
179
- "address": {
180
- "line_1": "Mill Lane",
181
- "locality": "<Locality>",
182
- "...": "..."
183
- }
184
- ```
185
-
186
- When `property_name` is present, the brochure's cover hero uses it; the subtitle uses the address. When `property_name` is null, the cover hero uses `address.line_1`. Get this wrong at extract time and the brochure cover gets a street name where the property's actual name should be — a recurring failure mode this rule prevents.
187
-
188
- ### Material information from third-party reports — Sprift, Propalt, PropertyData
189
-
190
- Beyond the listing page itself, three UK data sources provide the deeper Material Information fields (tenure, title number, council tax £, broadband, mobile signal, flood risk, conservation, planning) that buyers need under DMCCA 2024:
191
-
192
- | Source | URL pattern | Best for |
193
- |---|---|---|
194
- | Sprift KFB report | `https://reports.sprift.com/property-report/<slug>/<id>` | Most fields, ready for human reading; needs Playwright to render (JS-loaded sections) |
195
- | Sprift API | `https://sprift.com/data-and-api` | Programmatic access to the same data |
196
- | Propalt API | `https://propalt.co.uk/product/api` | Material info bundle for compliance |
197
- | PropertyData API | `https://propertydata.co.uk/api/land-registry` | Title number, sold history, deed restrictions |
198
-
199
- If the user supplies a Sprift KFB URL, navigate it with Playwright (not `WebFetch` — sections are dynamically loaded), extract the published values, and record them in `property.json` under `material_info`:
200
-
201
- ```json
202
- "material_info": {
203
- "title_number": "EX23685",
204
- "uprn": "100091281531",
205
- "local_authority": "Uttlesford",
206
- "council_tax_annual": "£3,890",
207
- "broadband_fttp_mbps": 1800,
208
- "mobile_coverage": { "EE": "Average", "Vodafone": "Average", "O2": "Good", "Three": "Average" },
209
- "flood_risk_surface_water": "Low",
210
- "flood_risk_rivers_seas": "Very low",
211
- "conservation_area": false,
212
- "restrictive_covenants": false,
213
- "...": "..."
214
- }
215
- ```
216
-
217
- The brochure step reads `material_info` and populates page 11's three-column disclosure grid. Fields not present remain "TBC" — never invent.
218
-
219
- ### Video tours and back-page QR codes
220
-
221
- Estate-agent listings increasingly include a Giraffe360, Matterport, YouTube or Vimeo video tour. Record the URL in `property.json -> media.video_tours` (array). The brochure's back page shows two QR codes generated at brochure-assembly time:
222
-
223
- - QR 1: the video tour URL
224
- - QR 2: the listing URL itself
225
-
226
- `property-brochure` calls `qrencode -t PNG -s 12 -m 2 -l M -o images/qr-video.png "<url>"` for each. The extract step doesn't generate QRs (they may be regenerated if URLs change), but it does need to capture the video URLs accurately so the brochure can build them.
227
-
228
- ### `property.json`
229
-
230
- Machine-readable metadata. Required keys:
231
-
232
- ```json
233
- {
234
- "source": {
235
- "url": "<full listing URL>",
236
- "listing_id": "<numeric id>",
237
- "tenant_id": "<uuid from CDN paths>",
238
- "scraped_on": "<YYYY-MM-DD>"
239
- },
240
- "property_name": "<distinct name or null>",
241
- "address": {
242
- "line_1": "...",
243
- "locality": "...",
244
- "postcode": "...",
245
- "geo": {
246
- "latitude": 51.793472,
247
- "longitude": 0.637936,
248
- "source": "google_maps_iframe",
249
- "embed_url": "https://www.google.com/maps/embed/v1/place?key=...&q=51.793472,0.637936"
250
- }
251
- },
252
- "price": {
253
- "amount": <integer GBP>,
254
- "currency": "GBP",
255
- "qualifier": "Offers Over | Guide Price | Asking Price | POA"
256
- },
257
- "specifications": {
258
- "property_type": "Detached House | ...",
259
- "bedrooms": <int>,
260
- "bathrooms": <int>,
261
- "reception_rooms": <int>,
262
- "tenure": "Freehold | Leasehold | null",
263
- "epc_rating": "A | B | ... | TBC",
264
- "council_tax_band": "A | B | ... | H",
265
- "age": "<string, optional>"
266
- },
267
- "key_features": ["...", "..."],
268
- "agent": {
269
- "name": "...",
270
- "agency": "...",
271
- "phone": "...",
272
- "email": "..."
273
- },
274
- "media": {
275
- "video_tours": ["<url>", "..."],
276
- "image_count": <int>,
277
- "floorplan_count": <int>,
278
- "epc_document": "<filename in epc/ or null>",
279
- "map": "<filename in images/ or null>",
280
- "brochure": null
281
- }
282
- }
283
- ```
284
-
285
- Unknown values are `null`, not `""` and not omitted. The downstream brochure skill relies on `null` to recognise "we know we don't have this" vs. a missing key (= "this wasn't extracted, look again").
286
-
287
- `address.geo` and `media.map` follow the **extract or omit** rule documented under **Map — extract or omit**. `media.map` is populated when *any* map element on the listing was detected and screenshotted successfully (whatever provider — Google, Mapbox, Apple, custom, static-image). `address.geo` is populated only when coordinates were parseable from a recognised URL pattern; it can be `null` even when `media.map` is present (a div+canvas Mapbox map may yield a screenshot but no URL-embedded coords). Both are `null` when no map element was detected. Never synthesised from postcode geocoding or any other source.
288
-
289
- ### `description.md`
290
-
291
- Plain Markdown, no frontmatter. Structure:
292
-
293
- 1. H1: full address.
294
- 2. One-line summary: price, beds, baths, reception rooms, type, council tax, EPC.
295
- 3. Source line: linked listing URL.
296
- 4. Agent line: name, agency, phone, email.
297
- 5. H2 "Property Description" — verbatim paragraphs from the listing's description section. Preserve paragraph breaks. Do not paraphrase. Strip HTML entities (`&rsquo;` → `'`, `&amp;` → `&`).
298
- 6. H2 "Video tours" — bulleted list of every video URL on the page (YouTube, Vimeo, Giraffe360, Matterport, etc.).
299
- 7. H2 "EPC and council tax" — both values exactly as shown.
300
- 8. H2 "Folder layout" — one-line description of what's in each subfolder, with the actual counts.
301
-
302
- Capture rules:
303
-
304
- - **Verbatim** for the description body. The agent's wording is the source of truth for the brochure copy.
305
- - If the listing has no description text (rare), record `_No description provided on the listing._` and continue. Do not invent.
306
- - If the listing's marketing footer ("WOULD YOU LIKE TO VIEW", "CAN WE HELP YOU TOO") is intermingled with the property description, **keep the property paragraphs and drop the agency boilerplate** — the brochure has its own back-page CTA.
307
-
308
- ## Image preview safety
309
-
310
- **Do not `Read` any downloaded image whose longest edge exceeds 2000px** — it breaks the session by overrunning the multimodal encoding budget. Most DSLR (`DSC*`) and drone (`DJI_*`) photos from any premium listing are 6000–8000px and will trigger this. Measure with `sips -g pixelWidth -g pixelHeight <file>` before any `Read`, or skip the visual check entirely (filename, byte-size, and `sips` dimensions cover most "did the download work?" questions). See `make-brochure` for the full safety workflow including the `sips -Z 2000` downscale recipe.
311
-
312
- ## Process — high level
313
-
314
- The skill orchestrates four capabilities, each a **what** not a **how**:
315
-
316
- 1. **Probe.** Fetch the URL once with `WebFetch` to get a summarised view (price, address, agent, image count). This is a cheap sanity check — if the summary disagrees with what you extract from raw HTML, the page is JS-rendered and you need a headless browser.
317
- 2. **Extract — tiered.** Try the static-HTML path first because it's cheap: pull the raw HTML and grep every image-asset URL (Loop-CRM tenants use `b-cdn.net/propertyimages/...` and `b-cdn.net/floorplans/...`; other portals serve from their own hosts), deduplicate, grep PDF URLs containing `epc`, extract any visible description container. **If the static probe returns zero image URLs, or the probed summary in step 1 reports content the static HTML does not contain (EPC band, floorplan thumbnail, video URL), escalate to the Playwright fallback in step 4b** — that's the first-class path for portals and tabbed UIs, not a conditional one. (Map detection is provider-agnostic and happens in step 4 below — don't try to parse map markup at this static-HTML stage.)
318
- 3. **Stage.** Create the four-folder structure under `<output-dir>/<slug>-<listing-id>/`. Download images and floorplans in parallel (`xargs -n1 -P8 curl -O -L`) — there are routinely 40–60 images per listing and serial downloads are slow.
319
- 4. **Capture map** (conditional, provider-agnostic). Drive Playwright to the listing URL and apply the heuristic detector under **Map — extract or omit**: try iframe-by-provider, then class/id-by-keyword, then static-map images, then visual fallback. On the first hit, scroll into view, wait for tiles, screenshot the **element** (not the page), convert to `map.webp` at ~1500 px wide. If no heuristic finds a map, skip — **extract or omit**, no fallback synthesis.
320
- 4b. **Traverse tabbed UIs and JS-rendered portals (first-class for non-static hosts).** Modern listing pages from Loop CRM tenants, Rightmove, Zoopla, OnTheMarket and others render top-level data in tabs — *Details / Floorplan / EPC / Virtual Tour / Map View / Book Viewing* — and the static HTML returned by `WebFetch` or `curl` often does not include the inactive-tab content. Whenever step 2's static probe came up short, drive a Playwright session against the listing URL and walk the tab list: detect elements with `role="tablist"`, `role="tab"`, or class/id substrings `tab` containing the keywords `EPC`, `Floor plan`, `Map`, `Virtual tour`, `Brochure`. For each tab found, `page.click(<selector>)`, `page.waitForLoadState('networkidle')`, then harvest the panel content. For the EPC tab specifically: scrape the certificate PDF/PNG link and the displayed current/potential scores into `specifications.epc_rating`, `specifications.epc_current_score`, `specifications.epc_potential_score`. For other tabs: extract what each contract field needs and skip the rest. The traversal is principled — never hard-code a single agency's or portal's tab markup as the sole detector; the same listing surface ships with different tab implementations across CMS tenants and portal layouts.
321
- 5. **Assemble.** Write `property.json` and `description.md`. Run a final consistency pass: image count in JSON matches files on disk, EPC rating in JSON matches the description.md line, agent contact in JSON matches the description.md header. `media.map` is populated iff a map screenshot landed on disk; `address.geo` is populated iff coordinates were parseable from a recognised URL pattern (and may legitimately be `null` even when `media.map` is set — see the schema notes).
322
-
323
- The skill does not prescribe which HTTP tool to use. `curl` is fine for static-HTML hosts (most Loop-CRM tenants serve listing data inline); switch to Chrome DevTools MCP or Playwright for JS-rendered listing pages and portals — the contract on the output is unchanged.
324
-
325
- ## Reference standard
326
-
327
- The format contract is defined by `property.json` (schema above) and `description.md` (structure above). If the caller has a prior conforming property pack on disk (under any `<brand_dir>/properties/<slug>-<id>/`), read its `property.json` and `description.md` to anchor the format. A delivered package that diverges substantially in shape from those is wrong, even if the content is accurate.
328
-
329
- ## Common mistakes
330
-
331
- | Mistake | Why it's wrong |
332
- |---|---|
333
- | Using only the `WebFetch` summary | The summary lists "49 images" but does not return individual URLs. You must grep the raw HTML for filenames. |
334
- | Stripping AI-generated renders from `images/` | They are part of the listing's marketing set. The brochure skill chooses which to use; the extractor's job is fidelity. |
335
- | Renaming files to a `<slug>-NN.jpg` scheme on extraction | That's `property-brochure`'s job at the brochure-assembly step. Keep originals so the brochure skill can match by prefix and timestamp. |
336
- | Inventing values for unknown specifications | `null` means "not on the listing". A guess at tenure or EPC introduces silent error into downstream Material Information compliance. |
337
- | Including the agency's marketing boilerplate ("WOULD YOU LIKE TO VIEW", "CAN WE HELP YOU TOO") in `description.md` | The brochure has its own back page. Including it would duplicate text the brand designer is already authoring. |
338
- | Skipping `floorplans/` because the listing only has one | One floorplan still goes in `floorplans/`, not `images/`. The folder layout is a contract — `property-brochure` looks for floorplans in exactly one place. |
339
- | Saving `/tmp/listing_raw.html` or other working files inside the output directory | The directory is the deliverable. Working files get cleaned up. |
340
- | Hardcoding the tenant UUID | On Loop-CRM tenants the UUID identifies the agency; different offices have different tenant IDs. Extract it from the actual URLs on the page rather than assuming a single value. |
341
- | Treating "EPC: TBC" as a missing field | "TBC" is information — the agent is telling you the assessment hasn't been done. Record it verbatim. |
342
- | Recording "EPC: TBC" when the listing's EPC tab actually shows a band but the static HTML did not | Modern listings tab-hide data behind a JS tab switcher; `WebFetch` / `curl` see only the active tab. If the listing visibly carries EPC content the static HTML lacks, drive Playwright per step 4b and harvest from the tab panel. "TBC" recorded from a missed-tab extract is a silent data-loss defect, not a faithful record. |
343
- | Synthesizing a map when the listing has none | The rule is **extract or omit**. Postcode-centroid renders, OSM static maps, and AI-generated map artwork are all forbidden. If the heuristic detector returns nothing, write `media.map: null` and move on. |
344
- | Hard-coding a single CMS's map markup (`section__property--map`, `<iframe src="google.com/maps">`) as the only detector | Each agent embeds maps differently — Loop CRM uses Google iframes, custom builds use Mapbox-GL canvases, others use static-map `<img>` tags. The detection order is heuristic and provider-agnostic by design. Hard-coding one breaks every other listing. |
345
- | Trying to render a map provider's tiles ourselves with our own API key | The screenshot approach captures whatever the agency already pays for, with their attribution. Spinning up our own Mapbox/Google account introduces a billing relationship the user didn't ask for, and risks brand-mismatch with what the agency publishes. Screenshot the element; don't reach for an API. |
346
-
347
- ## Completion criteria
348
-
349
- Report `DONE` only after:
350
-
351
- - The directory `<slug>-<listing-id>/` exists with the three subfolders `images/`, `floorplans/`, `epc/` — and **no** pre-created `brochure/` (that's a legacy layout artefact; `property-brochure` writes to `<property_dir>/output/` directly).
352
- - `property.json` and `description.md` are at the directory root.
353
- - `images/` count matches `media.image_count` in `property.json`.
354
- - `floorplans/` count matches `media.floorplan_count` in `property.json`.
355
- - `epc/` is either empty (with rating "TBC" or only-rating-shown) or contains a downloaded certificate referenced by `media.epc_document`.
356
- - `images/map.webp` exists **only if** the listing supplied a Google Maps iframe and the screenshot succeeded — `media.map` and `address.geo` agree (both populated or both `null`); no synthesised fallbacks.
357
- - No `/tmp` files, no `.html` dumps, no `urls.txt` left behind.
358
- - The source URL appears in `property.json.source.url` and on the source line of `description.md`.
359
-
360
- If any of those are not true, report `DONE_WITH_CONCERNS` and list each gap.
361
-
362
- ## When NOT to use this skill
363
-
364
- - The user wants a brochure produced from photos they already have on disk → skip extraction, go straight to `property-brochure`.
365
- - The user wants a quick price/specs lookup, not the full asset bundle → use `WebFetch` directly. The folder structure is overkill.
366
- - The user wants market data, comparables, or transaction history → that's a different research task; this skill is asset staging, not analysis.
@@ -1,100 +0,0 @@
1
- ---
2
- name: property-market-report
3
- description: Use when a user asks for an A4 print-ready property market report for a specific area, branded with an estate agent's design tokens and logos, illustrated by up to 10 property listings that hyperlink back to their source URLs. Triggers include "create a market report for <area>", "market data sheet for <postcode>", "Bishop's Stortford / CM23 / Sawbridgeworth report", or any request that names market metrics for an area and a set of property URLs to feature.
4
- ---
5
-
6
- # Property Market Report
7
-
8
- A 4-page A4 PDF: cover (full-bleed hero with light logo), market summary + headline KPIs, activity + property-type distribution + at-a-glance table, then a featured-listings grid where every tile hyperlinks to its source URL.
9
-
10
- ## Typography is fixed; only colours and logos come from the agent
11
-
12
- The report has its own typographic identity — a luxury serif stack pinned in the template:
13
-
14
- - **Display** — Cormorant Garamond (italic for headlines, KPI values, prices, addresses)
15
- - **Body** — Lora
16
- - **Sans / labels** — Inter (eyebrows, KPI labels, chips, footer meta)
17
-
18
- **Never substitute the agent's body or display fonts**, even if their `DESIGN.md` specifies different families. The market report intentionally reads as an editorial / luxury document across every brand it renders for; the agent's identity comes through the **palette and logo only**. If a brand insists on its own typography, that's a different deliverable — likely a brochure, not a market report.
19
-
20
- ## Inputs (never invented)
21
-
22
- - **`design_tokens_path`** — path to a `DESIGN.md` that tokenises the agent's brand. Resolve it from `brand_source` at runtime: when `brand_source` is a URL, the path is `<brand_dir>/DESIGN.md` for whatever brand directory the orchestrator created (or already had on disk); when `brand_source` is a directory path, the file is at `<brand_source>/DESIGN.md`. Read the canonical hex values directly; never substitute "close" colours. **Only colour tokens are consumed** — the report imports `primary` (e.g. teal-900), `primary_dark`, `accent` (e.g. gold-500), `paper`, `paper_banded`, and `rule`. Any typography, spacing, or radius tokens in the agent's DESIGN.md are *ignored by design*.
23
- - **`logo_light_path`** / **`logo_dark_path`** — PNG/SVG. Light = white-on-dark version (for the teal-toned cover); dark = full-colour version (for body-page headers). When supplied, the renderer emits an `<img>` for the logo; when omitted, it falls back to a Cormorant-Garamond text wordmark using `brand.name` + `brand.tagline`. The text-wordmark fallback is acceptable for brands whose logo is essentially a serif-typeset name; for richer marks, supply the files.
24
- - **`property_urls`** — list of up to 10 source URLs from any UK estate-agent or portal site (Loop-CRM tenants, Rightmove, Zoopla, OnTheMarket, etc.). Each must resolve to a single property listing page. Reject more than 10; the layout breaks at >10 cards.
25
- - **`market_data`** — flat dict of numbers (average asking, average sold, £/sqft, YoY growth, demand rating, days-on-market, property-type distribution, sample size, period). Source from a market intelligence API (PropertyData / Land Registry / ONS) or paste from an existing report. **The period is the *generated* date, not whatever appears in the URL slug** — the Market Trak `oct-2025` slug describes a snapshot from May 2026 (Oct 2025 was the trailing window). Use the report-page's stated `Generated` value.
26
-
27
- ## How the skill renders
28
-
29
- `references/template.html` is the single source of truth for the layout. It carries `<!-- REPLACE: <slot> -->` comments — never edit the structure directly; edit the template once, the slot names stay stable.
30
-
31
- `references/render.py` consumes three plain-Python inputs (brand · market · properties), substitutes them into the template, then drives Chrome headless to produce the PDF and zips the HTML+images bundle. Run it with `python3 render.py inputs.json` where `inputs.json` carries:
32
-
33
- ```json
34
- { "out_dir": "...", "filename_stem": "...",
35
- "brand": { "name", "tagline", "primary", "primary_dark", "accent",
36
- "paper", "paper_banded", "rule" },
37
- "market": { "location_name", "location_code", "period", "cover_title",
38
- "cover_hero", "page2_photo",
39
- "summary_headline", "summary_paragraphs",
40
- "avg_asking", "avg_sold", "psf", "yoy_growth",
41
- "demand_rating", "demand_gauge_position",
42
- "price_growth_note", "demand_note",
43
- "for_sale", "sales_per_month", "turnover_pct", "dom",
44
- "n_props", "type_dist" },
45
- "properties": [{ "url", "slug", "address", "price_kind", "price",
46
- "beds", "baths", "type" }, ...] /* ≤ 10 */
47
- }
48
- ```
49
-
50
- If any `<!-- REPLACE: ... -->` slot is left unfilled after substitution the renderer raises — a contract gap, not a silent default.
51
-
52
- ## Outcome contract
53
-
54
- Every report ships these artefacts in a single output directory:
55
-
56
- - `index.html` — single self-contained file, no build step, opens directly. Webfonts loaded from Google Fonts.
57
- - `<area>-<period>.pdf` — 4–5 page A4 PDF rendered via Chrome headless `--print-to-pdf`. 4 pages when there are ≤ 5 listings, 5 pages when 6–10 listings (the listings split across pages 4 and 5). Anything beyond 5 pages means content is overflowing — tighten KPI tile padding or listing card aspect ratio until it fits.
58
- - `<area>-<period>-web.zip` — packaged bundle containing `index.html` + `img/`, ready to drop into a static-site host. Self-contained except for the Google Fonts CSS link, which is fetched at view time.
59
- - `img/<NN>-<slug>.jpg` — one image per property, 0-padded index, slug from the source URL. Produced by the **property-socials** skill in landscape format (1200×628) where possible; each report-page card uses this branded tile, not the raw hero. If a property has no local brochure scaffold, run `real-estate-brochure:property-extract` → `real-estate-brochure:property-brochure` → `property-socials` first; the report consumes the resulting `og-landscape-main.jpg`.
60
-
61
- ## Visual contract
62
-
63
- The design tokens carry the contract. Two rules survive any token re-skin:
64
-
65
- 1. **Cover** — full-bleed property hero behind a vertical gradient scrim (top ~55% opacity → bottom ~95% opacity in the surface-deep colour). Light logo top-left, area name in display-italic, tagline in accent colour, four-up meta strip across the foot (Report · Location · Period · Status).
66
- 2. **Listing tiles** — every property card is a hyperlinked `<a>` wrapping a tile that pairs the property-socials landscape image with: address (display italic, 14–16pt), price (display italic, 14–16pt), spec chips (sans, pill-shaped). The `<a>` opens the source URL in a new tab. Tile borders use the rule colour from the design tokens, not arbitrary greys.
67
-
68
- ## Pagination contract
69
-
70
- A4 portrait, 210×297 mm, 16 mm horizontal padding, 18 mm vertical. Each `<section class="page">` is `height:297mm; overflow:hidden; page-break-after:always`. If Chrome's `mdls -name kMDItemNumberOfPages` returns >4, content is overflowing — diagnose with `pdftoppm -png -f <n> -l <n>` to see which page bleeds, then trim that page only (smaller KPI padding, tighter photo-strip aspect ratio, fewer listing cards per page). Never reach for `min-height` to "let it grow" — the printed deliverable is the deliverable.
71
-
72
- ## Listings page layout
73
-
74
- Up to 10 properties fit on **two body pages** of the report (page 4 and an optional page 5 if >5 listings):
75
-
76
- - ≤ 5 listings → one page, cards stacked at 70mm photo column × 5/3 aspect (~42mm tall photo).
77
- - 6–10 listings → two pages, 5 per page, same dimensions.
78
- - Each card: `<a href="<source_url>" target="_blank" rel="noopener">` wraps the whole card. Tile photo on the left, meta on the right (address · locality · price · chip row). Hover state is irrelevant for print but should still feel clickable in the HTML preview (subtle teal-tint background-shift, no underline on the address).
79
-
80
- ## Source attribution
81
-
82
- The disclaimer block on the final page must name:
83
-
84
- - All market-data sources (Land Registry, ONS, PropertyData, Rightmove, Zoopla, local agents) by name.
85
- - Image attribution: `Property imagery: <agent>.co.uk via property-socials`.
86
- - A short "Accuracy" line and a short "Investment" line — see the existing `bishops-stortford-*` reports for canonical wording.
87
-
88
- ## Failure modes seen
89
-
90
- - **Logo invisible in preview.** The IDE preview panel can't always resolve relative `img/` paths or large base64 data URIs. The deliverable PDF is the source of truth; viewing the HTML in a real browser (or via `python3 -m http.server`) is the second source of truth. Don't burn iterations chasing preview-panel artefacts.
91
- - **Date drift from URL slug.** A Market Trak URL like `…-oct-2025?…` does not mean the report is October 2025. Always trust the `Generated:` field on the source page.
92
- - **Page 3 / page 4 overflow.** The default Cormorant Garamond + Lora stack is slightly taller-set than a sans default. KPI tile padding and panel padding need to come down (~5 mm not 7 mm) for serif typography to fit alongside the photo strip on page 3 and two listing cards on page 4.
93
- - **Property-socials skipped.** A report that drops the raw listing-CDN image straight into a tile (whether `loop-app.b-cdn.net/propertyimages/...jpg`, `media.rightmove.co.uk/...`, or any other host) breaks the brand contract — the tiles have no overlay, no scrim, no address copy. Always run the OG pipeline; if it can't run, surface the gap, don't substitute.
94
- - **Anchor links dead in PDF.** Chrome `--print-to-pdf` preserves `<a href>` as live PDF annotations. Verify by opening the PDF in Preview and clicking a listing — if the link is dead, the HTML wrapped a `<div>` instead of an `<a>`.
95
-
96
- ## Out of scope
97
-
98
- - The market-data fetch itself (owned by whichever PropertyData / Land Registry adapter the operator uses).
99
- - The property-extract / property-brochure / property-socials pipeline (owned by those skills).
100
- - HTML emails / web embeds of the report. The deliverable is A4 PDF + the self-contained HTML preview.