@rubytech/create-maxy-code 0.1.62 → 0.1.64
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.
- package/dist/__tests__/installer-specialist-registration.test.js +112 -0
- package/dist/index.js +22 -0
- package/dist/specialist-registration.js +78 -0
- package/package.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +22 -0
- package/payload/platform/plugins/admin/hooks/__tests__/turn-completed-graph-write.test.sh +50 -13
- package/payload/platform/plugins/admin/hooks/turn-completed-graph-write.sh +22 -21
- package/payload/platform/plugins/contacts/PLUGIN.md +9 -0
- package/payload/platform/plugins/docs/references/admin-session.md +57 -8
- package/payload/platform/plugins/docs/references/platform.md +4 -0
- package/payload/platform/plugins/email/PLUGIN.md +9 -0
- package/payload/platform/plugins/memory/PLUGIN.md +37 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.js +137 -75
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts +0 -17
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js +32 -4
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts +65 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js +182 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js +8 -8
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/log-ingest.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/log-ingest.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/log-ingest.test.js +241 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/log-ingest.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +9 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.js +9 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.js +10 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-add.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-add.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-add.js +5 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-add.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-remove.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-remove.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-remove.js +5 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-remove.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +5 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +5 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +6 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +4 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +10 -3
- package/payload/platform/plugins/outlook/PLUGIN.md +7 -0
- package/payload/platform/plugins/replicate/PLUGIN.md +3 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +8 -0
- package/payload/platform/plugins/tasks/PLUGIN.md +14 -0
- package/payload/platform/plugins/telegram/PLUGIN.md +3 -0
- package/payload/platform/plugins/waitlist/PLUGIN.md +7 -0
- package/payload/platform/plugins/whatsapp/PLUGIN.md +12 -0
- package/payload/platform/plugins/workflows/PLUGIN.md +8 -0
- package/payload/platform/services/claude-session-manager/dist/index.js +43 -1
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +33 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +214 -59
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.d.ts +23 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.js +141 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts +13 -2
- package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js +150 -37
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/types.d.ts +5 -0
- package/payload/platform/services/claude-session-manager/dist/types.d.ts.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
- package/payload/premium-plugins/real-agent/BUNDLE.md +2 -4
- package/payload/premium-plugins/real-agent/agents/compliance.md +1 -1
- package/payload/premium-plugins/real-agent/agents/valuer.md +1 -2
- package/payload/premium-plugins/real-agent/plugins/epc/.claude-plugin/plugin.json +3 -3
- package/payload/premium-plugins/real-agent/plugins/listings/.claude-plugin/plugin.json +1 -1
- package/payload/premium-plugins/real-agent/plugins/listings/PLUGIN.md +1 -3
- package/payload/premium-plugins/real-agent/plugins/listings/skills/new-instruction/SKILL.md +11 -12
- package/payload/premium-plugins/real-agent/plugins/loop/PLUGIN.md +27 -0
- package/payload/premium-plugins/real-agent/plugins/preval/.claude-plugin/plugin.json +1 -1
- package/payload/premium-plugins/real-agent/plugins/preval/PLUGIN.md +16 -8
- package/payload/premium-plugins/real-agent/plugins/preval/hooks/preval-prompt-required.sh +140 -0
- package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/SKILL.md +92 -40
- package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/__tests__/adherence.test.py +373 -0
- package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/render.py +299 -115
- package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/template-inputs.schema.json +34 -19
- package/payload/premium-plugins/real-agent/plugins/preval/skills/property-preval/references/template.html +88 -19
- package/payload/premium-plugins/real-agent/plugins/property-data/PLUGIN.md +22 -0
- package/payload/premium-plugins/real-agent/specs/03-new-instruction.md +8 -12
- package/payload/server/{chunk-2IKQERHN.js → chunk-S6PQA6Q4.js} +43 -34
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/{admin-DhN3G8W7.js → admin-ymReS1mN.js} +1 -1
- package/payload/server/public/assets/{data-B2ZVXOcE.js → data-D6U2e85B.js} +1 -1
- package/payload/server/public/assets/{graph-BAMGPHrK.js → graph-C274PN27.js} +1 -1
- package/payload/server/public/assets/{graph-labels-D9eBbvxo.js → graph-labels-DQFzd1FY.js} +1 -1
- package/payload/server/public/assets/{page-DjdVMWCz.js → page-D-OLjort.js} +1 -1
- package/payload/server/public/assets/{page-CV27Al6Z.js → page-DFFt9_Q0.js} +1 -1
- package/payload/server/public/data.html +3 -3
- package/payload/server/public/graph.html +3 -3
- package/payload/server/public/index.html +4 -4
- package/payload/server/server.js +2 -2
- package/payload/platform/plugins/brochures/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/brochures/PLUGIN.md +0 -38
- package/payload/platform/plugins/brochures/commands/make-brochure.md +0 -11
- package/payload/platform/plugins/brochures/skills/a4-print-documents/SKILL.md +0 -478
- package/payload/platform/plugins/brochures/skills/brand-design/SKILL.md +0 -192
- package/payload/platform/plugins/brochures/skills/make-brochure/SKILL.md +0 -354
- package/payload/platform/plugins/brochures/skills/make-brochure/references/seller-brief-template.md +0 -115
- package/payload/platform/plugins/brochures/skills/property-brochure/SKILL.md +0 -142
- package/payload/platform/plugins/brochures/skills/property-brochure/references/build.md +0 -270
- package/payload/platform/plugins/brochures/skills/property-brochure/references/copy.md +0 -211
- package/payload/platform/plugins/brochures/skills/property-brochure/references/images.md +0 -166
- package/payload/platform/plugins/brochures/skills/property-brochure/references/index-landing.md +0 -376
- package/payload/platform/plugins/brochures/skills/property-brochure/references/index.html +0 -1288
- package/payload/platform/plugins/brochures/skills/property-brochure/references/placeholders.md +0 -250
- package/payload/platform/plugins/brochures/skills/property-brochure/references/registers.md +0 -47
- package/payload/platform/plugins/brochures/skills/property-brochure/references/seller-brief.md +0 -56
- package/payload/platform/plugins/brochures/skills/property-brochure/references/structure.md +0 -249
- package/payload/platform/plugins/brochures/skills/property-brochure/references/template.html +0 -2370
- package/payload/platform/plugins/brochures/skills/property-extract/SKILL.md +0 -372
- package/payload/platform/plugins/brochures/skills/property-market-report/SKILL.md +0 -100
- package/payload/platform/plugins/brochures/skills/property-market-report/references/render.py +0 -267
- package/payload/platform/plugins/brochures/skills/property-market-report/references/template.html +0 -266
- package/payload/platform/plugins/brochures/skills/property-socials/SKILL.md +0 -141
- package/payload/platform/plugins/buyers/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/buyers/PLUGIN.md +0 -34
- package/payload/platform/plugins/buyers/skills/buyer-feedback/SKILL.md +0 -109
- package/payload/platform/plugins/buyers/skills/buyer-management/SKILL.md +0 -42
- package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-qualification-questions.md +0 -16
- package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-qualification.md +0 -59
- package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-scripts.md +0 -63
- package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-working-scripts.md +0 -54
- package/payload/platform/plugins/buyers/skills/buyer-management/references/feedback-collection.md +0 -42
- package/payload/platform/plugins/buyers/skills/buyer-management/references/offer-capture.md +0 -38
- package/payload/platform/plugins/buyers/skills/buyer-management/references/viewing-booking.md +0 -32
- package/payload/platform/plugins/buyers/skills/buyer-management/references/viewing-management.md +0 -52
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/SKILL.md +0 -407
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/care-fees-guide.md +0 -68
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/divorce-sales-guide.md +0 -61
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/downsizing-guide.md +0 -45
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/first-time-buyers.md +0 -92
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/first-time-sellers.md +0 -78
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/probate-guide.md +0 -53
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/upsizing-guide.md +0 -41
- package/payload/platform/plugins/buyers/skills/property-enquiry/SKILL.md +0 -126
- package/payload/platform/plugins/buyers/skills/viewing-management/SKILL.md +0 -111
- package/payload/platform/plugins/epc/.claude-plugin/plugin.json +0 -17
- package/payload/platform/plugins/epc/PLUGIN.md +0 -85
- package/payload/platform/plugins/epc/mcp/dist/index.d.ts +0 -2
- package/payload/platform/plugins/epc/mcp/dist/index.d.ts.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/index.js +0 -117
- package/payload/platform/plugins/epc/mcp/dist/index.js.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/lib/crypto.d.ts +0 -3
- package/payload/platform/plugins/epc/mcp/dist/lib/crypto.d.ts.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/lib/crypto.js +0 -72
- package/payload/platform/plugins/epc/mcp/dist/lib/crypto.js.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/lib/epc-api.d.ts +0 -60
- package/payload/platform/plugins/epc/mcp/dist/lib/epc-api.d.ts.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/lib/epc-api.js +0 -181
- package/payload/platform/plugins/epc/mcp/dist/lib/epc-api.js.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/lib/file-crypto.d.ts +0 -3
- package/payload/platform/plugins/epc/mcp/dist/lib/file-crypto.d.ts.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/lib/file-crypto.js +0 -49
- package/payload/platform/plugins/epc/mcp/dist/lib/file-crypto.js.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/lib/key-store.d.ts +0 -15
- package/payload/platform/plugins/epc/mcp/dist/lib/key-store.d.ts.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/lib/key-store.js +0 -130
- package/payload/platform/plugins/epc/mcp/dist/lib/key-store.js.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/lib/neo4j.d.ts +0 -5
- package/payload/platform/plugins/epc/mcp/dist/lib/neo4j.d.ts.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/lib/neo4j.js +0 -38
- package/payload/platform/plugins/epc/mcp/dist/lib/neo4j.js.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/tools/key-deregister.d.ts +0 -4
- package/payload/platform/plugins/epc/mcp/dist/tools/key-deregister.d.ts.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/tools/key-deregister.js +0 -9
- package/payload/platform/plugins/epc/mcp/dist/tools/key-deregister.js.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/tools/key-list.d.ts +0 -4
- package/payload/platform/plugins/epc/mcp/dist/tools/key-list.d.ts.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/tools/key-list.js +0 -10
- package/payload/platform/plugins/epc/mcp/dist/tools/key-list.js.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/tools/key-register.d.ts +0 -5
- package/payload/platform/plugins/epc/mcp/dist/tools/key-register.d.ts.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/tools/key-register.js +0 -36
- package/payload/platform/plugins/epc/mcp/dist/tools/key-register.js.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/tools/lookup.d.ts +0 -10
- package/payload/platform/plugins/epc/mcp/dist/tools/lookup.d.ts.map +0 -1
- package/payload/platform/plugins/epc/mcp/dist/tools/lookup.js +0 -30
- package/payload/platform/plugins/epc/mcp/dist/tools/lookup.js.map +0 -1
- package/payload/platform/plugins/epc/mcp/package-lock.json +0 -2566
- package/payload/platform/plugins/epc/mcp/package.json +0 -21
- package/payload/platform/plugins/epc/mcp/src/__tests__/epc-api.test.ts +0 -251
- package/payload/platform/plugins/epc/mcp/src/__tests__/key-roundtrip.test.ts +0 -113
- package/payload/platform/plugins/epc/mcp/src/__tests__/lookup.test.ts +0 -181
- package/payload/platform/plugins/epc/mcp/src/__tests__/schema-parity.test.ts +0 -54
- package/payload/platform/plugins/epc/mcp/src/index.ts +0 -156
- package/payload/platform/plugins/epc/mcp/src/lib/crypto.ts +0 -79
- package/payload/platform/plugins/epc/mcp/src/lib/epc-api.ts +0 -241
- package/payload/platform/plugins/epc/mcp/src/lib/file-crypto.ts +0 -55
- package/payload/platform/plugins/epc/mcp/src/lib/key-store.ts +0 -172
- package/payload/platform/plugins/epc/mcp/src/lib/neo4j.ts +0 -47
- package/payload/platform/plugins/epc/mcp/src/tools/key-deregister.ts +0 -9
- package/payload/platform/plugins/epc/mcp/src/tools/key-list.ts +0 -10
- package/payload/platform/plugins/epc/mcp/src/tools/key-register.ts +0 -44
- package/payload/platform/plugins/epc/mcp/src/tools/lookup.ts +0 -43
- package/payload/platform/plugins/epc/mcp/tsconfig.json +0 -20
- package/payload/platform/plugins/epc/mcp/vitest.config.ts +0 -8
- package/payload/platform/plugins/estate-business/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/estate-business/PLUGIN.md +0 -64
- package/payload/platform/plugins/estate-business/skills/business-growth/SKILL.md +0 -133
- package/payload/platform/plugins/estate-business/skills/business-growth/references/buy-back-your-time.md +0 -37
- package/payload/platform/plugins/estate-business/skills/business-growth/references/firewave-gost-scorecards.md +0 -14
- package/payload/platform/plugins/estate-business/skills/business-growth/references/keller-org-model.md +0 -17
- package/payload/platform/plugins/estate-business/skills/business-growth/references/lencioni-team-models.md +0 -22
- package/payload/platform/plugins/estate-business/skills/business-growth/references/listing-management-system.md +0 -11
- package/payload/platform/plugins/estate-business/skills/business-growth/references/net-figure-form.md +0 -11
- package/payload/platform/plugins/estate-business/skills/business-growth/references/serhant-bizinbox-notes.md +0 -13
- package/payload/platform/plugins/estate-business/skills/business-growth/references/team-roles-commission.md +0 -14
- package/payload/platform/plugins/estate-business/skills/business-growth/references/va-2026-ops.md +0 -43
- package/payload/platform/plugins/estate-business/skills/business-growth/references/wingman-structure.md +0 -13
- package/payload/platform/plugins/estate-business/skills/business-operations/SKILL.md +0 -32
- package/payload/platform/plugins/estate-business/skills/business-operations/references/crm-systems.md +0 -57
- package/payload/platform/plugins/estate-business/skills/business-operations/references/hiring-guide.md +0 -59
- package/payload/platform/plugins/estate-business/skills/business-operations/references/impact-framework.md +0 -47
- package/payload/platform/plugins/estate-business/skills/business-operations/references/minutes-equal-money.md +0 -55
- package/payload/platform/plugins/estate-business/skills/business-operations/references/team-management.md +0 -48
- package/payload/platform/plugins/estate-business/skills/commission-calculator/SKILL.md +0 -40
- package/payload/platform/plugins/estate-business/skills/exp-partnership/SKILL.md +0 -52
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/12-reasons.md +0 -39
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/95-5-system.md +0 -66
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/agent-attraction-scripts.md +0 -90
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/business-partnership.md +0 -92
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/exp-model-overview.md +0 -66
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/model-comparison.md +0 -66
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/revenue-share-explained.md +0 -57
- package/payload/platform/plugins/estate-business/skills/month-end-close/SKILL.md +0 -69
- package/payload/platform/plugins/estate-business/skills/payment-batch-stager/SKILL.md +0 -42
- package/payload/platform/plugins/estate-business/skills/period-reconciler/SKILL.md +0 -42
- package/payload/platform/plugins/estate-business/skills/personal-branding/SKILL.md +0 -117
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/attraction-agent-notes.md +0 -31
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/attraction-agent.md +0 -58
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/authenticity-boundaries.md +0 -28
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/become-a-brand-leader-notes.md +0 -19
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/blast-formula.md +0 -42
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/brand-leader.md +0 -48
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/brand-strategy-system.md +0 -59
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/content-engine.md +0 -49
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/firewave-blast-and-blogging.md +0 -23
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/gary-v-content.md +0 -52
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/gary-v-principles.md +0 -20
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/oversubscribed-positioning.md +0 -18
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/platforms.md +0 -41
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/priestley-oversubscribed.md +0 -54
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/storeys-style-examples.md +0 -25
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/visual-identity.md +0 -27
- package/payload/platform/plugins/estate-coaching/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/estate-coaching/PLUGIN.md +0 -54
- package/payload/platform/plugins/estate-coaching/skills/agent-performance/SKILL.md +0 -371
- package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/atomic-habits.md +0 -52
- package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/daily-routine-scorecard.md +0 -104
- package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/hp6-model.md +0 -63
- package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/twelve-week-year.md +0 -71
- package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/SKILL.md +0 -36
- package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/coaching-boundaries.md +0 -56
- package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/feedback-framework.md +0 -61
- package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/performance-framework.md +0 -109
- package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/SKILL.md +0 -421
- package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/coaching-exercises.md +0 -86
- package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/goal-setting.md +0 -78
- package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/one-to-one-framework.md +0 -92
- package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/soi-workbook.md +0 -103
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/SKILL.md +0 -410
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/agent-training-guide.md +0 -70
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/business-in-a-box.md +0 -72
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/buyers-guide.md +0 -53
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/codo-method.md +0 -72
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/website-planning-guide.md +0 -79
- package/payload/platform/plugins/estate-sales/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/estate-sales/PLUGIN.md +0 -52
- package/payload/platform/plugins/estate-sales/skills/chase-progression/SKILL.md +0 -107
- package/payload/platform/plugins/estate-sales/skills/negotiation/SKILL.md +0 -35
- package/payload/platform/plugins/estate-sales/skills/negotiation/references/deal-saving.md +0 -47
- package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-deep-guide.md +0 -64
- package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-prep-principles.md +0 -29
- package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-techniques.md +0 -42
- package/payload/platform/plugins/estate-sales/skills/negotiation/references/offer-presentation.md +0 -43
- package/payload/platform/plugins/estate-sales/skills/risk-scorer/SKILL.md +0 -42
- package/payload/platform/plugins/estate-sales/skills/sales-closer/SKILL.md +0 -24
- package/payload/platform/plugins/estate-sales/skills/sales-closer/references/serhant-emotion-stages.md +0 -36
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/SKILL.md +0 -30
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/chris-voss-discovery.md +0 -88
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/firewave-gost-journey.md +0 -68
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/phil-jones-openers.md +0 -78
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/pre-listing-checklist.md +0 -77
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/serhant-improv.md +0 -22
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/tom-ferry-discovery.md +0 -103
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/vendor-motivation-competitor.md +0 -52
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/SKILL.md +0 -29
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/chris-voss-negotiation.md +0 -70
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/phil-jones-price-words.md +0 -40
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/serhant-negotiation-plus.md +0 -55
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/tom-panos-commission-pricing.md +0 -57
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/tony-morris-questioning.md +0 -54
- package/payload/platform/plugins/estate-sales/skills/sales-progression/SKILL.md +0 -27
- package/payload/platform/plugins/estate-sales/skills/sales-progression/references/conveyancing-guide.md +0 -54
- package/payload/platform/plugins/estate-sales/skills/sales-progression/references/transaction-tracking.md +0 -66
- package/payload/platform/plugins/estate-teaching/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/estate-teaching/PLUGIN.md +0 -30
- package/payload/platform/plugins/estate-teaching/skills/content-directory/SKILL.md +0 -39
- package/payload/platform/plugins/estate-teaching/skills/content-directory/references/module-delivery.md +0 -65
- package/payload/platform/plugins/estate-teaching/skills/content-directory/references/progress-tracking.md +0 -47
- package/payload/platform/plugins/leads/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/leads/PLUGIN.md +0 -61
- package/payload/platform/plugins/leads/skills/chain-progression-tracker/SKILL.md +0 -51
- package/payload/platform/plugins/leads/skills/diary-builder/SKILL.md +0 -38
- package/payload/platform/plugins/leads/skills/enquiry-triage/SKILL.md +0 -36
- package/payload/platform/plugins/leads/skills/lead-nurturing/SKILL.md +0 -137
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/buyer-search-letter.md +0 -28
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/buyer-search-letters.md +0 -37
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/database-reactivation.md +0 -30
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/email-nurture-sequences.md +0 -45
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/facebook-referrals.md +0 -30
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/firewave-email-nurture-sequences.md +0 -41
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/keller-33-touch.md +0 -34
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/neighbour-letters.md +0 -31
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/neighbour-notification-letter.md +0 -20
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/ofi-follow-up-dialogue.md +0 -22
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/ofi-follow-up.md +0 -26
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/serhant-three-fs-plus.md +0 -21
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/sharran-10x10x10.md +0 -18
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/sms-templates.md +0 -40
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/sphere-of-influence-notes.md +0 -34
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/sphere-of-influence.md +0 -60
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/tom-panos-sms-templates.md +0 -59
- package/payload/platform/plugins/leads/skills/morning-round/SKILL.md +0 -72
- package/payload/platform/plugins/leads/skills/prospecting/SKILL.md +0 -33
- package/payload/platform/plugins/leads/skills/prospecting/references/database-matching.md +0 -30
- package/payload/platform/plugins/leads/skills/prospecting/references/database-value.md +0 -53
- package/payload/platform/plugins/leads/skills/prospecting/references/prospecting-dialogues.md +0 -24
- package/payload/platform/plugins/leads/skills/prospecting/references/reactivation.md +0 -34
- package/payload/platform/plugins/listings/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/listings/PLUGIN.md +0 -102
- package/payload/platform/plugins/listings/skills/comparable-finder/SKILL.md +0 -52
- package/payload/platform/plugins/listings/skills/epc-checker/SKILL.md +0 -38
- package/payload/platform/plugins/listings/skills/home-preparation/SKILL.md +0 -28
- package/payload/platform/plugins/listings/skills/home-preparation/references/kerb-appeal.md +0 -38
- package/payload/platform/plugins/listings/skills/home-preparation/references/photo-day.md +0 -59
- package/payload/platform/plugins/listings/skills/home-preparation/references/situational-tips.md +0 -50
- package/payload/platform/plugins/listings/skills/home-preparation/references/staging-guide.md +0 -52
- package/payload/platform/plugins/listings/skills/listing-copy-writer/SKILL.md +0 -55
- package/payload/platform/plugins/listings/skills/listing-presentation/SKILL.md +0 -286
- package/payload/platform/plugins/listings/skills/listing-presentation/references/booking-script.md +0 -51
- package/payload/platform/plugins/listings/skills/listing-presentation/references/objection-scripts.md +0 -193
- package/payload/platform/plugins/listings/skills/listing-presentation/references/penhaul-presentation.md +0 -123
- package/payload/platform/plugins/listings/skills/listing-presentation/references/pre-listing-kit.md +0 -139
- package/payload/platform/plugins/listings/skills/listing-presentation/references/set-to-sell.md +0 -55
- package/payload/platform/plugins/listings/skills/listing-presentation/references/sharran-frameworks.md +0 -107
- package/payload/platform/plugins/listings/skills/local-market-stats/SKILL.md +0 -33
- package/payload/platform/plugins/listings/skills/new-instruction/SKILL.md +0 -78
- package/payload/platform/plugins/listings/skills/particulars-builder/SKILL.md +0 -48
- package/payload/platform/plugins/listings/skills/portal-launch-scheduler/SKILL.md +0 -49
- package/payload/platform/plugins/listings/skills/pricing-scenario-builder/SKILL.md +0 -35
- package/payload/platform/plugins/listings/skills/property-marketing/SKILL.md +0 -337
- package/payload/platform/plugins/listings/skills/property-marketing/references/auction-report-template.md +0 -41
- package/payload/platform/plugins/listings/skills/property-marketing/references/coming-soon-campaign.md +0 -43
- package/payload/platform/plugins/listings/skills/property-marketing/references/direct-mail-templates.md +0 -121
- package/payload/platform/plugins/listings/skills/property-marketing/references/eoi-form-template.md +0 -62
- package/payload/platform/plugins/listings/skills/property-marketing/references/monthly-scorecard.md +0 -63
- package/payload/platform/plugins/listings/skills/supplier-booker/SKILL.md +0 -39
- package/payload/platform/plugins/listings/skills/talk-track-composer/SKILL.md +0 -36
- package/payload/platform/plugins/listings/skills/terms-of-business-drafter/SKILL.md +0 -54
- package/payload/platform/plugins/listings/skills/valuation-prep/SKILL.md +0 -69
- package/payload/platform/plugins/loop/.claude-plugin/plugin.json +0 -17
- package/payload/platform/plugins/loop/PLUGIN.md +0 -233
- package/payload/platform/plugins/loop/mcp/dist/index.d.ts +0 -2
- package/payload/platform/plugins/loop/mcp/dist/index.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/index.js +0 -320
- package/payload/platform/plugins/loop/mcp/dist/index.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/lib/crypto.d.ts +0 -10
- package/payload/platform/plugins/loop/mcp/dist/lib/crypto.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/lib/crypto.js +0 -88
- package/payload/platform/plugins/loop/mcp/dist/lib/crypto.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/lib/file-crypto.d.ts +0 -3
- package/payload/platform/plugins/loop/mcp/dist/lib/file-crypto.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/lib/file-crypto.js +0 -48
- package/payload/platform/plugins/loop/mcp/dist/lib/file-crypto.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/lib/key-store.d.ts +0 -22
- package/payload/platform/plugins/loop/mcp/dist/lib/key-store.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/lib/key-store.js +0 -165
- package/payload/platform/plugins/loop/mcp/dist/lib/key-store.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.d.ts +0 -82
- package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.js +0 -392
- package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.d.ts +0 -5
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js +0 -40
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/auto-responder.d.ts +0 -12
- package/payload/platform/plugins/loop/mcp/dist/tools/auto-responder.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/auto-responder.js +0 -22
- package/payload/platform/plugins/loop/mcp/dist/tools/auto-responder.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +0 -10
- package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.js +0 -24
- package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/feedback.d.ts +0 -16
- package/payload/platform/plugins/loop/mcp/dist/tools/feedback.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/feedback.js +0 -35
- package/payload/platform/plugins/loop/mcp/dist/tools/feedback.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.d.ts +0 -5
- package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.js +0 -9
- package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/key-list.d.ts +0 -4
- package/payload/platform/plugins/loop/mcp/dist/tools/key-list.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/key-list.js +0 -14
- package/payload/platform/plugins/loop/mcp/dist/tools/key-list.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/key-register.d.ts +0 -9
- package/payload/platform/plugins/loop/mcp/dist/tools/key-register.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/key-register.js +0 -43
- package/payload/platform/plugins/loop/mcp/dist/tools/key-register.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +0 -6
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.js +0 -7
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +0 -9
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.js +0 -16
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +0 -15
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.js +0 -11
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.d.ts +0 -10
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.js +0 -39
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.d.ts +0 -9
- package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.js +0 -125
- package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/people-search.d.ts +0 -18
- package/payload/platform/plugins/loop/mcp/dist/tools/people-search.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/people-search.js +0 -87
- package/payload/platform/plugins/loop/mcp/dist/tools/people-search.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.d.ts +0 -10
- package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.js +0 -82
- package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-intent.d.ts +0 -33
- package/payload/platform/plugins/loop/mcp/dist/tools/property-intent.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-intent.js +0 -19
- package/payload/platform/plugins/loop/mcp/dist/tools/property-intent.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.d.ts +0 -11
- package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.js +0 -26
- package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-request.d.ts +0 -15
- package/payload/platform/plugins/loop/mcp/dist/tools/property-request.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-request.js +0 -11
- package/payload/platform/plugins/loop/mcp/dist/tools/property-request.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-search.d.ts +0 -16
- package/payload/platform/plugins/loop/mcp/dist/tools/property-search.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-search.js +0 -41
- package/payload/platform/plugins/loop/mcp/dist/tools/property-search.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-sold.d.ts +0 -9
- package/payload/platform/plugins/loop/mcp/dist/tools/property-sold.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/property-sold.js +0 -19
- package/payload/platform/plugins/loop/mcp/dist/tools/property-sold.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/supplier.d.ts +0 -13
- package/payload/platform/plugins/loop/mcp/dist/tools/supplier.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/supplier.js +0 -49
- package/payload/platform/plugins/loop/mcp/dist/tools/supplier.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.d.ts +0 -7
- package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.js +0 -19
- package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/team-info.d.ts +0 -5
- package/payload/platform/plugins/loop/mcp/dist/tools/team-info.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/team-info.js +0 -32
- package/payload/platform/plugins/loop/mcp/dist/tools/team-info.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.d.ts +0 -14
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.js +0 -11
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +0 -9
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.js +0 -85
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.d.ts +0 -13
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.js +0 -44
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.d.ts +0 -14
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +0 -1
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.js +0 -18
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.js.map +0 -1
- package/payload/platform/plugins/loop/mcp/package-lock.json +0 -2549
- package/payload/platform/plugins/loop/mcp/package.json +0 -21
- package/payload/platform/plugins/loop/mcp/src/__tests__/loop-swagger.snapshot.json +0 -26467
- package/payload/platform/plugins/loop/mcp/src/__tests__/new-tool-shape.test.ts +0 -99
- package/payload/platform/plugins/loop/mcp/src/__tests__/plugin-md-time-doctrine.test.ts +0 -132
- package/payload/platform/plugins/loop/mcp/src/__tests__/swagger-write-coverage.test.ts +0 -154
- package/payload/platform/plugins/loop/mcp/src/index.ts +0 -498
- package/payload/platform/plugins/loop/mcp/src/lib/crypto.ts +0 -105
- package/payload/platform/plugins/loop/mcp/src/lib/file-crypto.ts +0 -54
- package/payload/platform/plugins/loop/mcp/src/lib/key-store.ts +0 -221
- package/payload/platform/plugins/loop/mcp/src/lib/loop-api.ts +0 -567
- package/payload/platform/plugins/loop/mcp/src/lib/neo4j.ts +0 -51
- package/payload/platform/plugins/loop/mcp/src/tools/auto-responder.ts +0 -80
- package/payload/platform/plugins/loop/mcp/src/tools/customer-preferences.ts +0 -66
- package/payload/platform/plugins/loop/mcp/src/tools/feedback.ts +0 -86
- package/payload/platform/plugins/loop/mcp/src/tools/key-deregister.ts +0 -12
- package/payload/platform/plugins/loop/mcp/src/tools/key-list.ts +0 -19
- package/payload/platform/plugins/loop/mcp/src/tools/key-register.ts +0 -70
- package/payload/platform/plugins/loop/mcp/src/tools/marketing-enquiry.ts +0 -27
- package/payload/platform/plugins/loop/mcp/src/tools/marketing-match-batch.ts +0 -53
- package/payload/platform/plugins/loop/mcp/src/tools/marketing-match-request.ts +0 -42
- package/payload/platform/plugins/loop/mcp/src/tools/marketing-match.ts +0 -84
- package/payload/platform/plugins/loop/mcp/src/tools/people-detail.ts +0 -245
- package/payload/platform/plugins/loop/mcp/src/tools/people-search.ts +0 -180
- package/payload/platform/plugins/loop/mcp/src/tools/property-detail.ts +0 -145
- package/payload/platform/plugins/loop/mcp/src/tools/property-intent.ts +0 -84
- package/payload/platform/plugins/loop/mcp/src/tools/property-listed.ts +0 -81
- package/payload/platform/plugins/loop/mcp/src/tools/property-search.ts +0 -92
- package/payload/platform/plugins/loop/mcp/src/tools/property-sold.ts +0 -67
- package/payload/platform/plugins/loop/mcp/src/tools/supplier.ts +0 -129
- package/payload/platform/plugins/loop/mcp/src/tools/team-availability.ts +0 -52
- package/payload/platform/plugins/loop/mcp/src/tools/team-info.ts +0 -95
- package/payload/platform/plugins/loop/mcp/src/tools/viewing-create.ts +0 -41
- package/payload/platform/plugins/loop/mcp/src/tools/viewing-detail.ts +0 -171
- package/payload/platform/plugins/loop/mcp/src/tools/viewing-search.ts +0 -92
- package/payload/platform/plugins/loop/mcp/src/tools/viewing-update.ts +0 -53
- package/payload/platform/plugins/loop/mcp/tsconfig.json +0 -20
- package/payload/platform/plugins/loop/mcp/vitest.config.ts +0 -9
- package/payload/platform/plugins/loop/skills/compliance-flag-checker/SKILL.md +0 -53
- package/payload/platform/plugins/loop/skills/priority-ranker/SKILL.md +0 -40
- package/payload/platform/plugins/loop/skills/tone-matched-drafter/SKILL.md +0 -53
- package/payload/platform/plugins/loop/skills/variance-narrator/SKILL.md +0 -50
- package/payload/platform/plugins/loop/skills/vendor-research/SKILL.md +0 -54
- package/payload/platform/plugins/preval/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/preval/PLUGIN.md +0 -47
- package/payload/platform/plugins/preval/skills/property-preval/SKILL.md +0 -146
- package/payload/platform/plugins/preval/skills/property-preval/references/render.py +0 -630
- package/payload/platform/plugins/preval/skills/property-preval/references/template-inputs.schema.json +0 -189
- package/payload/platform/plugins/preval/skills/property-preval/references/template.html +0 -312
- package/payload/platform/plugins/property-data/.claude-plugin/plugin.json +0 -17
- package/payload/platform/plugins/property-data/PLUGIN.md +0 -158
- package/payload/platform/plugins/property-data/mcp/dist/index.d.ts +0 -2
- package/payload/platform/plugins/property-data/mcp/dist/index.d.ts.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/index.js +0 -236
- package/payload/platform/plugins/property-data/mcp/dist/index.js.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/lib/crypto.d.ts +0 -3
- package/payload/platform/plugins/property-data/mcp/dist/lib/crypto.d.ts.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/lib/crypto.js +0 -72
- package/payload/platform/plugins/property-data/mcp/dist/lib/crypto.js.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/lib/file-crypto.d.ts +0 -3
- package/payload/platform/plugins/property-data/mcp/dist/lib/file-crypto.d.ts.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/lib/file-crypto.js +0 -49
- package/payload/platform/plugins/property-data/mcp/dist/lib/file-crypto.js.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/lib/key-store.d.ts +0 -15
- package/payload/platform/plugins/property-data/mcp/dist/lib/key-store.d.ts.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/lib/key-store.js +0 -135
- package/payload/platform/plugins/property-data/mcp/dist/lib/key-store.js.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/lib/neo4j.d.ts +0 -5
- package/payload/platform/plugins/property-data/mcp/dist/lib/neo4j.d.ts.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/lib/neo4j.js +0 -38
- package/payload/platform/plugins/property-data/mcp/dist/lib/neo4j.js.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/lib/propertydata-api.d.ts +0 -28
- package/payload/platform/plugins/property-data/mcp/dist/lib/propertydata-api.d.ts.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/lib/propertydata-api.js +0 -101
- package/payload/platform/plugins/property-data/mcp/dist/lib/propertydata-api.js.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/tools/endpoints.d.ts +0 -24
- package/payload/platform/plugins/property-data/mcp/dist/tools/endpoints.d.ts.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/tools/endpoints.js +0 -33
- package/payload/platform/plugins/property-data/mcp/dist/tools/endpoints.js.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-deregister.d.ts +0 -4
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-deregister.d.ts.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-deregister.js +0 -9
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-deregister.js.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-list.d.ts +0 -4
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-list.d.ts.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-list.js +0 -10
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-list.js.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-register.d.ts +0 -5
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-register.d.ts.map +0 -1
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-register.js +0 -50
- package/payload/platform/plugins/property-data/mcp/dist/tools/key-register.js.map +0 -1
- package/payload/platform/plugins/property-data/mcp/package-lock.json +0 -2566
- package/payload/platform/plugins/property-data/mcp/package.json +0 -21
- package/payload/platform/plugins/property-data/mcp/src/__tests__/endpoints.test.ts +0 -252
- package/payload/platform/plugins/property-data/mcp/src/__tests__/key-roundtrip.test.ts +0 -107
- package/payload/platform/plugins/property-data/mcp/src/__tests__/propertydata-api.test.ts +0 -184
- package/payload/platform/plugins/property-data/mcp/src/__tests__/schema-parity.test.ts +0 -62
- package/payload/platform/plugins/property-data/mcp/src/index.ts +0 -409
- package/payload/platform/plugins/property-data/mcp/src/lib/crypto.ts +0 -79
- package/payload/platform/plugins/property-data/mcp/src/lib/file-crypto.ts +0 -55
- package/payload/platform/plugins/property-data/mcp/src/lib/key-store.ts +0 -181
- package/payload/platform/plugins/property-data/mcp/src/lib/neo4j.ts +0 -47
- package/payload/platform/plugins/property-data/mcp/src/lib/propertydata-api.ts +0 -120
- package/payload/platform/plugins/property-data/mcp/src/tools/endpoints.ts +0 -47
- package/payload/platform/plugins/property-data/mcp/src/tools/key-deregister.ts +0 -9
- package/payload/platform/plugins/property-data/mcp/src/tools/key-list.ts +0 -10
- package/payload/platform/plugins/property-data/mcp/src/tools/key-register.ts +0 -54
- package/payload/platform/plugins/property-data/mcp/tsconfig.json +0 -20
- package/payload/platform/plugins/property-data/mcp/vitest.config.ts +0 -8
- package/payload/platform/plugins/property-data/skills/property-data/SKILL.md +0 -77
- package/payload/platform/plugins/vendors/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/vendors/PLUGIN.md +0 -33
- package/payload/platform/plugins/vendors/skills/vendor-communication/SKILL.md +0 -42
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/fee-protection-and-agenda.md +0 -28
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/listing-scripts.md +0 -44
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/negotiation-deep-guide.md +0 -70
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/price-alignment-scripts.md +0 -33
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/price-alignment.md +0 -34
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/scenario-scripts.md +0 -38
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/seller-engagement.md +0 -51
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/valuation-booking.md +0 -76
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/vendor-scripts.md +0 -63
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/vendor-updates.md +0 -41
- package/payload/platform/plugins/vendors/skills/vendor-updates/SKILL.md +0 -153
- package/payload/premium-plugins/real-agent/plugins/epc/PLUGIN.md +0 -85
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/package-lock.json +0 -2566
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/package.json +0 -21
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/__tests__/epc-api.test.ts +0 -251
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/__tests__/key-roundtrip.test.ts +0 -113
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/__tests__/lookup.test.ts +0 -181
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/__tests__/schema-parity.test.ts +0 -54
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/index.ts +0 -156
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/lib/crypto.ts +0 -79
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/lib/epc-api.ts +0 -241
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/lib/file-crypto.ts +0 -55
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/lib/key-store.ts +0 -172
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/lib/neo4j.ts +0 -47
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/tools/key-deregister.ts +0 -9
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/tools/key-list.ts +0 -10
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/tools/key-register.ts +0 -44
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/src/tools/lookup.ts +0 -43
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/tsconfig.json +0 -20
- package/payload/premium-plugins/real-agent/plugins/epc/mcp/vitest.config.ts +0 -8
- package/payload/premium-plugins/real-agent/plugins/listings/skills/epc-checker/SKILL.md +0 -38
|
@@ -1,92 +1,154 @@
|
|
|
1
|
-
import test from "
|
|
2
|
-
import assert from "node:assert/strict";
|
|
1
|
+
import { test, expect } from "vitest";
|
|
3
2
|
import { runDriftCheck } from "../live-schema-source.js";
|
|
4
3
|
// ---------------------------------------------------------------------------
|
|
5
|
-
// (e) Drift comparison emits
|
|
4
|
+
// (e) Drift comparison emits ONE summary line per non-empty kind.
|
|
6
5
|
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
6
|
+
// Task 167: prior shape was one log line per drifting token, which buried
|
|
7
|
+
// real signals under ~100 lines per refresh once the drift sets grew.
|
|
8
|
+
// The summary shape compresses the spam to ≤3 lines per refresh while
|
|
9
|
+
// still naming the first 10 tokens; remainder count appears as `+<N>`.
|
|
10
|
+
//
|
|
11
|
+
// Per-token lines remain reachable behind MEMORY_MCP_VERBOSE_DRIFT=1.
|
|
9
12
|
// ---------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
function withoutVerbose(fn) {
|
|
14
|
+
const prev = process.env.MEMORY_MCP_VERBOSE_DRIFT;
|
|
15
|
+
delete process.env.MEMORY_MCP_VERBOSE_DRIFT;
|
|
16
|
+
try {
|
|
17
|
+
return fn();
|
|
18
|
+
}
|
|
19
|
+
finally {
|
|
20
|
+
if (prev !== undefined)
|
|
21
|
+
process.env.MEMORY_MCP_VERBOSE_DRIFT = prev;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function withVerbose(fn) {
|
|
25
|
+
const prev = process.env.MEMORY_MCP_VERBOSE_DRIFT;
|
|
26
|
+
process.env.MEMORY_MCP_VERBOSE_DRIFT = "1";
|
|
27
|
+
try {
|
|
28
|
+
return fn();
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
if (prev === undefined)
|
|
32
|
+
delete process.env.MEMORY_MCP_VERBOSE_DRIFT;
|
|
33
|
+
else
|
|
34
|
+
process.env.MEMORY_MCP_VERBOSE_DRIFT = prev;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
test("(e1) one non-empty kind, ≤10 tokens → one summary line, no `+` suffix", () => {
|
|
38
|
+
withoutVerbose(() => {
|
|
39
|
+
const lines = [];
|
|
40
|
+
const drifts = runDriftCheck({
|
|
41
|
+
live: new Set(["Person", "Surprise"]),
|
|
42
|
+
declared: new Set(["Person"]),
|
|
43
|
+
markdown: new Set(["Person"]),
|
|
44
|
+
emit: (l) => lines.push(l),
|
|
45
|
+
});
|
|
46
|
+
// Return-value shape preserved (regression boundary).
|
|
47
|
+
expect(drifts).toEqual([
|
|
48
|
+
{ kind: "live-not-declared", token: "Surprise" },
|
|
49
|
+
]);
|
|
50
|
+
expect(lines).toEqual([
|
|
51
|
+
"[schema-validator] drift kind=live-not-declared count=1 tokens=Surprise",
|
|
52
|
+
]);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
test("(e2) one non-empty kind, >10 tokens → one summary line with `+<remainder>` suffix", () => {
|
|
56
|
+
withoutVerbose(() => {
|
|
57
|
+
// 12 markdown-orphan tokens A..L → first 10 listed, `+2` on last.
|
|
58
|
+
const orphans = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"];
|
|
59
|
+
const lines = [];
|
|
60
|
+
runDriftCheck({
|
|
61
|
+
live: new Set([]),
|
|
62
|
+
declared: new Set([]),
|
|
63
|
+
markdown: new Set(orphans),
|
|
64
|
+
emit: (l) => lines.push(l),
|
|
65
|
+
});
|
|
66
|
+
expect(lines).toEqual([
|
|
67
|
+
"[schema-validator] drift kind=markdown-orphan count=12 tokens=A,B,C,D,E,F,G,H,I,J+2",
|
|
68
|
+
]);
|
|
17
69
|
});
|
|
18
|
-
assert.deepEqual(drifts, [
|
|
19
|
-
{ kind: "live-not-declared", token: "Surprise" },
|
|
20
|
-
]);
|
|
21
|
-
assert.equal(lines.length, 1);
|
|
22
|
-
assert.equal(lines[0], "[schema-validator] drift kind=live-not-declared token=Surprise");
|
|
23
70
|
});
|
|
24
|
-
test("(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
71
|
+
test("(e3) three non-empty kinds → three summary lines in fixed order", () => {
|
|
72
|
+
withoutVerbose(() => {
|
|
73
|
+
const lines = [];
|
|
74
|
+
runDriftCheck({
|
|
75
|
+
live: new Set(["Person", "Surprise"]),
|
|
76
|
+
declared: new Set(["Person", "LocalBusiness"]),
|
|
77
|
+
markdown: new Set(["Person", "OldEntity"]),
|
|
78
|
+
emit: (l) => lines.push(l),
|
|
79
|
+
});
|
|
80
|
+
// Fixed iteration order: declared-not-live, live-not-declared, markdown-orphan.
|
|
81
|
+
expect(lines).toEqual([
|
|
82
|
+
"[schema-validator] drift kind=declared-not-live count=1 tokens=LocalBusiness",
|
|
83
|
+
"[schema-validator] drift kind=live-not-declared count=1 tokens=Surprise",
|
|
84
|
+
"[schema-validator] drift kind=markdown-orphan count=1 tokens=OldEntity",
|
|
85
|
+
]);
|
|
32
86
|
});
|
|
33
|
-
assert.deepEqual(drifts, [
|
|
34
|
-
{ kind: "declared-not-live", token: "LocalBusiness" },
|
|
35
|
-
]);
|
|
36
87
|
});
|
|
37
|
-
test("(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
88
|
+
test("(e4) all kinds empty → zero lines", () => {
|
|
89
|
+
withoutVerbose(() => {
|
|
90
|
+
const lines = [];
|
|
91
|
+
runDriftCheck({
|
|
92
|
+
live: new Set(["Person", "LocalBusiness"]),
|
|
93
|
+
declared: new Set(["Person", "LocalBusiness"]),
|
|
94
|
+
markdown: new Set(["Person"]),
|
|
95
|
+
emit: (l) => lines.push(l),
|
|
96
|
+
});
|
|
97
|
+
expect(lines.length).toBe(0);
|
|
46
98
|
});
|
|
47
|
-
assert.deepEqual(drifts, [
|
|
48
|
-
{ kind: "markdown-orphan", token: "OldEntity" },
|
|
49
|
-
]);
|
|
50
99
|
});
|
|
51
|
-
test("(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
100
|
+
test("(e5) verbose env → summary then per-token lines, in that order", () => {
|
|
101
|
+
withVerbose(() => {
|
|
102
|
+
const lines = [];
|
|
103
|
+
runDriftCheck({
|
|
104
|
+
live: new Set(["Person", "Surprise", "Mystery"]),
|
|
105
|
+
declared: new Set(["Person"]),
|
|
106
|
+
markdown: new Set(["Person"]),
|
|
107
|
+
emit: (l) => lines.push(l),
|
|
108
|
+
});
|
|
109
|
+
// Two live-not-declared tokens (Mystery, Surprise — alphabetical).
|
|
110
|
+
// Summary first, then one per-token line per drifting label.
|
|
111
|
+
expect(lines).toEqual([
|
|
112
|
+
"[schema-validator] drift kind=live-not-declared count=2 tokens=Mystery,Surprise",
|
|
113
|
+
"[schema-validator] drift kind=live-not-declared token=Mystery",
|
|
114
|
+
"[schema-validator] drift kind=live-not-declared token=Surprise",
|
|
115
|
+
]);
|
|
58
116
|
});
|
|
59
|
-
// Three drifts: declared-not-live (LocalBusiness), live-not-declared
|
|
60
|
-
// (Surprise), markdown-orphan (OldEntity). Sorted by kind, then token.
|
|
61
|
-
assert.deepEqual(lines, [
|
|
62
|
-
"[schema-validator] drift kind=declared-not-live token=LocalBusiness",
|
|
63
|
-
"[schema-validator] drift kind=live-not-declared token=Surprise",
|
|
64
|
-
"[schema-validator] drift kind=markdown-orphan token=OldEntity",
|
|
65
|
-
]);
|
|
66
117
|
});
|
|
67
|
-
test("(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
118
|
+
test("(e6) declared-not-live alone → bootstrap label rendered as summary", () => {
|
|
119
|
+
// Fresh-install scenario — single declared bootstrap label, no nodes yet.
|
|
120
|
+
withoutVerbose(() => {
|
|
121
|
+
const lines = [];
|
|
122
|
+
const drifts = runDriftCheck({
|
|
123
|
+
live: new Set(["AdminUser"]),
|
|
124
|
+
declared: new Set(["AdminUser", "LocalBusiness"]),
|
|
125
|
+
markdown: new Set([]),
|
|
126
|
+
emit: (l) => lines.push(l),
|
|
127
|
+
});
|
|
128
|
+
expect(drifts).toEqual([
|
|
129
|
+
{ kind: "declared-not-live", token: "LocalBusiness" },
|
|
130
|
+
]);
|
|
131
|
+
expect(lines).toEqual([
|
|
132
|
+
"[schema-validator] drift kind=declared-not-live count=1 tokens=LocalBusiness",
|
|
133
|
+
]);
|
|
74
134
|
});
|
|
75
|
-
assert.equal(lines.length, 0);
|
|
76
135
|
});
|
|
77
|
-
test("(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
136
|
+
test("(e7) markdown-orphan ignored when label is in live OR declared", () => {
|
|
137
|
+
withoutVerbose(() => {
|
|
138
|
+
const lines = [];
|
|
139
|
+
// OldEntity is in live, so it's live-not-declared, not a markdown-orphan.
|
|
140
|
+
const drifts = runDriftCheck({
|
|
141
|
+
live: new Set(["OldEntity"]),
|
|
142
|
+
declared: new Set([]),
|
|
143
|
+
markdown: new Set(["OldEntity"]),
|
|
144
|
+
emit: (l) => lines.push(l),
|
|
145
|
+
});
|
|
146
|
+
expect(drifts).toEqual([
|
|
147
|
+
{ kind: "live-not-declared", token: "OldEntity" },
|
|
148
|
+
]);
|
|
149
|
+
expect(lines).toEqual([
|
|
150
|
+
"[schema-validator] drift kind=live-not-declared count=1 tokens=OldEntity",
|
|
151
|
+
]);
|
|
85
152
|
});
|
|
86
|
-
// declared-not-live not triggered (declared is empty so loop is a no-op).
|
|
87
|
-
// live-not-declared IS triggered for OldEntity (live but not declared).
|
|
88
|
-
assert.deepEqual(drifts, [
|
|
89
|
-
{ kind: "live-not-declared", token: "OldEntity" },
|
|
90
|
-
]);
|
|
91
153
|
});
|
|
92
154
|
//# sourceMappingURL=live-schema-source.test.js.map
|
package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-schema-source.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/live-schema-source.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"live-schema-source.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/live-schema-source.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -103,23 +103,6 @@ interface DriftCheckInput {
|
|
|
103
103
|
markdown: ReadonlySet<string>;
|
|
104
104
|
emit: (line: string) => void;
|
|
105
105
|
}
|
|
106
|
-
/**
|
|
107
|
-
* Emit one log line per drifted token. Pure aside from the supplied emitter.
|
|
108
|
-
* Returns the drift entries for tests.
|
|
109
|
-
*
|
|
110
|
-
* Three drift kinds:
|
|
111
|
-
* live-not-declared : a label that nodes carry but schema.cypher does not
|
|
112
|
-
* declare a constraint/index for. Migration-drift
|
|
113
|
-
* signal — someone created a node with a fresh label
|
|
114
|
-
* without adding the canonical declaration.
|
|
115
|
-
* declared-not-live : declared in schema.cypher but no node carries it
|
|
116
|
-
* yet. Expected on fresh installs (bootstrap labels);
|
|
117
|
-
* suspicious on populated graphs (dead declaration).
|
|
118
|
-
* markdown-orphan : documented in schema-*.md but missing from both
|
|
119
|
-
* live and declared. Stale-doc signal — markdown
|
|
120
|
-
* describing a label that no longer exists in the
|
|
121
|
-
* graph or its constraint declarations.
|
|
122
|
-
*/
|
|
123
106
|
export declare function runDriftCheck(input: DriftCheckInput): DriftEntry[];
|
|
124
107
|
/**
|
|
125
108
|
* Resolve the absolute path to `platform/neo4j/schema.cypher`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-schema-source.d.ts","sourceRoot":"","sources":["../../src/lib/live-schema-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAIH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,KAAK,aAAa,EACnB,MAAM,mDAAmD,CAAC;AAG3D,MAAM,MAAM,SAAS,GACjB,mBAAmB,GACnB,mBAAmB,GACnB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,gBAAgB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,kEAAkE;IAClE,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,uDAAuD;IACvD,cAAc,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,2DAA2D;IAC3D,SAAS,IAAI,OAAO,CAAC;CACtB;AAED,UAAU,4BAA4B;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,aAAa,CAAC;IACvB,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,iBAAiB,CAwCnB;AAED,yEAAyE;AACzE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAM9B,UAAU,eAAe;IACvB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;
|
|
1
|
+
{"version":3,"file":"live-schema-source.d.ts","sourceRoot":"","sources":["../../src/lib/live-schema-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAIH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,KAAK,aAAa,EACnB,MAAM,mDAAmD,CAAC;AAG3D,MAAM,MAAM,SAAS,GACjB,mBAAmB,GACnB,mBAAmB,GACnB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,gBAAgB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,kEAAkE;IAClE,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,uDAAuD;IACvD,cAAc,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,2DAA2D;IAC3D,SAAS,IAAI,OAAO,CAAC;CACtB;AAED,UAAU,4BAA4B;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,aAAa,CAAC;IACvB,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,iBAAiB,CAwCnB;AAED,yEAAyE;AACzE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAM9B,UAAU,eAAe;IACvB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAmCD,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,EAAE,CA2ClE;AAuBD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAKhD"}
|
|
@@ -96,8 +96,7 @@ export function buildLiveSchemaSource(options) {
|
|
|
96
96
|
/** Re-export the fetcher factory so index.ts can wire one up cleanly. */
|
|
97
97
|
export { neo4jSchemaFetcher };
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
100
|
-
* Returns the drift entries for tests.
|
|
99
|
+
* Compute drift entries and emit one summary line per non-empty kind.
|
|
101
100
|
*
|
|
102
101
|
* Three drift kinds:
|
|
103
102
|
* live-not-declared : a label that nodes carry but schema.cypher does not
|
|
@@ -111,7 +110,22 @@ export { neo4jSchemaFetcher };
|
|
|
111
110
|
* live and declared. Stale-doc signal — markdown
|
|
112
111
|
* describing a label that no longer exists in the
|
|
113
112
|
* graph or its constraint declarations.
|
|
113
|
+
*
|
|
114
|
+
* Log shape (one line per non-empty kind):
|
|
115
|
+
* [schema-validator] drift kind=<kind> count=<n> tokens=<csv≤10>[+<rest>]
|
|
116
|
+
*
|
|
117
|
+
* Per-token lines (one per drifting label) are emitted *after* the summary
|
|
118
|
+
* lines only when MEMORY_MCP_VERBOSE_DRIFT=1. Default off because drift sets
|
|
119
|
+
* of 50+ tokens × 2 kinds buried real signals in mcp-memory-stderr (Task 167).
|
|
120
|
+
*
|
|
121
|
+
* Returns the drift entries (unchanged shape) for callers that need them.
|
|
114
122
|
*/
|
|
123
|
+
const DRIFT_KINDS_IN_ORDER = [
|
|
124
|
+
"declared-not-live",
|
|
125
|
+
"live-not-declared",
|
|
126
|
+
"markdown-orphan",
|
|
127
|
+
];
|
|
128
|
+
const DRIFT_TOKEN_PREVIEW_LIMIT = 10;
|
|
115
129
|
export function runDriftCheck(input) {
|
|
116
130
|
const drifts = [];
|
|
117
131
|
for (const token of input.live) {
|
|
@@ -134,8 +148,22 @@ export function runDriftCheck(input) {
|
|
|
134
148
|
return a.kind.localeCompare(b.kind);
|
|
135
149
|
return a.token.localeCompare(b.token);
|
|
136
150
|
});
|
|
137
|
-
|
|
138
|
-
|
|
151
|
+
// Read env per-call (not at module-load) so operators can toggle verbose
|
|
152
|
+
// without restarting the manager unit.
|
|
153
|
+
const verbose = process.env.MEMORY_MCP_VERBOSE_DRIFT === "1";
|
|
154
|
+
for (const kind of DRIFT_KINDS_IN_ORDER) {
|
|
155
|
+
const tokens = drifts.filter((d) => d.kind === kind).map((d) => d.token);
|
|
156
|
+
if (tokens.length === 0)
|
|
157
|
+
continue;
|
|
158
|
+
const preview = tokens.slice(0, DRIFT_TOKEN_PREVIEW_LIMIT).join(",");
|
|
159
|
+
const remainder = tokens.length - DRIFT_TOKEN_PREVIEW_LIMIT;
|
|
160
|
+
const suffix = remainder > 0 ? `+${remainder}` : "";
|
|
161
|
+
input.emit(`[schema-validator] drift kind=${kind} count=${tokens.length} tokens=${preview}${suffix}`);
|
|
162
|
+
if (verbose) {
|
|
163
|
+
for (const token of tokens) {
|
|
164
|
+
input.emit(`[schema-validator] drift kind=${kind} token=${token}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
139
167
|
}
|
|
140
168
|
return drifts;
|
|
141
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-schema-source.js","sourceRoot":"","sources":["../../src/lib/live-schema-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,WAAW,EACX,kBAAkB,GAEnB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,2DAA2D,CAAC;AAmDxG;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAqC;IAErC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IAEzC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE;QAC7C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YACb,kEAAkE;YAClE,mEAAmE;YACnE,sEAAsE;YACtE,4CAA4C;YAC5C,IAAI,CAAC,IAAI,CAAC,CAAC;YACX,aAAa,CAAC;gBACZ,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM;gBAC7B,QAAQ;gBACR,QAAQ;gBACR,IAAI;aACL,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAE5B,MAAM,MAAM,GAAqB;QAC/B,gBAAgB;YACd,OAAO,IAAI,GAAG,CAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,UAAU;YACR,OAAO,IAAI,GAAG,CAAS,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;QACD,cAAc;YACZ,OAAO,IAAI,GAAG,CAAS,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,SAAS;YACP,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,yEAAyE;AACzE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAa9B
|
|
1
|
+
{"version":3,"file":"live-schema-source.js","sourceRoot":"","sources":["../../src/lib/live-schema-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export type WriteEventReason = "invalid-input" | "schema-unknown-label" | "schema-property-naming" | "account-isolation" | "producedby-task-not-found" | "constraint-violation" | "conflicting-element-id" | "invalid-target-node-id" | "gate-blocked" | "neo4j-driver-error";
|
|
2
|
+
interface SuccessEvent {
|
|
3
|
+
tool: string;
|
|
4
|
+
result: "ok";
|
|
5
|
+
accountId?: string;
|
|
6
|
+
session?: string;
|
|
7
|
+
labels?: readonly string[];
|
|
8
|
+
name?: string;
|
|
9
|
+
elementId?: string;
|
|
10
|
+
durationMs: number;
|
|
11
|
+
}
|
|
12
|
+
interface ErrorEvent {
|
|
13
|
+
tool: string;
|
|
14
|
+
result: "error";
|
|
15
|
+
reason: WriteEventReason;
|
|
16
|
+
detail: string;
|
|
17
|
+
accountId?: string;
|
|
18
|
+
session?: string;
|
|
19
|
+
labels?: readonly string[];
|
|
20
|
+
name?: string;
|
|
21
|
+
durationMs: number;
|
|
22
|
+
}
|
|
23
|
+
export type WriteEvent = SuccessEvent | ErrorEvent;
|
|
24
|
+
/** Format the structured line that will be sent over the wire. */
|
|
25
|
+
export declare function formatWriteEventLine(ev: WriteEvent): string;
|
|
26
|
+
/** POST the formatted line to the loopback ingest route. Falls back to stderr. */
|
|
27
|
+
export declare function emitWriteEvent(ev: WriteEvent): Promise<void>;
|
|
28
|
+
export interface WithWriteEventBase {
|
|
29
|
+
tool: string;
|
|
30
|
+
accountId?: string;
|
|
31
|
+
/** Optional pre-known labels (memory-write supplies these from params). */
|
|
32
|
+
labels?: readonly string[];
|
|
33
|
+
/** Optional pre-known name (rarely set up front; usually extracted from result). */
|
|
34
|
+
name?: string;
|
|
35
|
+
/** Override the env-derived session id when one is more authoritative. */
|
|
36
|
+
session?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface WithWriteEventExtract {
|
|
39
|
+
labels?: readonly string[];
|
|
40
|
+
name?: string;
|
|
41
|
+
elementId?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Wrap a tool body so a structured event is emitted exactly once on every
|
|
45
|
+
* exit path. The wrapper measures durationMs, classifies thrown errors via
|
|
46
|
+
* `classifyReason`, and lets caller-supplied `extract` enrich the success
|
|
47
|
+
* line with labels / name / elementId that are only known after the write.
|
|
48
|
+
*/
|
|
49
|
+
export declare function withWriteEvent<T>(base: WithWriteEventBase, body: () => Promise<T>, extract?: (result: T) => WithWriteEventExtract): Promise<T>;
|
|
50
|
+
/**
|
|
51
|
+
* Map a thrown value to one of the enumerated WriteEventReason slugs.
|
|
52
|
+
* The match shapes are derived from the actual `throw new Error(...)`
|
|
53
|
+
* messages in the write-path tools as of 2026-05-19 (see Task 166 §In scope 2).
|
|
54
|
+
* Anything unmatched lands on `neo4j-driver-error`; never silently
|
|
55
|
+
* fall through to a synthesized "unknown" slug.
|
|
56
|
+
*/
|
|
57
|
+
export declare function classifyReason(err: unknown): WriteEventReason;
|
|
58
|
+
/**
|
|
59
|
+
* Pick a human-readable name for the structured log line out of a properties
|
|
60
|
+
* bag. Follows the task-spec preference: `name → title → email`, returning
|
|
61
|
+
* undefined when none are present so the line renders `name=—`.
|
|
62
|
+
*/
|
|
63
|
+
export declare function pickName(properties: Record<string, unknown> | undefined): string | undefined;
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=log-ingest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-ingest.d.ts","sourceRoot":"","sources":["../../src/lib/log-ingest.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,sBAAsB,GACtB,wBAAwB,GACxB,mBAAmB,GACnB,2BAA2B,GAC3B,sBAAsB,GACtB,wBAAwB,GACxB,wBAAwB,GACxB,cAAc,GACd,oBAAoB,CAAC;AAEzB,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;AAEnD,kEAAkE;AAClE,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,CAW3D;AAED,kFAAkF;AAClF,wBAAsB,cAAc,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkClE;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,qBAAqB,GAC7C,OAAO,CAAC,CAAC,CAAC,CA8BZ;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAkC7D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAO5F"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// Task 166 — structured observability for every memory MCP write-path tool.
|
|
2
|
+
//
|
|
3
|
+
// Single shared helper that emits one greppable line per write attempt to
|
|
4
|
+
// `server.log` via the loopback `/api/admin/log-ingest` route. Without this,
|
|
5
|
+
// the memory MCP is two-haystack, one-direction observable: success paths
|
|
6
|
+
// emit nothing, and failure paths only reach
|
|
7
|
+
// `~/.<brand>/logs/mcp-memory-stderr-<date>.log` as free-form strings the
|
|
8
|
+
// operator cannot grep by enumerated cause.
|
|
9
|
+
//
|
|
10
|
+
// Line shape, success:
|
|
11
|
+
// [mcp:memory] <tool> account=<id> session=<convId> labels=<csv> name=<v|—> result=ok elementId=<id|—> ms=<n>
|
|
12
|
+
// Line shape, failure:
|
|
13
|
+
// [mcp:memory] <tool> account=<id> session=<convId> labels=<csv> name=<v|—> result=error reason=<slug> detail=<≤120 chars> ms=<n>
|
|
14
|
+
//
|
|
15
|
+
// The helper is fire-and-forget on the await: POST failures fall back to
|
|
16
|
+
// stderr (`[mcp:memory] log-ingest-failed status=<http> err=<short>`) and
|
|
17
|
+
// the structured line is also written to stderr so the operator never loses
|
|
18
|
+
// the event even when the manager's HTTP route is unreachable. Helper
|
|
19
|
+
// never throws.
|
|
20
|
+
const TAG = "mcp:memory";
|
|
21
|
+
const LOOPBACK_HOST = "127.0.0.1";
|
|
22
|
+
const ENDPOINT_PATH = "/api/admin/log-ingest";
|
|
23
|
+
const MAX_DETAIL = 120;
|
|
24
|
+
/** Format the structured line that will be sent over the wire. */
|
|
25
|
+
export function formatWriteEventLine(ev) {
|
|
26
|
+
const acct = ev.accountId ?? "—";
|
|
27
|
+
const sess = ev.session ?? process.env.CONVERSATION_NODE_ID ?? "—";
|
|
28
|
+
const labels = ev.labels && ev.labels.length > 0 ? ev.labels.join(",") : "—";
|
|
29
|
+
const name = ev.name && ev.name.length > 0 ? ev.name : "—";
|
|
30
|
+
const head = `${ev.tool} account=${acct} session=${sess} labels=${labels} name=${name}`;
|
|
31
|
+
if (ev.result === "ok") {
|
|
32
|
+
return `${head} result=ok elementId=${ev.elementId ?? "—"} ms=${ev.durationMs}`;
|
|
33
|
+
}
|
|
34
|
+
const detail = truncateDetail(ev.detail);
|
|
35
|
+
return `${head} result=error reason=${ev.reason} detail=${detail} ms=${ev.durationMs}`;
|
|
36
|
+
}
|
|
37
|
+
/** POST the formatted line to the loopback ingest route. Falls back to stderr. */
|
|
38
|
+
export async function emitWriteEvent(ev) {
|
|
39
|
+
const line = formatWriteEventLine(ev);
|
|
40
|
+
const port = process.env.PLATFORM_PORT;
|
|
41
|
+
// If PLATFORM_PORT is unset, the MCP wasn't spawned by the session
|
|
42
|
+
// manager (e.g. direct CLI invocation). Write the event to stderr so
|
|
43
|
+
// the line still lands somewhere — mcp-memory-stderr-<date>.log catches it.
|
|
44
|
+
if (!port) {
|
|
45
|
+
process.stderr.write(`[${TAG}] ${line}\n`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const url = `http://${LOOPBACK_HOST}:${port}${ENDPOINT_PATH}`;
|
|
49
|
+
const body = JSON.stringify({
|
|
50
|
+
tag: TAG,
|
|
51
|
+
level: ev.result === "error" ? "error" : "info",
|
|
52
|
+
line,
|
|
53
|
+
});
|
|
54
|
+
try {
|
|
55
|
+
const res = await fetch(url, {
|
|
56
|
+
method: "POST",
|
|
57
|
+
headers: { "content-type": "application/json" },
|
|
58
|
+
body,
|
|
59
|
+
});
|
|
60
|
+
if (!res.ok) {
|
|
61
|
+
process.stderr.write(`[${TAG}] log-ingest-failed status=${res.status} err=non-2xx\n`);
|
|
62
|
+
process.stderr.write(`[${TAG}] ${line}\n`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
67
|
+
const short = msg.slice(0, 80);
|
|
68
|
+
process.stderr.write(`[${TAG}] log-ingest-failed status=0 err=${short}\n`);
|
|
69
|
+
process.stderr.write(`[${TAG}] ${line}\n`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Wrap a tool body so a structured event is emitted exactly once on every
|
|
74
|
+
* exit path. The wrapper measures durationMs, classifies thrown errors via
|
|
75
|
+
* `classifyReason`, and lets caller-supplied `extract` enrich the success
|
|
76
|
+
* line with labels / name / elementId that are only known after the write.
|
|
77
|
+
*/
|
|
78
|
+
export async function withWriteEvent(base, body, extract) {
|
|
79
|
+
const start = Date.now();
|
|
80
|
+
try {
|
|
81
|
+
const result = await body();
|
|
82
|
+
const enriched = extract ? extract(result) : {};
|
|
83
|
+
await emitWriteEvent({
|
|
84
|
+
tool: base.tool,
|
|
85
|
+
result: "ok",
|
|
86
|
+
accountId: base.accountId,
|
|
87
|
+
session: base.session,
|
|
88
|
+
labels: enriched.labels ?? base.labels,
|
|
89
|
+
name: enriched.name ?? base.name,
|
|
90
|
+
elementId: enriched.elementId,
|
|
91
|
+
durationMs: Date.now() - start,
|
|
92
|
+
});
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
await emitWriteEvent({
|
|
97
|
+
tool: base.tool,
|
|
98
|
+
result: "error",
|
|
99
|
+
reason: classifyReason(err),
|
|
100
|
+
detail: detailFromError(err),
|
|
101
|
+
accountId: base.accountId,
|
|
102
|
+
session: base.session,
|
|
103
|
+
labels: base.labels,
|
|
104
|
+
name: base.name,
|
|
105
|
+
durationMs: Date.now() - start,
|
|
106
|
+
});
|
|
107
|
+
throw err;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Map a thrown value to one of the enumerated WriteEventReason slugs.
|
|
112
|
+
* The match shapes are derived from the actual `throw new Error(...)`
|
|
113
|
+
* messages in the write-path tools as of 2026-05-19 (see Task 166 §In scope 2).
|
|
114
|
+
* Anything unmatched lands on `neo4j-driver-error`; never silently
|
|
115
|
+
* fall through to a synthesized "unknown" slug.
|
|
116
|
+
*/
|
|
117
|
+
export function classifyReason(err) {
|
|
118
|
+
if (!(err instanceof Error))
|
|
119
|
+
return "neo4j-driver-error";
|
|
120
|
+
const msg = err.message;
|
|
121
|
+
const code = err.code;
|
|
122
|
+
if (typeof code === "string" && code === "Neo.ClientError.Schema.ConstraintValidationFailed") {
|
|
123
|
+
return "constraint-violation";
|
|
124
|
+
}
|
|
125
|
+
if (/^Node already exists/i.test(msg))
|
|
126
|
+
return "conflicting-element-id";
|
|
127
|
+
if (/account isolation violation/i.test(msg))
|
|
128
|
+
return "account-isolation";
|
|
129
|
+
if (/producedByTaskId .* did not resolve to a :Task/i.test(msg))
|
|
130
|
+
return "producedby-task-not-found";
|
|
131
|
+
// schema validation errors — schema-validator emits "Unknown label" or
|
|
132
|
+
// "not Schema.org-conformant" inside the rethrown message.
|
|
133
|
+
if (/Unknown label/i.test(msg))
|
|
134
|
+
return "schema-unknown-label";
|
|
135
|
+
if (/Schema\.org/i.test(msg) && /property/i.test(msg))
|
|
136
|
+
return "schema-property-naming";
|
|
137
|
+
// graph-write-gate "Write blocked" / "Update blocked" — checkGraphWriteGate
|
|
138
|
+
if (/^(Write|Update) blocked/i.test(msg))
|
|
139
|
+
return "gate-blocked";
|
|
140
|
+
// graph-write target-node resolution failures
|
|
141
|
+
if (/targetNodeId .* (does not resolve|did not resolve|not found)/i.test(msg)) {
|
|
142
|
+
return "invalid-target-node-id";
|
|
143
|
+
}
|
|
144
|
+
// input-validation throws from tool entry points
|
|
145
|
+
if (/is required/i.test(msg) ||
|
|
146
|
+
/must be /i.test(msg) ||
|
|
147
|
+
/at least one /i.test(msg) ||
|
|
148
|
+
/no properties to update/i.test(msg) ||
|
|
149
|
+
/all provided properties are restricted/i.test(msg) ||
|
|
150
|
+
/not found or not owned/i.test(msg) ||
|
|
151
|
+
/empty|missing/i.test(msg) && /accountId|scope|labels|properties/i.test(msg)) {
|
|
152
|
+
return "invalid-input";
|
|
153
|
+
}
|
|
154
|
+
return "neo4j-driver-error";
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Pick a human-readable name for the structured log line out of a properties
|
|
158
|
+
* bag. Follows the task-spec preference: `name → title → email`, returning
|
|
159
|
+
* undefined when none are present so the line renders `name=—`.
|
|
160
|
+
*/
|
|
161
|
+
export function pickName(properties) {
|
|
162
|
+
if (!properties)
|
|
163
|
+
return undefined;
|
|
164
|
+
for (const key of ["name", "title", "email"]) {
|
|
165
|
+
const v = properties[key];
|
|
166
|
+
if (typeof v === "string" && v.length > 0)
|
|
167
|
+
return v;
|
|
168
|
+
}
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
function detailFromError(err) {
|
|
172
|
+
if (err instanceof Error)
|
|
173
|
+
return truncateDetail(err.message);
|
|
174
|
+
return truncateDetail(String(err));
|
|
175
|
+
}
|
|
176
|
+
function truncateDetail(s) {
|
|
177
|
+
const flat = s.replace(/\s+/g, " ").trim();
|
|
178
|
+
if (flat.length <= MAX_DETAIL)
|
|
179
|
+
return flat;
|
|
180
|
+
return flat.slice(0, MAX_DETAIL - 1) + "…";
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=log-ingest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-ingest.js","sourceRoot":"","sources":["../../src/lib/log-ingest.ts"],"names":[],"mappings":"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"}
|