@rubytech/create-maxy-code 0.1.38 → 0.1.39

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 (297) hide show
  1. package/dist/__tests__/onboarding-state-readback.test.js +61 -0
  2. package/dist/onboarding-readback.js +27 -0
  3. package/package.json +1 -1
  4. package/payload/platform/lib/anthropic-key/dist/index.d.ts +22 -0
  5. package/payload/platform/lib/anthropic-key/dist/index.d.ts.map +1 -0
  6. package/payload/platform/lib/anthropic-key/dist/index.js +232 -0
  7. package/payload/platform/lib/anthropic-key/dist/index.js.map +1 -0
  8. package/payload/platform/package-lock.json +513 -753
  9. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.d.ts +39 -0
  10. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.d.ts.map +1 -0
  11. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.js +249 -0
  12. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.js.map +1 -0
  13. package/payload/platform/plugins/docs/references/platform.md +1 -1
  14. package/payload/platform/plugins/real-agency/plugins/.claude-plugin/marketplace.json +13 -0
  15. package/payload/platform/plugins/real-agency/plugins/loop/.claude-plugin/plugin.json +17 -0
  16. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/index.d.ts +2 -0
  17. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/index.d.ts.map +1 -0
  18. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/index.js +293 -0
  19. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/index.js.map +1 -0
  20. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.d.ts +10 -0
  21. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.d.ts.map +1 -0
  22. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.js +88 -0
  23. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.js.map +1 -0
  24. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.d.ts +82 -0
  25. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +1 -0
  26. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.js +427 -0
  27. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.js.map +1 -0
  28. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts +5 -0
  29. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +1 -0
  30. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js +40 -0
  31. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -0
  32. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +10 -0
  33. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +1 -0
  34. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.js +24 -0
  35. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.js.map +1 -0
  36. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.d.ts +16 -0
  37. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.d.ts.map +1 -0
  38. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.js +35 -0
  39. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.js.map +1 -0
  40. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.d.ts +5 -0
  41. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +1 -0
  42. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.js +19 -0
  43. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.js.map +1 -0
  44. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.d.ts +4 -0
  45. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.d.ts.map +1 -0
  46. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.js +14 -0
  47. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.js.map +1 -0
  48. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.d.ts +9 -0
  49. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.d.ts.map +1 -0
  50. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.js +60 -0
  51. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.js.map +1 -0
  52. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +13 -0
  53. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +1 -0
  54. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.js +41 -0
  55. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +1 -0
  56. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +9 -0
  57. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +1 -0
  58. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.js +16 -0
  59. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +1 -0
  60. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +15 -0
  61. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +1 -0
  62. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.js +11 -0
  63. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +1 -0
  64. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.d.ts +10 -0
  65. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +1 -0
  66. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.js +39 -0
  67. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.js.map +1 -0
  68. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.d.ts +9 -0
  69. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +1 -0
  70. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.js +125 -0
  71. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.js.map +1 -0
  72. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.d.ts +18 -0
  73. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.d.ts.map +1 -0
  74. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.js +87 -0
  75. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.js.map +1 -0
  76. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.d.ts +10 -0
  77. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +1 -0
  78. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.js +82 -0
  79. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.js.map +1 -0
  80. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.d.ts +12 -0
  81. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +1 -0
  82. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.js +32 -0
  83. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.js.map +1 -0
  84. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.d.ts +15 -0
  85. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.d.ts.map +1 -0
  86. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.js +11 -0
  87. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.js.map +1 -0
  88. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.d.ts +16 -0
  89. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.d.ts.map +1 -0
  90. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.js +41 -0
  91. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.js.map +1 -0
  92. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.d.ts +13 -0
  93. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.d.ts.map +1 -0
  94. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.js +49 -0
  95. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.js.map +1 -0
  96. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.d.ts +7 -0
  97. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +1 -0
  98. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.js +19 -0
  99. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.js.map +1 -0
  100. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.d.ts +5 -0
  101. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.d.ts.map +1 -0
  102. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.js +32 -0
  103. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.js.map +1 -0
  104. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.d.ts +14 -0
  105. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +1 -0
  106. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.js +11 -0
  107. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.js.map +1 -0
  108. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +9 -0
  109. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +1 -0
  110. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.js +85 -0
  111. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.js.map +1 -0
  112. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.d.ts +13 -0
  113. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +1 -0
  114. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.js +44 -0
  115. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.js.map +1 -0
  116. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.d.ts +14 -0
  117. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +1 -0
  118. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.js +18 -0
  119. package/payload/platform/plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.js.map +1 -0
  120. package/payload/premium-plugins/real-agency/plugins/.claude-plugin/marketplace.json +13 -0
  121. package/payload/premium-plugins/real-agency/plugins/loop/.claude-plugin/plugin.json +17 -0
  122. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.d.ts +2 -0
  123. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.d.ts.map +1 -0
  124. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.js +293 -0
  125. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.js.map +1 -0
  126. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.d.ts +10 -0
  127. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.d.ts.map +1 -0
  128. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.js +88 -0
  129. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.js.map +1 -0
  130. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.d.ts +82 -0
  131. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +1 -0
  132. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.js +427 -0
  133. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.js.map +1 -0
  134. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts +5 -0
  135. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +1 -0
  136. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js +40 -0
  137. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -0
  138. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +10 -0
  139. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +1 -0
  140. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.js +24 -0
  141. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.js.map +1 -0
  142. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.d.ts +16 -0
  143. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.d.ts.map +1 -0
  144. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.js +35 -0
  145. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.js.map +1 -0
  146. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.d.ts +5 -0
  147. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +1 -0
  148. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.js +19 -0
  149. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.js.map +1 -0
  150. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.d.ts +4 -0
  151. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.d.ts.map +1 -0
  152. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.js +14 -0
  153. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.js.map +1 -0
  154. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.d.ts +9 -0
  155. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.d.ts.map +1 -0
  156. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.js +60 -0
  157. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.js.map +1 -0
  158. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +13 -0
  159. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +1 -0
  160. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.js +41 -0
  161. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +1 -0
  162. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +9 -0
  163. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +1 -0
  164. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.js +16 -0
  165. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +1 -0
  166. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +15 -0
  167. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +1 -0
  168. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.js +11 -0
  169. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +1 -0
  170. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.d.ts +10 -0
  171. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +1 -0
  172. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.js +39 -0
  173. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.js.map +1 -0
  174. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.d.ts +9 -0
  175. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +1 -0
  176. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.js +125 -0
  177. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.js.map +1 -0
  178. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.d.ts +18 -0
  179. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.d.ts.map +1 -0
  180. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.js +87 -0
  181. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.js.map +1 -0
  182. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.d.ts +10 -0
  183. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +1 -0
  184. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.js +82 -0
  185. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.js.map +1 -0
  186. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.d.ts +12 -0
  187. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +1 -0
  188. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.js +32 -0
  189. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.js.map +1 -0
  190. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.d.ts +15 -0
  191. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.d.ts.map +1 -0
  192. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.js +11 -0
  193. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.js.map +1 -0
  194. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.d.ts +16 -0
  195. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.d.ts.map +1 -0
  196. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.js +41 -0
  197. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.js.map +1 -0
  198. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.d.ts +13 -0
  199. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.d.ts.map +1 -0
  200. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.js +49 -0
  201. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.js.map +1 -0
  202. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.d.ts +7 -0
  203. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +1 -0
  204. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.js +19 -0
  205. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.js.map +1 -0
  206. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.d.ts +5 -0
  207. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.d.ts.map +1 -0
  208. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.js +32 -0
  209. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.js.map +1 -0
  210. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.d.ts +14 -0
  211. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +1 -0
  212. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.js +11 -0
  213. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.js.map +1 -0
  214. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +9 -0
  215. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +1 -0
  216. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.js +85 -0
  217. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.js.map +1 -0
  218. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.d.ts +13 -0
  219. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +1 -0
  220. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.js +44 -0
  221. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.js.map +1 -0
  222. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.d.ts +14 -0
  223. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +1 -0
  224. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.js +18 -0
  225. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.js.map +1 -0
  226. package/payload/server/public/assets/{Checkbox-DAki3vDW.js → Checkbox-CmCjmfJy.js} +1 -1
  227. package/payload/server/public/assets/{admin-CyAZtsYZ.js → admin-CtodW6As.js} +1 -1
  228. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-C-hla3Ip.js → architectureDiagram-Q4EWVU46-CfOjbx0H.js} +1 -1
  229. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-CbzjtNs3.js → blockDiagram-DXYQGD6D-D0kA2C9i.js} +1 -1
  230. package/payload/server/public/assets/{brand-Cun0PBrA.css → brand-6hKfBgOI.css} +1 -1
  231. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-B87UblA0.js → c4Diagram-AHTNJAMY-CDgXiXgj.js} +1 -1
  232. package/payload/server/public/assets/channel-DA7MGMzQ.js +1 -0
  233. package/payload/server/public/assets/{chunk-336JU56O-2a2pVlSg.js → chunk-336JU56O-BfBTcT5X.js} +2 -2
  234. package/payload/server/public/assets/{chunk-426QAEUC-j9NOD8_a.js → chunk-426QAEUC-BdSSZ1Kw.js} +1 -1
  235. package/payload/server/public/assets/{chunk-4TB4RGXK-Cs872xAq.js → chunk-4TB4RGXK-UvE1im9g.js} +1 -1
  236. package/payload/server/public/assets/{chunk-5FUZZQ4R-BnDFbZ_I.js → chunk-5FUZZQ4R-Dx4DslXz.js} +1 -1
  237. package/payload/server/public/assets/{chunk-5PVQY5BW-Bu5B3Hyf.js → chunk-5PVQY5BW-CNHawhLJ.js} +1 -1
  238. package/payload/server/public/assets/{chunk-EDXVE4YY-B96Fw4FF.js → chunk-EDXVE4YY-Rmjv-1et.js} +1 -1
  239. package/payload/server/public/assets/{chunk-ENJZ2VHE-CcGrGQim.js → chunk-ENJZ2VHE-CL-LeH3r.js} +1 -1
  240. package/payload/server/public/assets/{chunk-ICPOFSXX-ZRvcI4Ai.js → chunk-ICPOFSXX-B2MFOJDt.js} +1 -1
  241. package/payload/server/public/assets/{chunk-OYMX7WX6-B6RI9Fbf.js → chunk-OYMX7WX6-BxcIcCt5.js} +1 -1
  242. package/payload/server/public/assets/{chunk-U2HBQHQK-BYGHVYyo.js → chunk-U2HBQHQK-COzwOBrY.js} +1 -1
  243. package/payload/server/public/assets/{chunk-X2U36JSP-rwNs-gTO.js → chunk-X2U36JSP-B0rjT5hL.js} +1 -1
  244. package/payload/server/public/assets/{chunk-YZCP3GAM-jPttJRap.js → chunk-YZCP3GAM-pwrIw0XH.js} +1 -1
  245. package/payload/server/public/assets/{chunk-ZZ45TVLE-DLykWOT5.js → chunk-ZZ45TVLE-BXpeAm0k.js} +1 -1
  246. package/payload/server/public/assets/classDiagram-6PBFFD2Q-DqfmcWSr.js +1 -0
  247. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BVOMSbZ_.js +1 -0
  248. package/payload/server/public/assets/clone-Byp7hagU.js +1 -0
  249. package/payload/server/public/assets/{dagre-jnQDnF-5.js → dagre-DjOJn05k.js} +1 -1
  250. package/payload/server/public/assets/{dagre-KV5264BT-C6wSzHX2.js → dagre-KV5264BT-PczvQiEh.js} +1 -1
  251. package/payload/server/public/assets/data-A7azIkZU.js +1 -0
  252. package/payload/server/public/assets/{device-url-actions-y1tXNDZx.js → device-url-actions-C55ZS_Zg.js} +1 -1
  253. package/payload/server/public/assets/{diagram-5BDNPKRD-N3X-n90h.js → diagram-5BDNPKRD-D477xo5F.js} +1 -1
  254. package/payload/server/public/assets/{diagram-G4DWMVQ6-vfmbzdPd.js → diagram-G4DWMVQ6-C-HAtbtT.js} +1 -1
  255. package/payload/server/public/assets/{diagram-MMDJMWI5-BETmPx_w.js → diagram-MMDJMWI5-B9wus4H0.js} +1 -1
  256. package/payload/server/public/assets/{diagram-TYMM5635-BSUGM4wG.js → diagram-TYMM5635-UMZLloFr.js} +1 -1
  257. package/payload/server/public/assets/{erDiagram-SMLLAGMA-CWZ9OwMb.js → erDiagram-SMLLAGMA-B8E52Mp4.js} +1 -1
  258. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BpQOQS1a.js → flowDiagram-DWJPFMVM-CUel34tq.js} +1 -1
  259. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Dc59igCS.js → ganttDiagram-T4ZO3ILL-BfwE-Xav.js} +1 -1
  260. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-D6lXg3zl.js → gitGraphDiagram-UUTBAWPF-2d6tXRIM.js} +1 -1
  261. package/payload/server/public/assets/graph-Dx83EhtP.js +1 -0
  262. package/payload/server/public/assets/{graph-labels-DFyNH0jb.js → graph-labels-Bg2Bzelb.js} +1 -1
  263. package/payload/server/public/assets/{graphlib-yG7kH8Fr.js → graphlib-CCo9-wNJ.js} +1 -1
  264. package/payload/server/public/assets/{infoDiagram-42DDH7IO-TS9Pv8Os.js → infoDiagram-42DDH7IO-DB1SVWL6.js} +1 -1
  265. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BJiJJTq6.js → ishikawaDiagram-UXIWVN3A-CdeMUTYS.js} +1 -1
  266. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-C7PW4fmw.js → journeyDiagram-VCZTEJTY-D8x8TUoc.js} +1 -1
  267. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-BEk21ciD.js → kanban-definition-6JOO6SKY-Cmkhd1mO.js} +1 -1
  268. package/payload/server/public/assets/{line-DusyVWDE.js → line-CoHkpBv3.js} +1 -1
  269. package/payload/server/public/assets/{mermaid-parser.core-DeeojQSb.js → mermaid-parser.core-C7R2PfZC.js} +1 -1
  270. package/payload/server/public/assets/{mermaid.core-p65Lo7Sj.js → mermaid.core-lQaq-kll.js} +3 -3
  271. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-B0jxFxdS.js → mindmap-definition-QFDTVHPH-CsPq3pX1.js} +1 -1
  272. package/payload/server/public/assets/{page-BeYGnDzI.js → page-CBKzjUHO.js} +1 -1
  273. package/payload/server/public/assets/{page-x5khmfRx.js → page-DwEaAdVp.js} +1 -1
  274. package/payload/server/public/assets/{pieDiagram-DEJITSTG-DJ5GKYt6.js → pieDiagram-DEJITSTG-FZH9sTnP.js} +1 -1
  275. package/payload/server/public/assets/{public-cnoUs7vq.js → public-hGLzxhE_.js} +3 -3
  276. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-BV7R-kwV.js → quadrantDiagram-34T5L4WZ-9poxfoqh.js} +1 -1
  277. package/payload/server/public/assets/{requirementDiagram-MS252O5E-DRiLzlGN.js → requirementDiagram-MS252O5E-Ce7iOdT_.js} +1 -1
  278. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-C5-6_cCI.js → sankeyDiagram-XADWPNL6-DINuXatI.js} +1 -1
  279. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-5FXm_VYM.js → sequenceDiagram-FGHM5R23-CSMec3EK.js} +1 -1
  280. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-FCQTaGqV.js → stateDiagram-FHFEXIEX-15DKzypj.js} +1 -1
  281. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-AcaK_QfD.js +1 -0
  282. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-tvtq62ef.js → timeline-definition-GMOUNBTQ-BxIRc9Pu.js} +1 -1
  283. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Dk-k7CE4.js → vennDiagram-DHZGUBPP-DdgRyU55.js} +1 -1
  284. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-CZSrqniY.js → wardleyDiagram-NUSXRM2D-CKvhU1Uj.js} +1 -1
  285. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CpGLpk7Q.js → xychartDiagram-5P7HB3ND-d0V1V4PD.js} +1 -1
  286. package/payload/server/public/data.html +5 -5
  287. package/payload/server/public/graph.html +6 -6
  288. package/payload/server/public/index.html +8 -8
  289. package/payload/server/public/public.html +5 -5
  290. package/payload/server/public/assets/channel-CTNo72W7.js +0 -1
  291. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BaV5nDmT.js +0 -1
  292. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DOKlCKjY.js +0 -1
  293. package/payload/server/public/assets/clone-sQSwlSln.js +0 -1
  294. package/payload/server/public/assets/data-DbkuXcPb.js +0 -1
  295. package/payload/server/public/assets/graph-CC5_6-dg.js +0 -1
  296. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BdpPhdqg.js +0 -1
  297. /package/payload/server/public/assets/{brand-lj7EhWRg.js → brand-DXOx08r0.js} +0 -0
