@rubytech/create-maxy 1.0.772 → 1.0.773

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 (194) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/mcp/dist/index.js +43 -4
  3. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  4. package/payload/platform/plugins/admin/skills/business-profile/SKILL.md +5 -6
  5. package/payload/platform/plugins/admin/skills/onboarding/SKILL.md +5 -6
  6. package/payload/server/{chunk-XHFMXKXI.js → chunk-2HBD6IRL.js} +63 -0
  7. package/payload/server/{chunk-57S5JC7G.js → chunk-PIMJJCOQ.js} +1 -1
  8. package/payload/server/{client-pool-5V5GX3UT.js → client-pool-U3A5YUO7.js} +1 -1
  9. package/payload/server/maxy-edge.js +2 -2
  10. package/payload/server/public/assets/{admin-CFttroHB.js → admin-C4CTVtBu.js} +2 -2
  11. package/payload/server/public/index.html +1 -1
  12. package/payload/server/server.js +24 -4
  13. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.d.ts +0 -61
  14. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.d.ts.map +0 -1
  15. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.js +0 -266
  16. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.js.map +0 -1
  17. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/index.d.ts +0 -2
  18. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/index.d.ts.map +0 -1
  19. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/index.js +0 -293
  20. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/index.js.map +0 -1
  21. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/crypto.d.ts +0 -10
  22. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/crypto.d.ts.map +0 -1
  23. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/crypto.js +0 -88
  24. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/crypto.js.map +0 -1
  25. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.d.ts +0 -80
  26. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.d.ts.map +0 -1
  27. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.js +0 -355
  28. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.js.map +0 -1
  29. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/neo4j.d.ts +0 -5
  30. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/neo4j.d.ts.map +0 -1
  31. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/neo4j.js +0 -34
  32. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/neo4j.js.map +0 -1
  33. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.d.ts +0 -10
  34. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.d.ts.map +0 -1
  35. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.js +0 -24
  36. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.js.map +0 -1
  37. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback-list.d.ts +0 -6
  38. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback-list.d.ts.map +0 -1
  39. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback-list.js +0 -18
  40. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback-list.js.map +0 -1
  41. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.d.ts +0 -16
  42. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.d.ts.map +0 -1
  43. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.js +0 -35
  44. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.js.map +0 -1
  45. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-deregister.d.ts +0 -5
  46. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-deregister.d.ts.map +0 -1
  47. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-deregister.js +0 -19
  48. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-deregister.js.map +0 -1
  49. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-list.d.ts +0 -4
  50. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-list.d.ts.map +0 -1
  51. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-list.js +0 -14
  52. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-list.js.map +0 -1
  53. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-register.d.ts +0 -9
  54. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-register.d.ts.map +0 -1
  55. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-register.js +0 -60
  56. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-register.js.map +0 -1
  57. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.d.ts +0 -13
  58. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.d.ts.map +0 -1
  59. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.js +0 -41
  60. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.js.map +0 -1
  61. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.d.ts +0 -9
  62. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.d.ts.map +0 -1
  63. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.js +0 -16
  64. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.js.map +0 -1
  65. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.d.ts +0 -15
  66. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.d.ts.map +0 -1
  67. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.js +0 -11
  68. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.js.map +0 -1
  69. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.d.ts +0 -10
  70. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.d.ts.map +0 -1
  71. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.js +0 -39
  72. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.js.map +0 -1
  73. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.d.ts +0 -9
  74. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.d.ts.map +0 -1
  75. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.js +0 -125
  76. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.js.map +0 -1
  77. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-list.d.ts +0 -7
  78. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-list.d.ts.map +0 -1
  79. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-list.js +0 -16
  80. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-list.js.map +0 -1
  81. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.d.ts +0 -18
  82. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.d.ts.map +0 -1
  83. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.js +0 -87
  84. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.js.map +0 -1
  85. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/properties-list.d.ts +0 -7
  86. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/properties-list.d.ts.map +0 -1
  87. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/properties-list.js +0 -19
  88. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/properties-list.js.map +0 -1
  89. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.d.ts +0 -10
  90. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.d.ts.map +0 -1
  91. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.js +0 -82
  92. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.js.map +0 -1
  93. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.d.ts +0 -12
  94. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.d.ts.map +0 -1
  95. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.js +0 -32
  96. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.js.map +0 -1
  97. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.d.ts +0 -15
  98. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.d.ts.map +0 -1
  99. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.js +0 -11
  100. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.js.map +0 -1
  101. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.d.ts +0 -16
  102. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.d.ts.map +0 -1
  103. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.js +0 -41
  104. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.js.map +0 -1
  105. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.d.ts +0 -13
  106. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.d.ts.map +0 -1
  107. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.js +0 -49
  108. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.js.map +0 -1
  109. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.d.ts +0 -7
  110. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.d.ts.map +0 -1
  111. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.js +0 -19
  112. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.js.map +0 -1
  113. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-info.d.ts +0 -5
  114. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-info.d.ts.map +0 -1
  115. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-info.js +0 -32
  116. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-info.js.map +0 -1
  117. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.d.ts +0 -14
  118. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.d.ts.map +0 -1
  119. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.js +0 -11
  120. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.js.map +0 -1
  121. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.d.ts +0 -9
  122. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.d.ts.map +0 -1
  123. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.js +0 -85
  124. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.js.map +0 -1
  125. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.d.ts +0 -13
  126. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.d.ts.map +0 -1
  127. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.js +0 -44
  128. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.js.map +0 -1
  129. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.d.ts +0 -14
  130. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.d.ts.map +0 -1
  131. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.js +0 -18
  132. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.js.map +0 -1
  133. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewings-list.d.ts +0 -9
  134. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewings-list.d.ts.map +0 -1
  135. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewings-list.js +0 -25
  136. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewings-list.js.map +0 -1
  137. package/payload/server/chunk-26QT2HEQ.js +0 -9483
  138. package/payload/server/chunk-2T4RRIJK.js +0 -9462
  139. package/payload/server/chunk-2W7O63CK.js +0 -3052
  140. package/payload/server/chunk-32ZHQJNX.js +0 -11395
  141. package/payload/server/chunk-3KDVGWPQ.js +0 -2920
  142. package/payload/server/chunk-3RBKKDHC.js +0 -783
  143. package/payload/server/chunk-3VVHVJK2.js +0 -11405
  144. package/payload/server/chunk-43JK6WNK.js +0 -3057
  145. package/payload/server/chunk-5YIXIF6C.js +0 -726
  146. package/payload/server/chunk-7ODDM7L4.js +0 -12370
  147. package/payload/server/chunk-A5K3CFMI.js +0 -12297
  148. package/payload/server/chunk-AIWWYOBH.js +0 -9439
  149. package/payload/server/chunk-B54KBAK4.js +0 -72
  150. package/payload/server/chunk-BIOIXN5A.js +0 -12165
  151. package/payload/server/chunk-D53LK5YC.js +0 -12171
  152. package/payload/server/chunk-EIQT6QDH.js +0 -9562
  153. package/payload/server/chunk-FM5JMRED.js +0 -12033
  154. package/payload/server/chunk-HPU24BXP.js +0 -12173
  155. package/payload/server/chunk-HU5FSQYA.js +0 -12186
  156. package/payload/server/chunk-IAIGB5WN.js +0 -11406
  157. package/payload/server/chunk-IO2WQEY4.js +0 -9562
  158. package/payload/server/chunk-JDT3MGUY.js +0 -12165
  159. package/payload/server/chunk-JLVVVQN7.js +0 -9447
  160. package/payload/server/chunk-K7GQ5RMN.js +0 -12172
  161. package/payload/server/chunk-LQ5GSMEW.js +0 -12036
  162. package/payload/server/chunk-MPWGVFU2.js +0 -12340
  163. package/payload/server/chunk-O2FWENOD.js +0 -11530
  164. package/payload/server/chunk-PE76FPYP.js +0 -12040
  165. package/payload/server/chunk-PQ6LDXZ4.js +0 -2997
  166. package/payload/server/chunk-Q6NDXCM6.js +0 -11448
  167. package/payload/server/chunk-QXAUMZXQ.js +0 -9512
  168. package/payload/server/chunk-S3M2NZMA.js +0 -3136
  169. package/payload/server/chunk-SGBNY4NP.js +0 -9540
  170. package/payload/server/chunk-SKXO42T6.js +0 -2934
  171. package/payload/server/chunk-SPTD7L7Z.js +0 -9474
  172. package/payload/server/chunk-TKYZ7AEB.js +0 -3142
  173. package/payload/server/chunk-TXPEEAV6.js +0 -2997
  174. package/payload/server/chunk-U3W5YIXU.js +0 -11450
  175. package/payload/server/chunk-U5JPRUYZ.js +0 -12298
  176. package/payload/server/chunk-UFLV7I6N.js +0 -11678
  177. package/payload/server/chunk-ULVR2RRY.js +0 -9439
  178. package/payload/server/chunk-VOD2IZ6J.js +0 -2934
  179. package/payload/server/chunk-VS7CRH4M.js +0 -9439
  180. package/payload/server/chunk-W6ZUNLLS.js +0 -9446
  181. package/payload/server/chunk-WW464F23.js +0 -9512
  182. package/payload/server/chunk-Y57ACANQ.js +0 -12292
  183. package/payload/server/chunk-ZK3VNR7Y.js +0 -9510
  184. package/payload/server/chunk-ZL2A4ROK.js +0 -11416
  185. package/payload/server/client-pool-67NUIL7H.js +0 -28
  186. package/payload/server/client-pool-CX2MFW75.js +0 -28
  187. package/payload/server/client-pool-DQBHSKAF.js +0 -28
  188. package/payload/server/client-pool-I5TCP7WI.js +0 -28
  189. package/payload/server/client-pool-ISMYJXCU.js +0 -28
  190. package/payload/server/client-pool-J4ZHJ6Z3.js +0 -28
  191. package/payload/server/client-pool-SGPHSYLK.js +0 -28
  192. package/payload/server/client-pool-TCKGDZLE.js +0 -28
  193. package/payload/server/client-pool-TULUIO6M.js +0 -28
  194. package/payload/server/upgrade-progress-server.js +0 -83
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-maxy",
3
- "version": "1.0.772",
3
+ "version": "1.0.773",
4
4
  "description": "Install Maxy — AI for Productive People",
