@rubytech/create-realagent-code 0.1.24 → 0.1.27

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 (577) hide show
  1. package/dist/index.js +81 -17
  2. package/package.json +1 -1
  3. package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -90
  4. package/payload/platform/plugins/admin/PLUGIN.md +46 -23
  5. package/payload/platform/plugins/admin/skills/onboarding/SKILL.md +111 -126
  6. package/payload/platform/plugins/brochures/.claude-plugin/plugin.json +8 -0
  7. package/payload/platform/plugins/brochures/PLUGIN.md +36 -0
  8. package/payload/platform/plugins/brochures/commands/make-brochure.md +11 -0
  9. package/payload/platform/plugins/brochures/skills/a4-print-documents/SKILL.md +478 -0
  10. package/payload/platform/plugins/brochures/skills/brand-design/SKILL.md +192 -0
  11. package/payload/platform/plugins/brochures/skills/make-brochure/SKILL.md +354 -0
  12. package/payload/platform/plugins/brochures/skills/make-brochure/references/seller-brief-template.md +115 -0
  13. package/payload/platform/plugins/brochures/skills/property-brochure/SKILL.md +119 -0
  14. package/payload/platform/plugins/brochures/skills/property-brochure/references/build.md +270 -0
  15. package/payload/platform/plugins/brochures/skills/property-brochure/references/copy.md +211 -0
  16. package/payload/platform/plugins/brochures/skills/property-brochure/references/images.md +166 -0
  17. package/payload/platform/plugins/brochures/skills/property-brochure/references/index-landing.md +376 -0
  18. package/payload/platform/plugins/brochures/skills/property-brochure/references/index.html +1288 -0
  19. package/payload/platform/plugins/brochures/skills/property-brochure/references/placeholders.md +250 -0
  20. package/payload/platform/plugins/brochures/skills/property-brochure/references/registers.md +47 -0
  21. package/payload/platform/plugins/brochures/skills/property-brochure/references/seller-brief.md +56 -0
  22. package/payload/platform/plugins/brochures/skills/property-brochure/references/structure.md +249 -0
  23. package/payload/platform/plugins/brochures/skills/property-brochure/references/template.html +2370 -0
  24. package/payload/platform/plugins/brochures/skills/property-extract/SKILL.md +372 -0
  25. package/payload/platform/plugins/buyers/.claude-plugin/plugin.json +8 -0
  26. package/payload/platform/plugins/buyers/PLUGIN.md +35 -0
  27. package/payload/platform/plugins/buyers/skills/buyer-feedback/SKILL.md +109 -0
  28. package/payload/platform/plugins/buyers/skills/buyer-management/SKILL.md +42 -0
  29. package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-qualification-questions.md +16 -0
  30. package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-qualification.md +59 -0
  31. package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-scripts.md +63 -0
  32. package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-working-scripts.md +54 -0
  33. package/payload/platform/plugins/buyers/skills/buyer-management/references/feedback-collection.md +42 -0
  34. package/payload/platform/plugins/buyers/skills/buyer-management/references/offer-capture.md +38 -0
  35. package/payload/platform/plugins/buyers/skills/buyer-management/references/viewing-booking.md +32 -0
  36. package/payload/platform/plugins/buyers/skills/buyer-management/references/viewing-management.md +52 -0
  37. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/SKILL.md +407 -0
  38. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/care-fees-guide.md +68 -0
  39. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/divorce-sales-guide.md +61 -0
  40. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/downsizing-guide.md +45 -0
  41. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/first-time-buyers.md +92 -0
  42. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/first-time-sellers.md +78 -0
  43. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/probate-guide.md +53 -0
  44. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/upsizing-guide.md +41 -0
  45. package/payload/platform/plugins/buyers/skills/property-enquiry/SKILL.md +126 -0
  46. package/payload/platform/plugins/buyers/skills/viewing-management/SKILL.md +111 -0
  47. package/payload/platform/plugins/cloudflare/references/dashboard-guide.md +37 -0
  48. package/payload/platform/plugins/cloudflare/references/manual-setup.md +81 -1
  49. package/payload/platform/plugins/cloudflare/scripts/__tests__/tunnel-ingress.test.ts +241 -0
  50. package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +267 -28
  51. package/payload/platform/plugins/cloudflare/scripts/tunnel-ingress.ts +291 -0
  52. package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +42 -0
  53. package/payload/platform/plugins/contacts/PLUGIN.md +18 -9
  54. package/payload/platform/plugins/docs/references/platform.md +2 -0
  55. package/payload/platform/plugins/docs/references/troubleshooting.md +12 -0
  56. package/payload/platform/plugins/email/PLUGIN.md +18 -9
  57. package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.d.ts +17 -0
  58. package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.d.ts.map +1 -0
  59. package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js +185 -0
  60. package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js.map +1 -0
  61. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +34 -111
  62. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -1
  63. package/payload/platform/plugins/estate-business/.claude-plugin/plugin.json +8 -0
  64. package/payload/platform/plugins/estate-business/PLUGIN.md +65 -0
  65. package/payload/platform/plugins/estate-business/skills/business-growth/SKILL.md +133 -0
  66. package/payload/platform/plugins/estate-business/skills/business-growth/references/buy-back-your-time.md +37 -0
  67. package/payload/platform/plugins/estate-business/skills/business-growth/references/firewave-gost-scorecards.md +14 -0
  68. package/payload/platform/plugins/estate-business/skills/business-growth/references/keller-org-model.md +17 -0
  69. package/payload/platform/plugins/estate-business/skills/business-growth/references/lencioni-team-models.md +22 -0
  70. package/payload/platform/plugins/estate-business/skills/business-growth/references/listing-management-system.md +11 -0
  71. package/payload/platform/plugins/estate-business/skills/business-growth/references/net-figure-form.md +11 -0
  72. package/payload/platform/plugins/estate-business/skills/business-growth/references/serhant-bizinbox-notes.md +13 -0
  73. package/payload/platform/plugins/estate-business/skills/business-growth/references/team-roles-commission.md +14 -0
  74. package/payload/platform/plugins/estate-business/skills/business-growth/references/va-2026-ops.md +43 -0
  75. package/payload/platform/plugins/estate-business/skills/business-growth/references/wingman-structure.md +13 -0
  76. package/payload/platform/plugins/estate-business/skills/business-operations/SKILL.md +32 -0
  77. package/payload/platform/plugins/estate-business/skills/business-operations/references/crm-systems.md +57 -0
  78. package/payload/platform/plugins/estate-business/skills/business-operations/references/hiring-guide.md +59 -0
  79. package/payload/platform/plugins/estate-business/skills/business-operations/references/impact-framework.md +47 -0
  80. package/payload/platform/plugins/estate-business/skills/business-operations/references/minutes-equal-money.md +55 -0
  81. package/payload/platform/plugins/estate-business/skills/business-operations/references/team-management.md +48 -0
  82. package/payload/platform/plugins/estate-business/skills/commission-calculator/SKILL.md +40 -0
  83. package/payload/platform/plugins/estate-business/skills/exp-partnership/SKILL.md +52 -0
  84. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/12-reasons.md +39 -0
  85. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/95-5-system.md +66 -0
  86. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/agent-attraction-scripts.md +90 -0
  87. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/business-partnership.md +92 -0
  88. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/exp-model-overview.md +66 -0
  89. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/model-comparison.md +66 -0
  90. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/revenue-share-explained.md +57 -0
  91. package/payload/platform/plugins/estate-business/skills/month-end-close/SKILL.md +69 -0
  92. package/payload/platform/plugins/estate-business/skills/payment-batch-stager/SKILL.md +42 -0
  93. package/payload/platform/plugins/estate-business/skills/period-reconciler/SKILL.md +42 -0
  94. package/payload/platform/plugins/estate-business/skills/personal-branding/SKILL.md +117 -0
  95. package/payload/platform/plugins/estate-business/skills/personal-branding/references/attraction-agent-notes.md +31 -0
  96. package/payload/platform/plugins/estate-business/skills/personal-branding/references/attraction-agent.md +58 -0
  97. package/payload/platform/plugins/estate-business/skills/personal-branding/references/authenticity-boundaries.md +28 -0
  98. package/payload/platform/plugins/estate-business/skills/personal-branding/references/become-a-brand-leader-notes.md +19 -0
  99. package/payload/platform/plugins/estate-business/skills/personal-branding/references/blast-formula.md +42 -0
  100. package/payload/platform/plugins/estate-business/skills/personal-branding/references/brand-leader.md +48 -0
  101. package/payload/platform/plugins/estate-business/skills/personal-branding/references/brand-strategy-system.md +59 -0
  102. package/payload/platform/plugins/estate-business/skills/personal-branding/references/content-engine.md +49 -0
  103. package/payload/platform/plugins/estate-business/skills/personal-branding/references/firewave-blast-and-blogging.md +23 -0
  104. package/payload/platform/plugins/estate-business/skills/personal-branding/references/gary-v-content.md +52 -0
  105. package/payload/platform/plugins/estate-business/skills/personal-branding/references/gary-v-principles.md +20 -0
  106. package/payload/platform/plugins/estate-business/skills/personal-branding/references/oversubscribed-positioning.md +18 -0
  107. package/payload/platform/plugins/estate-business/skills/personal-branding/references/platforms.md +41 -0
  108. package/payload/platform/plugins/estate-business/skills/personal-branding/references/priestley-oversubscribed.md +54 -0
  109. package/payload/platform/plugins/estate-business/skills/personal-branding/references/storeys-style-examples.md +25 -0
  110. package/payload/platform/plugins/estate-business/skills/personal-branding/references/visual-identity.md +27 -0
  111. package/payload/platform/plugins/estate-coaching/.claude-plugin/plugin.json +8 -0
  112. package/payload/platform/plugins/estate-coaching/PLUGIN.md +55 -0
  113. package/payload/platform/plugins/estate-coaching/skills/agent-performance/SKILL.md +371 -0
  114. package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/atomic-habits.md +52 -0
  115. package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/daily-routine-scorecard.md +104 -0
  116. package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/hp6-model.md +63 -0
  117. package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/twelve-week-year.md +71 -0
  118. package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/SKILL.md +36 -0
  119. package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/coaching-boundaries.md +56 -0
  120. package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/feedback-framework.md +61 -0
  121. package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/performance-framework.md +109 -0
  122. package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/SKILL.md +421 -0
  123. package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/coaching-exercises.md +86 -0
  124. package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/goal-setting.md +78 -0
  125. package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/one-to-one-framework.md +92 -0
  126. package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/soi-workbook.md +103 -0
  127. package/payload/platform/plugins/estate-coaching/skills/serhant-training/SKILL.md +410 -0
  128. package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/agent-training-guide.md +70 -0
  129. package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/business-in-a-box.md +72 -0
  130. package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/buyers-guide.md +53 -0
  131. package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/codo-method.md +72 -0
  132. package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/website-planning-guide.md +79 -0
  133. package/payload/platform/plugins/estate-onboarding/.claude-plugin/plugin.json +8 -0
  134. package/payload/platform/plugins/estate-onboarding/PLUGIN.md +31 -0
  135. package/payload/platform/plugins/estate-onboarding/skills/bootstrap/SKILL.md +26 -0
  136. package/payload/platform/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +63 -0
  137. package/payload/platform/plugins/estate-sales/.claude-plugin/plugin.json +8 -0
  138. package/payload/platform/plugins/estate-sales/PLUGIN.md +53 -0
  139. package/payload/platform/plugins/estate-sales/skills/chase-progression/SKILL.md +107 -0
  140. package/payload/platform/plugins/estate-sales/skills/negotiation/SKILL.md +35 -0
  141. package/payload/platform/plugins/estate-sales/skills/negotiation/references/deal-saving.md +47 -0
  142. package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-deep-guide.md +64 -0
  143. package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-prep-principles.md +29 -0
  144. package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-techniques.md +42 -0
  145. package/payload/platform/plugins/estate-sales/skills/negotiation/references/offer-presentation.md +43 -0
  146. package/payload/platform/plugins/estate-sales/skills/risk-scorer/SKILL.md +42 -0
  147. package/payload/platform/plugins/estate-sales/skills/sales-closer/SKILL.md +24 -0
  148. package/payload/platform/plugins/estate-sales/skills/sales-closer/references/serhant-emotion-stages.md +36 -0
  149. package/payload/platform/plugins/estate-sales/skills/sales-discovery/SKILL.md +30 -0
  150. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/chris-voss-discovery.md +88 -0
  151. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/firewave-gost-journey.md +68 -0
  152. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/phil-jones-openers.md +78 -0
  153. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/pre-listing-checklist.md +77 -0
  154. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/serhant-improv.md +22 -0
  155. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/tom-ferry-discovery.md +103 -0
  156. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/vendor-motivation-competitor.md +52 -0
  157. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/SKILL.md +29 -0
  158. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/chris-voss-negotiation.md +70 -0
  159. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/phil-jones-price-words.md +40 -0
  160. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/serhant-negotiation-plus.md +55 -0
  161. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/tom-panos-commission-pricing.md +57 -0
  162. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/tony-morris-questioning.md +54 -0
  163. package/payload/platform/plugins/estate-sales/skills/sales-progression/SKILL.md +27 -0
  164. package/payload/platform/plugins/estate-sales/skills/sales-progression/references/conveyancing-guide.md +54 -0
  165. package/payload/platform/plugins/estate-sales/skills/sales-progression/references/transaction-tracking.md +66 -0
  166. package/payload/platform/plugins/estate-teaching/.claude-plugin/plugin.json +8 -0
  167. package/payload/platform/plugins/estate-teaching/PLUGIN.md +31 -0
  168. package/payload/platform/plugins/estate-teaching/skills/content-directory/SKILL.md +39 -0
  169. package/payload/platform/plugins/estate-teaching/skills/content-directory/references/module-delivery.md +65 -0
  170. package/payload/platform/plugins/estate-teaching/skills/content-directory/references/progress-tracking.md +47 -0
  171. package/payload/platform/plugins/leads/.claude-plugin/plugin.json +8 -0
  172. package/payload/platform/plugins/leads/PLUGIN.md +62 -0
  173. package/payload/platform/plugins/leads/skills/chain-progression-tracker/SKILL.md +51 -0
  174. package/payload/platform/plugins/leads/skills/diary-builder/SKILL.md +38 -0
  175. package/payload/platform/plugins/leads/skills/enquiry-triage/SKILL.md +36 -0
  176. package/payload/platform/plugins/leads/skills/lead-nurturing/SKILL.md +137 -0
  177. package/payload/platform/plugins/leads/skills/lead-nurturing/references/buyer-search-letter.md +28 -0
  178. package/payload/platform/plugins/leads/skills/lead-nurturing/references/buyer-search-letters.md +37 -0
  179. package/payload/platform/plugins/leads/skills/lead-nurturing/references/database-reactivation.md +30 -0
  180. package/payload/platform/plugins/leads/skills/lead-nurturing/references/email-nurture-sequences.md +45 -0
  181. package/payload/platform/plugins/leads/skills/lead-nurturing/references/facebook-referrals.md +30 -0
  182. package/payload/platform/plugins/leads/skills/lead-nurturing/references/firewave-email-nurture-sequences.md +41 -0
  183. package/payload/platform/plugins/leads/skills/lead-nurturing/references/keller-33-touch.md +34 -0
  184. package/payload/platform/plugins/leads/skills/lead-nurturing/references/neighbour-letters.md +31 -0
  185. package/payload/platform/plugins/leads/skills/lead-nurturing/references/neighbour-notification-letter.md +20 -0
  186. package/payload/platform/plugins/leads/skills/lead-nurturing/references/ofi-follow-up-dialogue.md +22 -0
  187. package/payload/platform/plugins/leads/skills/lead-nurturing/references/ofi-follow-up.md +26 -0
  188. package/payload/platform/plugins/leads/skills/lead-nurturing/references/serhant-three-fs-plus.md +21 -0
  189. package/payload/platform/plugins/leads/skills/lead-nurturing/references/sharran-10x10x10.md +18 -0
  190. package/payload/platform/plugins/leads/skills/lead-nurturing/references/sms-templates.md +40 -0
  191. package/payload/platform/plugins/leads/skills/lead-nurturing/references/sphere-of-influence-notes.md +34 -0
  192. package/payload/platform/plugins/leads/skills/lead-nurturing/references/sphere-of-influence.md +60 -0
  193. package/payload/platform/plugins/leads/skills/lead-nurturing/references/tom-panos-sms-templates.md +59 -0
  194. package/payload/platform/plugins/leads/skills/morning-round/SKILL.md +72 -0
  195. package/payload/platform/plugins/leads/skills/prospecting/SKILL.md +33 -0
  196. package/payload/platform/plugins/leads/skills/prospecting/references/database-matching.md +30 -0
  197. package/payload/platform/plugins/leads/skills/prospecting/references/database-value.md +53 -0
  198. package/payload/platform/plugins/leads/skills/prospecting/references/prospecting-dialogues.md +24 -0
  199. package/payload/platform/plugins/leads/skills/prospecting/references/reactivation.md +34 -0
  200. package/payload/platform/plugins/listings/.claude-plugin/plugin.json +8 -0
  201. package/payload/platform/plugins/listings/PLUGIN.md +103 -0
  202. package/payload/platform/plugins/listings/skills/comparable-finder/SKILL.md +52 -0
  203. package/payload/platform/plugins/listings/skills/epc-checker/SKILL.md +38 -0
  204. package/payload/platform/plugins/listings/skills/home-preparation/SKILL.md +28 -0
  205. package/payload/platform/plugins/listings/skills/home-preparation/references/kerb-appeal.md +38 -0
  206. package/payload/platform/plugins/listings/skills/home-preparation/references/photo-day.md +59 -0
  207. package/payload/platform/plugins/listings/skills/home-preparation/references/situational-tips.md +50 -0
  208. package/payload/platform/plugins/listings/skills/home-preparation/references/staging-guide.md +52 -0
  209. package/payload/platform/plugins/listings/skills/listing-copy-writer/SKILL.md +55 -0
  210. package/payload/platform/plugins/listings/skills/listing-presentation/SKILL.md +286 -0
  211. package/payload/platform/plugins/listings/skills/listing-presentation/references/booking-script.md +51 -0
  212. package/payload/platform/plugins/listings/skills/listing-presentation/references/objection-scripts.md +193 -0
  213. package/payload/platform/plugins/listings/skills/listing-presentation/references/penhaul-presentation.md +123 -0
  214. package/payload/platform/plugins/listings/skills/listing-presentation/references/pre-listing-kit.md +139 -0
  215. package/payload/platform/plugins/listings/skills/listing-presentation/references/set-to-sell.md +55 -0
  216. package/payload/platform/plugins/listings/skills/listing-presentation/references/sharran-frameworks.md +107 -0
  217. package/payload/platform/plugins/listings/skills/local-market-stats/SKILL.md +33 -0
  218. package/payload/platform/plugins/listings/skills/new-instruction/SKILL.md +78 -0
  219. package/payload/platform/plugins/listings/skills/particulars-builder/SKILL.md +48 -0
  220. package/payload/platform/plugins/listings/skills/portal-launch-scheduler/SKILL.md +49 -0
  221. package/payload/platform/plugins/listings/skills/pricing-scenario-builder/SKILL.md +35 -0
  222. package/payload/platform/plugins/listings/skills/property-marketing/SKILL.md +337 -0
  223. package/payload/platform/plugins/listings/skills/property-marketing/references/auction-report-template.md +41 -0
  224. package/payload/platform/plugins/listings/skills/property-marketing/references/coming-soon-campaign.md +43 -0
  225. package/payload/platform/plugins/listings/skills/property-marketing/references/direct-mail-templates.md +121 -0
  226. package/payload/platform/plugins/listings/skills/property-marketing/references/eoi-form-template.md +62 -0
  227. package/payload/platform/plugins/listings/skills/property-marketing/references/monthly-scorecard.md +63 -0
  228. package/payload/platform/plugins/listings/skills/supplier-booker/SKILL.md +39 -0
  229. package/payload/platform/plugins/listings/skills/talk-track-composer/SKILL.md +36 -0
  230. package/payload/platform/plugins/listings/skills/terms-of-business-drafter/SKILL.md +54 -0
  231. package/payload/platform/plugins/listings/skills/valuation-prep/SKILL.md +69 -0
  232. package/payload/platform/plugins/loop/.claude-plugin/plugin.json +17 -0
  233. package/payload/platform/plugins/loop/PLUGIN.md +108 -0
  234. package/payload/platform/plugins/loop/mcp/dist/index.d.ts +2 -0
  235. package/payload/platform/plugins/loop/mcp/dist/index.d.ts.map +1 -0
  236. package/payload/platform/plugins/loop/mcp/dist/index.js +293 -0
  237. package/payload/platform/plugins/loop/mcp/dist/index.js.map +1 -0
  238. package/payload/platform/plugins/loop/mcp/dist/lib/crypto.d.ts +10 -0
  239. package/payload/platform/plugins/loop/mcp/dist/lib/crypto.d.ts.map +1 -0
  240. package/payload/platform/plugins/loop/mcp/dist/lib/crypto.js +88 -0
  241. package/payload/platform/plugins/loop/mcp/dist/lib/crypto.js.map +1 -0
  242. package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.d.ts +82 -0
  243. package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +1 -0
  244. package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.js +427 -0
  245. package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.js.map +1 -0
  246. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.d.ts +5 -0
  247. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +1 -0
  248. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js +40 -0
  249. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -0
  250. package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +10 -0
  251. package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +1 -0
  252. package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.js +24 -0
  253. package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.js.map +1 -0
  254. package/payload/platform/plugins/loop/mcp/dist/tools/feedback.d.ts +16 -0
  255. package/payload/platform/plugins/loop/mcp/dist/tools/feedback.d.ts.map +1 -0
  256. package/payload/platform/plugins/loop/mcp/dist/tools/feedback.js +35 -0
  257. package/payload/platform/plugins/loop/mcp/dist/tools/feedback.js.map +1 -0
  258. package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.d.ts +5 -0
  259. package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +1 -0
  260. package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.js +19 -0
  261. package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.js.map +1 -0
  262. package/payload/platform/plugins/loop/mcp/dist/tools/key-list.d.ts +4 -0
  263. package/payload/platform/plugins/loop/mcp/dist/tools/key-list.d.ts.map +1 -0
  264. package/payload/platform/plugins/loop/mcp/dist/tools/key-list.js +14 -0
  265. package/payload/platform/plugins/loop/mcp/dist/tools/key-list.js.map +1 -0
  266. package/payload/platform/plugins/loop/mcp/dist/tools/key-register.d.ts +9 -0
  267. package/payload/platform/plugins/loop/mcp/dist/tools/key-register.d.ts.map +1 -0
  268. package/payload/platform/plugins/loop/mcp/dist/tools/key-register.js +60 -0
  269. package/payload/platform/plugins/loop/mcp/dist/tools/key-register.js.map +1 -0
  270. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +13 -0
  271. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +1 -0
  272. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.js +41 -0
  273. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +1 -0
  274. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +9 -0
  275. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +1 -0
  276. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.js +16 -0
  277. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +1 -0
  278. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +15 -0
  279. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +1 -0
  280. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.js +11 -0
  281. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +1 -0
  282. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.d.ts +10 -0
  283. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +1 -0
  284. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.js +39 -0
  285. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.js.map +1 -0
  286. package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.d.ts +9 -0
  287. package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +1 -0
  288. package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.js +125 -0
  289. package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.js.map +1 -0
  290. package/payload/platform/plugins/loop/mcp/dist/tools/people-search.d.ts +18 -0
  291. package/payload/platform/plugins/loop/mcp/dist/tools/people-search.d.ts.map +1 -0
  292. package/payload/platform/plugins/loop/mcp/dist/tools/people-search.js +87 -0
  293. package/payload/platform/plugins/loop/mcp/dist/tools/people-search.js.map +1 -0
  294. package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.d.ts +10 -0
  295. package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +1 -0
  296. package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.js +82 -0
  297. package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.js.map +1 -0
  298. package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.d.ts +12 -0
  299. package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +1 -0
  300. package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.js +32 -0
  301. package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.js.map +1 -0
  302. package/payload/platform/plugins/loop/mcp/dist/tools/property-request.d.ts +15 -0
  303. package/payload/platform/plugins/loop/mcp/dist/tools/property-request.d.ts.map +1 -0
  304. package/payload/platform/plugins/loop/mcp/dist/tools/property-request.js +11 -0
  305. package/payload/platform/plugins/loop/mcp/dist/tools/property-request.js.map +1 -0
  306. package/payload/platform/plugins/loop/mcp/dist/tools/property-search.d.ts +16 -0
  307. package/payload/platform/plugins/loop/mcp/dist/tools/property-search.d.ts.map +1 -0
  308. package/payload/platform/plugins/loop/mcp/dist/tools/property-search.js +41 -0
  309. package/payload/platform/plugins/loop/mcp/dist/tools/property-search.js.map +1 -0
  310. package/payload/platform/plugins/loop/mcp/dist/tools/supplier.d.ts +13 -0
  311. package/payload/platform/plugins/loop/mcp/dist/tools/supplier.d.ts.map +1 -0
  312. package/payload/platform/plugins/loop/mcp/dist/tools/supplier.js +49 -0
  313. package/payload/platform/plugins/loop/mcp/dist/tools/supplier.js.map +1 -0
  314. package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.d.ts +7 -0
  315. package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +1 -0
  316. package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.js +19 -0
  317. package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.js.map +1 -0
  318. package/payload/platform/plugins/loop/mcp/dist/tools/team-info.d.ts +5 -0
  319. package/payload/platform/plugins/loop/mcp/dist/tools/team-info.d.ts.map +1 -0
  320. package/payload/platform/plugins/loop/mcp/dist/tools/team-info.js +32 -0
  321. package/payload/platform/plugins/loop/mcp/dist/tools/team-info.js.map +1 -0
  322. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.d.ts +14 -0
  323. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +1 -0
  324. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.js +11 -0
  325. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.js.map +1 -0
  326. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +9 -0
  327. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +1 -0
  328. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.js +85 -0
  329. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.js.map +1 -0
  330. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.d.ts +13 -0
  331. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +1 -0
  332. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.js +44 -0
  333. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.js.map +1 -0
  334. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.d.ts +14 -0
  335. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +1 -0
  336. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.js +18 -0
  337. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.js.map +1 -0
  338. package/payload/platform/plugins/loop/mcp/package-lock.json +2549 -0
  339. package/payload/platform/plugins/loop/mcp/package.json +21 -0
  340. package/payload/platform/plugins/loop/mcp/src/__tests__/loop-swagger.snapshot.json +26467 -0
  341. package/payload/platform/plugins/loop/mcp/src/__tests__/swagger-write-coverage.test.ts +153 -0
  342. package/payload/platform/plugins/loop/mcp/src/index.ts +444 -0
  343. package/payload/platform/plugins/loop/mcp/src/lib/crypto.ts +105 -0
  344. package/payload/platform/plugins/loop/mcp/src/lib/loop-api.ts +604 -0
  345. package/payload/platform/plugins/loop/mcp/src/lib/neo4j.ts +51 -0
  346. package/payload/platform/plugins/loop/mcp/src/tools/customer-preferences.ts +66 -0
  347. package/payload/platform/plugins/loop/mcp/src/tools/feedback.ts +86 -0
  348. package/payload/platform/plugins/loop/mcp/src/tools/key-deregister.ts +27 -0
  349. package/payload/platform/plugins/loop/mcp/src/tools/key-list.ts +19 -0
  350. package/payload/platform/plugins/loop/mcp/src/tools/key-register.ts +95 -0
  351. package/payload/platform/plugins/loop/mcp/src/tools/marketing-enquiry.ts +113 -0
  352. package/payload/platform/plugins/loop/mcp/src/tools/marketing-match-batch.ts +53 -0
  353. package/payload/platform/plugins/loop/mcp/src/tools/marketing-match-request.ts +42 -0
  354. package/payload/platform/plugins/loop/mcp/src/tools/marketing-match.ts +84 -0
  355. package/payload/platform/plugins/loop/mcp/src/tools/people-detail.ts +245 -0
  356. package/payload/platform/plugins/loop/mcp/src/tools/people-search.ts +180 -0
  357. package/payload/platform/plugins/loop/mcp/src/tools/property-detail.ts +145 -0
  358. package/payload/platform/plugins/loop/mcp/src/tools/property-listed.ts +88 -0
  359. package/payload/platform/plugins/loop/mcp/src/tools/property-request.ts +42 -0
  360. package/payload/platform/plugins/loop/mcp/src/tools/property-search.ts +92 -0
  361. package/payload/platform/plugins/loop/mcp/src/tools/supplier.ts +129 -0
  362. package/payload/platform/plugins/loop/mcp/src/tools/team-availability.ts +52 -0
  363. package/payload/platform/plugins/loop/mcp/src/tools/team-info.ts +95 -0
  364. package/payload/platform/plugins/loop/mcp/src/tools/viewing-create.ts +41 -0
  365. package/payload/platform/plugins/loop/mcp/src/tools/viewing-detail.ts +171 -0
  366. package/payload/platform/plugins/loop/mcp/src/tools/viewing-search.ts +92 -0
  367. package/payload/platform/plugins/loop/mcp/src/tools/viewing-update.ts +53 -0
  368. package/payload/platform/plugins/loop/mcp/tsconfig.json +20 -0
  369. package/payload/platform/plugins/loop/mcp/vitest.config.ts +9 -0
  370. package/payload/platform/plugins/loop/skills/compliance-flag-checker/SKILL.md +53 -0
  371. package/payload/platform/plugins/loop/skills/priority-ranker/SKILL.md +40 -0
  372. package/payload/platform/plugins/loop/skills/tone-matched-drafter/SKILL.md +53 -0
  373. package/payload/platform/plugins/loop/skills/variance-narrator/SKILL.md +50 -0
  374. package/payload/platform/plugins/loop/skills/vendor-research/SKILL.md +54 -0
  375. package/payload/platform/plugins/memory/PLUGIN.md +58 -29
  376. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.d.ts +3 -1
  377. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.d.ts.map +1 -1
  378. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js +105 -4
  379. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js.map +1 -1
  380. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -1
  381. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +16 -3
  382. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
  383. package/payload/platform/plugins/outlook/PLUGIN.md +14 -7
  384. package/payload/platform/plugins/replicate/PLUGIN.md +6 -3
  385. package/payload/platform/plugins/scheduling/PLUGIN.md +16 -8
  386. package/payload/platform/plugins/tasks/PLUGIN.md +28 -14
  387. package/payload/platform/plugins/teaching/.claude-plugin/plugin.json +8 -0
  388. package/payload/platform/plugins/teaching/PLUGIN.md +57 -0
  389. package/payload/platform/plugins/teaching/skills/interactive-tutor/SKILL.md +59 -0
  390. package/payload/platform/plugins/teaching/skills/interactive-tutor/references/assessment.md +70 -0
  391. package/payload/platform/plugins/teaching/skills/interactive-tutor/references/classroom-conduct.md +43 -0
  392. package/payload/platform/plugins/teaching/skills/interactive-tutor/references/teaching-modes.md +83 -0
  393. package/payload/platform/plugins/teaching/skills/lesson-planner/SKILL.md +48 -0
  394. package/payload/platform/plugins/teaching/skills/lesson-planner/references/context-gathering.md +41 -0
  395. package/payload/platform/plugins/teaching/skills/lesson-planner/references/plan-structure.md +94 -0
  396. package/payload/platform/plugins/teaching/skills/study-pack-builder/SKILL.md +52 -0
  397. package/payload/platform/plugins/teaching/skills/study-pack-builder/references/disaggregation.md +49 -0
  398. package/payload/platform/plugins/teaching/skills/study-pack-builder/references/materials.md +116 -0
  399. package/payload/platform/plugins/vendors/.claude-plugin/plugin.json +8 -0
  400. package/payload/platform/plugins/vendors/PLUGIN.md +34 -0
  401. package/payload/platform/plugins/vendors/skills/vendor-communication/SKILL.md +42 -0
  402. package/payload/platform/plugins/vendors/skills/vendor-communication/references/fee-protection-and-agenda.md +28 -0
  403. package/payload/platform/plugins/vendors/skills/vendor-communication/references/listing-scripts.md +44 -0
  404. package/payload/platform/plugins/vendors/skills/vendor-communication/references/negotiation-deep-guide.md +70 -0
  405. package/payload/platform/plugins/vendors/skills/vendor-communication/references/price-alignment-scripts.md +33 -0
  406. package/payload/platform/plugins/vendors/skills/vendor-communication/references/price-alignment.md +34 -0
  407. package/payload/platform/plugins/vendors/skills/vendor-communication/references/scenario-scripts.md +38 -0
  408. package/payload/platform/plugins/vendors/skills/vendor-communication/references/seller-engagement.md +51 -0
  409. package/payload/platform/plugins/vendors/skills/vendor-communication/references/valuation-booking.md +76 -0
  410. package/payload/platform/plugins/vendors/skills/vendor-communication/references/vendor-scripts.md +63 -0
  411. package/payload/platform/plugins/vendors/skills/vendor-communication/references/vendor-updates.md +41 -0
  412. package/payload/platform/plugins/vendors/skills/vendor-updates/SKILL.md +153 -0
  413. package/payload/platform/plugins/waitlist/PLUGIN.md +12 -6
  414. package/payload/platform/plugins/whatsapp/PLUGIN.md +25 -13
  415. package/payload/platform/plugins/workflows/PLUGIN.md +16 -8
  416. package/payload/platform/plugins/writer-craft/.claude-plugin/plugin.json +8 -0
  417. package/payload/platform/plugins/writer-craft/PLUGIN.md +87 -0
  418. package/payload/platform/plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +92 -0
  419. package/payload/platform/plugins/writer-craft/skills/citation-style/SKILL.md +94 -0
  420. package/payload/platform/plugins/writer-craft/skills/citation-style/references/book-and-chapter-models.md +77 -0
  421. package/payload/platform/plugins/writer-craft/skills/citation-style/references/citation-rules.md +103 -0
  422. package/payload/platform/plugins/writer-craft/skills/citation-style/references/journal-article-models.md +74 -0
  423. package/payload/platform/plugins/writer-craft/skills/citation-style/references/other-source-models.md +146 -0
  424. package/payload/platform/plugins/writer-craft/skills/citation-style/references/reference-list-rules.md +70 -0
  425. package/payload/platform/plugins/writer-craft/skills/editorial-practice/SKILL.md +108 -0
  426. package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/copyediting.md +73 -0
  427. package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/developmental-editing.md +85 -0
  428. package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/genre-specific-editing.md +78 -0
  429. package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/line-editing.md +55 -0
  430. package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/self-editing.md +89 -0
  431. package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/SKILL.md +114 -0
  432. package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/audience-analysis.md +73 -0
  433. package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/crafting-persuasive-story.md +76 -0
  434. package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/persuasion-case-studies.md +67 -0
  435. package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/transformation-framework.md +86 -0
  436. package/payload/platform/plugins/writer-craft/skills/point-of-view/SKILL.md +97 -0
  437. package/payload/platform/plugins/writer-craft/skills/point-of-view/references/indirect-narration.md +72 -0
  438. package/payload/platform/plugins/writer-craft/skills/point-of-view/references/pov-types-and-voice.md +91 -0
  439. package/payload/platform/plugins/writer-craft/skills/point-of-view/references/protagonist-filter.md +71 -0
  440. package/payload/platform/plugins/writer-craft/skills/point-of-view/references/tense-and-person.md +85 -0
  441. package/payload/platform/plugins/writer-craft/skills/prose-craft/SKILL.md +100 -0
  442. package/payload/platform/plugins/writer-craft/skills/prose-craft/references/punctuation-and-grammar.md +72 -0
  443. package/payload/platform/plugins/writer-craft/skills/prose-craft/references/repetition.md +71 -0
  444. package/payload/platform/plugins/writer-craft/skills/prose-craft/references/sound-and-rhythm.md +64 -0
  445. package/payload/platform/plugins/writer-craft/skills/prose-craft/references/word-economy.md +93 -0
  446. package/payload/platform/plugins/writer-craft/skills/reader-engagement/SKILL.md +100 -0
  447. package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/cause-effect-setup-payoff.md +79 -0
  448. package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/conflict-escalation.md +81 -0
  449. package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/hooking-readers.md +67 -0
  450. package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/neurochemistry-of-engagement.md +94 -0
  451. package/payload/platform/plugins/writer-craft/skills/review-manuscript/SKILL.md +111 -0
  452. package/payload/platform/plugins/writer-craft/skills/review-manuscript/references/review-manuscript-checklist.md +119 -0
  453. package/payload/platform/plugins/writer-craft/skills/review-prose/SKILL.md +99 -0
  454. package/payload/platform/plugins/writer-craft/skills/review-prose/references/prose-review-checklist.md +112 -0
  455. package/payload/platform/plugins/writer-craft/skills/review-scene/SKILL.md +99 -0
  456. package/payload/platform/plugins/writer-craft/skills/review-scene/references/scene-analysis-framework.md +95 -0
  457. package/payload/platform/plugins/writer-craft/skills/story-architecture/SKILL.md +106 -0
  458. package/payload/platform/plugins/writer-craft/skills/story-architecture/references/blueprinting-and-scene-cards.md +118 -0
  459. package/payload/platform/plugins/writer-craft/skills/story-architecture/references/inner-issue-and-protagonist-goal.md +66 -0
  460. package/payload/platform/plugins/writer-craft/skills/story-architecture/references/misbelief-desire-worldview.md +87 -0
  461. package/payload/platform/plugins/writer-craft/skills/story-architecture/references/origin-scenes-and-escalation.md +82 -0
  462. package/payload/platform/plugins/writer-craft/skills/story-blueprint/SKILL.md +133 -0
  463. package/payload/platform/plugins/writer-craft/skills/story-blueprint/references/blueprinting-exercises.md +118 -0
  464. package/payload/platform/plugins/writer-craft/skills/story-blueprint/references/blueprinting-process.md +128 -0
  465. package/payload/platform/scripts/conversation-id-allowlist.txt +0 -1
  466. package/payload/platform/services/claude-session-manager/dist/config.d.ts +6 -0
  467. package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
  468. package/payload/platform/services/claude-session-manager/dist/config.js +60 -1
  469. package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
  470. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +9 -0
  471. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  472. package/payload/platform/services/claude-session-manager/dist/http-server.js +48 -2
  473. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  474. package/payload/platform/services/claude-session-manager/dist/index.js +39 -0
  475. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  476. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +22 -0
  477. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  478. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +32 -1
  479. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  480. package/payload/platform/services/claude-session-manager/dist/public-tool-audit.d.ts +33 -0
  481. package/payload/platform/services/claude-session-manager/dist/public-tool-audit.d.ts.map +1 -0
  482. package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js +149 -0
  483. package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js.map +1 -0
  484. package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.d.ts +28 -0
  485. package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.d.ts.map +1 -0
  486. package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js +77 -0
  487. package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js.map +1 -0
  488. package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts +25 -0
  489. package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts.map +1 -0
  490. package/payload/platform/services/claude-session-manager/dist/tool-surface.js +149 -0
  491. package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -0
  492. package/payload/premium-plugins/real-agency/plugins/estate-business/PLUGIN.md +15 -0
  493. package/payload/premium-plugins/real-agency/plugins/estate-sales/PLUGIN.md +5 -0
  494. package/payload/premium-plugins/real-agency/plugins/leads/PLUGIN.md +16 -0
  495. package/payload/premium-plugins/real-agency/plugins/listings/PLUGIN.md +39 -0
  496. package/payload/premium-plugins/real-agency/plugins/loop/PLUGIN.md +15 -0
  497. package/payload/server/{chunk-2ZNKHCQB.js → chunk-2MRZBQMH.js} +1 -1
  498. package/payload/server/{chunk-GPUCA2RQ.js → chunk-NL7QLVAD.js} +0 -192
  499. package/payload/server/{chunk-IDKWGLM5.js → chunk-YPZFYTYP.js} +1 -247
  500. package/payload/server/{cloudflare-task-tracker-LYI5BTYI.js → cloudflare-task-tracker-QVOGHKWV.js} +2 -2
  501. package/payload/server/maxy-edge.js +2 -2
  502. package/payload/server/package.json +0 -2
  503. package/payload/server/public/assets/{Checkbox-D1OQD43b.js → Checkbox-YIF0payo.js} +1 -1
  504. package/payload/server/public/assets/{admin-czNBxWor.js → admin-DW8IJcLc.js} +1 -1
  505. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BcwgT80u.js → architectureDiagram-Q4EWVU46-Bz8mlxZZ.js} +1 -1
  506. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BMSyZUQA.js → blockDiagram-DXYQGD6D-DwV8Z8-i.js} +1 -1
  507. package/payload/server/public/assets/{brand-2cku8WFs.css → brand-DqiRNMlu.css} +1 -1
  508. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-DPRGY1jJ.js → c4Diagram-AHTNJAMY-DiUTejMp.js} +1 -1
  509. package/payload/server/public/assets/channel-PtVtoBEL.js +1 -0
  510. package/payload/server/public/assets/{chunk-336JU56O-B7oQ3g1c.js → chunk-336JU56O-4mHZpBXe.js} +2 -2
  511. package/payload/server/public/assets/{chunk-426QAEUC-C1P0yFXw.js → chunk-426QAEUC-Cbv0vrN9.js} +1 -1
  512. package/payload/server/public/assets/{chunk-4TB4RGXK-LI7kOJd0.js → chunk-4TB4RGXK-BvLhId_2.js} +1 -1
  513. package/payload/server/public/assets/{chunk-5FUZZQ4R-CXQRGTQE.js → chunk-5FUZZQ4R-bBafOTkw.js} +1 -1
  514. package/payload/server/public/assets/{chunk-5PVQY5BW-NSyzpXRy.js → chunk-5PVQY5BW-B0NqBKVy.js} +1 -1
  515. package/payload/server/public/assets/{chunk-EDXVE4YY-voNwxbDs.js → chunk-EDXVE4YY-CFd4SqI6.js} +1 -1
  516. package/payload/server/public/assets/{chunk-ENJZ2VHE-CMEMPzYY.js → chunk-ENJZ2VHE-ajf2sb6c.js} +1 -1
  517. package/payload/server/public/assets/{chunk-ICPOFSXX-hEbwu-pe.js → chunk-ICPOFSXX-pWg6bug7.js} +1 -1
  518. package/payload/server/public/assets/{chunk-OYMX7WX6-DxskDrLs.js → chunk-OYMX7WX6-OjEd-17c.js} +1 -1
  519. package/payload/server/public/assets/{chunk-U2HBQHQK-D7TKgUo0.js → chunk-U2HBQHQK-DbEFSPoh.js} +1 -1
  520. package/payload/server/public/assets/{chunk-X2U36JSP-BvPUQEPm.js → chunk-X2U36JSP-COdNwrBb.js} +1 -1
  521. package/payload/server/public/assets/{chunk-YZCP3GAM-BY-RWQUW.js → chunk-YZCP3GAM-CHMWuY9B.js} +1 -1
  522. package/payload/server/public/assets/{chunk-ZZ45TVLE-DZvOYDY6.js → chunk-ZZ45TVLE-B-uDLQOB.js} +1 -1
  523. package/payload/server/public/assets/classDiagram-6PBFFD2Q-RVH_SEhY.js +1 -0
  524. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cm3rAb93.js +1 -0
  525. package/payload/server/public/assets/clone-BjY0Wzht.js +1 -0
  526. package/payload/server/public/assets/{dagre-KV5264BT-Cnj0mUZl.js → dagre-KV5264BT-CMEzmhIL.js} +1 -1
  527. package/payload/server/public/assets/{dagre-Bt-fpckL.js → dagre-bhIG_KnW.js} +1 -1
  528. package/payload/server/public/assets/data-K_kS__sL.js +1 -0
  529. package/payload/server/public/assets/{device-url-actions-Bjz3Xzbm.js → device-url-actions-AcOyLSeF.js} +1 -1
  530. package/payload/server/public/assets/{diagram-5BDNPKRD-DjLzvOlx.js → diagram-5BDNPKRD-6RIoQhIL.js} +1 -1
  531. package/payload/server/public/assets/{diagram-G4DWMVQ6-DTfuRd-T.js → diagram-G4DWMVQ6-BSp36TVv.js} +1 -1
  532. package/payload/server/public/assets/{diagram-MMDJMWI5-BaL2mCnx.js → diagram-MMDJMWI5-D54fo52D.js} +1 -1
  533. package/payload/server/public/assets/{diagram-TYMM5635-C5InWY5R.js → diagram-TYMM5635-CWL8z-Pq.js} +1 -1
  534. package/payload/server/public/assets/{erDiagram-SMLLAGMA-DO7BXTpn.js → erDiagram-SMLLAGMA-AnnHBo3z.js} +1 -1
  535. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-DDdAKfLf.js → flowDiagram-DWJPFMVM-laWmBl5o.js} +1 -1
  536. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-arJD8Utm.js → ganttDiagram-T4ZO3ILL-B94ko8ie.js} +1 -1
  537. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-C55GH-OS.js → gitGraphDiagram-UUTBAWPF-DxzL1fxZ.js} +1 -1
  538. package/payload/server/public/assets/graph-DeEigyO_.js +1 -0
  539. package/payload/server/public/assets/graph-labels-C7I5QvNv.js +1 -0
  540. package/payload/server/public/assets/{graphlib-DL9PM7Ex.js → graphlib-CY-zIElM.js} +1 -1
  541. package/payload/server/public/assets/{infoDiagram-42DDH7IO-BMSGqUbG.js → infoDiagram-42DDH7IO-BMTajIIr.js} +1 -1
  542. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-Dw6BZ6BG.js → ishikawaDiagram-UXIWVN3A-B_QauE5O.js} +1 -1
  543. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DrywUGXw.js → journeyDiagram-VCZTEJTY-DmlqSIih.js} +1 -1
  544. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-DuwtVBBc.js → kanban-definition-6JOO6SKY-ZGDQT7xB.js} +1 -1
  545. package/payload/server/public/assets/{line-JAksyKHj.js → line-D13opgep.js} +1 -1
  546. package/payload/server/public/assets/{mermaid-parser.core-BMq-ApBW.js → mermaid-parser.core-C650Sual.js} +1 -1
  547. package/payload/server/public/assets/{mermaid.core-tH4oX0Kh.js → mermaid.core-BqnQoXTp.js} +3 -3
  548. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-D1OiiJga.js → mindmap-definition-QFDTVHPH-BS_8y-tY.js} +1 -1
  549. package/payload/server/public/assets/{page-BZpoS7iR.js → page-B_rpjIRr.js} +1 -1
  550. package/payload/server/public/assets/{page-CkvBvezS.js → page-qSH972X0.js} +1 -1
  551. package/payload/server/public/assets/{pieDiagram-DEJITSTG-Ckwm69PW.js → pieDiagram-DEJITSTG-B5OmNvBO.js} +1 -1
  552. package/payload/server/public/assets/{public-C-dTMgXu.js → public-DDsYgotk.js} +3 -3
  553. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-COw3yZ1j.js → quadrantDiagram-34T5L4WZ-DTYITdNo.js} +1 -1
  554. package/payload/server/public/assets/{requirementDiagram-MS252O5E-DqGzM4K-.js → requirementDiagram-MS252O5E-CRZWxH06.js} +1 -1
  555. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-D-l1c_Pl.js → sankeyDiagram-XADWPNL6-DazRENhe.js} +1 -1
  556. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BeIi0DtJ.js → sequenceDiagram-FGHM5R23-BcHTxmPy.js} +1 -1
  557. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-C-jgegLk.js → stateDiagram-FHFEXIEX-DYU7nbqg.js} +1 -1
  558. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BgljVtlp.js +1 -0
  559. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BGFKkYmi.js → timeline-definition-GMOUNBTQ-BKGmqkST.js} +1 -1
  560. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-5NuIhJLS.js → vennDiagram-DHZGUBPP-BXvLPmX7.js} +1 -1
  561. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-Be9ytVut.js → wardleyDiagram-NUSXRM2D-BCclUa3Z.js} +1 -1
  562. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DCyHg41R.js → xychartDiagram-5P7HB3ND-C-Xp-Eoc.js} +1 -1
  563. package/payload/server/public/data.html +5 -5
  564. package/payload/server/public/graph.html +6 -6
  565. package/payload/server/public/index.html +8 -8
  566. package/payload/server/public/public.html +5 -5
  567. package/payload/server/server.js +1024 -2347
  568. package/payload/platform/scripts/check-sdk-oauth.mjs +0 -185
  569. package/payload/server/public/assets/channel-fxEghWew.js +0 -1
  570. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BsWzGW0N.js +0 -1
  571. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BGVa3h90.js +0 -1
  572. package/payload/server/public/assets/clone-Khvocke2.js +0 -1
  573. package/payload/server/public/assets/data-DBd-Buhp.js +0 -1
  574. package/payload/server/public/assets/graph-DUtVdnZ6.js +0 -1
  575. package/payload/server/public/assets/graph-labels-Dxfue-fP.js +0 -1
  576. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BaMs8Znv.js +0 -1
  577. /package/payload/server/public/assets/{brand-CSQuxS9w.js → brand-Bm671owU.js} +0 -0
