@rubytech/create-maxy-code 0.1.63 → 0.1.64

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 (571) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/docs/references/admin-session.md +2 -1
  3. package/payload/platform/plugins/docs/references/platform.md +4 -0
  4. package/payload/platform/services/claude-session-manager/dist/index.js +4 -0
  5. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  6. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +12 -0
  7. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  8. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +67 -19
  9. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  10. package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts.map +1 -1
  11. package/payload/platform/services/claude-session-manager/dist/tool-surface.js +19 -4
  12. package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
  13. package/payload/platform/services/claude-session-manager/dist/types.d.ts +5 -0
  14. package/payload/platform/services/claude-session-manager/dist/types.d.ts.map +1 -1
  15. package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
  16. package/payload/premium-plugins/real-agent/BUNDLE.md +2 -4
  17. package/payload/premium-plugins/real-agent/agents/valuer.md +1 -2
  18. package/payload/premium-plugins/real-agent/plugins/epc/.claude-plugin/plugin.json +3 -3
  19. package/payload/premium-plugins/real-agent/plugins/listings/.claude-plugin/plugin.json +1 -1
  20. package/payload/premium-plugins/real-agent/plugins/listings/PLUGIN.md +1 -3
  21. package/payload/premium-plugins/real-agent/plugins/listings/skills/new-instruction/SKILL.md +11 -12
  22. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/SKILL.md +55 -33
  23. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/render.py +69 -70
  24. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/template-inputs.schema.json +12 -7
  25. package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/template.html +88 -19
  26. package/payload/premium-plugins/real-agent/specs/03-new-instruction.md +8 -12
  27. package/payload/server/{chunk-2IKQERHN.js → chunk-S6PQA6Q4.js} +43 -34
  28. package/payload/server/maxy-edge.js +1 -1
  29. package/payload/server/server.js +1 -1
  30. package/payload/platform/plugins/brochures/.claude-plugin/plugin.json +0 -8
  31. package/payload/platform/plugins/brochures/PLUGIN.md +0 -38
  32. package/payload/platform/plugins/brochures/commands/make-brochure.md +0 -11
  33. package/payload/platform/plugins/brochures/skills/a4-print-documents/SKILL.md +0 -478
  34. package/payload/platform/plugins/brochures/skills/brand-design/SKILL.md +0 -192
  35. package/payload/platform/plugins/brochures/skills/make-brochure/SKILL.md +0 -354
  36. package/payload/platform/plugins/brochures/skills/make-brochure/references/seller-brief-template.md +0 -115
  37. package/payload/platform/plugins/brochures/skills/property-brochure/SKILL.md +0 -142
  38. package/payload/platform/plugins/brochures/skills/property-brochure/references/build.md +0 -270
  39. package/payload/platform/plugins/brochures/skills/property-brochure/references/copy.md +0 -211
  40. package/payload/platform/plugins/brochures/skills/property-brochure/references/images.md +0 -166
  41. package/payload/platform/plugins/brochures/skills/property-brochure/references/index-landing.md +0 -376
  42. package/payload/platform/plugins/brochures/skills/property-brochure/references/index.html +0 -1288
  43. package/payload/platform/plugins/brochures/skills/property-brochure/references/placeholders.md +0 -250
  44. package/payload/platform/plugins/brochures/skills/property-brochure/references/registers.md +0 -47
  45. package/payload/platform/plugins/brochures/skills/property-brochure/references/seller-brief.md +0 -56
  46. package/payload/platform/plugins/brochures/skills/property-brochure/references/structure.md +0 -249
  47. package/payload/platform/plugins/brochures/skills/property-brochure/references/template.html +0 -2370
  48. package/payload/platform/plugins/brochures/skills/property-extract/SKILL.md +0 -372
  49. package/payload/platform/plugins/brochures/skills/property-market-report/SKILL.md +0 -100
  50. package/payload/platform/plugins/brochures/skills/property-market-report/references/render.py +0 -267
  51. package/payload/platform/plugins/brochures/skills/property-market-report/references/template.html +0 -266
  52. package/payload/platform/plugins/brochures/skills/property-socials/SKILL.md +0 -141
  53. package/payload/platform/plugins/buyers/.claude-plugin/plugin.json +0 -8
  54. package/payload/platform/plugins/buyers/PLUGIN.md +0 -34
  55. package/payload/platform/plugins/buyers/skills/buyer-feedback/SKILL.md +0 -109
  56. package/payload/platform/plugins/buyers/skills/buyer-management/SKILL.md +0 -42
  57. package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-qualification-questions.md +0 -16
  58. package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-qualification.md +0 -59
  59. package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-scripts.md +0 -63
  60. package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-working-scripts.md +0 -54
  61. package/payload/platform/plugins/buyers/skills/buyer-management/references/feedback-collection.md +0 -42
  62. package/payload/platform/plugins/buyers/skills/buyer-management/references/offer-capture.md +0 -38
  63. package/payload/platform/plugins/buyers/skills/buyer-management/references/viewing-booking.md +0 -32
  64. package/payload/platform/plugins/buyers/skills/buyer-management/references/viewing-management.md +0 -52
  65. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/SKILL.md +0 -407
  66. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/care-fees-guide.md +0 -68
  67. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/divorce-sales-guide.md +0 -61
  68. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/downsizing-guide.md +0 -45
  69. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/first-time-buyers.md +0 -92
  70. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/first-time-sellers.md +0 -78
  71. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/probate-guide.md +0 -53
  72. package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/upsizing-guide.md +0 -41
  73. package/payload/platform/plugins/buyers/skills/property-enquiry/SKILL.md +0 -126
  74. package/payload/platform/plugins/buyers/skills/viewing-management/SKILL.md +0 -111
  75. package/payload/platform/plugins/epc/.claude-plugin/plugin.json +0 -17
  76. package/payload/platform/plugins/epc/PLUGIN.md +0 -90
  77. package/payload/platform/plugins/epc/mcp/dist/index.d.ts +0 -2
  78. package/payload/platform/plugins/epc/mcp/dist/index.d.ts.map +0 -1
  79. package/payload/platform/plugins/epc/mcp/dist/index.js +0 -117
  80. package/payload/platform/plugins/epc/mcp/dist/index.js.map +0 -1
  81. package/payload/platform/plugins/epc/mcp/dist/lib/crypto.d.ts +0 -3
  82. package/payload/platform/plugins/epc/mcp/dist/lib/crypto.d.ts.map +0 -1
  83. package/payload/platform/plugins/epc/mcp/dist/lib/crypto.js +0 -72
  84. package/payload/platform/plugins/epc/mcp/dist/lib/crypto.js.map +0 -1
  85. package/payload/platform/plugins/epc/mcp/dist/lib/epc-api.d.ts +0 -60
  86. package/payload/platform/plugins/epc/mcp/dist/lib/epc-api.d.ts.map +0 -1
  87. package/payload/platform/plugins/epc/mcp/dist/lib/epc-api.js +0 -181
  88. package/payload/platform/plugins/epc/mcp/dist/lib/epc-api.js.map +0 -1
  89. package/payload/platform/plugins/epc/mcp/dist/lib/file-crypto.d.ts +0 -3
  90. package/payload/platform/plugins/epc/mcp/dist/lib/file-crypto.d.ts.map +0 -1
  91. package/payload/platform/plugins/epc/mcp/dist/lib/file-crypto.js +0 -49
  92. package/payload/platform/plugins/epc/mcp/dist/lib/file-crypto.js.map +0 -1
  93. package/payload/platform/plugins/epc/mcp/dist/lib/key-store.d.ts +0 -15
  94. package/payload/platform/plugins/epc/mcp/dist/lib/key-store.d.ts.map +0 -1
  95. package/payload/platform/plugins/epc/mcp/dist/lib/key-store.js +0 -130
  96. package/payload/platform/plugins/epc/mcp/dist/lib/key-store.js.map +0 -1
  97. package/payload/platform/plugins/epc/mcp/dist/lib/neo4j.d.ts +0 -5
  98. package/payload/platform/plugins/epc/mcp/dist/lib/neo4j.d.ts.map +0 -1
  99. package/payload/platform/plugins/epc/mcp/dist/lib/neo4j.js +0 -38
  100. package/payload/platform/plugins/epc/mcp/dist/lib/neo4j.js.map +0 -1
  101. package/payload/platform/plugins/epc/mcp/dist/tools/key-deregister.d.ts +0 -4
  102. package/payload/platform/plugins/epc/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  103. package/payload/platform/plugins/epc/mcp/dist/tools/key-deregister.js +0 -9
  104. package/payload/platform/plugins/epc/mcp/dist/tools/key-deregister.js.map +0 -1
  105. package/payload/platform/plugins/epc/mcp/dist/tools/key-list.d.ts +0 -4
  106. package/payload/platform/plugins/epc/mcp/dist/tools/key-list.d.ts.map +0 -1
  107. package/payload/platform/plugins/epc/mcp/dist/tools/key-list.js +0 -10
  108. package/payload/platform/plugins/epc/mcp/dist/tools/key-list.js.map +0 -1
  109. package/payload/platform/plugins/epc/mcp/dist/tools/key-register.d.ts +0 -5
  110. package/payload/platform/plugins/epc/mcp/dist/tools/key-register.d.ts.map +0 -1
  111. package/payload/platform/plugins/epc/mcp/dist/tools/key-register.js +0 -36
  112. package/payload/platform/plugins/epc/mcp/dist/tools/key-register.js.map +0 -1
  113. package/payload/platform/plugins/epc/mcp/dist/tools/lookup.d.ts +0 -10
  114. package/payload/platform/plugins/epc/mcp/dist/tools/lookup.d.ts.map +0 -1
  115. package/payload/platform/plugins/epc/mcp/dist/tools/lookup.js +0 -30
  116. package/payload/platform/plugins/epc/mcp/dist/tools/lookup.js.map +0 -1
  117. package/payload/platform/plugins/epc/mcp/package-lock.json +0 -2566
  118. package/payload/platform/plugins/epc/mcp/package.json +0 -21
  119. package/payload/platform/plugins/epc/mcp/src/__tests__/epc-api.test.ts +0 -251
  120. package/payload/platform/plugins/epc/mcp/src/__tests__/key-roundtrip.test.ts +0 -113
  121. package/payload/platform/plugins/epc/mcp/src/__tests__/lookup.test.ts +0 -181
  122. package/payload/platform/plugins/epc/mcp/src/__tests__/schema-parity.test.ts +0 -54
  123. package/payload/platform/plugins/epc/mcp/src/index.ts +0 -156
  124. package/payload/platform/plugins/epc/mcp/src/lib/crypto.ts +0 -79
  125. package/payload/platform/plugins/epc/mcp/src/lib/epc-api.ts +0 -241
  126. package/payload/platform/plugins/epc/mcp/src/lib/file-crypto.ts +0 -55
  127. package/payload/platform/plugins/epc/mcp/src/lib/key-store.ts +0 -172
  128. package/payload/platform/plugins/epc/mcp/src/lib/neo4j.ts +0 -47
  129. package/payload/platform/plugins/epc/mcp/src/tools/key-deregister.ts +0 -9
  130. package/payload/platform/plugins/epc/mcp/src/tools/key-list.ts +0 -10
  131. package/payload/platform/plugins/epc/mcp/src/tools/key-register.ts +0 -44
  132. package/payload/platform/plugins/epc/mcp/src/tools/lookup.ts +0 -43
  133. package/payload/platform/plugins/epc/mcp/tsconfig.json +0 -20
  134. package/payload/platform/plugins/epc/mcp/vitest.config.ts +0 -8
  135. package/payload/platform/plugins/estate-business/.claude-plugin/plugin.json +0 -8
  136. package/payload/platform/plugins/estate-business/PLUGIN.md +0 -64
  137. package/payload/platform/plugins/estate-business/skills/business-growth/SKILL.md +0 -133
  138. package/payload/platform/plugins/estate-business/skills/business-growth/references/buy-back-your-time.md +0 -37
  139. package/payload/platform/plugins/estate-business/skills/business-growth/references/firewave-gost-scorecards.md +0 -14
  140. package/payload/platform/plugins/estate-business/skills/business-growth/references/keller-org-model.md +0 -17
  141. package/payload/platform/plugins/estate-business/skills/business-growth/references/lencioni-team-models.md +0 -22
  142. package/payload/platform/plugins/estate-business/skills/business-growth/references/listing-management-system.md +0 -11
  143. package/payload/platform/plugins/estate-business/skills/business-growth/references/net-figure-form.md +0 -11
  144. package/payload/platform/plugins/estate-business/skills/business-growth/references/serhant-bizinbox-notes.md +0 -13
  145. package/payload/platform/plugins/estate-business/skills/business-growth/references/team-roles-commission.md +0 -14
  146. package/payload/platform/plugins/estate-business/skills/business-growth/references/va-2026-ops.md +0 -43
  147. package/payload/platform/plugins/estate-business/skills/business-growth/references/wingman-structure.md +0 -13
  148. package/payload/platform/plugins/estate-business/skills/business-operations/SKILL.md +0 -32
  149. package/payload/platform/plugins/estate-business/skills/business-operations/references/crm-systems.md +0 -57
  150. package/payload/platform/plugins/estate-business/skills/business-operations/references/hiring-guide.md +0 -59
  151. package/payload/platform/plugins/estate-business/skills/business-operations/references/impact-framework.md +0 -47
  152. package/payload/platform/plugins/estate-business/skills/business-operations/references/minutes-equal-money.md +0 -55
  153. package/payload/platform/plugins/estate-business/skills/business-operations/references/team-management.md +0 -48
  154. package/payload/platform/plugins/estate-business/skills/commission-calculator/SKILL.md +0 -40
  155. package/payload/platform/plugins/estate-business/skills/exp-partnership/SKILL.md +0 -52
  156. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/12-reasons.md +0 -39
  157. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/95-5-system.md +0 -66
  158. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/agent-attraction-scripts.md +0 -90
  159. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/business-partnership.md +0 -92
  160. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/exp-model-overview.md +0 -66
  161. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/model-comparison.md +0 -66
  162. package/payload/platform/plugins/estate-business/skills/exp-partnership/references/revenue-share-explained.md +0 -57
  163. package/payload/platform/plugins/estate-business/skills/month-end-close/SKILL.md +0 -69
  164. package/payload/platform/plugins/estate-business/skills/payment-batch-stager/SKILL.md +0 -42
  165. package/payload/platform/plugins/estate-business/skills/period-reconciler/SKILL.md +0 -42
  166. package/payload/platform/plugins/estate-business/skills/personal-branding/SKILL.md +0 -117
  167. package/payload/platform/plugins/estate-business/skills/personal-branding/references/attraction-agent-notes.md +0 -31
  168. package/payload/platform/plugins/estate-business/skills/personal-branding/references/attraction-agent.md +0 -58
  169. package/payload/platform/plugins/estate-business/skills/personal-branding/references/authenticity-boundaries.md +0 -28
  170. package/payload/platform/plugins/estate-business/skills/personal-branding/references/become-a-brand-leader-notes.md +0 -19
  171. package/payload/platform/plugins/estate-business/skills/personal-branding/references/blast-formula.md +0 -42
  172. package/payload/platform/plugins/estate-business/skills/personal-branding/references/brand-leader.md +0 -48
  173. package/payload/platform/plugins/estate-business/skills/personal-branding/references/brand-strategy-system.md +0 -59
  174. package/payload/platform/plugins/estate-business/skills/personal-branding/references/content-engine.md +0 -49
  175. package/payload/platform/plugins/estate-business/skills/personal-branding/references/firewave-blast-and-blogging.md +0 -23
  176. package/payload/platform/plugins/estate-business/skills/personal-branding/references/gary-v-content.md +0 -52
  177. package/payload/platform/plugins/estate-business/skills/personal-branding/references/gary-v-principles.md +0 -20
  178. package/payload/platform/plugins/estate-business/skills/personal-branding/references/oversubscribed-positioning.md +0 -18
  179. package/payload/platform/plugins/estate-business/skills/personal-branding/references/platforms.md +0 -41
  180. package/payload/platform/plugins/estate-business/skills/personal-branding/references/priestley-oversubscribed.md +0 -54
  181. package/payload/platform/plugins/estate-business/skills/personal-branding/references/storeys-style-examples.md +0 -25
  182. package/payload/platform/plugins/estate-business/skills/personal-branding/references/visual-identity.md +0 -27
  183. package/payload/platform/plugins/estate-coaching/.claude-plugin/plugin.json +0 -8
  184. package/payload/platform/plugins/estate-coaching/PLUGIN.md +0 -54
  185. package/payload/platform/plugins/estate-coaching/skills/agent-performance/SKILL.md +0 -371
  186. package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/atomic-habits.md +0 -52
  187. package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/daily-routine-scorecard.md +0 -104
  188. package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/hp6-model.md +0 -63
  189. package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/twelve-week-year.md +0 -71
  190. package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/SKILL.md +0 -36
  191. package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/coaching-boundaries.md +0 -56
  192. package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/feedback-framework.md +0 -61
  193. package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/performance-framework.md +0 -109
  194. package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/SKILL.md +0 -421
  195. package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/coaching-exercises.md +0 -86
  196. package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/goal-setting.md +0 -78
  197. package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/one-to-one-framework.md +0 -92
  198. package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/soi-workbook.md +0 -103
  199. package/payload/platform/plugins/estate-coaching/skills/serhant-training/SKILL.md +0 -410
  200. package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/agent-training-guide.md +0 -70
  201. package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/business-in-a-box.md +0 -72
  202. package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/buyers-guide.md +0 -53
  203. package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/codo-method.md +0 -72
  204. package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/website-planning-guide.md +0 -79
  205. package/payload/platform/plugins/estate-sales/.claude-plugin/plugin.json +0 -8
  206. package/payload/platform/plugins/estate-sales/PLUGIN.md +0 -52
  207. package/payload/platform/plugins/estate-sales/skills/chase-progression/SKILL.md +0 -107
  208. package/payload/platform/plugins/estate-sales/skills/negotiation/SKILL.md +0 -35
  209. package/payload/platform/plugins/estate-sales/skills/negotiation/references/deal-saving.md +0 -47
  210. package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-deep-guide.md +0 -64
  211. package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-prep-principles.md +0 -29
  212. package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-techniques.md +0 -42
  213. package/payload/platform/plugins/estate-sales/skills/negotiation/references/offer-presentation.md +0 -43
  214. package/payload/platform/plugins/estate-sales/skills/risk-scorer/SKILL.md +0 -42
  215. package/payload/platform/plugins/estate-sales/skills/sales-closer/SKILL.md +0 -24
  216. package/payload/platform/plugins/estate-sales/skills/sales-closer/references/serhant-emotion-stages.md +0 -36
  217. package/payload/platform/plugins/estate-sales/skills/sales-discovery/SKILL.md +0 -30
  218. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/chris-voss-discovery.md +0 -88
  219. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/firewave-gost-journey.md +0 -68
  220. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/phil-jones-openers.md +0 -78
  221. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/pre-listing-checklist.md +0 -77
  222. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/serhant-improv.md +0 -22
  223. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/tom-ferry-discovery.md +0 -103
  224. package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/vendor-motivation-competitor.md +0 -52
  225. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/SKILL.md +0 -29
  226. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/chris-voss-negotiation.md +0 -70
  227. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/phil-jones-price-words.md +0 -40
  228. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/serhant-negotiation-plus.md +0 -55
  229. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/tom-panos-commission-pricing.md +0 -57
  230. package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/tony-morris-questioning.md +0 -54
  231. package/payload/platform/plugins/estate-sales/skills/sales-progression/SKILL.md +0 -27
  232. package/payload/platform/plugins/estate-sales/skills/sales-progression/references/conveyancing-guide.md +0 -54
  233. package/payload/platform/plugins/estate-sales/skills/sales-progression/references/transaction-tracking.md +0 -66
  234. package/payload/platform/plugins/estate-teaching/.claude-plugin/plugin.json +0 -8
  235. package/payload/platform/plugins/estate-teaching/PLUGIN.md +0 -30
  236. package/payload/platform/plugins/estate-teaching/skills/content-directory/SKILL.md +0 -39
  237. package/payload/platform/plugins/estate-teaching/skills/content-directory/references/module-delivery.md +0 -65
  238. package/payload/platform/plugins/estate-teaching/skills/content-directory/references/progress-tracking.md +0 -47
  239. package/payload/platform/plugins/leads/.claude-plugin/plugin.json +0 -8
  240. package/payload/platform/plugins/leads/PLUGIN.md +0 -61
  241. package/payload/platform/plugins/leads/skills/chain-progression-tracker/SKILL.md +0 -51
  242. package/payload/platform/plugins/leads/skills/diary-builder/SKILL.md +0 -38
  243. package/payload/platform/plugins/leads/skills/enquiry-triage/SKILL.md +0 -36
  244. package/payload/platform/plugins/leads/skills/lead-nurturing/SKILL.md +0 -137
  245. package/payload/platform/plugins/leads/skills/lead-nurturing/references/buyer-search-letter.md +0 -28
  246. package/payload/platform/plugins/leads/skills/lead-nurturing/references/buyer-search-letters.md +0 -37
  247. package/payload/platform/plugins/leads/skills/lead-nurturing/references/database-reactivation.md +0 -30
  248. package/payload/platform/plugins/leads/skills/lead-nurturing/references/email-nurture-sequences.md +0 -45
  249. package/payload/platform/plugins/leads/skills/lead-nurturing/references/facebook-referrals.md +0 -30
  250. package/payload/platform/plugins/leads/skills/lead-nurturing/references/firewave-email-nurture-sequences.md +0 -41
  251. package/payload/platform/plugins/leads/skills/lead-nurturing/references/keller-33-touch.md +0 -34
  252. package/payload/platform/plugins/leads/skills/lead-nurturing/references/neighbour-letters.md +0 -31
  253. package/payload/platform/plugins/leads/skills/lead-nurturing/references/neighbour-notification-letter.md +0 -20
  254. package/payload/platform/plugins/leads/skills/lead-nurturing/references/ofi-follow-up-dialogue.md +0 -22
  255. package/payload/platform/plugins/leads/skills/lead-nurturing/references/ofi-follow-up.md +0 -26
  256. package/payload/platform/plugins/leads/skills/lead-nurturing/references/serhant-three-fs-plus.md +0 -21
  257. package/payload/platform/plugins/leads/skills/lead-nurturing/references/sharran-10x10x10.md +0 -18
  258. package/payload/platform/plugins/leads/skills/lead-nurturing/references/sms-templates.md +0 -40
  259. package/payload/platform/plugins/leads/skills/lead-nurturing/references/sphere-of-influence-notes.md +0 -34
  260. package/payload/platform/plugins/leads/skills/lead-nurturing/references/sphere-of-influence.md +0 -60
  261. package/payload/platform/plugins/leads/skills/lead-nurturing/references/tom-panos-sms-templates.md +0 -59
  262. package/payload/platform/plugins/leads/skills/morning-round/SKILL.md +0 -72
  263. package/payload/platform/plugins/leads/skills/prospecting/SKILL.md +0 -33
  264. package/payload/platform/plugins/leads/skills/prospecting/references/database-matching.md +0 -30
  265. package/payload/platform/plugins/leads/skills/prospecting/references/database-value.md +0 -53
  266. package/payload/platform/plugins/leads/skills/prospecting/references/prospecting-dialogues.md +0 -24
  267. package/payload/platform/plugins/leads/skills/prospecting/references/reactivation.md +0 -34
  268. package/payload/platform/plugins/listings/.claude-plugin/plugin.json +0 -8
  269. package/payload/platform/plugins/listings/PLUGIN.md +0 -102
  270. package/payload/platform/plugins/listings/skills/comparable-finder/SKILL.md +0 -52
  271. package/payload/platform/plugins/listings/skills/epc-checker/SKILL.md +0 -38
  272. package/payload/platform/plugins/listings/skills/home-preparation/SKILL.md +0 -28
  273. package/payload/platform/plugins/listings/skills/home-preparation/references/kerb-appeal.md +0 -38
  274. package/payload/platform/plugins/listings/skills/home-preparation/references/photo-day.md +0 -59
  275. package/payload/platform/plugins/listings/skills/home-preparation/references/situational-tips.md +0 -50
  276. package/payload/platform/plugins/listings/skills/home-preparation/references/staging-guide.md +0 -52
  277. package/payload/platform/plugins/listings/skills/listing-copy-writer/SKILL.md +0 -55
  278. package/payload/platform/plugins/listings/skills/listing-presentation/SKILL.md +0 -286
  279. package/payload/platform/plugins/listings/skills/listing-presentation/references/booking-script.md +0 -51
  280. package/payload/platform/plugins/listings/skills/listing-presentation/references/objection-scripts.md +0 -193
  281. package/payload/platform/plugins/listings/skills/listing-presentation/references/penhaul-presentation.md +0 -123
  282. package/payload/platform/plugins/listings/skills/listing-presentation/references/pre-listing-kit.md +0 -139
  283. package/payload/platform/plugins/listings/skills/listing-presentation/references/set-to-sell.md +0 -55
  284. package/payload/platform/plugins/listings/skills/listing-presentation/references/sharran-frameworks.md +0 -107
  285. package/payload/platform/plugins/listings/skills/local-market-stats/SKILL.md +0 -33
  286. package/payload/platform/plugins/listings/skills/new-instruction/SKILL.md +0 -78
  287. package/payload/platform/plugins/listings/skills/particulars-builder/SKILL.md +0 -48
  288. package/payload/platform/plugins/listings/skills/portal-launch-scheduler/SKILL.md +0 -49
  289. package/payload/platform/plugins/listings/skills/pricing-scenario-builder/SKILL.md +0 -35
  290. package/payload/platform/plugins/listings/skills/property-marketing/SKILL.md +0 -337
  291. package/payload/platform/plugins/listings/skills/property-marketing/references/auction-report-template.md +0 -41
  292. package/payload/platform/plugins/listings/skills/property-marketing/references/coming-soon-campaign.md +0 -43
  293. package/payload/platform/plugins/listings/skills/property-marketing/references/direct-mail-templates.md +0 -121
  294. package/payload/platform/plugins/listings/skills/property-marketing/references/eoi-form-template.md +0 -62
  295. package/payload/platform/plugins/listings/skills/property-marketing/references/monthly-scorecard.md +0 -63
  296. package/payload/platform/plugins/listings/skills/supplier-booker/SKILL.md +0 -39
  297. package/payload/platform/plugins/listings/skills/talk-track-composer/SKILL.md +0 -36
  298. package/payload/platform/plugins/listings/skills/terms-of-business-drafter/SKILL.md +0 -54
  299. package/payload/platform/plugins/listings/skills/valuation-prep/SKILL.md +0 -69
  300. package/payload/platform/plugins/loop/.claude-plugin/plugin.json +0 -17
  301. package/payload/platform/plugins/loop/PLUGIN.md +0 -260
  302. package/payload/platform/plugins/loop/mcp/dist/index.d.ts +0 -2
  303. package/payload/platform/plugins/loop/mcp/dist/index.d.ts.map +0 -1
  304. package/payload/platform/plugins/loop/mcp/dist/index.js +0 -320
  305. package/payload/platform/plugins/loop/mcp/dist/index.js.map +0 -1
  306. package/payload/platform/plugins/loop/mcp/dist/lib/crypto.d.ts +0 -10
  307. package/payload/platform/plugins/loop/mcp/dist/lib/crypto.d.ts.map +0 -1
  308. package/payload/platform/plugins/loop/mcp/dist/lib/crypto.js +0 -88
  309. package/payload/platform/plugins/loop/mcp/dist/lib/crypto.js.map +0 -1
  310. package/payload/platform/plugins/loop/mcp/dist/lib/file-crypto.d.ts +0 -3
  311. package/payload/platform/plugins/loop/mcp/dist/lib/file-crypto.d.ts.map +0 -1
  312. package/payload/platform/plugins/loop/mcp/dist/lib/file-crypto.js +0 -48
  313. package/payload/platform/plugins/loop/mcp/dist/lib/file-crypto.js.map +0 -1
  314. package/payload/platform/plugins/loop/mcp/dist/lib/key-store.d.ts +0 -22
  315. package/payload/platform/plugins/loop/mcp/dist/lib/key-store.d.ts.map +0 -1
  316. package/payload/platform/plugins/loop/mcp/dist/lib/key-store.js +0 -165
  317. package/payload/platform/plugins/loop/mcp/dist/lib/key-store.js.map +0 -1
  318. package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.d.ts +0 -82
  319. package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +0 -1
  320. package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.js +0 -392
  321. package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.js.map +0 -1
  322. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.d.ts +0 -5
  323. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +0 -1
  324. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js +0 -40
  325. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js.map +0 -1
  326. package/payload/platform/plugins/loop/mcp/dist/tools/auto-responder.d.ts +0 -12
  327. package/payload/platform/plugins/loop/mcp/dist/tools/auto-responder.d.ts.map +0 -1
  328. package/payload/platform/plugins/loop/mcp/dist/tools/auto-responder.js +0 -22
  329. package/payload/platform/plugins/loop/mcp/dist/tools/auto-responder.js.map +0 -1
  330. package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +0 -10
  331. package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +0 -1
  332. package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.js +0 -24
  333. package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.js.map +0 -1
  334. package/payload/platform/plugins/loop/mcp/dist/tools/feedback.d.ts +0 -16
  335. package/payload/platform/plugins/loop/mcp/dist/tools/feedback.d.ts.map +0 -1
  336. package/payload/platform/plugins/loop/mcp/dist/tools/feedback.js +0 -35
  337. package/payload/platform/plugins/loop/mcp/dist/tools/feedback.js.map +0 -1
  338. package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.d.ts +0 -5
  339. package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  340. package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.js +0 -9
  341. package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.js.map +0 -1
  342. package/payload/platform/plugins/loop/mcp/dist/tools/key-list.d.ts +0 -4
  343. package/payload/platform/plugins/loop/mcp/dist/tools/key-list.d.ts.map +0 -1
  344. package/payload/platform/plugins/loop/mcp/dist/tools/key-list.js +0 -14
  345. package/payload/platform/plugins/loop/mcp/dist/tools/key-list.js.map +0 -1
  346. package/payload/platform/plugins/loop/mcp/dist/tools/key-register.d.ts +0 -9
  347. package/payload/platform/plugins/loop/mcp/dist/tools/key-register.d.ts.map +0 -1
  348. package/payload/platform/plugins/loop/mcp/dist/tools/key-register.js +0 -43
  349. package/payload/platform/plugins/loop/mcp/dist/tools/key-register.js.map +0 -1
  350. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +0 -6
  351. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +0 -1
  352. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.js +0 -7
  353. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +0 -1
  354. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +0 -9
  355. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +0 -1
  356. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.js +0 -16
  357. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +0 -1
  358. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +0 -15
  359. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +0 -1
  360. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.js +0 -11
  361. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +0 -1
  362. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.d.ts +0 -10
  363. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +0 -1
  364. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.js +0 -39
  365. package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.js.map +0 -1
  366. package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.d.ts +0 -9
  367. package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +0 -1
  368. package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.js +0 -125
  369. package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.js.map +0 -1
  370. package/payload/platform/plugins/loop/mcp/dist/tools/people-search.d.ts +0 -18
  371. package/payload/platform/plugins/loop/mcp/dist/tools/people-search.d.ts.map +0 -1
  372. package/payload/platform/plugins/loop/mcp/dist/tools/people-search.js +0 -87
  373. package/payload/platform/plugins/loop/mcp/dist/tools/people-search.js.map +0 -1
  374. package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.d.ts +0 -10
  375. package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +0 -1
  376. package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.js +0 -82
  377. package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.js.map +0 -1
  378. package/payload/platform/plugins/loop/mcp/dist/tools/property-intent.d.ts +0 -33
  379. package/payload/platform/plugins/loop/mcp/dist/tools/property-intent.d.ts.map +0 -1
  380. package/payload/platform/plugins/loop/mcp/dist/tools/property-intent.js +0 -19
  381. package/payload/platform/plugins/loop/mcp/dist/tools/property-intent.js.map +0 -1
  382. package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.d.ts +0 -11
  383. package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +0 -1
  384. package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.js +0 -26
  385. package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.js.map +0 -1
  386. package/payload/platform/plugins/loop/mcp/dist/tools/property-request.d.ts +0 -15
  387. package/payload/platform/plugins/loop/mcp/dist/tools/property-request.d.ts.map +0 -1
  388. package/payload/platform/plugins/loop/mcp/dist/tools/property-request.js +0 -11
  389. package/payload/platform/plugins/loop/mcp/dist/tools/property-request.js.map +0 -1
  390. package/payload/platform/plugins/loop/mcp/dist/tools/property-search.d.ts +0 -16
  391. package/payload/platform/plugins/loop/mcp/dist/tools/property-search.d.ts.map +0 -1
  392. package/payload/platform/plugins/loop/mcp/dist/tools/property-search.js +0 -41
  393. package/payload/platform/plugins/loop/mcp/dist/tools/property-search.js.map +0 -1
  394. package/payload/platform/plugins/loop/mcp/dist/tools/property-sold.d.ts +0 -9
  395. package/payload/platform/plugins/loop/mcp/dist/tools/property-sold.d.ts.map +0 -1
  396. package/payload/platform/plugins/loop/mcp/dist/tools/property-sold.js +0 -19
  397. package/payload/platform/plugins/loop/mcp/dist/tools/property-sold.js.map +0 -1
  398. package/payload/platform/plugins/loop/mcp/dist/tools/supplier.d.ts +0 -13
  399. package/payload/platform/plugins/loop/mcp/dist/tools/supplier.d.ts.map +0 -1
  400. package/payload/platform/plugins/loop/mcp/dist/tools/supplier.js +0 -49
  401. package/payload/platform/plugins/loop/mcp/dist/tools/supplier.js.map +0 -1
  402. package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.d.ts +0 -7
  403. package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +0 -1
  404. package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.js +0 -19
  405. package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.js.map +0 -1
  406. package/payload/platform/plugins/loop/mcp/dist/tools/team-info.d.ts +0 -5
  407. package/payload/platform/plugins/loop/mcp/dist/tools/team-info.d.ts.map +0 -1
  408. package/payload/platform/plugins/loop/mcp/dist/tools/team-info.js +0 -32
  409. package/payload/platform/plugins/loop/mcp/dist/tools/team-info.js.map +0 -1
  410. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.d.ts +0 -14
  411. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +0 -1
  412. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.js +0 -11
  413. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.js.map +0 -1
  414. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +0 -9
  415. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +0 -1
  416. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.js +0 -85
  417. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.js.map +0 -1
  418. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.d.ts +0 -13
  419. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +0 -1
  420. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.js +0 -44
  421. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.js.map +0 -1
  422. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.d.ts +0 -14
  423. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +0 -1
  424. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.js +0 -18
  425. package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.js.map +0 -1
  426. package/payload/platform/plugins/loop/mcp/package-lock.json +0 -2549
  427. package/payload/platform/plugins/loop/mcp/package.json +0 -21
  428. package/payload/platform/plugins/loop/mcp/src/__tests__/loop-swagger.snapshot.json +0 -26467
  429. package/payload/platform/plugins/loop/mcp/src/__tests__/new-tool-shape.test.ts +0 -99
  430. package/payload/platform/plugins/loop/mcp/src/__tests__/plugin-md-time-doctrine.test.ts +0 -132
  431. package/payload/platform/plugins/loop/mcp/src/__tests__/swagger-write-coverage.test.ts +0 -154
  432. package/payload/platform/plugins/loop/mcp/src/index.ts +0 -498
  433. package/payload/platform/plugins/loop/mcp/src/lib/crypto.ts +0 -105
  434. package/payload/platform/plugins/loop/mcp/src/lib/file-crypto.ts +0 -54
  435. package/payload/platform/plugins/loop/mcp/src/lib/key-store.ts +0 -221
  436. package/payload/platform/plugins/loop/mcp/src/lib/loop-api.ts +0 -567
  437. package/payload/platform/plugins/loop/mcp/src/lib/neo4j.ts +0 -51
  438. package/payload/platform/plugins/loop/mcp/src/tools/auto-responder.ts +0 -80
  439. package/payload/platform/plugins/loop/mcp/src/tools/customer-preferences.ts +0 -66
  440. package/payload/platform/plugins/loop/mcp/src/tools/feedback.ts +0 -86
  441. package/payload/platform/plugins/loop/mcp/src/tools/key-deregister.ts +0 -12
  442. package/payload/platform/plugins/loop/mcp/src/tools/key-list.ts +0 -19
  443. package/payload/platform/plugins/loop/mcp/src/tools/key-register.ts +0 -70
  444. package/payload/platform/plugins/loop/mcp/src/tools/marketing-enquiry.ts +0 -27
  445. package/payload/platform/plugins/loop/mcp/src/tools/marketing-match-batch.ts +0 -53
  446. package/payload/platform/plugins/loop/mcp/src/tools/marketing-match-request.ts +0 -42
  447. package/payload/platform/plugins/loop/mcp/src/tools/marketing-match.ts +0 -84
  448. package/payload/platform/plugins/loop/mcp/src/tools/people-detail.ts +0 -245
  449. package/payload/platform/plugins/loop/mcp/src/tools/people-search.ts +0 -180
  450. package/payload/platform/plugins/loop/mcp/src/tools/property-detail.ts +0 -145
  451. package/payload/platform/plugins/loop/mcp/src/tools/property-intent.ts +0 -84
  452. package/payload/platform/plugins/loop/mcp/src/tools/property-listed.ts +0 -81
  453. package/payload/platform/plugins/loop/mcp/src/tools/property-search.ts +0 -92
  454. package/payload/platform/plugins/loop/mcp/src/tools/property-sold.ts +0 -67
  455. package/payload/platform/plugins/loop/mcp/src/tools/supplier.ts +0 -129
  456. package/payload/platform/plugins/loop/mcp/src/tools/team-availability.ts +0 -52
  457. package/payload/platform/plugins/loop/mcp/src/tools/team-info.ts +0 -95
  458. package/payload/platform/plugins/loop/mcp/src/tools/viewing-create.ts +0 -41
  459. package/payload/platform/plugins/loop/mcp/src/tools/viewing-detail.ts +0 -171
  460. package/payload/platform/plugins/loop/mcp/src/tools/viewing-search.ts +0 -92
  461. package/payload/platform/plugins/loop/mcp/src/tools/viewing-update.ts +0 -53
  462. package/payload/platform/plugins/loop/mcp/tsconfig.json +0 -20
  463. package/payload/platform/plugins/loop/mcp/vitest.config.ts +0 -9
  464. package/payload/platform/plugins/loop/skills/compliance-flag-checker/SKILL.md +0 -53
  465. package/payload/platform/plugins/loop/skills/priority-ranker/SKILL.md +0 -40
  466. package/payload/platform/plugins/loop/skills/tone-matched-drafter/SKILL.md +0 -53
  467. package/payload/platform/plugins/loop/skills/variance-narrator/SKILL.md +0 -50
  468. package/payload/platform/plugins/loop/skills/vendor-research/SKILL.md +0 -54
  469. package/payload/platform/plugins/preval/.claude-plugin/plugin.json +0 -8
  470. package/payload/platform/plugins/preval/PLUGIN.md +0 -55
  471. package/payload/platform/plugins/preval/hooks/preval-prompt-required.sh +0 -140
  472. package/payload/platform/plugins/preval/skills/property-preval/SKILL.md +0 -176
  473. package/payload/platform/plugins/preval/skills/property-preval/references/__tests__/adherence.test.py +0 -373
  474. package/payload/platform/plugins/preval/skills/property-preval/references/render.py +0 -815
  475. package/payload/platform/plugins/preval/skills/property-preval/references/template-inputs.schema.json +0 -199
  476. package/payload/platform/plugins/preval/skills/property-preval/references/template.html +0 -312
  477. package/payload/platform/plugins/property-data/.claude-plugin/plugin.json +0 -17
  478. package/payload/platform/plugins/property-data/PLUGIN.md +0 -180
  479. package/payload/platform/plugins/property-data/mcp/dist/index.d.ts +0 -2
  480. package/payload/platform/plugins/property-data/mcp/dist/index.d.ts.map +0 -1
  481. package/payload/platform/plugins/property-data/mcp/dist/index.js +0 -236
  482. package/payload/platform/plugins/property-data/mcp/dist/index.js.map +0 -1
  483. package/payload/platform/plugins/property-data/mcp/dist/lib/crypto.d.ts +0 -3
  484. package/payload/platform/plugins/property-data/mcp/dist/lib/crypto.d.ts.map +0 -1
  485. package/payload/platform/plugins/property-data/mcp/dist/lib/crypto.js +0 -72
  486. package/payload/platform/plugins/property-data/mcp/dist/lib/crypto.js.map +0 -1
  487. package/payload/platform/plugins/property-data/mcp/dist/lib/file-crypto.d.ts +0 -3
  488. package/payload/platform/plugins/property-data/mcp/dist/lib/file-crypto.d.ts.map +0 -1
  489. package/payload/platform/plugins/property-data/mcp/dist/lib/file-crypto.js +0 -49
  490. package/payload/platform/plugins/property-data/mcp/dist/lib/file-crypto.js.map +0 -1
  491. package/payload/platform/plugins/property-data/mcp/dist/lib/key-store.d.ts +0 -15
  492. package/payload/platform/plugins/property-data/mcp/dist/lib/key-store.d.ts.map +0 -1
  493. package/payload/platform/plugins/property-data/mcp/dist/lib/key-store.js +0 -135
  494. package/payload/platform/plugins/property-data/mcp/dist/lib/key-store.js.map +0 -1
  495. package/payload/platform/plugins/property-data/mcp/dist/lib/neo4j.d.ts +0 -5
  496. package/payload/platform/plugins/property-data/mcp/dist/lib/neo4j.d.ts.map +0 -1
  497. package/payload/platform/plugins/property-data/mcp/dist/lib/neo4j.js +0 -38
  498. package/payload/platform/plugins/property-data/mcp/dist/lib/neo4j.js.map +0 -1
  499. package/payload/platform/plugins/property-data/mcp/dist/lib/propertydata-api.d.ts +0 -28
  500. package/payload/platform/plugins/property-data/mcp/dist/lib/propertydata-api.d.ts.map +0 -1
  501. package/payload/platform/plugins/property-data/mcp/dist/lib/propertydata-api.js +0 -101
  502. package/payload/platform/plugins/property-data/mcp/dist/lib/propertydata-api.js.map +0 -1
  503. package/payload/platform/plugins/property-data/mcp/dist/tools/endpoints.d.ts +0 -24
  504. package/payload/platform/plugins/property-data/mcp/dist/tools/endpoints.d.ts.map +0 -1
  505. package/payload/platform/plugins/property-data/mcp/dist/tools/endpoints.js +0 -33
  506. package/payload/platform/plugins/property-data/mcp/dist/tools/endpoints.js.map +0 -1
  507. package/payload/platform/plugins/property-data/mcp/dist/tools/key-deregister.d.ts +0 -4
  508. package/payload/platform/plugins/property-data/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  509. package/payload/platform/plugins/property-data/mcp/dist/tools/key-deregister.js +0 -9
  510. package/payload/platform/plugins/property-data/mcp/dist/tools/key-deregister.js.map +0 -1
  511. package/payload/platform/plugins/property-data/mcp/dist/tools/key-list.d.ts +0 -4
  512. package/payload/platform/plugins/property-data/mcp/dist/tools/key-list.d.ts.map +0 -1
  513. package/payload/platform/plugins/property-data/mcp/dist/tools/key-list.js +0 -10
  514. package/payload/platform/plugins/property-data/mcp/dist/tools/key-list.js.map +0 -1
  515. package/payload/platform/plugins/property-data/mcp/dist/tools/key-register.d.ts +0 -5
  516. package/payload/platform/plugins/property-data/mcp/dist/tools/key-register.d.ts.map +0 -1
  517. package/payload/platform/plugins/property-data/mcp/dist/tools/key-register.js +0 -50
  518. package/payload/platform/plugins/property-data/mcp/dist/tools/key-register.js.map +0 -1
  519. package/payload/platform/plugins/property-data/mcp/package-lock.json +0 -2566
  520. package/payload/platform/plugins/property-data/mcp/package.json +0 -21
  521. package/payload/platform/plugins/property-data/mcp/src/__tests__/endpoints.test.ts +0 -252
  522. package/payload/platform/plugins/property-data/mcp/src/__tests__/key-roundtrip.test.ts +0 -107
  523. package/payload/platform/plugins/property-data/mcp/src/__tests__/propertydata-api.test.ts +0 -184
  524. package/payload/platform/plugins/property-data/mcp/src/__tests__/schema-parity.test.ts +0 -62
  525. package/payload/platform/plugins/property-data/mcp/src/index.ts +0 -409
  526. package/payload/platform/plugins/property-data/mcp/src/lib/crypto.ts +0 -79
  527. package/payload/platform/plugins/property-data/mcp/src/lib/file-crypto.ts +0 -55
  528. package/payload/platform/plugins/property-data/mcp/src/lib/key-store.ts +0 -181
  529. package/payload/platform/plugins/property-data/mcp/src/lib/neo4j.ts +0 -47
  530. package/payload/platform/plugins/property-data/mcp/src/lib/propertydata-api.ts +0 -120
  531. package/payload/platform/plugins/property-data/mcp/src/tools/endpoints.ts +0 -47
  532. package/payload/platform/plugins/property-data/mcp/src/tools/key-deregister.ts +0 -9
  533. package/payload/platform/plugins/property-data/mcp/src/tools/key-list.ts +0 -10
  534. package/payload/platform/plugins/property-data/mcp/src/tools/key-register.ts +0 -54
  535. package/payload/platform/plugins/property-data/mcp/tsconfig.json +0 -20
  536. package/payload/platform/plugins/property-data/mcp/vitest.config.ts +0 -8
  537. package/payload/platform/plugins/property-data/skills/property-data/SKILL.md +0 -77
  538. package/payload/platform/plugins/vendors/.claude-plugin/plugin.json +0 -8
  539. package/payload/platform/plugins/vendors/PLUGIN.md +0 -33
  540. package/payload/platform/plugins/vendors/skills/vendor-communication/SKILL.md +0 -42
  541. package/payload/platform/plugins/vendors/skills/vendor-communication/references/fee-protection-and-agenda.md +0 -28
  542. package/payload/platform/plugins/vendors/skills/vendor-communication/references/listing-scripts.md +0 -44
  543. package/payload/platform/plugins/vendors/skills/vendor-communication/references/negotiation-deep-guide.md +0 -70
  544. package/payload/platform/plugins/vendors/skills/vendor-communication/references/price-alignment-scripts.md +0 -33
  545. package/payload/platform/plugins/vendors/skills/vendor-communication/references/price-alignment.md +0 -34
  546. package/payload/platform/plugins/vendors/skills/vendor-communication/references/scenario-scripts.md +0 -38
  547. package/payload/platform/plugins/vendors/skills/vendor-communication/references/seller-engagement.md +0 -51
  548. package/payload/platform/plugins/vendors/skills/vendor-communication/references/valuation-booking.md +0 -76
  549. package/payload/platform/plugins/vendors/skills/vendor-communication/references/vendor-scripts.md +0 -63
  550. package/payload/platform/plugins/vendors/skills/vendor-communication/references/vendor-updates.md +0 -41
  551. package/payload/platform/plugins/vendors/skills/vendor-updates/SKILL.md +0 -153
  552. package/payload/premium-plugins/real-agent/plugins/epc/PLUGIN.md +0 -90
  553. package/payload/premium-plugins/real-agent/plugins/epc/mcp/package-lock.json +0 -2566
  554. package/payload/premium-plugins/real-agent/plugins/epc/mcp/package.json +0 -21
  555. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/__tests__/epc-api.test.ts +0 -251
  556. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/__tests__/key-roundtrip.test.ts +0 -113
  557. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/__tests__/lookup.test.ts +0 -181
  558. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/__tests__/schema-parity.test.ts +0 -54
  559. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/index.ts +0 -156
  560. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/lib/crypto.ts +0 -79
  561. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/lib/epc-api.ts +0 -241
  562. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/lib/file-crypto.ts +0 -55
  563. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/lib/key-store.ts +0 -172
  564. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/lib/neo4j.ts +0 -47
  565. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/tools/key-deregister.ts +0 -9
  566. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/tools/key-list.ts +0 -10
  567. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/tools/key-register.ts +0 -44
  568. package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/tools/lookup.ts +0 -43
  569. package/payload/premium-plugins/real-agent/plugins/epc/mcp/tsconfig.json +0 -20
  570. package/payload/premium-plugins/real-agent/plugins/epc/mcp/vitest.config.ts +0 -8
  571. package/payload/premium-plugins/real-agent/plugins/listings/skills/epc-checker/SKILL.md +0 -38
