@rubytech/create-maxy-code 0.1.37 → 0.1.38

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 (233) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/package-lock.json +752 -512
  3. package/payload/platform/plugins/loop/PLUGIN.md +11 -0
  4. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  5. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +10 -4
  6. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  7. package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts +4 -1
  8. package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts.map +1 -1
  9. package/payload/platform/services/claude-session-manager/dist/tool-surface.js +4 -1
  10. package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
  11. package/payload/premium-plugins/real-agent/plugins/loop/PLUGIN.md +11 -0
  12. package/dist/__tests__/onboarding-state-readback.test.js +0 -61
  13. package/dist/onboarding-readback.js +0 -27
  14. package/payload/platform/lib/anthropic-key/dist/index.d.ts +0 -22
  15. package/payload/platform/lib/anthropic-key/dist/index.d.ts.map +0 -1
  16. package/payload/platform/lib/anthropic-key/dist/index.js +0 -232
  17. package/payload/platform/lib/anthropic-key/dist/index.js.map +0 -1
  18. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.d.ts +0 -39
  19. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.d.ts.map +0 -1
  20. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.js +0 -249
  21. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.js.map +0 -1
  22. package/payload/platform/plugins/real-agency/plugins/.claude-plugin/marketplace.json +0 -13
  23. package/payload/platform/plugins/real-agency/plugins/loop/.claude-plugin/plugin.json +0 -17
  24. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/index.d.ts +0 -2
  25. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/index.d.ts.map +0 -1
  26. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/index.js +0 -293
  27. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/index.js.map +0 -1
  28. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.d.ts +0 -10
  29. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.d.ts.map +0 -1
  30. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.js +0 -88
  31. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.js.map +0 -1
  32. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.d.ts +0 -82
  33. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +0 -1
  34. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.js +0 -427
  35. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.js.map +0 -1
  36. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts +0 -5
  37. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +0 -1
  38. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js +0 -40
  39. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js.map +0 -1
  40. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +0 -10
  41. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +0 -1
  42. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.js +0 -24
  43. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.js.map +0 -1
  44. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.d.ts +0 -16
  45. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.d.ts.map +0 -1
  46. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.js +0 -35
  47. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.js.map +0 -1
  48. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.d.ts +0 -5
  49. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  50. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.js +0 -19
  51. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.js.map +0 -1
  52. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.d.ts +0 -4
  53. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.d.ts.map +0 -1
  54. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.js +0 -14
  55. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.js.map +0 -1
  56. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.d.ts +0 -9
  57. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.d.ts.map +0 -1
  58. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.js +0 -60
  59. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.js.map +0 -1
  60. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +0 -13
  61. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +0 -1
  62. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.js +0 -41
  63. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +0 -1
  64. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +0 -9
  65. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +0 -1
  66. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.js +0 -16
  67. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +0 -1
  68. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +0 -15
  69. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +0 -1
  70. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.js +0 -11
  71. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +0 -1
  72. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.d.ts +0 -10
  73. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +0 -1
  74. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.js +0 -39
  75. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.js.map +0 -1
  76. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.d.ts +0 -9
  77. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +0 -1
  78. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.js +0 -125
  79. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.js.map +0 -1
  80. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.d.ts +0 -18
  81. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.d.ts.map +0 -1
  82. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.js +0 -87
  83. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.js.map +0 -1
  84. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.d.ts +0 -10
  85. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +0 -1
  86. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.js +0 -82
  87. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.js.map +0 -1
  88. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.d.ts +0 -12
  89. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +0 -1
  90. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.js +0 -32
  91. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.js.map +0 -1
  92. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.d.ts +0 -15
  93. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.d.ts.map +0 -1
  94. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.js +0 -11
  95. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.js.map +0 -1
  96. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.d.ts +0 -16
  97. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.d.ts.map +0 -1
  98. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.js +0 -41
  99. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.js.map +0 -1
  100. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.d.ts +0 -13
  101. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.d.ts.map +0 -1
  102. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.js +0 -49
  103. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.js.map +0 -1
  104. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.d.ts +0 -7
  105. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +0 -1
  106. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.js +0 -19
  107. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.js.map +0 -1
  108. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.d.ts +0 -5
  109. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.d.ts.map +0 -1
  110. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.js +0 -32
  111. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.js.map +0 -1
  112. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.d.ts +0 -14
  113. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +0 -1
  114. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.js +0 -11
  115. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.js.map +0 -1
  116. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +0 -9
  117. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +0 -1
  118. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.js +0 -85
  119. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.js.map +0 -1
  120. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.d.ts +0 -13
  121. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +0 -1
  122. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.js +0 -44
  123. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.js.map +0 -1
  124. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.d.ts +0 -14
  125. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +0 -1
  126. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.js +0 -18
  127. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.js.map +0 -1
  128. package/payload/premium-plugins/real-agency/plugins/.claude-plugin/marketplace.json +0 -13
  129. package/payload/premium-plugins/real-agency/plugins/loop/.claude-plugin/plugin.json +0 -17
  130. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.d.ts +0 -2
  131. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.d.ts.map +0 -1
  132. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.js +0 -293
  133. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.js.map +0 -1
  134. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.d.ts +0 -10
  135. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.d.ts.map +0 -1
  136. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.js +0 -88
  137. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.js.map +0 -1
  138. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.d.ts +0 -82
  139. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +0 -1
  140. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.js +0 -427
  141. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.js.map +0 -1
  142. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts +0 -5
  143. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +0 -1
  144. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js +0 -40
  145. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js.map +0 -1
  146. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +0 -10
  147. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +0 -1
  148. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.js +0 -24
  149. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.js.map +0 -1
  150. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.d.ts +0 -16
  151. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.d.ts.map +0 -1
  152. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.js +0 -35
  153. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.js.map +0 -1
  154. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.d.ts +0 -5
  155. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  156. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.js +0 -19
  157. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.js.map +0 -1
  158. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.d.ts +0 -4
  159. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.d.ts.map +0 -1
  160. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.js +0 -14
  161. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.js.map +0 -1
  162. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.d.ts +0 -9
  163. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.d.ts.map +0 -1
  164. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.js +0 -60
  165. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.js.map +0 -1
  166. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +0 -13
  167. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +0 -1
  168. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.js +0 -41
  169. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +0 -1
  170. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +0 -9
  171. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +0 -1
  172. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.js +0 -16
  173. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +0 -1
  174. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +0 -15
  175. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +0 -1
  176. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.js +0 -11
  177. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +0 -1
  178. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.d.ts +0 -10
  179. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +0 -1
  180. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.js +0 -39
  181. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.js.map +0 -1
  182. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.d.ts +0 -9
  183. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +0 -1
  184. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.js +0 -125
  185. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.js.map +0 -1
  186. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.d.ts +0 -18
  187. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.d.ts.map +0 -1
  188. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.js +0 -87
  189. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.js.map +0 -1
  190. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.d.ts +0 -10
  191. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +0 -1
  192. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.js +0 -82
  193. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.js.map +0 -1
  194. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.d.ts +0 -12
  195. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +0 -1
  196. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.js +0 -32
  197. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.js.map +0 -1
  198. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.d.ts +0 -15
  199. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.d.ts.map +0 -1
  200. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.js +0 -11
  201. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.js.map +0 -1
  202. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.d.ts +0 -16
  203. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.d.ts.map +0 -1
  204. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.js +0 -41
  205. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.js.map +0 -1
  206. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.d.ts +0 -13
  207. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.d.ts.map +0 -1
  208. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.js +0 -49
  209. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.js.map +0 -1
  210. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.d.ts +0 -7
  211. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +0 -1
  212. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.js +0 -19
  213. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.js.map +0 -1
  214. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.d.ts +0 -5
  215. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.d.ts.map +0 -1
  216. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.js +0 -32
  217. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.js.map +0 -1
  218. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.d.ts +0 -14
  219. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +0 -1
  220. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.js +0 -11
  221. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.js.map +0 -1
  222. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +0 -9
  223. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +0 -1
  224. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.js +0 -85
  225. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.js.map +0 -1
  226. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.d.ts +0 -13
  227. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +0 -1
  228. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.js +0 -44
  229. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.js.map +0 -1
  230. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.d.ts +0 -14
  231. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +0 -1
  232. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.js +0 -18
  233. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.js.map +0 -1