@@ -0,0 +1,39 @@
1
+ export interface OnboardingState {
2
+ currentStep: number;
3
+ step1CompletedAt: string | null;
4
+ step2CompletedAt: string | null;
5
+ step3CompletedAt: string | null;
6
+ step4CompletedAt: string | null;
7
+ step5CompletedAt: string | null;
8
+ step6CompletedAt: string | null;
9
+ step7CompletedAt: string | null;
10
+ step8CompletedAt: string | null;
11
+ step9CompletedAt: string | null;
12
+ createdAt: string;
13
+ updatedAt: string;
14
+ }
15
+ export interface SessionLike {
16
+ run(query: string, params?: Record<string, unknown>): Promise<{
17
+ records: Array<{
18
+ get(key: string): unknown;
19
+ }>;
20
+ }>;
21
+ close(): Promise<void>;
22
+ }
23
+ /**
24
+ * Task 562: consume the step-7 completion flag written by setup-tunnel.sh
25
+ * before the service restart. The script runs inside ${BRAND}.service's
26
+ * cgroup and cannot complete the MCP call after dispatching the restart —
27
+ * so it drops a filesystem marker instead. The first read of onboarding
28
+ * state after the restart picks it up, advances the graph via the same
29
+ * CASE-WHEN-NULL cypher as completeOnboardingStep, and deletes the marker.
30
+ *
31
+ * Idempotent at every layer: a missing flag is a no-op; a flag present
32
+ * against an already-completed step is a no-op on the graph (CASE-WHEN-NULL
33
+ * preserves the existing timestamp); a crash between graph write and flag
34
+ * delete re-consumes on the next call with the same no-op outcome.
35
+ */
36
+ export declare function consumeStep7Flag(session: SessionLike, accountId: string, accountDir: string): Promise<boolean>;
37
+ export declare function getOnboardingState(sessionFactory: () => SessionLike, accountId: string, accountDir: string): Promise<OnboardingState>;
38
+ export declare function completeOnboardingStep(sessionFactory: () => SessionLike, accountId: string, step: number): Promise<OnboardingState>;
39
+ //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAC5D,OAAO,EAAE,KAAK,CAAC;YAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC,CAAC;KAC/C,CAAC,CAAC;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAoED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CA4DlB;AAgBD,wBAAsB,kBAAkB,CACtC,cAAc,EAAE,MAAM,WAAW,EACjC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CA4E1B;AAED,wBAAsB,sBAAsB,CAC1C,cAAc,EAAE,MAAM,WAAW,EACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,eAAe,CAAC,CA6C1B"}
@@ -0,0 +1,249 @@
1
+ // Onboarding state management — graph-persisted workflow state.
2
+ // Purpose-built for Phase 0; migrates to a Workflow node with Task 13.
3
+ import { existsSync, readFileSync, rmSync, writeFileSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ const STEP_FIELDS = [
6
+ "step1CompletedAt",
7
+ "step2CompletedAt",
8
+ "step3CompletedAt",
9
+ "step4CompletedAt",
10
+ "step5CompletedAt",
11
+ "step6CompletedAt",
12
+ "step7CompletedAt",
13
+ "step8CompletedAt",
14
+ "step9CompletedAt",
15
+ ];
16
+ // neo4j-driver v5 returns Integer objects for integer properties, not native
17
+ // JS numbers. This converts them safely (values 0–9 are well within range).
18
+ function toJsNumber(val) {
19
+ if (typeof val === "number")
20
+ return val;
21
+ if (val && typeof val === "object" && "toNumber" in val) {
22
+ return val.toNumber();
23
+ }
24
+ return 0;
25
+ }
26
+ function recordToState(record) {
27
+ return {
28
+ currentStep: toJsNumber(record.get("currentStep")),
29
+ step1CompletedAt: record.get("step1CompletedAt") ?? null,
30
+ step2CompletedAt: record.get("step2CompletedAt") ?? null,
31
+ step3CompletedAt: record.get("step3CompletedAt") ?? null,
32
+ step4CompletedAt: record.get("step4CompletedAt") ?? null,
33
+ step5CompletedAt: record.get("step5CompletedAt") ?? null,
34
+ step6CompletedAt: record.get("step6CompletedAt") ?? null,
35
+ step7CompletedAt: record.get("step7CompletedAt") ?? null,
36
+ step8CompletedAt: record.get("step8CompletedAt") ?? null,
37
+ step9CompletedAt: record.get("step9CompletedAt") ?? null,
38
+ createdAt: record.get("createdAt") ?? new Date().toISOString(),
39
+ updatedAt: record.get("updatedAt") ?? new Date().toISOString(),
40
+ };
41
+ }
42
+ function readMigrationStep(accountDir) {
43
+ try {
44
+ const raw = readFileSync(join(accountDir, "account.json"), "utf-8");
45
+ const config = JSON.parse(raw);
46
+ if (typeof config.onboardingStep === "number" && config.onboardingStep > 0) {
47
+ return config.onboardingStep;
48
+ }
49
+ }
50
+ catch {
51
+ // File missing, unreadable, or malformed — no migration data
52
+ }
53
+ return 0;
54
+ }
55
+ function removeOnboardingStepFromFile(accountDir) {
56
+ try {
57
+ const configPath = join(accountDir, "account.json");
58
+ const raw = readFileSync(configPath, "utf-8");
59
+ const config = JSON.parse(raw);
60
+ if ("onboardingStep" in config) {
61
+ delete config.onboardingStep;
62
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
63
+ }
64
+ }
65
+ catch {
66
+ // Tolerate cleanup failure — graph is the authority now
67
+ }
68
+ }
69
+ /**
70
+ * Task 562: consume the step-7 completion flag written by setup-tunnel.sh
71
+ * before the service restart. The script runs inside ${BRAND}.service's
72
+ * cgroup and cannot complete the MCP call after dispatching the restart —
73
+ * so it drops a filesystem marker instead. The first read of onboarding
74
+ * state after the restart picks it up, advances the graph via the same
75
+ * CASE-WHEN-NULL cypher as completeOnboardingStep, and deletes the marker.
76
+ *
77
+ * Idempotent at every layer: a missing flag is a no-op; a flag present
78
+ * against an already-completed step is a no-op on the graph (CASE-WHEN-NULL
79
+ * preserves the existing timestamp); a crash between graph write and flag
80
+ * delete re-consumes on the next call with the same no-op outcome.
81
+ */
82
+ export async function consumeStep7Flag(session, accountId, accountDir) {
83
+ const flagPath = join(accountDir, "onboarding", "step7-complete");
84
+ if (!existsSync(flagPath))
85
+ return false;
86
+ let completedAt = new Date().toISOString();
87
+ try {
88
+ const raw = readFileSync(flagPath, "utf-8").trim();
89
+ if (raw) {
90
+ const parsed = JSON.parse(raw);
91
+ if (typeof parsed.completedAt === "string") {
92
+ completedAt = parsed.completedAt;
93
+ }
94
+ }
95
+ }
96
+ catch {
97
+ // Malformed flag content still advances state — the flag's presence
98
+ // alone is the authoritative signal; the embedded timestamp is forensic.
99
+ }
100
+ // RETURN count(o) so we can detect the "no OnboardingState node" case
101
+ // where SET is a silent no-op. Without this check, rmSync below would
102
+ // delete the flag against a graph that never applied the write, silently
103
+ // losing the step-7 completion signal forever.
104
+ const result = await session.run(`MATCH (o:OnboardingState {accountId: $accountId})
105
+ SET o.step7CompletedAt = CASE WHEN o.step7CompletedAt IS NULL THEN $completedAt ELSE o.step7CompletedAt END,
106
+ o.currentStep = CASE WHEN 7 > o.currentStep THEN 7 ELSE o.currentStep END,
107
+ o.updatedAt = $completedAt
108
+ RETURN count(o) AS updated`, { accountId, completedAt });
109
+ const updatedRaw = result.records[0]?.get("updated");
110
+ const updated = toJsNumber(updatedRaw);
111
+ if (updated === 0) {
112
+ // No OnboardingState node yet — leave the flag in place so the next
113
+ // reader (after node creation via MERGE in this function's migration
114
+ // branch below) can still consume it.
115
+ console.log(`[onboarding-flag-consumed] accountId=${accountId.slice(0, 8)}… step=7 ` +
116
+ `source=filesystem flagPath=${flagPath} skipped=no-node`);
117
+ return false;
118
+ }
119
+ console.log(`[onboarding-flag-consumed] accountId=${accountId.slice(0, 8)}… step=7 ` +
120
+ `source=filesystem flagPath=${flagPath} completedAt=${completedAt}`);
121
+ try {
122
+ rmSync(flagPath);
123
+ }
124
+ catch (err) {
125
+ console.error(`[onboarding-flag-consumed] warn: failed to delete ${flagPath}: ` +
126
+ `${err instanceof Error ? err.message : String(err)}`);
127
+ }
128
+ return true;
129
+ }
130
+ const READ_STATE_QUERY = `MATCH (o:OnboardingState {accountId: $accountId})
131
+ RETURN o.currentStep AS currentStep,
132
+ o.step1CompletedAt AS step1CompletedAt,
133
+ o.step2CompletedAt AS step2CompletedAt,
134
+ o.step3CompletedAt AS step3CompletedAt,
135
+ o.step4CompletedAt AS step4CompletedAt,
136
+ o.step5CompletedAt AS step5CompletedAt,
137
+ o.step6CompletedAt AS step6CompletedAt,
138
+ o.step7CompletedAt AS step7CompletedAt,
139
+ o.step8CompletedAt AS step8CompletedAt,
140
+ o.step9CompletedAt AS step9CompletedAt,
141
+ o.createdAt AS createdAt,
142
+ o.updatedAt AS updatedAt`;
143
+ export async function getOnboardingState(sessionFactory, accountId, accountDir) {
144
+ const session = sessionFactory();
145
+ try {
146
+ // Check for existing graph node
147
+ const existing = await session.run(READ_STATE_QUERY, { accountId });
148
+ const nodeExisted = existing.records.length > 0;
149
+ if (nodeExisted) {
150
+ // Task 562: consume setup-tunnel.sh step-7 flag against the existing
151
+ // node. loadOnboardingStep (UI side) usually does this first at session
152
+ // start; this call is defensive in case this read precedes it.
153
+ //
154
+ // Always re-read after the consume attempt. If a concurrent caller
155
+ // consumed the flag between our initial read and our consumeStep7Flag
156
+ // call, consumeStep7Flag returns false (flag gone) but the graph still
157
+ // advanced — returning `existing.records[0]` would hand back the stale
158
+ // pre-consumption record. One extra indexed MATCH is negligible and
159
+ // guarantees the caller sees the authoritative state.
160
+ await consumeStep7Flag(session, accountId, accountDir);
161
+ const refreshed = await session.run(READ_STATE_QUERY, { accountId });
162
+ return recordToState(refreshed.records[0]);
163
+ }
164
+ // No graph node — check for migration from account.json
165
+ const migratedStep = readMigrationStep(accountDir);
166
+ const now = new Date().toISOString();
167
+ // Build step completion timestamps for migrated steps.
168
+ // account.json only stored a step counter, not per-step timestamps,
169
+ // so migrated steps all get the current time — the original times
170
+ // were never recorded.
171
+ const stepProps = {};
172
+ for (let i = 0; i < STEP_FIELDS.length; i++) {
173
+ stepProps[STEP_FIELDS[i]] = i < migratedStep ? now : null;
174
+ }
175
+ // Create the node via MERGE (idempotent under concurrent access)
176
+ const result = await session.run(`MERGE (o:OnboardingState {accountId: $accountId})
177
+ ON CREATE SET
178
+ o.currentStep = $currentStep,
179
+ o.step1CompletedAt = $step1CompletedAt,
180
+ o.step2CompletedAt = $step2CompletedAt,
181
+ o.step3CompletedAt = $step3CompletedAt,
182
+ o.step4CompletedAt = $step4CompletedAt,
183
+ o.step5CompletedAt = $step5CompletedAt,
184
+ o.step6CompletedAt = $step6CompletedAt,
185
+ o.step7CompletedAt = $step7CompletedAt,
186
+ o.step8CompletedAt = $step8CompletedAt,
187
+ o.step9CompletedAt = $step9CompletedAt,
188
+ o.createdAt = $now,
189
+ o.updatedAt = $now
190
+ RETURN o.currentStep AS currentStep,
191
+ o.step1CompletedAt AS step1CompletedAt,
192
+ o.step2CompletedAt AS step2CompletedAt,
193
+ o.step3CompletedAt AS step3CompletedAt,
194
+ o.step4CompletedAt AS step4CompletedAt,
195
+ o.step5CompletedAt AS step5CompletedAt,
196
+ o.step6CompletedAt AS step6CompletedAt,
197
+ o.step7CompletedAt AS step7CompletedAt,
198
+ o.step8CompletedAt AS step8CompletedAt,
199
+ o.step9CompletedAt AS step9CompletedAt,
200
+ o.createdAt AS createdAt,
201
+ o.updatedAt AS updatedAt`, { accountId, currentStep: migratedStep, now, ...stepProps });
202
+ // Clean up account.json if migration happened
203
+ if (migratedStep > 0) {
204
+ removeOnboardingStepFromFile(accountDir);
205
+ }
206
+ return recordToState(result.records[0]);
207
+ }
208
+ finally {
209
+ await session.close();
210
+ }
211
+ }
212
+ export async function completeOnboardingStep(sessionFactory, accountId, step) {
213
+ if (!Number.isInteger(step) || step < 1 || step > 9) {
214
+ throw new Error("Step must be between 1 and 9");
215
+ }
216
+ const session = sessionFactory();
217
+ try {
218
+ const stepField = STEP_FIELDS[step - 1];
219
+ const now = new Date().toISOString();
220
+ // Single query: MATCH + SET. If no node exists, MATCH returns zero
221
+ // records and we detect that from the result — no separate check needed.
222
+ const result = await session.run(`MATCH (o:OnboardingState {accountId: $accountId})
223
+ SET o.${stepField} = CASE WHEN o.${stepField} IS NULL THEN $now ELSE o.${stepField} END,
224
+ o.currentStep = CASE WHEN $step > o.currentStep THEN $step ELSE o.currentStep END,
225
+ o.updatedAt = $now
226
+ RETURN o.currentStep AS currentStep,
227
+ o.step1CompletedAt AS step1CompletedAt,
228
+ o.step2CompletedAt AS step2CompletedAt,
229
+ o.step3CompletedAt AS step3CompletedAt,
230
+ o.step4CompletedAt AS step4CompletedAt,
231
+ o.step5CompletedAt AS step5CompletedAt,
232
+ o.step6CompletedAt AS step6CompletedAt,
233
+ o.step7CompletedAt AS step7CompletedAt,
234
+ o.step8CompletedAt AS step8CompletedAt,
235
+ o.step9CompletedAt AS step9CompletedAt,
236
+ o.createdAt AS createdAt,
237
+ o.updatedAt AS updatedAt`, { accountId, step, now });
238
+ if (result.records.length === 0) {
239
+ throw new Error("No onboarding state found for this account. Call onboarding-get first.");
240
+ }
241
+ console.log(`[onboarding-step-complete] accountId=${accountId.slice(0, 8)}… ` +
242
+ `step=${step} completedAt=${now}`);
243
+ return recordToState(result.records[0]);
244
+ }
245
+ finally {
246
+ await session.close();
247
+ }
248
+ }
249
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"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"}
@@ -70,7 +70,7 @@ There is no dashboard, no settings panel, no menus. Everything is done through c
70
70
 