@@ -1,498 +0,0 @@
1
- // Logging-tee was a platform-wrapper concern; the host owns the stderr pipe
2
- // in both platform and standalone (Claude Code native) spawn paths.
3
-
4
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
6
- import { z } from "zod";
7
- import { keyRegister } from "./tools/key-register.js";
8
- import { keyDeregister } from "./tools/key-deregister.js";
9
- import { keyList } from "./tools/key-list.js";
10
- import { propertySearch } from "./tools/property-search.js";
11
- import { propertyDetail } from "./tools/property-detail.js";
12
- import { propertyListed } from "./tools/property-listed.js";
13
- import { propertySold } from "./tools/property-sold.js";
14
- import { propertyViewing, propertyCallback, propertyInformation } from "./tools/property-intent.js";
15
- import { peopleSearch } from "./tools/people-search.js";
16
- import { peopleDetail } from "./tools/people-detail.js";
17
- import { viewingSearch } from "./tools/viewing-search.js";
18
- import { viewingDetail } from "./tools/viewing-detail.js";
19
- import { viewingCreate } from "./tools/viewing-create.js";
20
- import { viewingUpdate } from "./tools/viewing-update.js";
21
- import { feedbackGet, feedbackSubmit } from "./tools/feedback.js";
22
- import { teamInfo } from "./tools/team-info.js";
23
- import { teamAvailability } from "./tools/team-availability.js";
24
- import { marketingMatchDetail } from "./tools/marketing-match.js";
25
- import { marketingMatchBatch } from "./tools/marketing-match-batch.js";
26
- import { marketingMatchRequest } from "./tools/marketing-match-request.js";
27
- import { marketingEnquiry } from "./tools/marketing-enquiry.js";
28
- import { autoResponder } from "./tools/auto-responder.js";
29
- import { customerPreferences } from "./tools/customer-preferences.js";
30
- import { supplier } from "./tools/supplier.js";
31
- import { closeDriver } from "./lib/neo4j.js";
32
- import { selectLoopKeyStore } from "./lib/key-store.js";
33
-
34
- // ACCOUNT_ID is the platform's tenant id; "local" is the single-tenant
35
- // standalone stand-in when spawned natively by Claude Code.
36
- const accountId = process.env.ACCOUNT_ID ?? "local";
37
-
38
- const server = new McpServer({
39
- name: "maxy-loop",
40
- version: "0.2.0",
41
- });
42
-
43
- const ALL_PERMISSIONS = z.enum([
44
- "properties", "people", "viewings", "feedback", "team",
45
- "marketing", "customer", "supplier",
46
- ]);
47
-
48
- const store = selectLoopKeyStore();
49
- console.error(
50
- `[loop] server started, account=${accountId} backend=${store.backendName} path=${store.backendPath}`,
51
- );
52
-
53
- // Helper: wrap a tool function in standard error handling
54
- function toolHandler(fn: (p: Record<string, unknown>) => Promise<string>) {
55
- return async (params: Record<string, unknown>) => {
56
- try {
57
- const text = await fn({ ...params, accountId });
58
- return { content: [{ type: "text" as const, text }] };
59
- } catch (err) {
60
- return {
61
- content: [{
62
- type: "text" as const,
63
- text: `Error: ${err instanceof Error ? err.message : String(err)}`,
64
- }],
65
- isError: true,
66
- };
67
- }
68
- };
69
- }
70
-
71
- // ─────────────────────────────────────────────────────────────────
72
- // Key Management Tools (3)
73
- // ─────────────────────────────────────────────────────────────────
74
-
75
- server.tool(
76
- "loop-key-register",
77
- "Register a Loop CRM API key for a team. Validates the key against Loop's API, encrypts it, and stores it in the graph. Each key maps to one team.",
78
- {
79
- teamName: z.string().min(1).describe("Human-readable name for this team (e.g. 'Muvin Main Office')"),
80
- apiKey: z.string().min(10).describe("Loop API key (X-Api-Key header value)"),
81
- permissions: z
82
- .array(ALL_PERMISSIONS)
83
- .optional()
84
- .describe("Endpoint groups this key can access (default: all 8 groups)"),
85
- },
86
- async (params) => {
87
- try {
88
- const result = await keyRegister({ ...params, accountId });
89
- let text = `Team "${params.teamName}" registered successfully.`;
90
- if (result.warning) text += `\n\nWarning: ${result.warning}`;
91
- return { content: [{ type: "text" as const, text }] };
92
- } catch (err) {
93
- return {
94
- content: [{
95
- type: "text" as const,
96
- text: `Failed to register key: ${err instanceof Error ? err.message : String(err)}`,
97
- }],
98
- isError: true,
99
- };
100
- }
101
- }
102
- );
103
-
104
- server.tool(
105
- "loop-key-deregister",
106
- "Remove a registered Loop CRM team key. The key is permanently deleted from the graph.",
107
- { teamName: z.string().min(1).describe("Name of the team to remove") },
108
- async ({ teamName }) => {
109
- try {
110
- await keyDeregister({ teamName, accountId });
111
- return { content: [{ type: "text" as const, text: `Team "${teamName}" deregistered.` }] };
112
- } catch (err) {
113
- return {
114
- content: [{
115
- type: "text" as const,
116
- text: `Failed to deregister: ${err instanceof Error ? err.message : String(err)}`,
117
- }],
118
- isError: true,
119
- };
120
- }
121
- }
122
- );
123
-
124
- server.tool(
125
- "loop-key-list",
126
- "List all registered Loop CRM teams for this account. Shows team names, addresses, and permissions. Never reveals API key values.",
127
- {},
128
- toolHandler(async (p) => keyList({ accountId: p.accountId as string }))
129
- );
130
-
131
- // ─────────────────────────────────────────────────────────────────
132
- // People Tools (2) — permission: people
133
- // ─────────────────────────────────────────────────────────────────
134
-
135
- server.tool(
136
- "loop-people-search",
137
- "Search people in Loop CRM. Without a role, searches all contacts. With a role (buyers/sellers/renters/landlords), returns role-specific results with rich filters.",
138
- {
139
- role: z.enum(["buyers", "sellers", "renters", "landlords"]).optional().describe("Role to search (omit for all people)"),
140
- searchTerm: z.string().optional().describe("Name or contact search"),
141
- maxPrice: z.number().optional().describe("Max price (buyers) or max price filter (sellers)"),
142
- minPrice: z.number().optional().describe("Min price (sellers)"),
143
- minBeds: z.number().optional().describe("Min bedrooms (buyers/renters)"),
144
- maxRent: z.number().optional().describe("Max rent (renters only)"),
145
- searchAreas: z.string().optional().describe("Comma-separated outcodes e.g. 'SN7,OX12' (buyers/renters)"),
146
- propertyTypes: z.string().optional().describe("Comma-separated property types (buyers/renters)"),
147
- startDate: z.string().optional().describe("Start date filter (sellers/landlords)"),
148
- endDate: z.string().optional().describe("End date filter (sellers/landlords)"),
149
- teamName: z.string().optional().describe("Query a specific team only"),
150
- limit: z.number().int().optional().describe("Max results (default 200)"),
151
- },
152
- toolHandler(async (p) => peopleSearch(p as Parameters<typeof peopleSearch>[0]))
153
- );
154
-
155
- server.tool(
156
- "loop-people-detail",
157
- "Get full details for a specific person by ID. Optionally specify a role (buyers/sellers/renters/landlords) for role-specific detail.",
158
- {
159
- personId: z.number().int().describe("Person ID"),
160
- role: z.enum(["buyers", "sellers", "renters", "landlords"]).optional().describe("Role for role-specific detail view"),
161
- teamName: z.string().optional().describe("Query a specific team only"),
162
- },
163
- toolHandler(async (p) => peopleDetail(p as Parameters<typeof peopleDetail>[0]))
164
- );
165
-
166
- // ─────────────────────────────────────────────────────────────────
167
- // Property Tools (4) — permission: properties
168
- // ─────────────────────────────────────────────────────────────────
169
-
170
- server.tool(
171
- "loop-property-search",
172
- "Search properties in Loop CRM. Queries /property/residential/sales and /property/residential/lettings. Use department to narrow to one type.",
173
- {
174
- department: z.enum(["sales", "lettings", "both"]).optional().describe("Department (default: both)"),
175
- searchTerm: z.string().optional().describe("Address or keyword search"),
176
- minPrice: z.number().optional().describe("Minimum price"),
177
- maxPrice: z.number().optional().describe("Maximum price"),
178
- minBedrooms: z.number().int().optional().describe("Minimum bedrooms"),
179
- maxBedrooms: z.number().int().optional().describe("Maximum bedrooms"),
180
- propertyStatuses: z.string().optional().describe("Comma-separated statuses (e.g. 'forSale,underOffer')"),
181
- propertyTypes: z.string().optional().describe("Comma-separated property types"),
182
- teamName: z.string().optional().describe("Query a specific team only"),
183
- limit: z.number().int().optional().describe("Max results (default 200)"),
184
- },
185
- toolHandler(async (p) => propertySearch(p as Parameters<typeof propertySearch>[0]))
186
- );
187
-
188
- server.tool(
189
- "loop-property-detail",
190
- "Get full details for a specific property by ID and department. Optionally include a preview hash for the public preview.",
191
- {
192
- propertyId: z.number().int().describe("Property ID"),
193
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
194
- previewHash: z.number().int().optional().describe("Preview hash for public preview URL"),
195
- teamName: z.string().optional().describe("Query a specific team only"),
196
- },
197
- toolHandler(async (p) => propertyDetail(p as Parameters<typeof propertyDetail>[0]))
198
- );
199
-
200
- server.tool(
201
- "loop-property-listed",
202
- "Get properties currently listed on a specific channel (Rightmove, Zoopla, OnTheMarket, website). For exchanged/completed properties use loop-property-sold.",
203
- {
204
- channel: z.enum(["rightmove", "onTheMarket", "zoopla", "website"]).describe("Listing channel"),
205
- department: z.enum(["sales", "lettings", "both"]).optional().describe("Department (default: both)"),
206
- teamName: z.string().optional().describe("Query a specific team only"),
207
- limit: z.number().int().optional().describe("Max results (default 200)"),
208
- },
209
- toolHandler(async (p) => propertyListed(p as Parameters<typeof propertyListed>[0]))
210
- );
211
-
212
- server.tool(
213
- "loop-property-sold",
214
- "Get exchanged or completed properties on a specific channel. Powers canvassing from recent sales and sold-gallery rendering.",
215
- {
216
- channel: z.enum(["rightmove", "onTheMarket", "zoopla", "website"]).describe("Listing channel"),
217
- teamName: z.string().optional().describe("Query a specific team only"),
218
- limit: z.number().int().optional().describe("Max results (default 200)"),
219
- },
220
- toolHandler(async (p) => propertySold(p as Parameters<typeof propertySold>[0]))
221
- );
222
-
223
- // Property-level intent tools (Task 103 split — replaces loop-property-request).
224
- // Each intent is a distinct operator action so the agent's tool surface
225
- // preserves intent fidelity.
226
-
227
- server.tool(
228
- "loop-property-viewing",
229
- "Request a viewing for a property. Use when the operator says 'book a viewing', 'arrange a viewing', or 'ask to see the property'.",
230
- {
231
- teamName: z.string().min(1).describe("Team to submit the request through"),
232
- propertyId: z.number().int().describe("Property ID"),
233
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
234
- name: z.string().optional().describe("Requester name"),
235
- email: z.string().optional().describe("Requester email"),
236
- phone: z.string().optional().describe("Requester phone"),
237
- message: z.string().optional().describe("Additional message"),
238
- },
239
- toolHandler(async (p) => propertyViewing(p as Parameters<typeof propertyViewing>[0]))
240
- );
241
-
242
- server.tool(
243
- "loop-property-callback",
244
- "Request a callback about a property. Use when the operator says 'ask them to call', 'request a callback', or 'have someone ring back'.",
245
- {
246
- teamName: z.string().min(1).describe("Team to submit the request through"),
247
- propertyId: z.number().int().describe("Property ID"),
248
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
249
- name: z.string().optional().describe("Requester name"),
250
- email: z.string().optional().describe("Requester email"),
251
- phone: z.string().optional().describe("Requester phone"),
252
- message: z.string().optional().describe("Additional message"),
253
- },
254
- toolHandler(async (p) => propertyCallback(p as Parameters<typeof propertyCallback>[0]))
255
- );
256
-
257
- server.tool(
258
- "loop-property-information",
259
- "Request more information about a property. Use when the operator says 'ask for details', 'request the brochure', or 'find out more'.",
260
- {
261
- teamName: z.string().min(1).describe("Team to submit the request through"),
262
- propertyId: z.number().int().describe("Property ID"),
263
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
264
- name: z.string().optional().describe("Requester name"),
265
- email: z.string().optional().describe("Requester email"),
266
- phone: z.string().optional().describe("Requester phone"),
267
- message: z.string().optional().describe("Additional message"),
268
- },
269
- toolHandler(async (p) => propertyInformation(p as Parameters<typeof propertyInformation>[0]))
270
- );
271
-
272
- // ─────────────────────────────────────────────────────────────────
273
- // Viewing Tools (4) — permission: viewings
274
- // ─────────────────────────────────────────────────────────────────
275
-
276
- server.tool(
277
- "loop-viewing-search",
278
- "Search viewings in Loop CRM. Queries /residential/sales/viewings and /residential/lettings/viewings.",
279
- {
280
- department: z.enum(["sales", "lettings", "both"]).optional().describe("Department (default: both)"),
281
- searchTerm: z.string().optional().describe("Search viewings"),
282
- appointmentStartDate: z.string().optional().describe("Filter from date (ISO format)"),
283
- appointmentEndDate: z.string().optional().describe("Filter to date (ISO format)"),
284
- status: z.string().optional().describe("Viewing status filter"),
285
- teamName: z.string().optional().describe("Query a specific team only"),
286
- limit: z.number().int().optional().describe("Max results (default 200)"),
287
- },
288
- toolHandler(async (p) => viewingSearch(p as Parameters<typeof viewingSearch>[0]))
289
- );
290
-
291
- server.tool(
292
- "loop-viewing-detail",
293
- "Get full details for a specific viewing by ID and department.",
294
- {
295
- viewingId: z.number().int().describe("Viewing ID"),
296
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
297
- teamName: z.string().optional().describe("Query a specific team only"),
298
- },
299
- toolHandler(async (p) => viewingDetail(p as Parameters<typeof viewingDetail>[0]))
300
- );
301
-
302
- server.tool(
303
- "loop-viewing-create",
304
- "Create a new viewing in Loop CRM. Creates the viewing and associated buyer/renter record.",
305
- {
306
- teamName: z.string().min(1).describe("Team to create the viewing for"),
307
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
308
- propertyId: z.number().int().describe("Property ID"),
309
- date: z.string().describe("Viewing date (YYYY-MM-DD)"),
310
- time: z.string().describe("Viewing time (HH:mm)"),
311
- attendeeName: z.string().describe("Attendee full name"),
312
- attendeeEmail: z.string().optional().describe("Attendee email"),
313
- attendeePhone: z.string().optional().describe("Attendee phone"),
314
- },
315
- toolHandler(async (p) => viewingCreate(p as Parameters<typeof viewingCreate>[0]))
316
- );
317
-
318
- server.tool(
319
- "loop-viewing-update",
320
- "Add a note or record feedback for a viewing. For feedback, specify the party: buyer/seller (sales) or renter/landlord (lettings).",
321
- {
322
- teamName: z.string().min(1).describe("Team that owns the viewing"),
323
- viewingId: z.number().int().describe("Viewing ID"),
324
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
325
- action: z.enum(["note", "feedback"]).describe("note or feedback"),
326
- text: z.string().describe("Note text or feedback content"),
327
- feedbackParty: z.enum(["buyer", "seller", "renter", "landlord"]).optional().describe("Required for feedback: whose feedback"),
328
- },
329
- toolHandler(async (p) => viewingUpdate(p as Parameters<typeof viewingUpdate>[0]))
330
- );
331
-
332
- // ─────────────────────────────────────────────────────────────────
333
- // Feedback Tools (2) — permission: feedback
334
- // ─────────────────────────────────────────────────────────────────
335
-
336
- server.tool(
337
- "loop-feedback-get",
338
- "Get feedback for a specific viewing. Reads from /feedback/residential/{department}/viewings/{id}.",
339
- {
340
- teamName: z.string().min(1).describe("Team that owns the viewing"),
341
- viewingId: z.number().int().describe("Viewing ID"),
342
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
343
- },
344
- toolHandler(async (p) => feedbackGet(p as Parameters<typeof feedbackGet>[0]))
345
- );
346
-
347
- server.tool(
348
- "loop-feedback-submit",
349
- "Submit feedback for a viewing. Writes to /feedback/residential/{department}/viewings/{id}/feedback.",
350
- {
351
- teamName: z.string().min(1).describe("Team that owns the viewing"),
352
- viewingId: z.number().int().describe("Viewing ID"),
353
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
354
- feedback: z.string().describe("Feedback text"),
355
- },
356
- toolHandler(async (p) => feedbackSubmit(p as Parameters<typeof feedbackSubmit>[0]))
357
- );
358
-
359
- // ─────────────────────────────────────────────────────────────────
360
- // Team Tools (2) — permission: team
361
- // ─────────────────────────────────────────────────────────────────
362
-
363
- server.tool(
364
- "loop-team-info",
365
- "Get team details from Loop CRM. Returns team name, address, phone, and email.",
366
- {
367
- teamName: z.string().optional().describe("Query a specific team only (omit for all teams)"),
368
- },
369
- toolHandler(async (p) => teamInfo(p as Parameters<typeof teamInfo>[0]))
370
- );
371
-
372
- server.tool(
373
- "loop-team-availability",
374
- "Get available time slots for a specific agent on a given date.",
375
- {
376
- agentId: z.string().describe("Agent GUID identifier"),
377
- searchDate: z.string().describe("Date to check availability (YYYY-MM-DD)"),
378
- teamName: z.string().optional().describe("Query a specific team only"),
379
- },
380
- toolHandler(async (p) => teamAvailability(p as Parameters<typeof teamAvailability>[0]))
381
- );
382
-
383
- // ─────────────────────────────────────────────────────────────────
384
- // Marketing Tools (4) — permission: marketing
385
- // ─────────────────────────────────────────────────────────────────
386
-
387
- server.tool(
388
- "loop-marketing-match",
389
- "Get matching property detail and optionally the team profile for that match.",
390
- {
391
- propertyId: z.number().int().describe("Property ID"),
392
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
393
- includeTeamProfile: z.boolean().optional().describe("Include the team profile for this match (default: false)"),
394
- teamName: z.string().optional().describe("Query a specific team only"),
395
- },
396
- toolHandler(async (p) => marketingMatchDetail(p as Parameters<typeof marketingMatchDetail>[0]))
397
- );
398
-
399
- server.tool(
400
- "loop-marketing-match-batch",
401
- "Get batch matching results for multiple property IDs.",
402
- {
403
- propertyIds: z.array(z.number().int()).describe("Array of property IDs to match"),
404
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
405
- teamName: z.string().optional().describe("Query a specific team only"),
406
- },
407
- toolHandler(async (p) => marketingMatchBatch(p as Parameters<typeof marketingMatchBatch>[0]))
408
- );
409
-
410
- server.tool(
411
- "loop-marketing-match-request",
412
- "Submit a viewing, information, or callback request for a matching property.",
413
- {
414
- teamName: z.string().min(1).describe("Team to submit the request through"),
415
- propertyId: z.number().int().describe("Matching property ID"),
416
- department: z.enum(["sales", "lettings"]).describe("sales or lettings"),
417
- action: z.enum(["viewing", "information", "callback"]).describe("Request type"),
418
- name: z.string().optional().describe("Requester name"),
419
- email: z.string().optional().describe("Requester email"),
420
- phone: z.string().optional().describe("Requester phone"),
421
- message: z.string().optional().describe("Additional message"),
422
- },
423
- toolHandler(async (p) => marketingMatchRequest(p as Parameters<typeof marketingMatchRequest>[0]))
424
- );
425
-
426
- server.tool(
427
- "loop-marketing-enquiry",
428
- "Submit a seller-side marketing enquiry to Loop. For inbound applicant auto-responder workflows use loop-auto-responder.",
429
- {
430
- teamName: z.string().min(1).describe("Team to submit through"),
431
- sellerEnquiryData: z.record(z.string(), z.unknown()).optional().describe("Seller enquiry request body"),
432
- },
433
- toolHandler(async (p) => marketingEnquiry(p as Parameters<typeof marketingEnquiry>[0]))
434
- );
435
-
436
- server.tool(
437
- "loop-auto-responder",
438
- "Read or progress an inbound enquiry through Loop's auto-responder (the surface behind Loop's 40% enquiry-efficiency claim). action=get reads questions+details; answers submits applicant replies; details updates the enquiry record; refer hands it to another team.",
439
- {
440
- teamName: z.string().min(1).describe("Team for this operation"),
441
- action: z.enum(["get", "answers", "details", "refer"]).describe("Auto-responder action"),
442
- autoResponderId: z.number().int().describe("Auto-responder enquiry ID"),
443
- autoResponderKey: z.string().describe("Auto-responder key (UUID issued at enquiry creation)"),
444
- answers: z.array(z.unknown()).optional().describe("Applicant answers (required for action=answers)"),
445
- details: z.record(z.string(), z.unknown()).optional().describe("Enquiry details (for action=details)"),
446
- },
447
- toolHandler(async (p) => autoResponder(p as Parameters<typeof autoResponder>[0]))
448
- );
449
-
450
- // ─────────────────────────────────────────────────────────────────
451
- // Customer Tools (1) — permission: customer
452
- // ─────────────────────────────────────────────────────────────────
453
-
454
- server.tool(
455
- "loop-customer-preferences",
456
- "Read or write customer preferences for a person. Action 'read' returns current preferences, 'write' updates them.",
457
- {
458
- teamName: z.string().min(1).describe("Team for this operation"),
459
- personCode: z.number().int().describe("Person code (ID)"),
460
- action: z.enum(["read", "write"]).describe("read or write"),
461
- preferences: z.record(z.string(), z.unknown()).optional().describe("Preferences object (required for write)"),
462
- },
463
- toolHandler(async (p) => customerPreferences(p as Parameters<typeof customerPreferences>[0]))
464
- );
465
-
466
- // ─────────────────────────────────────────────────────────────────
467
- // Supplier Tools (1) — permission: supplier
468
- // ─────────────────────────────────────────────────────────────────
469
-
470
- server.tool(
471
- "loop-supplier",
472
- "Supplier operations: maintenance jobs, quotes, board contractor jobs. Supports listing, completing, and quoting.",
473
- {
474
- teamName: z.string().min(1).describe("Team for this operation"),
475
- action: z.enum([
476
- "maintenance-jobs", "maintenance-complete", "maintenance-quotes",
477
- "maintenance-submit-quote", "board-jobs", "board-complete",
478
- ]).describe("Supplier action"),
479
- code: z.string().describe("Unique code assigned to the contractor"),
480
- jobId: z.number().int().optional().describe("Job ID (required for all actions except maintenance-submit-quote)"),
481
- quoteId: z.number().int().optional().describe("Quote ID (for maintenance-submit-quote)"),
482
- quoteData: z.record(z.string(), z.unknown()).optional().describe("Quote data (for maintenance-submit-quote)"),
483
- completionData: z.record(z.string(), z.unknown()).optional().describe("Completion data (for board-complete)"),
484
- },
485
- toolHandler(async (p) => supplier(p as Parameters<typeof supplier>[0]))
486
- );
487
-
488
- // ─────────────────────────────────────────────────────────────────
489
- // Lifecycle
490
- // ─────────────────────────────────────────────────────────────────
491
-
492
- process.on("SIGINT", async () => {
493
- await closeDriver();
494
- process.exit(0);
495
- });
496
-
497
- const transport = new StdioServerTransport();
498
- await server.connect(transport);
@@ -1,105 +0,0 @@
1
- import { randomBytes, createCipheriv, createDecipheriv } from "node:crypto";
2
- import { readFileSync, writeFileSync, existsSync } from "node:fs";
3
- import { resolve } from "node:path";
4
- import { homedir } from "node:os";
5
-
6
- const ALGORITHM = "aes-256-gcm";
7
- const KEY_LENGTH = 32; // 256 bits
8
- const IV_LENGTH = 12; // 96 bits — recommended for GCM
9
- const AUTH_TAG_LENGTH = 16; // 128 bits
10
-
11
- /**
12
- * Resolve the config directory from brand.json (same pattern as anthropic-key, email).
13
- * Falls back to ".maxy" if brand.json is unreadable.
14
- */
15
- function resolveConfigDir(): string {
16
- try {
17
- const platformRoot = process.env.PLATFORM_ROOT;
18
- if (platformRoot) {
19
- const brandPath = resolve(platformRoot, "config/brand.json");
20
- const brand = JSON.parse(readFileSync(brandPath, "utf-8"));
21
- if (brand.configDir) return brand.configDir;
22
- }
23
- } catch {
24
- // Fall back to default
25
- }
26
- return ".maxy";
27
- }
28
-
29
- function keyFilePath(): string {
30
- return resolve(homedir(), resolveConfigDir(), ".loop-encryption-key");
31
- }
32
-
33
- /**
34
- * Load or generate the encryption key. Generated on first use,
35
- * stored at ~/.{configDir}/.loop-encryption-key with mode 0o600.
36
- */
37
- function loadOrGenerateKey(): Buffer {
38
- const path = keyFilePath();
39
-
40
- if (existsSync(path)) {
41
- const hex = readFileSync(path, "utf-8").trim();
42
- const buf = Buffer.from(hex, "hex");
43
- if (buf.length !== KEY_LENGTH) {
44
- throw new Error(
45
- `Encryption key at ${path} is ${buf.length} bytes, expected ${KEY_LENGTH}. ` +
46
- `Delete the file and re-register all Loop team keys.`
47
- );
48
- }
49
- return buf;
50
- }
51
-
52
- // First use — generate a new key
53
- const key = randomBytes(KEY_LENGTH);
54
- writeFileSync(path, key.toString("hex"), { mode: 0o600 });
55
- console.error(`[loop] encryption key generated at ${path}`);
56
- return key;
57
- }
58
-
59
- /**
60
- * Encrypt a plaintext string. Returns "iv:ciphertext:authTag" (hex-encoded).
61
- */
62
- export function encrypt(plaintext: string): string {
63
- const key = loadOrGenerateKey();
64
- const iv = randomBytes(IV_LENGTH);
65
- const cipher = createCipheriv(ALGORITHM, key, iv, { authTagLength: AUTH_TAG_LENGTH });
66
-
67
- let encrypted = cipher.update(plaintext, "utf-8", "hex");
68
- encrypted += cipher.final("hex");
69
- const authTag = cipher.getAuthTag().toString("hex");
70
-
71
- return `${iv.toString("hex")}:${encrypted}:${authTag}`;
72
- }
73
-
74
- /**
75
- * Decrypt a value produced by encrypt(). Expects "iv:ciphertext:authTag" (hex-encoded).
76
- * Throws on tampered/corrupt data or wrong key.
77
- */
78
- export function decrypt(encryptedValue: string): string {
79
- const parts = encryptedValue.split(":");
80
- if (parts.length !== 3) {
81
- throw new Error("Malformed encrypted value — expected iv:ciphertext:authTag");
82
- }
83
-
84
- const [ivHex, ciphertextHex, authTagHex] = parts;
85
-
86
- const path = keyFilePath();
87
- if (!existsSync(path)) {
88
- throw new Error(
89
- `Encryption key not found at ${path}. ` +
90
- `All stored Loop API keys are unrecoverable. Re-register keys.`
91
- );
92
- }
93
-
94
- const key = loadOrGenerateKey();
95
- const iv = Buffer.from(ivHex, "hex");
96
- const authTag = Buffer.from(authTagHex, "hex");
97
-
98
- const decipher = createDecipheriv(ALGORITHM, key, iv, { authTagLength: AUTH_TAG_LENGTH });
99
- decipher.setAuthTag(authTag);
100
-
101
- let decrypted = decipher.update(ciphertextHex, "hex", "utf-8");
102
- decrypted += decipher.final("utf-8");
103
-
104
- return decrypted;
105
- }
@@ -1,54 +0,0 @@
1
- import { randomBytes, createCipheriv, createDecipheriv } from "node:crypto";
2
- import { readFileSync, writeFileSync, existsSync } from "node:fs";
3
-
4
- // Standalone-mode crypto — see property-data's file-crypto.ts for the
5
- // shape and rationale. The two are duplicated rather than shared because
6
- // the MCPs are independent npm workspaces with no shared lib.
7
-
8
- const ALGORITHM = "aes-256-gcm";
9
- const KEY_LENGTH = 32;
10
- const IV_LENGTH = 12;
11
- const AUTH_TAG_LENGTH = 16;
12
-
13
- function loadOrGenerateKey(keyFilePath: string, label: string): Buffer {
14
- if (existsSync(keyFilePath)) {
15
- const hex = readFileSync(keyFilePath, "utf-8").trim();
16
- const buf = Buffer.from(hex, "hex");
17
- if (buf.length !== KEY_LENGTH) {
18
- throw new Error(
19
- `[${label}] encryption key at ${keyFilePath} is ${buf.length} bytes, expected ${KEY_LENGTH}.`,
20
- );
21
- }
22
- return buf;
23
- }
24
- const key = randomBytes(KEY_LENGTH);
25
- writeFileSync(keyFilePath, key.toString("hex"), { mode: 0o600 });
26
- console.error(`[${label}] encryption key generated at ${keyFilePath}`);
27
- return key;
28
- }
29
-
30
- export function encryptWith(plaintext: string, keyFilePath: string, label: string): string {
31
- const key = loadOrGenerateKey(keyFilePath, label);
32
- const iv = randomBytes(IV_LENGTH);
33
- const cipher = createCipheriv(ALGORITHM, key, iv, { authTagLength: AUTH_TAG_LENGTH });
34
- let encrypted = cipher.update(plaintext, "utf-8", "hex");
35
- encrypted += cipher.final("hex");
36
- const authTag = cipher.getAuthTag().toString("hex");
37
- return `${iv.toString("hex")}:${encrypted}:${authTag}`;
38
- }
39
-
40
- export function decryptWith(encryptedValue: string, keyFilePath: string, label: string): string {
41
- const parts = encryptedValue.split(":");
42
- if (parts.length !== 3) {
43
- throw new Error(`[${label}] bad encrypted envelope (expected iv:ct:tag)`);
44
- }
45
- const key = loadOrGenerateKey(keyFilePath, label);
46
- const iv = Buffer.from(parts[0], "hex");
47
- const ciphertext = parts[1];
48
- const authTag = Buffer.from(parts[2], "hex");
49
- const decipher = createDecipheriv(ALGORITHM, key, iv, { authTagLength: AUTH_TAG_LENGTH });
50
- decipher.setAuthTag(authTag);
51
- let plaintext = decipher.update(ciphertext, "hex", "utf-8");
52
- plaintext += decipher.final("utf-8");
53
- return plaintext;
54
- }