@rubytech/create-maxy 1.0.704 → 1.0.706

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 (209) hide show
  1. package/dist/__tests__/apt-resolve.test.js +179 -0
  2. package/dist/apt-resolve.js +73 -0
  3. package/dist/index.js +48 -46
  4. package/package.json +3 -3
  5. package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cypher-parser.test.d.ts +2 -0
  6. package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cypher-parser.test.d.ts.map +1 -0
  7. package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cypher-parser.test.js +89 -0
  8. package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cypher-parser.test.js.map +1 -0
  9. package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.d.ts +42 -0
  10. package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.d.ts.map +1 -0
  11. package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.js +87 -0
  12. package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.js.map +1 -0
  13. package/payload/platform/lib/graph-mcp/src/__tests__/schema-cypher-parser.test.ts +99 -0
  14. package/payload/platform/lib/graph-mcp/src/schema-cypher-parser.ts +84 -0
  15. package/payload/platform/neo4j/edge-annotations.json +134 -0
  16. package/payload/platform/package-lock.json +249 -67
  17. package/payload/platform/plugins/admin/PLUGIN.md +1 -0
  18. package/payload/platform/plugins/admin/mcp/dist/index.js +30 -0
  19. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  20. package/payload/platform/plugins/admin/skills/business-profile/SKILL.md +2 -2
  21. package/payload/platform/plugins/admin/skills/onboarding/SKILL.md +46 -5
  22. package/payload/platform/plugins/memory/PLUGIN.md +3 -1
  23. package/payload/platform/plugins/memory/mcp/dist/index.js +56 -6
  24. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  25. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.d.ts +2 -0
  26. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.d.ts.map +1 -0
  27. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.js +92 -0
  28. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.js.map +1 -0
  29. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.d.ts +2 -0
  30. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.d.ts.map +1 -0
  31. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js +51 -0
  32. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -0
  33. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.d.ts +2 -0
  34. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.d.ts.map +1 -0
  35. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js +222 -0
  36. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js.map +1 -0
  37. package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts +16 -0
  38. package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts.map +1 -1
  39. package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js +38 -11
  40. package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js.map +1 -1
  41. package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts +136 -0
  42. package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts.map +1 -0
  43. package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js +180 -0
  44. package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js.map +1 -0
  45. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts +11 -2
  46. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts.map +1 -1
  47. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js +6 -3
  48. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js.map +1 -1
  49. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts +44 -22
  50. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts.map +1 -1
  51. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +94 -57
  52. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -1
  53. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +7 -5
  54. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
  55. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +2 -2
  56. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
  57. package/payload/platform/plugins/memory/references/schema-base.md +4 -0
  58. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/index.d.ts +2 -0
  59. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/index.d.ts.map +1 -0
  60. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/index.js +293 -0
  61. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/index.js.map +1 -0
  62. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/crypto.d.ts +10 -0
  63. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/crypto.d.ts.map +1 -0
  64. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/crypto.js +88 -0
  65. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/crypto.js.map +1 -0
  66. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.d.ts +80 -0
  67. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.d.ts.map +1 -0
  68. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.js +355 -0
  69. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/loop-api.js.map +1 -0
  70. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/neo4j.d.ts +5 -0
  71. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/neo4j.d.ts.map +1 -0
  72. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/neo4j.js +34 -0
  73. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/lib/neo4j.js.map +1 -0
  74. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.d.ts +10 -0
  75. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.d.ts.map +1 -0
  76. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.js +24 -0
  77. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/customer-preferences.js.map +1 -0
  78. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback-list.d.ts +6 -0
  79. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback-list.d.ts.map +1 -0
  80. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback-list.js +18 -0
  81. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback-list.js.map +1 -0
  82. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.d.ts +16 -0
  83. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.d.ts.map +1 -0
  84. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.js +35 -0
  85. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/feedback.js.map +1 -0
  86. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-deregister.d.ts +5 -0
  87. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-deregister.d.ts.map +1 -0
  88. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-deregister.js +19 -0
  89. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-deregister.js.map +1 -0
  90. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-list.d.ts +4 -0
  91. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-list.d.ts.map +1 -0
  92. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-list.js +14 -0
  93. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-list.js.map +1 -0
  94. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-register.d.ts +9 -0
  95. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-register.d.ts.map +1 -0
  96. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-register.js +60 -0
  97. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/key-register.js.map +1 -0
  98. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.d.ts +13 -0
  99. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.d.ts.map +1 -0
  100. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.js +41 -0
  101. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-enquiry.js.map +1 -0
  102. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.d.ts +9 -0
  103. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.d.ts.map +1 -0
  104. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.js +16 -0
  105. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-batch.js.map +1 -0
  106. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.d.ts +15 -0
  107. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.d.ts.map +1 -0
  108. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.js +11 -0
  109. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match-request.js.map +1 -0
  110. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.d.ts +10 -0
  111. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.d.ts.map +1 -0
  112. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.js +39 -0
  113. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/marketing-match.js.map +1 -0
  114. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.d.ts +9 -0
  115. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.d.ts.map +1 -0
  116. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.js +125 -0
  117. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-detail.js.map +1 -0
  118. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-list.d.ts +7 -0
  119. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-list.d.ts.map +1 -0
  120. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-list.js +16 -0
  121. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-list.js.map +1 -0
  122. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.d.ts +18 -0
  123. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.d.ts.map +1 -0
  124. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.js +87 -0
  125. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/people-search.js.map +1 -0
  126. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/properties-list.d.ts +7 -0
  127. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/properties-list.d.ts.map +1 -0
  128. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/properties-list.js +19 -0
  129. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/properties-list.js.map +1 -0
  130. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.d.ts +10 -0
  131. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.d.ts.map +1 -0
  132. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.js +82 -0
  133. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-detail.js.map +1 -0
  134. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.d.ts +12 -0
  135. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.d.ts.map +1 -0
  136. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.js +32 -0
  137. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-listed.js.map +1 -0
  138. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.d.ts +15 -0
  139. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.d.ts.map +1 -0
  140. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.js +11 -0
  141. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-request.js.map +1 -0
  142. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.d.ts +16 -0
  143. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.d.ts.map +1 -0
  144. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.js +41 -0
  145. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/property-search.js.map +1 -0
  146. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.d.ts +13 -0
  147. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.d.ts.map +1 -0
  148. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.js +49 -0
  149. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/supplier.js.map +1 -0
  150. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.d.ts +7 -0
  151. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.d.ts.map +1 -0
  152. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.js +19 -0
  153. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-availability.js.map +1 -0
  154. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-info.d.ts +5 -0
  155. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-info.d.ts.map +1 -0
  156. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-info.js +32 -0
  157. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/team-info.js.map +1 -0
  158. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.d.ts +14 -0
  159. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.d.ts.map +1 -0
  160. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.js +11 -0
  161. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-create.js.map +1 -0
  162. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.d.ts +9 -0
  163. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.d.ts.map +1 -0
  164. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.js +85 -0
  165. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-detail.js.map +1 -0
  166. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.d.ts +13 -0
  167. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.d.ts.map +1 -0
  168. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.js +44 -0
  169. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-search.js.map +1 -0
  170. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.d.ts +14 -0
  171. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.d.ts.map +1 -0
  172. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.js +18 -0
  173. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewing-update.js.map +1 -0
  174. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewings-list.d.ts +9 -0
  175. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewings-list.d.ts.map +1 -0
  176. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewings-list.js +25 -0
  177. package/payload/premium-plugins/real-agency/plugins/real-agency-loop/mcp/dist/tools/viewings-list.js.map +1 -0
  178. package/payload/server/chunk-32ZHQJNX.js +11395 -0
  179. package/payload/server/chunk-3RBKKDHC.js +783 -0
  180. package/payload/server/chunk-3VVHVJK2.js +11405 -0
  181. package/payload/server/chunk-5YIXIF6C.js +726 -0
  182. package/payload/server/chunk-B54KBAK4.js +72 -0
  183. package/payload/server/chunk-IAIGB5WN.js +11406 -0
  184. package/payload/server/chunk-LQ5GSMEW.js +12036 -0
  185. package/payload/server/chunk-O2FWENOD.js +11530 -0
  186. package/payload/server/chunk-PE76FPYP.js +12040 -0
  187. package/payload/server/chunk-Q6NDXCM6.js +11448 -0
  188. package/payload/server/chunk-U3W5YIXU.js +11450 -0
  189. package/payload/server/chunk-ZL2A4ROK.js +11416 -0
  190. package/payload/server/maxy-edge.js +1 -1
  191. package/payload/server/public/assets/{Checkbox-CDUmQ1Bu.js → Checkbox-CjbS9JcG.js} +1 -1
  192. package/payload/server/public/assets/{admin-picYWZfn.js → admin-Ce9DbUuu.js} +30 -30
  193. package/payload/server/public/assets/{data-yYbcrFrc.js → data-C-SxjLC9.js} +1 -1
  194. package/payload/server/public/assets/{file-CzLc4Rvq.js → file-D4cbAAuo.js} +1 -1
  195. package/payload/server/public/assets/{graph-BRzC0ZtS.js → graph-D-Rqh0Md.js} +1 -1
  196. package/payload/server/public/assets/{house-lM4gLKkH.js → house-CYsVygEQ.js} +1 -1
  197. package/payload/server/public/assets/jsx-runtime-DPXE45W9.css +1 -0
  198. package/payload/server/public/assets/{public-scZadgzt.js → public-BTOF98iO.js} +1 -1
  199. package/payload/server/public/assets/{share-2-CNdrRWue.js → share-2-B-sbkB36.js} +1 -1
  200. package/payload/server/public/assets/{useVoiceRecorder-D2kfoqVB.js → useVoiceRecorder-DLVFx3ms.js} +1 -1
  201. package/payload/server/public/assets/{x-CsDhB6Vr.js → x-BNidzSAn.js} +1 -1
  202. package/payload/server/public/data.html +6 -6
  203. package/payload/server/public/graph.html +7 -7
  204. package/payload/server/public/index.html +8 -8
  205. package/payload/server/public/public.html +5 -5
  206. package/payload/server/server.js +114 -54
  207. package/payload/server/upgrade-progress-server.js +83 -0
  208. package/payload/server/public/assets/jsx-runtime-I6ZqIGn8.css +0 -1
  209. /package/payload/server/public/assets/{jsx-runtime-BK2hplUC.js → jsx-runtime-BUs3sHtV.js} +0 -0
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ /**
3
+ * Shared parser for `platform/neo4j/schema.cypher`.
4
+ *
5
+ * Two consumers today:
6
+ * 1. The admin SCHEMA prompt block (`platform/ui/app/lib/admin-schema-block.ts`,
7
+ * Task 703) renders labels declared in schema.cypher into the agent's
8
+ * system prompt.
9
+ * 2. The memory-plugin schema validator (Task 736) treats schema.cypher
10
+ * declarations as the "promise" half of the recognised-label set —
11
+ * labels that exist as constraints/indexes but may not yet have a node
12
+ * in the graph (fresh-install bootstrap).
13
+ *
14
+ * The previous home was admin-schema-block.ts; that owner was wrong as
15
+ * soon as a second consumer arrived. Lifting here keeps a single source of
16
+ * truth and removes the cross-package shape coupling.
17
+ *
18
+ * Also exports a compact `levenshtein` for "did you mean?" suggestions on
19
+ * unknown labels — used by the memory-plugin validator. The graph-mcp
20
+ * cypher validator has its own copy in schema-cache.ts (private to the
21
+ * stale-miss heuristic); the duplication is intentional, since this
22
+ * exported one targets human-readable error UX, not refresh debouncing.
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.parseLabelsFromSchemaCypher = parseLabelsFromSchemaCypher;
26
+ exports.levenshtein = levenshtein;
27
+ exports.nearestLabel = nearestLabel;
28
+ const LABEL_PATTERN = /FOR\s*\(\s*\w+\s*:\s*(\w+)\s*\)/g;
29
+ /**
30
+ * Extract every Neo4j label declared in a `schema.cypher` file by scanning
31
+ * `FOR (alias:Label)` constraint and index forms. Returns a sorted, de-duped
32
+ * list. Pure function — no I/O.
33
+ */
34
+ function parseLabelsFromSchemaCypher(schemaCypher) {
35
+ const found = new Set();
36
+ for (const match of schemaCypher.matchAll(LABEL_PATTERN)) {
37
+ found.add(match[1]);
38
+ }
39
+ return [...found].sort();
40
+ }
41
+ /**
42
+ * Standard iterative-DP Levenshtein. Used to suggest a near-match when an
43
+ * agent submits an unknown label — small alphabets, short strings, runs in
44
+ * microseconds. Identical algorithm to the private copy in schema-cache.ts;
45
+ * exported here so callers outside graph-mcp don't have to roll their own.
46
+ */
47
+ function levenshtein(a, b) {
48
+ if (a === b)
49
+ return 0;
50
+ if (a.length === 0)
51
+ return b.length;
52
+ if (b.length === 0)
53
+ return a.length;
54
+ let prev = new Array(b.length + 1);
55
+ let curr = new Array(b.length + 1);
56
+ for (let j = 0; j <= b.length; j++)
57
+ prev[j] = j;
58
+ for (let i = 1; i <= a.length; i++) {
59
+ curr[0] = i;
60
+ for (let j = 1; j <= b.length; j++) {
61
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
62
+ curr[j] = Math.min(curr[j - 1] + 1, prev[j] + 1, prev[j - 1] + cost);
63
+ }
64
+ [prev, curr] = [curr, prev];
65
+ }
66
+ return prev[b.length];
67
+ }
68
+ /**
69
+ * Find the closest label in `candidates` to `unknown` by edit distance.
70
+ * Returns null when the closest match is further than `maxDistance` (default
71
+ * 3) — beyond that a suggestion is more confusing than helpful.
72
+ */
73
+ function nearestLabel(unknown, candidates, maxDistance = 3) {
74
+ let best = null;
75
+ let bestDist = Infinity;
76
+ for (const candidate of candidates) {
77
+ const d = levenshtein(unknown, candidate);
78
+ if (d < bestDist) {
79
+ bestDist = d;
80
+ best = candidate;
81
+ }
82
+ }
83
+ if (best === null || bestDist > maxDistance)
84
+ return null;
85
+ return best;
86
+ }
87
+ //# sourceMappingURL=schema-cypher-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-cypher-parser.js","sourceRoot":"","sources":["../src/schema-cypher-parser.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;AASH,kEAMC;AAQD,kCAgBC;AAOD,oCAgBC;AA5DD,MAAM,aAAa,GAAG,kCAAkC,CAAC;AAEzD;;;;GAIG;AACH,SAAgB,2BAA2B,CAAC,YAAoB;IAC9D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACzD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,CAAS,EAAE,CAAS;IAC9C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA4B,EAC5B,WAAW,GAAG,CAAC;IAEf,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC;YACjB,QAAQ,GAAG,CAAC,CAAC;YACb,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,GAAG,WAAW;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,99 @@
1
+ import test from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import {
4
+ parseLabelsFromSchemaCypher,
5
+ levenshtein,
6
+ nearestLabel,
7
+ } from "../schema-cypher-parser.js";
8
+
9
+ test("parseLabelsFromSchemaCypher: extracts labels from constraint and index forms", () => {
10
+ const text = `
11
+ CREATE CONSTRAINT person_email IF NOT EXISTS
12
+ FOR (p:Person) REQUIRE p.email IS UNIQUE;
13
+
14
+ CREATE CONSTRAINT business_account IF NOT EXISTS
15
+ FOR (b:LocalBusiness) REQUIRE b.accountId IS UNIQUE;
16
+
17
+ CREATE INDEX admin_user_account IF NOT EXISTS
18
+ FOR (au:AdminUser) ON (au.accountId);
19
+
20
+ CREATE INDEX knowledge_doc IF NOT EXISTS
21
+ FOR (k:KnowledgeDocument) ON (k.embedding) OPTIONS { ... };
22
+ `;
23
+ const labels = parseLabelsFromSchemaCypher(text);
24
+ assert.deepEqual(labels, [
25
+ "AdminUser",
26
+ "KnowledgeDocument",
27
+ "LocalBusiness",
28
+ "Person",
29
+ ]);
30
+ });
31
+
32
+ test("parseLabelsFromSchemaCypher: deduplicates labels declared multiple times", () => {
33
+ const text = `
34
+ FOR (p:Person) REQUIRE p.email IS UNIQUE;
35
+ FOR (p:Person) REQUIRE p.telephone IS UNIQUE;
36
+ FOR (p:Person) ON (p.status);
37
+ `;
38
+ assert.deepEqual(parseLabelsFromSchemaCypher(text), ["Person"]);
39
+ });
40
+
41
+ test("parseLabelsFromSchemaCypher: returns sorted output", () => {
42
+ const text = `FOR (z:Zebra) ON (z.x); FOR (a:Aardvark) ON (a.x); FOR (m:Mongoose) ON (m.x);`;
43
+ assert.deepEqual(parseLabelsFromSchemaCypher(text), [
44
+ "Aardvark",
45
+ "Mongoose",
46
+ "Zebra",
47
+ ]);
48
+ });
49
+
50
+ test("parseLabelsFromSchemaCypher: ignores non-constraint cypher", () => {
51
+ const text = `
52
+ MATCH (n:Person) RETURN n;
53
+ CREATE (b:Business { name: 'X' });
54
+ FOR (p:Person) REQUIRE p.email IS UNIQUE;
55
+ `;
56
+ // MATCH/CREATE patterns don't include FOR, so they're ignored.
57
+ assert.deepEqual(parseLabelsFromSchemaCypher(text), ["Person"]);
58
+ });
59
+
60
+ test("parseLabelsFromSchemaCypher: empty input returns empty array", () => {
61
+ assert.deepEqual(parseLabelsFromSchemaCypher(""), []);
62
+ });
63
+
64
+ test("levenshtein: identical strings", () => {
65
+ assert.equal(levenshtein("Person", "Person"), 0);
66
+ });
67
+
68
+ test("levenshtein: substitution distance", () => {
69
+ // LocaIBusiness vs LocalBusiness — capital-I-as-l typo from the incident.
70
+ assert.equal(levenshtein("LocaIBusiness", "LocalBusiness"), 1);
71
+ });
72
+
73
+ test("levenshtein: insertion + deletion", () => {
74
+ assert.equal(levenshtein("Person", "Persons"), 1);
75
+ assert.equal(levenshtein("Persons", "Person"), 1);
76
+ });
77
+
78
+ test("levenshtein: handles empty strings", () => {
79
+ assert.equal(levenshtein("", "abc"), 3);
80
+ assert.equal(levenshtein("abc", ""), 3);
81
+ assert.equal(levenshtein("", ""), 0);
82
+ });
83
+
84
+ test("nearestLabel: finds the closest match", () => {
85
+ const candidates = ["Person", "LocalBusiness", "AdminUser"];
86
+ assert.equal(nearestLabel("LocaIBusiness", candidates), "LocalBusiness");
87
+ assert.equal(nearestLabel("AdminUsr", candidates), "AdminUser");
88
+ });
89
+
90
+ test("nearestLabel: returns null when no match within maxDistance", () => {
91
+ const candidates = ["Person", "LocalBusiness"];
92
+ assert.equal(nearestLabel("Quokka", candidates), null);
93
+ // Default maxDistance is 3; "abcde" is too far from any candidate.
94
+ assert.equal(nearestLabel("abcde", candidates, 1), null);
95
+ });
96
+
97
+ test("nearestLabel: empty candidates returns null", () => {
98
+ assert.equal(nearestLabel("Person", []), null);
99
+ });
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Shared parser for `platform/neo4j/schema.cypher`.
3
+ *
4
+ * Two consumers today:
5
+ * 1. The admin SCHEMA prompt block (`platform/ui/app/lib/admin-schema-block.ts`,
6
+ * Task 703) renders labels declared in schema.cypher into the agent's
7
+ * system prompt.
8
+ * 2. The memory-plugin schema validator (Task 736) treats schema.cypher
9
+ * declarations as the "promise" half of the recognised-label set —
10
+ * labels that exist as constraints/indexes but may not yet have a node
11
+ * in the graph (fresh-install bootstrap).
12
+ *
13
+ * The previous home was admin-schema-block.ts; that owner was wrong as
14
+ * soon as a second consumer arrived. Lifting here keeps a single source of
15
+ * truth and removes the cross-package shape coupling.
16
+ *
17
+ * Also exports a compact `levenshtein` for "did you mean?" suggestions on
18
+ * unknown labels — used by the memory-plugin validator. The graph-mcp
19
+ * cypher validator has its own copy in schema-cache.ts (private to the
20
+ * stale-miss heuristic); the duplication is intentional, since this
21
+ * exported one targets human-readable error UX, not refresh debouncing.
22
+ */
23
+
24
+ const LABEL_PATTERN = /FOR\s*\(\s*\w+\s*:\s*(\w+)\s*\)/g;
25
+
26
+ /**
27
+ * Extract every Neo4j label declared in a `schema.cypher` file by scanning
28
+ * `FOR (alias:Label)` constraint and index forms. Returns a sorted, de-duped
29
+ * list. Pure function — no I/O.
30
+ */
31
+ export function parseLabelsFromSchemaCypher(schemaCypher: string): string[] {
32
+ const found = new Set<string>();
33
+ for (const match of schemaCypher.matchAll(LABEL_PATTERN)) {
34
+ found.add(match[1]);
35
+ }
36
+ return [...found].sort();
37
+ }
38
+
39
+ /**
40
+ * Standard iterative-DP Levenshtein. Used to suggest a near-match when an
41
+ * agent submits an unknown label — small alphabets, short strings, runs in
42
+ * microseconds. Identical algorithm to the private copy in schema-cache.ts;
43
+ * exported here so callers outside graph-mcp don't have to roll their own.
44
+ */
45
+ export function levenshtein(a: string, b: string): number {
46
+ if (a === b) return 0;
47
+ if (a.length === 0) return b.length;
48
+ if (b.length === 0) return a.length;
49
+ let prev = new Array<number>(b.length + 1);
50
+ let curr = new Array<number>(b.length + 1);
51
+ for (let j = 0; j <= b.length; j++) prev[j] = j;
52
+ for (let i = 1; i <= a.length; i++) {
53
+ curr[0] = i;
54
+ for (let j = 1; j <= b.length; j++) {
55
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
56
+ curr[j] = Math.min(curr[j - 1] + 1, prev[j] + 1, prev[j - 1] + cost);
57
+ }
58
+ [prev, curr] = [curr, prev];
59
+ }
60
+ return prev[b.length];
61
+ }
62
+
63
+ /**
64
+ * Find the closest label in `candidates` to `unknown` by edit distance.
65
+ * Returns null when the closest match is further than `maxDistance` (default
66
+ * 3) — beyond that a suggestion is more confusing than helpful.
67
+ */
68
+ export function nearestLabel(
69
+ unknown: string,
70
+ candidates: Iterable<string>,
71
+ maxDistance = 3,
72
+ ): string | null {
73
+ let best: string | null = null;
74
+ let bestDist = Infinity;
75
+ for (const candidate of candidates) {
76
+ const d = levenshtein(unknown, candidate);
77
+ if (d < bestDist) {
78
+ bestDist = d;
79
+ best = candidate;
80
+ }
81
+ }
82
+ if (best === null || bestDist > maxDistance) return null;
83
+ return best;
84
+ }
@@ -0,0 +1,134 @@
1
+ {
2
+ "edges": {
3
+ "PART_OF": {
4
+ "direction": "(Message)-[:PART_OF]->(Conversation)",
5
+ "note": "Messages belong to exactly one Conversation. Do NOT use :HAS_MESSAGE — that edge does not exist."
6
+ },
7
+ "NEXT": {
8
+ "direction": "(Message)-[:NEXT]->(Message)",
9
+ "note": "Chain order within a Conversation. Each Message has at most one NEXT successor."
10
+ },
11
+ "ADMIN_OF": {
12
+ "direction": "(AdminUser)-[:ADMIN_OF]->(LocalBusiness)",
13
+ "note": "Device-level admin membership (see admin-add / admin-remove)."
14
+ },
15
+ "HAS_PROFILE": {
16
+ "direction": "(AdminUser)-[:HAS_PROFILE]->(UserProfile)",
17
+ "note": "Admin's profile node. Account scope lives on the `accountId` property of each node — do NOT add a redundant edge to LocalBusiness just to satisfy the write doctrine. Every MATCH filters by `{accountId: $accountId}`."
18
+ },
19
+ "AUTHORED_BY": {
20
+ "direction": "(Message)-[:AUTHORED_BY]->(Person)",
21
+ "note": "Message authorship (when the author is an identified Person)."
22
+ },
23
+ "HAS_TOOL_CALL": {
24
+ "direction": "(Message)-[:HAS_TOOL_CALL]->(ToolCall)",
25
+ "note": "Tool calls attached to an assistant message."
26
+ },
27
+ "HAS_RESULT": {
28
+ "direction": "(WorkflowStep|ToolCall)-[:HAS_RESULT]->(StepResult)",
29
+ "note": "Workflow step / tool-call outputs."
30
+ },
31
+ "HAS_STEP": {
32
+ "direction": "(Workflow)-[:HAS_STEP]->(WorkflowStep)",
33
+ "note": "Workflow composition."
34
+ },
35
+ "RUN_OF": {
36
+ "direction": "(WorkflowRun)-[:RUN_OF]->(Workflow)",
37
+ "note": "Workflow execution instance."
38
+ },
39
+ "HAS_SECTION": {
40
+ "direction": "(KnowledgeDocument)-[:HAS_SECTION]->(Section)",
41
+ "note": "Document hierarchy."
42
+ },
43
+ "HAS_CHUNK": {
44
+ "direction": "(Section)-[:HAS_CHUNK]->(Chunk)",
45
+ "note": "Section-to-embeddable-chunk."
46
+ },
47
+ "HAS_PREFERENCE": {
48
+ "direction": "(Person)-[:HAS_PREFERENCE]->(Preference)",
49
+ "note": "Person-scoped preferences (profile memory)."
50
+ },
51
+ "HAS_ACCESS": {
52
+ "direction": "(Person)-[:HAS_ACCESS]->(AccessGrant)",
53
+ "note": "Public agent access grants."
54
+ },
55
+ "HAS_TASK": {
56
+ "direction": "(Person|LocalBusiness)-[:HAS_TASK]->(Task)",
57
+ "note": "Task ownership / assignment."
58
+ },
59
+ "HAS_PRICING": {
60
+ "direction": "(Service)-[:HAS_PRICING]->(PriceSpecification)",
61
+ "note": "Service pricing."
62
+ },
63
+ "HAS_HOURS": {
64
+ "direction": "(LocalBusiness)-[:HAS_HOURS]->(OpeningHoursSpecification)",
65
+ "note": "Opening hours."
66
+ },
67
+ "HAS_FAQ": {
68
+ "direction": "(LocalBusiness)-[:HAS_FAQ]->(Question)",
69
+ "note": "FAQ attached to business."
70
+ },
71
+ "HAS_BRAND_ASSET": {
72
+ "direction": "(LocalBusiness)-[:HAS_BRAND_ASSET]->(DigitalDocument|ImageObject)",
73
+ "note": "Branding assets."
74
+ },
75
+ "OFFERS": {
76
+ "direction": "(LocalBusiness)-[:OFFERS]->(Service)",
77
+ "note": "Service catalogue."
78
+ },
79
+ "CONTAINS": {
80
+ "direction": "(KnowledgeDocument)-[:CONTAINS]->(Chunk)",
81
+ "note": "Flat document-to-chunk (alternative to HAS_SECTION then HAS_CHUNK)."
82
+ },
83
+ "REFERENCES": {
84
+ "direction": "(Message|KnowledgeDocument)-[:REFERENCES]->(*)",
85
+ "note": "Soft reference link."
86
+ },
87
+ "ABOUT": {
88
+ "direction": "(Review|Message)-[:ABOUT]->(*)",
89
+ "note": "Subject pointer."
90
+ },
91
+ "REPLY_TO": {
92
+ "direction": "(Email)-[:REPLY_TO]->(Email)",
93
+ "note": "Email threading."
94
+ },
95
+ "RECEIVED_BY": {
96
+ "direction": "(Email)-[:RECEIVED_BY]->(Person)",
97
+ "note": "Email recipient."
98
+ },
99
+ "RAISED_BY": {
100
+ "direction": "(ReviewAlert)-[:RAISED_BY]->(*)",
101
+ "note": "Alert provenance."
102
+ },
103
+ "AFFECTS": {
104
+ "direction": "(ReviewAlert)-[:AFFECTS]->(*)",
105
+ "note": "Alert impact surface."
106
+ },
107
+ "BLOCKS": {
108
+ "direction": "(Task)-[:BLOCKS]->(Task)",
109
+ "note": "Task dependency."
110
+ },
111
+ "OBSERVED_IN": {
112
+ "direction": "(*)-[:OBSERVED_IN]->(Conversation)",
113
+ "note": "Observation provenance."
114
+ }
115
+ },
116
+ "sublabels": {
117
+ "AdminConversation": {
118
+ "base": "Conversation",
119
+ "note": "Admin-only conversation (admin chat, not public)."
120
+ },
121
+ "PublicConversation": {
122
+ "base": "Conversation",
123
+ "note": "Public agent conversation (visitor-facing)."
124
+ },
125
+ "UserMessage": {
126
+ "base": "Message",
127
+ "note": "Message authored by the human user."
128
+ },
129
+ "AssistantMessage": {
130
+ "base": "Message",
131
+ "note": "Message authored by the assistant."
132
+ }
133
+ }
134
+ }