@@ -0,0 +1,211 @@
1
+ # Editorial copy register, typography, on-image text
2
+
3
+ The brochure templates are placeholder-only — every body string is a `{{ token }}` (see `placeholders.md`). This file owns the **register and composition rules** for the copy that fills those tokens: voice, length, sentence count, and the per-section structural expectations.
4
+
5
+ When in doubt about what "good" reads like, open the validated Sparrows Farm reference brochure at `/Users/neo/estate-agents/muvin/properties/henham-road-debden-green-hamperden-end-cb11-3lz-949931/output/brochure.html`. It is the canonical worked example for every register rule below. The rules — not the example — are the contract; the example shows what those rules produce.
6
+
7
+ ## Editorial copy register — what super-premium reads like
8
+
9
+ The brochure is editorial print, not a property listing description. Body copy is read aloud, in full sentences, with restraint. A handful of rules separate luxury copy from middle-market or AI-tell copy.
10
+
11
+ ### Reduce em-dash usage
12
+
13
+ " — " (em-dash with spaces) used as a connector between phrases is **a hallmark of AI-generated copy** and undermines the luxury feel. The pattern looks like: *"The home pairs period and craft — original beams, Italian Mandarin stone — with twenty-first-century comforts."* On every read, replace each instance with one of:
14
+
15
+ | Pattern | Replacement |
16
+ |---|---|
17
+ | Parenthetical aside (" — A — B — C — ") | Comma list, or a colon followed by a clause, or split into two sentences |
18
+ | Connector between two clauses | Comma, or full stop and new sentence |
19
+ | Emphasis dash | Restructure so the emphasis sits in a strong noun or `<strong>` tag instead |
20
+
21
+ A single em-dash per page is fine. Two or more in the same paragraph reads as machine cadence.
22
+
23
+ ### "Home" not "house"
24
+
25
+ At the super-premium register, "home" is warmer, more personal, and more aspirational. Replace "house" with "home" globally in body copy, decks, taglines and chapter titles, *unless* the word appears in a literal grammatical context that requires it (e.g. "principal house" as a property classification). The chapter "A house at ease" becomes "A home at ease".
26
+
27
+ This is a register choice, not a grammatical one. Use the word the buyer will use: *the home* they are touring, not *the house* they are inspecting.
28
+
29
+ ### Reflow text to avoid orphan words
30
+
31
+ A single word stranded on its own line in a short caption or tagline reads as a layout failure. After populating any caption, deck, or tagline that wraps to multiple lines, scan for orphans (one word on the last line) and either tighten the copy or insert a manual `<br>` so the lines balance. Particularly in cover taglines, TOC captions, and back-page CTAs.
32
+
33
+ ### Verify on every body-heavy page
34
+
35
+ After populating copy, scan the body of every chapter for em-dashes (count them — under three across the whole brochure is a good target), for any remaining "house" references, and for orphan-word line breaks.
36
+
37
+ ## Text on images — use a translucent panel, not a gradient
38
+
39
+ When body or caption text is placed over a photographic background, **the only reliable legibility technique is a translucent dark panel directly behind the text**, with the text in `var(--paper-0)` (pure white). Gradients on the underlying image and `text-shadow` on the text are *not sufficient* — they look fine on the average pixel and fail on every busy-pattern pixel (stone tile floors, golden-hour skies, leaf canopies, bright pool reflections).
40
+
41
+ The contract for any text-on-image element is:
42
+
43
+ ```css
44
+ .caption-on-image {
45
+ position: absolute;
46
+ /* anchor at one corner */
47
+ padding: 12px 16px 14px;
48
+ background: rgba(14, 20, 24, 0.78); /* translucent ink panel */
49
+ border-left: 1px solid var(--gold-300); /* OR border-right, matching caption alignment */
50
+ color: var(--paper-0);
51
+ font-family: var(--body-serif); /* italic at the chosen size */
52
+ font-style: italic;
53
+ font-size: 14–16px;
54
+ line-height: 1.45–1.55;
55
+ }
56
+ ```
57
+
58
+ Notes:
59
+
60
+ - Opacity in the 0.72–0.82 range allows the photo to show through subtly while keeping the type fully legible. Solid black panels look grafted-on; transparent gradients look broken.
61
+ - The 1px gold border on the leading edge gives the panel a deliberate editorial note — it reads as a "credit slip" or "name plate", not a UI overlay.
62
+ - Text shadow can be added as belt-and-braces but is not load-bearing. The panel is.
63
+ - The panel applies to **every** text-on-image element: TOC caption, opener image caption, feature-page photo caption, intermission caption-pills, and the spread-6 chapter overlay (which uses the same pattern with `background: rgba(14,20,24,0.78)` plus `color: var(--paper-0)` and `border-left: 1px solid var(--gold-300)`).
64
+
65
+ Variants for left-aligned vs right-aligned captions: use `border-left` for left-anchored panels, `border-right` for right-anchored. Don't centre-align panel text — editorial captions are flush-left.
66
+
67
+ ### Why a gradient is insufficient
68
+
69
+ A `linear-gradient(180deg, transparent 60%, rgba(0,0,0,0.45) 100%)` darkens the bottom 40% of the image evenly. But the pixels directly behind the text vary photo-by-photo: a beige stone-tile floor at the bottom of a kitchen photo gives a 0.45-darkened beige pixel that is *still* close to white at small italic point sizes; a golden-hour cloud has a similar problem. The panel removes the variability — it presents one consistent dark surface behind the text regardless of what the photo is doing in that region.
70
+
71
+ This rule applies consistently across all on-image text, including the cover. If the cover has overlay text (price, folio number, edition), it must use the panel treatment — or, preferably (per the *Cover layout* note in `structure.md`), drop the overlay text entirely and use the split-paper-above / photo-below cover layout where overlays don't arise.
72
+
73
+ ## Body typography — ragged-right only
74
+
75
+ Paragraph body copy in property brochures uses `text-align: left; hyphens: none` (ragged-right). Justified body copy is **forbidden**: at the body sizes used in print marketing (~10–11pt), justification produces either visible rivers or hyphenated word breaks (e.g. "de- / signed", "thresh- / olds"). Both look cheap. Drop justification, accept the ragged right edge — it is the correct choice for editorial print.
76
+
77
+ ```css
78
+ .ed-body, .ed-deck, .opener-body p, .feature-page .panel p {
79
+ text-align: left;
80
+ hyphens: none;
81
+ -webkit-hyphens: none;
82
+ word-break: normal;
83
+ overflow-wrap: normal;
84
+ }
85
+ ```
86
+
87
+ Headings and display type are exempt — they don't trigger hyphenation at large sizes anyway, and a centred or balanced heading is fine.
88
+
89
+ **Verification.** After capturing print snapshots, scan a body-heavy page (typically the opener, the feature page, or any `.ed-body` paragraph that exceeds ~5 lines) for trailing hyphens at line-ends. If any appear, the rule above isn't applied to that paragraph's class. Common omissions: `.opener-body .ed-body` (different selector specificity), `.feature-page .panel p` (uses a custom paragraph class).
90
+
91
+ ## Stats / facts rows must never wrap a value
92
+
93
+ Every numeric or short-label cell in a stats row (the 5-stat strip on the opener, the 3-stat block in `.ed-stat`, the meta-row above any photo, the EPC quick-facts band) must be single-line. The row layout shrinks before any cell wraps. Wrapping "1,821 sq ft" across two lines because the row is one cell too wide is an editorial failure — the row reads as a broken table, not a confident summary.
94
+
95
+ ```css
96
+ .opener-meta-row {
97
+ display: flex; flex-wrap: nowrap; gap: 14px;
98
+ font-variant-numeric: tabular-nums;
99
+ }
100
+ .opener-meta-row .item { flex: 0 1 auto; min-width: 0; white-space: nowrap; }
101
+ .opener-meta-row .item .k,
102
+ .opener-meta-row .item .v,
103
+ .opener-meta-row .item .v em { white-space: nowrap; }
104
+ ```
105
+
106
+ If five cells at the chosen font size do not fit the available row width, **shrink the font-size or padding** until they do — do **not** drop `flex-wrap: nowrap`, do **not** widen the page, do **not** wrap a value. `font-variant-numeric: tabular-nums` is recommended for the digits — it gives the row consistent column widths and looks more like print typography than the default proportional figures.
107
+
108
+ **Verification.** After capturing print snapshots, scan the opener (page 3) and the bedrooms-and-baths page (page 6, with `.ed-stat`) for any value that wraps to a second line. If any cell wraps, either the font-size is too large for the row width or the row is missing `flex-wrap: nowrap`.
109
+
110
+ ## Per-section composition guide
111
+
112
+ This section is the writing brief for each placeholder block in `template.html` and `index.html`. The token names map 1:1 to entries in `placeholders.md`; this file says **how the copy should read** for each one.
113
+
114
+ ### Cover & subtitle (page 1)
115
+
116
+ - `{{ property_name }}` — Title Case proper noun. Distinct house name preferred ("Sparrows Farm", "Agincourt House"); fall back to the street as proper noun when the property has no separate name. Keep it short — CSS renders it ALL-CAPS with heavy tracking, capped at ~28 source characters between the gold flank rules.
117
+ - `{{ address_subtitle }}` — postal address in four parts joined by ` <em>·</em> `. Single line; do not wrap.
118
+ - The cover carries NO price, NO edition number, NO masthead text over the photo. Those data points live elsewhere (see structure.md "Cover layout").
119
+
120
+ ### TOC (page 2)
121
+
122
+ - `{{ toc_caption }}` — ONE italic sentence, 15-30 words. The property's elevator pitch. Distil from seller brief Q5 ("the feeling on entry") + Q19 ("three words to describe the home"). It sits on a translucent dark panel over the TOC hero — no gradient fallback (see "Text on images" below).
123
+ - `{{ toc_chapter_N_title }}` — chapter names in Title Case, short. Adapt to the property: if there's no pool, the chapter is not "Pool, outdoor kitchen & summerhouse" — it's "Terrace & outdoor kitchen" or "The annexe & studio". Never use vague nouns ("garden complex") that hide which feature you mean.
124
+ - `{{ toc_chapter_N_sub }}` — sentence case, 6-12 words. The "what's in this chapter" line.
125
+ - `{{ toc_chapter_N_page }}` — MUST match the rendered page index. Default 16-page folio: 03, 04, 06, 08, 10, 12, 14, 15.
126
+
127
+ ### Opener (page 3 — Chapter I)
128
+
129
+ - `{{ opener_title_main }}` — the property name as an h2 glyph. CSS italicises.
130
+ - `{{ opener_title_sub }}` — `<locality>, <county>`. Tracked caps via CSS.
131
+ - `{{ opener_spec_line }}` — `<strong>{{ address_line_1 }}</strong> · {{ postcode }} &nbsp;·&nbsp; <em>{{ price_line }}</em>`. The strong/em formatting holds the eye on street + price.
132
+ - `{{ opener_meta_N_value }}` × 5 — five short single-line values. Drop a cell (don't fill with TBC) if a value is genuinely missing.
133
+ - `{{ opener_para_1 }}` — 4-6 sentences carrying the dropcap. Set place + age + tenure context. Open with the home in its setting; close with a hook that earns the page-turn. Distil seller brief Q1, Q3, Q11.
134
+ - `{{ opener_para_2 }}` — 3-4 sentences. Pairs character with comfort (period + modern; craft + convenience). End on a one-sentence italic phrase wrapped in `<em>` — the brochure's "voice signature" closer.
135
+
136
+ ### Chapter II — A home at ease (page 4) + intermission (page 5)
137
+
138
+ - `{{ chapter2_heading }}` — h3 with italic close. Use `<em>` on the last 1-2 words. Avoid "house" — use "home" (see "Home not house" below).
139
+ - `{{ chapter2_deck }}` — ONE italic sentence, 12-25 words.
140
+ - `{{ chapter2_para_1 }}` — 4-6 sentences. Walk the reader from the entrance through the principal reception(s) to the central living space (kitchen-dining-living). Lean on light, beam, stone, glazing.
141
+ - `{{ chapter2_para_2 }}` — 3-5 sentences. Kitchen specifics (cabinetry, worksurfaces, appliances by brand if distinctive) + how the rooms connect to utility and outdoor.
142
+ - `{{ chapter2_strip_N_caption_label }}` + `{{ chapter2_strip_N_caption_text }}` — bold lead-in (e.g. `"The kitchen."`, `"Wolf & Sub-Zero."`) followed by ONE descriptive sentence.
143
+ - `{{ intermission_05_caption }}` — italic anchor sentence, 10-20 words. Starts with `<em>The [room]</em>,` to match the photo.
144
+
145
+ ### Chapter III — Hearth & hall (page 6) + intermission (page 7)
146
+
147
+ - `{{ chapter3_heading }}` — two-line h3 with italic close.
148
+ - `{{ chapter3_deck }}` — italic sentence.
149
+ - `{{ chapter3_para }}` — one longer body paragraph, 6-9 sentences. Walks the secondary reception rooms (hearth, hallway, drawing room, orangery/conservatory, fifth ground-floor bedroom if present). Each named room earns a clause that says what it is + what it does.
150
+ - `{{ intermission_07_caption }}` — same shape as page 5.
151
+
152
+ ### Chapter IV — Bedrooms & baths (page 8)
153
+
154
+ - `{{ chapter4_deck }}` — italic, 15-25 words. Lead with the count ("X bedrooms across Y floors") and the principal-suite signature.
155
+ - `{{ chapter4_para_1 }}` — 3-5 sentences walking the sleeping floor — staircase, landing, second/third/fourth bedrooms in order.
156
+ - 3× `.ed-stat` blocks — big number (.v) with optional unit in `<em>`, then an all-caps slate label (.l). Typical content: bedroom count + character, bathroom count + en-suite split, upper-floor sq ft. Drop the third stat if the property is small.
157
+ - `{{ chapter4_para_2 }}` — 2-3 sentence closer focused on the principal suite (dressing room, en-suite, view).
158
+ - Gallery: 5 cells (1 tall feature). The TALL cell is the principal bedroom — verify by **pixel content**, not filename.
159
+
160
+ ### Page 9 — Image-led gallery ("Rooms in passing")
161
+
162
+ - `{{ gallery_heading }}` — short h3, italic close.
163
+ - `{{ gallery_deck }}` — single sentence.
164
+ - 5× `figcaption` — SHORT italic — `<em>The [room].</em>` plus an optional trailing clause. Do not repeat captions from Chapter II's strip cells.
165
+
166
+ ### Chapter V — Feature page (page 10) + intermission (page 11)
167
+
168
+ - `{{ chapter5_eyebrow }}` — match the TOC entry verbatim. If you adapted the chapter title for the property (e.g. "Terrace & outdoor kitchen"), use that here too.
169
+ - `{{ chapter5_heading }}` — two-line italic editorial headline.
170
+ - `{{ chapter5_deck }}` — italic, 18-30 words.
171
+ - `{{ chapter5_para }}` — one body paragraph, 5-7 sentences. **Name each feature exactly** — "outdoor kitchen", "summerhouse", "orangery" are not interchangeable (see structure.md "Distinguishing features clearly"). Verify each photographed feature has its own clause.
172
+ - 4× attribute blocks (k/v). Crisp facts — plot, signature feature, count, material.
173
+
174
+ ### Chapter VI — Garden & ground (page 12) + site plan (page 13)
175
+
176
+ - `{{ chapter6_heading }}` — two-line italic with `<br>`.
177
+ - 4× bottom panels (`<h4>` + body). Italic h4 label (one word + optional italic close) + 2-3 sentence body. Typical four: rear garden, paddocks/plot, front/approach, ancillary outbuildings. Re-title per property — never "ancillary" as a noun if you can say "garage & sun room".
178
+ - Site plan page: `{{ siteplan_heading }}` is the headline plot fact (acreage if known, "The plot & outlook" otherwise). 3× h4 + body panels: plot, boundary, garden complex / outbuildings.
179
+
180
+ ### Chapter VII — Plan & particulars (page 14)
181
+
182
+ - `{{ floorplan_lead }}` — italic — "Total internal area · <em>X sq ft</em> · Y m²". Convert one to the other.
183
+ - `{{ floorplan_sub }}` — floor-by-floor breakdown joined by &nbsp;·&nbsp;. **Detached outbuildings are listed separately** — never silently rolled into the principal home's sq ft. See structure.md "Floor area".
184
+ - `{{ particular_N }}` × 9 — each is a single short sentence, with `<strong>` on the named element. Sequence: top-line architectural fact → character feature → kitchen specifics → heating/services → signature internal feature → signature outdoor feature → ancillary buildings → plot → outlook. Drop unused slots; never exceed 9.
185
+ - EPC: exactly one of `{{ epc_current_a..g }}` is ` current` (leading space → CSS class); all others empty string. `{{ epc_caption }}` is 1-2 sentences on the heating system and what the band reflects.
186
+
187
+ ### Chapter VIII — Material information (page 15)
188
+
189
+ - Every `{{ mi_* }}` row carries the property.json value verbatim. Unknowns are "TBC" — never invent.
190
+ - `{{ mi_part_b_extra_label }}` / `{{ mi_part_b_extra_value }}` is the per-property distinctive Part B slot — "Pool" for a property with one, "Annexe" / "Outdoor" / etc.
191
+ - Drop a row only if the field is genuinely not applicable (e.g. "Coastal Erosion" for an inland home).
192
+
193
+ ### Back page (page 16)
194
+
195
+ - `{{ backpage_headline }}` — canonical phrasing "Arrange a viewing of <em>{{ property_name }}</em>". Do not paraphrase.
196
+ - `{{ backpage_tagline }}` — single sentence, 25-45 words. Mirrors the cover/opener without duplicating phrases. Close with "Best understood in person." or an equivalent property-specific clincher.
197
+
198
+ ### Landing page (index.html)
199
+
200
+ The landing-page tokens (`{{ landing_* }}`) source the same brief but render in continuous-scroll form rather than a 16-page folio. Each `{{ landing_*_para_N }}` follows the same length/voice rules as the equivalent brochure paragraph — see placeholders.md → "Category 9 — index.html editorial copy" for the per-section breakdown.
201
+
202
+ ## AI hero image prompt
203
+
204
+ The cover and back page benefit from a golden-hour version of the front and rear exteriors. The prompt must:
205
+ - Reference the floor plan and aerial image to determine compass orientation
206
+ - Position the setting sun on the correct side of the frame relative to the front elevation
207
+ - Specify warm amber directional light on the facade from the sun side
208
+ - Sky gradient from deep amber at sun to pale peach opposite
209
+ - Keep the house structure sharp and unmodified
210
+ - Professional UK estate agent photography style
211
+ - Output the prompt text for the user to execute in their image tool of choice
@@ -0,0 +1,166 @@
1
+ # Images — preview safety, slot verification, optimisation, brand logo
2
+
3
+ ## Image preview safety — never `Read` an image >2000px
4
+
5
+ **Hard rule: never `Read` an image whose longest edge exceeds 2000px.** The harness loads images into context as multimodal inputs and large ones break the session — the encoding budget overruns and the conversation can drop. Property photographs from DSLRs (`DSC*`, 6000–8000px) and drones (`DJI_*`, 4000–8000px) routinely exceed the limit; AI renders (`ChatGPT-Image-*`, 1024 or 2048px) and screenshots are borderline.
6
+
7
+ Before any `Read` against an image:
8
+
9
+ 1. **Measure first.** `sips -g pixelWidth -g pixelHeight <file>` (macOS) or `identify -format "%wx%h\n" <file>` (ImageMagick).
10
+ 2. If the longest edge ≤ 2000px, reading the original is safe.
11
+ 3. If it exceeds 2000px, generate a downscaled preview into `/tmp/`, read the preview, then delete it: `sips -Z 2000 "<src>" --out "/tmp/preview-$(basename "<src>")"`.
12
+ 4. Often you don't need pixels at all — filename, byte-size, dimensions, and EXIF answer most layout-decision questions ("is this the kitchen wide shot?", "landscape or portrait?") without a multimodal read.
13
+
14
+ Generated brochure print snapshots (`cover-print.png`, `pageN-print.png`) are A4 @ 96dpi — 1123×794px in landscape, 794×1123px in portrait. Either way they are safe to read directly.
15
+
16
+ The constraint is non-negotiable; the failure mode is loss of the entire session, not a graceful error.
17
+
18
+ ## Image content verification — never assign a slot from filename alone
19
+
20
+ A filename like `Sparrows Farm 22.jpg` or `DSC01525_1727361503...jpg` tells you the index and the timestamp. It does not tell you whether the photo is the inglenook, a vanity bathroom, or the principal bedroom. Slot assignment from filename alone routinely puts a downstairs WC where the inglenook should be, or a family bathroom in the principal-bedroom hero cell. The error is silent — the brochure still renders, but the editorial reads as broken because every chapter title misaligns with its image.
21
+
22
+ Before referencing any image in the HTML by slot, **verify by reading the actual pixels** (subject to the 2000px safety rule above). Build a labelled montage of all 49 images at thumbnail size and read it once, or read each candidate slot directly. Trust the photo, not the filename.
23
+
24
+ A useful contact-sheet recipe (49 thumbnails, 4 sheets):
25
+
26
+ ```bash
27
+ mkdir -p /tmp/thumbs
28
+ for n in $(seq 1 49); do
29
+ src="<property_dir>/images/<Property> $n.jpg"
30
+ printf -v idx "%02d" "$n"
31
+ magick "$src" -resize 500x375^ -gravity center -extent 500x375 \
32
+ -fill yellow -gravity north -pointsize 28 -annotate +0+8 "$idx" \
33
+ "/tmp/thumbs/${idx}.png"
34
+ done
35
+ montage /tmp/thumbs/*.png -tile 4x4 -geometry 500x375+4+4 \
36
+ -background '#1a2426' /tmp/sheet1.jpg # repeat for sheets 2–4
37
+ sips -Z 2000 /tmp/sheet1.jpg --out /tmp/sheet1.jpg
38
+ ```
39
+
40
+ Each sheet is 2000×1500px (safe to read), with each thumb labelled by its source index. Read the sheet, write down the slot map, then assign in the HTML.
41
+
42
+ Particularly easy mis-assignments to watch for:
43
+
44
+ | Looks similar at thumb size | Different in reality |
45
+ |---|---|
46
+ | Outdoor kitchen, summerhouse, orangery | Three distinct buildings with three distinct uses |
47
+ | Principal bedroom vs guest bedroom | Principal usually has dressing area + chapel windows |
48
+ | Walk-in wardrobe vs bathroom | Both white-cabinetry; check for plumbing |
49
+ | Family bathroom vs en-suite | En-suite is typically attached to a bedroom shot pair |
50
+
51
+ ## Image requirements — slot map
52
+
53
+ Rename all photos to `{property-slug}-NN.webp` in an `images/` subfolder. The folio template references images by index, not by descriptive name — index 01 is the cover hero, index 02 is the principal elevation, etc. Slot up to 17 distinct images; missing slots can be replaced by re-using a strong photo from elsewhere, or the spread can be reflowed to omit the cell.
54
+
55
+ | Index | Page | Role |
56
+ |------|------|------|
57
+ | 01 | Cover | Hero — golden-hour exterior or atmospheric front shot |
58
+ | 02 | Opener (p3) | Principal front elevation |
59
+ | 04 | Contents (p2), House at ease (p4) | Wide open-plan reception or kitchen-dining hero |
60
+ | 05 | Hall, hearth & sun (p5) | Open reception or hero room |
61
+ | 06 | House at ease (p4) — strip | Kitchen / breakfast room |
62
+ | 07 | House at ease (p4) — strip | Kitchen wide or patio doors |
63
+ | 08 | House at ease (p4) — strip | Separate living / sitting room |
64
+ | 09 | Hall, hearth & sun (p5) | Entrance hallway |
65
+ | 10 | Hall, hearth & sun (p5) | Garden room / sun room / second reception |
66
+ | 13 | Bedrooms & baths (p6) | Principal bedroom (tall feature cell) |
67
+ | 14 | Bedrooms & baths (p6) | Shower room or secondary bathroom |
68
+ | 15 | Bedrooms & baths (p6), Annexe (p7) | Bedroom two — and the feature page if the feature is annexe-like |
69
+ | 18 | Bedrooms & baths (p6) | Bedroom three |
70
+ | 19 | Bedrooms & baths (p6) | Family bathroom |
71
+ | 24 | Garden & ground (p8) | Aerial / drone / wide garden hero |
72
+ | 27 | Lifestyle break (p9) | Full-bleed wide-aspect aerial / twilight exterior with single-line italic caption |
73
+ | 25 | Plan & particulars (p10) | Composite floor plan |
74
+ | 26 | Back page | Atmospheric rear or aerial at golden hour |
75
+
76
+ Indexes 03, 11–12, 16–17, 20–23, 28+ are intentionally unused — leaving gaps means a property with more rooms can use them without renumbering. Adapt the page layout when images are missing — remove the slot, don't leave a placeholder.
77
+
78
+ ## Output folder structure
79
+
80
+ All final artefacts go in **exactly one** location: `<property_dir>/output/`, where `<property_dir>` is `<brand_dir>/properties/<property_slug>-<id>/`. The folder is the deliverable; no nested `brochure/` wrapper between `<property_dir>/` and `output/`, no flat HTML/PDF at the `<property_dir>/` level.
81
+
82
+ ```
83
+ <brand_dir>/properties/<property_slug>-<id>/output/
84
+ brochure.html # literal filename — NOT <property_slug>-brochure.html
85
+ <property_slug>-brochure-print.pdf # print master (300 dpi, ~65–100 MB) — canonical archive artefact
86
+ <property_slug>-brochure-web.pdf # web/digital deliverable (192 dpi, ~25–45 MB) — emailed/attached
87
+ cover-print.png # canonical 300 dpi snapshot (used for print PDF + .print-img swap)
88
+ page2-print.png … page15-print.png # 14 inner-page snapshots
89
+ backpage-print.png
90
+ .snapshots-web/ # intermediate 192 dpi PNGs for the web-PDF build (deletable after)
91
+ cover-print.png … backpage-print.png
92
+ images/
93
+ <property_slug>-01.webp # cover hero (optimised)
94
+ <property_slug>-02.webp # front elevation
95
+ <property_slug>-NN.webp … # remaining photos by index
96
+ web/ # self-contained web bundle — see references/build.md
97
+ ```
98
+
99
+ The brochure folder is **self-contained**: every image the HTML references must live under `output/images/`. Never reference `../images/`, `../../floorplans/`, `../../epc/`, or any other path that escapes `output/`. Those upstream `property-extract` directories are inputs to the brochure, not dependencies of the deliverable. A brochure that breaks if its source property assets move is wrong.
100
+
101
+ If any prior run left a flat brochure or stray PDF at `<property_dir>/` (e.g. from the legacy `brochure/output/` layout), move it to `<property_dir>/_archive/` before writing the canonical layout — never overwrite, never leave it adjacent to `output/`.
102
+
103
+ ## Image renaming and optimisation
104
+
105
+ Source photos are oversized for the brochure's render slots. Optimise as you copy.
106
+
107
+ Rename **and re-encode** every photo to `{property-slug}-NN.webp` per the index table above. Use zero-padded two-digit numbers. The brochure HTML must reference `images/{property-slug}-NN.webp` — not the original camera/WhatsApp filenames, not the source path under `<property_dir>/images/`, not a path that escapes `output/`.
108
+
109
+ ### Render-slot sizing
110
+
111
+ The brochure is a **print-first deliverable**. Source images target the print-master floors below; the digital PDF that gets emailed/embedded is generated by **downsampling the print PDF** (see `build.md → PDF deliverable`), not by re-encoding a smaller WebP. There is therefore no separate "digital-grade source" target — every WebP is encoded once, at print resolution.
112
+
113
+ | Slot type | Folio positions | Source-px floor | Output long edge | WebP quality |
114
+ |---|---|---|---|---|
115
+ | **Cover hero** | page 01 cover, full-bleed | **2800 px** | 2800–4000 | 90 |
116
+ | **Page banner** | aerial garden hero (p8), lifestyle break (p9), feature image (p7), back-page bg | **2800 px** | 2800–4000 | 90 |
117
+ | **Story photo** | hero spread images (p4 main, p5 main) | **2200 px** | 2200–3200 | 88 |
118
+ | **Gallery thumb** | strip cells (p4), gallery cells (p6), stacked images (p5) | **1600 px** | 1024–1600 | 84 |
119
+ | **Floor plan** | page 10 — line/text content, q80 produces visible mosquito noise on rules | **2000 px** | source size, no resize | 92 |
120
+ | **Map / screenshot** | screenshot with text labels | **2000 px** | source size, no resize | 88 |
121
+ | **EPC chart** | small, already <100KB — copy through unchanged | n/a | as-is | as-is |
122
+
123
+ **Floor plan exception — keep the source file as-is.** When the seller (or the agency's floor-plan provider) supplies a high-resolution PNG, **use it directly** — do not convert to WebP, do not downscale, do not re-encode. Floor plans are line art with thin strokes and crisp text where any quality loss is visibly worse than the same quality loss on photographic content. The same file (`<slug>-floorplan.png`) is referenced in the canonical brochure HTML, in the index.html landing page, and copied verbatim into `output/web/images/`. Because the new PDF pipeline rasterises whole pages from the rendered HTML (rather than passing the floor plan through a separate compression stage), the floor plan's quality at the PDF stage is determined by the snapshot DPI — 300 dpi for the print master, 192 dpi for the web PDF. A typical 2000 px floor plan slotted into a ~150 mm-wide brochure cell renders crisply at 300 dpi without any per-image processing. The **web bundle** also references the same `.png` (not a `.webp` substitute) — line art doesn't compress well as WebP and the file size is already modest.
124
+
125
+ The **source-px floor** is the floor on the input photo's longest edge **before optimisation** — see the `Image resolution floor` section in the **a4-print-documents** SKILL for the rationale and full thresholds.
126
+
127
+ **File-size targets.** The digital PDF derivative ships at ~2–5 MB (because users care about email/embed size). The print master ships at ~5–10 MB. Both are produced from the same source WebPs; the size split happens at the PDF stage.
128
+
129
+ **Loop CRM caveat.** Many UK estate agents export listing photos at a 1600 px ceiling (Beacons, Muvin, etc.). That sits below the cover, page-banner, and story-photo floors. When the source photos cap below the floor for an assigned slot and no higher-resolution substitute exists, raise this with the user — `DONE_WITH_CONCERNS` per the a4-print-documents rule.
130
+
131
+ **Do not upscale.** `cwebp -resize 3200 0 <1600px-src>` and `sips -Z 3200` produce a larger file with no extra detail — Lanczos-upscaled blur encoded into a heavier payload.
132
+
133
+ The print snapshot pipeline renders at 2× DPI (192 dpi → 2247×1588px landscape, 1588×2247px portrait) — see `build.md → Print snapshot capture`. 2× DPI is plenty for the screen-side reviewer to judge quality; on-page print quality is verified from the PDF directly, not from the review snapshots.
134
+
135
+ ### Encoder
136
+
137
+ Use `cwebp -q <quality> -m 6 -mt -resize <width> 0 <src> -o <dst>` with the print-master widths from the table above (2800 / 2200 / 1600 px) and the matching qualities (90 / 88 / 84). Floor plans and maps use `-q 92` and `-q 88` respectively, no resize. For source images already encoded at the same quality and dimensions (a previously-optimised WebP), re-encoding rarely saves more than 1–2% — verify by comparing output size to source size, and if it grew or stayed flat, copy the source through instead.
138
+
139
+ ### What to optimise
140
+
141
+ Optimise every image referenced by the HTML, including those that started as `.png` or `.jpeg`. PNG photography is the highest-leverage target. Discard the originals from `output/images/` after the WebP is in place; the source images under `<property_dir>/images/`, `<property_dir>/floorplans/`, and `<property_dir>/epc/` remain as the canonical untouched copies.
142
+
143
+ After optimisation, sanity-check: open the brochure in a browser, watch for 404s in the console, visually inspect cover and floorplan pages at 1× zoom. A typical 17-photo folio lands in the 3–6 MB range total; anything over 10 MB suggests an over-sized slot.
144
+
145
+ ## Brand logo
146
+
147
+ The cover masthead, back-page masthead, and TOC credit line use the brand's logo image — never a text-only "BRAND · Property Folio" string. Two variants are required, named by the **colour of the art itself, not the surface where it goes** (matching `brand-design`'s convention):
148
+
149
+ | Filename | Art colour | Place it on |
150
+ |---|---|---|
151
+ | `<brand>-logo-light.png` | light/white pixels on transparent | Cover masthead, back-page masthead — both sit over dark golden-hour photography |
152
+ | `<brand>-logo-dark.png` | dark/brand-colour pixels on transparent | TOC credit line — sits on warm paper background |
153
+
154
+ Copy both into `output/images/` alongside the property photos. Reference them in the template at:
155
+
156
+ - `.cover-mast img` — `<img src="images/{brand}-logo-light.png" alt="{Brand}">`
157
+ - `.back-mast img` — same as cover
158
+ - `.toc-credit img` — `<img src="images/{brand}-logo-dark.png" alt="{Brand}">`
159
+
160
+ **Sanity-check before referencing.** Open the file in your IDE preview. `<brand>-logo-light.png` should look almost invisible against a white background (it's light-coloured art designed to disappear without a dark surface behind it); if you can read it crisply against white, the file is misnamed and should be `-logo-dark.png` instead. The reverse for `-logo-dark.png`. A run that wires a misnamed file into the template ships a brochure with an invisible masthead.
161
+
162
+ The masthead lockup is `[logo] | [PROPERTY FOLIO]` — the `<span class="pipe">` is a hairline divider; the `<span class="label">` is the small-caps "Property Folio" tag. Don't drop either; the lockup gives the logo air and signals what the document is.
163
+
164
+ If only **one** logo variant exists (e.g. a white-on-transparent only), use it everywhere — but on the warm-paper TOC background, either wrap it in a dark-teal pill or skip the TOC instance rather than ship an invisible logo. If **no** logo asset exists, fall back to the original text masthead (`<div class="cover-mast">BRAND · Property Folio</div>`) and remove the `<img>` and `<span>` children.
165
+
166
+ Logo height: 26px (cover), 28px (back page), 22px (TOC credit). Don't let it exceed 30px — the masthead is a piece of trim, not a billboard.