71
71
  The chat input auto-grows as you type — it expands to fit your message and shrinks back when you delete text. You can also drag the resize handle above the input to set a custom height.
72
72
 
73
- The admin interface is a three-pane layout: a sidebar on the left with navigation (Sessions, People, Agents, Projects, Tasks, Artefacts) and your recent conversations; the chat in the middle; and an artefact pane on the right that opens when you select a document, click a project, or open Browser, Data, or Graph from the menu, holding the surface side-by-side with the conversation so the chat stays live while you work in it. Above the SESSIONS group headoutside the scrolling sessions list — a borderless row holds two controls: a "+ New session" button on the left that spawns a fresh Claude Code session, and a Mode trigger on the right showing the current permission mode (Ask, Accept edits, Plan, or Auto). Both controls render as plain text-plus-icon affordances with no surrounding rectangle; hover only tints the background. Clicking the Mode trigger opens a popover downward from the row whose header reads "Mode" and lists the four permission modes with the current selection check-marked. The sidebar's nav rows swap the list view in place: Sessions shows recent conversations, Projects shows your active work projects, and Artefacts lists every KnowledgeDocument plus this account's agent templates (your admin agent's IDENTITY, SOUL, and KNOWLEDGE files plus one entry per enabled specialist). Each recent session row carries a small status dot (filled sage for alive, hollow circle for ended) so you can read the live state at a glance without parsing the subtitle. The People, Agents, and Tasks rows are graph shortcuts: clicking each opens the artefact-pane Graph filtered to every Person, every public Agent, or every Task in your account respectively, with no side-list, because the graph itself is the result. Public agents become first-class graph entities the moment you create them, with edges to their IDENTITY/SOUL/KNOWLEDGE files, edges to every knowledge document they have access to, and edges from every conversation they have handled, so a single Agents click reveals the whole shape of who knows what and who has been talking to whom. Click an artefact row to open the document. KnowledgeDocuments and your admin agent's templates are editable: type in the document and changes save automatically; specialist agent templates are read-only because they ship with Maxy and your edits would be overwritten on the next install. PDF artefacts render inline so you can read them without leaving the pane. If your browser doesn't have a built-in PDF viewer, a Download button appears instead. Artefacts that have no readable file backing them (orphan rows, files removed from disk, unsupported content types) show a one-line banner explaining the skip instead of opening to a blank pane. Click a project row to open the Graph view focused on that project's neighbourhood; clicking a second project swaps the focus rather than stacking on top. The chat and artefact divider is drag-resizable: drag the line between the columns to make either side wider; double-click it to reset to half of the available width (viewport minus sidebar), clamped to the chat and artefact min-width floors. Your chosen width is remembered across reloads. On wider screens (>1280px) all three panes are visible. The sidebar narrows at 1280px, the artefact pane hides at 1080px (Browser, Data, and Graph then open as full-window pages instead), and the sidebar collapses to a 56px icon rail at 820px. On every viewport the chat header reads left to right as a triptych: a dedicated sidebar toggle (the panel-right icon, which swaps to panel-right-open when the sidebar is showing), the brand mark next to the title in the centre, and the menu burger on the right. This header toggle is the sole sidebar-toggle button; the sidebar itself no longer carries a duplicate. Tap the sidebar toggle to show or hide the sidebar: on phones (<720px) it slides the drawer in or out, on wider screens it collapses or expands the sidebar column. The brand mark in the centre is decorative; clicks go through the dedicated toggle so the affordance is unambiguous. The drawer animation only fires on tap (220ms slide in or out); resizing your window across the 720px boundary snaps the layout without animation, so you never see a half-open flash. At ≤640px the session metadata pane stacks each label above its value instead of the desktop two-column grid, and the row of action buttons (Open in new tab / Open JSONL / Rename / Pin / Archive / End or Purge) collapses behind a single Actions trigger that opens a popover upward from the foot of the pane. Breakpoint summary: >1280px = full sidebar + chat + artefact pane (drag-resizable divider); 1280px→1080px = sidebar narrows; 1080px→820px = artefact pane hides (Browser/Data/Graph open as full-window pages instead); 820px→720px = sidebar collapses to 56px icon rail; ≤720px = sidebar becomes off-canvas drawer (vertical stack of nav, recents list, foot, the same shape as the desktop sidebar, just on top of the chat instead of beside it).
73
+ The admin interface is a three-pane layout: a sidebar on the left with navigation (Sessions, People, Agents, Projects, Tasks, Artefacts) and your recent conversations; the chat in the middle; and an artefact pane on the right that opens when you select a document, click a project, or open Browser, Data, or Graph from the menu, holding the surface side-by-side with the conversation so the chat stays live while you work in it. At the very top of the sidebar above the nav rows — a borderless row holds two controls: a "+ New session" button on the left that spawns a fresh Claude Code session, and a Mode trigger on the right showing the current permission mode (Ask, Accept edits, Plan, or Auto). The sidebar's vertical order is: new-session strip first, then the nav (Sessions, People, Agents, Projects, Tasks, Artefacts), then the sessions list, then the footer. Both controls render as plain text-plus-icon affordances with no surrounding rectangle; hover only tints the background. Clicking the Mode trigger opens a popover downward from the row whose header reads "Mode" and lists the four permission modes with the current selection check-marked. The sidebar's nav rows swap the list view in place: Sessions shows recent conversations, Projects shows your active work projects, and Artefacts lists every KnowledgeDocument plus this account's agent templates (your admin agent's IDENTITY, SOUL, and KNOWLEDGE files plus one entry per enabled specialist). Each recent session row carries a small status dot (filled sage for alive, hollow circle for ended) so you can read the live state at a glance without parsing the subtitle. The People, Agents, and Tasks rows are graph shortcuts: clicking each opens the artefact-pane Graph filtered to every Person, every public Agent, or every Task in your account respectively, with no side-list, because the graph itself is the result. Public agents become first-class graph entities the moment you create them, with edges to their IDENTITY/SOUL/KNOWLEDGE files, edges to every knowledge document they have access to, and edges from every conversation they have handled, so a single Agents click reveals the whole shape of who knows what and who has been talking to whom. Click an artefact row to open the document. KnowledgeDocuments and your admin agent's templates are editable: type in the document and changes save automatically; specialist agent templates are read-only because they ship with Maxy and your edits would be overwritten on the next install. PDF artefacts render inline so you can read them without leaving the pane. If your browser doesn't have a built-in PDF viewer, a Download button appears instead. Artefacts that have no readable file backing them (orphan rows, files removed from disk, unsupported content types) show a one-line banner explaining the skip instead of opening to a blank pane. Click a project row to open the Graph view focused on that project's neighbourhood; clicking a second project swaps the focus rather than stacking on top. The chat and artefact divider is drag-resizable: drag the line between the columns to make either side wider; double-click it to reset to half of the available width (viewport minus sidebar), clamped to the chat and artefact min-width floors. Your chosen width is remembered across reloads. On wider screens (>1280px) all three panes are visible. The sidebar narrows at 1280px, the artefact pane hides at 1080px (Browser, Data, and Graph then open as full-window pages instead), and the sidebar collapses to a 56px icon rail at 820px. On every viewport the chat header reads left to right as a triptych: a dedicated sidebar toggle (the panel-right icon, which swaps to panel-right-open when the sidebar is showing), the brand mark next to the title in the centre, and the menu burger on the right. This header toggle is the sole sidebar-toggle button; the sidebar itself no longer carries a duplicate. Tap the sidebar toggle to show or hide the sidebar: on phones (<720px) it slides the drawer in or out, on wider screens it collapses or expands the sidebar column. The brand mark in the centre is decorative; clicks go through the dedicated toggle so the affordance is unambiguous. The drawer animation only fires on tap (220ms slide in or out); resizing your window across the 720px boundary snaps the layout without animation, so you never see a half-open flash. At ≤640px the session metadata pane stacks each label above its value instead of the desktop two-column grid, and the row of action buttons (Open in new tab / Open JSONL / Rename / Pin / Archive / End or Purge) collapses behind a single Actions trigger that opens a popover upward from the foot of the pane. Breakpoint summary: >1280px = full sidebar + chat + artefact pane (drag-resizable divider); 1280px→1080px = sidebar narrows; 1080px→820px = artefact pane hides (Browser/Data/Graph open as full-window pages instead); 820px→720px = sidebar collapses to 56px icon rail; ≤720px = sidebar becomes off-canvas drawer (vertical stack of nav, recents list, foot, the same shape as the desktop sidebar, just on top of the chat instead of beside it).
74
74
 
75
75
  Page titles are brand-aware: the browser tab shows your product name (e.g. `Real Agent` instead of `Maxy`) on every shell — chat, graph, and data — so a non-default brand never leaks the default name in tab strips or browser history.
76
76
 
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "maxy-premium-real-agency",
3
+ "owner": {
4
+ "name": "Rubytech LLC"
5
+ },
6
+ "plugins": [
7
+ {
8
+ "name": "loop",
9
+ "source": "./loop",
10
+ "version": "0.1.0"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "loop",
3
+ "description": "loop plugin",
4
+ "version": "0.1.0",
5
+ "author": {
6
+ "name": "Rubytech LLC"
7
+ },
8
+ "mcpServers": {
9
+ "loop": {
10
+ "type": "stdio",
11
+ "command": "node",
12
+ "args": [
13
+ "${CLAUDE_PLUGIN_ROOT}/mcp/dist/index.js"
14
+ ]
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}