@rubytech/create-maxy-code 0.1.118 → 0.1.120

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 (52) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/neo4j/schema.cypher +95 -4
  3. package/payload/platform/package-lock.json +141 -125
  4. package/payload/platform/plugins/aeo/PLUGIN.md +1 -1
  5. package/payload/platform/plugins/aeo/mcp/dist/__tests__/audit-heuristics.test.d.ts +2 -0
  6. package/payload/platform/plugins/aeo/mcp/dist/__tests__/audit-heuristics.test.d.ts.map +1 -0
  7. package/payload/platform/plugins/aeo/mcp/dist/__tests__/audit-heuristics.test.js +121 -0
  8. package/payload/platform/plugins/aeo/mcp/dist/__tests__/audit-heuristics.test.js.map +1 -0
  9. package/payload/platform/plugins/aeo/mcp/dist/__tests__/schema-mapping.test.d.ts +2 -0
  10. package/payload/platform/plugins/aeo/mcp/dist/__tests__/schema-mapping.test.d.ts.map +1 -0
  11. package/payload/platform/plugins/aeo/mcp/dist/__tests__/schema-mapping.test.js +129 -0
  12. package/payload/platform/plugins/aeo/mcp/dist/__tests__/schema-mapping.test.js.map +1 -0
  13. package/payload/platform/plugins/aeo/mcp/dist/index.d.ts +2 -0
  14. package/payload/platform/plugins/aeo/mcp/dist/index.d.ts.map +1 -0
  15. package/payload/platform/plugins/aeo/mcp/dist/index.js +171 -0
  16. package/payload/platform/plugins/aeo/mcp/dist/index.js.map +1 -0
  17. package/payload/platform/plugins/aeo/mcp/dist/lib/audit-heuristics.d.ts +27 -0
  18. package/payload/platform/plugins/aeo/mcp/dist/lib/audit-heuristics.d.ts.map +1 -0
  19. package/payload/platform/plugins/aeo/mcp/dist/lib/audit-heuristics.js +274 -0
  20. package/payload/platform/plugins/aeo/mcp/dist/lib/audit-heuristics.js.map +1 -0
  21. package/payload/platform/plugins/aeo/mcp/dist/lib/neo4j.d.ts +5 -0
  22. package/payload/platform/plugins/aeo/mcp/dist/lib/neo4j.d.ts.map +1 -0
  23. package/payload/platform/plugins/aeo/mcp/dist/lib/neo4j.js +38 -0
  24. package/payload/platform/plugins/aeo/mcp/dist/lib/neo4j.js.map +1 -0
  25. package/payload/platform/plugins/aeo/mcp/dist/lib/schema-mapping.d.ts +48 -0
  26. package/payload/platform/plugins/aeo/mcp/dist/lib/schema-mapping.d.ts.map +1 -0
  27. package/payload/platform/plugins/aeo/mcp/dist/lib/schema-mapping.js +254 -0
  28. package/payload/platform/plugins/aeo/mcp/dist/lib/schema-mapping.js.map +1 -0
  29. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-audit-page.d.ts +25 -0
  30. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-audit-page.d.ts.map +1 -0
  31. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-audit-page.js +78 -0
  32. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-audit-page.js.map +1 -0
  33. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-emit-jsonld.d.ts +18 -0
  34. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-emit-jsonld.d.ts.map +1 -0
  35. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-emit-jsonld.js +56 -0
  36. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-emit-jsonld.js.map +1 -0
  37. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-write-llms-txt.d.ts +37 -0
  38. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-write-llms-txt.d.ts.map +1 -0
  39. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-write-llms-txt.js +94 -0
  40. package/payload/platform/plugins/aeo/mcp/dist/tools/aeo-write-llms-txt.js.map +1 -0
  41. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.d.ts +12 -1
  42. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.d.ts.map +1 -1
  43. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.js +34 -1
  44. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.js.map +1 -1
  45. package/payload/platform/plugins/docs/references/aeo.md +2 -2
  46. package/payload/platform/plugins/docs/references/visitor-graph.md +82 -0
  47. package/payload/platform/plugins/memory/references/schema-base.md +44 -0
  48. package/payload/server/{chunk-FJCI6X3H.js → chunk-HCYM5FLU.js} +2 -0
  49. package/payload/server/maxy-edge.js +1 -1
  50. package/payload/server/public/privacy.html +66 -0
  51. package/payload/server/public/v.js +191 -0
  52. package/payload/server/server.js +473 -85
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-maxy-code",
3
- "version": "0.1.118",
3
+ "version": "0.1.120",
4
4
  "description": "Install Maxy — AI for Productive People",