@@ -1,427 +0,0 @@
1
- import { getSession } from "./neo4j.js";
2
- import { decrypt } from "./crypto.js";
3
- // ─────────────────────────────────────────────────────────────────
4
- // Loop API V2 HTTP Client + Cross-Team Aggregation Engine
5
- //
6
- // ┌─ Load LoopTeamKey nodes (Neo4j) ─┐
7
- // │ │
8
- // ▼ │
9
- // For each key: │
10
- // 1. Decrypt API key │
11
- // 2. Check permissions │
12
- // 3. HTTP GET/POST/PUT → Loop API V2 │
13
- // │ │
14
- // ▼ │
15
- // Promise.allSettled → merge results │
16
- // Log aggregate summary │
17
- // ─────────────────────────────────────────────────────────────────
18
- const LOOP_BASE_URL = "https://api.loop.software";
19
- const REQUEST_TIMEOUT_MS = 10_000;
20
- const TIMEOUT_RETRY_BACKOFF_MS = 2_000;
21
- const DEFAULT_LIMIT_PER_TEAM = 50;
22
- const DEFAULT_LIMIT_TOTAL = 200;
23
- // One bounded retry on transient timeout — recovers from intermittent
24
- // Loop-API latency spikes that would otherwise drop a team from coverage.
25
- function isTimeoutError(err) {
26
- if (!(err instanceof Error))
27
- return false;
28
- return (err.name === "TimeoutError" ||
29
- err.name === "AbortError" ||
30
- /aborted due to timeout/i.test(err.message));
31
- }
32
- function isEnvelope(val) {
33
- return (val !== null &&
34
- typeof val === "object" &&
35
- !Array.isArray(val) &&
36
- "statusCode" in val &&
37
- "httpResponseCode" in val &&
38
- "data" in val);
39
- }
40
- function unwrapEnvelope(parsed, toolName, teamName) {
41
- if (!isEnvelope(parsed)) {
42
- return parsed;
43
- }
44
- if (parsed.statusCode !== "success") {
45
- const errMsg = parsed.errors?.length
46
- ? parsed.errors.join("; ")
47
- : `statusCode=${parsed.statusCode}`;
48
- throw new Error(`Loop API error for team=${teamName} tool=${toolName}: ${errMsg} (httpResponseCode=${parsed.httpResponseCode})`);
49
- }
50
- if (parsed.warnings?.length) {
51
- console.error(`[loop] ${toolName} team=${teamName} warnings: ${parsed.warnings.join("; ")}`);
52
- }
53
- return parsed.data;
54
- }
55
- /**
56
- * Load all LoopTeamKey nodes for an account from Neo4j.
57
- */
58
- export async function loadTeamKeys(accountId) {
59
- const session = getSession();
60
- try {
61
- const result = await session.run(`MATCH (k:LoopTeamKey {accountId: $accountId})
62
- RETURN k.teamName AS teamName, k.encryptedKey AS encryptedKey,
63
- k.teamAddress AS teamAddress, k.agentId AS agentId,
64
- k.permissions AS permissions, k.createdAt AS createdAt,
65
- k.updatedAt AS updatedAt
66
- ORDER BY k.teamName`, { accountId });
67
- return result.records.map((r) => ({
68
- teamName: r.get("teamName"),
69
- encryptedKey: r.get("encryptedKey"),
70
- teamAddress: r.get("teamAddress") ?? "",
71
- agentId: r.get("agentId") ?? "",
72
- permissions: r.get("permissions") ?? [],
73
- createdAt: r.get("createdAt") ?? "",
74
- updatedAt: r.get("updatedAt") ?? "",
75
- }));
76
- }
77
- finally {
78
- await session.close();
79
- }
80
- }
81
- // Truncate to 200 chars, escape newlines, single line — `[loop] <tool> team=<t>
82
- // status=<n> body="<...>"`. Emitted at the wrapper boundary before throwing so
83
- // the body is visible regardless of how downstream catch sites format the error
84
- // (the aggregator at line ~388 reduces LoopApiError to "HTTP <status>" and
85
- // would otherwise discard the body).
86
- function logErrorBody(toolName, teamName, status, body) {
87
- const truncated = body.slice(0, 200).replace(/\n/g, "\\n");
88
- console.error(`[loop] ${toolName} team=${teamName} status=${status} body="${truncated}"`);
89
- }
90
- /**
91
- * Make a GET request to the Loop API V2.
92
- */
93
- export async function loopGet(apiKey, path, toolName, teamName) {
94
- const url = `${LOOP_BASE_URL}${path}`;
95
- const start = Date.now();
96
- const response = await fetch(url, {
97
- headers: { "X-Api-Key": apiKey, "Accept": "application/json" },
98
- signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
99
- });
100
- const duration = Date.now() - start;
101
- console.error(`[loop] ${toolName} team=${teamName} endpoint=GET ${path} status=${response.status} duration=${duration}ms`);
102
- if (response.status === 204) {
103
- return [];
104
- }
105
- if (!response.ok) {
106
- const errorBody = await response.text().catch(() => "");
107
- logErrorBody(toolName, teamName, response.status, errorBody);
108
- throw new LoopApiError(response.status, teamName, path, errorBody);
109
- }
110
- const text = await response.text();
111
- try {
112
- const parsed = JSON.parse(text);
113
- return unwrapEnvelope(parsed, toolName, teamName);
114
- }
115
- catch (err) {
116
- if (err instanceof SyntaxError) {
117
- throw new Error(`Loop returned non-JSON response for team=${teamName} path=${path} ` +
118
- `(status=${response.status}, length=${text.length})`);
119
- }
120
- throw err;
121
- }
122
- }
123
- /**
124
- * Make a POST request to the Loop API V2.
125
- * For write operations: create viewings, record feedback, submit enquiries, etc.
126
- * Returns parsed JSON response. Treats 204 as success with empty result.
127
- */
128
- export async function loopPost(apiKey, path, body, toolName, teamName) {
129
- const url = `${LOOP_BASE_URL}${path}`;
130
- const start = Date.now();
131
- const response = await fetch(url, {
132
- method: "POST",
133
- headers: {
134
- "X-Api-Key": apiKey,
135
- "Accept": "application/json",
136
- "Content-Type": "application/json",
137
- },
138
- body: JSON.stringify(body),
139
- signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
140
- });
141
- const duration = Date.now() - start;
142
- console.error(`[loop] WRITE ${toolName} team=${teamName} endpoint=POST ${path} status=${response.status} duration=${duration}ms`);
143
- if (response.status === 204) {
144
- return { success: true };
145
- }
146
- if (!response.ok) {
147
- const errorBody = await response.text().catch(() => "");
148
- logErrorBody(toolName, teamName, response.status, errorBody);
149
- throw new LoopApiError(response.status, teamName, path, errorBody);
150
- }
151
- const text = await response.text();
152
- try {
153
- const parsed = JSON.parse(text);
154
- return unwrapEnvelope(parsed, toolName, teamName);
155
- }
156
- catch (err) {
157
- if (err instanceof SyntaxError) {
158
- throw new Error(`Loop returned non-JSON response for team=${teamName} path=${path} ` +
159
- `(status=${response.status}, length=${text.length})`);
160
- }
161
- throw err;
162
- }
163
- }
164
- /**
165
- * Make a PUT request to the Loop API V2.
166
- * For update operations: batch matching, submit quotes, update preferences, etc.
167
- */
168
- export async function loopPut(apiKey, path, body, toolName, teamName) {
169
- const url = `${LOOP_BASE_URL}${path}`;
170
- const start = Date.now();
171
- const response = await fetch(url, {
172
- method: "PUT",
173
- headers: {
174
- "X-Api-Key": apiKey,
175
- "Accept": "application/json",
176
- "Content-Type": "application/json",
177
- },
178
- body: JSON.stringify(body),
179
- signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
180
- });
181
- const duration = Date.now() - start;
182
- console.error(`[loop] WRITE ${toolName} team=${teamName} endpoint=PUT ${path} status=${response.status} duration=${duration}ms`);
183
- if (response.status === 204) {
184
- return { success: true };
185
- }
186
- if (!response.ok) {
187
- const errorBody = await response.text().catch(() => "");
188
- logErrorBody(toolName, teamName, response.status, errorBody);
189
- throw new LoopApiError(response.status, teamName, path, errorBody);
190
- }
191
- const text = await response.text();
192
- try {
193
- const parsed = JSON.parse(text);
194
- return unwrapEnvelope(parsed, toolName, teamName);
195
- }
196
- catch (err) {
197
- if (err instanceof SyntaxError) {
198
- throw new Error(`Loop returned non-JSON response for team=${teamName} path=${path} ` +
199
- `(status=${response.status}, length=${text.length})`);
200
- }
201
- throw err;
202
- }
203
- }
204
- export class LoopApiError extends Error {
205
- status;
206
- teamName;
207
- path;
208
- responseBody;
209
- constructor(status, teamName, path, responseBody) {
210
- const detail = responseBody ? ` — ${responseBody.slice(0, 200)}` : "";
211
- super(`Loop API returned ${status} for team=${teamName} path=${path}${detail}`);
212
- this.status = status;
213
- this.teamName = teamName;
214
- this.path = path;
215
- this.responseBody = responseBody;
216
- this.name = "LoopApiError";
217
- }
218
- }
219
- /**
220
- * Fan out a request across all registered teams for an account, merging results.
221
- *
222
- * Each tool provides a `buildRequest` function that takes a decrypted API key
223
- * and returns the data for that team. The aggregation engine handles:
224
- * - Key loading and decryption
225
- * - Permission checking
226
- * - Concurrent fan-out via Promise.allSettled
227
- * - Result merging with teamName tags
228
- * - Aggregate logging
229
- *
230
- * When `teamName` is provided, only that team is queried (no fan-out).
231
- */
232
- export async function aggregateAcrossTeams(accountId, endpointGroup, toolName, buildRequest, options) {
233
- const allKeys = await loadTeamKeys(accountId);
234
- if (allKeys.length === 0) {
235
- return { results: [], failures: [], skipped: [], totalTeams: 0 };
236
- }
237
- // Filter to specific team if requested
238
- const keys = options?.teamName
239
- ? allKeys.filter((k) => k.teamName === options.teamName)
240
- : allKeys;
241
- if (keys.length === 0 && options?.teamName) {
242
- return {
243
- results: [],
244
- failures: [{ teamName: options.teamName, reason: "Team not found", kind: "other" }],
245
- skipped: [],
246
- totalTeams: allKeys.length,
247
- };
248
- }
249
- const limitPerTeam = options?.limitPerTeam ?? DEFAULT_LIMIT_PER_TEAM;
250
- const limitTotal = options?.limitTotal ?? DEFAULT_LIMIT_TOTAL;
251
- const results = [];
252
- const failures = [];
253
- const skipped = [];
254
- // Check permissions and build per-team request thunks. Thunks (not stored
255
- // promises) are required so a timed-out attempt can be re-invoked on retry.
256
- const tasks = [];
257
- for (const key of keys) {
258
- if (!key.permissions.includes(endpointGroup)) {
259
- console.error(`[loop] ${toolName} team=${key.teamName} — permission denied (requires: ${endpointGroup})`);
260
- skipped.push({
261
- teamName: key.teamName,
262
- reason: `No ${endpointGroup} permission`,
263
- });
264
- continue;
265
- }
266
- let apiKey;
267
- try {
268
- apiKey = decrypt(key.encryptedKey);
269
- }
270
- catch (err) {
271
- const msg = err instanceof Error ? err.message : String(err);
272
- console.error(`[loop] decrypt failed for team=${key.teamName}: ${msg}`);
273
- failures.push({
274
- teamName: key.teamName,
275
- reason: "Decryption failed",
276
- kind: "other",
277
- });
278
- continue;
279
- }
280
- const teamName = key.teamName;
281
- tasks.push({
282
- key,
283
- run: async () => {
284
- try {
285
- return await buildRequest(apiKey, teamName);
286
- }
287
- catch (err) {
288
- if (!isTimeoutError(err))
289
- throw err;
290
- console.error(`[loop] ${toolName} team=${teamName} timed out — retrying in ${TIMEOUT_RETRY_BACKOFF_MS}ms`);
291
- await new Promise((resolve) => setTimeout(resolve, TIMEOUT_RETRY_BACKOFF_MS));
292
- return await buildRequest(apiKey, teamName);
293
- }
294
- },
295
- });
296
- }
297
- // Fan out concurrent requests
298
- const settled = await Promise.allSettled(tasks.map((t) => t.run()));
299
- for (let i = 0; i < settled.length; i++) {
300
- const outcome = settled[i];
301
- const teamName = tasks[i].key.teamName;
302
- if (outcome.status === "fulfilled") {
303
- const data = Array.isArray(outcome.value)
304
- ? outcome.value.slice(0, limitPerTeam)
305
- : [];
306
- results.push({ teamName, data });
307
- }
308
- else {
309
- const reason = outcome.reason instanceof LoopApiError
310
- ? `HTTP ${outcome.reason.status}`
311
- : outcome.reason instanceof Error
312
- ? outcome.reason.message
313
- : String(outcome.reason);
314
- const kind = isTimeoutError(outcome.reason)
315
- ? "timeout"
316
- : "other";
317
- console.error(`[loop] ${toolName} team=${teamName} failed: ${reason}`);
318
- failures.push({ teamName, reason, kind });
319
- }
320
- }
321
- // Apply total limit across all teams
322
- let totalItems = 0;
323
- for (const r of results) {
324
- const remaining = limitTotal - totalItems;
325
- if (remaining <= 0) {
326
- r.data = [];
327
- }
328
- else if (r.data.length > remaining) {
329
- r.data = r.data.slice(0, remaining);
330
- }
331
- totalItems += r.data.length;
332
- }
333
- const timedOutCount = failures.filter((f) => f.kind === "timeout").length;
334
- const erroredCount = failures.length - timedOutCount;
335
- console.error(`[loop] aggregate tool=${toolName} teams=${keys.length} ` +
336
- `succeeded=${results.length} failed=${failures.length} skipped=${skipped.length}`);
337
- console.error(`[loop] aggregate-coverage tool=${toolName} requested=${keys.length} ` +
338
- `answered=${results.length} timed_out=${timedOutCount} errored=${erroredCount}`);
339
- return { results, failures, skipped, totalTeams: allKeys.length };
340
- }
341
- /**
342
- * Resolve a single team's API key with permission checking.
343
- * Handles key loading, decryption, and permission validation.
344
- * Used for both reads and writes that target a specific team — no fan-out.
345
- */
346
- export async function withTeamKey(accountId, teamName, endpointGroup, toolName, execute) {
347
- const allKeys = await loadTeamKeys(accountId);
348
- if (allKeys.length === 0) {
349
- throw new Error("No Loop teams registered. Use loop-key-register to add team API keys.");
350
- }
351
- const key = allKeys.find((k) => k.teamName === teamName);
352
- if (!key) {
353
- const available = allKeys.map((k) => k.teamName).join(", ");
354
- throw new Error(`Team "${teamName}" not found. Available teams: ${available}`);
355
- }
356
- if (!key.permissions.includes(endpointGroup)) {
357
- throw new Error(`Team "${teamName}" does not have ${endpointGroup} permission. ` +
358
- `Current permissions: ${key.permissions.join(", ")}`);
359
- }
360
- const apiKey = decrypt(key.encryptedKey);
361
- return execute(apiKey);
362
- }
363
- /**
364
- * Format an aggregation result into a human-readable text response.
365
- */
366
- export function formatAggregationResult(result, formatItem, entityName) {
367
- if (result.totalTeams === 0) {
368
- return "No Loop teams registered. Use loop-key-register to add team API keys.";
369
- }
370
- const allSkippedOrFailed = result.results.length === 0 && result.failures.length + result.skipped.length > 0;
371
- if (allSkippedOrFailed) {
372
- const reasons = [
373
- ...result.failures.map((f) => `${f.teamName}: ${f.reason}`),
374
- ...result.skipped.map((s) => `${s.teamName}: ${s.reason}`),
375
- ];
376
- return `All teams failed or were skipped:\n${reasons.join("\n")}`;
377
- }
378
- const lines = [];
379
- let totalItems = 0;
380
- for (const teamResult of result.results) {
381
- if (teamResult.data.length === 0)
382
- continue;
383
- totalItems += teamResult.data.length;
384
- lines.push(`\n## ${teamResult.teamName}`);
385
- for (const item of teamResult.data) {
386
- lines.push(formatItem(item, teamResult.teamName));
387
- }
388
- }
389
- // Coverage = teams that had a chance to answer (succeeded + failed). Skipped
390
- // teams are excluded from the denominator: they were configured-out, not lost.
391
- const answered = result.results.length;
392
- const failed = result.failures.length;
393
- const totalCovered = answered + failed;
394
- const coverageNote = formatCoverageNote(result.failures);
395
- if (totalItems === 0) {
396
- if (failed > 0) {
397
- return `No ${entityName} found across ${answered} of ${totalCovered} teams (${coverageNote}).`;
398
- }
399
- const teamCount = result.results.length === 1
400
- ? result.results[0].teamName
401
- : `${result.results.length} teams`;
402
- return `No ${entityName} found across ${teamCount}.`;
403
- }
404
- const teamCountFragment = failed > 0 ? `${answered} of ${totalCovered} team(s)` : `${answered} team(s)`;
405
- let header = `${totalItems} ${entityName} across ${teamCountFragment}:`;
406
- const parts = [header, ...lines];
407
- if (failed > 0) {
408
- parts.push(`\n---\nNote: ${coverageNote}.`);
409
- }
410
- if (result.skipped.length > 0) {
411
- parts.push(`Note: ${result.skipped.length} team(s) skipped (insufficient permissions).`);
412
- }
413
- return parts.join("\n");
414
- }
415
- function formatCoverageNote(failures) {
416
- const timedOut = failures.filter((f) => f.kind === "timeout");
417
- const errored = failures.filter((f) => f.kind !== "timeout");
418
- const fragments = [];
419
- if (timedOut.length > 0) {
420
- fragments.push(`${timedOut.length} timed out: ${timedOut.map((f) => f.teamName).join(", ")}`);
421
- }
422
- if (errored.length > 0) {
423
- fragments.push(`${errored.length} errored: ${errored.map((f) => f.teamName).join(", ")}`);
424
- }
425
- return fragments.join("; ");
426
- }
427
- //# sourceMappingURL=loop-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loop-api.js","sourceRoot":"","sources":["../../src/lib/loop-api.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import { Driver, Session } from "neo4j-driver";
2
- export declare function getDriver(): Driver;
3
- export declare function getSession(): Session;
4
- export declare function closeDriver(): Promise<void>;
5
- //# sourceMappingURL=neo4j.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"neo4j.d.ts","sourceRoot":"","sources":["../../src/lib/neo4j.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAuBtD,wBAAgB,SAAS,IAAI,MAAM,CAgBlC;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAKjD"}
@@ -1,40 +0,0 @@
1
- import neo4j from "neo4j-driver";
2
- import { readFileSync } from "node:fs";
3
- import { resolve } from "node:path";
4
- let driver = null;
5
- function readPassword() {
6
- if (process.env.NEO4J_PASSWORD)
7
- return process.env.NEO4J_PASSWORD;
8
- const passwordFile = resolve(process.env.PLATFORM_ROOT ?? resolve(import.meta.dirname, "../../../.."), "config/.neo4j-password");
9
- try {
10
- return readFileSync(passwordFile, "utf-8").trim();
11
- }
12
- catch {
13
- throw new Error(`Neo4j password not found. Expected at ${passwordFile} or in NEO4J_PASSWORD env var.`);
14
- }
15
- }
16
- export function getDriver() {
17
- if (!driver) {
18
- // Task 580: NEO4J_URI must be explicit. Silent default to :7687 was the
19
- // vector for Task 577's orphan data in Maxy's DB from a realagent install.
20
- const uri = process.env.NEO4J_URI;
21
- if (!uri) {
22
- throw new Error("[loop] NEO4J_URI unset — refusing to default to bolt://localhost:7687 (Task 580)");
23
- }
24
- const user = process.env.NEO4J_USER ?? "neo4j";
25
- const password = readPassword();
26
- console.error(`[loop] resolved neo4j_uri=${uri}`);
27
- driver = neo4j.driver(uri, neo4j.auth.basic(user, password));
28
- }
29
- return driver;
30
- }
31
- export function getSession() {
32
- return getDriver().session();
33
- }
34
- export async function closeDriver() {
35
- if (driver) {
36
- await driver.close();
37
- driver = null;
38
- }
39
- }
40
- //# sourceMappingURL=neo4j.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"neo4j.js","sourceRoot":"","sources":["../../src/lib/neo4j.ts"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAElE,MAAM,YAAY,GAAG,OAAO,CAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EACxE,wBAAwB,CACzB,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yCAAyC,YAAY,gCAAgC,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,wEAAwE;QACxE,2EAA2E;QAC3E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;QAC/C,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -1,10 +0,0 @@
1
- type PreferencesAction = "read" | "write";
2
- export declare function customerPreferences(params: {
3
- accountId: string;
4
- teamName: string;
5
- personCode: number;
6
- action: PreferencesAction;
7
- preferences?: Record<string, unknown>;
8
- }): Promise<string>;
9
- export {};
10
- //# sourceMappingURL=customer-preferences.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"customer-preferences.d.ts","sourceRoot":"","sources":["../../src/tools/customer-preferences.ts"],"names":[],"mappings":"AAEA,KAAK,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAmB1C,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,GAAG,OAAO,CAAC,MAAM,CAAC,CAsClB"}
@@ -1,24 +0,0 @@
1
- import { loopGet, loopPost, withTeamKey } from "../lib/loop-api.js";
2
- export async function customerPreferences(params) {
3
- const { accountId, teamName, personCode, action } = params;
4
- if (action === "read") {
5
- const result = await withTeamKey(accountId, teamName, "customer", "loop-customer-preferences", async (apiKey) => {
6
- return loopGet(apiKey, `/customer/preferences/${personCode}`, "loop-customer-preferences", teamName);
7
- });
8
- if (!result || (Array.isArray(result) && result.length === 0)) {
9
- return `No preferences found for person ${personCode} via team "${teamName}".`;
10
- }
11
- return JSON.stringify(result, null, 2);
12
- }
13
- if (action === "write") {
14
- if (!params.preferences) {
15
- throw new Error("preferences object is required when action is 'write'.");
16
- }
17
- await withTeamKey(accountId, teamName, "customer", "loop-customer-preferences", async (apiKey) => {
18
- return loopPost(apiKey, `/customer/preferences/${personCode}`, params.preferences, "loop-customer-preferences", teamName);
19
- });
20
- return `Preferences updated for person ${personCode} via team "${teamName}".`;
21
- }
22
- throw new Error(`Unknown action: ${action}. Use "read" or "write".`);
23
- }
24
- //# sourceMappingURL=customer-preferences.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"customer-preferences.js","sourceRoot":"","sources":["../../src/tools/customer-preferences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAqBpE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAMzC;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAE3D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,2BAA2B,EAC5D,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,OAAO,OAAO,CACZ,MAAM,EAAE,yBAAyB,UAAU,EAAE,EAC7C,2BAA2B,EAAE,QAAQ,CACtC,CAAC;QACJ,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,mCAAmC,UAAU,cAAc,QAAQ,IAAI,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,WAAW,CACf,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,2BAA2B,EAC5D,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,OAAO,QAAQ,CACb,MAAM,EAAE,yBAAyB,UAAU,EAAE,EAC7C,MAAM,CAAC,WAAY,EAAE,2BAA2B,EAAE,QAAQ,CAC3D,CAAC;QACJ,CAAC,CACF,CAAC;QACF,OAAO,kCAAkC,UAAU,cAAc,QAAQ,IAAI,CAAC;IAChF,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,0BAA0B,CAAC,CAAC;AACvE,CAAC"}
@@ -1,16 +0,0 @@
1
- type Department = "sales" | "lettings";
2
- export declare function feedbackGet(params: {
3
- accountId: string;
4
- teamName: string;
5
- viewingId: number;
6
- department: Department;
7
- }): Promise<string>;
8
- export declare function feedbackSubmit(params: {
9
- accountId: string;
10
- teamName: string;
11
- viewingId: number;
12
- department: Department;
13
- feedback: string;
14
- }): Promise<string>;
15
- export {};
16
- //# sourceMappingURL=feedback.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/tools/feedback.ts"],"names":[],"mappings":"AAMA,KAAK,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAwBvC,wBAAsB,WAAW,CAAC,MAAM,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BlB;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAelB"}
@@ -1,35 +0,0 @@
1
- import { loopGet, loopPost, withTeamKey, } from "../lib/loop-api.js";
2
- export async function feedbackGet(params) {
3
- const { accountId, teamName, viewingId, department } = params;
4
- const result = await withTeamKey(accountId, teamName, "feedback", "loop-feedback-get", async (apiKey) => {
5
- const path = `/feedback/residential/${department}/viewings/${viewingId}`;
6
- return loopGet(apiKey, path, "loop-feedback-get", teamName);
7
- });
8
- if (!result || (Array.isArray(result) && result.length === 0)) {
9
- return `No feedback found for viewing ${viewingId} (${department}) via team "${teamName}".`;
10
- }
11
- const f = result;
12
- const lines = [`**Feedback for viewing ${viewingId}**`];
13
- if (f.propertyAddress)
14
- lines.push(`Property: ${f.propertyAddress}`);
15
- if (f.date)
16
- lines.push(`Date: ${f.date}`);
17
- if (f.attendeeName)
18
- lines.push(`Attendee: ${f.attendeeName}`);
19
- if (f.rating != null)
20
- lines.push(`Rating: ★${f.rating}`);
21
- if (f.status)
22
- lines.push(`Status: ${f.status}`);
23
- if (f.feedback)
24
- lines.push(`Feedback: ${f.feedback}`);
25
- return lines.join("\n");
26
- }
27
- export async function feedbackSubmit(params) {
28
- const { accountId, teamName, viewingId, department, feedback } = params;
29
- await withTeamKey(accountId, teamName, "feedback", "loop-feedback-submit", async (apiKey) => {
30
- const path = `/feedback/residential/${department}/viewings/${viewingId}/feedback`;
31
- return loopPost(apiKey, path, { result: feedback }, "loop-feedback-submit", teamName);
32
- });
33
- return `Feedback submitted for viewing ${viewingId} (${department}) via team "${teamName}".`;
34
- }
35
- //# sourceMappingURL=feedback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/tools/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,WAAW,GACZ,MAAM,oBAAoB,CAAC;AA0B5B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAKjC;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAE9D,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,SAAS,EACT,QAAQ,EACR,UAAU,EACV,mBAAmB,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,yBAAyB,UAAU,aAAa,SAAS,EAAE,CAAC;QACzE,OAAO,OAAO,CAAsB,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACnF,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,iCAAiC,SAAS,KAAK,UAAU,eAAe,QAAQ,IAAI,CAAC;IAC9F,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC;IACjB,MAAM,KAAK,GAAG,CAAC,0BAA0B,SAAS,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,eAAe;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAMpC;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAExE,MAAM,WAAW,CACf,SAAS,EACT,QAAQ,EACR,UAAU,EACV,sBAAsB,EACtB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,yBAAyB,UAAU,aAAa,SAAS,WAAW,CAAC;QAClF,OAAO,QAAQ,CAAsB,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,sBAAsB,EAAE,QAAQ,CAAC,CAAC;IAC7G,CAAC,CACF,CAAC;IAEF,OAAO,kCAAkC,SAAS,KAAK,UAAU,eAAe,QAAQ,IAAI,CAAC;AAC/F,CAAC"}
@@ -1,5 +0,0 @@
1
- export declare function keyDeregister(params: {
2
- teamName: string;
3
- accountId: string;
4
- }): Promise<void>;
5
- //# sourceMappingURL=key-deregister.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"key-deregister.d.ts","sourceRoot":"","sources":["../../src/tools/key-deregister.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBhB"}
@@ -1,19 +0,0 @@
1
- import { getSession } from "../lib/neo4j.js";
2
- export async function keyDeregister(params) {
3
- const { teamName, accountId } = params;
4
- const session = getSession();
5
- try {
6
- const result = await session.run(`MATCH (k:LoopTeamKey {teamName: $teamName, accountId: $accountId})
7
- DELETE k
8
- RETURN count(k) AS deleted`, { teamName, accountId });
9
- const deleted = result.records[0]?.get("deleted")?.toNumber?.() ?? 0;
10
- if (deleted === 0) {
11
- throw new Error(`Team "${teamName}" not found.`);
12
- }
13
- }
14
- finally {
15
- await session.close();
16
- }
17
- console.error(`[loop] key-deregister team=${teamName} account=${accountId}`);
18
- }
19
- //# sourceMappingURL=key-deregister.js.map