@rubytech/create-maxy-code 0.1.33 → 0.1.34
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__/account-id-env.test.js +1 -1
- package/dist/__tests__/apt-resolve.test.js +7 -7
- package/dist/__tests__/brew-install.test.js +1 -1
- package/dist/__tests__/brew-resolve.test.js +1 -1
- package/dist/__tests__/cdp-port-no-silent-fallback.test.js +4 -4
- package/dist/__tests__/init-logging.test.js +1 -1
- package/dist/__tests__/launchd-plist.test.js +1 -1
- package/dist/__tests__/macos-version.test.js +1 -1
- package/dist/__tests__/peer-brand-detect.test.js +1 -1
- package/dist/__tests__/platform-detect.test.js +2 -2
- package/dist/__tests__/port-canonicalisation.test.js +1 -1
- package/dist/__tests__/preflight-port-classifier.test.js +6 -6
- package/dist/__tests__/samba-provision.test.js +1 -1
- package/dist/__tests__/snap-chromium.test.js +1 -1
- package/dist/apt-resolve.js +5 -5
- package/dist/brew-install.js +1 -1
- package/dist/brew-resolve.js +3 -3
- package/dist/index.js +146 -122
- package/dist/init-logging.js +1 -1
- package/dist/launchd-plist.js +1 -1
- package/dist/macos-version.js +2 -2
- package/dist/peer-brand-detect.js +1 -1
- package/dist/pinned-binaries.js +1 -1
- package/dist/platform-detect.js +1 -1
- package/dist/port-resolution.js +2 -2
- package/dist/preflight-port-classifier.js +3 -3
- package/dist/samba-provision.js +1 -1
- package/dist/snap-chromium.js +3 -3
- package/dist/uninstall.js +28 -28
- package/package.json +1 -1
- package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js +1 -1
- package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js.map +1 -1
- package/payload/platform/lib/account-enumeration/dist/index.d.ts +1 -1
- package/payload/platform/lib/account-enumeration/src/__tests__/validate-env.test.ts +1 -1
- package/payload/platform/lib/account-enumeration/src/index.ts +1 -1
- package/payload/platform/lib/admins-write/dist/index.js +3 -3
- package/payload/platform/lib/admins-write/dist/index.js.map +1 -1
- package/payload/platform/lib/admins-write/src/index.ts +4 -4
- package/payload/platform/lib/entitlement/dist/index.d.ts +1 -1
- package/payload/platform/lib/entitlement/dist/index.js +2 -2
- package/payload/platform/lib/entitlement/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.d.ts +3 -3
- package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.js +3 -3
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/index.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/index.js +24 -24
- package/payload/platform/lib/graph-mcp/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/schema-cache.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/schema-cache.js +2 -2
- package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.d.ts +3 -3
- package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.js +3 -3
- package/payload/platform/lib/graph-mcp/src/__tests__/warnings-envelope.test.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/cypher-rewrite-stamp.ts +3 -3
- package/payload/platform/lib/graph-mcp/src/cypher-shim-read.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/cypher-shim-write.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/cypher-validate.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/index.ts +29 -29
- package/payload/platform/lib/graph-mcp/src/schema-cache.ts +2 -2
- package/payload/platform/lib/graph-mcp/src/schema-cypher-parser.ts +3 -3
- package/payload/platform/lib/graph-search/dist/index.d.ts +12 -12
- package/payload/platform/lib/graph-search/dist/index.js +11 -11
- package/payload/platform/lib/graph-search/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-search/src/__tests__/bm25-label-gate.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/__tests__/bm25-strong-bypass-threshold.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/__tests__/brochure-threshold.test.ts +3 -3
- package/payload/platform/lib/graph-search/src/__tests__/expand-batch.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/__tests__/fulltext-coverage.test.ts +6 -6
- package/payload/platform/lib/graph-search/src/__tests__/hybrid.test.ts +5 -5
- package/payload/platform/lib/graph-search/src/__tests__/vector-threshold.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/index.ts +18 -18
- package/payload/platform/lib/graph-trash/dist/index.d.ts +3 -3
- package/payload/platform/lib/graph-trash/dist/index.js +3 -3
- package/payload/platform/lib/graph-trash/src/index.ts +3 -3
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js +4 -4
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js.map +1 -1
- package/payload/platform/lib/graph-write/dist/audit.d.ts +2 -2
- package/payload/platform/lib/graph-write/dist/audit.js +2 -2
- package/payload/platform/lib/graph-write/dist/conversation-provenance.js +1 -1
- package/payload/platform/lib/graph-write/dist/conversation-provenance.js.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.d.ts +5 -5
- package/payload/platform/lib/graph-write/dist/index.js +12 -12
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-write/src/__tests__/action-provenance-gate.test.ts +4 -4
- package/payload/platform/lib/graph-write/src/audit.ts +2 -2
- package/payload/platform/lib/graph-write/src/conversation-provenance.ts +1 -1
- package/payload/platform/lib/graph-write/src/index.ts +13 -13
- package/payload/platform/lib/mcp-eager/dist/index.d.ts +2 -2
- package/payload/platform/lib/mcp-eager/dist/index.js +2 -2
- package/payload/platform/lib/mcp-eager/src/index.ts +2 -2
- package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts +2 -2
- package/payload/platform/lib/mcp-spawn-tee/dist/index.js +2 -2
- package/payload/platform/lib/mcp-spawn-tee/src/index.ts +2 -2
- package/payload/platform/lib/mcp-stderr-tee/dist/index.d.ts +1 -1
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js +4 -4
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js.map +1 -1
- package/payload/platform/lib/mcp-stderr-tee/src/index.ts +4 -4
- package/payload/platform/lib/oauth-llm/dist/index.d.ts +4 -4
- package/payload/platform/lib/oauth-llm/dist/index.js +3 -3
- package/payload/platform/lib/oauth-llm/dist/index.js.map +1 -1
- package/payload/platform/lib/oauth-llm/src/index.ts +6 -6
- package/payload/platform/lib/persistent-components/dist/index.d.ts +1 -1
- package/payload/platform/lib/persistent-components/dist/index.js +1 -1
- package/payload/platform/lib/persistent-components/src/index.ts +1 -1
- package/payload/platform/lib/task-secrets/dist/index.js +1 -1
- package/payload/platform/lib/task-secrets/dist/index.js.map +1 -1
- package/payload/platform/lib/task-secrets/src/__tests__/redact-secrets.test.ts +1 -1
- package/payload/platform/lib/task-secrets/src/index.ts +1 -1
- package/payload/platform/neo4j/edge-annotations.json +9 -9
- package/payload/platform/neo4j/schema.cypher +32 -33
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/admin/PLUGIN.md +0 -2
- package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +4 -4
- package/payload/platform/plugins/admin/hooks/__tests__/playwright-file-guard.test.sh +1 -1
- package/payload/platform/plugins/admin/hooks/__tests__/pre-tool-use-base64-guard.test.sh +1 -1
- package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +13 -13
- package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +7 -7
- package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/index.js +38 -65
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js +5 -5
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js.map +1 -1
- package/payload/platform/plugins/admin/skills/plugin-management/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +0 -1
- package/payload/platform/plugins/admin/skills/publish-site/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/unzip-attachment/SKILL.md +2 -2
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +6 -6
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.d.ts +2 -2
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.js +2 -2
- package/payload/platform/plugins/cloudflare/references/dashboard-guide.md +1 -1
- package/payload/platform/plugins/cloudflare/references/manual-setup.md +4 -4
- package/payload/platform/plugins/cloudflare/scripts/__tests__/tunnel-ingress.test.ts +1 -1
- package/payload/platform/plugins/cloudflare/scripts/_stream-log.sh +8 -8
- package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.sh +2 -2
- package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.ts +16 -16
- package/payload/platform/plugins/cloudflare/scripts/reset-tunnel.sh +1 -1
- package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +28 -28
- package/payload/platform/plugins/cloudflare/scripts/tunnel-ingress.ts +5 -5
- package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +3 -3
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.d.ts +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.js +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +2 -2
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js.map +1 -1
- package/payload/platform/plugins/docs/references/deployment.md +30 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -5
- package/payload/platform/plugins/docs/references/troubleshooting.md +3 -3
- package/payload/platform/plugins/email/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js +2 -2
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/screening.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +6 -6
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +2 -2
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +2 -2
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js +3 -3
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/loop/mcp/src/lib/neo4j.ts +3 -3
- package/payload/platform/plugins/memory/bin/conversation-archive-ingest.mjs +24 -24
- package/payload/platform/plugins/memory/bin/conversation-archive-ingest.sh +6 -6
- package/payload/platform/plugins/memory/mcp/dist/index.js +8 -8
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +33 -33
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js +12 -12
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js +1 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js +6 -6
- package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js +7 -7
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +9 -9
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +25 -25
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js +5 -5
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts +4 -4
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts +3 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +5 -5
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js +5 -5
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js +1 -1
- 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__/conversation-normalisers-source-agnosticism.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js +4 -4
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js +6 -6
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js +7 -7
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +3 -3
- 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.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +2 -2
- 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 +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.d.ts +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js +2 -2
- 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.d.ts +9 -9
- 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 +10 -11
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +1 -1
- 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 +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js +9 -9
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +5 -5
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +9 -9
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/scripts/boot-smoke.sh +1 -1
- package/payload/platform/plugins/memory/mcp/scripts/graph/fixture.cypher +1 -1
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -2
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/scripts/verify-doc-impl.sh +1 -1
- package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js +3 -3
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.d.ts +2 -2
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js +5 -5
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +6 -6
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js +2 -2
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.d.ts +5 -5
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js +3 -3
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.d.ts +4 -4
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js +2 -2
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +2 -2
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js +3 -3
- package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js +3 -3
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +5 -5
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +1 -1
- package/payload/platform/plugins/whatsapp/mcp/dist/call-api.d.ts +1 -1
- package/payload/platform/plugins/whatsapp/mcp/dist/call-api.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +4 -4
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/test-workflows.sh +2 -2
- package/payload/platform/scripts/__tests__/first-token-creates-stream-log.test.sh +1 -1
- package/payload/platform/scripts/__tests__/logs-read-prefix.sh +6 -6
- package/payload/platform/scripts/admin-conversation-recover.mjs +5 -5
- package/payload/platform/scripts/admin-persist-audit.ts +4 -4
- package/payload/platform/scripts/check-no-conversation-id-leaks.mjs +1 -1
- package/payload/platform/scripts/check-no-direct-clipboard.mjs +1 -1
- package/payload/platform/scripts/check-no-task-id-leaks.mjs +2 -2
- package/payload/platform/scripts/check-skill-load-coverage.mjs +1 -1
- package/payload/platform/scripts/component-knowledgedoc-backfill.ts +1 -1
- package/payload/platform/scripts/dedupe-userprofile-ghosts.sh +2 -2
- package/payload/platform/scripts/generate-entitlement-fixture.mjs +1 -1
- package/payload/platform/scripts/installer-device-verify.sh +6 -6
- package/payload/platform/scripts/lib/resolve-account-dir.sh +6 -6
- package/payload/platform/scripts/log-adherence-check.sh +3 -3
- package/payload/platform/scripts/logs-read.sh +13 -13
- package/payload/platform/scripts/logs-read.test.sh +1 -1
- package/payload/platform/scripts/migrate-import.sh +4 -4
- package/payload/platform/scripts/redact-install-logs.sh +1 -1
- package/payload/platform/scripts/seed-neo4j.sh +26 -32
- package/payload/platform/scripts/test-laptop-vnc-boot.sh +3 -3
- package/payload/platform/scripts/verify-skill-tool-surface.sh +17 -2
- package/payload/platform/scripts/vnc.sh +9 -9
- package/payload/platform/services/claude-session-manager/dist/config.d.ts +7 -2
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.js +3 -1
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +2 -2
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +133 -90
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +17 -4
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts +2 -2
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js +4 -4
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +2 -2
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +37 -18
- 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 +101 -44
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +36 -11
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-store.js +53 -2
- package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js +2 -2
- package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +46 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js +131 -24
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js +1 -1
- 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 +8 -1
- package/payload/platform/services/claude-session-manager/dist/types.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/url-capture.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/url-capture.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +14 -0
- package/payload/platform/templates/agents/admin/SOUL.md +1 -3
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -3
- package/payload/platform/templates/specialists/agents/project-manager.md +1 -1
- package/payload/platform/templates/systemd/edge.service.template +3 -3
- package/payload/premium-plugins/real-agent/BUNDLE.md +2 -4
- package/payload/premium-plugins/real-agent/plugins/.claude-plugin/marketplace.json +0 -5
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js +3 -3
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/neo4j.ts +3 -3
- package/payload/server/{chunk-ZGJ6CUU2.js → chunk-3G6JMV7N.js} +1 -1
- package/payload/server/{chunk-KVGTWNKQ.js → chunk-NNHHGQJL.js} +314 -5
- package/payload/server/{chunk-RZQMYJVY.js → chunk-QC5LHYPH.js} +3 -3
- package/payload/server/{cloudflare-task-tracker-4PKOLE4H.js → cloudflare-task-tracker-NEB3X6O2.js} +2 -2
- package/payload/server/maxy-edge.js +2 -2
- package/payload/server/public/assets/{admin-Cuu1QdAA.js → admin-CF2ZQvXu.js} +1 -1
- package/payload/server/public/index.html +1 -1
- package/payload/server/server.js +274 -396
- package/payload/platform/plugins/anthropic/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/anthropic/PLUGIN.md +0 -40
- package/payload/platform/plugins/anthropic/references/console-api.md +0 -186
- package/payload/platform/plugins/anthropic/references/setup-guide.md +0 -36
- package/payload/platform/plugins/anthropic/skills/get-api-key/SKILL.md +0 -136
- package/payload/platform/plugins/estate-onboarding/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/estate-onboarding/PLUGIN.md +0 -30
- package/payload/platform/plugins/estate-onboarding/skills/bootstrap/SKILL.md +0 -26
- package/payload/platform/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +0 -63
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/.claude-plugin/plugin.json +0 -8
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/PLUGIN.md +0 -30
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/skills/bootstrap/SKILL.md +0 -26
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +0 -63
|
@@ -5,7 +5,7 @@ import { fileURLToPath } from "node:url";
|
|
|
5
5
|
import { FULLTEXT_INDEX_NAME } from "../index.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* Doctrine test
|
|
8
|
+
* Doctrine test — pins the universal-coverage invariant for the
|
|
9
9
|
* fulltext index so future schema edits cannot silently re-narrow.
|
|
10
10
|
*
|
|
11
11
|
* The pre-Task-748 fulltext index `knowledge_fulltext` covered 3 of ~40
|
|
@@ -59,7 +59,7 @@ const EXCLUDED_FROM_INDEX = new Set(["Trashed", "GraphPreference"]);
|
|
|
59
59
|
* Canonical text-property list — every property the platform's writers
|
|
60
60
|
* assign that the operator might search for. Extending the canon in a new
|
|
61
61
|
* writer means extending this list AND the schema's `ON EACH [...]` clause.
|
|
62
|
-
* Discovered via codebase sweep
|
|
62
|
+
* Discovered via codebase sweep across `memory-write`,
|
|
63
63
|
* `memory-archive-write`, `memory-ingest`, `email-store`, `neo4j-store`,
|
|
64
64
|
* `workflow-create`, `tool-call-writer`.
|
|
65
65
|
*/
|
|
@@ -70,7 +70,7 @@ const CANONICAL_TEXT_PROPERTIES = [
|
|
|
70
70
|
"tagline",
|
|
71
71
|
// Person
|
|
72
72
|
"firstName", "lastName", "givenName", "familyName", "email",
|
|
73
|
-
// Person
|
|
73
|
+
// Person denormalised current-job title, written by
|
|
74
74
|
// `memory-archive-write` linkedin-connections handler from
|
|
75
75
|
// `[:WORKS_FOR].title` so BM25 reaches it. Distinct from generic
|
|
76
76
|
// `title` (above) which means something different per label.
|
|
@@ -85,7 +85,7 @@ const CANONICAL_TEXT_PROPERTIES = [
|
|
|
85
85
|
"contactValue",
|
|
86
86
|
// ToolCall
|
|
87
87
|
"toolName",
|
|
88
|
-
// Agent
|
|
88
|
+
// Agent — public-agent projection. `displayName` mirrors
|
|
89
89
|
// config.json; `slug` is the directory-name identifier; `role` is the
|
|
90
90
|
// discriminator carried on the four owned :KnowledgeDocument projections
|
|
91
91
|
// ('identity' | 'soul' | 'knowledge' | 'knowledge-summary'). Adding any
|
|
@@ -221,7 +221,7 @@ function parseGraphLabelColours(source: string): Set<string> {
|
|
|
221
221
|
return labels;
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
describe("entity_search fulltext index — universal-coverage doctrine
|
|
224
|
+
describe("entity_search fulltext index — universal-coverage doctrine", () => {
|
|
225
225
|
const schemaCypher = readFileSync(SCHEMA_PATH, "utf-8");
|
|
226
226
|
const labelsSource = readFileSync(LABELS_PATH, "utf-8");
|
|
227
227
|
|
|
@@ -237,7 +237,7 @@ describe("entity_search fulltext index — universal-coverage doctrine (Task 748
|
|
|
237
237
|
// The lib's BM25 path queries `db.index.fulltext.queryNodes($indexName)`.
|
|
238
238
|
// If `schema.cypher` declares a different name, the lib hits its
|
|
239
239
|
// graceful-fallback `[]` branch and BM25 silently returns no hits —
|
|
240
|
-
// the precise drift
|
|
240
|
+
// the precise drift the rename was meant to delete.
|
|
241
241
|
expect(indexDecl.name).toBe(FULLTEXT_INDEX_NAME);
|
|
242
242
|
});
|
|
243
243
|
|
|
@@ -101,10 +101,10 @@ describe("hybrid — score combination", () => {
|
|
|
101
101
|
expect(res.results.map((r) => r.nodeId)).toEqual(["n1", "n2", "n3"]);
|
|
102
102
|
});
|
|
103
103
|
|
|
104
|
-
//
|
|
104
|
+
// operator-facing per-row component scores. Without these the
|
|
105
105
|
// hybrid combine is opaque: a row scoring 0.35 cannot be distinguished
|
|
106
106
|
// between "vector hit, bm25 absent" and "weak partial match in both".
|
|
107
|
-
it("populates vectorScore + bm25Score on every result
|
|
107
|
+
it("populates vectorScore + bm25Score on every result", async () => {
|
|
108
108
|
const session = makeStubSession([
|
|
109
109
|
{
|
|
110
110
|
match: (q) => q.includes("SHOW INDEXES"),
|
|
@@ -187,16 +187,16 @@ describe("hybrid — embed degrade", () => {
|
|
|
187
187
|
expect(res.results[0]?.score).toBe(3);
|
|
188
188
|
// related[] is [] in degrade path (no expand)
|
|
189
189
|
expect(res.results[0]?.related).toEqual([]);
|
|
190
|
-
//
|
|
190
|
+
// degraded path also populates components: vectorScore=0
|
|
191
191
|
// (no embed) and bm25Score is the normalised value (single hit → 1.0).
|
|
192
192
|
expect(res.results[0]?.vectorScore).toBe(0);
|
|
193
193
|
expect(res.results[0]?.bm25Score).toBe(1.0);
|
|
194
194
|
});
|
|
195
195
|
|
|
196
|
-
//
|
|
196
|
+
// multi-hit degraded path: bm25Score is min-max normalised
|
|
197
197
|
// across the local hit set, so the operator can still see "this row is
|
|
198
198
|
// the strongest bm25 match (1.0) vs this row is the weakest (0.0)".
|
|
199
|
-
it("normalises bm25Score across hits in degrade path
|
|
199
|
+
it("normalises bm25Score across hits in degrade path", async () => {
|
|
200
200
|
const { session } = makeStubSession([
|
|
201
201
|
{
|
|
202
202
|
match: (q) => q.includes("db.index.fulltext.queryNodes"),
|
|
@@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach } from "vitest";
|
|
|
2
2
|
import { hybrid, clearIndexCache } from "../index.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* vector-cosine threshold filter.
|
|
6
6
|
*
|
|
7
7
|
* Pre-fix: kNN vector index returned every node in scope, regardless of
|
|
8
8
|
* similarity. With limit > population, all rows passed through to the
|
|
@@ -40,7 +40,7 @@ beforeEach(() => {
|
|
|
40
40
|
clearIndexCache();
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
-
describe("vectorThreshold filter
|
|
43
|
+
describe("vectorThreshold filter", () => {
|
|
44
44
|
it("suppresses rows with vector cosine below the threshold (no BM25 hits)", async () => {
|
|
45
45
|
// Mirror the Real Agent savage-case shape: 4 nodes, vector scores
|
|
46
46
|
// [0.9, 0.65, 0.55, 0.50], no BM25 hits. Threshold 0.7 keeps only
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Pre-Task-675 there were two BM25 implementations over the same fulltext
|
|
5
5
|
* index — one in the memory MCP tool, one in the admin Hono route — with
|
|
6
6
|
* divergent filter semantics (soft-delete primitive) and divergent ranking
|
|
7
|
-
* (agent ran hybrid vector+BM25, UI ran BM25-only).
|
|
7
|
+
* (agent ran hybrid vector+BM25, UI ran BM25-only). collapses both
|
|
8
8
|
* into this lib; memory MCP + admin route now share a single code path so
|
|
9
9
|
* `/graph` UI ranking matches what the agent sees.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
11
|
+
* fulltext index `knowledge_fulltext` was renamed to `entity_search`
|
|
12
12
|
* and its label union expanded from 3 labels (KnowledgeDocument | Section |
|
|
13
13
|
* Chunk) to the full operator-meaningful label set (~40 labels) on every
|
|
14
14
|
* textual property the schema's writers assign. The lib references the new
|
|
@@ -45,7 +45,7 @@ import { notTrashed } from "../../graph-trash/dist/index.js";
|
|
|
45
45
|
const VECTOR_WEIGHT = 0.7;
|
|
46
46
|
const BM25_WEIGHT = 0.3;
|
|
47
47
|
/**
|
|
48
|
-
* Name of the universal fulltext index
|
|
48
|
+
* Name of the universal fulltext index. Mirrors the `CREATE FULLTEXT
|
|
49
49
|
* INDEX` declaration in `platform/neo4j/schema.cypher`. The doctrine test
|
|
50
50
|
* (`__tests__/fulltext-coverage.test.ts`) asserts the schema's index name
|
|
51
51
|
* matches this constant — drift between the two breaks BM25 silently.
|
|
@@ -61,7 +61,7 @@ export interface SearchHit {
|
|
|
61
61
|
|
|
62
62
|
export interface SearchResult extends SearchHit {
|
|
63
63
|
/**
|
|
64
|
-
*
|
|
64
|
+
* granular component scores so the /data UI can render
|
|
65
65
|
* `vector N.NN · bm25 N.NN · combined N.NN` per row. `vectorScore` is the
|
|
66
66
|
* raw cosine in [0,1] from the per-label vector index; `bm25Score` is the
|
|
67
67
|
* post-merge normalised value in [0,1] used in the combine (NOT the raw
|
|
@@ -74,7 +74,7 @@ export interface SearchResult extends SearchHit {
|
|
|
74
74
|
bm25Score: number;
|
|
75
75
|
related: Array<{
|
|
76
76
|
/**
|
|
77
|
-
*
|
|
77
|
+
* neighbour `elementId`. Required by the /graph canvas to
|
|
78
78
|
* render edges in pipeline-collapse mode (search response IS the canvas
|
|
79
79
|
* data). The MCP memory-search tool ignores it; the field is additive.
|
|
80
80
|
*/
|
|
@@ -93,7 +93,7 @@ export interface ScoredNode {
|
|
|
93
93
|
vectorScore: number;
|
|
94
94
|
bm25Score: number;
|
|
95
95
|
/**
|
|
96
|
-
*
|
|
96
|
+
* true when this node entered the merge map via the BM25 path
|
|
97
97
|
* with a raw Lucene score > 0 (literal-token match against the universal
|
|
98
98
|
* fulltext index), or via the keyword-subscriptions property-lookup path.
|
|
99
99
|
* Set BEFORE bm25 normalisation, so a single-hit set whose normalised
|
|
@@ -119,7 +119,7 @@ export interface Bm25OnlyParams {
|
|
|
119
119
|
keywords?: string[];
|
|
120
120
|
keywordMatch?: "any" | "all";
|
|
121
121
|
/**
|
|
122
|
-
*
|
|
122
|
+
* gate BM25 hits to nodes carrying at least one of these labels.
|
|
123
123
|
* Mirrors hybrid()'s vector-half label filter so the Ollama-down fallback
|
|
124
124
|
* honours the same gate the operator applied via /graph chips. Empty array
|
|
125
125
|
* is treated as "no gate" (matches hybrid's `labels && labels.length > 0`
|
|
@@ -139,7 +139,7 @@ export interface HybridParams extends Bm25OnlyParams {
|
|
|
139
139
|
*/
|
|
140
140
|
degradeOnEmbedFailure?: boolean;
|
|
141
141
|
/**
|
|
142
|
-
*
|
|
142
|
+
* minimum raw vector cosine in [0,1] required for a row to
|
|
143
143
|
* pass the merge step. Rows below the threshold are dropped UNLESS they
|
|
144
144
|
* also entered via the BM25 path (`bm25Hit === true`) — that carve-out
|
|
145
145
|
* preserves literal-token matches whose embedding happened to score
|
|
@@ -163,7 +163,7 @@ export interface HybridResponse {
|
|
|
163
163
|
/** Populated when degradeOnEmbedFailure fired. Caller logs it. */
|
|
164
164
|
embedError?: string;
|
|
165
165
|
/**
|
|
166
|
-
*
|
|
166
|
+
* milliseconds spent on the batched expand round-trip alone
|
|
167
167
|
* (separate from embed + vector + BM25). The /graph admin route emits
|
|
168
168
|
* this as `expand-ms=N` so a regression on the post-Task-747 batching
|
|
169
169
|
* surfaces in server.log without needing a profiler. Zero when
|
|
@@ -171,7 +171,7 @@ export interface HybridResponse {
|
|
|
171
171
|
*/
|
|
172
172
|
expandMs: number;
|
|
173
173
|
/**
|
|
174
|
-
*
|
|
174
|
+
* operator-facing threshold accounting.
|
|
175
175
|
*
|
|
176
176
|
* `rawMerged` count of nodes in the merge map BEFORE the threshold
|
|
177
177
|
* filter ran (vector + BM25 + keyword-subscriptions
|
|
@@ -260,7 +260,7 @@ function buildKeywordFilter(
|
|
|
260
260
|
}
|
|
261
261
|
|
|
262
262
|
/**
|
|
263
|
-
* BM25 full-text search against the universal `entity_search` index
|
|
263
|
+
* BM25 full-text search against the universal `entity_search` index.
|
|
264
264
|
* Returns [] when the index doesn't exist — matches memory-search.ts
|
|
265
265
|
* graceful-fallback semantics so a fresh account or a Pi mid-migration
|
|
266
266
|
* (POPULATING window) doesn't 500 the caller.
|
|
@@ -337,7 +337,7 @@ export async function bm25Only(
|
|
|
337
337
|
* 2. Vector search per label (one query per vector index discovered at
|
|
338
338
|
* boot). Nodes-by-label filter short-circuits when the requested
|
|
339
339
|
* labels have no index.
|
|
340
|
-
* 3. BM25 search on the universal `entity_search` index
|
|
340
|
+
* 3. BM25 search on the universal `entity_search` index —
|
|
341
341
|
* same filter semantics as vector half (scope/agent/keyword/trashed).
|
|
342
342
|
* 4. Keyword subscriptions (when set): BM25 per keyword + property
|
|
343
343
|
* lookup against `node.keywords` array. Both bypass the agentSlug
|
|
@@ -373,7 +373,7 @@ export async function hybrid(
|
|
|
373
373
|
if (!degradeOnEmbedFailure) throw err;
|
|
374
374
|
const msg = err instanceof Error ? err.message : String(err);
|
|
375
375
|
const bm25Hits = await bm25Only(session, params);
|
|
376
|
-
//
|
|
376
|
+
// even in the degraded path, surface granular components so
|
|
377
377
|
// the /data score-line renders consistently. Vector half is 0 (no embed
|
|
378
378
|
// happened); bm25 half is normalised across the local hit set.
|
|
379
379
|
const normalised = normaliseBm25Scores(bm25Hits.map((h) => h.score));
|
|
@@ -383,7 +383,7 @@ export async function hybrid(
|
|
|
383
383
|
bm25Score: normalised[i] ?? 0,
|
|
384
384
|
related: [],
|
|
385
385
|
}));
|
|
386
|
-
//
|
|
386
|
+
// threshold has no meaning in the degraded path: no embed
|
|
387
387
|
// happened, so there is no vector cosine to compare against. Surface
|
|
388
388
|
// counts in the response (rawMerged = rendered, suppressed = 0,
|
|
389
389
|
// bm25Bypass = 0, threshold = null) so the caller's render path is
|
|
@@ -549,7 +549,7 @@ export async function hybrid(
|
|
|
549
549
|
|
|
550
550
|
// --- Merge, threshold, rank ---
|
|
551
551
|
//
|
|
552
|
-
//
|
|
552
|
+
// vectorThreshold filters BEFORE sort+slice. Order matters:
|
|
553
553
|
// slicing first would consume the slot budget with rows the threshold
|
|
554
554
|
// would have suppressed, under-filling the rendered set. Sorting before
|
|
555
555
|
// filtering would waste cycles ordering rows we are about to drop. So:
|
|
@@ -586,7 +586,7 @@ export async function hybrid(
|
|
|
586
586
|
.sort((a, b) => b.combinedScore - a.combinedScore)
|
|
587
587
|
.slice(0, limit);
|
|
588
588
|
|
|
589
|
-
// --- Graph expand (
|
|
589
|
+
// --- Graph expand (single batched round-trip) ---
|
|
590
590
|
//
|
|
591
591
|
// Pre-Task-747: one Cypher per merged node, in a JS for-loop. At the admin
|
|
592
592
|
// route's slider=2000 this produced 2000 driver round-trips per search.
|
|
@@ -605,7 +605,7 @@ export async function hybrid(
|
|
|
605
605
|
labels: node.labels,
|
|
606
606
|
properties: node.properties,
|
|
607
607
|
score: node.combinedScore,
|
|
608
|
-
//
|
|
608
|
+
// carry the per-half components so the /data UI can render
|
|
609
609
|
// a per-row breakdown. These are already computed on `ScoredNode` from
|
|
610
610
|
// the vector half (raw cosine) and the bm25 half (post-merge normalised
|
|
611
611
|
// value, NOT raw Lucene). Memory MCP ignores both; admin route forwards
|
|
@@ -686,7 +686,7 @@ function mergeBm25Hit(
|
|
|
686
686
|
const existing = map.get(hit.nodeId);
|
|
687
687
|
if (existing) {
|
|
688
688
|
existing.bm25Score = Math.max(existing.bm25Score, normalisedScore);
|
|
689
|
-
//
|
|
689
|
+
// set bm25Hit irrespective of normalised value. The hit
|
|
690
690
|
// came from db.index.fulltext.queryNodes (raw Lucene score > 0 by
|
|
691
691
|
// construction); min-max normalisation pinning the lowest row to
|
|
692
692
|
// 0.0 is a presentation artefact, not a "no match" signal.
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* MERGE against the same key won't collide. `restoreNode` writes them back
|
|
15
15
|
* and fails loudly when an active node already occupies the slot.
|
|
16
16
|
*
|
|
17
|
-
* Label-aware cascade
|
|
17
|
+
* Label-aware cascade: when `trashNode` trashes a `:Conversation`,
|
|
18
18
|
* it also trashes every `(m:Message)-[:PART_OF]->(c)` Message in the same
|
|
19
19
|
* managed transaction. This makes `MATCH (m:Trashed)` a correct audit
|
|
20
20
|
* primitive again — pre-Task-655 a Conversation trash left attached Messages
|
|
@@ -82,8 +82,8 @@ export declare function emptyTrash(params: EmptyTrashParams): Promise<EmptyTrash
|
|
|
82
82
|
/**
|
|
83
83
|
* Read-filter clause excluding trashed nodes for the given Cypher alias.
|
|
84
84
|
*
|
|
85
|
-
* Filters both the `:Trashed` label (
|
|
86
|
-
* `deletedAt` property (KnowledgeDocument soft-delete
|
|
85
|
+
* Filters both the `:Trashed` label (primitive) and the legacy
|
|
86
|
+
* `deletedAt` property (KnowledgeDocument soft-delete earlier). The
|
|
87
87
|
* `deletedAt` arm is a transitional belt-and-braces — production graphs may
|
|
88
88
|
* still hold pre-migration soft-deletes — and stays until those are confirmed
|
|
89
89
|
* empty, then is dropped.
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* MERGE against the same key won't collide. `restoreNode` writes them back
|
|
16
16
|
* and fails loudly when an active node already occupies the slot.
|
|
17
17
|
*
|
|
18
|
-
* Label-aware cascade
|
|
18
|
+
* Label-aware cascade: when `trashNode` trashes a `:Conversation`,
|
|
19
19
|
* it also trashes every `(m:Message)-[:PART_OF]->(c)` Message in the same
|
|
20
20
|
* managed transaction. This makes `MATCH (m:Trashed)` a correct audit
|
|
21
21
|
* primitive again — pre-Task-655 a Conversation trash left attached Messages
|
|
@@ -307,8 +307,8 @@ async function emptyTrash(params) {
|
|
|
307
307
|
/**
|
|
308
308
|
* Read-filter clause excluding trashed nodes for the given Cypher alias.
|
|
309
309
|
*
|
|
310
|
-
* Filters both the `:Trashed` label (
|
|
311
|
-
* `deletedAt` property (KnowledgeDocument soft-delete
|
|
310
|
+
* Filters both the `:Trashed` label (primitive) and the legacy
|
|
311
|
+
* `deletedAt` property (KnowledgeDocument soft-delete earlier). The
|
|
312
312
|
* `deletedAt` arm is a transitional belt-and-braces — production graphs may
|
|
313
313
|
* still hold pre-migration soft-deletes — and stays until those are confirmed
|
|
314
314
|
* empty, then is dropped.
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* MERGE against the same key won't collide. `restoreNode` writes them back
|
|
15
15
|
* and fails loudly when an active node already occupies the slot.
|
|
16
16
|
*
|
|
17
|
-
* Label-aware cascade
|
|
17
|
+
* Label-aware cascade: when `trashNode` trashes a `:Conversation`,
|
|
18
18
|
* it also trashes every `(m:Message)-[:PART_OF]->(c)` Message in the same
|
|
19
19
|
* managed transaction. This makes `MATCH (m:Trashed)` a correct audit
|
|
20
20
|
* primitive again — pre-Task-655 a Conversation trash left attached Messages
|
|
@@ -450,8 +450,8 @@ export async function emptyTrash(params: EmptyTrashParams): Promise<EmptyTrashRe
|
|
|
450
450
|
/**
|
|
451
451
|
* Read-filter clause excluding trashed nodes for the given Cypher alias.
|
|
452
452
|
*
|
|
453
|
-
* Filters both the `:Trashed` label (
|
|
454
|
-
* `deletedAt` property (KnowledgeDocument soft-delete
|
|
453
|
+
* Filters both the `:Trashed` label (primitive) and the legacy
|
|
454
|
+
* `deletedAt` property (KnowledgeDocument soft-delete earlier). The
|
|
455
455
|
* `deletedAt` arm is a transitional belt-and-braces — production graphs may
|
|
456
456
|
* still hold pre-migration soft-deletes — and stays until those are confirmed
|
|
457
457
|
* empty, then is dropped.
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const node_test_1 = __importDefault(require("node:test"));
|
|
7
7
|
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
8
8
|
const index_js_1 = require("../index.js");
|
|
9
|
-
//
|
|
9
|
+
// writeNodeWithEdges now rejects writes whose accountId does not
|
|
10
10
|
// match the spawning process's ACCOUNT_ID. These provenance-gate tests
|
|
11
11
|
// predate that gate; they pass a literal `expectedAccountId` so they
|
|
12
12
|
// exercise only the provenance gate they were written to test.
|
|
@@ -137,7 +137,7 @@ function makeStubSession(opts) {
|
|
|
137
137
|
});
|
|
138
138
|
strict_1.default.equal(res.edgesCreated, 1);
|
|
139
139
|
});
|
|
140
|
-
//
|
|
140
|
+
// gate widened to accept:Conversation provenance for direct
|
|
141
141
|
// admin asks. The wrapper auto-injects the inbound PRODUCED edge from the
|
|
142
142
|
// active :AdminConversation via CONVERSATION_NODE_ID.
|
|
143
143
|
(0, node_test_1.default)("writeNodeWithEdges accepts :Person write with PRODUCED-from-Conversation edge", async () => {
|
|
@@ -161,7 +161,7 @@ function makeStubSession(opts) {
|
|
|
161
161
|
});
|
|
162
162
|
strict_1.default.equal(res.edgesCreated, 1);
|
|
163
163
|
});
|
|
164
|
-
//
|
|
164
|
+
// Message subtypes (UserMessage, AssistantMessage, AdminMessage)
|
|
165
165
|
// also qualify because the labels() array includes the parent :Message label.
|
|
166
166
|
(0, node_test_1.default)("writeNodeWithEdges accepts :Person write with PRODUCED-from-Message edge", async () => {
|
|
167
167
|
const { session } = makeStubSession({
|
|
@@ -183,7 +183,7 @@ function makeStubSession(opts) {
|
|
|
183
183
|
});
|
|
184
184
|
strict_1.default.equal(res.edgesCreated, 1);
|
|
185
185
|
});
|
|
186
|
-
//
|
|
186
|
+
// defence-in-depth: the gate's source-label allowlist still
|
|
187
187
|
// rejects PRODUCED edges from nodes outside {Task, Conversation, Message}.
|
|
188
188
|
// Prevents bypass via a spoofed PRODUCED edge from any unrelated node.
|
|
189
189
|
(0, node_test_1.default)("writeNodeWithEdges rejects :Person write with PRODUCED edge from a non-provenance-source label", async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-provenance-gate.test.js","sourceRoot":"","sources":["../../src/__tests__/action-provenance-gate.test.ts"],"names":[],"mappings":";;;;;AAAA,0DAA6B;AAC7B,gEAAwC;AACxC,0CAIqB;AAErB,
|
|
1
|
+
{"version":3,"file":"action-provenance-gate.test.js","sourceRoot":"","sources":["../../src/__tests__/action-provenance-gate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Post-write audit for the database-operator's raw `write_neo4j_cypher` tool
|
|
3
|
-
|
|
4
|
-
* (`memory-write`, `contact-create`, etc.
|
|
3
|
+
*. Sibling to `[graph-write] accepted` for the wrapped writers
|
|
4
|
+
* (`memory-write`, `contact-create`, etc.) — same module so the
|
|
5
5
|
* `[graph-*]` log family stays uniform across both write surfaces.
|
|
6
6
|
*
|
|
7
7
|
* Design posture:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Post-write audit for the database-operator's raw `write_neo4j_cypher` tool
|
|
4
|
-
|
|
5
|
-
* (`memory-write`, `contact-create`, etc.
|
|
4
|
+
*. Sibling to `[graph-write] accepted` for the wrapped writers
|
|
5
|
+
* (`memory-write`, `contact-create`, etc.) — same module so the
|
|
6
6
|
* `[graph-*]` log family stays uniform across both write surfaces.
|
|
7
7
|
*
|
|
8
8
|
* Design posture:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-provenance.js","sourceRoot":"","sources":["../src/conversation-provenance.ts"],"names":[],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"conversation-provenance.js","sourceRoot":"","sources":["../src/conversation-provenance.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,iEAAiE;AACjE,2EAA2E;AAC3E,qCAAqC;AACrC,gFAAgF;AAChF,uCAAuC;AACvC,+EAA+E;AAC/E,gEAAgE;AAChE,EAAE;AACF,iCAAiC;AACjC,+EAA+E;AAC/E,2CAA2C;AAC3C,gEAAgE;AAChE,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,EAAE;AACF,6EAA6E;AAC7E,wEAAwE;AACxE,wEAAwE;AACxE,8BAA8B;;AAgC9B,oEAqEC;AAlGD,yCAGoB;AA0Bb,KAAK,UAAU,4BAA4B,CAChD,MAA0C;IAE1C,MAAM,EACJ,OAAO,EACP,aAAa,EACb,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,IAAI,GACL,GAAG,MAAM,CAAC;IAEX,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;IAEpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/E,IAAI,CAAC,kBAAkB;QAAE,OAAO,QAAQ,CAAC;IACzC,IAAI,sBAAsB,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEtD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CACxB,iGAAiG,EACjG,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAC3B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,YAAY,+BAA+B,IAAI,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,kBAAkB,IAAI,CACjL,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,YAAY,+BAA+B,IAAI,6CAA6C,kBAAkB,IAAI,CACvH,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAa,CAAC;IAC3D,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAW,CAAC;IACrE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,YAAY,+BAA+B,IAAI,qCAAqC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,kBAAkB,IAAI,CACtJ,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,YAAY,+BAA+B,IAAI,4CAA4C,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,mBAAmB,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,uBAAuB,kBAAkB,IAAI,CAChN,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,YAAY,8BAA8B,IAAI,SAAS,WAAW,IAAI,kBAAkB,IAAI,CACjG,CAAC;IAEF,OAAO;QACL;YACE,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,UAAU;YACrB,YAAY,EAAE,kBAAkB;SACjC;QACD,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAC7B,aAA2C;IAE3C,OAAO,aAAa,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,SAAS,KAAK,UAAU,CAC3D,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export * from "./audit.js";
|
|
2
2
|
export * from "./conversation-provenance.js";
|
|
3
3
|
/**
|
|
4
|
-
* Write doctrine
|
|
4
|
+
* Write doctrine: a node without at least one adjacency is noise,
|
|
5
5
|
* not knowledge. `writeNodeWithEdges` is the single primitive every graph
|
|
6
6
|
* writer should call; it rejects zero-relationship writes, verifies every
|
|
7
7
|
* relationship target resolves before the node is created, and commits the
|
|
@@ -10,7 +10,7 @@ export * from "./conversation-provenance.js";
|
|
|
10
10
|
* maps, and flat props are queryable — `MATCH (n) WHERE n.createdBySession
|
|
11
11
|
* = $id RETURN n` is the forensic entry point).
|
|
12
12
|
*
|
|
13
|
-
* Process provenance doctrine (
|
|
13
|
+
* Process provenance doctrine (widened): writes
|
|
14
14
|
* targeting any label in `ACTION_PROVENANCE_LABELS` (Person, UserProfile,
|
|
15
15
|
* AdminUser, Organization, LocalBusiness, CloudflareTunnel,
|
|
16
16
|
* CloudflareHostname) must include at least one inbound `:PRODUCED` edge
|
|
@@ -25,7 +25,7 @@ export * from "./conversation-provenance.js";
|
|
|
25
25
|
* "add Anneke Roux as person" stamps a `:PRODUCED` edge from the active
|
|
26
26
|
* `:AdminConversation` so the entity is traceable to its causal turn
|
|
27
27
|
* without forcing the agent to mint a synthetic `:Task` per ask).
|
|
28
|
-
*
|
|
28
|
+
* broadened the gate after the Task-only requirement created
|
|
29
29
|
* redundant-Task bloat for direct admin asks; the Task-mediated path stays
|
|
30
30
|
* canonical for autonomous workflows. Bootstrap writes
|
|
31
31
|
* (`createdBy.agent === 'system'`) are exempt — installer / migration /
|
|
@@ -51,7 +51,7 @@ export * from "./conversation-provenance.js";
|
|
|
51
51
|
*/
|
|
52
52
|
/**
|
|
53
53
|
* Labels that require an inbound `:PRODUCED` edge from a `:Task`,
|
|
54
|
-
* `:Conversation`, or `:Message` (
|
|
54
|
+
* `:Conversation`, or `:Message` (widened). Bootstrap
|
|
55
55
|
* writes with `createdBy.agent === 'system'` are exempt — that carve-out
|
|
56
56
|
* covers PIN-setup `writeAdminUserAndPerson`, schema migrations, and the
|
|
57
57
|
* lazy `loadUserProfile` MERGE path that bypasses this primitive entirely
|
|
@@ -95,7 +95,7 @@ export interface WriteNodeWithEdgesParams {
|
|
|
95
95
|
relationships: GraphRelationship[];
|
|
96
96
|
createdBy: CreatedBy;
|
|
97
97
|
/**
|
|
98
|
-
* Override for the accountId gate
|
|
98
|
+
* Override for the accountId gate. Production callers leave
|
|
99
99
|
* this unset — the gate compares `props.accountId` against
|
|
100
100
|
* `process.env.ACCOUNT_ID`, which the MCP server / UI server validates at
|
|
101
101
|
* boot time. Tests pass an explicit value to avoid env coupling.
|
|
@@ -17,16 +17,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.PROVENANCE_SOURCE_LABELS = exports.ACTION_PROVENANCE_LABELS = void 0;
|
|
18
18
|
exports.stampCreatedBy = stampCreatedBy;
|
|
19
19
|
exports.writeNodeWithEdges = writeNodeWithEdges;
|
|
20
|
-
//
|
|
20
|
+
// re-export the post-write audit so consumers (graph-mcp shim)
|
|
21
21
|
// import from the same package as `writeNodeWithEdges`. Keeps the
|
|
22
22
|
// `[graph-*]` log family colocated.
|
|
23
23
|
__exportStar(require("./audit.js"), exports);
|
|
24
|
-
//
|
|
24
|
+
// re-export the conversation-provenance injector. MCP wrappers
|
|
25
25
|
// (contacts, memory) import it from the package root so the helper, the
|
|
26
26
|
// gate, and the label set live in one import surface.
|
|
27
27
|
__exportStar(require("./conversation-provenance.js"), exports);
|
|
28
28
|
/**
|
|
29
|
-
* Write doctrine
|
|
29
|
+
* Write doctrine: a node without at least one adjacency is noise,
|
|
30
30
|
* not knowledge. `writeNodeWithEdges` is the single primitive every graph
|
|
31
31
|
* writer should call; it rejects zero-relationship writes, verifies every
|
|
32
32
|
* relationship target resolves before the node is created, and commits the
|
|
@@ -35,7 +35,7 @@ __exportStar(require("./conversation-provenance.js"), exports);
|
|
|
35
35
|
* maps, and flat props are queryable — `MATCH (n) WHERE n.createdBySession
|
|
36
36
|
* = $id RETURN n` is the forensic entry point).
|
|
37
37
|
*
|
|
38
|
-
* Process provenance doctrine (
|
|
38
|
+
* Process provenance doctrine (widened): writes
|
|
39
39
|
* targeting any label in `ACTION_PROVENANCE_LABELS` (Person, UserProfile,
|
|
40
40
|
* AdminUser, Organization, LocalBusiness, CloudflareTunnel,
|
|
41
41
|
* CloudflareHostname) must include at least one inbound `:PRODUCED` edge
|
|
@@ -50,7 +50,7 @@ __exportStar(require("./conversation-provenance.js"), exports);
|
|
|
50
50
|
* "add Anneke Roux as person" stamps a `:PRODUCED` edge from the active
|
|
51
51
|
* `:AdminConversation` so the entity is traceable to its causal turn
|
|
52
52
|
* without forcing the agent to mint a synthetic `:Task` per ask).
|
|
53
|
-
*
|
|
53
|
+
* broadened the gate after the Task-only requirement created
|
|
54
54
|
* redundant-Task bloat for direct admin asks; the Task-mediated path stays
|
|
55
55
|
* canonical for autonomous workflows. Bootstrap writes
|
|
56
56
|
* (`createdBy.agent === 'system'`) are exempt — installer / migration /
|
|
@@ -76,7 +76,7 @@ __exportStar(require("./conversation-provenance.js"), exports);
|
|
|
76
76
|
*/
|
|
77
77
|
/**
|
|
78
78
|
* Labels that require an inbound `:PRODUCED` edge from a `:Task`,
|
|
79
|
-
* `:Conversation`, or `:Message` (
|
|
79
|
+
* `:Conversation`, or `:Message` (widened). Bootstrap
|
|
80
80
|
* writes with `createdBy.agent === 'system'` are exempt — that carve-out
|
|
81
81
|
* covers PIN-setup `writeAdminUserAndPerson`, schema migrations, and the
|
|
82
82
|
* lazy `loadUserProfile` MERGE path that bypasses this primitive entirely
|
|
@@ -138,12 +138,12 @@ async function writeNodeWithEdges(params) {
|
|
|
138
138
|
const { session, labels, props, relationships, createdBy } = params;
|
|
139
139
|
const agentLabel = createdBy.agent ?? createdBy.source ?? "unknown";
|
|
140
140
|
const labelCsv = labels.join(",");
|
|
141
|
-
//
|
|
141
|
+
// accountId floor. Every write whose author is not the bootstrap
|
|
142
142
|
// system MUST stamp `props.accountId` with the value of `ACCOUNT_ID`,
|
|
143
143
|
// which the spawning process (MCP server / UI server) validated at boot
|
|
144
144
|
// against the on-disk `${DATA_ROOT}/accounts/<id>/account.json` set. Read-
|
|
145
145
|
// side scoping silently hides leaks, so this gate is the live floor that
|
|
146
|
-
//
|
|
146
|
+
// the deletion of `pruneAlienAccounts` left to the writer surface.
|
|
147
147
|
// The on-disk enumeration happens once per process at boot (in the
|
|
148
148
|
// platform/lib/account-enumeration consumers — the WhatsApp helper and
|
|
149
149
|
// the boot-side `[graph-health] account-enumeration` log). The gate here
|
|
@@ -163,7 +163,7 @@ async function writeNodeWithEdges(params) {
|
|
|
163
163
|
throw new Error(`Write doctrine violated: invalid-account-id (${slice}) — accountId must equal ACCOUNT_ID set by the spawning process. See .docs/neo4j.md "Account isolation invariant".`);
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
|
-
//
|
|
166
|
+
// review-detector / review-digest feature is removed entirely.
|
|
167
167
|
// Reject any re-introduction via the doctrine surface. The actionTool check
|
|
168
168
|
// is property-keyed (not label-keyed) so a future scheduled-Event writer
|
|
169
169
|
// re-introducing the daily digest by tool name is caught here even though
|
|
@@ -175,7 +175,7 @@ async function writeNodeWithEdges(params) {
|
|
|
175
175
|
? "review-digest-compose"
|
|
176
176
|
: "n/a";
|
|
177
177
|
process.stderr.write(`[graph-write] reject reason=removed-feature labels=${labelCsv} actionTool=${actionToolField} agent=${agentLabel}\n`);
|
|
178
|
-
throw new Error("Write doctrine violated: review-detector feature removed
|
|
178
|
+
throw new Error("Write doctrine violated: review-detector feature removed — `:ReviewAlert` and `:Event {actionTool:'review-digest-compose'}` writes are not allowed.");
|
|
179
179
|
}
|
|
180
180
|
if (!relationships || relationships.length < 1) {
|
|
181
181
|
process.stderr.write(`[graph-write] reject reason=zero-relationships labels=${labelCsv} agent=${agentLabel}\n`);
|
|
@@ -196,7 +196,7 @@ async function writeNodeWithEdges(params) {
|
|
|
196
196
|
process.stderr.write(`[graph-write] reject reason=unresolved-target labels=${labelCsv} agent=${agentLabel} requested=${uniqueRequested} found=${found}\n`);
|
|
197
197
|
throw new Error(`Write doctrine violated: ${uniqueRequested - found} of ${uniqueRequested} relationship target(s) did not resolve (elementId mismatch). No node created.`);
|
|
198
198
|
}
|
|
199
|
-
// Process provenance gate (
|
|
199
|
+
// Process provenance gate (widened). Labels in
|
|
200
200
|
// ACTION_PROVENANCE_LABELS require an inbound :PRODUCED edge from a
|
|
201
201
|
// node carrying one of PROVENANCE_SOURCE_LABELS (:Task, :Conversation,
|
|
202
202
|
// :Message — subtype labels qualify via the labels() array). This
|
|
@@ -233,7 +233,7 @@ async function writeNodeWithEdges(params) {
|
|
|
233
233
|
nodeRes = await tx.run(`CREATE (n:${labelStr} $props) RETURN elementId(n) AS nodeId, labels(n) AS nodeLabels`, { props: nodeProps });
|
|
234
234
|
}
|
|
235
235
|
catch (err) {
|
|
236
|
-
//
|
|
236
|
+
// surface UserProfile uniqueness violations as a structured
|
|
237
237
|
// reject line. Neo4j's ConstraintValidationFailed message names the
|
|
238
238
|
// violated label + properties (e.g. "Node(N) already exists with label
|
|
239
239
|
// `UserProfile` and properties accountId=… userId=…") but NOT the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA6JA,wCAWC;AAQD,gDAiNC;AAjYD
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA6JA,wCAWC;AAQD,gDAiNC;AAjYD,+DAA+D;AAC/D,kEAAkE;AAClE,oCAAoC;AACpC,6CAA2B;AAE3B,+DAA+D;AAC/D,wEAAwE;AACxE,sDAAsD;AACtD,+DAA6C;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH;;;;;;;;;;;;;GAaG;AACU,QAAA,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IACnE,QAAQ;IACR,aAAa;IACb,WAAW;IACX,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,oBAAoB;CACrB,CAAC,CAAC;AAEH;;;;;GAKG;AACU,QAAA,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IACnE,MAAM;IACN,cAAc;IACd,SAAS;CACV,CAAC,CAAC;AAEH,SAAS,wBAAwB,CAAC,MAAyB;IACzD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,gCAAwB,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAC/B,aAA2C;IAE3C,OAAO,aAAa,CAAC,MAAM,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,SAAS,KAAK,UAAU,CAC3D,CAAC;AACJ,CAAC;AA+CD,uDAAuD;AACvD,SAAgB,cAAc,CAC5B,KAA8B,EAC9B,SAAoB;IAEpB,OAAO;QACL,GAAG,KAAK;QACR,cAAc,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS;QAC5C,gBAAgB,EAAE,SAAS,CAAC,OAAO,IAAI,SAAS;QAChD,aAAa,EAAE,SAAS,CAAC,IAAI,IAAI,IAAI;QACrC,eAAe,EAAE,SAAS,CAAC,MAAM,IAAI,IAAI;KAC1C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CACtC,MAAgC;IAEhC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAEpE,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC;IACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,iEAAiE;IACjE,sEAAsE;IACtE,wEAAwE;IACxE,2EAA2E;IAC3E,yEAAyE;IACzE,mEAAmE;IACnE,mEAAmE;IACnE,uEAAuE;IACvE,yEAAyE;IACzE,0EAA0E;IAC1E,uEAAuE;IACvE,gCAAgC;IAChC,4DAA4D;IAC5D,MAAM,iBAAiB,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,QAAQ,CAAC;IAC/D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAClC,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAC7E,IACE,OAAO,SAAS,KAAK,QAAQ;YAC7B,CAAC,iBAAiB;YAClB,SAAS,KAAK,iBAAiB,EAC/B,CAAC;YACD,MAAM,KAAK,GACT,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4DAA4D,KAAK,WAAW,UAAU,IAAI,CAC3F,CAAC;YACF,MAAM,IAAI,KAAK,CACb,gDAAgD,KAAK,oHAAoH,CAC1K,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,2EAA2E;IAC3E,6EAA6E;IAC7E,MAAM,sBAAsB,GAC1B,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,uBAAuB,CAAC;IACvF,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,sBAAsB,EAAE,CAAC;QAC7D,MAAM,eAAe,GAAG,sBAAsB;YAC5C,CAAC,CAAC,uBAAuB;YACzB,CAAC,CAAC,KAAK,CAAC;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sDAAsD,QAAQ,eAAe,eAAe,UAAU,UAAU,IAAI,CACrH,CAAC;QACF,MAAM,IAAI,KAAK,CACb,qJAAqJ,CACtJ,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yDAAyD,QAAQ,UAAU,UAAU,IAAI,CAC1F,CAAC;QACF,MAAM,IAAI,KAAK,CACb,sHAAsH,CACvH,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAEnD,OAAO,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CACxB,oGAAoG,EACpG,EAAE,GAAG,EAAE,SAAS,EAAE,CACnB,CAAC;QAEF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;QACnD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAW,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAa,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC;QAClC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;QAChD,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wDAAwD,QAAQ,UAAU,UAAU,cAAc,eAAe,UAAU,KAAK,IAAI,CACrI,CAAC;YACF,MAAM,IAAI,KAAK,CACb,4BAA4B,eAAe,GAAG,KAAK,OAAO,eAAe,gFAAgF,CAC1J,CAAC;QACJ,CAAC;QAED,+CAA+C;QAC/C,oEAAoE;QACpE,uEAAuE;QACvE,kEAAkE;QAClE,sEAAsE;QACtE,sDAAsD;QACtD,mEAAmE;QACnE,+DAA+D;QAC/D,qEAAqE;QACrE,6DAA6D;QAC7D,qCAAqC;QACrC,IAAI,kBAAkB,GAAkB,IAAI,CAAC;QAC7C,IAAI,qBAAqB,GAAkB,IAAI,CAAC;QAChD,IACE,wBAAwB,CAAC,MAAM,CAAC;YAChC,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,QAAQ,EACpC,CAAC;YACD,MAAM,UAAU,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,UAAU;iBACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gCAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAAwD,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACnF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yDAAyD,QAAQ,UAAU,UAAU,IAAI,CAC1F,CAAC;gBACF,MAAM,IAAI,KAAK,CACb,gCAAgC,QAAQ,kGAAkG,UAAU,4OAA4O,CACjY,CAAC;YACJ,CAAC;YACD,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;YACjD,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACjD,CAAC;QAED,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,GAAG,CACpB,aAAa,QAAQ,iEAAiE,EACtF,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,4DAA4D;YAC5D,oEAAoE;YACpE,uEAAuE;YACvE,kEAAkE;YAClE,sEAAsE;YACtE,+DAA+D;YAC/D,sEAAsE;YACtE,iCAAiC;YACjC,MAAM,IAAI,GAAI,GAAgC,EAAE,IAAI,IAAI,EAAE,CAAC;YAC3D,IAAI,IAAI,KAAK,mDAAmD,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnG,MAAM,aAAa,GAAI,SAAqC,CAAC,SAAS,CAAC;gBACvE,MAAM,UAAU,GAAI,SAAqC,CAAC,MAAM,CAAC;gBACjE,MAAM,SAAS,GAAG,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC5F,MAAM,SAAS,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2EAA2E,SAAS,WAAW,SAAS,WAAW,UAAU,IAAI,CAClI,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAW,CAAC;QAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAa,CAAC;QAEpE,uEAAuE;QACvE,iEAAiE;QACjE,uEAAuE;QACvE,wEAAwE;QACxE,oEAAoE;QACpE,uEAAuE;QACvE,iEAAiE;QACjE,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxC,MAAM,CAAC,GACL,GAAG,CAAC,SAAS,KAAK,UAAU;gBAC1B,CAAC,CAAC,mFAAmF,IAAI,UAAU;gBACnG,CAAC,CAAC,mFAAmF,IAAI,UAAU,CAAC;YACxG,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,oBAAoB,CAAC;YAClE,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kEAAkE,QAAQ,UAAU,UAAU,YAAY,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,YAAY,IAAI,CACpJ,CAAC;gBACF,MAAM,IAAI,KAAK,CACb,0DAA0D,GAAG,CAAC,YAAY,kGAAkG,CAC7K,CAAC;YACJ,CAAC;YACD,YAAY,IAAI,OAAO,CAAC;QAC1B,CAAC;QAED,IAAI,YAAY,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;YAC1C,mEAAmE;YACnE,+DAA+D;YAC/D,+CAA+C;YAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0DAA0D,QAAQ,UAAU,UAAU,cAAc,aAAa,CAAC,MAAM,YAAY,YAAY,IAAI,CACrJ,CAAC;YACF,MAAM,IAAI,KAAK,CACb,qCAAqC,aAAa,CAAC,MAAM,mBAAmB,YAAY,4BAA4B,CACrH,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iCAAiC,QAAQ,UAAU,YAAY,mBAAmB,SAAS,CAAC,KAAK,IAAI,SAAS,kBAAkB,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,eAAe,qBAAqB,IAAI,MAAM,IAAI,kBAAkB,IAAI,MAAM,IAAI,CAClQ,CAAC;QAEF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC"}
|