@rubytech/create-maxy-code 0.1.0
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 +48 -0
- package/dist/__tests__/apt-resolve.test.js +179 -0
- package/dist/__tests__/brew-install.test.js +141 -0
- package/dist/__tests__/brew-resolve.test.js +103 -0
- package/dist/__tests__/cdp-port-no-silent-fallback.test.js +53 -0
- package/dist/__tests__/launchd-plist.test.js +149 -0
- package/dist/__tests__/macos-version.test.js +96 -0
- package/dist/__tests__/peer-brand-detect.test.js +103 -0
- package/dist/__tests__/platform-detect.test.js +50 -0
- package/dist/__tests__/port-canonicalisation.test.js +200 -0
- package/dist/__tests__/preflight-port-classifier.test.js +330 -0
- package/dist/__tests__/snap-chromium.test.js +115 -0
- package/dist/apt-resolve.js +73 -0
- package/dist/brew-install.js +175 -0
- package/dist/brew-resolve.js +68 -0
- package/dist/index.js +3325 -0
- package/dist/launchd-plist.js +68 -0
- package/dist/macos-version.js +53 -0
- package/dist/peer-brand-detect.js +39 -0
- package/dist/pinned-binaries.js +12 -0
- package/dist/platform-detect.js +36 -0
- package/dist/port-resolution.js +153 -0
- package/dist/preflight-port-classifier.js +222 -0
- package/dist/snap-chromium.js +89 -0
- package/dist/uninstall.js +861 -0
- package/package.json +32 -0
- package/payload/platform/config/brand-registry.json +20 -0
- package/payload/platform/config/brand.json +54 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/enumerate.test.d.ts +2 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/enumerate.test.d.ts.map +1 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/enumerate.test.js +88 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/enumerate.test.js.map +1 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.d.ts +2 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.d.ts.map +1 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js +55 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js.map +1 -0
- package/payload/platform/lib/account-enumeration/dist/index.d.ts +49 -0
- package/payload/platform/lib/account-enumeration/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/account-enumeration/dist/index.js +109 -0
- package/payload/platform/lib/account-enumeration/dist/index.js.map +1 -0
- package/payload/platform/lib/account-enumeration/src/__tests__/enumerate.test.ts +94 -0
- package/payload/platform/lib/account-enumeration/src/__tests__/validate-env.test.ts +57 -0
- package/payload/platform/lib/account-enumeration/src/index.ts +140 -0
- package/payload/platform/lib/account-enumeration/tsconfig.json +8 -0
- package/payload/platform/lib/admins-write/dist/index.d.ts +87 -0
- package/payload/platform/lib/admins-write/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/admins-write/dist/index.js +248 -0
- package/payload/platform/lib/admins-write/dist/index.js.map +1 -0
- package/payload/platform/lib/admins-write/src/index.ts +311 -0
- package/payload/platform/lib/admins-write/tsconfig.json +8 -0
- package/payload/platform/lib/anthropic-key/dist/index.d.ts +22 -0
- package/payload/platform/lib/anthropic-key/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/anthropic-key/dist/index.js +232 -0
- package/payload/platform/lib/anthropic-key/dist/index.js.map +1 -0
- package/payload/platform/lib/brand-templating/dist/index.d.ts +18 -0
- package/payload/platform/lib/brand-templating/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/brand-templating/dist/index.js +69 -0
- package/payload/platform/lib/brand-templating/dist/index.js.map +1 -0
- package/payload/platform/lib/brand-templating/src/index.ts +76 -0
- package/payload/platform/lib/brand-templating/tsconfig.json +8 -0
- package/payload/platform/lib/device-url/dist/index.d.ts +44 -0
- package/payload/platform/lib/device-url/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/device-url/dist/index.js +68 -0
- package/payload/platform/lib/device-url/dist/index.js.map +1 -0
- package/payload/platform/lib/device-url/src/index.ts +78 -0
- package/payload/platform/lib/device-url/tsconfig.json +8 -0
- package/payload/platform/lib/entitlement/PUBKEY-HASH.txt +1 -0
- package/payload/platform/lib/entitlement/dist/canonicalize.d.ts +26 -0
- package/payload/platform/lib/entitlement/dist/canonicalize.d.ts.map +1 -0
- package/payload/platform/lib/entitlement/dist/canonicalize.js +54 -0
- package/payload/platform/lib/entitlement/dist/canonicalize.js.map +1 -0
- package/payload/platform/lib/entitlement/dist/index.d.ts +76 -0
- package/payload/platform/lib/entitlement/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/entitlement/dist/index.js +293 -0
- package/payload/platform/lib/entitlement/dist/index.js.map +1 -0
- package/payload/platform/lib/entitlement/rubytech-pubkey.pem +3 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate-write.test.d.ts +2 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate-write.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate-write.test.js +97 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate-write.test.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate.test.d.ts +2 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate.test.js +112 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate.test.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cache.test.d.ts +2 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cache.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cache.test.js +163 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cache.test.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cypher-parser.test.d.ts +2 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cypher-parser.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cypher-parser.test.js +89 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/schema-cypher-parser.test.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.d.ts +2 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js +140 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.d.ts +37 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.js +333 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.d.ts +85 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.js +93 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.d.ts +71 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.js +168 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.d.ts +50 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.js +197 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/index.d.ts +26 -0
- package/payload/platform/lib/graph-mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/index.js +847 -0
- package/payload/platform/lib/graph-mcp/dist/index.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/schema-cache.d.ts +75 -0
- package/payload/platform/lib/graph-mcp/dist/schema-cache.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/schema-cache.js +217 -0
- package/payload/platform/lib/graph-mcp/dist/schema-cache.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.d.ts +42 -0
- package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.js +87 -0
- package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.js.map +1 -0
- package/payload/platform/lib/graph-mcp/src/__tests__/cypher-validate-write.test.ts +150 -0
- package/payload/platform/lib/graph-mcp/src/__tests__/cypher-validate.test.ts +141 -0
- package/payload/platform/lib/graph-mcp/src/__tests__/schema-cache.test.ts +169 -0
- package/payload/platform/lib/graph-mcp/src/__tests__/schema-cypher-parser.test.ts +99 -0
- package/payload/platform/lib/graph-mcp/src/__tests__/warnings-envelope.test.ts +151 -0
- package/payload/platform/lib/graph-mcp/src/cypher-rewrite-stamp.ts +349 -0
- package/payload/platform/lib/graph-mcp/src/cypher-shim-read.ts +141 -0
- package/payload/platform/lib/graph-mcp/src/cypher-shim-write.ts +240 -0
- package/payload/platform/lib/graph-mcp/src/cypher-validate.ts +249 -0
- package/payload/platform/lib/graph-mcp/src/index.ts +1076 -0
- package/payload/platform/lib/graph-mcp/src/schema-cache.ts +242 -0
- package/payload/platform/lib/graph-mcp/src/schema-cypher-parser.ts +84 -0
- package/payload/platform/lib/graph-mcp/tsconfig.json +8 -0
- package/payload/platform/lib/graph-search/dist/index.d.ts +227 -0
- package/payload/platform/lib/graph-search/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/graph-search/dist/index.js +525 -0
- package/payload/platform/lib/graph-search/dist/index.js.map +1 -0
- package/payload/platform/lib/graph-search/src/__tests__/bm25-label-gate.test.ts +88 -0
- package/payload/platform/lib/graph-search/src/__tests__/bm25-only.test.ts +129 -0
- package/payload/platform/lib/graph-search/src/__tests__/bm25-strong-bypass-threshold.test.ts +126 -0
- package/payload/platform/lib/graph-search/src/__tests__/brochure-threshold.test.ts +136 -0
- package/payload/platform/lib/graph-search/src/__tests__/escape-and-normalise.test.ts +53 -0
- package/payload/platform/lib/graph-search/src/__tests__/expand-batch.test.ts +206 -0
- package/payload/platform/lib/graph-search/src/__tests__/fulltext-coverage.test.ts +280 -0
- package/payload/platform/lib/graph-search/src/__tests__/hybrid.test.ts +262 -0
- package/payload/platform/lib/graph-search/src/__tests__/vector-threshold.test.ts +170 -0
- package/payload/platform/lib/graph-search/src/index.ts +718 -0
- package/payload/platform/lib/graph-search/tsconfig.json +9 -0
- package/payload/platform/lib/graph-search/vitest.config.ts +9 -0
- package/payload/platform/lib/graph-trash/dist/index.d.ts +99 -0
- package/payload/platform/lib/graph-trash/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/graph-trash/dist/index.js +333 -0
- package/payload/platform/lib/graph-trash/dist/index.js.map +1 -0
- package/payload/platform/lib/graph-trash/src/index.ts +475 -0
- package/payload/platform/lib/graph-trash/tsconfig.json +8 -0
- package/payload/platform/lib/graph-write/dist/__tests__/account-id-gate.test.d.ts +2 -0
- package/payload/platform/lib/graph-write/dist/__tests__/account-id-gate.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-write/dist/__tests__/account-id-gate.test.js +165 -0
- package/payload/platform/lib/graph-write/dist/__tests__/account-id-gate.test.js.map +1 -0
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.d.ts +2 -0
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js +226 -0
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js.map +1 -0
- package/payload/platform/lib/graph-write/dist/__tests__/audit.test.d.ts +2 -0
- package/payload/platform/lib/graph-write/dist/__tests__/audit.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-write/dist/__tests__/audit.test.js +147 -0
- package/payload/platform/lib/graph-write/dist/__tests__/audit.test.js.map +1 -0
- package/payload/platform/lib/graph-write/dist/audit.d.ts +84 -0
- package/payload/platform/lib/graph-write/dist/audit.d.ts.map +1 -0
- package/payload/platform/lib/graph-write/dist/audit.js +129 -0
- package/payload/platform/lib/graph-write/dist/audit.js.map +1 -0
- package/payload/platform/lib/graph-write/dist/conversation-provenance.d.ts +26 -0
- package/payload/platform/lib/graph-write/dist/conversation-provenance.d.ts.map +1 -0
- package/payload/platform/lib/graph-write/dist/conversation-provenance.js +81 -0
- package/payload/platform/lib/graph-write/dist/conversation-provenance.js.map +1 -0
- package/payload/platform/lib/graph-write/dist/index.d.ts +124 -0
- package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/graph-write/dist/index.js +288 -0
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -0
- package/payload/platform/lib/graph-write/src/__tests__/account-id-gate.test.ts +189 -0
- package/payload/platform/lib/graph-write/src/__tests__/action-provenance-gate.test.ts +252 -0
- package/payload/platform/lib/graph-write/src/__tests__/audit.test.ts +162 -0
- package/payload/platform/lib/graph-write/src/audit.ts +182 -0
- package/payload/platform/lib/graph-write/src/conversation-provenance.ts +140 -0
- package/payload/platform/lib/graph-write/src/index.ts +386 -0
- package/payload/platform/lib/graph-write/tsconfig.json +8 -0
- package/payload/platform/lib/mcp-eager/dist/index.d.ts +61 -0
- package/payload/platform/lib/mcp-eager/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/mcp-eager/dist/index.js +49 -0
- package/payload/platform/lib/mcp-eager/dist/index.js.map +1 -0
- package/payload/platform/lib/mcp-eager/src/index.ts +78 -0
- package/payload/platform/lib/mcp-eager/tsconfig.json +8 -0
- package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts +53 -0
- package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/mcp-spawn-tee/dist/index.js +132 -0
- package/payload/platform/lib/mcp-spawn-tee/dist/index.js.map +1 -0
- package/payload/platform/lib/mcp-spawn-tee/src/index.ts +134 -0
- package/payload/platform/lib/mcp-spawn-tee/tsconfig.json +8 -0
- package/payload/platform/lib/mcp-stderr-tee/dist/index.d.ts +51 -0
- package/payload/platform/lib/mcp-stderr-tee/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js +196 -0
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js.map +1 -0
- package/payload/platform/lib/mcp-stderr-tee/src/index.ts +206 -0
- package/payload/platform/lib/mcp-stderr-tee/tsconfig.json +8 -0
- package/payload/platform/lib/models/dist/index.d.ts +7 -0
- package/payload/platform/lib/models/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/models/dist/index.js +20 -0
- package/payload/platform/lib/models/dist/index.js.map +1 -0
- package/payload/platform/lib/models/src/index.ts +18 -0
- package/payload/platform/lib/models/tsconfig.json +8 -0
- package/payload/platform/lib/oauth-llm/dist/index.d.ts +118 -0
- package/payload/platform/lib/oauth-llm/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/oauth-llm/dist/index.js +388 -0
- package/payload/platform/lib/oauth-llm/dist/index.js.map +1 -0
- package/payload/platform/lib/oauth-llm/src/index.ts +585 -0
- package/payload/platform/lib/oauth-llm/tsconfig.json +8 -0
- package/payload/platform/lib/persistent-components/dist/index.d.ts +21 -0
- package/payload/platform/lib/persistent-components/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/persistent-components/dist/index.js +32 -0
- package/payload/platform/lib/persistent-components/dist/index.js.map +1 -0
- package/payload/platform/lib/persistent-components/src/index.ts +28 -0
- package/payload/platform/lib/persistent-components/tsconfig.json +8 -0
- package/payload/platform/lib/screening-patterns/dist/index.d.ts +29 -0
- package/payload/platform/lib/screening-patterns/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/screening-patterns/dist/index.js +48 -0
- package/payload/platform/lib/screening-patterns/dist/index.js.map +1 -0
- package/payload/platform/lib/screening-patterns/src/index.ts +51 -0
- package/payload/platform/lib/screening-patterns/tsconfig.json +8 -0
- package/payload/platform/lib/task-secrets/dist/index.d.ts +40 -0
- package/payload/platform/lib/task-secrets/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/task-secrets/dist/index.js +44 -0
- package/payload/platform/lib/task-secrets/dist/index.js.map +1 -0
- package/payload/platform/lib/task-secrets/src/__tests__/redact-secrets.test.ts +127 -0
- package/payload/platform/lib/task-secrets/src/index.ts +77 -0
- package/payload/platform/lib/task-secrets/tsconfig.json +9 -0
- package/payload/platform/lib/task-secrets/vitest.config.ts +9 -0
- package/payload/platform/neo4j/edge-annotations.json +154 -0
- package/payload/platform/neo4j/schema.cypher +1104 -0
- package/payload/platform/package-lock.json +3576 -0
- package/payload/platform/package.json +25 -0
- package/payload/platform/plugins/admin/PLUGIN.md +81 -0
- package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +191 -0
- package/payload/platform/plugins/admin/hooks/__tests__/playwright-file-guard.test.sh +278 -0
- package/payload/platform/plugins/admin/hooks/__tests__/pre-tool-use-base64-guard.test.sh +204 -0
- package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +225 -0
- package/payload/platform/plugins/admin/hooks/playwright-file-guard.sh +214 -0
- package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +294 -0
- package/payload/platform/plugins/admin/hooks/webfetch-preflight.mjs +363 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js +91 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js +98 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js +141 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js +88 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js +3495 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js +40 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.d.ts +39 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.js +249 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.d.ts +15 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js +73 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.d.ts +35 -0
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js +140 -0
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/package.json +23 -0
- package/payload/platform/plugins/admin/mcp/vitest.config.ts +9 -0
- package/payload/platform/plugins/admin/references/chat-ui-guide.md +31 -0
- package/payload/platform/plugins/admin/references/contextual-ui.md +107 -0
- package/payload/platform/plugins/admin/skills/a4-print-documents/SKILL.md +241 -0
- package/payload/platform/plugins/admin/skills/access-manager/SKILL.md +28 -0
- package/payload/platform/plugins/admin/skills/access-manager/references/operations.md +197 -0
- package/payload/platform/plugins/admin/skills/business-profile/SKILL.md +53 -0
- package/payload/platform/plugins/admin/skills/datetime/SKILL.md +91 -0
- package/payload/platform/plugins/admin/skills/deck-pages/SKILL.md +418 -0
- package/payload/platform/plugins/admin/skills/onboarding/SKILL.md +255 -0
- package/payload/platform/plugins/admin/skills/plainly/SKILL.md +105 -0
- package/payload/platform/plugins/admin/skills/plainly/references/worked-examples.md +301 -0
- package/payload/platform/plugins/admin/skills/plugin-management/SKILL.md +99 -0
- package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +277 -0
- package/payload/platform/plugins/admin/skills/publish-site/SKILL.md +72 -0
- package/payload/platform/plugins/admin/skills/qr-code/SKILL.md +35 -0
- package/payload/platform/plugins/admin/skills/qr-code/references/data-formats.md +113 -0
- package/payload/platform/plugins/admin/skills/skill-builder/SKILL.md +113 -0
- package/payload/platform/plugins/admin/skills/skill-builder/references/lean-pattern.md +110 -0
- package/payload/platform/plugins/admin/skills/skill-builder/references/pdf-generation.md +30 -0
- package/payload/platform/plugins/admin/skills/specialist-management/SKILL.md +44 -0
- package/payload/platform/plugins/admin/skills/stream-log-review/SKILL.md +71 -0
- package/payload/platform/plugins/admin/skills/stream-log-review/references/analysis-patterns.md +189 -0
- package/payload/platform/plugins/admin/skills/unzip-attachment/SKILL.md +79 -0
- package/payload/platform/plugins/admin/skills/unzip-attachment/__tests__/preflight.sh +148 -0
- package/payload/platform/plugins/admin/skills/unzip-attachment/references/safety.md +116 -0
- package/payload/platform/plugins/admin/skills/update-knowledge/SKILL.md +47 -0
- package/payload/platform/plugins/anthropic/PLUGIN.md +40 -0
- package/payload/platform/plugins/anthropic/references/console-api.md +186 -0
- package/payload/platform/plugins/anthropic/references/setup-guide.md +36 -0
- package/payload/platform/plugins/anthropic/skills/get-api-key/SKILL.md +138 -0
- package/payload/platform/plugins/business-assistant/PLUGIN.md +59 -0
- package/payload/platform/plugins/business-assistant/references/crm.md +112 -0
- package/payload/platform/plugins/business-assistant/references/document-management.md +96 -0
- package/payload/platform/plugins/business-assistant/references/escalation.md +126 -0
- package/payload/platform/plugins/business-assistant/references/invoicing.md +163 -0
- package/payload/platform/plugins/business-assistant/references/profiling.md +50 -0
- package/payload/platform/plugins/business-assistant/references/quoting.md +56 -0
- package/payload/platform/plugins/business-assistant/references/scheduling.md +127 -0
- package/payload/platform/plugins/business-assistant/references/task-management.md +163 -0
- package/payload/platform/plugins/cloudflare/PLUGIN.md +73 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js +29 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +283 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +1155 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.d.ts +90 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.d.ts.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.js +550 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.js.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/package.json +18 -0
- package/payload/platform/plugins/cloudflare/mcp/vitest.config.ts +10 -0
- package/payload/platform/plugins/cloudflare/references/dashboard-guide.md +108 -0
- package/payload/platform/plugins/cloudflare/references/manual-setup.md +481 -0
- package/payload/platform/plugins/cloudflare/references/reset-guide.md +118 -0
- package/payload/platform/plugins/cloudflare/scripts/_stream-log.sh +154 -0
- package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.sh +98 -0
- package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.ts +751 -0
- package/payload/platform/plugins/cloudflare/scripts/reset-tunnel.sh +107 -0
- package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +826 -0
- package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +107 -0
- package/payload/platform/plugins/contacts/PLUGIN.md +31 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.js +433 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +40 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.d.ts +33 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.js +53 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts +23 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +123 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.d.ts +28 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.js +39 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.d.ts +41 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.js +142 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-erase.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.d.ts +52 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.js +119 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts +23 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js +49 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts +21 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js +70 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts +14 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js +43 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.d.ts +18 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js +95 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-manage.d.ts +15 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-manage.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-manage.js +72 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-manage.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/package.json +19 -0
- package/payload/platform/plugins/deep-research/PLUGIN.md +13 -0
- package/payload/platform/plugins/deep-research/skills/deep-research/SKILL.md +46 -0
- package/payload/platform/plugins/deep-research/skills/deep-research/references/citation-styles.md +52 -0
- package/payload/platform/plugins/deep-research/skills/deep-research/references/research-modes.md +22 -0
- package/payload/platform/plugins/deep-research/skills/deep-research/references/search-strategy.md +24 -0
- package/payload/platform/plugins/docs/PLUGIN.md +52 -0
- package/payload/platform/plugins/docs/references/access-control.md +73 -0
- package/payload/platform/plugins/docs/references/admin-session.md +80 -0
- package/payload/platform/plugins/docs/references/attachments.md +44 -0
- package/payload/platform/plugins/docs/references/cloudflare.md +111 -0
- package/payload/platform/plugins/docs/references/contacts-guide.md +102 -0
- package/payload/platform/plugins/docs/references/deployment.md +150 -0
- package/payload/platform/plugins/docs/references/getting-started.md +82 -0
- package/payload/platform/plugins/docs/references/graph.md +149 -0
- package/payload/platform/plugins/docs/references/internals.md +512 -0
- package/payload/platform/plugins/docs/references/memory-guide.md +119 -0
- package/payload/platform/plugins/docs/references/migration-guide.md +90 -0
- package/payload/platform/plugins/docs/references/outlook-guide.md +69 -0
- package/payload/platform/plugins/docs/references/platform.md +111 -0
- package/payload/platform/plugins/docs/references/plugins-guide.md +174 -0
- package/payload/platform/plugins/docs/references/projects-guide.md +73 -0
- package/payload/platform/plugins/docs/references/settings.md +82 -0
- package/payload/platform/plugins/docs/references/telegram-guide.md +58 -0
- package/payload/platform/plugins/docs/references/troubleshooting.md +532 -0
- package/payload/platform/plugins/email/PLUGIN.md +49 -0
- package/payload/platform/plugins/email/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/email/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/index.js +291 -0
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +118 -0
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +364 -0
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/embedding.d.ts +2 -0
- package/payload/platform/plugins/email/mcp/dist/lib/embedding.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/embedding.js +24 -0
- package/payload/platform/plugins/email/mcp/dist/lib/embedding.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts +87 -0
- package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/graph.js +324 -0
- package/payload/platform/plugins/email/mcp/dist/lib/graph.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +215 -0
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js +735 -0
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js +40 -0
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/providers.d.ts +32 -0
- package/payload/platform/plugins/email/mcp/dist/lib/providers.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/providers.js +569 -0
- package/payload/platform/plugins/email/mcp/dist/lib/providers.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts +29 -0
- package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/screening.js +105 -0
- package/payload/platform/plugins/email/mcp/dist/lib/screening.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/smtp.d.ts +21 -0
- package/payload/platform/plugins/email/mcp/dist/lib/smtp.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/smtp.js +77 -0
- package/payload/platform/plugins/email/mcp/dist/lib/smtp.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.d.ts +38 -0
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +894 -0
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +25 -0
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +227 -0
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.d.ts +19 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.js +151 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.d.ts +22 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.js +188 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.d.ts +15 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.js +142 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.d.ts +14 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.js +75 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.d.ts +10 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js +83 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.d.ts +15 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.js +63 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-send.d.ts +10 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-send.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-send.js +31 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-send.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-setup.d.ts +22 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-setup.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js +183 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts +6 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.js +43 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-status.js.map +1 -0
- package/payload/platform/plugins/email/mcp/package.json +23 -0
- package/payload/platform/plugins/email/references/email-reference.md +204 -0
- package/payload/platform/plugins/linkedin-import/PLUGIN.md +27 -0
- package/payload/platform/plugins/linkedin-import/skills/linkedin-import/SKILL.md +142 -0
- package/payload/platform/plugins/linkedin-import/skills/linkedin-import/references/connections.md +135 -0
- package/payload/platform/plugins/linkedin-import/skills/linkedin-import/references/profile.md +95 -0
- package/payload/platform/plugins/memory/PLUGIN.md +146 -0
- package/payload/platform/plugins/memory/bin/conversation-archive-ingest.mjs +879 -0
- package/payload/platform/plugins/memory/bin/conversation-archive-ingest.sh +138 -0
- package/payload/platform/plugins/memory/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js +1813 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.js +92 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/live-schema-source.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +225 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js +100 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js +448 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/attachments.d.ts +37 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/attachments.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/attachments.js +69 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/attachments.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.d.ts +5 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.js +30 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/timestamp-scanner.d.ts +49 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/timestamp-scanner.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/timestamp-scanner.js +35 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/timestamp-scanner.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.d.ts +47 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js +31 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.d.ts +3 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js +155 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/delta-cursor.d.ts +11 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/delta-cursor.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/delta-cursor.js +20 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/delta-cursor.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.d.ts +14 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js +38 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.d.ts +16 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js +59 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sessionize.d.ts +9 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sessionize.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sessionize.js +32 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sessionize.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.d.ts +3 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js +29 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.d.ts +45 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.js +125 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.d.ts +9 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js +61 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts +3 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js +29 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/filter-token.d.ts +36 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/filter-token.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/filter-token.js +86 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/filter-token.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +42 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +114 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts +38 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js +89 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts +136 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js +180 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +246 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +828 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts +63 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js +210 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +40 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts +113 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js +455 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts +83 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +209 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/uuid.d.ts +3 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/uuid.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js +12 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js +97 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js +184 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js +73 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js +109 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js +84 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js +106 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js +87 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js +148 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts +89 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +542 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.d.ts +41 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.js +116 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.d.ts +8 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.js +7 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-add.d.ts +7 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-add.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-add.js +28 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-add.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-list.d.ts +7 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-list.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-list.js +7 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-list.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-remove.d.ts +7 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-remove.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-remove.js +27 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/graph-prune-denylist-remove.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts +54 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +231 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.d.ts +34 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js +58 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts +57 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js +106 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.d.ts +16 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.js +91 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.d.ts +22 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.js +36 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.d.ts +58 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.js +125 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.d.ts +28 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js +93 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.d.ts +20 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.js +87 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +129 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +827 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.d.ts +19 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js +125 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rank.d.ts +61 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rank.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rank.js +102 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rank.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-read-attachment.d.ts +12 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-read-attachment.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-read-attachment.js +100 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-read-attachment.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts +9 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js +84 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.d.ts +13 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.js +63 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.d.ts +24 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.js +40 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts +5 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +42 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts +13 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +77 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +47 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +173 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.d.ts +24 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.js +31 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.d.ts +44 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js +322 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +65 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +369 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/package.json +24 -0
- package/payload/platform/plugins/memory/mcp/scripts/boot-smoke.sh +69 -0
- package/payload/platform/plugins/memory/mcp/scripts/graph/accept.sh +217 -0
- package/payload/platform/plugins/memory/mcp/scripts/graph/fixture.cypher +59 -0
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +15 -0
- package/payload/platform/plugins/memory/references/graph-primitives.md +342 -0
- package/payload/platform/plugins/memory/references/schema-base.md +234 -0
- package/payload/platform/plugins/memory/references/schema-creator.md +35 -0
- package/payload/platform/plugins/memory/references/schema-estate-agent.md +35 -0
- package/payload/platform/plugins/memory/references/schema-food-beverage.md +32 -0
- package/payload/platform/plugins/memory/references/schema-hospitality.md +31 -0
- package/payload/platform/plugins/memory/references/schema-logistics.md +30 -0
- package/payload/platform/plugins/memory/references/schema-professional-services.md +33 -0
- package/payload/platform/plugins/memory/references/schema-retail.md +33 -0
- package/payload/platform/plugins/memory/references/schema-trades.md +36 -0
- package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +202 -0
- package/payload/platform/plugins/memory/skills/conversation-archive-enrich/SKILL.md +159 -0
- package/payload/platform/plugins/memory/skills/conversational-memory/SKILL.md +108 -0
- package/payload/platform/plugins/memory/skills/document-ingest/SKILL.md +267 -0
- package/payload/platform/plugins/outlook/PLUGIN.md +48 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js +94 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/log.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/log.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/log.test.js +31 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/log.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.js +213 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/token-store.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/token-store.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/token-store.test.js +130 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/token-store.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.d.ts +65 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.js +261 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/token-store.d.ts +61 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/token-store.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/token-store.js +170 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/token-store.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/index.d.ts +18 -0
- package/payload/platform/plugins/outlook/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/index.js +152 -0
- package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts +60 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +189 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/log.d.ts +23 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/log.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/log.js +53 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/log.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.d.ts +26 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.js +50 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-event.d.ts +12 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-event.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-event.js +32 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-event.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-list.d.ts +59 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-list.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-list.js +54 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-list.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/contacts-list.d.ts +14 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/contacts-list.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/contacts-list.js +45 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/contacts-list.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.d.ts +15 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.js +48 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts +8 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js +49 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mailbox-info.d.ts +19 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mailbox-info.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mailbox-info.js +58 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mailbox-info.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/package.json +20 -0
- package/payload/platform/plugins/outlook/mcp/scripts/verify-doc-impl.sh +109 -0
- package/payload/platform/plugins/outlook/references/auth.md +118 -0
- package/payload/platform/plugins/outlook/references/graph-surfaces.md +114 -0
- package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +65 -0
- package/payload/platform/plugins/projects/PLUGIN.md +90 -0
- package/payload/platform/plugins/projects/references/investigation.md +63 -0
- package/payload/platform/plugins/projects/references/retrospective.md +71 -0
- package/payload/platform/plugins/projects/references/review.md +51 -0
- package/payload/platform/plugins/projects/references/sprint.md +168 -0
- package/payload/platform/plugins/replicate/PLUGIN.md +23 -0
- package/payload/platform/plugins/replicate/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/replicate/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/replicate/mcp/dist/index.js +106 -0
- package/payload/platform/plugins/replicate/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/replicate/mcp/dist/lib/replicate-key.d.ts +15 -0
- package/payload/platform/plugins/replicate/mcp/dist/lib/replicate-key.d.ts.map +1 -0
- package/payload/platform/plugins/replicate/mcp/dist/lib/replicate-key.js +73 -0
- package/payload/platform/plugins/replicate/mcp/dist/lib/replicate-key.js.map +1 -0
- package/payload/platform/plugins/replicate/mcp/dist/tools/image-generate.d.ts +14 -0
- package/payload/platform/plugins/replicate/mcp/dist/tools/image-generate.d.ts.map +1 -0
- package/payload/platform/plugins/replicate/mcp/dist/tools/image-generate.js +191 -0
- package/payload/platform/plugins/replicate/mcp/dist/tools/image-generate.js.map +1 -0
- package/payload/platform/plugins/replicate/mcp/package.json +21 -0
- package/payload/platform/plugins/sales/PLUGIN.md +106 -0
- package/payload/platform/plugins/sales/references/close-tracking.md +69 -0
- package/payload/platform/plugins/sales/references/comparisons.md +99 -0
- package/payload/platform/plugins/sales/references/competitive-positioning.md +51 -0
- package/payload/platform/plugins/sales/references/faq.md +77 -0
- package/payload/platform/plugins/sales/references/objection-handling.md +157 -0
- package/payload/platform/plugins/sales/references/pricing.md +101 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +103 -0
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js +16 -0
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +315 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js +119 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/embedding.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/embedding.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/embedding.js +19 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/embedding.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.d.ts +47 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.js +362 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.d.ts +30 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js +89 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts +48 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js +140 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +20 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +568 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.d.ts +7 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.js +23 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts +25 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +121 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-export-ics.d.ts +9 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-export-ics.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-export-ics.js +76 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-export-ics.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.d.ts +25 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.js +53 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-import-ics.d.ts +8 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-import-ics.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-import-ics.js +48 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-import-ics.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.d.ts +20 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.js +76 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts +18 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +167 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/package.json +23 -0
- package/payload/platform/plugins/scheduling/mcp/vitest.config.ts +9 -0
- package/payload/platform/plugins/tasks/.claude-plugin/plugin.json +17 -0
- package/payload/platform/plugins/tasks/.mcp.json +13 -0
- package/payload/platform/plugins/tasks/PLUGIN.md +81 -0
- package/payload/platform/plugins/tasks/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/tasks/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/index.js +503 -0
- package/payload/platform/plugins/tasks/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/lib/embeddings.d.ts +7 -0
- package/payload/platform/plugins/tasks/mcp/dist/lib/embeddings.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/lib/embeddings.js +24 -0
- package/payload/platform/plugins/tasks/mcp/dist/lib/embeddings.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js +40 -0
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-complete.d.ts +17 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-complete.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-complete.js +76 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-complete.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.d.ts +29 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js +235 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-get.d.ts +40 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-get.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-get.js +125 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-get.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-list.d.ts +26 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-list.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-list.js +81 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-list.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-update.d.ts +19 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-update.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-update.js +102 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-update.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-list.d.ts +20 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-list.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-list.js +37 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-list.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts +12 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.js +28 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-complete.d.ts +16 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-complete.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-complete.js +33 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-complete.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.d.ts +63 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js +141 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-get.d.ts +19 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-get.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-get.js +51 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-get.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-list.d.ts +18 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-list.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-list.js +66 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-list.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-ready.d.ts +21 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-ready.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-ready.js +54 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-ready.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-relate.d.ts +12 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-relate.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-relate.js +59 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-relate.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.d.ts +32 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.d.ts.map +1 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js +112 -0
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js.map +1 -0
- package/payload/platform/plugins/tasks/mcp/package.json +20 -0
- package/payload/platform/plugins/telegram/PLUGIN.md +35 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.js +198 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts +41 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js +70 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts +16 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +68 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts +20 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.js +34 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/package.json +19 -0
- package/payload/platform/plugins/telegram/references/setup-guide.md +50 -0
- package/payload/platform/plugins/waitlist/PLUGIN.md +63 -0
- package/payload/platform/plugins/waitlist/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/waitlist/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/index.js +328 -0
- package/payload/platform/plugins/waitlist/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.d.ts +3 -0
- package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.d.ts.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.js +48 -0
- package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.js.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +40 -0
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.d.ts +2 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.d.ts.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js +70 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.d.ts +33 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.d.ts.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.js +124 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-heal.js.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.d.ts +23 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.d.ts.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.js +58 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.js.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts +83 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js +433 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.d.ts +19 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.d.ts.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.js +81 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.js.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.d.ts +28 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.d.ts.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.js +50 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.js.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts +33 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +335 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +1 -0
- package/payload/platform/plugins/waitlist/mcp/package.json +23 -0
- package/payload/platform/plugins/waitlist/mcp/vitest.config.ts +9 -0
- package/payload/platform/plugins/whatsapp/PLUGIN.md +71 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/call-api.d.ts +14 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/call-api.d.ts.map +1 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/call-api.js +42 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/call-api.js.map +1 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/index.d.ts +8 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js +469 -0
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/whatsapp/mcp/package.json +19 -0
- package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +257 -0
- package/payload/platform/plugins/whatsapp/skills/connect-whatsapp/SKILL.md +82 -0
- package/payload/platform/plugins/whatsapp/skills/manage-whatsapp-config/SKILL.md +99 -0
- package/payload/platform/plugins/workflows/.claude-plugin/plugin.json +16 -0
- package/payload/platform/plugins/workflows/.mcp.json +12 -0
- package/payload/platform/plugins/workflows/PLUGIN.md +297 -0
- package/payload/platform/plugins/workflows/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/workflows/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/index.js +536 -0
- package/payload/platform/plugins/workflows/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts +38 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js +83 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/embeddings.d.ts +2 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/embeddings.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/embeddings.js +19 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/embeddings.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts +151 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.js +299 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js +40 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.d.ts +153 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.js +273 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/validate-capabilities.d.ts +32 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/validate-capabilities.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/validate-capabilities.js +97 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/validate-capabilities.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.d.ts +48 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js +166 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-delete.d.ts +28 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-delete.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-delete.js +57 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-delete.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts +64 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +605 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-get.d.ts +29 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-get.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-get.js +55 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-get.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-list.d.ts +16 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-list.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-list.js +44 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-list.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-runs.d.ts +28 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-runs.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-runs.js +71 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-runs.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.d.ts +11 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js +198 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-validate.d.ts +13 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-validate.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-validate.js +71 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-validate.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/package.json +20 -0
- package/payload/platform/plugins/workflows/mcp/test-runner.mjs +710 -0
- package/payload/platform/plugins/workflows/mcp/test-workflows.sh +77 -0
- package/payload/platform/plugins/workflows/skills/workflow-manager/SKILL.md +88 -0
- package/payload/platform/scripts/__tests__/admin-persist-audit.test.ts +182 -0
- package/payload/platform/scripts/__tests__/first-token-creates-stream-log.test.sh +37 -0
- package/payload/platform/scripts/__tests__/logs-read-prefix.sh +237 -0
- package/payload/platform/scripts/admin-conversation-recover.mjs +386 -0
- package/payload/platform/scripts/admin-persist-audit.ts +217 -0
- package/payload/platform/scripts/check-no-conversation-id-leaks.mjs +165 -0
- package/payload/platform/scripts/check-no-task-id-leaks.mjs +110 -0
- package/payload/platform/scripts/check-sdk-oauth.mjs +185 -0
- package/payload/platform/scripts/check-skill-load-coverage.mjs +100 -0
- package/payload/platform/scripts/component-knowledgedoc-backfill.ts +214 -0
- package/payload/platform/scripts/conversation-id-allowlist.txt +151 -0
- package/payload/platform/scripts/dedupe-userprofile-ghosts.sh +388 -0
- package/payload/platform/scripts/generate-entitlement-fixture.mjs +152 -0
- package/payload/platform/scripts/installer-device-verify.sh +249 -0
- package/payload/platform/scripts/lib/resolve-account-dir.sh +186 -0
- package/payload/platform/scripts/log-adherence-check.sh +125 -0
- package/payload/platform/scripts/logs-read.sh +577 -0
- package/payload/platform/scripts/logs-read.test.sh +159 -0
- package/payload/platform/scripts/migrate-import.sh +437 -0
- package/payload/platform/scripts/redact-install-logs.sh +87 -0
- package/payload/platform/scripts/resume-tunnel.sh +117 -0
- package/payload/platform/scripts/seed-neo4j.sh +590 -0
- package/payload/platform/scripts/taskmaster-export.sh +388 -0
- package/payload/platform/scripts/test-laptop-vnc-boot.sh +88 -0
- package/payload/platform/scripts/verify-skill-tool-surface.sh +255 -0
- package/payload/platform/scripts/vnc.sh +475 -0
- package/payload/platform/scripts/wifi-provision-server/server.js +743 -0
- package/payload/platform/scripts/wifi-provision.sh +492 -0
- package/payload/platform/services/claude-session-manager/dist/config.d.ts +12 -0
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/config.js +27 -0
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +10 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.js +186 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/index.d.ts +2 -0
- package/payload/platform/services/claude-session-manager/dist/index.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/index.js +64 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts +4 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +31 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +34 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +91 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +23 -0
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/session-store.js +31 -0
- package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/types.d.ts +33 -0
- package/payload/platform/services/claude-session-manager/dist/types.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/types.js +2 -0
- package/payload/platform/services/claude-session-manager/dist/types.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/url-capture.d.ts +12 -0
- package/payload/platform/services/claude-session-manager/dist/url-capture.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/url-capture.js +68 -0
- package/payload/platform/services/claude-session-manager/dist/url-capture.js.map +1 -0
- package/payload/platform/services/claude-session-manager/package.json +22 -0
- package/payload/platform/templates/account.json +12 -0
- package/payload/platform/templates/agents/admin/AGENTS.md +12 -0
- package/payload/platform/templates/agents/admin/IDENTITY.md +320 -0
- package/payload/platform/templates/agents/admin/LEARNINGS.md +3 -0
- package/payload/platform/templates/agents/admin/SOUL.md +23 -0
- package/payload/platform/templates/agents/public/IDENTITY.md +56 -0
- package/payload/platform/templates/agents/public/SOUL.md +19 -0
- package/payload/platform/templates/agents/public/config.json +9 -0
- package/payload/platform/templates/specialists/.claude-plugin/plugin.json +4 -0
- package/payload/platform/templates/specialists/agents/content-producer.md +104 -0
- package/payload/platform/templates/specialists/agents/database-operator.md +199 -0
- package/payload/platform/templates/specialists/agents/personal-assistant.md +209 -0
- package/payload/platform/templates/specialists/agents/project-manager.md +132 -0
- package/payload/platform/templates/specialists/agents/research-assistant.md +115 -0
- package/payload/platform/templates/systemd/edge.service.template +38 -0
- package/payload/platform/tsconfig.base.json +18 -0
- package/payload/premium-plugins/real-agency/BUNDLE.md +44 -0
- package/payload/premium-plugins/real-agency/agents/buyer-enquiry/IDENTITY.md +13 -0
- package/payload/premium-plugins/real-agency/agents/buyer-enquiry/SOUL.md +9 -0
- package/payload/premium-plugins/real-agency/agents/buyer-enquiry/template.json +9 -0
- package/payload/premium-plugins/real-agency/agents/compliance.md +303 -0
- package/payload/premium-plugins/real-agency/agents/negotiator.md +145 -0
- package/payload/premium-plugins/real-agency/agents/valuer.md +140 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/PLUGIN.md +36 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/commands/make-brochure.md +11 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/a4-print-documents/SKILL.md +478 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/brand-design/SKILL.md +192 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/make-brochure/SKILL.md +354 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/make-brochure/references/seller-brief-template.md +115 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/SKILL.md +119 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/references/build.md +270 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/references/copy.md +211 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/references/images.md +166 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/references/page-landing.md +376 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/references/page.html +1288 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/references/placeholders.md +250 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/references/registers.md +47 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/references/seller-brief.md +56 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/references/structure.md +249 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-brochure/references/template.html +2370 -0
- package/payload/premium-plugins/real-agency/plugins/brochures/skills/property-extract/SKILL.md +372 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/PLUGIN.md +35 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-feedback/SKILL.md +109 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-management/SKILL.md +42 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-management/references/buyer-qualification-questions.md +16 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-management/references/buyer-qualification.md +59 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-management/references/buyer-scripts.md +63 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-management/references/buyer-working-scripts.md +54 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-management/references/feedback-collection.md +42 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-management/references/offer-capture.md +38 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-management/references/viewing-booking.md +32 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-management/references/viewing-management.md +52 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-seller-guides/SKILL.md +407 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-seller-guides/references/care-fees-guide.md +68 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-seller-guides/references/divorce-sales-guide.md +61 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-seller-guides/references/downsizing-guide.md +45 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-seller-guides/references/first-time-buyers.md +92 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-seller-guides/references/first-time-sellers.md +78 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-seller-guides/references/probate-guide.md +53 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/buyer-seller-guides/references/upsizing-guide.md +41 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/property-enquiry/SKILL.md +126 -0
- package/payload/premium-plugins/real-agency/plugins/buyers/skills/viewing-management/SKILL.md +111 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/PLUGIN.md +34 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/SKILL.md +133 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/references/buy-back-your-time.md +37 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/references/firewave-gost-scorecards.md +14 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/references/keller-org-model.md +17 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/references/lencioni-team-models.md +22 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/references/listing-management-system.md +11 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/references/net-figure-form.md +11 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/references/serhant-bizinbox-notes.md +13 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/references/team-roles-commission.md +14 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/references/va-2026-ops.md +43 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-growth/references/wingman-structure.md +13 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-operations/SKILL.md +32 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-operations/references/crm-systems.md +57 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-operations/references/hiring-guide.md +59 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-operations/references/impact-framework.md +47 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-operations/references/minutes-equal-money.md +55 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/business-operations/references/team-management.md +48 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/exp-partnership/SKILL.md +52 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/exp-partnership/references/12-reasons.md +39 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/exp-partnership/references/95-5-system.md +66 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/exp-partnership/references/agent-attraction-scripts.md +90 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/exp-partnership/references/business-partnership.md +92 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/exp-partnership/references/exp-model-overview.md +66 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/exp-partnership/references/model-comparison.md +66 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/exp-partnership/references/revenue-share-explained.md +57 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/SKILL.md +117 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/attraction-agent-notes.md +31 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/attraction-agent.md +58 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/authenticity-boundaries.md +28 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/become-a-brand-leader-notes.md +19 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/blast-formula.md +42 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/brand-leader.md +48 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/brand-strategy-system.md +59 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/content-engine.md +49 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/firewave-blast-and-blogging.md +23 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/gary-v-content.md +52 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/gary-v-principles.md +20 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/oversubscribed-positioning.md +18 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/platforms.md +41 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/priestley-oversubscribed.md +54 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/storeys-style-examples.md +25 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/personal-branding/references/visual-identity.md +27 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/PLUGIN.md +55 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/agent-performance/SKILL.md +371 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/agent-performance/references/atomic-habits.md +52 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/agent-performance/references/daily-routine-scorecard.md +104 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/agent-performance/references/hp6-model.md +63 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/agent-performance/references/twelve-week-year.md +71 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/bespoke-coaching/SKILL.md +36 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/bespoke-coaching/references/coaching-boundaries.md +56 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/bespoke-coaching/references/feedback-framework.md +61 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/bespoke-coaching/references/performance-framework.md +109 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/coaching-toolkit/SKILL.md +421 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/coaching-toolkit/references/coaching-exercises.md +86 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/coaching-toolkit/references/goal-setting.md +78 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/coaching-toolkit/references/one-to-one-framework.md +92 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/coaching-toolkit/references/soi-workbook.md +103 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/serhant-training/SKILL.md +410 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/serhant-training/references/agent-training-guide.md +70 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/serhant-training/references/business-in-a-box.md +72 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/serhant-training/references/buyers-guide.md +53 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/serhant-training/references/codo-method.md +72 -0
- package/payload/premium-plugins/real-agency/plugins/estate-coaching/skills/serhant-training/references/website-planning-guide.md +79 -0
- package/payload/premium-plugins/real-agency/plugins/estate-onboarding/PLUGIN.md +31 -0
- package/payload/premium-plugins/real-agency/plugins/estate-onboarding/skills/bootstrap/SKILL.md +26 -0
- package/payload/premium-plugins/real-agency/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +63 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/PLUGIN.md +34 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/negotiation/SKILL.md +35 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/negotiation/references/deal-saving.md +47 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/negotiation/references/negotiation-deep-guide.md +64 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/negotiation/references/negotiation-prep-principles.md +29 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/negotiation/references/negotiation-techniques.md +42 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/negotiation/references/offer-presentation.md +43 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-closer/SKILL.md +24 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-closer/references/serhant-emotion-stages.md +36 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-discovery/SKILL.md +30 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-discovery/references/chris-voss-discovery.md +88 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-discovery/references/firewave-gost-journey.md +68 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-discovery/references/phil-jones-openers.md +78 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-discovery/references/pre-listing-checklist.md +77 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-discovery/references/serhant-improv.md +22 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-discovery/references/tom-ferry-discovery.md +103 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-discovery/references/vendor-motivation-competitor.md +52 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-negotiation/SKILL.md +29 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-negotiation/references/chris-voss-negotiation.md +70 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-negotiation/references/phil-jones-price-words.md +40 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-negotiation/references/serhant-negotiation-plus.md +55 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-negotiation/references/tom-panos-commission-pricing.md +57 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-negotiation/references/tony-morris-questioning.md +54 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-progression/SKILL.md +27 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-progression/references/conveyancing-guide.md +54 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/sales-progression/references/transaction-tracking.md +66 -0
- package/payload/premium-plugins/real-agency/plugins/estate-teaching/PLUGIN.md +31 -0
- package/payload/premium-plugins/real-agency/plugins/estate-teaching/skills/content-directory/SKILL.md +39 -0
- package/payload/premium-plugins/real-agency/plugins/estate-teaching/skills/content-directory/references/module-delivery.md +65 -0
- package/payload/premium-plugins/real-agency/plugins/estate-teaching/skills/content-directory/references/progress-tracking.md +47 -0
- package/payload/premium-plugins/real-agency/plugins/leads/PLUGIN.md +32 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/SKILL.md +137 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/buyer-search-letter.md +28 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/buyer-search-letters.md +37 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/database-reactivation.md +30 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/email-nurture-sequences.md +45 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/facebook-referrals.md +30 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/firewave-email-nurture-sequences.md +41 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/keller-33-touch.md +34 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/neighbour-letters.md +31 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/neighbour-notification-letter.md +20 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/ofi-follow-up-dialogue.md +22 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/ofi-follow-up.md +26 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/serhant-three-fs-plus.md +21 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/sharran-10x10x10.md +18 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/sms-templates.md +40 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/sphere-of-influence-notes.md +34 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/sphere-of-influence.md +60 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/lead-nurturing/references/tom-panos-sms-templates.md +59 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/prospecting/SKILL.md +33 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/prospecting/references/database-matching.md +30 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/prospecting/references/database-value.md +53 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/prospecting/references/prospecting-dialogues.md +24 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/prospecting/references/reactivation.md +34 -0
- package/payload/premium-plugins/real-agency/plugins/listings/PLUGIN.md +33 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/home-preparation/SKILL.md +28 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/home-preparation/references/kerb-appeal.md +38 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/home-preparation/references/photo-day.md +59 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/home-preparation/references/situational-tips.md +50 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/home-preparation/references/staging-guide.md +52 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-presentation/SKILL.md +286 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-presentation/references/booking-script.md +51 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-presentation/references/objection-scripts.md +193 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-presentation/references/penhaul-presentation.md +123 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-presentation/references/pre-listing-kit.md +139 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-presentation/references/set-to-sell.md +55 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-presentation/references/sharran-frameworks.md +107 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/property-marketing/SKILL.md +337 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/property-marketing/references/auction-report-template.md +41 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/property-marketing/references/coming-soon-campaign.md +43 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/property-marketing/references/direct-mail-templates.md +121 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/property-marketing/references/eoi-form-template.md +62 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/property-marketing/references/monthly-scorecard.md +63 -0
- package/payload/premium-plugins/real-agency/plugins/loop/PLUGIN.md +73 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.d.ts +2 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.js +293 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/index.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.d.ts +10 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.js +88 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/crypto.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.d.ts +82 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.js +427 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/loop-api.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js +40 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +10 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.js +24 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/customer-preferences.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.d.ts +16 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.js +35 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/feedback.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.d.ts +5 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.js +19 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-deregister.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.d.ts +4 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.js +14 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-list.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.d.ts +9 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.js +60 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/key-register.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +13 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.js +41 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +9 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.js +16 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +15 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.js +11 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.d.ts +10 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.js +39 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/marketing-match.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.d.ts +9 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.js +125 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-detail.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.d.ts +18 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.js +87 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/people-search.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.d.ts +10 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.js +82 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-detail.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.d.ts +12 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.js +32 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-listed.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.d.ts +15 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.js +11 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-request.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.d.ts +16 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.js +41 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/property-search.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.d.ts +13 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.js +49 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/supplier.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.d.ts +7 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.js +19 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-availability.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.d.ts +5 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.js +32 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/team-info.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.d.ts +14 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.js +11 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-create.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +9 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.js +85 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-detail.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.d.ts +13 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.js +44 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-search.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.d.ts +14 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.js +18 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/tools/viewing-update.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/package-lock.json +2549 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/package.json +21 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/__tests__/loop-swagger.snapshot.json +26467 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/__tests__/swagger-write-coverage.test.ts +153 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/index.ts +444 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/lib/crypto.ts +105 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/lib/loop-api.ts +604 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/lib/neo4j.ts +51 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/customer-preferences.ts +66 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/feedback.ts +86 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/key-deregister.ts +27 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/key-list.ts +19 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/key-register.ts +95 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/marketing-enquiry.ts +113 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/marketing-match-batch.ts +53 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/marketing-match-request.ts +42 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/marketing-match.ts +84 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/people-detail.ts +245 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/people-search.ts +180 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/property-detail.ts +145 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/property-listed.ts +88 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/property-request.ts +42 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/property-search.ts +92 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/supplier.ts +129 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/team-availability.ts +52 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/team-info.ts +95 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/viewing-create.ts +41 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/viewing-detail.ts +171 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/viewing-search.ts +92 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/tools/viewing-update.ts +53 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/tsconfig.json +20 -0
- package/payload/premium-plugins/real-agency/plugins/loop/mcp/vitest.config.ts +9 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/PLUGIN.md +34 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/SKILL.md +42 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/references/fee-protection-and-agenda.md +28 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/references/listing-scripts.md +44 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/references/negotiation-deep-guide.md +70 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/references/price-alignment-scripts.md +33 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/references/price-alignment.md +34 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/references/scenario-scripts.md +38 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/references/seller-engagement.md +51 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/references/valuation-booking.md +76 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/references/vendor-scripts.md +63 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-communication/references/vendor-updates.md +41 -0
- package/payload/premium-plugins/real-agency/plugins/vendors/skills/vendor-updates/SKILL.md +153 -0
- package/payload/premium-plugins/teaching/PLUGIN.md +57 -0
- package/payload/premium-plugins/teaching/skills/interactive-tutor/SKILL.md +59 -0
- package/payload/premium-plugins/teaching/skills/interactive-tutor/references/assessment.md +70 -0
- package/payload/premium-plugins/teaching/skills/interactive-tutor/references/classroom-conduct.md +43 -0
- package/payload/premium-plugins/teaching/skills/interactive-tutor/references/teaching-modes.md +83 -0
- package/payload/premium-plugins/teaching/skills/lesson-planner/SKILL.md +48 -0
- package/payload/premium-plugins/teaching/skills/lesson-planner/references/context-gathering.md +41 -0
- package/payload/premium-plugins/teaching/skills/lesson-planner/references/plan-structure.md +94 -0
- package/payload/premium-plugins/teaching/skills/study-pack-builder/SKILL.md +52 -0
- package/payload/premium-plugins/teaching/skills/study-pack-builder/references/disaggregation.md +49 -0
- package/payload/premium-plugins/teaching/skills/study-pack-builder/references/materials.md +116 -0
- package/payload/premium-plugins/writer-craft/PLUGIN.md +87 -0
- package/payload/premium-plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +92 -0
- package/payload/premium-plugins/writer-craft/skills/citation-style/SKILL.md +94 -0
- package/payload/premium-plugins/writer-craft/skills/citation-style/references/book-and-chapter-models.md +77 -0
- package/payload/premium-plugins/writer-craft/skills/citation-style/references/citation-rules.md +103 -0
- package/payload/premium-plugins/writer-craft/skills/citation-style/references/journal-article-models.md +74 -0
- package/payload/premium-plugins/writer-craft/skills/citation-style/references/other-source-models.md +146 -0
- package/payload/premium-plugins/writer-craft/skills/citation-style/references/reference-list-rules.md +70 -0
- package/payload/premium-plugins/writer-craft/skills/editorial-practice/SKILL.md +108 -0
- package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/copyediting.md +73 -0
- package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/developmental-editing.md +85 -0
- package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/genre-specific-editing.md +78 -0
- package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/line-editing.md +55 -0
- package/payload/premium-plugins/writer-craft/skills/editorial-practice/references/self-editing.md +89 -0
- package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/SKILL.md +114 -0
- package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/audience-analysis.md +73 -0
- package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/crafting-persuasive-story.md +76 -0
- package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/persuasion-case-studies.md +67 -0
- package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling/references/transformation-framework.md +86 -0
- package/payload/premium-plugins/writer-craft/skills/point-of-view/SKILL.md +97 -0
- package/payload/premium-plugins/writer-craft/skills/point-of-view/references/indirect-narration.md +72 -0
- package/payload/premium-plugins/writer-craft/skills/point-of-view/references/pov-types-and-voice.md +91 -0
- package/payload/premium-plugins/writer-craft/skills/point-of-view/references/protagonist-filter.md +71 -0
- package/payload/premium-plugins/writer-craft/skills/point-of-view/references/tense-and-person.md +85 -0
- package/payload/premium-plugins/writer-craft/skills/prose-craft/SKILL.md +100 -0
- package/payload/premium-plugins/writer-craft/skills/prose-craft/references/punctuation-and-grammar.md +72 -0
- package/payload/premium-plugins/writer-craft/skills/prose-craft/references/repetition.md +71 -0
- package/payload/premium-plugins/writer-craft/skills/prose-craft/references/sound-and-rhythm.md +64 -0
- package/payload/premium-plugins/writer-craft/skills/prose-craft/references/word-economy.md +93 -0
- package/payload/premium-plugins/writer-craft/skills/reader-engagement/SKILL.md +100 -0
- package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/cause-effect-setup-payoff.md +79 -0
- package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/conflict-escalation.md +81 -0
- package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/hooking-readers.md +67 -0
- package/payload/premium-plugins/writer-craft/skills/reader-engagement/references/neurochemistry-of-engagement.md +94 -0
- package/payload/premium-plugins/writer-craft/skills/review-manuscript/SKILL.md +111 -0
- package/payload/premium-plugins/writer-craft/skills/review-manuscript/references/review-manuscript-checklist.md +119 -0
- package/payload/premium-plugins/writer-craft/skills/review-prose/SKILL.md +99 -0
- package/payload/premium-plugins/writer-craft/skills/review-prose/references/prose-review-checklist.md +112 -0
- package/payload/premium-plugins/writer-craft/skills/review-scene/SKILL.md +99 -0
- package/payload/premium-plugins/writer-craft/skills/review-scene/references/scene-analysis-framework.md +95 -0
- package/payload/premium-plugins/writer-craft/skills/story-architecture/SKILL.md +106 -0
- package/payload/premium-plugins/writer-craft/skills/story-architecture/references/blueprinting-and-scene-cards.md +118 -0
- package/payload/premium-plugins/writer-craft/skills/story-architecture/references/inner-issue-and-protagonist-goal.md +66 -0
- package/payload/premium-plugins/writer-craft/skills/story-architecture/references/misbelief-desire-worldview.md +87 -0
- package/payload/premium-plugins/writer-craft/skills/story-architecture/references/origin-scenes-and-escalation.md +82 -0
- package/payload/premium-plugins/writer-craft/skills/story-blueprint/SKILL.md +133 -0
- package/payload/premium-plugins/writer-craft/skills/story-blueprint/references/blueprinting-exercises.md +118 -0
- package/payload/premium-plugins/writer-craft/skills/story-blueprint/references/blueprinting-process.md +128 -0
- package/payload/server/adminuser-self-heal-QAWOZ3JV.js +45 -0
- package/payload/server/chunk-5FM432JB.js +4148 -0
- package/payload/server/chunk-6S5JTXAN.js +1544 -0
- package/payload/server/chunk-JSBRDJBE.js +30 -0
- package/payload/server/chunk-RNW625CL.js +759 -0
- package/payload/server/cloudflare-task-tracker-VC7QVU5H.js +22 -0
- package/payload/server/maxy-edge.js +1021 -0
- package/payload/server/package.json +13 -0
- package/payload/server/public/assets/Checkbox-C6ZCsPvl.js +1 -0
- package/payload/server/public/assets/_baseFor-BHtDrjIo.js +1 -0
- package/payload/server/public/assets/admin-CWMpccrR.css +1 -0
- package/payload/server/public/assets/admin-DVGJmN-k.js +216 -0
- package/payload/server/public/assets/arc-DMDAZHAN.js +1 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-COhEvUpo.js +1 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-DwN6H0y2.js +36 -0
- package/payload/server/public/assets/array-DetWRiSa.js +1 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-TUk_F7H6.js +132 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-CTjGko0X.js +10 -0
- package/payload/server/public/assets/channel-Cv-65bLZ.js +1 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-Di4bO8ir.js +1 -0
- package/payload/server/public/assets/chunk-336JU56O-DulT46bV.js +2 -0
- package/payload/server/public/assets/chunk-426QAEUC-BwKj8yqp.js +1 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-DyEhFk-Z.js +1 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-CewO8YaZ.js +206 -0
- package/payload/server/public/assets/chunk-55IACEB6-BRJOZLpU.js +1 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-B3IWYz-k.js +62 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-DyiDEtXY.js +2 -0
- package/payload/server/public/assets/chunk-67CJDMHE-BG6-9r6c.js +1 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-BvMbitX7.js +1 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-CE8mGBD5.js +1 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-DP7LTBll.js +1 -0
- package/payload/server/public/assets/chunk-CIAEETIT-VfnIdN-h.js +1 -0
- package/payload/server/public/assets/chunk-DD-I1_y5.js +1 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-B3u7wU36.js +1 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-BesS5YY4.js +10 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-w-yBZsN2.js +15 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-f9cFywhd.js +1 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-C5_hbB6H.js +122 -0
- package/payload/server/public/assets/chunk-K5T4RW27-B_ZUrFUq.js +94 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-CcWTvRlI.js +1 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-D-5-peQw.js +1 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-B4Z5L25I.js +1 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-CrL4rhBa.js +231 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-CWh_0JsP.js +1 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-CQpbcqRS.js +70 -0
- package/payload/server/public/assets/chunk-X2U36JSP-1HG7T4gX.js +1 -0
- package/payload/server/public/assets/chunk-XPW4576I-m1Y_r88I.js +32 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-boN5wjX9.js +1 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-D6CiPO0Q.js +1 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-wQ2-BRyB.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-B_YLNNHy.js +1 -0
- package/payload/server/public/assets/clone-VLK-GPZZ.js +1 -0
- package/payload/server/public/assets/cormorant-cyrillic-300-normal-CzPHYadL.woff +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-300-normal-DFUoTmrg.woff2 +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-400-normal-C8QS47vb.woff2 +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-400-normal-D3EsxgFc.woff +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-500-normal-B7dJQtg-.woff +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-500-normal-BLlg2W5x.woff2 +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-ext-300-normal-BXl3lXsi.woff2 +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-ext-300-normal-DmxSOTe3.woff +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-ext-400-normal-Bgrpe4p1.woff +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-ext-400-normal-BlcaxZtM.woff2 +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-ext-500-normal-CdQuyvtc.woff +0 -0
- package/payload/server/public/assets/cormorant-cyrillic-ext-500-normal-pZw22qtS.woff2 +0 -0
- package/payload/server/public/assets/cormorant-latin-300-normal-CJ5dfen0.woff2 +0 -0
- package/payload/server/public/assets/cormorant-latin-300-normal-DQZObO_3.woff +0 -0
- package/payload/server/public/assets/cormorant-latin-400-normal-BGH8Vunh.woff2 +0 -0
- package/payload/server/public/assets/cormorant-latin-400-normal-C3_-2Ua-.woff +0 -0
- package/payload/server/public/assets/cormorant-latin-500-normal-Dj3SQ6fR.woff +0 -0
- package/payload/server/public/assets/cormorant-latin-500-normal-EBdSCOD3.woff2 +0 -0
- package/payload/server/public/assets/cormorant-latin-ext-300-normal-CkiUx0UG.woff +0 -0
- package/payload/server/public/assets/cormorant-latin-ext-300-normal-De3D72RL.woff2 +0 -0
- package/payload/server/public/assets/cormorant-latin-ext-400-normal-DuQ88yz3.woff2 +0 -0
- package/payload/server/public/assets/cormorant-latin-ext-400-normal-DuXFa1Dr.woff +0 -0
- package/payload/server/public/assets/cormorant-latin-ext-500-normal-AH9qog1s.woff2 +0 -0
- package/payload/server/public/assets/cormorant-latin-ext-500-normal-DAuUCO41.woff +0 -0
- package/payload/server/public/assets/cormorant-vietnamese-300-normal-BVqIp_mg.woff2 +0 -0
- package/payload/server/public/assets/cormorant-vietnamese-300-normal-CEMS9Pw-.woff +0 -0
- package/payload/server/public/assets/cormorant-vietnamese-400-normal-C-RiYxEf.woff2 +0 -0
- package/payload/server/public/assets/cormorant-vietnamese-400-normal-DmUuA7Y2.woff +0 -0
- package/payload/server/public/assets/cormorant-vietnamese-500-normal-DsPuwQHi.woff2 +0 -0
- package/payload/server/public/assets/cormorant-vietnamese-500-normal-tGBW_mI7.woff +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-BhtgY3T7.js +1 -0
- package/payload/server/public/assets/cytoscape.esm-C9yNhe1u.js +321 -0
- package/payload/server/public/assets/dagre-CncXYNX1.js +1 -0
- package/payload/server/public/assets/dagre-KV5264BT-C0CcgCHW.js +4 -0
- package/payload/server/public/assets/data-Bt4Wsocg.js +1 -0
- package/payload/server/public/assets/defaultLocale-_WRwicXn.js +1 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-CkUlWbsI.js +10 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-DVZBG1Ul.js +24 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-BIb06ZkK.js +43 -0
- package/payload/server/public/assets/diagram-TYMM5635-BcT0_WR8.js +24 -0
- package/payload/server/public/assets/dist-Bd4S37oi.js +1 -0
- package/payload/server/public/assets/dm-sans-latin-400-normal-BwCSEQnW.woff +0 -0
- package/payload/server/public/assets/dm-sans-latin-400-normal-CW0RaeGs.woff2 +0 -0
- package/payload/server/public/assets/dm-sans-latin-500-normal-B9HHJjqV.woff2 +0 -0
- package/payload/server/public/assets/dm-sans-latin-500-normal-Dr3UlScf.woff +0 -0
- package/payload/server/public/assets/dm-sans-latin-ext-400-normal-BjWJ59Pq.woff +0 -0
- package/payload/server/public/assets/dm-sans-latin-ext-400-normal-BtiwyxMk.woff2 +0 -0
- package/payload/server/public/assets/dm-sans-latin-ext-500-normal-BJfUCQsA.woff2 +0 -0
- package/payload/server/public/assets/dm-sans-latin-ext-500-normal-DR84L5F-.woff +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-BHk6lxIT.js +85 -0
- package/payload/server/public/assets/flatten-BsWEYbBB.js +1 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-CjeJn490.js +162 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-BGYvX3Lv.js +292 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DeTNsAO0.js +1 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-Br4WLGzW.js +106 -0
- package/payload/server/public/assets/graph-CRSLozxc.js +1 -0
- package/payload/server/public/assets/graph-labels-CQyZQ0u6.js +1 -0
- package/payload/server/public/assets/graphlib-BWd9sMeP.js +1 -0
- package/payload/server/public/assets/info-OMHHGYJF-DJJ9GlS6.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-BjZeQoNZ.js +2 -0
- package/payload/server/public/assets/init-sTEcj9YX.js +1 -0
- package/payload/server/public/assets/isEmpty-BWl67LAZ.js +1 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-POMae6Ni.js +70 -0
- package/payload/server/public/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
- package/payload/server/public/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
- package/payload/server/public/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
- package/payload/server/public/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
- package/payload/server/public/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
- package/payload/server/public/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
- package/payload/server/public/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
- package/payload/server/public/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
- package/payload/server/public/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/payload/server/public/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/payload/server/public/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- package/payload/server/public/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- package/payload/server/public/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
- package/payload/server/public/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
- package/payload/server/public/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
- package/payload/server/public/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
- package/payload/server/public/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
- package/payload/server/public/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ledtLV6x.js +139 -0
- package/payload/server/public/assets/jsx-runtime-DvanDPKm.css +1 -0
- package/payload/server/public/assets/jsx-runtime-vPsBTwUp.js +9 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-DI0T4W9z.js +89 -0
- package/payload/server/public/assets/katex-s61Rgv6l.js +257 -0
- package/payload/server/public/assets/lib-W5Jcz4p8.js +33 -0
- package/payload/server/public/assets/line-D1281H12.js +1 -0
- package/payload/server/public/assets/linear-0O14Y6uf.js +1 -0
- package/payload/server/public/assets/mermaid-parser.core-Dt95U7zk.js +4 -0
- package/payload/server/public/assets/mermaid.core-BuYSs1fU.js +11 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-CFE1lmfX.js +96 -0
- package/payload/server/public/assets/ordinal-krseTxxN.js +1 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-CGbvGkvF.js +1 -0
- package/payload/server/public/assets/page-CSUcuVW0.js +1 -0
- package/payload/server/public/assets/page-TARBO-Yr.js +50 -0
- package/payload/server/public/assets/path-B0Ik7Tu9.js +1 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-BZy8rjFn.js +1 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-BSd9xa7v.js +30 -0
- package/payload/server/public/assets/public-5r6aRXrb.js +8 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-xYehPVw5.js +7 -0
- package/payload/server/public/assets/radar-PYXPWWZC-DcfWIVXr.js +1 -0
- package/payload/server/public/assets/reduce-tk-xY6Fv.js +1 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-C6n77V1S.js +84 -0
- package/payload/server/public/assets/rough.esm-DKRO8IF-.js +1 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-CWIfeO1M.js +10 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DDv2DuMo.js +157 -0
- package/payload/server/public/assets/src-B6XdH6xq.js +1 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-BPZdmsww.js +1 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-33eC4TwE.js +1 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-BpRT_wSX.js +120 -0
- package/payload/server/public/assets/treeView-SZITEDCU-3WugwVdj.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-Cf5mDLlu.js +1 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-BG8ubucH.js +34 -0
- package/payload/server/public/assets/wardley-RL74JXVD-Bv4md4b3.js +1 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-D4E7PU1B.js +20 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Ur2xVM-c.js +7 -0
- package/payload/server/public/brand/claude.png +0 -0
- package/payload/server/public/brand/favicon.ico +0 -0
- package/payload/server/public/brand/maxy-black.png +0 -0
- package/payload/server/public/brand/maxy-horizontal.png +0 -0
- package/payload/server/public/brand/maxy-monochrome.png +0 -0
- package/payload/server/public/brand/maxy-square.png +0 -0
- package/payload/server/public/brand/maxy.png +0 -0
- package/payload/server/public/brand/star.png +0 -0
- package/payload/server/public/brand-constants.json +8 -0
- package/payload/server/public/brand-defaults.css +12 -0
- package/payload/server/public/data.html +18 -0
- package/payload/server/public/favicon.ico +0 -0
- package/payload/server/public/graph.html +19 -0
- package/payload/server/public/index.html +23 -0
- package/payload/server/public/public.html +19 -0
- package/payload/server/public/robots.txt +5 -0
- package/payload/server/public/vnc-popout.html +63 -0
- package/payload/server/server-init.cjs +115 -0
- package/payload/server/server.js +14960 -0
|
@@ -0,0 +1,1813 @@
|
|
|
1
|
+
import { initStderrTee } from "../../../../lib/mcp-stderr-tee/dist/index.js";
|
|
2
|
+
initStderrTee("memory");
|
|
3
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
|
+
import { eagerTool } from "../../../../lib/mcp-eager/dist/index.js";
|
|
5
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { int } from "neo4j-driver";
|
|
8
|
+
import { memorySearch } from "./tools/memory-search.js";
|
|
9
|
+
import { memoryRank } from "./tools/memory-rank.js";
|
|
10
|
+
import { memoryWrite } from "./tools/memory-write.js";
|
|
11
|
+
import { loadSchema } from "./lib/schema-loader.js";
|
|
12
|
+
import { buildLiveSchemaSource, defaultSchemaCypherPath, } from "./lib/live-schema-source.js";
|
|
13
|
+
import { memoryReindex } from "./tools/memory-reindex.js";
|
|
14
|
+
import { memoryIngestExtract } from "./tools/memory-ingest-extract.js";
|
|
15
|
+
import { memoryIngest } from "./tools/memory-ingest.js";
|
|
16
|
+
import { memoryArchiveWrite } from "./tools/memory-archive-write.js";
|
|
17
|
+
// Task 894: whatsapp-export-{parse,preview,insight-write} deleted. Conversation
|
|
18
|
+
// transcripts now flow through the source-agnostic `conversation-archive` skill
|
|
19
|
+
// + `memory/bin/conversation-archive-ingest.sh`, writing :ConversationArchive
|
|
20
|
+
// + :Section:Conversation chunks via memory-ingest with parentLabel='ConversationArchive'.
|
|
21
|
+
// Task 891: whatsapp-export-insight-pass deleted (Phase 2 deferred).
|
|
22
|
+
import { memoryIngestWeb } from "./tools/memory-ingest-web.js";
|
|
23
|
+
import { memoryClassify } from "./tools/memory-classify.js";
|
|
24
|
+
import { memoryUpdate } from "./tools/memory-update.js";
|
|
25
|
+
import { memoryDelete } from "./tools/memory-delete.js";
|
|
26
|
+
import { memoryFindCandidates } from "./tools/memory-find-candidates.js";
|
|
27
|
+
import { memoryRestore } from "./tools/memory-restore.js";
|
|
28
|
+
import { memoryEmptyTrash } from "./tools/memory-empty-trash.js";
|
|
29
|
+
import { memoryListAttachments } from "./tools/memory-list-attachments.js";
|
|
30
|
+
import { memoryReadAttachment } from "./tools/memory-read-attachment.js";
|
|
31
|
+
import { memoryEditAttachment } from "./tools/memory-edit-attachment.js";
|
|
32
|
+
import { memoryRenameAttachment } from "./tools/memory-rename-attachment.js";
|
|
33
|
+
import { profileRead } from "./tools/profile-read.js";
|
|
34
|
+
import { profileUpdate } from "./tools/profile-update.js";
|
|
35
|
+
import { profileDelete } from "./tools/profile-delete.js";
|
|
36
|
+
import { graphPruneDenylistAdd } from "./tools/graph-prune-denylist-add.js";
|
|
37
|
+
import { graphPruneDenylistList } from "./tools/graph-prune-denylist-list.js";
|
|
38
|
+
import { graphPruneDenylistRemove } from "./tools/graph-prune-denylist-remove.js";
|
|
39
|
+
import { conversationMemoryExpunge } from "./tools/conversation-memory-expunge.js";
|
|
40
|
+
import { conversationArchiveDeriveInsights, } from "./tools/conversation-archive-derive-insights.js";
|
|
41
|
+
import { conversationArchiveEnrichRejection } from "./tools/conversation-archive-enrich-rejection.js";
|
|
42
|
+
import { getSession, closeDriver } from "./lib/neo4j.js";
|
|
43
|
+
import { embed } from "./lib/embeddings.js";
|
|
44
|
+
import { notTrashed } from "../../../../lib/graph-trash/dist/index.js";
|
|
45
|
+
const server = new McpServer({
|
|
46
|
+
name: "maxy-memory",
|
|
47
|
+
version: "0.1.0",
|
|
48
|
+
});
|
|
49
|
+
const readOnly = process.env.READ_ONLY === "true";
|
|
50
|
+
const accountId = process.env.ACCOUNT_ID;
|
|
51
|
+
if (!accountId) {
|
|
52
|
+
throw new Error("ACCOUNT_ID environment variable is required");
|
|
53
|
+
}
|
|
54
|
+
// Load the markdown schema sidecar once at startup. Every memory-write call
|
|
55
|
+
// reads its required-property and synonym maps. If loading fails we throw —
|
|
56
|
+
// a memory server running with a broken schema is worse than one that fails
|
|
57
|
+
// to start loudly.
|
|
58
|
+
const schema = loadSchema();
|
|
59
|
+
// Live label source (Task 736). The memory MCP runs as a separate stdio
|
|
60
|
+
// process from graph-mcp, so it owns its own SchemaCache instance backed by
|
|
61
|
+
// the existing Neo4j driver. The cache refreshes every 60s and tap-fires
|
|
62
|
+
// drift detection from its emit hook. Boot does NOT block on the first
|
|
63
|
+
// refresh — `defaultDeclaredOnly` is sufficient until live joins, since
|
|
64
|
+
// declared labels cover the bootstrap labels (LocalBusiness etc.).
|
|
65
|
+
const schemaCypherPath = defaultSchemaCypherPath();
|
|
66
|
+
const liveSchemaRuntime = buildLiveSchemaSource({
|
|
67
|
+
schemaCypherPath,
|
|
68
|
+
markdownLabels: schema.markdownLabels.keys(),
|
|
69
|
+
fetcher: {
|
|
70
|
+
async labels() {
|
|
71
|
+
const session = getSession();
|
|
72
|
+
try {
|
|
73
|
+
const result = await session.run("CALL db.labels() YIELD label RETURN label");
|
|
74
|
+
return result.records
|
|
75
|
+
.map((r) => r.get("label"))
|
|
76
|
+
.filter((v) => typeof v === "string");
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
await session.close();
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
async relationshipTypes() {
|
|
83
|
+
const session = getSession();
|
|
84
|
+
try {
|
|
85
|
+
const result = await session.run("CALL db.relationshipTypes() YIELD relationshipType RETURN relationshipType");
|
|
86
|
+
return result.records
|
|
87
|
+
.map((r) => r.get("relationshipType"))
|
|
88
|
+
.filter((v) => typeof v === "string");
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
await session.close();
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
// Boot drift fires once the first refresh resolves. We do not await — the
|
|
97
|
+
// validator handles boot races by accepting declared labels (which include
|
|
98
|
+
// the bootstrap set) until live joins. Drift logs land in server.log as
|
|
99
|
+
// soon as the snapshot lands, with no impact on serving requests.
|
|
100
|
+
liveSchemaRuntime.ready.then(() => {
|
|
101
|
+
process.stderr.write(`[schema-validator] using-cache cacheAgeMs=0 ready=${liveSchemaRuntime.source.liveReady()}\n`);
|
|
102
|
+
});
|
|
103
|
+
const validator = {
|
|
104
|
+
schema,
|
|
105
|
+
liveSource: liveSchemaRuntime.source,
|
|
106
|
+
};
|
|
107
|
+
const userId = process.env.USER_ID; // Optional — present for admin sessions with users.json auth
|
|
108
|
+
// Scope filtering: comma-separated list of allowed scopes (e.g. "public,shared").
|
|
109
|
+
// When set, memory-search only returns nodes whose scope is in this list.
|
|
110
|
+
// When absent (admin), no scope filtering is applied.
|
|
111
|
+
const allowedScopes = process.env.ALLOWED_SCOPES
|
|
112
|
+
? process.env.ALLOWED_SCOPES.split(",").map((s) => s.trim()).filter(Boolean)
|
|
113
|
+
: undefined;
|
|
114
|
+
// Per-handler session resolution (Task 740). Module-load env capture was
|
|
115
|
+
// wrong: when the admin agent didn't set SESSION_ID on MCP spawn, `sessionId`
|
|
116
|
+
// was undefined for the entire process lifetime — every subsequent
|
|
117
|
+
// `createdBySession` write was empty. Read per-handler so the env value
|
|
118
|
+
// (now set in claude-agent.ts:3107 baseEnv) is observed at call time, and
|
|
119
|
+
// allow per-call override via tool argument when an agent has better info.
|
|
120
|
+
function resolveSessionId(override) {
|
|
121
|
+
if (override && override.trim())
|
|
122
|
+
return override.trim();
|
|
123
|
+
const fromEnv = process.env.SESSION_ID;
|
|
124
|
+
return fromEnv && fromEnv.trim() ? fromEnv.trim() : undefined;
|
|
125
|
+
}
|
|
126
|
+
// Per-agent knowledge scoping: when set, memory-search only returns nodes whose
|
|
127
|
+
// `agents` array contains this slug. For public agents, set via env var (server-level
|
|
128
|
+
// enforcement). For admin queries, passed as an optional tool param.
|
|
129
|
+
const envAgentSlug = process.env.AGENT_SLUG || undefined;
|
|
130
|
+
// Keyword subscriptions: comma-separated list of keywords for BM25-based reactive
|
|
131
|
+
// knowledge inclusion. When set, memory-search runs a BM25 query per keyword and
|
|
132
|
+
// unions results with directly-tagged nodes. Capped at 5 for Pi performance.
|
|
133
|
+
const MAX_KEYWORD_SUBSCRIPTIONS = 5;
|
|
134
|
+
const envKeywordSubscriptions = process.env.KNOWLEDGE_KEYWORDS
|
|
135
|
+
? process.env.KNOWLEDGE_KEYWORDS.split(",").map((s) => s.trim().toLowerCase()).filter(Boolean).slice(0, MAX_KEYWORD_SUBSCRIPTIONS)
|
|
136
|
+
: undefined;
|
|
137
|
+
// Output character budget for memory-search results. Claude Code's tool result token
|
|
138
|
+
// limit is roughly 100K chars; 80K leaves headroom for MCP framing and avoids the
|
|
139
|
+
// dump-to-file cascade that forces multi-step Bash parsing.
|
|
140
|
+
const OUTPUT_CHAR_BUDGET = 80_000;
|
|
141
|
+
/** Format a single search result. When includeRelated is false, related nodes are omitted. */
|
|
142
|
+
function formatResult(r, includeRelated) {
|
|
143
|
+
let text = `[${r.labels.join(", ")}] (id: ${r.nodeId}) (score: ${r.score.toFixed(3)})\n`;
|
|
144
|
+
for (const [k, v] of Object.entries(r.properties)) {
|
|
145
|
+
text += ` ${k}: ${String(v)}\n`;
|
|
146
|
+
}
|
|
147
|
+
if (includeRelated && r.related.length > 0) {
|
|
148
|
+
text += " Related:\n";
|
|
149
|
+
for (const rel of r.related) {
|
|
150
|
+
const arrow = rel.direction === "outgoing" ? `--[${rel.relationship}]-->` : `<--[${rel.relationship}]--`;
|
|
151
|
+
text += ` ${arrow} [${rel.labels.join(", ")}]`;
|
|
152
|
+
const relProps = Object.entries(rel.properties)
|
|
153
|
+
.filter(([k]) => k !== "embedding" && k !== "accountId")
|
|
154
|
+
.map(([k, v]) => `${k}: ${String(v)}`)
|
|
155
|
+
.join(", ");
|
|
156
|
+
if (relProps)
|
|
157
|
+
text += ` {${relProps}}`;
|
|
158
|
+
text += "\n";
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return text;
|
|
162
|
+
}
|
|
163
|
+
eagerTool(server, "memory-search", "Search the knowledge graph using semantic vector search with graph traversal. Returns relevant nodes and their relationships.", {
|
|
164
|
+
query: z.string().describe("Natural language search query"),
|
|
165
|
+
labels: z
|
|
166
|
+
.array(z.string())
|
|
167
|
+
.optional()
|
|
168
|
+
.describe("Filter by node labels (e.g. Question, Service, DefinedTerm, Review, Person)"),
|
|
169
|
+
limit: z
|
|
170
|
+
.number()
|
|
171
|
+
.optional()
|
|
172
|
+
.describe("Maximum number of results (default 10)"),
|
|
173
|
+
expandHops: z
|
|
174
|
+
.number()
|
|
175
|
+
.optional()
|
|
176
|
+
.describe("Graph traversal depth for related nodes (default 1). Use 0 for listing/inventory queries (node properties only, compact output). Use 1 for deep context queries (includes related nodes — can produce large output for nodes with many relationships)."),
|
|
177
|
+
keywords: z
|
|
178
|
+
.array(z.string())
|
|
179
|
+
.optional()
|
|
180
|
+
.describe("Filter KnowledgeDocument results to those containing these topic keywords"),
|
|
181
|
+
keywordMatch: z
|
|
182
|
+
.enum(["any", "all"])
|
|
183
|
+
.optional()
|
|
184
|
+
.describe("Keyword match mode: 'any' (default, OR — matches docs with any listed keyword) or 'all' (AND — must have every keyword)"),
|
|
185
|
+
agentSlug: z
|
|
186
|
+
.string()
|
|
187
|
+
.optional()
|
|
188
|
+
.describe("Filter to nodes tagged for this agent slug (nodes where slug is in the agents array). For admin use — public agents use server-level env var."),
|
|
189
|
+
}, async ({ query, labels, limit, expandHops, keywords, keywordMatch, agentSlug: toolAgentSlug }) => {
|
|
190
|
+
// Env var takes precedence over tool param (security: public agent server-level enforcement)
|
|
191
|
+
const effectiveAgentSlug = envAgentSlug ?? toolAgentSlug;
|
|
192
|
+
try {
|
|
193
|
+
const results = await memorySearch({
|
|
194
|
+
query,
|
|
195
|
+
labels,
|
|
196
|
+
accountId,
|
|
197
|
+
limit,
|
|
198
|
+
expandHops,
|
|
199
|
+
allowedScopes,
|
|
200
|
+
keywords,
|
|
201
|
+
keywordMatch,
|
|
202
|
+
agentSlug: effectiveAgentSlug,
|
|
203
|
+
keywordSubscriptions: envKeywordSubscriptions,
|
|
204
|
+
});
|
|
205
|
+
if (results.length === 0) {
|
|
206
|
+
return {
|
|
207
|
+
content: [
|
|
208
|
+
{
|
|
209
|
+
type: "text",
|
|
210
|
+
text: "No results found for this query.",
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const formatted = results.map((r) => formatResult(r, true));
|
|
216
|
+
const separator = "\n---\n";
|
|
217
|
+
let output = formatted.join(separator);
|
|
218
|
+
let droppedRelated = 0;
|
|
219
|
+
let droppedResults = 0;
|
|
220
|
+
if (output.length > OUTPUT_CHAR_BUDGET) {
|
|
221
|
+
const originalChars = output.length;
|
|
222
|
+
// Pass 1: strip related nodes from lowest-scored results first.
|
|
223
|
+
// Results are already sorted by score descending, so we iterate
|
|
224
|
+
// from the tail (lowest score) toward the head.
|
|
225
|
+
for (let i = formatted.length - 1; i >= 0 && output.length > OUTPUT_CHAR_BUDGET; i--) {
|
|
226
|
+
if (results[i].related.length > 0) {
|
|
227
|
+
droppedRelated += results[i].related.length;
|
|
228
|
+
formatted[i] = formatResult(results[i], false);
|
|
229
|
+
output = formatted.join(separator);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Pass 2: if still over budget, drop entire results from the tail.
|
|
233
|
+
while (formatted.length > 0 && output.length > OUTPUT_CHAR_BUDGET) {
|
|
234
|
+
formatted.pop();
|
|
235
|
+
droppedResults++;
|
|
236
|
+
output = formatted.join(separator);
|
|
237
|
+
}
|
|
238
|
+
const notice = `\n\n[Truncated: ${droppedRelated} related nodes removed` +
|
|
239
|
+
(droppedResults > 0 ? `, ${droppedResults} results omitted` : "") +
|
|
240
|
+
`. Use expandHops: 0 for compact listing, or reduce limit.]`;
|
|
241
|
+
output += notice;
|
|
242
|
+
process.stderr.write(`[memory-search] [${accountId}] output truncated: ${originalChars} → ${output.length}, ` +
|
|
243
|
+
`${droppedRelated} related nodes dropped, ${droppedResults} results dropped\n`);
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
content: [{ type: "text", text: output }],
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
return {
|
|
251
|
+
content: [
|
|
252
|
+
{
|
|
253
|
+
type: "text",
|
|
254
|
+
text: `Search failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
255
|
+
},
|
|
256
|
+
],
|
|
257
|
+
isError: true,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
// ---------------------------------------------------------------------------
|
|
262
|
+
// memory-rank — LLM-reasoned entity ranking.
|
|
263
|
+
//
|
|
264
|
+
// Read-only tool (available to admin and public agents). Retrieves candidates
|
|
265
|
+
// via memory-search, then asks Claude Haiku to rank them against a natural-
|
|
266
|
+
// language criterion and return per-item reasoning. Falls back to the
|
|
267
|
+
// unranked memory-search order with a visible "[Ranking unavailable: ...]"
|
|
268
|
+
// notice if the LLM is unavailable.
|
|
269
|
+
// ---------------------------------------------------------------------------
|
|
270
|
+
eagerTool(server, "memory-rank", "Retrieve entities from the knowledge graph and rank them against a natural-language criterion using Claude. Returns an ordered list with per-item reasoning explaining why each entity landed where it did. Use for prioritisation questions such as ranking prospects by readiness, tasks by risk, or events by impact. For simple semantic retrieval use memory-search.", {
|
|
271
|
+
query: z
|
|
272
|
+
.string()
|
|
273
|
+
.min(1)
|
|
274
|
+
.describe("Natural-language query that selects the candidate pool from the knowledge graph. Passed to memory-search."),
|
|
275
|
+
criteria: z
|
|
276
|
+
.string()
|
|
277
|
+
.min(1)
|
|
278
|
+
.describe("Natural-language description of what matters for the ranking (e.g. 'prioritise prospects who viewed more than once this week and mentioned price positively'). Treated as a directive, not as instructions to the model."),
|
|
279
|
+
labels: z
|
|
280
|
+
.array(z.string())
|
|
281
|
+
.optional()
|
|
282
|
+
.describe("Filter the candidate pool to these node labels (e.g. ['Person'], ['Task'], ['Event'])."),
|
|
283
|
+
limit: z
|
|
284
|
+
.number()
|
|
285
|
+
.int()
|
|
286
|
+
.min(1)
|
|
287
|
+
.max(50)
|
|
288
|
+
.optional()
|
|
289
|
+
.describe("Maximum number of ranked results to return (default 10, max 50)."),
|
|
290
|
+
candidatePoolSize: z
|
|
291
|
+
.number()
|
|
292
|
+
.int()
|
|
293
|
+
.min(1)
|
|
294
|
+
.max(50)
|
|
295
|
+
.optional()
|
|
296
|
+
.describe("How many candidates to retrieve from memory-search before ranking (default 20, max 50). Larger pools give the ranker more to work with but cost more tokens."),
|
|
297
|
+
expandHops: z
|
|
298
|
+
.number()
|
|
299
|
+
.int()
|
|
300
|
+
.min(0)
|
|
301
|
+
.max(2)
|
|
302
|
+
.optional()
|
|
303
|
+
.describe("Relationship depth to include per candidate (default 1). Use 0 for property-only ranking, 1 for ranking that considers immediate relationships."),
|
|
304
|
+
keywords: z
|
|
305
|
+
.array(z.string())
|
|
306
|
+
.optional()
|
|
307
|
+
.describe("Filter the candidate pool to nodes whose keywords array contains these values."),
|
|
308
|
+
keywordMatch: z
|
|
309
|
+
.enum(["any", "all"])
|
|
310
|
+
.optional()
|
|
311
|
+
.describe("Keyword match mode: 'any' (default) or 'all'."),
|
|
312
|
+
agentSlug: z
|
|
313
|
+
.string()
|
|
314
|
+
.optional()
|
|
315
|
+
.describe("Filter to nodes tagged for this agent slug. For admin use — public agents use server-level env var."),
|
|
316
|
+
}, async ({ query, criteria, labels, limit, candidatePoolSize, expandHops, keywords, keywordMatch, agentSlug: toolAgentSlug }) => {
|
|
317
|
+
const effectiveAgentSlug = envAgentSlug ?? toolAgentSlug;
|
|
318
|
+
process.stderr.write(`[memory-rank] [${accountId}] invocation query=${JSON.stringify(query.slice(0, 60))} criteria=${JSON.stringify(criteria.slice(0, 60))} pool=${candidatePoolSize ?? "default"} limit=${limit ?? "default"}\n`);
|
|
319
|
+
try {
|
|
320
|
+
const response = await memoryRank({
|
|
321
|
+
query,
|
|
322
|
+
criteria,
|
|
323
|
+
labels,
|
|
324
|
+
accountId,
|
|
325
|
+
limit,
|
|
326
|
+
candidatePoolSize,
|
|
327
|
+
expandHops,
|
|
328
|
+
allowedScopes,
|
|
329
|
+
keywords,
|
|
330
|
+
keywordMatch,
|
|
331
|
+
agentSlug: effectiveAgentSlug,
|
|
332
|
+
keywordSubscriptions: envKeywordSubscriptions,
|
|
333
|
+
});
|
|
334
|
+
// Three distinct empty/near-empty cases with different meanings:
|
|
335
|
+
// 1. candidatePoolSize === 0 — memory-search found nothing. True empty result.
|
|
336
|
+
// 2. candidatePoolSize > 0, results.length === 0, no fallback — Haiku
|
|
337
|
+
// considered the candidates and said none matched the criterion. The
|
|
338
|
+
// agent must be told that candidates existed but were rejected, not
|
|
339
|
+
// that nothing was found.
|
|
340
|
+
// 3. candidatePoolSize > 0, results.length > 0 — normal ranked output
|
|
341
|
+
// (or ranked-fallback unranked output when fallbackReason is set).
|
|
342
|
+
if (response.candidatePoolSize === 0) {
|
|
343
|
+
return {
|
|
344
|
+
content: [
|
|
345
|
+
{
|
|
346
|
+
type: "text",
|
|
347
|
+
text: "No candidates found for this query.",
|
|
348
|
+
},
|
|
349
|
+
],
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
if (response.results.length === 0 && !response.fallbackReason) {
|
|
353
|
+
// Haiku ran successfully and returned rankings: []. Candidates existed
|
|
354
|
+
// but none matched the criterion. Report this honestly so the agent
|
|
355
|
+
// can relay it to the user instead of claiming nothing was found.
|
|
356
|
+
return {
|
|
357
|
+
content: [
|
|
358
|
+
{
|
|
359
|
+
type: "text",
|
|
360
|
+
text: `Considered ${response.candidatePoolSize} candidate${response.candidatePoolSize === 1 ? "" : "s"} but none matched the criterion.`,
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
const headerLines = [];
|
|
366
|
+
if (response.fallbackReason) {
|
|
367
|
+
headerLines.push(`[Ranking unavailable: ${response.fallbackReason}] — showing ${response.results.length} candidates in their original memory-search score order.`);
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
headerLines.push(`Ranked ${response.results.length} of ${response.candidatePoolSize} candidates.`);
|
|
371
|
+
if (response.hallucinated > 0) {
|
|
372
|
+
headerLines.push(`(${response.hallucinated} ranker response${response.hallucinated === 1 ? "" : "s"} referenced candidates not in the pool and were discarded.)`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
const body = response.results
|
|
376
|
+
.map((r) => {
|
|
377
|
+
const rankLine = r.rank !== undefined ? `#${r.rank} ` : "";
|
|
378
|
+
const reasoningLine = r.reasoning ? `\n reasoning: ${r.reasoning}` : "";
|
|
379
|
+
let text = `${rankLine}[${r.labels.join(", ")}] (id: ${r.nodeId}) (score: ${r.score.toFixed(3)})${reasoningLine}\n`;
|
|
380
|
+
for (const [k, v] of Object.entries(r.properties)) {
|
|
381
|
+
text += ` ${k}: ${String(v)}\n`;
|
|
382
|
+
}
|
|
383
|
+
if (r.related.length > 0) {
|
|
384
|
+
text += " Related:\n";
|
|
385
|
+
for (const rel of r.related) {
|
|
386
|
+
const arrow = rel.direction === "outgoing"
|
|
387
|
+
? `--[${rel.relationship}]-->`
|
|
388
|
+
: `<--[${rel.relationship}]--`;
|
|
389
|
+
text += ` ${arrow} [${rel.labels.join(", ")}]`;
|
|
390
|
+
const relProps = Object.entries(rel.properties)
|
|
391
|
+
.filter(([k]) => k !== "embedding" && k !== "accountId")
|
|
392
|
+
.map(([k, v]) => `${k}: ${String(v)}`)
|
|
393
|
+
.join(", ");
|
|
394
|
+
if (relProps)
|
|
395
|
+
text += ` {${relProps}}`;
|
|
396
|
+
text += "\n";
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
return text;
|
|
400
|
+
})
|
|
401
|
+
.join("\n---\n");
|
|
402
|
+
const output = `${headerLines.join("\n")}\n\n${body}`;
|
|
403
|
+
return {
|
|
404
|
+
content: [{ type: "text", text: output }],
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
catch (err) {
|
|
408
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
409
|
+
process.stderr.write(`[memory-rank] [${accountId}] unhandled error: ${msg}\n`);
|
|
410
|
+
return {
|
|
411
|
+
content: [
|
|
412
|
+
{
|
|
413
|
+
type: "text",
|
|
414
|
+
text: `Rank failed: ${msg}`,
|
|
415
|
+
},
|
|
416
|
+
],
|
|
417
|
+
isError: true,
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
// ---------------------------------------------------------------------------
|
|
422
|
+
// Task 892 — conversation-archive Phase 2: chunk-anchored insight derivation.
|
|
423
|
+
// Read-only tool. Walks :Section:Conversation chunks of one named
|
|
424
|
+
// :ConversationArchive in pages and asks Haiku (via OAuth) for the
|
|
425
|
+
// high-confidence claims. Returns operator-facing proposals with the cypher
|
|
426
|
+
// needed to wire them; the conversation-archive-enrich skill drives the
|
|
427
|
+
// per-row operator gate. The tool itself NEVER writes; idempotency lives on
|
|
428
|
+
// the MERGE-key shape (chunkElementId, kind, contentHash) encoded in each
|
|
429
|
+
// proposal's mergeCypher.
|
|
430
|
+
// ---------------------------------------------------------------------------
|
|
431
|
+
server.tool("conversation-archive-derive-insights", "Walk the :Section:Conversation chunks of one named :ConversationArchive and emit high-confidence claim proposals (mention, task, preference, observed-relationship). Read-only: the caller drives a per-row operator gate; this tool never writes. Paginates via chunkOffset + chunkLimit (default 5). Operator-triggered, never automatic.", {
|
|
432
|
+
archiveElementId: z
|
|
433
|
+
.string()
|
|
434
|
+
.describe("elementId of the :ConversationArchive the operator named (required)."),
|
|
435
|
+
chunkOffset: z
|
|
436
|
+
.number()
|
|
437
|
+
.int()
|
|
438
|
+
.nonnegative()
|
|
439
|
+
.optional()
|
|
440
|
+
.describe("Zero-based chunk offset. Default 0. Increase per page."),
|
|
441
|
+
chunkLimit: z
|
|
442
|
+
.number()
|
|
443
|
+
.int()
|
|
444
|
+
.positive()
|
|
445
|
+
.max(20)
|
|
446
|
+
.optional()
|
|
447
|
+
.describe("Chunks per page (1..20). Default 5 — small pages keep MCP calls under SDK timeout windows."),
|
|
448
|
+
}, async ({ archiveElementId, chunkOffset, chunkLimit }) => {
|
|
449
|
+
try {
|
|
450
|
+
const result = await conversationArchiveDeriveInsights({
|
|
451
|
+
accountId,
|
|
452
|
+
archiveElementId,
|
|
453
|
+
chunkOffset,
|
|
454
|
+
chunkLimit,
|
|
455
|
+
sessionId: resolveSessionId(),
|
|
456
|
+
});
|
|
457
|
+
const proposalLines = result.proposals
|
|
458
|
+
.map((p, i) => {
|
|
459
|
+
const disambig = p.disambiguation && p.disambiguation.needsResolution.length > 0
|
|
460
|
+
? ` resolve:${p.disambiguation.needsResolution.map((r) => `${r.role}="${r.displayName}"`).join(",")}`
|
|
461
|
+
: "";
|
|
462
|
+
return [
|
|
463
|
+
`Proposal ${i + 1}/${result.proposals.length}:`,
|
|
464
|
+
` chunkElementId=${p.chunkElementId}`,
|
|
465
|
+
` kind=${p.kind}`,
|
|
466
|
+
` contentHash=${p.contentHash}`,
|
|
467
|
+
` evidence="${p.evidenceSnippet}"`,
|
|
468
|
+
` proposedAction=${p.proposedAction}${disambig}`,
|
|
469
|
+
` mergeCypher=${p.mergeCypher.replace(/\n/g, " ")}`,
|
|
470
|
+
` mergeParams=${JSON.stringify(p.mergeParams)}`,
|
|
471
|
+
].join("\n");
|
|
472
|
+
})
|
|
473
|
+
.join("\n\n");
|
|
474
|
+
const header = `archiveElementId=${result.archiveElementId} title=${JSON.stringify(result.archiveTitle ?? "")} totalChunks=${result.totalChunks} walked=${result.walkedFrom}..${result.walkedTo} proposals=${result.proposals.length} proposalsRemaining=${result.proposalsRemaining} emptyChunks=${result.emptyChunkElementIds.length}`;
|
|
475
|
+
return {
|
|
476
|
+
content: [
|
|
477
|
+
{
|
|
478
|
+
type: "text",
|
|
479
|
+
text: result.proposals.length === 0
|
|
480
|
+
? `${header}\n(no high-confidence claims in this page; advance chunkOffset to walk further)`
|
|
481
|
+
: `${header}\n\n${proposalLines}`,
|
|
482
|
+
},
|
|
483
|
+
],
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
catch (err) {
|
|
487
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
488
|
+
return {
|
|
489
|
+
content: [{ type: "text", text: msg }],
|
|
490
|
+
isError: true,
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
process.stderr.write("[memory-mcp] registered tool=conversation-archive-derive-insights\n");
|
|
495
|
+
// ---------------------------------------------------------------------------
|
|
496
|
+
// Task 980 — durable rejection memory for conversation-archive-enrich.
|
|
497
|
+
// Writes to a sidecar JSONL alongside the account's state directory; the
|
|
498
|
+
// filter step in conversation-archive-derive-insights reads the same file.
|
|
499
|
+
// Modes:
|
|
500
|
+
// record — append rejection line (idempotent on duplicate keys).
|
|
501
|
+
// undo — drop matching line via atomic-rename (called after a `wire`
|
|
502
|
+
// so a later wire of a once-rejected key cleans up its rejection).
|
|
503
|
+
// ---------------------------------------------------------------------------
|
|
504
|
+
server.tool("conversation-archive-enrich-rejection", "Record or undo a per-row rejection from conversation-archive-enrich. Writes a sidecar JSONL keyed on (chunkElementId, kind, contentHash). Call with mode='record' on operator `reject`; call with mode='undo' after a successful `wire` so a later wire of a once-rejected key clears its rejection. Idempotent: duplicate records are no-ops.", {
|
|
505
|
+
archiveElementId: z
|
|
506
|
+
.string()
|
|
507
|
+
.describe("elementId of the :ConversationArchive (carried on each line for diagnostics)."),
|
|
508
|
+
chunkElementId: z
|
|
509
|
+
.string()
|
|
510
|
+
.describe("elementId of the :Section:Conversation chunk the rejection applies to."),
|
|
511
|
+
kind: z
|
|
512
|
+
.string()
|
|
513
|
+
.describe("Proposal kind — one of mention|task|preference|observed-relationship."),
|
|
514
|
+
contentHash: z
|
|
515
|
+
.string()
|
|
516
|
+
.describe("The proposal's contentHash (sha256 over kind + payload)."),
|
|
517
|
+
mode: z
|
|
518
|
+
.enum(["record", "undo"])
|
|
519
|
+
.describe("record = append rejection; undo = remove rejection (called after `wire`)."),
|
|
520
|
+
}, async ({ archiveElementId, chunkElementId, kind, contentHash, mode }) => {
|
|
521
|
+
try {
|
|
522
|
+
const result = conversationArchiveEnrichRejection({
|
|
523
|
+
accountId,
|
|
524
|
+
archiveElementId,
|
|
525
|
+
chunkElementId,
|
|
526
|
+
kind,
|
|
527
|
+
contentHash,
|
|
528
|
+
mode,
|
|
529
|
+
sessionId: resolveSessionId(),
|
|
530
|
+
});
|
|
531
|
+
const summary = `mode=${result.mode} beforeCount=${result.beforeCount} afterCount=${result.afterCount} path=${result.path}`;
|
|
532
|
+
return {
|
|
533
|
+
content: [{ type: "text", text: summary }],
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
catch (err) {
|
|
537
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
538
|
+
process.stderr.write(`[conversation-archive-enrich] rejection-tool-fail mode=${mode} chunk=${chunkElementId} reason="${msg}"\n`);
|
|
539
|
+
return {
|
|
540
|
+
content: [{ type: "text", text: msg }],
|
|
541
|
+
isError: true,
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
});
|
|
545
|
+
process.stderr.write("[memory-mcp] registered tool=conversation-archive-enrich-rejection\n");
|
|
546
|
+
if (!readOnly) {
|
|
547
|
+
eagerTool(server, "memory-write", "Create a new node in the knowledge graph with automatic embedding computation. Every node must be created with at least one relationship — call memory-search first to find target elementIds. Writes targeting :Person, :UserProfile, :AdminUser, :Organization, :LocalBusiness, :CloudflareTunnel, or :CloudflareHostname additionally require an inbound :PRODUCED edge from :Task, :Conversation, or :Message. For autonomous workflows that own a :Task lifecycle, pass the Task's elementId as `producedByTaskId`. For direct asks during a conversation, omit `producedByTaskId` — the platform auto-injects the edge from the active conversation.", {
|
|
548
|
+
labels: z
|
|
549
|
+
.array(z.string())
|
|
550
|
+
.describe("Node labels (e.g. ['Person'], ['Question'], ['DefinedTerm'])"),
|
|
551
|
+
properties: z
|
|
552
|
+
.record(z.string(), z.unknown())
|
|
553
|
+
.describe("Node properties as key-value pairs"),
|
|
554
|
+
scope: z
|
|
555
|
+
.string()
|
|
556
|
+
.describe("Visibility scope — required. Valid values: 'public', 'shared', 'admin', or 'user:{identifier}'."),
|
|
557
|
+
relationships: z
|
|
558
|
+
.array(z.object({
|
|
559
|
+
type: z.string().describe("Relationship type (e.g. HAS_PRICING, OFFERS)"),
|
|
560
|
+
direction: z.enum(["outgoing", "incoming"]),
|
|
561
|
+
targetNodeId: z.string().describe("Element ID of the target node"),
|
|
562
|
+
}))
|
|
563
|
+
.min(1)
|
|
564
|
+
.describe("Relationships to create with existing nodes. At least one is required — a node without an adjacency is noise, not knowledge."),
|
|
565
|
+
producedByTaskId: z
|
|
566
|
+
.string()
|
|
567
|
+
.optional()
|
|
568
|
+
.describe("Active Task elementId for autonomous-workflow writes. When set, an inbound :PRODUCED edge from this Task is composed into relationships before the write. Task must share the same accountId; mismatch is rejected. Omit for direct conversation asks — the platform composes the edge from the active conversation instead."),
|
|
569
|
+
}, async ({ labels, properties, scope, relationships, producedByTaskId }) => {
|
|
570
|
+
try {
|
|
571
|
+
const result = await memoryWrite({
|
|
572
|
+
labels,
|
|
573
|
+
properties: properties,
|
|
574
|
+
accountId,
|
|
575
|
+
scope,
|
|
576
|
+
relationships,
|
|
577
|
+
createdBy: {
|
|
578
|
+
agent: envAgentSlug,
|
|
579
|
+
session: resolveSessionId(),
|
|
580
|
+
tool: "memory-write",
|
|
581
|
+
},
|
|
582
|
+
validator,
|
|
583
|
+
producedByTaskId,
|
|
584
|
+
});
|
|
585
|
+
return {
|
|
586
|
+
content: [
|
|
587
|
+
{
|
|
588
|
+
type: "text",
|
|
589
|
+
text: `Node created: [${result.labels.join(", ")}] (ID: ${result.nodeId})`,
|
|
590
|
+
},
|
|
591
|
+
],
|
|
592
|
+
};
|
|
593
|
+
}
|
|
594
|
+
catch (err) {
|
|
595
|
+
return {
|
|
596
|
+
content: [
|
|
597
|
+
{
|
|
598
|
+
type: "text",
|
|
599
|
+
text: `Write failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
600
|
+
},
|
|
601
|
+
],
|
|
602
|
+
isError: true,
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
server.tool("memory-update", "Update properties on an existing node in the knowledge graph. Finds the node by element ID, verifies account ownership, sets the provided properties, and recomputes the embedding.", {
|
|
607
|
+
nodeId: z.string().describe("Element ID of the node to update (from memory-search results)"),
|
|
608
|
+
properties: z
|
|
609
|
+
.record(z.string(), z.unknown())
|
|
610
|
+
.describe("Properties to set or overwrite. Restricted keys (embedding, accountId, createdAt) are ignored."),
|
|
611
|
+
}, async ({ nodeId, properties }) => {
|
|
612
|
+
try {
|
|
613
|
+
const result = await memoryUpdate({
|
|
614
|
+
nodeId,
|
|
615
|
+
properties: properties,
|
|
616
|
+
accountId,
|
|
617
|
+
});
|
|
618
|
+
return {
|
|
619
|
+
content: [
|
|
620
|
+
{
|
|
621
|
+
type: "text",
|
|
622
|
+
text: `Node updated: [${result.labels.join(", ")}] (ID: ${result.nodeId})`,
|
|
623
|
+
},
|
|
624
|
+
],
|
|
625
|
+
};
|
|
626
|
+
}
|
|
627
|
+
catch (err) {
|
|
628
|
+
return {
|
|
629
|
+
content: [
|
|
630
|
+
{
|
|
631
|
+
type: "text",
|
|
632
|
+
text: `Update failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
633
|
+
},
|
|
634
|
+
],
|
|
635
|
+
isError: true,
|
|
636
|
+
};
|
|
637
|
+
}
|
|
638
|
+
});
|
|
639
|
+
eagerTool(server, "session-compact-status", "Check whether a session compaction summary exists in the graph. Returns the most recent summary title, date, and briefing text. Use this at session start to determine whether a prior session was compacted and its context should be restored.", {}, async () => {
|
|
640
|
+
const session = getSession();
|
|
641
|
+
try {
|
|
642
|
+
const result = await session.run(`MATCH (n:CreativeWork {accountId: $accountId})
|
|
643
|
+
WHERE n.title STARTS WITH 'Session Summary'
|
|
644
|
+
RETURN n.title AS title, n.createdAt AS createdAt, n.abstract AS abstract
|
|
645
|
+
ORDER BY n.createdAt DESC LIMIT 1`, { accountId });
|
|
646
|
+
if (result.records.length === 0) {
|
|
647
|
+
return { content: [{ type: "text", text: "No session summaries found." }] };
|
|
648
|
+
}
|
|
649
|
+
const r = result.records[0];
|
|
650
|
+
const text = `Title: ${r.get("title")}\nDate: ${r.get("createdAt")}\n\n${r.get("abstract")}`;
|
|
651
|
+
return { content: [{ type: "text", text }] };
|
|
652
|
+
}
|
|
653
|
+
catch (err) {
|
|
654
|
+
return {
|
|
655
|
+
content: [{ type: "text", text: `session-compact-status failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
656
|
+
isError: true,
|
|
657
|
+
};
|
|
658
|
+
}
|
|
659
|
+
finally {
|
|
660
|
+
await session.close();
|
|
661
|
+
}
|
|
662
|
+
});
|
|
663
|
+
eagerTool(server, "session-compact", "Write a session summary to the knowledge graph. Call this when compacting context — provide the full briefing and the tool handles labelling, structure, and embedding.", {
|
|
664
|
+
content: z.string().describe("The session briefing — what was discussed, decisions made, work in progress, open questions, and anything learned about the user or their business"),
|
|
665
|
+
}, async ({ content }) => {
|
|
666
|
+
try {
|
|
667
|
+
// Write doctrine (Task 673): session summaries link back to the
|
|
668
|
+
// Conversation they summarise, so an operator searching a session's
|
|
669
|
+
// graph sees the summary hanging off its source. Hard-require
|
|
670
|
+
// SESSION_ID — the previous revision fell back to "most recent
|
|
671
|
+
// admin Conversation" which would cross-attach a summary to an
|
|
672
|
+
// unrelated session hours later (reviewer flagged this as silent
|
|
673
|
+
// provenance corruption).
|
|
674
|
+
const sessionIdForCompact = resolveSessionId();
|
|
675
|
+
if (!sessionIdForCompact) {
|
|
676
|
+
throw new Error("session-compact requires SESSION_ID — the tool must be invoked inside an admin session so the summary can link back to its Conversation.");
|
|
677
|
+
}
|
|
678
|
+
const lookupSession = getSession();
|
|
679
|
+
let conversationElementId = null;
|
|
680
|
+
try {
|
|
681
|
+
const r = await lookupSession.run(`MATCH (c:Conversation {sessionKey: $sessionId, accountId: $accountId}) RETURN elementId(c) AS id LIMIT 1`, { sessionId: sessionIdForCompact, accountId });
|
|
682
|
+
if (r.records.length > 0) {
|
|
683
|
+
conversationElementId = r.records[0].get("id");
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
finally {
|
|
687
|
+
await lookupSession.close();
|
|
688
|
+
}
|
|
689
|
+
if (!conversationElementId) {
|
|
690
|
+
throw new Error(`session-compact: no Conversation found with sessionKey=${sessionIdForCompact} in this account. Cannot link summary — refuse rather than create an orphan.`);
|
|
691
|
+
}
|
|
692
|
+
const title = `Session Summary ${new Date().toISOString().slice(0, 10)}`;
|
|
693
|
+
const result = await memoryWrite({
|
|
694
|
+
labels: ["CreativeWork"],
|
|
695
|
+
properties: { title, abstract: content },
|
|
696
|
+
accountId,
|
|
697
|
+
scope: "admin",
|
|
698
|
+
relationships: [
|
|
699
|
+
{
|
|
700
|
+
type: "SUMMARIZES",
|
|
701
|
+
direction: "outgoing",
|
|
702
|
+
targetNodeId: conversationElementId,
|
|
703
|
+
},
|
|
704
|
+
],
|
|
705
|
+
createdBy: {
|
|
706
|
+
agent: envAgentSlug,
|
|
707
|
+
session: sessionIdForCompact,
|
|
708
|
+
tool: "session-compact",
|
|
709
|
+
},
|
|
710
|
+
validator,
|
|
711
|
+
});
|
|
712
|
+
return {
|
|
713
|
+
content: [{ type: "text", text: `Session summary saved (ID: ${result.nodeId})` }],
|
|
714
|
+
};
|
|
715
|
+
}
|
|
716
|
+
catch (err) {
|
|
717
|
+
return {
|
|
718
|
+
content: [{ type: "text", text: `session-compact failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
719
|
+
isError: true,
|
|
720
|
+
};
|
|
721
|
+
}
|
|
722
|
+
});
|
|
723
|
+
eagerTool(server, "memory-reindex", "Rebuild vector embeddings for all nodes missing embeddings. Run after seeding or bulk updates.", {}, async () => {
|
|
724
|
+
try {
|
|
725
|
+
const result = await memoryReindex(accountId);
|
|
726
|
+
return {
|
|
727
|
+
content: [
|
|
728
|
+
{
|
|
729
|
+
type: "text",
|
|
730
|
+
text: `Reindex complete: ${result.nodesProcessed} processed, ${result.nodesSkipped} skipped, ${result.scopeBackfilled} scope backfilled.${result.errors.length > 0 ? `\nErrors: ${result.errors.join("; ")}` : ""}`,
|
|
731
|
+
},
|
|
732
|
+
],
|
|
733
|
+
};
|
|
734
|
+
}
|
|
735
|
+
catch (err) {
|
|
736
|
+
console.error("[memory-reindex] failed:", err instanceof Error ? err.message : String(err));
|
|
737
|
+
return {
|
|
738
|
+
content: [
|
|
739
|
+
{
|
|
740
|
+
type: "text",
|
|
741
|
+
text: `Reindex failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
742
|
+
},
|
|
743
|
+
],
|
|
744
|
+
isError: true,
|
|
745
|
+
};
|
|
746
|
+
}
|
|
747
|
+
});
|
|
748
|
+
server.tool("memory-ingest-extract", "Extract text from an uploaded file and cache it server-side for memory-classify and memory-ingest. " +
|
|
749
|
+
"Supports PDF (via pdftotext), plain text, and markdown. " +
|
|
750
|
+
"Rejects CSV (structured data — use memory-write instead) and images (metadata-only). " +
|
|
751
|
+
"Returns file metadata + a short preview; the full text lives in the in-process cache keyed by attachmentId. " +
|
|
752
|
+
"Chunking has moved upstream into memory-classify (LLM-driven section classification) — this tool no longer chunks.", {
|
|
753
|
+
storagePath: z.string().describe("Absolute path to the stored file on disk"),
|
|
754
|
+
filename: z.string().describe("Original filename as uploaded"),
|
|
755
|
+
mimeType: z.string().describe("MIME type of the file"),
|
|
756
|
+
attachmentId: z.string().describe("UUID of the file attachment — used as cache key for memory-ingest"),
|
|
757
|
+
}, async ({ storagePath, filename, mimeType, attachmentId }) => {
|
|
758
|
+
try {
|
|
759
|
+
const result = await memoryIngestExtract({ storagePath, filename, mimeType, attachmentId });
|
|
760
|
+
return {
|
|
761
|
+
content: [{
|
|
762
|
+
type: "text",
|
|
763
|
+
text: JSON.stringify(result),
|
|
764
|
+
}],
|
|
765
|
+
};
|
|
766
|
+
}
|
|
767
|
+
catch (err) {
|
|
768
|
+
return {
|
|
769
|
+
content: [{
|
|
770
|
+
type: "text",
|
|
771
|
+
text: `memory-ingest-extract failed for "${filename}": ${err instanceof Error ? err.message : String(err)}`,
|
|
772
|
+
}],
|
|
773
|
+
isError: true,
|
|
774
|
+
};
|
|
775
|
+
}
|
|
776
|
+
});
|
|
777
|
+
server.tool("memory-classify", "Classify an unstructured document into typed sections via Claude Haiku. " +
|
|
778
|
+
"Reads the cached text written by memory-ingest-extract (same attachmentId), runs the classifier against " +
|
|
779
|
+
"the live ontology label set, and returns a JSON structure ready for memory-ingest. Every returned `kind` is " +
|
|
780
|
+
"verified server-side against the ontology — invalid labels become `UNMAPPED` so the writer falls back to " +
|
|
781
|
+
"generic Section nodes with a logged ontology gap. When Haiku is unavailable, returns `{kind: \"fallback\"}` " +
|
|
782
|
+
"with a reason — the skill should treat the whole document as one UNMAPPED Section.", {
|
|
783
|
+
attachmentId: z.string().describe("UUID of the file attachment — must match a prior memory-ingest-extract call"),
|
|
784
|
+
anchorDescription: z.string().describe("Short human sentence describing the document subject the classifier should anchor sections to. " +
|
|
785
|
+
"Examples: 'subject = UserProfile (the account owner)'; 'subject = LocalBusiness (the operator's business)'; " +
|
|
786
|
+
"'subject = Person {name: \"Jane Smith\"} (a third party)'."),
|
|
787
|
+
}, async ({ attachmentId, anchorDescription }) => {
|
|
788
|
+
try {
|
|
789
|
+
const result = await memoryClassify({
|
|
790
|
+
accountId,
|
|
791
|
+
attachmentId,
|
|
792
|
+
anchorDescription,
|
|
793
|
+
liveSchemaSource: liveSchemaRuntime.source,
|
|
794
|
+
});
|
|
795
|
+
return {
|
|
796
|
+
content: [{
|
|
797
|
+
type: "text",
|
|
798
|
+
text: JSON.stringify(result),
|
|
799
|
+
}],
|
|
800
|
+
};
|
|
801
|
+
}
|
|
802
|
+
catch (err) {
|
|
803
|
+
return {
|
|
804
|
+
content: [{
|
|
805
|
+
type: "text",
|
|
806
|
+
text: `memory-classify failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
807
|
+
}],
|
|
808
|
+
isError: true,
|
|
809
|
+
};
|
|
810
|
+
}
|
|
811
|
+
});
|
|
812
|
+
server.tool("memory-ingest", "Write a classified document into the graph as typed nodes anchored to the document subject. " +
|
|
813
|
+
"Requires prior calls to memory-ingest-extract (text cache) and memory-classify (typed structure). " +
|
|
814
|
+
"Each section becomes either a typed graph node (Position, Service, Credential, etc.) anchored to the named " +
|
|
815
|
+
"subject via the natural ontology edge plus a (KnowledgeDocument)-[:REFERENCES]->(typed) link, or — for " +
|
|
816
|
+
"UNMAPPED sections — a generic :Section node hanging off the document via HAS_SECTION (legacy fallback). " +
|
|
817
|
+
"Re-ingesting with the same attachmentId replaces the document's typed and untyped children — safe to call " +
|
|
818
|
+
"on already-ingested documents. Shared related entities (Organizations, Persons referenced by typed nodes) " +
|
|
819
|
+
"are MERGEd by identifying property and never deleted on re-ingest.", {
|
|
820
|
+
attachmentId: z.string().describe("UUID of the file attachment — must match a prior memory-ingest-extract call"),
|
|
821
|
+
documentSummary: z.string().describe("Classifier-produced summary of the entire document (1-3 sentences)"),
|
|
822
|
+
anchorNodeId: z.string().describe("Element ID of the anchor node (UserProfile/LocalBusiness/Person/Organization). The document subject " +
|
|
823
|
+
"the operator confirmed during the document-ingest skill's first step."),
|
|
824
|
+
anchorLabel: z.string().describe("Primary label of the anchor node (e.g. 'UserProfile', 'LocalBusiness'). Used in the per-section MATCH " +
|
|
825
|
+
"for anchor-edge creation."),
|
|
826
|
+
sections: z.array(z.object({
|
|
827
|
+
kind: z.string().describe("Section kind from the closed enumeration (Position/Education/Chapter/Parties/.../Other), or a standalone-node kind like 'Project'."),
|
|
828
|
+
title: z.string(),
|
|
829
|
+
body: z.string().describe("Server-reconstructed body text: memory-classify slices documentText.slice(sourceStart, sourceEnd) and stamps it here, so this stays the writer's contract."),
|
|
830
|
+
summary: z.string().describe("1-3 sentence summary of the section — already truncated to 500 chars by memory-classify; stored as :Section.summary."),
|
|
831
|
+
sourceStart: z.number().int().nonnegative().describe("Whole-document char offset where the section begins (inclusive). Translated to whole-doc coords by the chunked-classify path."),
|
|
832
|
+
sourceEnd: z.number().int().nonnegative().describe("Whole-document char offset where the section ends (exclusive)."),
|
|
833
|
+
properties: z.record(z.string(), z.unknown()),
|
|
834
|
+
anchorEdge: z.object({
|
|
835
|
+
type: z.string(),
|
|
836
|
+
direction: z.enum(["from-anchor", "to-anchor"]),
|
|
837
|
+
properties: z.record(z.string(), z.unknown()).optional(),
|
|
838
|
+
}).nullable(),
|
|
839
|
+
related: z.array(z.object({
|
|
840
|
+
kind: z.string(),
|
|
841
|
+
properties: z.record(z.string(), z.unknown()),
|
|
842
|
+
edge: z.object({
|
|
843
|
+
type: z.string(),
|
|
844
|
+
direction: z.enum(["outgoing", "incoming"]),
|
|
845
|
+
properties: z.record(z.string(), z.unknown()).optional(),
|
|
846
|
+
}),
|
|
847
|
+
merge: z.boolean().optional(),
|
|
848
|
+
})).optional(),
|
|
849
|
+
classifierReason: z.string().optional().describe("Required when kind === 'Other' — one-line description of what the section is about, stamped on :Section:Other.classifierReason for ontology-growth review."),
|
|
850
|
+
})).describe("Sections as returned by memory-classify, in reading order. The writer chains them via :NEXT in this order."),
|
|
851
|
+
documentEdges: z.array(z.object({
|
|
852
|
+
type: z.string(),
|
|
853
|
+
direction: z.enum(["outgoing", "incoming"]),
|
|
854
|
+
targetKind: z.string(),
|
|
855
|
+
targetProperties: z.record(z.string(), z.unknown()),
|
|
856
|
+
merge: z.boolean().optional(),
|
|
857
|
+
})).optional().describe("Document-level edges (e.g. PARTY edges off KnowledgeDocument for a contract). Currently emitted by the classifier when a Parties section is detected."),
|
|
858
|
+
orphanCandidates: z.array(z.object({
|
|
859
|
+
kind: z.string(),
|
|
860
|
+
label: z.string(),
|
|
861
|
+
reason: z.string(),
|
|
862
|
+
})).optional().describe("Orphan candidates from the classifier — nodes the classifier could not edge naturally. NOT written to the graph; the skill surfaces these to the operator loudly so they decide whether the orphan is intentional (rare, valid) or a classifier miss (bug)."),
|
|
863
|
+
scope: z.string().describe("Visibility scope for all created nodes — required. Valid values: 'public', 'shared', 'admin', or 'user:{identifier}'."),
|
|
864
|
+
sourceUrl: z.string().optional().describe("Original URL for web-sourced documents. Omit for file uploads."),
|
|
865
|
+
sourceType: z.string().optional().describe("Provenance: 'upload' or 'web'."),
|
|
866
|
+
documentKeywords: z.array(z.string()).optional().describe("Classifier-extracted topic keywords."),
|
|
867
|
+
userKeywords: z.array(z.string()).optional().describe("Keywords explicitly provided by the user. Merged additively with documentKeywords."),
|
|
868
|
+
sessionId: z.string().optional().describe("Session UUID for provenance stamping. Optional override; the server falls back to the SESSION_ID env var set by the admin agent at MCP spawn. The agent only needs to pass this when calling outside the normal admin-session context."),
|
|
869
|
+
}, async ({ attachmentId, documentSummary, anchorNodeId, anchorLabel, sections, documentEdges, orphanCandidates, scope, sourceUrl, sourceType, documentKeywords, userKeywords, sessionId: sessionIdOverride }) => {
|
|
870
|
+
try {
|
|
871
|
+
const result = await memoryIngest({
|
|
872
|
+
accountId,
|
|
873
|
+
attachmentId,
|
|
874
|
+
documentSummary,
|
|
875
|
+
anchorNodeId,
|
|
876
|
+
anchorLabel,
|
|
877
|
+
sections,
|
|
878
|
+
documentEdges,
|
|
879
|
+
orphanCandidates,
|
|
880
|
+
scope,
|
|
881
|
+
sourceUrl,
|
|
882
|
+
sourceType,
|
|
883
|
+
documentKeywords,
|
|
884
|
+
userKeywords,
|
|
885
|
+
sessionId: resolveSessionId(sessionIdOverride),
|
|
886
|
+
});
|
|
887
|
+
return {
|
|
888
|
+
content: [{
|
|
889
|
+
type: "text",
|
|
890
|
+
text: JSON.stringify({
|
|
891
|
+
documentNodeId: result.documentNodeId,
|
|
892
|
+
sectionCount: result.sectionCount,
|
|
893
|
+
kindBreakdown: result.kindBreakdown,
|
|
894
|
+
edgeBreakdown: result.edgeBreakdown,
|
|
895
|
+
relatedCount: result.relatedCount,
|
|
896
|
+
standaloneCount: result.standaloneCount,
|
|
897
|
+
orphanCandidates: result.orphanCandidates,
|
|
898
|
+
documentSummary: result.documentSummary,
|
|
899
|
+
keywords: result.keywords,
|
|
900
|
+
}),
|
|
901
|
+
}],
|
|
902
|
+
};
|
|
903
|
+
}
|
|
904
|
+
catch (err) {
|
|
905
|
+
return {
|
|
906
|
+
content: [{
|
|
907
|
+
type: "text",
|
|
908
|
+
text: `memory-ingest failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
909
|
+
}],
|
|
910
|
+
isError: true,
|
|
911
|
+
};
|
|
912
|
+
}
|
|
913
|
+
});
|
|
914
|
+
eagerTool(server, "memory-archive-write", "Bulk-archive write surface for flat datasets. " +
|
|
915
|
+
"Writes typed entities + natural edges in 500-row UNWIND batches. The Cypher body is fixed " +
|
|
916
|
+
"server-side per `archiveType`; the agent supplies parsed rows + the discriminant, never " +
|
|
917
|
+
"raw Cypher. Use ONLY for flat first-class entity exports (LinkedIn Connections.csv and " +
|
|
918
|
+
"future CRM-type seeds). Conversation transcripts (WhatsApp, Telegram, Signal, …) flow " +
|
|
919
|
+
"through the `conversation-archive` skill (memory/bin/conversation-archive-ingest.sh) " +
|
|
920
|
+
"instead, which writes :ConversationArchive + :Section:Conversation chunks via memory-ingest. " +
|
|
921
|
+
"Currently supported archiveType values: `linkedin-connections`.", {
|
|
922
|
+
archiveType: z
|
|
923
|
+
.enum(["linkedin-connections"])
|
|
924
|
+
.describe("Discriminant naming the per-source schema and Cypher body the server runs. Add a new value here only when the corresponding handler is added in memory-archive-write.ts."),
|
|
925
|
+
ownerNodeId: z
|
|
926
|
+
.string()
|
|
927
|
+
.min(1)
|
|
928
|
+
.describe("elementId of the archive owner — :AdminUser for an operator's own archive, or :Person for an external-archive owner. Confirmed during the skill's owner-confirmation flow before this tool is invoked."),
|
|
929
|
+
rows: z
|
|
930
|
+
.array(z.record(z.string(), z.unknown()))
|
|
931
|
+
.min(1)
|
|
932
|
+
.describe("Parsed rows. The skill's selective-ingest gate runs BEFORE this tool — large blanket archives get filtered (Company / Position / Connected On range for linkedin-connections) before the write call."),
|
|
933
|
+
sessionId: z
|
|
934
|
+
.string()
|
|
935
|
+
.optional()
|
|
936
|
+
.describe("Skill-run UUID for provenance stamping. Falls back to SESSION_ID env var when absent."),
|
|
937
|
+
}, async ({ archiveType, ownerNodeId, rows, sessionId: sessionIdOverride }) => {
|
|
938
|
+
try {
|
|
939
|
+
const result = await memoryArchiveWrite({
|
|
940
|
+
archiveType,
|
|
941
|
+
ownerNodeId,
|
|
942
|
+
accountId,
|
|
943
|
+
rows: rows,
|
|
944
|
+
sessionId: resolveSessionId(sessionIdOverride),
|
|
945
|
+
});
|
|
946
|
+
return {
|
|
947
|
+
content: [{
|
|
948
|
+
type: "text",
|
|
949
|
+
text: JSON.stringify(result),
|
|
950
|
+
}],
|
|
951
|
+
};
|
|
952
|
+
}
|
|
953
|
+
catch (err) {
|
|
954
|
+
return {
|
|
955
|
+
content: [{
|
|
956
|
+
type: "text",
|
|
957
|
+
text: `memory-archive-write failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
958
|
+
}],
|
|
959
|
+
isError: true,
|
|
960
|
+
};
|
|
961
|
+
}
|
|
962
|
+
});
|
|
963
|
+
// Task 891 retired the `whatsapp-export-insight-pass` Phase-2 tool; Task 894
|
|
964
|
+
// generalised the entire conversation-archive ingest path (no longer
|
|
965
|
+
// WhatsApp-specific) — see `memory/skills/conversation-archive/` and
|
|
966
|
+
// `memory/bin/conversation-archive-ingest.{mjs,sh}`. Phase-2 insight
|
|
967
|
+
// derivation will operate on :Section:Conversation chunks regardless of
|
|
968
|
+
// source.
|
|
969
|
+
server.tool("memory-ingest-web", "Adapter for web-content ingestion. Accepts a URL and its pre-fetched readable content " +
|
|
970
|
+
"(the agent calls WebFetch first, then passes the text here), writes content to a temp file, and delegates " +
|
|
971
|
+
"to memory-ingest-extract — caching the text under a freshly-generated attachmentId. The skill then drives " +
|
|
972
|
+
"memory-classify and memory-ingest using that attachmentId, exactly as for a file upload. " +
|
|
973
|
+
"If the URL was previously ingested, returns the existing document info so the agent can inform the user.", {
|
|
974
|
+
url: z.string().describe("The web page URL being ingested"),
|
|
975
|
+
content: z.string().describe("The readable text content of the web page (pre-fetched by the agent via WebFetch)"),
|
|
976
|
+
scope: z.string().optional().describe("Intended visibility scope (for logging). The actual scope is set when the agent subsequently calls memory-ingest."),
|
|
977
|
+
}, async ({ url, content, scope }) => {
|
|
978
|
+
try {
|
|
979
|
+
const result = await memoryIngestWeb({
|
|
980
|
+
accountId,
|
|
981
|
+
url,
|
|
982
|
+
content,
|
|
983
|
+
scope,
|
|
984
|
+
});
|
|
985
|
+
const response = {
|
|
986
|
+
attachmentId: result.attachmentId,
|
|
987
|
+
title: result.title,
|
|
988
|
+
sourceUrl: url,
|
|
989
|
+
sourceType: "web",
|
|
990
|
+
...result.extract,
|
|
991
|
+
};
|
|
992
|
+
if (result.existingDocument) {
|
|
993
|
+
response.existingDocument = result.existingDocument;
|
|
994
|
+
}
|
|
995
|
+
return {
|
|
996
|
+
content: [{
|
|
997
|
+
type: "text",
|
|
998
|
+
text: JSON.stringify(response),
|
|
999
|
+
}],
|
|
1000
|
+
};
|
|
1001
|
+
}
|
|
1002
|
+
catch (err) {
|
|
1003
|
+
return {
|
|
1004
|
+
content: [{
|
|
1005
|
+
type: "text",
|
|
1006
|
+
text: `memory-ingest-web failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
1007
|
+
}],
|
|
1008
|
+
isError: true,
|
|
1009
|
+
};
|
|
1010
|
+
}
|
|
1011
|
+
});
|
|
1012
|
+
server.tool("memory-find-candidates", "Deterministic bulk-delete selector for Conversation nodes. Returns a structured list of candidates " +
|
|
1013
|
+
"matching a fixed-name filter ('empty' = zero :PART_OF messages; 'single-assistant' = exactly one " +
|
|
1014
|
+
"assistant-role message) and an opaque filterToken. Pair with memory-delete(filterToken=…) — the server " +
|
|
1015
|
+
"re-runs the same predicate per elementId before trashing, so a stale or forged token never deletes. " +
|
|
1016
|
+
"Never author custom delete-selection Cypher for bulk flows; always use this tool.", {
|
|
1017
|
+
filter: z.enum(["empty", "single-assistant"]).describe("Selection predicate. 'empty' = no :PART_OF Messages. 'single-assistant' = exactly one :PART_OF " +
|
|
1018
|
+
"Message with role='assistant'. A content-matching filter ('no-real-user-input') is not yet available."),
|
|
1019
|
+
agentType: z.enum(["admin", "public"]).optional().describe("Scope to conversations matching c.agentType. Omit to scope across both."),
|
|
1020
|
+
limit: z.number().int().positive().optional().describe("Max candidates to return (default 200, hard cap 1000)."),
|
|
1021
|
+
dryRun: z.boolean().optional().describe("Preview matches without minting an actionable filterToken. Candidates are listed in the response, but no delete can be performed against them — caller must re-run without dryRun to receive a token."),
|
|
1022
|
+
}, async ({ filter, agentType, limit, dryRun }) => {
|
|
1023
|
+
try {
|
|
1024
|
+
const result = await memoryFindCandidates({ accountId, filter, agentType, limit, dryRun });
|
|
1025
|
+
if (result.items.length === 0) {
|
|
1026
|
+
return { content: [{ type: "text", text: `No candidates matched filter=${filter} agentType=${agentType ?? "any"}. No delete will happen.` }] };
|
|
1027
|
+
}
|
|
1028
|
+
const tokenLine = result.dryRun
|
|
1029
|
+
? "filterToken=(none — dryRun; re-run without dryRun to get an actionable token)"
|
|
1030
|
+
: `filterToken=${result.filterToken}`;
|
|
1031
|
+
const trailer = result.dryRun
|
|
1032
|
+
? "This is a dryRun preview. No delete can be performed until you re-run without dryRun."
|
|
1033
|
+
: "Pass each elementId to memory-delete with the filterToken above. The server re-verifies on every call.";
|
|
1034
|
+
const lines = [
|
|
1035
|
+
`Matched ${result.matched} candidate(s) for filter=${filter} agentType=${agentType ?? "any"}.`,
|
|
1036
|
+
tokenLine,
|
|
1037
|
+
"",
|
|
1038
|
+
trailer,
|
|
1039
|
+
"",
|
|
1040
|
+
...result.items.map((i) => {
|
|
1041
|
+
const preview = i.firstUserMsgPreview ? ` userPreview=${JSON.stringify(i.firstUserMsgPreview)}` : "";
|
|
1042
|
+
return `- elementId=${i.elementId} conversationId=${i.conversationId ?? "null"} assistantMsgs=${i.assistantMsgCount} realUserMsgs=${i.realUserMsgCount}${preview}`;
|
|
1043
|
+
}),
|
|
1044
|
+
];
|
|
1045
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
1046
|
+
}
|
|
1047
|
+
catch (err) {
|
|
1048
|
+
return {
|
|
1049
|
+
content: [{ type: "text", text: `memory-find-candidates failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1050
|
+
isError: true,
|
|
1051
|
+
};
|
|
1052
|
+
}
|
|
1053
|
+
});
|
|
1054
|
+
server.tool("memory-delete", "Soft-delete a single graph node by elementId. Adds the :Trashed label, preserves relationships, " +
|
|
1055
|
+
"and excludes the node from memory-search and any read filtered via notTrashed. For KnowledgeDocument, " +
|
|
1056
|
+
"cascades to linked Section and Chunk children. For Conversation, cascades to attached :PART_OF Messages " +
|
|
1057
|
+
". Hard removal happens later via memory-empty-trash after the grace period (default 30 days). " +
|
|
1058
|
+
"For bulk-delete flows, pass filterToken from memory-find-candidates — the server re-verifies the predicate " +
|
|
1059
|
+
"before trashing. For GDPR Right-to-Erasure, use contact-erase instead (bypasses this primitive and " +
|
|
1060
|
+
"hard-deletes per Article 17).", {
|
|
1061
|
+
elementId: z.string().describe("Neo4j elementId of the node to trash (from memory-search or memory-find-candidates)."),
|
|
1062
|
+
reason: z.string().optional().describe("Optional human-readable explanation; persisted as trashReason for audit."),
|
|
1063
|
+
filterToken: z.string().optional().describe("Opaque token from memory-find-candidates. Required for bulk-selector flows; the server re-runs the " +
|
|
1064
|
+
"canonical predicate on this elementId before trashing. Omit for single-node deletes where the caller " +
|
|
1065
|
+
"chose the target directly (e.g. from a memory-search result)."),
|
|
1066
|
+
}, async ({ elementId, reason, filterToken }) => {
|
|
1067
|
+
try {
|
|
1068
|
+
const result = await memoryDelete({ accountId, elementId, reason, filterToken });
|
|
1069
|
+
const head = result.alreadyTrashed
|
|
1070
|
+
? `Already trashed: [${result.labels.join(", ")}] elementId=${elementId}`
|
|
1071
|
+
: `Trashed: [${result.labels.join(", ")}] elementId=${elementId}`;
|
|
1072
|
+
const cascade = result.cascade.sections + result.cascade.chunks > 0
|
|
1073
|
+
? `\nCascaded: ${result.cascade.sections} sections, ${result.cascade.chunks} chunks.`
|
|
1074
|
+
: "";
|
|
1075
|
+
const trail = result.alreadyTrashed
|
|
1076
|
+
? ""
|
|
1077
|
+
: `\nTrashed at ${result.trashedAt}. Restore via memory-restore; hard removal after grace period via memory-empty-trash.`;
|
|
1078
|
+
return { content: [{ type: "text", text: `${head}${cascade}${trail}` }] };
|
|
1079
|
+
}
|
|
1080
|
+
catch (err) {
|
|
1081
|
+
return {
|
|
1082
|
+
content: [{ type: "text", text: `memory-delete failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1083
|
+
isError: true,
|
|
1084
|
+
};
|
|
1085
|
+
}
|
|
1086
|
+
});
|
|
1087
|
+
server.tool("memory-restore", "Undo memory-delete on a single graph node by elementId. Removes the :Trashed label and restores " +
|
|
1088
|
+
"snapshotted unique-key properties. For KnowledgeDocument, walks HAS_SECTION/HAS_CHUNK edges to bring " +
|
|
1089
|
+
"trashed children back too. Fails loudly when an active node already holds a unique slot the trashed " +
|
|
1090
|
+
"node needs back (e.g. a fresh OnboardingState was created while the old one was in trash) — " +
|
|
1091
|
+
"the error names the conflicting elementId so the caller can decide how to resolve.", {
|
|
1092
|
+
elementId: z.string().describe("Neo4j elementId of the trashed node to restore."),
|
|
1093
|
+
}, async ({ elementId }) => {
|
|
1094
|
+
try {
|
|
1095
|
+
const result = await memoryRestore({ accountId, elementId });
|
|
1096
|
+
const cascade = result.cascade.sections + result.cascade.chunks > 0
|
|
1097
|
+
? `\nCascaded: ${result.cascade.sections} sections, ${result.cascade.chunks} chunks.`
|
|
1098
|
+
: "";
|
|
1099
|
+
return {
|
|
1100
|
+
content: [{
|
|
1101
|
+
type: "text",
|
|
1102
|
+
text: `Restored: [${result.labels.join(", ")}] elementId=${elementId}${cascade}`,
|
|
1103
|
+
}],
|
|
1104
|
+
};
|
|
1105
|
+
}
|
|
1106
|
+
catch (err) {
|
|
1107
|
+
return {
|
|
1108
|
+
content: [{ type: "text", text: `memory-restore failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1109
|
+
isError: true,
|
|
1110
|
+
};
|
|
1111
|
+
}
|
|
1112
|
+
});
|
|
1113
|
+
server.tool("memory-empty-trash", "Hard-delete trashed nodes whose trashedAt is older than the grace period (default 30 days). " +
|
|
1114
|
+
"For KnowledgeDocument candidates, also removes the on-disk attachment directory. Use dryRun=true " +
|
|
1115
|
+
"to preview candidates without mutating — the absence of [trash:emptied] log lines after a " +
|
|
1116
|
+
"[trash:empty-run] dryRun=true line is the correct-behaviour signal. Optional labels filter " +
|
|
1117
|
+
"restricts the sweep to a subset of node types (e.g. ['Person']).", {
|
|
1118
|
+
graceDays: z.number().int().min(0).optional().describe("Minimum age in days a trashed node must reach before it's eligible. Default 30."),
|
|
1119
|
+
dryRun: z.boolean().optional().describe("When true, lists candidates without deleting. Default false."),
|
|
1120
|
+
labels: z.array(z.string()).optional().describe("Optional whitelist of node labels — only nodes carrying any of these labels are eligible."),
|
|
1121
|
+
}, async ({ graceDays, dryRun, labels }) => {
|
|
1122
|
+
try {
|
|
1123
|
+
const result = await memoryEmptyTrash({ accountId, graceDays, dryRun, labels });
|
|
1124
|
+
const lines = [];
|
|
1125
|
+
lines.push(`Empty-trash run: graceDays=${result.graceDays} dryRun=${result.dryRun} candidates=${result.candidates.length} emptied=${result.emptied} attachmentDirsRemoved=${result.attachmentDirsRemoved}`);
|
|
1126
|
+
if (result.candidates.length > 0 && result.candidates.length <= 25) {
|
|
1127
|
+
for (const c of result.candidates) {
|
|
1128
|
+
lines.push(` - [${c.labels.join(", ")}] elementId=${c.elementId} trashedAt=${c.trashedAt} by=${c.trashedBy ?? "unknown"}`);
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
else if (result.candidates.length > 25) {
|
|
1132
|
+
lines.push(` (${result.candidates.length} candidates — too many to list; grep [trash:empty-run]/[trash:emptied] in server.log for detail)`);
|
|
1133
|
+
}
|
|
1134
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
1135
|
+
}
|
|
1136
|
+
catch (err) {
|
|
1137
|
+
return {
|
|
1138
|
+
content: [{ type: "text", text: `memory-empty-trash failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1139
|
+
isError: true,
|
|
1140
|
+
};
|
|
1141
|
+
}
|
|
1142
|
+
});
|
|
1143
|
+
server.tool("memory-list-attachments", "List stored file attachments for this account with their ingestion status. " +
|
|
1144
|
+
"Returns original filenames, sizes, upload dates, and whether each file has been ingested " +
|
|
1145
|
+
"into the knowledge graph. Does not include web-ingested documents (those have no file on disk).", {}, async () => {
|
|
1146
|
+
try {
|
|
1147
|
+
const result = await memoryListAttachments(accountId);
|
|
1148
|
+
if (result.entries.length === 0) {
|
|
1149
|
+
return { content: [{ type: "text", text: "No stored attachments found." }] };
|
|
1150
|
+
}
|
|
1151
|
+
const lines = result.entries.map((e) => {
|
|
1152
|
+
const status = e.softDeleted
|
|
1153
|
+
? "deleted (pending purge)"
|
|
1154
|
+
: e.ingested
|
|
1155
|
+
? "ingested"
|
|
1156
|
+
: "not ingested";
|
|
1157
|
+
const size = e.sizeBytes < 1024
|
|
1158
|
+
? `${e.sizeBytes} B`
|
|
1159
|
+
: e.sizeBytes < 1024 * 1024
|
|
1160
|
+
? `${(e.sizeBytes / 1024).toFixed(1)} KB`
|
|
1161
|
+
: `${(e.sizeBytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
1162
|
+
const idLine = e.elementId
|
|
1163
|
+
? ` ID: ${e.attachmentId} elementId: ${e.elementId} Stored: ${e.storedAt}`
|
|
1164
|
+
: ` ID: ${e.attachmentId} Stored: ${e.storedAt}`;
|
|
1165
|
+
return `${e.filename} (${e.mimeType}, ${size}) [${status}]\n${idLine}`;
|
|
1166
|
+
});
|
|
1167
|
+
const summary = `${result.totalFiles} files (${result.ingestedCount} ingested${result.skippedCount > 0 ? `, ${result.skippedCount} skipped` : ""})`;
|
|
1168
|
+
return {
|
|
1169
|
+
content: [{ type: "text", text: `${summary}\n\n${lines.join("\n\n")}` }],
|
|
1170
|
+
};
|
|
1171
|
+
}
|
|
1172
|
+
catch (err) {
|
|
1173
|
+
return {
|
|
1174
|
+
content: [{ type: "text", text: `memory-list-attachments failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1175
|
+
isError: true,
|
|
1176
|
+
};
|
|
1177
|
+
}
|
|
1178
|
+
});
|
|
1179
|
+
server.tool("memory-read-attachment", "Read the content of a stored attachment from disk. Returns the full text for text/markdown files, " +
|
|
1180
|
+
"extracted text for PDFs (via pdftotext), and metadata + HTTP URL for images. " +
|
|
1181
|
+
"Use this to show the user what's in a file or to prepare content for editing.", {
|
|
1182
|
+
attachmentId: z.string().describe("UUID of the attachment to read"),
|
|
1183
|
+
}, async ({ attachmentId }) => {
|
|
1184
|
+
try {
|
|
1185
|
+
const result = await memoryReadAttachment(accountId, attachmentId);
|
|
1186
|
+
let text = `**${result.filename}** (${result.mimeType}, ${result.sizeBytes} bytes)\nStored: ${result.storedAt}\n`;
|
|
1187
|
+
if (result.contentNote)
|
|
1188
|
+
text += `\n_${result.contentNote}_\n`;
|
|
1189
|
+
if (result.httpUrl)
|
|
1190
|
+
text += `\nURL: ${result.httpUrl}\n`;
|
|
1191
|
+
if (result.content)
|
|
1192
|
+
text += `\n---\n\n${result.content}`;
|
|
1193
|
+
return { content: [{ type: "text", text }] };
|
|
1194
|
+
}
|
|
1195
|
+
catch (err) {
|
|
1196
|
+
return {
|
|
1197
|
+
content: [{ type: "text", text: `memory-read-attachment failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1198
|
+
isError: true,
|
|
1199
|
+
};
|
|
1200
|
+
}
|
|
1201
|
+
});
|
|
1202
|
+
server.tool("memory-edit-attachment", "Edit a stored text/markdown attachment in place. Replaces the file content on disk, updates the " +
|
|
1203
|
+
"metadata timestamp, and re-extracts the file for chunking (populating the extract cache). " +
|
|
1204
|
+
"After this call, use memory-ingest with updated summaries to sync the knowledge graph. " +
|
|
1205
|
+
"Only text/plain and text/markdown files are editable — PDFs and images are rejected.", {
|
|
1206
|
+
attachmentId: z.string().describe("UUID of the attachment to edit"),
|
|
1207
|
+
content: z.string().describe("The full replacement text content"),
|
|
1208
|
+
}, async ({ attachmentId, content }) => {
|
|
1209
|
+
try {
|
|
1210
|
+
const result = await memoryEditAttachment({ accountId, attachmentId, content });
|
|
1211
|
+
let text = `Edited: ${result.filename} (${result.oldSizeBytes} → ${result.newSizeBytes} bytes)`;
|
|
1212
|
+
if (result.cachePopulated) {
|
|
1213
|
+
text += `\nExtract cache populated: ${result.extractTextLength} chars.`;
|
|
1214
|
+
text += `\nCall memory-classify and memory-ingest to re-sync the knowledge graph.`;
|
|
1215
|
+
}
|
|
1216
|
+
else {
|
|
1217
|
+
text += `\nWARNING: File updated on disk but extract cache could not be populated.`;
|
|
1218
|
+
text += `\nCall memory-ingest-extract manually, then memory-classify, then memory-ingest.`;
|
|
1219
|
+
}
|
|
1220
|
+
return { content: [{ type: "text", text }] };
|
|
1221
|
+
}
|
|
1222
|
+
catch (err) {
|
|
1223
|
+
return {
|
|
1224
|
+
content: [{ type: "text", text: `memory-edit-attachment failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1225
|
+
isError: true,
|
|
1226
|
+
};
|
|
1227
|
+
}
|
|
1228
|
+
});
|
|
1229
|
+
server.tool("memory-rename-attachment", "Rename a stored attachment. Updates the filename in the .meta.json sidecar and the " +
|
|
1230
|
+
"KnowledgeDocument name in Neo4j (if the file has been ingested). The file on disk " +
|
|
1231
|
+
"is not renamed — it uses UUID-based naming. Only the human-readable metadata changes.", {
|
|
1232
|
+
attachmentId: z.string().describe("UUID of the attachment to rename"),
|
|
1233
|
+
newFilename: z.string().describe("The new filename (e.g. 'quarterly-report-q1.pdf')"),
|
|
1234
|
+
}, async ({ attachmentId, newFilename }) => {
|
|
1235
|
+
try {
|
|
1236
|
+
const result = await memoryRenameAttachment({ accountId, attachmentId, newFilename });
|
|
1237
|
+
if (result.oldFilename === result.newFilename) {
|
|
1238
|
+
return { content: [{ type: "text", text: `Filename unchanged: "${result.newFilename}"` }] };
|
|
1239
|
+
}
|
|
1240
|
+
let text = `Renamed: "${result.oldFilename}" → "${result.newFilename}"`;
|
|
1241
|
+
text += result.graphUpdated
|
|
1242
|
+
? `\nKnowledge graph updated.`
|
|
1243
|
+
: `\nNo KnowledgeDocument in graph (file not yet ingested — metadata only).`;
|
|
1244
|
+
return { content: [{ type: "text", text }] };
|
|
1245
|
+
}
|
|
1246
|
+
catch (err) {
|
|
1247
|
+
return {
|
|
1248
|
+
content: [{ type: "text", text: `memory-rename-attachment failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1249
|
+
isError: true,
|
|
1250
|
+
};
|
|
1251
|
+
}
|
|
1252
|
+
});
|
|
1253
|
+
// --- conversation-list formatting helpers ---
|
|
1254
|
+
/** Strip Neo4j DateTime timezone ID bracket (e.g. "[UTC]", "[Europe/London]") that Date.parse rejects. */
|
|
1255
|
+
function cleanNeo4jIso(isoStr) {
|
|
1256
|
+
return isoStr.replace(/\[.*\]$/, "");
|
|
1257
|
+
}
|
|
1258
|
+
/** Format an ISO timestamp to short human-readable form: "YYYY-MM-DD HH:MM UTC". Empty string if invalid. */
|
|
1259
|
+
function shortIso(isoStr) {
|
|
1260
|
+
if (!isoStr)
|
|
1261
|
+
return "";
|
|
1262
|
+
const ms = Date.parse(cleanNeo4jIso(isoStr));
|
|
1263
|
+
if (!Number.isFinite(ms))
|
|
1264
|
+
return "";
|
|
1265
|
+
return new Date(ms).toISOString().replace("T", " ").slice(0, 16) + " UTC";
|
|
1266
|
+
}
|
|
1267
|
+
/** Compute relative time string from an ISO timestamp. Returns null for >= 7 days or invalid input. */
|
|
1268
|
+
function relativeTime(isoStr) {
|
|
1269
|
+
if (!isoStr)
|
|
1270
|
+
return null;
|
|
1271
|
+
const ms = Date.parse(cleanNeo4jIso(isoStr));
|
|
1272
|
+
if (!Number.isFinite(ms))
|
|
1273
|
+
return null;
|
|
1274
|
+
const diffMs = Date.now() - ms;
|
|
1275
|
+
if (diffMs < 60_000)
|
|
1276
|
+
return "just now"; // includes future timestamps (clock drift)
|
|
1277
|
+
const mins = Math.floor(diffMs / 60_000);
|
|
1278
|
+
if (mins < 60)
|
|
1279
|
+
return `${mins}m ago`;
|
|
1280
|
+
const hours = Math.floor(mins / 60);
|
|
1281
|
+
if (hours < 24)
|
|
1282
|
+
return `${hours}h ago`;
|
|
1283
|
+
const days = Math.floor(hours / 24);
|
|
1284
|
+
if (days < 7)
|
|
1285
|
+
return `${days}d ago`;
|
|
1286
|
+
return null;
|
|
1287
|
+
}
|
|
1288
|
+
/** Format conversation header line with activity timestamps. Shared across metadata and inline modes. */
|
|
1289
|
+
function formatConversationHeader(opts) {
|
|
1290
|
+
const label = opts.name ? `"${opts.name}"` : opts.conversationId.slice(0, 8) + "…";
|
|
1291
|
+
const agentInfo = opts.agentSlug ? `${opts.agentType}/${opts.agentSlug}` : opts.agentType;
|
|
1292
|
+
const createdStr = shortIso(opts.createdAt) || "(no timestamp)";
|
|
1293
|
+
const updatedStr = shortIso(opts.updatedAt);
|
|
1294
|
+
if (!updatedStr) {
|
|
1295
|
+
return `${label} [${agentInfo}] · created ${createdStr} · (activity unknown) — ${opts.messageCount} messages`;
|
|
1296
|
+
}
|
|
1297
|
+
const createdMs = Date.parse(cleanNeo4jIso(opts.createdAt));
|
|
1298
|
+
const updatedMs = Date.parse(cleanNeo4jIso(opts.updatedAt));
|
|
1299
|
+
if (Number.isFinite(createdMs) && Number.isFinite(updatedMs) && Math.abs(updatedMs - createdMs) < 1000) {
|
|
1300
|
+
const ago = relativeTime(opts.updatedAt);
|
|
1301
|
+
const agoStr = ago ? ` (${ago})` : "";
|
|
1302
|
+
return `${label} [${agentInfo}] · created ${createdStr}${agoStr} — ${opts.messageCount} messages`;
|
|
1303
|
+
}
|
|
1304
|
+
const ago = relativeTime(opts.updatedAt);
|
|
1305
|
+
const agoStr = ago ? ` (${ago})` : "";
|
|
1306
|
+
return `${label} [${agentInfo}] · created ${createdStr} · active ${updatedStr}${agoStr} — ${opts.messageCount} messages`;
|
|
1307
|
+
}
|
|
1308
|
+
server.tool("conversation-list", "List conversations or retrieve messages from a specific conversation. " +
|
|
1309
|
+
"Without conversationId: lists all conversations with message counts, ordered by most recent activity (updatedAt DESC). " +
|
|
1310
|
+
"Headers show both creation time and last activity time; when they differ, the conversation was resumed. " +
|
|
1311
|
+
"With conversationId: returns all messages in that conversation chronologically with per-message timestamps. " +
|
|
1312
|
+
"With includeMessages: returns conversations with their timestamped messages inline (useful for batch review). " +
|
|
1313
|
+
"The since filter matches against activity time (updatedAt), not creation time.", {
|
|
1314
|
+
conversationId: z
|
|
1315
|
+
.string()
|
|
1316
|
+
.optional()
|
|
1317
|
+
.describe("If provided, returns messages for this conversation. If omitted, lists all conversations."),
|
|
1318
|
+
agentType: z
|
|
1319
|
+
.string()
|
|
1320
|
+
.optional()
|
|
1321
|
+
.describe("Filter conversations by agent type ('admin' or 'public'). Only applies when listing conversations."),
|
|
1322
|
+
agentSlug: z
|
|
1323
|
+
.string()
|
|
1324
|
+
.optional()
|
|
1325
|
+
.describe("Filter conversations by public agent slug (e.g. 'maxy-assistant'). Only applies when listing conversations."),
|
|
1326
|
+
since: z
|
|
1327
|
+
.string()
|
|
1328
|
+
.optional()
|
|
1329
|
+
.describe("ISO 8601 timestamp. Only return conversations with activity (updatedAt) at or after this time. Only applies when listing conversations."),
|
|
1330
|
+
includeMessages: z
|
|
1331
|
+
.boolean()
|
|
1332
|
+
.optional()
|
|
1333
|
+
.describe("When true, include message content inline with each conversation (max 50 messages per conversation). Only applies when listing conversations."),
|
|
1334
|
+
limit: z
|
|
1335
|
+
.number()
|
|
1336
|
+
.optional()
|
|
1337
|
+
.describe("Maximum results (default 50 for conversations, 200 for messages)"),
|
|
1338
|
+
}, async ({ conversationId, agentType, agentSlug, since, includeMessages, limit }) => {
|
|
1339
|
+
const startTime = Date.now();
|
|
1340
|
+
const dbSession = getSession();
|
|
1341
|
+
try {
|
|
1342
|
+
if (conversationId) {
|
|
1343
|
+
// Messages mode — chronological listing for a specific conversation
|
|
1344
|
+
const messageLimit = limit ?? 200;
|
|
1345
|
+
const result = await dbSession.run(`MATCH (m:Message)-[:PART_OF]->(c:Conversation {conversationId: $conversationId, accountId: $accountId})
|
|
1346
|
+
WHERE ${notTrashed("m")} AND ${notTrashed("c")}
|
|
1347
|
+
RETURN m.role AS role, m.content AS content, m.createdAt AS createdAt
|
|
1348
|
+
ORDER BY m.createdAt ASC
|
|
1349
|
+
LIMIT $limit`, { conversationId, accountId, limit: int(messageLimit) });
|
|
1350
|
+
if (result.records.length === 0) {
|
|
1351
|
+
return {
|
|
1352
|
+
content: [{ type: "text", text: "No messages found for this conversation." }],
|
|
1353
|
+
};
|
|
1354
|
+
}
|
|
1355
|
+
const formatted = result.records.map((r) => {
|
|
1356
|
+
const role = String(r.get("role") ?? "unknown");
|
|
1357
|
+
const content = String(r.get("content") ?? "");
|
|
1358
|
+
const ts = shortIso(String(r.get("createdAt") ?? ""));
|
|
1359
|
+
return ts ? `[${role} ${ts}]\n ${content}` : `[${role}]\n ${content}`;
|
|
1360
|
+
});
|
|
1361
|
+
process.stderr.write(`[conversation-list] [${accountId}] mode=messages conversationId=${conversationId.slice(0, 8)}… count=${result.records.length} (${Date.now() - startTime}ms)\n`);
|
|
1362
|
+
return {
|
|
1363
|
+
content: [{ type: "text", text: formatted.join("\n---\n") }],
|
|
1364
|
+
};
|
|
1365
|
+
}
|
|
1366
|
+
// List mode — all conversations with message counts (or inline messages)
|
|
1367
|
+
const convLimit = limit ?? (includeMessages ? 20 : 50);
|
|
1368
|
+
const whereClauses = [];
|
|
1369
|
+
if (agentType)
|
|
1370
|
+
whereClauses.push("c.agentType = $agentType");
|
|
1371
|
+
if (agentSlug)
|
|
1372
|
+
whereClauses.push("c.agentSlug = $agentSlug");
|
|
1373
|
+
if (since)
|
|
1374
|
+
whereClauses.push("c.updatedAt >= datetime($since)");
|
|
1375
|
+
const whereStr = whereClauses.length > 0 ? `WHERE ${whereClauses.join(" AND ")}` : "";
|
|
1376
|
+
const params = {
|
|
1377
|
+
accountId,
|
|
1378
|
+
limit: int(convLimit),
|
|
1379
|
+
...(agentType ? { agentType } : {}),
|
|
1380
|
+
...(agentSlug ? { agentSlug } : {}),
|
|
1381
|
+
...(since ? { since } : {}),
|
|
1382
|
+
};
|
|
1383
|
+
if (includeMessages) {
|
|
1384
|
+
// Inline messages mode — conversations with message content
|
|
1385
|
+
const msgLimit = 50;
|
|
1386
|
+
const trashedConvFilter = notTrashed("c");
|
|
1387
|
+
const trashedMsgFilter = notTrashed("m");
|
|
1388
|
+
const result = await dbSession.run(`MATCH (c:Conversation {accountId: $accountId})
|
|
1389
|
+
${whereStr ? whereStr + " AND " : "WHERE "}${trashedConvFilter}
|
|
1390
|
+
WITH c ORDER BY c.updatedAt DESC LIMIT $limit
|
|
1391
|
+
OPTIONAL MATCH (m:Message)-[:PART_OF]->(c) WHERE ${trashedMsgFilter}
|
|
1392
|
+
WITH c, m ORDER BY m.createdAt ASC
|
|
1393
|
+
WITH c, collect({role: m.role, content: m.content, createdAt: m.createdAt})[0..${msgLimit}] AS messages
|
|
1394
|
+
RETURN c.conversationId AS conversationId,
|
|
1395
|
+
c.agentType AS agentType,
|
|
1396
|
+
c.agentSlug AS agentSlug,
|
|
1397
|
+
c.name AS name,
|
|
1398
|
+
c.createdAt AS createdAt,
|
|
1399
|
+
c.updatedAt AS updatedAt,
|
|
1400
|
+
size(messages) AS messageCount,
|
|
1401
|
+
messages
|
|
1402
|
+
ORDER BY c.updatedAt DESC`, params);
|
|
1403
|
+
if (result.records.length === 0) {
|
|
1404
|
+
return {
|
|
1405
|
+
content: [{ type: "text", text: "No conversations found." }],
|
|
1406
|
+
};
|
|
1407
|
+
}
|
|
1408
|
+
const formatted = result.records.map((r) => {
|
|
1409
|
+
const id = String(r.get("conversationId") ?? "");
|
|
1410
|
+
const msgCount = Number(r.get("messageCount") ?? 0);
|
|
1411
|
+
const header = formatConversationHeader({
|
|
1412
|
+
name: r.get("name"),
|
|
1413
|
+
conversationId: id,
|
|
1414
|
+
agentType: String(r.get("agentType") ?? ""),
|
|
1415
|
+
agentSlug: r.get("agentSlug"),
|
|
1416
|
+
createdAt: String(r.get("createdAt") ?? ""),
|
|
1417
|
+
updatedAt: String(r.get("updatedAt") ?? ""),
|
|
1418
|
+
messageCount: msgCount,
|
|
1419
|
+
});
|
|
1420
|
+
const messages = r.get("messages");
|
|
1421
|
+
const validMessages = (messages || []).filter((m) => m.role != null);
|
|
1422
|
+
if (validMessages.length === 0) {
|
|
1423
|
+
return `### ${header}\n (no messages)`;
|
|
1424
|
+
}
|
|
1425
|
+
let missingTs = 0;
|
|
1426
|
+
const msgLines = validMessages.map((m) => {
|
|
1427
|
+
const role = String(m.role);
|
|
1428
|
+
const content = String(m.content ?? "");
|
|
1429
|
+
const ts = shortIso(String(m.createdAt ?? ""));
|
|
1430
|
+
if (!ts)
|
|
1431
|
+
missingTs++;
|
|
1432
|
+
return ts ? `[${role} ${ts}] ${content}` : `[${role}] ${content}`;
|
|
1433
|
+
});
|
|
1434
|
+
const footer = missingTs > 0 ? `\n(${missingTs} message${missingTs > 1 ? "s" : ""} had no timestamp)` : "";
|
|
1435
|
+
return `### ${header}\n${msgLines.join("\n")}${footer}`;
|
|
1436
|
+
});
|
|
1437
|
+
process.stderr.write(`[conversation-list] [${accountId}] mode=inline agentType=${agentType ?? "all"} agentSlug=${agentSlug ?? "all"} since=${since ?? "none"} count=${result.records.length} (${Date.now() - startTime}ms)\n`);
|
|
1438
|
+
return {
|
|
1439
|
+
content: [{ type: "text", text: formatted.join("\n\n") }],
|
|
1440
|
+
};
|
|
1441
|
+
}
|
|
1442
|
+
// Metadata mode — conversations with message counts only
|
|
1443
|
+
const trashedConvFilter = notTrashed("c");
|
|
1444
|
+
const trashedMsgFilter = notTrashed("m");
|
|
1445
|
+
const result = await dbSession.run(`MATCH (c:Conversation {accountId: $accountId})
|
|
1446
|
+
${whereStr ? whereStr + " AND " : "WHERE "}${trashedConvFilter}
|
|
1447
|
+
WITH c ORDER BY c.updatedAt DESC LIMIT $limit
|
|
1448
|
+
OPTIONAL MATCH (m:Message)-[:PART_OF]->(c) WHERE ${trashedMsgFilter}
|
|
1449
|
+
RETURN c.conversationId AS conversationId,
|
|
1450
|
+
c.agentType AS agentType,
|
|
1451
|
+
c.agentSlug AS agentSlug,
|
|
1452
|
+
c.name AS name,
|
|
1453
|
+
c.createdAt AS createdAt,
|
|
1454
|
+
c.updatedAt AS updatedAt,
|
|
1455
|
+
count(m) AS messageCount
|
|
1456
|
+
ORDER BY c.updatedAt DESC`, params);
|
|
1457
|
+
if (result.records.length === 0) {
|
|
1458
|
+
return {
|
|
1459
|
+
content: [{ type: "text", text: "No conversations found." }],
|
|
1460
|
+
};
|
|
1461
|
+
}
|
|
1462
|
+
const formatted = result.records.map((r) => {
|
|
1463
|
+
const id = String(r.get("conversationId") ?? "");
|
|
1464
|
+
const msgCount = typeof r.get("messageCount") === "number"
|
|
1465
|
+
? r.get("messageCount")
|
|
1466
|
+
: Number(r.get("messageCount"));
|
|
1467
|
+
return formatConversationHeader({
|
|
1468
|
+
name: r.get("name"),
|
|
1469
|
+
conversationId: id,
|
|
1470
|
+
agentType: String(r.get("agentType") ?? ""),
|
|
1471
|
+
agentSlug: r.get("agentSlug"),
|
|
1472
|
+
createdAt: String(r.get("createdAt") ?? ""),
|
|
1473
|
+
updatedAt: String(r.get("updatedAt") ?? ""),
|
|
1474
|
+
messageCount: msgCount,
|
|
1475
|
+
});
|
|
1476
|
+
});
|
|
1477
|
+
process.stderr.write(`[conversation-list] [${accountId}] mode=list agentType=${agentType ?? "all"} agentSlug=${agentSlug ?? "all"} since=${since ?? "none"} count=${result.records.length} (${Date.now() - startTime}ms)\n`);
|
|
1478
|
+
return {
|
|
1479
|
+
content: [{ type: "text", text: formatted.join("\n") }],
|
|
1480
|
+
};
|
|
1481
|
+
}
|
|
1482
|
+
catch (err) {
|
|
1483
|
+
return {
|
|
1484
|
+
content: [
|
|
1485
|
+
{
|
|
1486
|
+
type: "text",
|
|
1487
|
+
text: `conversation-list failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
1488
|
+
},
|
|
1489
|
+
],
|
|
1490
|
+
isError: true,
|
|
1491
|
+
};
|
|
1492
|
+
}
|
|
1493
|
+
finally {
|
|
1494
|
+
await dbSession.close();
|
|
1495
|
+
}
|
|
1496
|
+
});
|
|
1497
|
+
server.tool("profile-update", "Create, update, or reinforce a user preference; set top-level UserProfile fields (timezone, locale, givenName, role, expertise) via profileFields; AND set operator-identity fields (email, telephone) on the operator's personal-profile Person via personFields. Person is the canonical operator-identity store; UserProfile carries preferences and behavioural state only. Supports modes: reinforce (re-observed, boost confidence), update (value changed), contradict (value contradicts prior), merge (combine overlapping preferences).", {
|
|
1498
|
+
category: z.enum(["communication", "scheduling", "decision", "workflow", "content", "interaction"])
|
|
1499
|
+
.describe("Preference category"),
|
|
1500
|
+
key: z.string().describe("Preference identifier (e.g. 'response_length', 'meeting_time')"),
|
|
1501
|
+
value: z.string().describe("The preference value (e.g. 'terse', 'never before 10am')"),
|
|
1502
|
+
source: z.enum(["explicit", "behavioural"]).optional()
|
|
1503
|
+
.describe("How the preference was observed. Defaults to 'behavioural'."),
|
|
1504
|
+
mode: z.enum(["reinforce", "update", "contradict", "merge"]).optional()
|
|
1505
|
+
.describe("Update mode. Defaults to 'reinforce'."),
|
|
1506
|
+
conversationId: z.string().optional()
|
|
1507
|
+
.describe("Conversation ID for evidence linking"),
|
|
1508
|
+
profileFields: z.record(z.string(), z.unknown()).optional()
|
|
1509
|
+
.describe("Top-level UserProfile fields to update (e.g. timezone, locale, role)"),
|
|
1510
|
+
personFields: z.object({
|
|
1511
|
+
email: z.string().optional(),
|
|
1512
|
+
telephone: z.string().optional(),
|
|
1513
|
+
}).optional()
|
|
1514
|
+
.describe("Operator-identity fields written to the OWNS-bound Person. Use canonical `telephone` (NOT `phone` — that is the schema synonym, not the canonical name). Tool throws if the AdminUser-OWNS-Person edge is missing rather than silently no-op."),
|
|
1515
|
+
mergeSourceIds: z.array(z.string()).optional()
|
|
1516
|
+
.describe("For mode 'merge': preferenceIds of sources to combine into this preference"),
|
|
1517
|
+
}, async ({ category, key, value, source, mode, conversationId, profileFields, personFields, mergeSourceIds }) => {
|
|
1518
|
+
try {
|
|
1519
|
+
if (!userId) {
|
|
1520
|
+
return { content: [{ type: "text", text: "profile-update requires an authenticated admin session with userId" }], isError: true };
|
|
1521
|
+
}
|
|
1522
|
+
const result = await profileUpdate({
|
|
1523
|
+
accountId,
|
|
1524
|
+
userId,
|
|
1525
|
+
category,
|
|
1526
|
+
key,
|
|
1527
|
+
value,
|
|
1528
|
+
source,
|
|
1529
|
+
mode,
|
|
1530
|
+
conversationId,
|
|
1531
|
+
profileFields: profileFields,
|
|
1532
|
+
personFields,
|
|
1533
|
+
mergeSourceIds,
|
|
1534
|
+
});
|
|
1535
|
+
return {
|
|
1536
|
+
content: [{
|
|
1537
|
+
type: "text",
|
|
1538
|
+
text: `Preference ${result.action}: ${category}/${key} (confidence: ${result.confidence.toFixed(2)}${result.mergedCount ? `, merged ${result.mergedCount} sources` : ""})`,
|
|
1539
|
+
}],
|
|
1540
|
+
};
|
|
1541
|
+
}
|
|
1542
|
+
catch (err) {
|
|
1543
|
+
return {
|
|
1544
|
+
content: [{
|
|
1545
|
+
type: "text",
|
|
1546
|
+
text: `profile-update failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
1547
|
+
}],
|
|
1548
|
+
isError: true,
|
|
1549
|
+
};
|
|
1550
|
+
}
|
|
1551
|
+
});
|
|
1552
|
+
server.tool("profile-delete", "Soft-delete a specific user preference (marks :Trashed, restorable via memory-restore within the grace period; permanently removed later by memory-empty-trash). Use when the owner says 'forget that' or 'don't remember X'. Idempotent — succeeds even if the preference doesn't exist.", {
|
|
1553
|
+
category: z.enum(["communication", "scheduling", "decision", "workflow", "content", "interaction"])
|
|
1554
|
+
.describe("Preference category"),
|
|
1555
|
+
key: z.string().describe("Preference key to delete"),
|
|
1556
|
+
}, async ({ category, key }) => {
|
|
1557
|
+
try {
|
|
1558
|
+
if (!userId) {
|
|
1559
|
+
return { content: [{ type: "text", text: "profile-delete requires an authenticated admin session with userId" }], isError: true };
|
|
1560
|
+
}
|
|
1561
|
+
const result = await profileDelete({ accountId, userId, category, key });
|
|
1562
|
+
return {
|
|
1563
|
+
content: [{
|
|
1564
|
+
type: "text",
|
|
1565
|
+
text: result.deleted
|
|
1566
|
+
? `Deleted preference: ${category}/${key}`
|
|
1567
|
+
: `No preference found for ${category}/${key} — nothing to delete.`,
|
|
1568
|
+
}],
|
|
1569
|
+
};
|
|
1570
|
+
}
|
|
1571
|
+
catch (err) {
|
|
1572
|
+
return {
|
|
1573
|
+
content: [{
|
|
1574
|
+
type: "text",
|
|
1575
|
+
text: `profile-delete failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
1576
|
+
}],
|
|
1577
|
+
isError: true,
|
|
1578
|
+
};
|
|
1579
|
+
}
|
|
1580
|
+
});
|
|
1581
|
+
// profile-read contains owner PII (name, role, timezone, preferences) —
|
|
1582
|
+
// admin-only, not exposed to the public agent.
|
|
1583
|
+
server.tool("profile-read", "Read the business owner's profile and preferences. Returns preferences grouped by category (communication, scheduling, decisions, workflow, content, interaction). " +
|
|
1584
|
+
"With detail=true: includes per-preference confidence scores, evidence trail (which conversations the preference was observed in), source (explicit vs behavioural), and summary statistics. " +
|
|
1585
|
+
"Use detail=true when the owner asks 'what do you know about me?' or when reviewing memory accuracy.", {
|
|
1586
|
+
detail: z.boolean().optional().describe("When true, returns per-preference confidence, source, evidence trail, and memory statistics. " +
|
|
1587
|
+
"Default false returns a compact summary for system prompt injection."),
|
|
1588
|
+
}, async ({ detail }) => {
|
|
1589
|
+
try {
|
|
1590
|
+
if (!userId) {
|
|
1591
|
+
return { content: [{ type: "text", text: "profile-read requires an authenticated admin session with userId" }], isError: true };
|
|
1592
|
+
}
|
|
1593
|
+
const result = await profileRead({ accountId, userId, detail: detail ?? false });
|
|
1594
|
+
return {
|
|
1595
|
+
content: [{ type: "text", text: result.summary }],
|
|
1596
|
+
};
|
|
1597
|
+
}
|
|
1598
|
+
catch (err) {
|
|
1599
|
+
return {
|
|
1600
|
+
content: [
|
|
1601
|
+
{
|
|
1602
|
+
type: "text",
|
|
1603
|
+
text: `profile-read failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
1604
|
+
},
|
|
1605
|
+
],
|
|
1606
|
+
isError: true,
|
|
1607
|
+
};
|
|
1608
|
+
}
|
|
1609
|
+
});
|
|
1610
|
+
// -------------------------------------------------------------------------
|
|
1611
|
+
// Deny-list maintenance + conversation-memory expunge.
|
|
1612
|
+
//
|
|
1613
|
+
// The deny-list is operator-curated storage of "never surface these
|
|
1614
|
+
// substrings" signal. Nothing auto-applies it — no cron, no bulk engine.
|
|
1615
|
+
// The admin agent reads the list and applies discretion per case via
|
|
1616
|
+
// memory-update, memory-delete, or conversation-memory-expunge. This
|
|
1617
|
+
// replaces the removed graph-prune autonomous rule engine whose
|
|
1618
|
+
// orphan-delete rule wiped 19 nodes on 2026-04-20.
|
|
1619
|
+
// -------------------------------------------------------------------------
|
|
1620
|
+
server.tool("graph-prune-denylist-add", "Add one or more strings to the operator-curated deny-list. The list is a stored signal — no cron, no " +
|
|
1621
|
+
"autonomous sweep. The admin agent reads the list and decides per case whether to null a property " +
|
|
1622
|
+
"via memory-update, remove a node via memory-delete, or scrub a conversation's :Memory via " +
|
|
1623
|
+
"conversation-memory-expunge. Use to record poisonous substrings (retired domain names, wrong " +
|
|
1624
|
+
"account ids, fabricated identifiers) that you want the agent to watch for. The list is shared " +
|
|
1625
|
+
"per-device and survives upgrades.", {
|
|
1626
|
+
values: z.array(z.string().min(1)).min(1).describe("Substring values to add. Match is exact substring (case-sensitive) against string-typed properties only."),
|
|
1627
|
+
}, async ({ values }) => {
|
|
1628
|
+
try {
|
|
1629
|
+
const result = graphPruneDenylistAdd(values);
|
|
1630
|
+
const lines = [
|
|
1631
|
+
`Added ${result.added.length} entries to deny-list (total ${result.totalAfter}).`,
|
|
1632
|
+
];
|
|
1633
|
+
if (result.added.length > 0)
|
|
1634
|
+
lines.push(`Added: ${result.added.join(", ")}`);
|
|
1635
|
+
if (result.skipped.length > 0)
|
|
1636
|
+
lines.push(`Already present (skipped): ${result.skipped.join(", ")}`);
|
|
1637
|
+
lines.push("No autonomous sweep — apply discretion via memory-update / memory-delete / conversation-memory-expunge on reads that surface matching content.");
|
|
1638
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
1639
|
+
}
|
|
1640
|
+
catch (err) {
|
|
1641
|
+
return {
|
|
1642
|
+
content: [{ type: "text", text: `graph-prune-denylist-add failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1643
|
+
isError: true,
|
|
1644
|
+
};
|
|
1645
|
+
}
|
|
1646
|
+
});
|
|
1647
|
+
server.tool("graph-prune-denylist-remove", "Remove one or more strings from the operator-curated deny-list. Entries no longer serve as signal " +
|
|
1648
|
+
"for the admin agent. Any property values previously nulled via manual memory-update calls are not " +
|
|
1649
|
+
"restored — audit entries on each affected node remain for forensic review.", {
|
|
1650
|
+
values: z.array(z.string().min(1)).min(1).describe("Substring values to remove (must match exactly as previously added)."),
|
|
1651
|
+
}, async ({ values }) => {
|
|
1652
|
+
try {
|
|
1653
|
+
const result = graphPruneDenylistRemove(values);
|
|
1654
|
+
const lines = [
|
|
1655
|
+
`Removed ${result.removed.length} entries from deny-list (total ${result.totalAfter}).`,
|
|
1656
|
+
];
|
|
1657
|
+
if (result.removed.length > 0)
|
|
1658
|
+
lines.push(`Removed: ${result.removed.join(", ")}`);
|
|
1659
|
+
if (result.notFound.length > 0)
|
|
1660
|
+
lines.push(`Not present (skipped): ${result.notFound.join(", ")}`);
|
|
1661
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
1662
|
+
}
|
|
1663
|
+
catch (err) {
|
|
1664
|
+
return {
|
|
1665
|
+
content: [{ type: "text", text: `graph-prune-denylist-remove failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1666
|
+
isError: true,
|
|
1667
|
+
};
|
|
1668
|
+
}
|
|
1669
|
+
});
|
|
1670
|
+
server.tool("conversation-memory-expunge", "Remove deny-listable content from a specific conversation's :Memory nodes by manually-supplied " +
|
|
1671
|
+
"substring pattern. Targets :Memory nodes linked to the named Conversation; nulls every string property " +
|
|
1672
|
+
"whose value contains the pattern, with an audit entry on each affected node. The conversation transcript " +
|
|
1673
|
+
"(Message nodes) is immutable history and is never modified — only the derived :Memory payload that " +
|
|
1674
|
+
"memory-search would otherwise re-surface. Use when a single conversation polluted memory with claims " +
|
|
1675
|
+
"that should not propagate (e.g. wrong-account hostnames, fabricated identifiers).", {
|
|
1676
|
+
conversationId: z.string().min(1).describe("The Conversation node's conversationId to scope the expunge to."),
|
|
1677
|
+
pattern: z.string().min(1).describe("The substring to scrub from string properties on linked :Memory nodes."),
|
|
1678
|
+
}, async ({ conversationId, pattern }) => {
|
|
1679
|
+
try {
|
|
1680
|
+
const result = await conversationMemoryExpunge({ accountId, conversationId, pattern });
|
|
1681
|
+
const lines = [
|
|
1682
|
+
`Expunged "${result.pattern}" from conversation ${result.conversationId.slice(0, 8)}…`,
|
|
1683
|
+
`:Memory nodes scanned: ${result.nodesScanned}`,
|
|
1684
|
+
`Properties nulled: ${result.propertiesNulled}`,
|
|
1685
|
+
];
|
|
1686
|
+
if (result.affectedNodeIds.length > 0 && result.affectedNodeIds.length <= 25) {
|
|
1687
|
+
lines.push(`Affected node ids: ${result.affectedNodeIds.join(", ")}`);
|
|
1688
|
+
}
|
|
1689
|
+
else if (result.affectedNodeIds.length > 25) {
|
|
1690
|
+
lines.push(`Affected node ids: ${result.affectedNodeIds.length} nodes (too many to list — see graph-prune.log for [graph:prune:action] entries).`);
|
|
1691
|
+
}
|
|
1692
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
1693
|
+
}
|
|
1694
|
+
catch (err) {
|
|
1695
|
+
return {
|
|
1696
|
+
content: [{ type: "text", text: `conversation-memory-expunge failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1697
|
+
isError: true,
|
|
1698
|
+
};
|
|
1699
|
+
}
|
|
1700
|
+
});
|
|
1701
|
+
}
|
|
1702
|
+
// graph-prune-denylist-list and conversation-search are read-only — available regardless of readOnly mode.
|
|
1703
|
+
server.tool("graph-prune-denylist-list", "List the current operator-curated deny-list values used by the daily graph-prune cron. " +
|
|
1704
|
+
"Returns the substring values, the timestamp of the last edit, and the total count.", {}, () => {
|
|
1705
|
+
try {
|
|
1706
|
+
const result = graphPruneDenylistList();
|
|
1707
|
+
if (result.count === 0) {
|
|
1708
|
+
return { content: [{ type: "text", text: "Deny-list is empty. Use graph-prune-denylist-add to seed entries." }] };
|
|
1709
|
+
}
|
|
1710
|
+
const text = `Deny-list (${result.count} entries, updated ${result.updatedAt}):\n${result.values.map((v) => ` - ${v}`).join("\n")}`;
|
|
1711
|
+
return { content: [{ type: "text", text }] };
|
|
1712
|
+
}
|
|
1713
|
+
catch (err) {
|
|
1714
|
+
return {
|
|
1715
|
+
content: [{ type: "text", text: `graph-prune-denylist-list failed: ${err instanceof Error ? err.message : String(err)}` }],
|
|
1716
|
+
isError: true,
|
|
1717
|
+
};
|
|
1718
|
+
}
|
|
1719
|
+
});
|
|
1720
|
+
// conversation-search is read-only — available regardless of readOnly mode.
|
|
1721
|
+
// When SESSION_ID is set (public agent), results are scoped to that conversation only.
|
|
1722
|
+
eagerTool(server, "conversation-search", "Search conversation history using semantic vector search. Returns relevant past messages, ordered by relevance. Use this to recall specific past interactions.", {
|
|
1723
|
+
query: z.string().describe("Natural language search query"),
|
|
1724
|
+
limit: z
|
|
1725
|
+
.number()
|
|
1726
|
+
.optional()
|
|
1727
|
+
.describe("Maximum number of results (default 10)"),
|
|
1728
|
+
}, async ({ query, limit: maxResults }) => {
|
|
1729
|
+
try {
|
|
1730
|
+
const queryEmbedding = await embed(query);
|
|
1731
|
+
const resultLimit = maxResults ?? 10;
|
|
1732
|
+
const dbSession = getSession();
|
|
1733
|
+
try {
|
|
1734
|
+
const conversationSessionId = resolveSessionId();
|
|
1735
|
+
const sessionClause = conversationSessionId
|
|
1736
|
+
? "AND node.conversationId = $sessionId"
|
|
1737
|
+
: "";
|
|
1738
|
+
const result = await dbSession.run(`CALL db.index.vector.queryNodes('message_embedding', $limit, $embedding)
|
|
1739
|
+
YIELD node, score
|
|
1740
|
+
WHERE node.accountId = $accountId
|
|
1741
|
+
${sessionClause}
|
|
1742
|
+
AND ${notTrashed("node")}
|
|
1743
|
+
WITH node, score
|
|
1744
|
+
OPTIONAL MATCH (node)-[:PART_OF]->(c:Conversation) WHERE ${notTrashed("c")}
|
|
1745
|
+
RETURN node.messageId AS messageId,
|
|
1746
|
+
node.role AS role,
|
|
1747
|
+
node.content AS content,
|
|
1748
|
+
node.conversationId AS conversationId,
|
|
1749
|
+
c.name AS sessionName,
|
|
1750
|
+
node.createdAt AS createdAt,
|
|
1751
|
+
score
|
|
1752
|
+
ORDER BY score DESC
|
|
1753
|
+
LIMIT $limit`, {
|
|
1754
|
+
embedding: queryEmbedding,
|
|
1755
|
+
limit: int(resultLimit),
|
|
1756
|
+
accountId,
|
|
1757
|
+
...(conversationSessionId ? { sessionId: conversationSessionId } : {}),
|
|
1758
|
+
});
|
|
1759
|
+
if (result.records.length === 0) {
|
|
1760
|
+
return {
|
|
1761
|
+
content: [{ type: "text", text: "No conversation history found for this query." }],
|
|
1762
|
+
};
|
|
1763
|
+
}
|
|
1764
|
+
const formatted = result.records.map((r) => {
|
|
1765
|
+
const role = r.get("role");
|
|
1766
|
+
const content = r.get("content");
|
|
1767
|
+
const score = typeof r.get("score") === "number" ? r.get("score") : Number(r.get("score"));
|
|
1768
|
+
const createdAt = String(r.get("createdAt"));
|
|
1769
|
+
const convId = r.get("conversationId");
|
|
1770
|
+
const sessionName = r.get("sessionName");
|
|
1771
|
+
const convPrefix = convId ? convId.slice(0, 8) : "unknown";
|
|
1772
|
+
const convLabel = sessionName
|
|
1773
|
+
? `[conv:${convPrefix} "${sessionName}"]`
|
|
1774
|
+
: `[conv:${convPrefix}]`;
|
|
1775
|
+
return `${convLabel} [${role}] (score: ${score.toFixed(3)}, ${createdAt})\n ${content}`;
|
|
1776
|
+
});
|
|
1777
|
+
// Diagnostic: log when admin search results span multiple conversations
|
|
1778
|
+
const distinctConvIds = new Set(result.records
|
|
1779
|
+
.map((r) => r.get("conversationId"))
|
|
1780
|
+
.filter(Boolean));
|
|
1781
|
+
if (distinctConvIds.size > 1) {
|
|
1782
|
+
const prefixes = [...distinctConvIds].map((id) => id.slice(0, 8));
|
|
1783
|
+
process.stderr.write(`[conversation-search] [${accountId}] results span ${distinctConvIds.size} conversations: ${prefixes.join(", ")} (query: ${query.slice(0, 80)})\n`);
|
|
1784
|
+
}
|
|
1785
|
+
return {
|
|
1786
|
+
content: [{ type: "text", text: formatted.join("\n---\n") }],
|
|
1787
|
+
};
|
|
1788
|
+
}
|
|
1789
|
+
finally {
|
|
1790
|
+
await dbSession.close();
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1793
|
+
catch (err) {
|
|
1794
|
+
return {
|
|
1795
|
+
content: [
|
|
1796
|
+
{
|
|
1797
|
+
type: "text",
|
|
1798
|
+
text: `Conversation search failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
1799
|
+
},
|
|
1800
|
+
],
|
|
1801
|
+
isError: true,
|
|
1802
|
+
};
|
|
1803
|
+
}
|
|
1804
|
+
});
|
|
1805
|
+
// Cleanup on exit
|
|
1806
|
+
process.on("SIGINT", async () => {
|
|
1807
|
+
liveSchemaRuntime.cache.stop();
|
|
1808
|
+
await closeDriver();
|
|
1809
|
+
process.exit(0);
|
|
1810
|
+
});
|
|
1811
|
+
const transport = new StdioServerTransport();
|
|
1812
|
+
await server.connect(transport);
|
|
1813
|
+
//# sourceMappingURL=index.js.map
|