5
5
  "bin": {
6
6
  "create-maxy": "./dist/index.js"
@@ -623,20 +623,58 @@ server.tool("admin-add", "Add a new admin user to this account. Creates a device
623
623
  console.error(`${TAG} account.json write failed: ${err instanceof Error ? err.message : String(err)}`);
624
624
  return { content: [{ type: "text", text: `${TAG} User created in users.json but failed to add to account: ${err instanceof Error ? err.message : String(err)}` }], isError: true };
625
625
  }
626
- // 3. Write to Neo4j (graph-level) partial failure is a warning, not an error
626
+ // 3. Write to Neo4j (graph-level): AdminUser + Person + OWNS atomically,
627
+ // plus ADMIN_OF edge to the LocalBusiness for this account.
628
+ // Task 830 — deterministic identity creation: never delegate node
629
+ // creation to the LLM. Person reuse rule mirrors writeAdminUserAndPerson
630
+ // in platform/ui/app/lib/neo4j-store.ts (case-insensitive exact match
631
+ // on givenName + familyName; partial-name ambiguity does NOT match —
632
+ // rationalisation is a separate agent-mediated concern).
627
633
  let neo4jWarning = "";
634
+ let personReused = false;
628
635
  try {
629
636
  const session = getSession();
630
637
  try {
631
638
  const createdAt = new Date().toISOString();
632
639
  const trimmedName = name.trim();
633
- await session.run(`MERGE (au:AdminUser {userId: $userId})
640
+ const firstSpace = trimmedName.search(/\s/);
641
+ const givenName = firstSpace === -1 ? trimmedName : trimmedName.slice(0, firstSpace).trim();
642
+ const familyName = firstSpace === -1 ? null : (trimmedName.slice(firstSpace + 1).trim() || null);
643
+ const result = await session.run(`MERGE (au:AdminUser {userId: $userId})
634
644
  ON CREATE SET au.name = $name, au.createdAt = $createdAt
635
- ON MATCH SET au.name = $name
645
+ ON MATCH SET au.name = $name, au.updatedAt = $createdAt
636
646
  WITH au
637
647
  MATCH (b:LocalBusiness {accountId: $accountId})
638
648
  MERGE (au)-[r:ADMIN_OF]->(b)
639
- ON CREATE SET r.role = 'admin', r.grantedAt = $createdAt`, { userId, name: trimmedName, createdAt, accountId: ACCOUNT_ID });
649
+ ON CREATE SET r.role = 'admin', r.grantedAt = $createdAt
650
+ WITH au
651
+ OPTIONAL MATCH (existingPerson:Person {accountId: $accountId})
652
+ WHERE toLower(existingPerson.givenName) = toLower($givenName)
653
+ AND coalesce(toLower(existingPerson.familyName), '') = coalesce(toLower($familyName), '')
654
+ WITH au, existingPerson
655
+ CALL {
656
+ WITH au, existingPerson
657
+ WITH au, existingPerson WHERE existingPerson IS NOT NULL
658
+ MERGE (au)-[:OWNS]->(existingPerson)
659
+ RETURN true AS reused
660
+ UNION
661
+ WITH au, existingPerson
662
+ WITH au WHERE existingPerson IS NULL
663
+ CREATE (newPerson:Person {
664
+ accountId: $accountId,
665
+ givenName: $givenName,
666
+ familyName: $familyName,
667
+ role: 'admin-personal',
668
+ scope: 'admin',
669
+ createdAt: $createdAt
670
+ })
671
+ MERGE (au)-[:OWNS]->(newPerson)
672
+ RETURN false AS reused
673
+ }
674
+ RETURN reused`, { userId, name: trimmedName, createdAt, accountId: ACCOUNT_ID, givenName, familyName });
675
+ if (result.records.length > 0) {
676
+ personReused = result.records[0].get("reused");
677
+ }
640
678
  }
641
679
  finally {
642
680
  await session.close();
@@ -647,6 +685,7 @@ server.tool("admin-add", "Add a new admin user to this account. Creates a device
647
685
  console.error(`${TAG} Neo4j sync failed during admin-add: userId=${userId} error=${errMsg} — files written, graph pending`);
648
686
  neo4jWarning = ` Note: Neo4j sync failed (${errMsg}) — the admin user is functional but the graph will need reconciliation on next seed.`;
649
687
  }
688
+ console.error(`${TAG} [admin-identity] adminuser-bound userId=${userId.slice(0, 8)} name=${name.trim()} personReused=${personReused}`);
650
689
  console.error(`${TAG} admin added: userId=${userId} userName=${name.trim()} accountId=${ACCOUNT_ID} role=admin addedBy=${callerUserId ?? "unknown"}`);
651
690
  return {
652
691
  content: [{