5
5
  "bin": {
6
6
  "create-maxy-code": "./dist/index.js"
@@ -355,7 +355,7 @@ FOR (n:LocalBusiness|Service|PriceSpecification|OpeningHoursSpecification|Organi
355
355
  |Task|Project|Event
356
356
  |Workflow|WorkflowStep|WorkflowRun|StepResult
357
357
  |Email|EmailAccount
358
- |Position|Credential|Agent)
358
+ |Position|Credential|Agent|Idea)
359
359
  ON EACH [n.name, n.firstName, n.lastName, n.givenName, n.familyName,
360
360
  n.title, n.currentTitle, n.summary, n.body, n.content, n.text, n.description, n.headline, n.abstract,
361
361
  n.email, n.note, n.label, n.value, n.message, n.preview, n.tagline,
@@ -1102,7 +1102,6 @@ CREATE INDEX cloudflare_hostname_account IF NOT EXISTS
1102
1102
  FOR (h:CloudflareHostname) ON (h.accountId);
1103
1103
 
1104
1104
  // ----------------------------------------------------------
1105
- <<<<<<< HEAD
1106
1105
  // Estate-agent ontology (Task 358) — Listing-centric model
1107
1106
  // documented at platform/plugins/memory/references/schema-estate-agent.md.
1108
1107
  //
@@ -1174,7 +1173,9 @@ FOR (i:ImageObject) ON (i.accountId);
1174
1173
  // label before the first :PostalAddress write lands.
1175
1174
  CREATE INDEX postal_address_postcode IF NOT EXISTS
1176
1175
  FOR (a:PostalAddress) ON (a.postalCode);
1177
- =======
1176
+
1177
+ // ----------------------------------------------------------
1178
+ <<<<<<< HEAD
1178
1179
  // AEOAudit — Answer Engine Optimisation audit history (Task 354).
1179
1180
  // Written by the aeo plugin's aeo-audit-page tool when invoked
1180
1181
  // with persist=true. Append-only audit trail; each invocation
@@ -1204,4 +1205,94 @@ FOR (a:AEOAudit) ON (a.target);
1204
1205
 
1205
1206
  CREATE INDEX aeo_audit_run_at IF NOT EXISTS
1206
1207
  FOR (a:AEOAudit) ON (a.runAt);
1207
- >>>>>>> worktree-task-354-aeo-plugin
1208
+
1209
+ // ----------------------------------------------------------
1210
+ // Visitor graph (Task 357)
1211
+ //
1212
+ // Pixel emits pageview/click/scroll/dwell to POST /v/event. Events land
1213
+ // under :Session, attributed to :Person (via signed-token cookie) or
1214
+ // :AnonVisitor (cookie-less). When a previously anonymous browser
1215
+ // completes its first signed-token click, the AnonVisitor merges into
1216
+ // the Person and prior :Session edges reattribute. Schema-org-ish:
1217
+ // Session/PageView/Click are bespoke (no schema.org coverage of analytics);
1218
+ // Page is `schema:WebPage`-shaped (url, name).
1219
+ //
1220
+ // Multi-tenancy: every node carries accountId. Uniqueness constraints
1221
+ // are composite (accountId, idKey) — sessionId/visitorId/url collisions
1222
+ // across accounts are valid.
1223
+ //
1224
+ // Cascade: contact-erase on :Person trashes (:Session)-[:HAS_EVENT]->(*)
1225
+ // the same way profile-delete cascades preferences. :Page and :Listing
1226
+ // are content metadata and intentionally survive (no PII).
1227
+ // ----------------------------------------------------------
1228
+
1229
+ CREATE CONSTRAINT session_id_unique IF NOT EXISTS
1230
+ FOR (s:Session) REQUIRE (s.accountId, s.sessionId) IS UNIQUE;
1231
+
1232
+ CREATE INDEX session_account IF NOT EXISTS
1233
+ FOR (s:Session) ON (s.accountId);
1234
+
1235
+ CREATE INDEX session_started_at IF NOT EXISTS
1236
+ FOR (s:Session) ON (s.startedAt);
1237
+
1238
+ CREATE CONSTRAINT anon_visitor_id_unique IF NOT EXISTS
1239
+ FOR (av:AnonVisitor) REQUIRE (av.accountId, av.visitorId) IS UNIQUE;
1240
+
1241
+ CREATE INDEX anon_visitor_account IF NOT EXISTS
1242
+ FOR (av:AnonVisitor) ON (av.accountId);
1243
+
1244
+ CREATE CONSTRAINT page_url_unique IF NOT EXISTS
1245
+ FOR (pg:Page) REQUIRE (pg.accountId, pg.url) IS UNIQUE;
1246
+
1247
+ CREATE INDEX page_account IF NOT EXISTS
1248
+ FOR (pg:Page) ON (pg.accountId);
1249
+
1250
+ // PageView/Click/ScrollMilestone/Recommendation: no uniqueness, just
1251
+ // accountId index. ScrollMilestone is a roll-up (one per PageView,
1252
+ // updated in place) so a uniqueness constraint on (sessionId, pageViewId)
1253
+ // would also work — left as index until a write pattern needs it.
1254
+ CREATE INDEX pageview_account IF NOT EXISTS
1255
+ FOR (pv:PageView) ON (pv.accountId);
1256
+
1257
+ CREATE INDEX pageview_occurred_at IF NOT EXISTS
1258
+ FOR (pv:PageView) ON (pv.occurredAt);
1259
+
1260
+ CREATE INDEX click_account IF NOT EXISTS
1261
+ FOR (cl:Click) ON (cl.accountId);
1262
+
1263
+ CREATE INDEX click_occurred_at IF NOT EXISTS
1264
+ FOR (cl:Click) ON (cl.occurredAt);
1265
+
1266
+ CREATE INDEX scroll_milestone_account IF NOT EXISTS
1267
+ FOR (sm:ScrollMilestone) ON (sm.accountId);
1268
+
1269
+ CREATE INDEX recommendation_account IF NOT EXISTS
1270
+ FOR (rec:Recommendation) ON (rec.accountId);
1271
+
1272
+ CREATE INDEX recommendation_session_key IF NOT EXISTS
1273
+ FOR (rec:Recommendation) ON (rec.sessionKey);
1274
+ =======
1275
+ // Idea (Task 352) — original-thinking candidates extracted by
1276
+ // the signal-detector specialist from admin-side conversations.
1277
+ // Written via memory-write(labels:["Idea"], ...) with one edge
1278
+ // (:Conversation)-[:HAS_IDEA]->(:Idea). Forward-only write surface:
1279
+ // no historical backfill, no dedup, no clustering — let the brain
1280
+ // accumulate first. Declared here so memory-write's label validator
1281
+ // (db.labels() ∪ schema.cypher) registers the label on a fresh
1282
+ // deploy where no :Idea node has yet landed; without this, the
1283
+ // first write is rejected as "unknown label" and the specialist's
1284
+ // LOUD-FAIL surfaces the rejection without anything landing.
1285
+ // ----------------------------------------------------------
1286
+
1287
+ CREATE INDEX idea_account IF NOT EXISTS
1288
+ FOR (i:Idea) ON (i.accountId);
1289
+
1290
+ CREATE VECTOR INDEX idea_embedding IF NOT EXISTS
1291
+ FOR (i:Idea) ON (i.embedding)
1292
+ OPTIONS {
1293
+ indexConfig: {
1294
+ `vector.dimensions`: 768,
1295
+ `vector.similarity_function`: 'cosine'
1296
+ }
1297
+ };
1298
+ >>>>>>> worktree-task-352-idea-schema