@rubytech/create-maxy-code 0.1.32 → 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/docs/desktop-code-controls.md +63 -0
- 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 +15 -1
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.js +43 -2
- 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 +21 -3
- 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 +42 -17
- 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 +116 -48
- 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 +60 -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 +169 -11
- 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
|
@@ -3,7 +3,7 @@ name: personal-assistant
|
|
|
3
3
|
description: "Your personal assistant. Scheduling, platform administration, messaging channels (Telegram, WhatsApp, email, Outlook), system health, Cloudflare tunnel setup, and browser automation. Delegate when a task involves managing your calendar, configuring the platform, operating messaging channels, setting up a tunnel or domain, or completing interactive browser tasks."
|
|
4
4
|
summary: "Handles the operational tasks you'd give a personal assistant: scheduling meetings, managing your platform settings, connecting messaging channels, and completing browser-based tasks on your behalf."
|
|
5
5
|
model: claude-sonnet-4-6
|
|
6
|
-
tools: mcp__admin__system-status, mcp__admin__brand-settings, mcp__admin__account-manage, mcp__admin__account-update, mcp__admin__logs-read, mcp__admin__plugin-read,
|
|
6
|
+
tools: mcp__admin__system-status, mcp__admin__brand-settings, mcp__admin__account-manage, mcp__admin__account-update, mcp__admin__logs-read, mcp__admin__plugin-read, mcp__admin__file-attach, mcp__admin__wifi, mcp__contacts__contact-create, mcp__contacts__contact-lookup, mcp__contacts__contact-update, mcp__contacts__contact-delete, mcp__contacts__contact-list, mcp__contacts__contact-export, mcp__contacts__contact-erase, mcp__contacts__group-create, mcp__contacts__group-manage, mcp__telegram__message, mcp__telegram__message-history, mcp__telegram__telegram-webhook-register, mcp__whatsapp__whatsapp-login-start, mcp__whatsapp__whatsapp-login-wait, mcp__whatsapp__whatsapp-status, mcp__whatsapp__whatsapp-disconnect, mcp__whatsapp__whatsapp-send, mcp__whatsapp__whatsapp-send-document, mcp__whatsapp__whatsapp-config, mcp__whatsapp__whatsapp-activity, mcp__whatsapp__whatsapp-conversations, mcp__whatsapp__whatsapp-messages, mcp__whatsapp__whatsapp-conversation-graph-state, mcp__whatsapp__whatsapp-group-info, mcp__email__email-setup, mcp__email__email-read, mcp__email__email-send, mcp__email__email-reply, mcp__email__email-search, mcp__email__email-graph-query, mcp__email__email-otp-extract, mcp__email__email-status, mcp__email__email-auto-respond-config, mcp__outlook__outlook-account-register, mcp__outlook__outlook-mail-list, mcp__outlook__outlook-mail-search, mcp__outlook__outlook-calendar-list, mcp__outlook__outlook-calendar-event, mcp__outlook__outlook-contacts-list, mcp__outlook__outlook-mailbox-info, mcp__scheduling__schedule-event, mcp__scheduling__schedule-list, mcp__scheduling__schedule-get, mcp__scheduling__schedule-update, mcp__scheduling__schedule-cancel, mcp__scheduling__schedule-export-ics, mcp__scheduling__schedule-import-ics, mcp__scheduling__time-resolve, mcp__memory__memory-search, mcp__memory__profile-update, mcp__plugin_playwright_playwright__browser_navigate, mcp__plugin_playwright_playwright__browser_navigate_back, mcp__plugin_playwright_playwright__browser_snapshot, mcp__plugin_playwright_playwright__browser_click, mcp__plugin_playwright_playwright__browser_fill, mcp__plugin_playwright_playwright__browser_fill_form, mcp__plugin_playwright_playwright__browser_type, mcp__plugin_playwright_playwright__browser_press_key, mcp__plugin_playwright_playwright__browser_hover, mcp__plugin_playwright_playwright__browser_select_option, mcp__plugin_playwright_playwright__browser_wait_for, mcp__plugin_playwright_playwright__browser_handle_dialog, mcp__plugin_playwright_playwright__browser_evaluate, mcp__plugin_playwright_playwright__browser_console_messages, mcp__plugin_playwright_playwright__browser_resize, mcp__plugin_playwright_playwright__browser_tabs, mcp__plugin_playwright_playwright__browser_close
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# Personal Assistant
|
|
@@ -40,8 +40,6 @@ Each domain has a small set of tools and, where it exists, a skill that drives t
|
|
|
40
40
|
|
|
41
41
|
**Browser is visible.** Playwright is rendered to the operator's VNC viewer. They see every navigation, every fill, every click. After `browser_navigate`, call `browser_tabs` with `action: "select"` on the current tab index so the VNC viewer shows the page you just opened. Prefer `browser_snapshot` (accessibility tree with `ref` IDs) over `browser_take_screenshot`; take a screenshot only when you need to verify layout, colour, image, or canvas content. Use `browser_fill_form` over repeated `browser_fill`. Use `browser_evaluate` for state checks. Check `browser_console_messages` when something behaves unexpectedly. Dismiss cookie consent before the main task. Report CAPTCHA or bot detection as a blocker; do not try to solve it.
|
|
42
42
|
|
|
43
|
-
**Anthropic API key acquisition is cookie-based.** Tell the operator the Anthropic Console will appear in the VNC browser already mounted in the chat (no extra tool call). Credits must exist before key creation; keys on zero-balance accounts are permanently rejected. The operator signs in themselves. Never fill credentials yourself. After creation, store via `api-key-store` and verify via `api-key-verify`.
|
|
44
|
-
|
|
45
43
|
## Optional capabilities
|
|
46
44
|
|
|
47
45
|
Some tools come from optional plugins. When a brief needs a capability and the tools are absent from your tool list, name the gap in your output so admin can suggest activation. Telegram, WhatsApp, business-assistant (behaviour, no tools), sales (behaviour, no tools).
|
|
@@ -38,7 +38,7 @@ A workflow is a named, persistent composition of executable steps. Steps are eit
|
|
|
38
38
|
|
|
39
39
|
Confirm name and steps with the user before creating. `workflow-validate` checks every referenced tool and plugin is available; a workflow with unmet dependencies stays in `draft`. Status moves through `draft`, `active`, `paused`. Runs are `completed`, `partial`, or `failed`; read history via `workflow-runs`.
|
|
40
40
|
|
|
41
|
-
Workflows can be triggered by scheduled events through the `check-due-events` dispatcher.
|
|
41
|
+
Workflows can be triggered by scheduled events through the `check-due-events` dispatcher. The dispatcher is not currently scheduled; migration to Desktop scheduled tasks is tracked separately. Until that lands, a workflow scheduled via `action: { plugin: "workflows", tool: "workflow-execute", args: { workflowId: "..." } }` stays inert until an operator invokes the dispatcher manually.
|
|
42
42
|
|
|
43
43
|
## Graph adjacency at write time
|
|
44
44
|
|
|
@@ -9,9 +9,9 @@ Description=Edge service (public port + VNC transport — independent of the mai
|
|
|
9
9
|
Type=simple
|
|
10
10
|
# ExecStartPre owns the VNC stack so an `npx -y @rubytech/create-maxy@latest`
|
|
11
11
|
# run from the admin UI can restart the main brand service without taking
|
|
12
|
-
# Xtigervnc or websockify down with it.
|
|
13
|
-
#
|
|
14
|
-
#
|
|
12
|
+
# Xtigervnc or websockify down with it. The ttyd transport was removed —
|
|
13
|
+
# upgrades now run via systemd-run --user transient units that are peers
|
|
14
|
+
# of maxy-ui and survive its restart structurally.
|
|
15
15
|
ExecStartPre=/bin/bash __INSTALL_DIR__/platform/scripts/vnc.sh start
|
|
16
16
|
ExecStart=/usr/bin/node __INSTALL_DIR__/server/maxy-edge.js
|
|
17
17
|
ExecStopPost=/bin/bash __INSTALL_DIR__/platform/scripts/vnc.sh stop
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: real-agent
|
|
3
|
-
description: "UK estate agency skills + Loop CRM integration —
|
|
3
|
+
description: "UK estate agency skills + Loop CRM integration — 10 sub-plugins covering sales, listings, vendor management, buyer management, lead generation, coaching, business operations, teaching, Loop CRM, and property brochures. 3 specialist roles (negotiator, valuer, compliance). 31 skills + 23 MCP tools."
|
|
4
4
|
plugins:
|
|
5
5
|
- estate-sales
|
|
6
6
|
- listings
|
|
@@ -9,7 +9,6 @@ plugins:
|
|
|
9
9
|
- leads
|
|
10
10
|
- estate-coaching
|
|
11
11
|
- estate-business
|
|
12
|
-
- estate-onboarding
|
|
13
12
|
- estate-teaching
|
|
14
13
|
- loop
|
|
15
14
|
- brochures
|
|
@@ -17,7 +16,7 @@ plugins:
|
|
|
17
16
|
|
|
18
17
|
# Real Agent
|
|
19
18
|
|
|
20
|
-
Premium plugin bundle for UK estate agency professionals. Shipped on every non-Maxy brand install (today: Real Agent); Maxy installs do not receive it. All
|
|
19
|
+
Premium plugin bundle for UK estate agency professionals. Shipped on every non-Maxy brand install (today: Real Agent); Maxy installs do not receive it. All 10 sub-plugins ship as a set, each independently activatable via `enabledPlugins`. Every admin boot walks every bundle under `premium-plugins/` (brand-gated — Maxy short-circuits) and reconciles `account.json` `enabledPlugins` against on-disk presence: any sub-plugin from the `plugins:` list above whose `platform/plugins/<sub>/PLUGIN.md` exists gets stamped via an idempotent set-union, so `mcp__loop__*` tools and the other sub-plugin surfaces are visible to the admin agent from the first turn after install — and on first boot post-deploy for accounts that already had the bundle on disk from a prior install. Disable individual sub-plugins with `plugin-toggle-enabled`. The bundle also delivers three specialist roles (negotiator, valuer, and compliance) that embed domain knowledge from the sub-plugins and operate autonomously with Loop CRM tools.
|
|
21
20
|
|
|
22
21
|
## Specialist Roles
|
|
23
22
|
|
|
@@ -38,7 +37,6 @@ Premium plugin bundle for UK estate agency professionals. Shipped on every non-M
|
|
|
38
37
|
| `leads` | 2 | — | Pipeline building — nurturing and prospecting |
|
|
39
38
|
| `estate-coaching` | 4 | — | People development — coaching, training, performance |
|
|
40
39
|
| `estate-business` | 4 | — | Business owner skills — growth, operations, brand, partnerships |
|
|
41
|
-
| `estate-onboarding` | 1 | — | First-run member onboarding |
|
|
42
40
|
| `estate-teaching` | 1 | — | Structured education module browsing and delivery |
|
|
43
41
|
| `loop` | — | 23 | Loop CRM integration — properties, people, viewings, feedback, team, marketing, customer preferences, supplier |
|
|
44
42
|
| `brochures` | 5 | — | Property brochure pipeline — brand extract, property extract, A4 layout, print constraints |
|
|
@@ -15,11 +15,11 @@ function readPassword() {
|
|
|
15
15
|
}
|
|
16
16
|
export function getDriver() {
|
|
17
17
|
if (!driver) {
|
|
18
|
-
//
|
|
19
|
-
// vector for
|
|
18
|
+
// NEO4J_URI must be explicit. Silent default to:7687 was the
|
|
19
|
+
// vector for the orphan data in Maxy's DB from a realagent install.
|
|
20
20
|
const uri = process.env.NEO4J_URI;
|
|
21
21
|
if (!uri) {
|
|
22
|
-
throw new Error("[loop] NEO4J_URI unset — refusing to default to bolt://localhost:7687
|
|
22
|
+
throw new Error("[loop] NEO4J_URI unset — refusing to default to bolt://localhost:7687");
|
|
23
23
|
}
|
|
24
24
|
const user = process.env.NEO4J_USER ?? "neo4j";
|
|
25
25
|
const password = readPassword();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neo4j.js","sourceRoot":"","sources":["../../src/lib/neo4j.ts"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAElE,MAAM,YAAY,GAAG,OAAO,CAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EACxE,wBAAwB,CACzB,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yCAAyC,YAAY,gCAAgC,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,
|
|
1
|
+
{"version":3,"file":"neo4j.js","sourceRoot":"","sources":["../../src/lib/neo4j.ts"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAElE,MAAM,YAAY,GAAG,OAAO,CAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EACxE,wBAAwB,CACzB,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yCAAyC,YAAY,gCAAgC,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,6DAA6D;QAC7D,oEAAoE;QACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;QAC/C,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -23,12 +23,12 @@ function readPassword(): string {
|
|
|
23
23
|
|
|
24
24
|
export function getDriver(): Driver {
|
|
25
25
|
if (!driver) {
|
|
26
|
-
//
|
|
27
|
-
// vector for
|
|
26
|
+
// NEO4J_URI must be explicit. Silent default to:7687 was the
|
|
27
|
+
// vector for the orphan data in Maxy's DB from a realagent install.
|
|
28
28
|
const uri = process.env.NEO4J_URI;
|
|
29
29
|
if (!uri) {
|
|
30
30
|
throw new Error(
|
|
31
|
-
"[loop] NEO4J_URI unset — refusing to default to bolt://localhost:7687
|
|
31
|
+
"[loop] NEO4J_URI unset — refusing to default to bolt://localhost:7687"
|
|
32
32
|
);
|
|
33
33
|
}
|
|
34
34
|
const user = process.env.NEO4J_USER ?? "neo4j";
|
|
@@ -229,7 +229,7 @@ async function persistMessage(conversationId, role, content, accountId, tokens,
|
|
|
229
229
|
OPTIONAL MATCH (tail:Message)-[:PART_OF]->(c)
|
|
230
230
|
WHERE NOT (tail)-[:NEXT]->(:Message)
|
|
231
231
|
AND (tail:UserMessage OR tail:AssistantMessage)
|
|
232
|
-
//
|
|
232
|
+
// sublabel-scope the tail to the agent-path's own sublabels.
|
|
233
233
|
// Without this, a Task-857 :WhatsAppMessage row (no outgoing :NEXT)
|
|
234
234
|
// would be picked as tail and the agent-path would chain
|
|
235
235
|
// :WhatsAppMessage\u2192:UserMessage, crossing the live-channel chain.
|
|
@@ -277,7 +277,7 @@ async function persistMessage(conversationId, role, content, accountId, tokens,
|
|
|
277
277
|
textOffset: comp.textOffset,
|
|
278
278
|
submitted: false,
|
|
279
279
|
createdAt: datetime(),
|
|
280
|
-
//
|
|
280
|
+
// store the artefact attachmentId on the:Component
|
|
281
281
|
// itself when this is a PERSISTENT_COMPONENTS write whose disk
|
|
282
282
|
// write succeeded. Field is null for non-persistent / mime-skip
|
|
283
283
|
// / disk-fail components. Lets the audit + backfill scripts
|
|
@@ -288,7 +288,7 @@ async function persistMessage(conversationId, role, content, accountId, tokens,
|
|
|
288
288
|
attachmentId: comp.artefactAttachmentId
|
|
289
289
|
})
|
|
290
290
|
)
|
|
291
|
-
//
|
|
291
|
+
// for PERSISTENT_COMPONENTS whose disk write succeeded
|
|
292
292
|
// (artefactAttachmentId is non-null), MERGE the sibling
|
|
293
293
|
// :KnowledgeDocument projection AND a :HAS_KNOWLEDGE_DOCUMENT edge
|
|
294
294
|
// from the parent :Message in the same Cypher tx. ON CREATE stamps
|
|
@@ -346,13 +346,13 @@ async function persistMessage(conversationId, role, content, accountId, tokens,
|
|
|
346
346
|
data: comp.data,
|
|
347
347
|
ordinal: neo4j.int(comp.ordinal),
|
|
348
348
|
textOffset: neo4j.int(comp.textOffset),
|
|
349
|
-
//
|
|
349
|
+
// null for non-persistent / mime-skip / disk-fail
|
|
350
350
|
// components; the FOREACH stamps this directly onto the
|
|
351
351
|
// :Component row so audit + backfill read attachmentId without
|
|
352
352
|
// re-deriving from componentId.
|
|
353
353
|
artefactAttachmentId: comp.artefactAttachmentId ?? null
|
|
354
354
|
})),
|
|
355
|
-
|
|
355
|
+
//:KnowledgeDocument MERGE list. One row per
|
|
356
356
|
// PERSISTENT_COMPONENTS component whose disk write succeeded;
|
|
357
357
|
// text-only / mime-skip / disk-fail components are absent so
|
|
358
358
|
// the FOREACH no-ops on them. attachmentId here matches the
|
|
@@ -860,6 +860,10 @@ async function renameConversation(conversationId, label) {
|
|
|
860
860
|
await session.close();
|
|
861
861
|
}
|
|
862
862
|
}
|
|
863
|
+
var DECAY_THRESHOLD_DAYS = 14;
|
|
864
|
+
var DECAY_RATE_PER_DAY = 0.05;
|
|
865
|
+
var INJECTION_THRESHOLD = 0.4;
|
|
866
|
+
var MAX_SUMMARY_PREFERENCES = 30;
|
|
863
867
|
async function getUserTimezone(accountId, userId) {
|
|
864
868
|
const session = getSession();
|
|
865
869
|
try {
|
|
@@ -968,6 +972,14 @@ async function writeAdminUserAndPerson(params) {
|
|
|
968
972
|
await session.close();
|
|
969
973
|
}
|
|
970
974
|
}
|
|
975
|
+
var PROFILE_CATEGORIES = [
|
|
976
|
+
"communication",
|
|
977
|
+
"scheduling",
|
|
978
|
+
"decision",
|
|
979
|
+
"workflow",
|
|
980
|
+
"content",
|
|
981
|
+
"interaction"
|
|
982
|
+
];
|
|
971
983
|
var PROFILE_FIELD_TEMPLATES = {
|
|
972
984
|
communication: [
|
|
973
985
|
"preferredChannel",
|
|
@@ -1014,6 +1026,302 @@ var TOTAL_PROFILE_FIELDS = Object.values(PROFILE_FIELD_TEMPLATES).reduce(
|
|
|
1014
1026
|
(n, fs) => n + fs.length,
|
|
1015
1027
|
0
|
|
1016
1028
|
);
|
|
1029
|
+
function computeAbsentFields(preferences, extraTemplates = {}) {
|
|
1030
|
+
const covered = /* @__PURE__ */ new Set();
|
|
1031
|
+
for (const pref of preferences) {
|
|
1032
|
+
const isCovered = pref.notApplicable === true || pref.confidence >= INJECTION_THRESHOLD;
|
|
1033
|
+
if (isCovered) covered.add(`${pref.category}.${pref.key}`);
|
|
1034
|
+
}
|
|
1035
|
+
const absent = [];
|
|
1036
|
+
for (const [category, fields] of Object.entries(PROFILE_FIELD_TEMPLATES)) {
|
|
1037
|
+
for (const field of fields) {
|
|
1038
|
+
const dotted = `${category}.${field}`;
|
|
1039
|
+
if (!covered.has(dotted)) absent.push(dotted);
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
for (const [category, fields] of Object.entries(extraTemplates)) {
|
|
1043
|
+
if (category in PROFILE_FIELD_TEMPLATES) continue;
|
|
1044
|
+
for (const field of fields) {
|
|
1045
|
+
const dotted = `${category}.${field}`;
|
|
1046
|
+
if (!covered.has(dotted)) absent.push(dotted);
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
return absent;
|
|
1050
|
+
}
|
|
1051
|
+
function parsePluginProfileKeys(manifest) {
|
|
1052
|
+
const fm = manifest.match(/^---\n([\s\S]*?)\n---/);
|
|
1053
|
+
if (!fm) return [];
|
|
1054
|
+
const out = [];
|
|
1055
|
+
let inBlock = false;
|
|
1056
|
+
for (const line of fm[1].split("\n")) {
|
|
1057
|
+
if (/^profileKeys:/.test(line)) {
|
|
1058
|
+
inBlock = true;
|
|
1059
|
+
continue;
|
|
1060
|
+
}
|
|
1061
|
+
if (inBlock) {
|
|
1062
|
+
const m = line.match(/^\s+-\s+(.+?)\s*$/);
|
|
1063
|
+
if (m) out.push(m[1]);
|
|
1064
|
+
else break;
|
|
1065
|
+
}
|
|
1066
|
+
}
|
|
1067
|
+
return out;
|
|
1068
|
+
}
|
|
1069
|
+
function loadEnabledPluginProfileKeys(accountId) {
|
|
1070
|
+
const accountFile = resolve(PLATFORM_ROOT, "..", "data/accounts", accountId, "account.json");
|
|
1071
|
+
if (!existsSync(accountFile)) return {};
|
|
1072
|
+
let enabled;
|
|
1073
|
+
try {
|
|
1074
|
+
const raw = readFileSync(accountFile, "utf-8");
|
|
1075
|
+
const parsed = JSON.parse(raw);
|
|
1076
|
+
enabled = Array.isArray(parsed.enabledPlugins) ? parsed.enabledPlugins.filter((p) => typeof p === "string") : [];
|
|
1077
|
+
} catch (err) {
|
|
1078
|
+
console.error(
|
|
1079
|
+
`[profile-keys] account.json read failed for ${accountId.slice(0, 8)}\u2026: ${err instanceof Error ? err.message : String(err)}`
|
|
1080
|
+
);
|
|
1081
|
+
return {};
|
|
1082
|
+
}
|
|
1083
|
+
const merged = {};
|
|
1084
|
+
for (const pluginName of enabled) {
|
|
1085
|
+
const manifestPath = resolve(PLATFORM_ROOT, "plugins", pluginName, "PLUGIN.md");
|
|
1086
|
+
if (!existsSync(manifestPath)) continue;
|
|
1087
|
+
let manifest;
|
|
1088
|
+
try {
|
|
1089
|
+
manifest = readFileSync(manifestPath, "utf-8");
|
|
1090
|
+
} catch {
|
|
1091
|
+
continue;
|
|
1092
|
+
}
|
|
1093
|
+
for (const dotted of parsePluginProfileKeys(manifest)) {
|
|
1094
|
+
const dot = dotted.indexOf(".");
|
|
1095
|
+
if (dot <= 0 || dot === dotted.length - 1) {
|
|
1096
|
+
console.error(`[profile-keys] malformed dotted key in ${pluginName}: ${dotted}`);
|
|
1097
|
+
continue;
|
|
1098
|
+
}
|
|
1099
|
+
const category = dotted.slice(0, dot);
|
|
1100
|
+
const key = dotted.slice(dot + 1);
|
|
1101
|
+
if (!merged[category]) merged[category] = /* @__PURE__ */ new Set();
|
|
1102
|
+
merged[category].add(key);
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
const out = {};
|
|
1106
|
+
for (const [cat, set] of Object.entries(merged)) out[cat] = [...set];
|
|
1107
|
+
return out;
|
|
1108
|
+
}
|
|
1109
|
+
var sparseStateLogged = /* @__PURE__ */ new Set();
|
|
1110
|
+
async function loadUserProfile(accountId, userId, conversationId) {
|
|
1111
|
+
console.error(
|
|
1112
|
+
`[profile] loadUserProfile entry accountId=${accountId.slice(0, 8)}\u2026 userId=${userId} conversationId=${conversationId ? `${conversationId.slice(0, 8)}\u2026` : "<none>"}`
|
|
1113
|
+
);
|
|
1114
|
+
const session = getSession();
|
|
1115
|
+
try {
|
|
1116
|
+
const serverTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
1117
|
+
const mergeResult = await session.run(
|
|
1118
|
+
`MATCH (au:AdminUser {userId: $userId})
|
|
1119
|
+
MERGE (au)-[:HAS_PROFILE]->(up:UserProfile {accountId: $accountId, userId: $userId})
|
|
1120
|
+
ON CREATE SET
|
|
1121
|
+
up.createdAt = $now,
|
|
1122
|
+
up.updatedAt = $now,
|
|
1123
|
+
up.profileVersion = 0,
|
|
1124
|
+
up.scope = 'admin',
|
|
1125
|
+
up.timezone = $serverTimezone
|
|
1126
|
+
ON MATCH SET
|
|
1127
|
+
up.timezone = CASE WHEN up.timezone IS NULL OR trim(up.timezone) = '' THEN $serverTimezone ELSE up.timezone END
|
|
1128
|
+
RETURN up.createdAt = $now AS isNew`,
|
|
1129
|
+
{ accountId, userId, now: (/* @__PURE__ */ new Date()).toISOString(), serverTimezone }
|
|
1130
|
+
);
|
|
1131
|
+
if (mergeResult.records.length === 0) {
|
|
1132
|
+
console.error(`[profile] loadUserProfile: AdminUser not found for userId=${userId} accountId=${accountId.slice(0, 8)}\u2026 \u2014 profile not created, invariant violated`);
|
|
1133
|
+
return null;
|
|
1134
|
+
}
|
|
1135
|
+
const isNew = mergeResult.records[0].get("isNew");
|
|
1136
|
+
if (isNew) {
|
|
1137
|
+
console.error(`[profile] created new profile: userId=${userId} accountId=${accountId.slice(0, 8)}\u2026 timezone=${serverTimezone}`);
|
|
1138
|
+
}
|
|
1139
|
+
const nowMs = Date.now();
|
|
1140
|
+
const thresholdMs = DECAY_THRESHOLD_DAYS * 24 * 60 * 60 * 1e3;
|
|
1141
|
+
const staleResult = await session.run(
|
|
1142
|
+
`MATCH (up:UserProfile {accountId: $accountId, userId: $userId})-[:HAS_PREFERENCE]->(pref:Preference)
|
|
1143
|
+
WHERE pref.observedAt IS NOT NULL
|
|
1144
|
+
RETURN pref.preferenceId AS preferenceId,
|
|
1145
|
+
pref.observedAt AS observedAt,
|
|
1146
|
+
pref.confidence AS confidence`,
|
|
1147
|
+
{ accountId, userId }
|
|
1148
|
+
);
|
|
1149
|
+
let decayCount = 0;
|
|
1150
|
+
for (const record of staleResult.records) {
|
|
1151
|
+
const observedAt = record.get("observedAt");
|
|
1152
|
+
const confidence = record.get("confidence");
|
|
1153
|
+
const observedMs = new Date(observedAt).getTime();
|
|
1154
|
+
const ageMs = nowMs - observedMs;
|
|
1155
|
+
if (ageMs > thresholdMs && confidence > 0) {
|
|
1156
|
+
const daysPastThreshold = (ageMs - thresholdMs) / (24 * 60 * 60 * 1e3);
|
|
1157
|
+
const decayedConfidence = Math.max(0, confidence - DECAY_RATE_PER_DAY * daysPastThreshold);
|
|
1158
|
+
if (decayedConfidence !== confidence) {
|
|
1159
|
+
await session.run(
|
|
1160
|
+
`MATCH (pref:Preference {preferenceId: $preferenceId, accountId: $accountId})
|
|
1161
|
+
SET pref.confidence = $confidence`,
|
|
1162
|
+
{
|
|
1163
|
+
preferenceId: record.get("preferenceId"),
|
|
1164
|
+
accountId,
|
|
1165
|
+
confidence: decayedConfidence
|
|
1166
|
+
}
|
|
1167
|
+
);
|
|
1168
|
+
decayCount++;
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
const result = await session.run(
|
|
1173
|
+
`MATCH (up:UserProfile {accountId: $accountId, userId: $userId})
|
|
1174
|
+
OPTIONAL MATCH (au:AdminUser {userId: $userId})-[:OWNS]->(p:Person {accountId: $accountId})
|
|
1175
|
+
OPTIONAL MATCH (up)-[:HAS_PREFERENCE]->(pref:Preference)
|
|
1176
|
+
WHERE pref.confidence >= $threshold OR pref.notApplicable = true
|
|
1177
|
+
WITH up, p, pref
|
|
1178
|
+
ORDER BY pref.confidence DESC
|
|
1179
|
+
WITH up, p, collect(pref) AS allPrefs
|
|
1180
|
+
WITH up, p, allPrefs[0..$limit] AS prefs
|
|
1181
|
+
RETURN up, p AS person, prefs`,
|
|
1182
|
+
{ accountId, userId, threshold: INJECTION_THRESHOLD, limit: MAX_SUMMARY_PREFERENCES }
|
|
1183
|
+
);
|
|
1184
|
+
if (result.records.length === 0 || !result.records[0].get("up")) {
|
|
1185
|
+
return null;
|
|
1186
|
+
}
|
|
1187
|
+
const upNode = result.records[0].get("up");
|
|
1188
|
+
const profileProps = { ...upNode.properties };
|
|
1189
|
+
const personNode = result.records[0].get("person");
|
|
1190
|
+
if (personNode?.properties) {
|
|
1191
|
+
if (personNode.properties.givenName !== void 0) profileProps.givenName = personNode.properties.givenName;
|
|
1192
|
+
if (personNode.properties.familyName !== void 0) profileProps.familyName = personNode.properties.familyName;
|
|
1193
|
+
if (personNode.properties.email !== void 0) profileProps.email = personNode.properties.email;
|
|
1194
|
+
if (personNode.properties.telephone !== void 0) profileProps.telephone = personNode.properties.telephone;
|
|
1195
|
+
}
|
|
1196
|
+
const prefNodes = result.records[0].get("prefs");
|
|
1197
|
+
const preferences = prefNodes.map((p) => ({
|
|
1198
|
+
preferenceId: p.properties.preferenceId,
|
|
1199
|
+
category: p.properties.category,
|
|
1200
|
+
key: p.properties.key,
|
|
1201
|
+
value: p.properties.value,
|
|
1202
|
+
confidence: p.properties.confidence,
|
|
1203
|
+
source: p.properties.source,
|
|
1204
|
+
observedAt: p.properties.observedAt,
|
|
1205
|
+
notApplicable: p.properties.notApplicable === true
|
|
1206
|
+
}));
|
|
1207
|
+
const extraTemplates = loadEnabledPluginProfileKeys(accountId);
|
|
1208
|
+
const extraFieldCount = Object.values(extraTemplates).reduce((n, fs) => n + fs.length, 0);
|
|
1209
|
+
const summary = formatProfileSummary(profileProps, preferences, extraTemplates);
|
|
1210
|
+
const absentFields = computeAbsentFields(preferences, extraTemplates);
|
|
1211
|
+
const totalFields = TOTAL_PROFILE_FIELDS + extraFieldCount;
|
|
1212
|
+
const fieldCoverageCount = totalFields - absentFields.length;
|
|
1213
|
+
const presentCategories = new Set(
|
|
1214
|
+
preferences.filter((p) => p.notApplicable === true || p.confidence >= INJECTION_THRESHOLD).map((p) => p.category)
|
|
1215
|
+
);
|
|
1216
|
+
const absentCategories = PROFILE_CATEGORIES.filter((c) => !presentCategories.has(c));
|
|
1217
|
+
const categoryCoverage = PROFILE_CATEGORIES.length - absentCategories.length;
|
|
1218
|
+
console.error(
|
|
1219
|
+
`[profile] loaded for userId=${userId} accountId=${accountId.slice(0, 8)}\u2026 preferences=${preferences.length} fieldCoverage=${fieldCoverageCount}/${totalFields} categoryCoverage=${categoryCoverage}/${PROFILE_CATEGORIES.length} (decay: ${decayCount} updated)`
|
|
1220
|
+
);
|
|
1221
|
+
const identityKeys = [
|
|
1222
|
+
{ prop: "email", token: "email" },
|
|
1223
|
+
// Schema-canonical name. `phone` is the synonym (rejected at tool
|
|
1224
|
+
// surface); the log uses `telephone` to keep grep aligned with
|
|
1225
|
+
// schema-base.md doctrine the brief enforces.
|
|
1226
|
+
{ prop: "telephone", token: "telephone" },
|
|
1227
|
+
{ prop: "givenName", token: "givenName" },
|
|
1228
|
+
{ prop: "familyName", token: "familyName" },
|
|
1229
|
+
{ prop: "role", token: "role" }
|
|
1230
|
+
];
|
|
1231
|
+
const absentIdentity = identityKeys.filter((k) => {
|
|
1232
|
+
const v = profileProps[k.prop];
|
|
1233
|
+
return typeof v !== "string" || v.trim().length === 0;
|
|
1234
|
+
});
|
|
1235
|
+
const sparseFired = absentCategories.length > 0 || absentFields.length > 0 || absentIdentity.length > 0;
|
|
1236
|
+
if (conversationId && sparseFired) {
|
|
1237
|
+
const dedupeKey = `${accountId}:${userId}:${conversationId}`;
|
|
1238
|
+
if (!sparseStateLogged.has(dedupeKey)) {
|
|
1239
|
+
sparseStateLogged.add(dedupeKey);
|
|
1240
|
+
const FIELDS_LOG_CAP = 10;
|
|
1241
|
+
const absentFieldsTruncated = absentFields.length <= FIELDS_LOG_CAP ? absentFields.join(",") : `${absentFields.slice(0, FIELDS_LOG_CAP).join(",")}+${absentFields.length - FIELDS_LOG_CAP} more`;
|
|
1242
|
+
console.error(
|
|
1243
|
+
`[profile] sparse-state injected accountId=${accountId.slice(0, 8)}\u2026 userId=${userId} conversationId=${conversationId.slice(0, 8)}\u2026 absentCategories=${absentCategories.join(",")} absentFields=${absentFieldsTruncated || "none"} absentIdentity=${absentIdentity.map((k) => k.token).join(",") || "none"}`
|
|
1244
|
+
);
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
return summary;
|
|
1248
|
+
} catch (err) {
|
|
1249
|
+
console.error(`[profile] loadUserProfile failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1250
|
+
return null;
|
|
1251
|
+
} finally {
|
|
1252
|
+
await session.close();
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
function formatProfileSummary(profile, preferences, extraTemplates = {}) {
|
|
1256
|
+
const givenName = typeof profile.givenName === "string" ? profile.givenName.trim() : "";
|
|
1257
|
+
const familyName = typeof profile.familyName === "string" ? profile.familyName.trim() : "";
|
|
1258
|
+
const joined = familyName ? `${givenName} ${familyName}` : givenName;
|
|
1259
|
+
const name = joined || "Owner";
|
|
1260
|
+
const role = profile.role ? ` (${profile.role})` : "";
|
|
1261
|
+
const tz = profile.timezone ? ` \u2014 ${profile.timezone}` : "";
|
|
1262
|
+
const locale = profile.locale ? `, ${profile.locale}` : "";
|
|
1263
|
+
const expertise = profile.expertise ? `
|
|
1264
|
+
Expertise: ${typeof profile.expertise === "string" ? profile.expertise : JSON.stringify(profile.expertise)}` : "";
|
|
1265
|
+
const lines = [`## About the Owner
|
|
1266
|
+
`];
|
|
1267
|
+
lines.push(`${name}${role}${tz}${locale}${expertise}
|
|
1268
|
+
`);
|
|
1269
|
+
const categories = {};
|
|
1270
|
+
for (const pref of preferences) {
|
|
1271
|
+
if (pref.notApplicable === true) continue;
|
|
1272
|
+
if (!categories[pref.category]) categories[pref.category] = [];
|
|
1273
|
+
categories[pref.category].push(pref);
|
|
1274
|
+
}
|
|
1275
|
+
const categoryLabels = {
|
|
1276
|
+
communication: "Communication",
|
|
1277
|
+
scheduling: "Scheduling",
|
|
1278
|
+
decision: "Decisions",
|
|
1279
|
+
workflow: "Workflow",
|
|
1280
|
+
content: "Content",
|
|
1281
|
+
interaction: "Interaction patterns"
|
|
1282
|
+
};
|
|
1283
|
+
const workCategories = ["communication", "scheduling", "decision", "workflow", "content"];
|
|
1284
|
+
const workPrefs = workCategories.filter((c) => categories[c]);
|
|
1285
|
+
if (workPrefs.length > 0) {
|
|
1286
|
+
lines.push(`### How they work`);
|
|
1287
|
+
for (const cat of workPrefs) {
|
|
1288
|
+
const label = categoryLabels[cat] || cat;
|
|
1289
|
+
const items = categories[cat].map((p) => p.value).join("; ");
|
|
1290
|
+
lines.push(`- ${label}: ${items}`);
|
|
1291
|
+
}
|
|
1292
|
+
lines.push("");
|
|
1293
|
+
}
|
|
1294
|
+
if (categories.interaction) {
|
|
1295
|
+
lines.push(`### Interaction patterns`);
|
|
1296
|
+
for (const pref of categories.interaction) {
|
|
1297
|
+
lines.push(`- ${pref.value}`);
|
|
1298
|
+
}
|
|
1299
|
+
lines.push("");
|
|
1300
|
+
}
|
|
1301
|
+
const identityFields = [
|
|
1302
|
+
{ key: "email", label: "email" },
|
|
1303
|
+
{ key: "telephone", label: "phone" },
|
|
1304
|
+
{ key: "givenName", label: "first name" },
|
|
1305
|
+
{ key: "familyName", label: "last name" },
|
|
1306
|
+
{ key: "role", label: "role" }
|
|
1307
|
+
];
|
|
1308
|
+
const absentIdentity = identityFields.filter((f) => {
|
|
1309
|
+
const v = profile[f.key];
|
|
1310
|
+
return typeof v !== "string" || v.trim().length === 0;
|
|
1311
|
+
});
|
|
1312
|
+
if (absentIdentity.length > 0) {
|
|
1313
|
+
lines.push(`### Identity coverage`);
|
|
1314
|
+
lines.push(`Missing: ${absentIdentity.map((f) => f.label).join(", ")}`);
|
|
1315
|
+
lines.push("");
|
|
1316
|
+
}
|
|
1317
|
+
const absentFields = computeAbsentFields(preferences, extraTemplates);
|
|
1318
|
+
if (absentFields.length > 0) {
|
|
1319
|
+
lines.push(`### Coverage`);
|
|
1320
|
+
lines.push(`Missing: ${absentFields.join(", ")}`);
|
|
1321
|
+
lines.push("");
|
|
1322
|
+
}
|
|
1323
|
+
return lines.join("\n");
|
|
1324
|
+
}
|
|
1017
1325
|
var RECENT_FAILURES_TAIL_BYTES = 10 * 1024;
|
|
1018
1326
|
var AGENT_FILE_ROLES = [
|
|
1019
1327
|
{ filename: "IDENTITY.md", role: "identity" },
|
|
@@ -1205,6 +1513,7 @@ export {
|
|
|
1205
1513
|
getUserTimezone,
|
|
1206
1514
|
loadAdminUserName,
|
|
1207
1515
|
writeAdminUserAndPerson,
|
|
1516
|
+
loadUserProfile,
|
|
1208
1517
|
projectAgent,
|
|
1209
1518
|
deleteAgentProjection
|
|
1210
1519
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getSession
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NNHHGQJL.js";
|
|
4
4
|
import {
|
|
5
5
|
__commonJS,
|
|
6
6
|
__toESM
|
|
@@ -219,7 +219,7 @@ var require_dist = __commonJS({
|
|
|
219
219
|
const actionToolField = reviewDigestActionTool ? "review-digest-compose" : "n/a";
|
|
220
220
|
process.stderr.write(`[graph-write] reject reason=removed-feature labels=${labelCsv} actionTool=${actionToolField} agent=${agentLabel}
|
|
221
221
|
`);
|
|
222
|
-
throw new Error("Write doctrine violated: review-detector feature removed
|
|
222
|
+
throw new Error("Write doctrine violated: review-detector feature removed \u2014 `:ReviewAlert` and `:Event {actionTool:'review-digest-compose'}` writes are not allowed.");
|
|
223
223
|
}
|
|
224
224
|
if (!relationships || relationships.length < 1) {
|
|
225
225
|
process.stderr.write(`[graph-write] reject reason=zero-relationships labels=${labelCsv} agent=${agentLabel}
|
|
@@ -468,7 +468,7 @@ async function completeCloudflareTask(params) {
|
|
|
468
468
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
469
469
|
if (status === "failed" && (!errorMessage || errorMessage.trim().length === 0)) {
|
|
470
470
|
throw new Error(
|
|
471
|
-
"cloudflare-task-tracker: errorMessage is required when status='failed' (
|
|
471
|
+
"cloudflare-task-tracker: errorMessage is required when status='failed' (process-provenance contract)."
|
|
472
472
|
);
|
|
473
473
|
}
|
|
474
474
|
const session = getSession();
|
package/payload/server/{cloudflare-task-tracker-4PKOLE4H.js → cloudflare-task-tracker-NEB3X6O2.js}
RENAMED
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
readTunnelState,
|
|
8
8
|
recoverRunningCloudflareTasks,
|
|
9
9
|
resolveUnitGoneVerdict
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-QC5LHYPH.js";
|
|
11
|
+
import "./chunk-NNHHGQJL.js";
|
|
12
12
|
import "./chunk-JSBRDJBE.js";
|
|
13
13
|
export {
|
|
14
14
|
CLOUDFLARE_TASK_DIAGNOSTICS,
|