@rubytech/create-maxy-code 0.1.33 → 0.1.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/account-id-env.test.js +1 -1
- package/dist/__tests__/apt-resolve.test.js +7 -7
- package/dist/__tests__/brew-install.test.js +1 -1
- package/dist/__tests__/brew-resolve.test.js +1 -1
- package/dist/__tests__/cdp-port-no-silent-fallback.test.js +4 -4
- package/dist/__tests__/init-logging.test.js +1 -1
- package/dist/__tests__/launchd-plist.test.js +1 -1
- package/dist/__tests__/macos-version.test.js +1 -1
- package/dist/__tests__/peer-brand-detect.test.js +1 -1
- package/dist/__tests__/platform-detect.test.js +2 -2
- package/dist/__tests__/port-canonicalisation.test.js +1 -1
- package/dist/__tests__/preflight-port-classifier.test.js +6 -6
- package/dist/__tests__/samba-provision.test.js +1 -1
- package/dist/__tests__/snap-chromium.test.js +1 -1
- package/dist/apt-resolve.js +5 -5
- package/dist/brew-install.js +1 -1
- package/dist/brew-resolve.js +3 -3
- package/dist/index.js +146 -122
- package/dist/init-logging.js +1 -1
- package/dist/launchd-plist.js +1 -1
- package/dist/macos-version.js +2 -2
- package/dist/peer-brand-detect.js +1 -1
- package/dist/pinned-binaries.js +1 -1
- package/dist/platform-detect.js +1 -1
- package/dist/port-resolution.js +2 -2
- package/dist/preflight-port-classifier.js +3 -3
- package/dist/samba-provision.js +1 -1
- package/dist/snap-chromium.js +3 -3
- package/dist/uninstall.js +28 -28
- package/package.json +4 -1
- package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js +1 -1
- package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js.map +1 -1
- package/payload/platform/lib/account-enumeration/dist/index.d.ts +1 -1
- package/payload/platform/lib/account-enumeration/src/__tests__/validate-env.test.ts +1 -1
- package/payload/platform/lib/account-enumeration/src/index.ts +1 -1
- package/payload/platform/lib/admins-write/dist/index.js +3 -3
- package/payload/platform/lib/admins-write/dist/index.js.map +1 -1
- package/payload/platform/lib/admins-write/src/index.ts +4 -4
- package/payload/platform/lib/entitlement/dist/index.d.ts +1 -1
- package/payload/platform/lib/entitlement/dist/index.js +2 -2
- package/payload/platform/lib/entitlement/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.d.ts +3 -3
- package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.js +3 -3
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/index.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/index.js +24 -24
- package/payload/platform/lib/graph-mcp/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/schema-cache.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/schema-cache.js +2 -2
- package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.d.ts +3 -3
- package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.js +3 -3
- package/payload/platform/lib/graph-mcp/src/__tests__/warnings-envelope.test.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/cypher-rewrite-stamp.ts +3 -3
- package/payload/platform/lib/graph-mcp/src/cypher-shim-read.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/cypher-shim-write.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/cypher-validate.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/index.ts +29 -29
- package/payload/platform/lib/graph-mcp/src/schema-cache.ts +2 -2
- package/payload/platform/lib/graph-mcp/src/schema-cypher-parser.ts +3 -3
- package/payload/platform/lib/graph-search/dist/index.d.ts +12 -12
- package/payload/platform/lib/graph-search/dist/index.js +11 -11
- package/payload/platform/lib/graph-search/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-search/src/__tests__/bm25-label-gate.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/__tests__/bm25-strong-bypass-threshold.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/__tests__/brochure-threshold.test.ts +3 -3
- package/payload/platform/lib/graph-search/src/__tests__/expand-batch.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/__tests__/fulltext-coverage.test.ts +6 -6
- package/payload/platform/lib/graph-search/src/__tests__/hybrid.test.ts +5 -5
- package/payload/platform/lib/graph-search/src/__tests__/vector-threshold.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/index.ts +18 -18
- package/payload/platform/lib/graph-trash/dist/index.d.ts +3 -3
- package/payload/platform/lib/graph-trash/dist/index.js +3 -3
- package/payload/platform/lib/graph-trash/src/index.ts +3 -3
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js +4 -4
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js.map +1 -1
- package/payload/platform/lib/graph-write/dist/audit.d.ts +2 -2
- package/payload/platform/lib/graph-write/dist/audit.js +2 -2
- package/payload/platform/lib/graph-write/dist/conversation-provenance.js +1 -1
- package/payload/platform/lib/graph-write/dist/conversation-provenance.js.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.d.ts +5 -5
- package/payload/platform/lib/graph-write/dist/index.js +12 -12
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-write/src/__tests__/action-provenance-gate.test.ts +4 -4
- package/payload/platform/lib/graph-write/src/audit.ts +2 -2
- package/payload/platform/lib/graph-write/src/conversation-provenance.ts +1 -1
- package/payload/platform/lib/graph-write/src/index.ts +13 -13
- package/payload/platform/lib/mcp-eager/dist/index.d.ts +2 -2
- package/payload/platform/lib/mcp-eager/dist/index.js +2 -2
- package/payload/platform/lib/mcp-eager/src/index.ts +2 -2
- package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts +2 -2
- package/payload/platform/lib/mcp-spawn-tee/dist/index.js +2 -2
- package/payload/platform/lib/mcp-spawn-tee/src/index.ts +2 -2
- package/payload/platform/lib/mcp-stderr-tee/dist/index.d.ts +1 -1
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js +4 -4
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js.map +1 -1
- package/payload/platform/lib/mcp-stderr-tee/src/index.ts +4 -4
- package/payload/platform/lib/oauth-llm/dist/index.d.ts +4 -4
- package/payload/platform/lib/oauth-llm/dist/index.js +3 -3
- package/payload/platform/lib/oauth-llm/dist/index.js.map +1 -1
- package/payload/platform/lib/oauth-llm/src/index.ts +6 -6
- package/payload/platform/lib/persistent-components/dist/index.d.ts +1 -1
- package/payload/platform/lib/persistent-components/dist/index.js +1 -1
- package/payload/platform/lib/persistent-components/src/index.ts +1 -1
- package/payload/platform/lib/task-secrets/dist/index.js +1 -1
- package/payload/platform/lib/task-secrets/dist/index.js.map +1 -1
- package/payload/platform/lib/task-secrets/src/__tests__/redact-secrets.test.ts +1 -1
- package/payload/platform/lib/task-secrets/src/index.ts +1 -1
- package/payload/platform/neo4j/edge-annotations.json +9 -9
- package/payload/platform/neo4j/schema.cypher +32 -33
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/admin/PLUGIN.md +0 -2
- package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +4 -4
- package/payload/platform/plugins/admin/hooks/__tests__/playwright-file-guard.test.sh +1 -1
- package/payload/platform/plugins/admin/hooks/__tests__/pre-tool-use-base64-guard.test.sh +1 -1
- package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +13 -13
- package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +7 -7
- package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/index.js +38 -65
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js +5 -5
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js.map +1 -1
- package/payload/platform/plugins/admin/skills/plugin-management/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +0 -1
- package/payload/platform/plugins/admin/skills/publish-site/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/unzip-attachment/SKILL.md +2 -2
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +6 -6
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.d.ts +2 -2
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.js +2 -2
- package/payload/platform/plugins/cloudflare/references/dashboard-guide.md +1 -1
- package/payload/platform/plugins/cloudflare/references/manual-setup.md +4 -4
- package/payload/platform/plugins/cloudflare/scripts/__tests__/tunnel-ingress.test.ts +1 -1
- package/payload/platform/plugins/cloudflare/scripts/_stream-log.sh +8 -8
- package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.sh +2 -2
- package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.ts +16 -16
- package/payload/platform/plugins/cloudflare/scripts/reset-tunnel.sh +1 -1
- package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +28 -28
- package/payload/platform/plugins/cloudflare/scripts/tunnel-ingress.ts +5 -5
- package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +3 -3
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.d.ts +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.js +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +2 -2
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js.map +1 -1
- package/payload/platform/plugins/docs/references/deployment.md +30 -1
- package/payload/platform/plugins/docs/references/platform.md +1 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -5
- package/payload/platform/plugins/docs/references/troubleshooting.md +3 -3
- package/payload/platform/plugins/email/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js +2 -2
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/screening.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +6 -6
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +2 -2
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +2 -2
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js +3 -3
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/loop/mcp/src/lib/neo4j.ts +3 -3
- package/payload/platform/plugins/memory/bin/conversation-archive-ingest.mjs +24 -24
- package/payload/platform/plugins/memory/bin/conversation-archive-ingest.sh +6 -6
- package/payload/platform/plugins/memory/mcp/dist/index.js +8 -8
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +33 -33
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js +12 -12
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js +1 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js +6 -6
- package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js +7 -7
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +9 -9
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +25 -25
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js +5 -5
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts +4 -4
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts +3 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +5 -5
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js +5 -5
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js +4 -4
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js +6 -6
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js +7 -7
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.d.ts +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +9 -9
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +10 -11
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js +9 -9
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +5 -5
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +9 -9
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/scripts/boot-smoke.sh +1 -1
- package/payload/platform/plugins/memory/mcp/scripts/graph/fixture.cypher +1 -1
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -2
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/scripts/verify-doc-impl.sh +1 -1
- package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js +3 -3
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.d.ts +2 -2
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js +5 -5
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +6 -6
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js +2 -2
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.d.ts +5 -5
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js +3 -3
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.d.ts +4 -4
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js +2 -2
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +2 -2
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js +3 -3
- package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js +3 -3
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +5 -5
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +1 -1
- package/payload/platform/plugins/whatsapp/mcp/dist/call-api.d.ts +1 -1
- package/payload/platform/plugins/whatsapp/mcp/dist/call-api.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +4 -4
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/test-workflows.sh +2 -2
- package/payload/platform/scripts/__tests__/first-token-creates-stream-log.test.sh +1 -1
- package/payload/platform/scripts/__tests__/logs-read-prefix.sh +6 -6
- package/payload/platform/scripts/admin-conversation-recover.mjs +5 -5
- package/payload/platform/scripts/admin-persist-audit.ts +4 -4
- package/payload/platform/scripts/check-no-conversation-id-leaks.mjs +1 -1
- package/payload/platform/scripts/check-no-direct-clipboard.mjs +1 -1
- package/payload/platform/scripts/check-no-task-id-leaks.mjs +2 -2
- package/payload/platform/scripts/check-skill-load-coverage.mjs +1 -1
- package/payload/platform/scripts/component-knowledgedoc-backfill.ts +1 -1
- package/payload/platform/scripts/dedupe-userprofile-ghosts.sh +2 -2
- package/payload/platform/scripts/generate-entitlement-fixture.mjs +1 -1
- package/payload/platform/scripts/installer-device-verify.sh +6 -6
- package/payload/platform/scripts/lib/resolve-account-dir.sh +6 -6
- package/payload/platform/scripts/log-adherence-check.sh +3 -3
- package/payload/platform/scripts/logs-read.sh +13 -13
- package/payload/platform/scripts/logs-read.test.sh +1 -1
- package/payload/platform/scripts/migrate-import.sh +4 -4
- package/payload/platform/scripts/redact-install-logs.sh +1 -1
- package/payload/platform/scripts/seed-neo4j.sh +26 -32
- package/payload/platform/scripts/test-laptop-vnc-boot.sh +3 -3
- package/payload/platform/scripts/verify-skill-tool-surface.sh +17 -2
- package/payload/platform/scripts/vnc.sh +9 -9
- package/payload/platform/services/claude-session-manager/dist/config.d.ts +7 -2
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.js +3 -1
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +2 -2
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +145 -90
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +17 -4
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts +2 -2
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js +4 -4
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js +39 -10
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +2 -2
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +37 -18
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +176 -49
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +36 -11
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-store.js +53 -2
- package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js +2 -2
- package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +46 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js +131 -24
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/types.d.ts +8 -1
- package/payload/platform/services/claude-session-manager/dist/types.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/url-capture.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/url-capture.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +14 -0
- package/payload/platform/templates/agents/admin/SOUL.md +1 -3
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -3
- package/payload/platform/templates/specialists/agents/project-manager.md +1 -1
- package/payload/platform/templates/systemd/edge.service.template +3 -3
- package/payload/premium-plugins/real-agent/BUNDLE.md +2 -4
- package/payload/premium-plugins/real-agent/plugins/.claude-plugin/marketplace.json +0 -5
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js +3 -3
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/neo4j.ts +3 -3
- package/payload/server/{chunk-ZGJ6CUU2.js → chunk-3G6JMV7N.js} +1 -1
- package/payload/server/{chunk-KVGTWNKQ.js → chunk-NNHHGQJL.js} +314 -5
- package/payload/server/{chunk-RZQMYJVY.js → chunk-QC5LHYPH.js} +3 -3
- package/payload/server/{cloudflare-task-tracker-4PKOLE4H.js → cloudflare-task-tracker-NEB3X6O2.js} +2 -2
- package/payload/server/maxy-edge.js +2 -2
- package/payload/server/public/assets/{Checkbox-C6zXApx_.js → Checkbox-8mOR8-gV.js} +1 -1
- package/payload/server/public/assets/{admin-Cuu1QdAA.js → admin-CK4V-B9A.js} +24 -24
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BYXgFii5.js → architectureDiagram-Q4EWVU46-2DgPtOot.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-GIQ0eO13.js → blockDiagram-DXYQGD6D-BilycXVZ.js} +1 -1
- package/payload/server/public/assets/{brand-DdhkC994.css → brand-1_DraUIv.css} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-BmyWfG-l.js → c4Diagram-AHTNJAMY-CGiIFO5U.js} +1 -1
- package/payload/server/public/assets/channel-DYpIZW3Q.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-DcWl0MQo.js → chunk-336JU56O-DxTg1h50.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-BIW6kq6y.js → chunk-426QAEUC-DkGPjs0P.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-CdoHpV4X.js → chunk-4TB4RGXK-D2JaxD6r.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-bn_a4sfU.js → chunk-5FUZZQ4R-Do3pbAGo.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-C_Rq8j_M.js → chunk-5PVQY5BW-np5moZSl.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-CWQvoVKV.js → chunk-EDXVE4YY-BUFLWwRP.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-DBHn1kSk.js → chunk-ENJZ2VHE-BE7Gt41s.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-SW2Qx11O.js → chunk-ICPOFSXX-gOBkROMP.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-BvIG7tVW.js → chunk-OYMX7WX6-DR-BkNZa.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-BiBUb0cF.js → chunk-U2HBQHQK-qLp-uSVE.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-Y0MKZCCh.js → chunk-X2U36JSP-DQiKti0J.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-DKPh06GH.js → chunk-YZCP3GAM-Cd0JhpTo.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-C2WNo-fK.js → chunk-ZZ45TVLE-8u01H3Hy.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-nkfy9gg7.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-B-pMmeCC.js +1 -0
- package/payload/server/public/assets/clone-jiTzIER6.js +1 -0
- package/payload/server/public/assets/{dagre-CrK8E9ee.js → dagre-BfVsOYOv.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-_o6uXcH8.js → dagre-KV5264BT-BBF_zxbi.js} +1 -1
- package/payload/server/public/assets/data-BIOaDoqe.js +1 -0
- package/payload/server/public/assets/{device-url-actions-BcHerWqJ.js → device-url-actions-CJBD3ecO.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-FFP9DKhc.js → diagram-5BDNPKRD-BFHk2a7t.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-DpwD1jBP.js → diagram-G4DWMVQ6-Be3_qYl2.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-C3K5agdK.js → diagram-MMDJMWI5-B3r4XVcu.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-CbeDipbC.js → diagram-TYMM5635-BW5EIT4D.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-XBIFndNy.js → erDiagram-SMLLAGMA-DTu4_1Kb.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BvEgySyn.js → flowDiagram-DWJPFMVM-CadrjLcA.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-D7gIRKJf.js → ganttDiagram-T4ZO3ILL-Cn0npD0L.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-vJu_hcri.js → gitGraphDiagram-UUTBAWPF-CK3gG5Qm.js} +1 -1
- package/payload/server/public/assets/graph-ClfU7t1k.js +1 -0
- package/payload/server/public/assets/graph-labels-CPzF6Gbk.js +1 -0
- package/payload/server/public/assets/{graphlib-Dp0mN6JW.js → graphlib-DFIOO59N.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-g4Dlc5Cr.js → infoDiagram-42DDH7IO-BohUsXnN.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-D_45LXOe.js → ishikawaDiagram-UXIWVN3A-tjmA4BU8.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CggbHl6N.js → journeyDiagram-VCZTEJTY-DzBlFESM.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-CysAe-Ab.js → kanban-definition-6JOO6SKY-BTw9BxK8.js} +1 -1
- package/payload/server/public/assets/{line-BAxq_DSY.js → line-BYPL6wAj.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-DbFuvkjL.js → mermaid-parser.core-Dmu4fWCS.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-CehvJn5b.js → mermaid.core-Z9vvieC2.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-DbPbBJ9h.js → mindmap-definition-QFDTVHPH-BccAnfJ4.js} +1 -1
- package/payload/server/public/assets/page-CBTlFm3b.js +1 -0
- package/payload/server/public/assets/{page-Co7KCRV8.js → page-CDrsNrDO.js} +1 -1
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-cagLL9ng.js → pieDiagram-DEJITSTG-CZwxH1nJ.js} +1 -1
- package/payload/server/public/assets/{public-B6TEcDLx.js → public-MKWxjwiF.js} +3 -3
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-Keaa1jDh.js → quadrantDiagram-34T5L4WZ-BWT4DItX.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-BcYRyn5z.js → requirementDiagram-MS252O5E-CHYkWUEy.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6--fKoG9NR.js → sankeyDiagram-XADWPNL6-km7p45Ng.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-lKG36-Di.js → sequenceDiagram-FGHM5R23-BT1C0Dw-.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BuVsrlig.js → stateDiagram-FHFEXIEX-hibC19DY.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-MuJZxjmU.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-D6X6uq17.js → timeline-definition-GMOUNBTQ-Cnm86NfE.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BgvcfRVf.js → vennDiagram-DHZGUBPP-ByjQPLzS.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-Cpd1xsrt.js → wardleyDiagram-NUSXRM2D-CMVrWw7l.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CDF5ZVFv.js → xychartDiagram-5P7HB3ND-Mpc1u3FV.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +8 -8
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +288 -412
- package/payload/docs/desktop-code-controls.md +0 -63
- package/payload/platform/plugins/anthropic/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/anthropic/PLUGIN.md +0 -40
- package/payload/platform/plugins/anthropic/references/console-api.md +0 -186
- package/payload/platform/plugins/anthropic/references/setup-guide.md +0 -36
- package/payload/platform/plugins/anthropic/skills/get-api-key/SKILL.md +0 -136
- package/payload/platform/plugins/estate-onboarding/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/estate-onboarding/PLUGIN.md +0 -30
- package/payload/platform/plugins/estate-onboarding/skills/bootstrap/SKILL.md +0 -26
- package/payload/platform/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +0 -63
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/.claude-plugin/plugin.json +0 -8
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/PLUGIN.md +0 -30
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/skills/bootstrap/SKILL.md +0 -26
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +0 -63
- package/payload/server/public/assets/channel-C76knBRO.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bohexn7P.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DVsmsAu7.js +0 -1
- package/payload/server/public/assets/clone-DUrXF4sO.js +0 -1
- package/payload/server/public/assets/data-j1WNhF8t.js +0 -1
- package/payload/server/public/assets/graph-C_f_9L_7.js +0 -1
- package/payload/server/public/assets/graph-labels-BSQJHlgf.js +0 -1
- package/payload/server/public/assets/page-B0BPrSE3.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DSt88_xL.js +0 -1
- /package/payload/server/public/assets/{brand-B-bNrpwc.js → brand-CENN2zdq.js} +0 -0
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
// routing and cannot drift without breaking their entire dashboard; it
|
|
18
18
|
// is the most stable surface to key off.
|
|
19
19
|
//
|
|
20
|
-
// Why href-only (no page-text fallback):
|
|
21
|
-
// <main>-wide FQDN text walker ("Source B") after a reproduction returned
|
|
20
|
+
// Why href-only (no page-text fallback): an earlier
|
|
21
|
+
// <main>-wide FQDN text walker ("Source B") was removed after a reproduction returned
|
|
22
22
|
// `count=1` with a bogus string (`leg.interest` — a static footer FQDN-shape
|
|
23
23
|
// that hit the regex). The walker's non-empty result short-circuited the
|
|
24
24
|
// poll-to-success branch before zones hydrated 500 ms later, silently
|
|
@@ -52,13 +52,13 @@ import { fileURLToPath } from "node:url";
|
|
|
52
52
|
// for in-process tests (`scrapeCurrentPage` / `scrapeDomains` under JSDOM)
|
|
53
53
|
// does not require an installed brand on disk.
|
|
54
54
|
//
|
|
55
|
-
//
|
|
55
|
+
// source-of-truth contract:
|
|
56
56
|
// Runtime: brand.json `cdpPort` at `${MAXY_PLATFORM_ROOT}/config/brand.json`
|
|
57
57
|
// is authoritative. Wrapper exports MAXY_PLATFORM_ROOT and BRAND. Missing
|
|
58
58
|
// env / file / field → loud-fail with one of three named reasons. The
|
|
59
59
|
// pre-Task-954 silent CDP-port default made every non-Maxy brand fail
|
|
60
60
|
// `cdp-unreachable` because the helper hit Maxy's port instead of the
|
|
61
|
-
// brand's
|
|
61
|
+
// brand's / NEO4J_URI sets the precedent that runtime config
|
|
62
62
|
// never falls back silently.
|
|
63
63
|
//
|
|
64
64
|
// Test overrides: when BOTH `LIST_CF_DOMAINS_CDP_HOST` and
|
|
@@ -83,10 +83,10 @@ type Reason =
|
|
|
83
83
|
| "navigate-failed"
|
|
84
84
|
| "table-wait-timeout"
|
|
85
85
|
| "runtime-error"
|
|
86
|
-
//
|
|
86
|
+
// config-class failures. The first three short-circuit before
|
|
87
87
|
// any CDP work begins; the route maps them to `field='config'` so the
|
|
88
88
|
// form renders a config-card naming the brand + path instead of a Retry
|
|
89
|
-
// button (retrying re-fires the same wrongly-resolved spawn
|
|
89
|
+
// button (retrying re-fires the same wrongly-resolved spawn
|
|
90
90
|
// pattern).
|
|
91
91
|
| "brand-config-missing"
|
|
92
92
|
| "cdp-port-unresolved";
|
|
@@ -106,10 +106,10 @@ function logPhase(line: string): void {
|
|
|
106
106
|
process.stderr.write(`[list-cf-domains] ${line}\n`);
|
|
107
107
|
|
|
108
108
|
// Stream log: direct write by the TS helper (not via wrapper tee) so phase
|
|
109
|
-
// lines reach the per-conversation file the
|
|
109
|
+
// lines reach the per-conversation file the tailer reads, even on
|
|
110
110
|
// exit 0 where runFormSpawn discards `result.stderr`. Format parity with
|
|
111
111
|
// `_stream-log.sh phase_line`: `[<ISO-ts>] [script:<scope>] <content>\n` —
|
|
112
|
-
// the `script:` prefix is
|
|
112
|
+
// the `script:` prefix is the chat-surface namespace so the line
|
|
113
113
|
// passes the tightened tailer regex (`[mcp:*]` / `[init]` / `[api-wait-*]`
|
|
114
114
|
// lines in the same file are excluded by construction). Asserted by the
|
|
115
115
|
// vitest regression under platform/ui/__tests__. Sync append so the
|
|
@@ -143,7 +143,7 @@ interface CdpEndpoint {
|
|
|
143
143
|
source: "env-override" | "brand.json";
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
//
|
|
146
|
+
// single source of truth for the CDP endpoint. Called once from
|
|
147
147
|
// `main()` so the JSDOM scrape test (which imports `scrapeCurrentPage`
|
|
148
148
|
// directly without invoking `main`) does not need an installed brand.
|
|
149
149
|
function resolveCdpEndpoint(): CdpEndpoint {
|
|
@@ -425,7 +425,7 @@ export function scrapeCurrentPage(
|
|
|
425
425
|
|
|
426
426
|
// The only scrape source: `/<accountId>/<host>` hrefs — the canonical CF
|
|
427
427
|
// routing pattern the overview page uses to link each zone to its
|
|
428
|
-
// management screens.
|
|
428
|
+
// management screens. The full-<main> FQDN text walker was removed
|
|
429
429
|
// after it returned a bogus FQDN-shaped string from static page copy
|
|
430
430
|
// (see module header). When this source returns empty, the caller's
|
|
431
431
|
// `empty-or-drift` branch snapshots the page HTML for diagnosis — loud
|
|
@@ -456,7 +456,7 @@ export type CdpEvaluator = (expression: string) => Promise<unknown>;
|
|
|
456
456
|
|
|
457
457
|
// Trailing-run length (consecutive polls at `max_count`) the complete-line
|
|
458
458
|
// asserts before it declares `unstable=false`. Two iterations at 500 ms each
|
|
459
|
-
// = 1 s of continuous observation at the high-water mark.
|
|
459
|
+
// = 1 s of continuous observation at the high-water mark. removed
|
|
460
460
|
// the early-exit on this threshold (it shortcuts multi-zone accounts where
|
|
461
461
|
// the first zone hydrates one poll ahead of the second — the plateau at the
|
|
462
462
|
// intermediate count trips the threshold before the final zone arrives);
|
|
@@ -465,9 +465,9 @@ const STABLE_POLL_THRESHOLD = 2;
|
|
|
465
465
|
|
|
466
466
|
// Cap on `document.documentElement.outerHTML` captured into the dump file.
|
|
467
467
|
// The observed Cloudflare dashboard outerHTML is ~1 MB; 5 MB is 5× headroom
|
|
468
|
-
// and still fits comfortably in one `writeFile` syscall on the Pi.
|
|
469
|
-
//
|
|
470
|
-
// rendering the forensic artifact
|
|
468
|
+
// and still fits comfortably in one `writeFile` syscall on the Pi. An earlier
|
|
469
|
+
// 100 KB cap truncated the dump mid-`<head>` CSS on every scrape,
|
|
470
|
+
// rendering the forensic artifact silently broken: the
|
|
471
471
|
// zone table lived past the cutoff and `grep <zone-host> <dump>` always
|
|
472
472
|
// returned nothing, forcing re-scrapes to answer post-hoc questions.
|
|
473
473
|
const OUTER_HTML_CAPTURE_MAX_CHARS = 5_000_000;
|
|
@@ -510,7 +510,7 @@ async function dumpHtml(
|
|
|
510
510
|
// CONFIG_DIR is set by list-cf-domains.sh before the spawn. A silent
|
|
511
511
|
// fallback would dump logs into the wrong brand's directory on a Real
|
|
512
512
|
// Agent install — a silent-miswrite masking the wrapper-side break it
|
|
513
|
-
// came from.
|
|
513
|
+
// came from. doctrine: loud-fail on absent runtime-derived
|
|
514
514
|
// values.
|
|
515
515
|
const configDir = process.env.CONFIG_DIR;
|
|
516
516
|
if (!configDir) {
|
|
@@ -568,7 +568,7 @@ function dumpField(result: DumpResult, mode: DumpMode): string {
|
|
|
568
568
|
|
|
569
569
|
export async function scrapeDomains(evaluator: CdpEvaluator): Promise<string[]> {
|
|
570
570
|
const deadline = Date.now() + SCRAPE_POLL_MS;
|
|
571
|
-
//
|
|
571
|
+
// pure poll-to-deadline. The earlier "first N stable polls wins"
|
|
572
572
|
// heuristic short-circuited on the first plateau a multi-zone dashboard
|
|
573
573
|
// rendered — a 2-zone account whose second zone hydrates one poll later
|
|
574
574
|
// than the first would lock `count=1` before the second zone arrived.
|
|
@@ -21,7 +21,7 @@ set -euo pipefail
|
|
|
21
21
|
|
|
22
22
|
# --------------------------------------------------------------------------
|
|
23
23
|
# Shared stream-log helpers (require STREAM_LOG_PATH, phase_line, tee_subprocess).
|
|
24
|
-
#
|
|
24
|
+
# any cloudflared subprocess this script spawns is teed line-by-line
|
|
25
25
|
# into the per-conversation stream log so the chat UI tailer renders live
|
|
26
26
|
# progress — same contract as setup-tunnel.sh.
|
|
27
27
|
# --------------------------------------------------------------------------
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
# `DISPLAY=${DISPLAY:-${BRAND_VNC_DISPLAY}} /usr/bin/chromium <url> &` — no reliance on
|
|
21
21
|
# cloudflared's optimistic xdg-open, no CDP auto-click, no DOM matcher.
|
|
22
22
|
# The operator clicks the zone row + Authorize on the VNC themselves.
|
|
23
|
-
# This is the wrappers-faithfully-relay-third-party-cli doctrine
|
|
23
|
+
# This is the wrappers-faithfully-relay-third-party-cli doctrine;
|
|
24
24
|
# any layer that auto-clicks Authorize for the operator is forbidden.
|
|
25
25
|
# cloudflared's stdout+stderr is teed line-by-line into STREAM_LOG_PATH so
|
|
26
26
|
# the chat UI's server-side tailer renders live progress in-turn.
|
|
@@ -31,8 +31,8 @@ set -euo pipefail
|
|
|
31
31
|
# (see packages/create-maxy-code/src/index.ts:installTunnelScripts), so the raw
|
|
32
32
|
# BASH_SOURCE[0] points at $HOME, not the scripts directory where the sibling
|
|
33
33
|
# helpers (_stream-log.sh, tunnel-ingress.ts) live. Factored to SCRIPT_DIR so
|
|
34
|
-
#
|
|
35
|
-
# tunnel-ingress.ts target
|
|
34
|
+
# the stream-log-contract scanner can statically resolve the
|
|
35
|
+
# tunnel-ingress.ts target.
|
|
36
36
|
SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
|
|
37
37
|
|
|
38
38
|
# --------------------------------------------------------------------------
|
|
@@ -59,7 +59,7 @@ shift 2
|
|
|
59
59
|
HOSTNAMES=("$@")
|
|
60
60
|
|
|
61
61
|
# --------------------------------------------------------------------------
|
|
62
|
-
#
|
|
62
|
+
# SSH/SMB ingress env vars.
|
|
63
63
|
#
|
|
64
64
|
# SSH and SMB hostnames arrive via environment, NOT positional argv, so the
|
|
65
65
|
# existing form/endpoint contract (which passes admin/public/apex as
|
|
@@ -99,7 +99,7 @@ phase_line setup-tunnel step=start brand="${BRAND}" port="${PORT}" hostnames="${
|
|
|
99
99
|
CFG_DIR="${HOME}/.${BRAND}/cloudflared"
|
|
100
100
|
mkdir -p "${CFG_DIR}"
|
|
101
101
|
|
|
102
|
-
# Per-brand X display
|
|
102
|
+
# Per-brand X display. Each brand owns its own Xtigervnc display
|
|
103
103
|
# so the Chromium tab opened to drive the OAuth Authorize click lands in
|
|
104
104
|
# THIS brand's isolated VNC, not whichever brand booted first on a shared
|
|
105
105
|
# device. Read from the brand manifest if MAXY_PLATFORM_ROOT is exported
|
|
@@ -117,14 +117,14 @@ if [ -n "${SETUP_TUNNEL_BRAND_JSON}" ] && command -v jq >/dev/null 2>&1; then
|
|
|
117
117
|
fi
|
|
118
118
|
fi
|
|
119
119
|
|
|
120
|
-
#
|
|
120
|
+
# read the install-time-resolved non-snap Chromium binary path so
|
|
121
121
|
# the OAuth-URL spawn below uses the same binary vnc.sh's start_chrome runs.
|
|
122
122
|
# Hardcoded `/usr/bin/chromium` would re-introduce the snap-AppArmor failure
|
|
123
123
|
# on Ubuntu Noble laptop. The installer writes this file under platform/config/
|
|
124
124
|
# during installSystemDeps; the spawn at step=browser-spawn fails loud if the
|
|
125
125
|
# file is absent rather than silently falling back to /usr/bin/chromium.
|
|
126
126
|
#
|
|
127
|
-
#
|
|
127
|
+
# four discrete branches (env-unset / file-missing / file-empty /
|
|
128
128
|
# binary-not-executable) so the failure message names the actual condition.
|
|
129
129
|
# Pre-957 the four were conflated into one "cannot resolve a non-snap Chromium
|
|
130
130
|
# binary" message, which masked the env-propagation defect that closed three
|
|
@@ -179,11 +179,11 @@ fi
|
|
|
179
179
|
# click, poll for cert.pem,
|
|
180
180
|
# mv.
|
|
181
181
|
#
|
|
182
|
-
# Control flow when both certs are missing
|
|
182
|
+
# Control flow when both certs are missing
|
|
183
183
|
# relay third-party CLI):
|
|
184
184
|
# 1. Spawn cloudflared with stdout+stderr teed line-by-line to
|
|
185
185
|
# $STREAM_LOG_PATH with prefix [script:setup-tunnel:cloudflared]
|
|
186
|
-
# (
|
|
186
|
+
# (the chat-surface namespace — see _stream-log.sh header).
|
|
187
187
|
# 2. Extract the authorize URL with a tolerant regex as it streams.
|
|
188
188
|
# 3. The instant the URL is extracted, mechanically open it on the Pi
|
|
189
189
|
# VNC chromium via `DISPLAY=${DISPLAY:-${BRAND_VNC_DISPLAY}} /usr/bin/chromium <url> &`.
|
|
@@ -203,7 +203,7 @@ fi
|
|
|
203
203
|
# Every failure branch exits 1 loudly naming the cause.
|
|
204
204
|
# --------------------------------------------------------------------------
|
|
205
205
|
|
|
206
|
-
# Pre-flight cert-promotion
|
|
206
|
+
# Pre-flight cert-promotion. When ${CFG_DIR}/cert.pem is missing
|
|
207
207
|
# but the OAuth-default ~/.cloudflared/cert.pem is present, a prior run
|
|
208
208
|
# reached the cloudflared callback but did not survive to the brand-scoped
|
|
209
209
|
# mv at the end of Step 1. The cert is bound to the account already; the
|
|
@@ -252,7 +252,7 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
|
|
|
252
252
|
CHROMIUM_UNIT=""
|
|
253
253
|
cleanup_oauth() {
|
|
254
254
|
[ -n "${CF_PIPELINE_PID}" ] && kill "${CF_PIPELINE_PID}" 2>/dev/null || true
|
|
255
|
-
#
|
|
255
|
+
# stop the transient chromium unit on any early exit between
|
|
256
256
|
# browser-spawn and the explicit step=browser-close site below. Best-
|
|
257
257
|
# effort: no phase_line here because the EXIT trap fires on every path
|
|
258
258
|
# (including the happy one where step=browser-close already ran and
|
|
@@ -318,14 +318,14 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
|
|
|
318
318
|
# to re-target the same URL on the VNC; same end-effect as this spawn.
|
|
319
319
|
printf 'OAUTH_URL: %s\n' "${AUTH_URL}"
|
|
320
320
|
|
|
321
|
-
# Mechanically open the URL on the Pi VNC chromium
|
|
321
|
+
# Mechanically open the URL on the Pi VNC chromium. Chromium
|
|
322
322
|
# is already running on this brand's ${BRAND_VNC_DISPLAY} with CDP enabled
|
|
323
323
|
# (vnc.sh start_chrome at boot); invoking the resolved binary <url> against
|
|
324
324
|
# a running instance IPCs the URL into it as a new tab. Replaces
|
|
325
325
|
# cloudflared's own optimistic xdg-open, which does not reliably target
|
|
326
326
|
# the brand's VNC display in this environment.
|
|
327
327
|
#
|
|
328
|
-
#
|
|
328
|
+
# chromium is launched under a transient systemd-user unit so
|
|
329
329
|
# the full process tree (including any standalone chromium that lands
|
|
330
330
|
# when no existing instance is running for IPC) lives in its own cgroup.
|
|
331
331
|
# On cert.pem arrival the unit is stopped, SIGTERMing the whole cgroup
|
|
@@ -338,7 +338,7 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
|
|
|
338
338
|
# Binary path: SETUP_TUNNEL_CHROMIUM_BIN is read at startup from
|
|
339
339
|
# ${MAXY_PLATFORM_ROOT}/config/chromium-binary.path — `/usr/bin/chromium`
|
|
340
340
|
# on Pi Bookworm and `/usr/bin/google-chrome-stable` on Ubuntu Noble laptop
|
|
341
|
-
# where the system chromium is snap-confined
|
|
341
|
+
# where the system chromium is snap-confined. Hardcoding
|
|
342
342
|
# `/usr/bin/chromium` here would re-introduce the AppArmor SingletonLock
|
|
343
343
|
# failure on the laptop.
|
|
344
344
|
CHROMIUM_UNIT="maxy-oauth-chromium-${BRAND}-$$.service"
|
|
@@ -400,7 +400,7 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
|
|
|
400
400
|
# Heartbeat every 2 s after the click. t=0 is the browser-drive
|
|
401
401
|
# phase line above; the first heartbeat fires at t=2. Without this line
|
|
402
402
|
# the tailer sees silence for the full 1-20 s round-trip — the exact
|
|
403
|
-
# state
|
|
403
|
+
# state the heartbeat contract forbids.
|
|
404
404
|
if [ "${LOGIN_WAIT}" -gt 0 ] && [ $((LOGIN_WAIT % 2)) -eq 0 ]; then
|
|
405
405
|
phase_line setup-tunnel step=oauth-login result=awaiting-cert \
|
|
406
406
|
elapsed="${LOGIN_WAIT}s" timeout="${LOGIN_TIMEOUT}s"
|
|
@@ -413,7 +413,7 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
|
|
|
413
413
|
phase_line setup-tunnel step=oauth-login result=ok \
|
|
414
414
|
path="${CFG_DIR}/cert.pem" waited="${LOGIN_WAIT}s"
|
|
415
415
|
|
|
416
|
-
#
|
|
416
|
+
# SIGTERM the OAuth chromium cgroup now that cert.pem has
|
|
417
417
|
# landed. The transient unit was created above at step=browser-spawn; if
|
|
418
418
|
# chromium IPCs'd to a running brand-VNC instance and exited cleanly, the
|
|
419
419
|
# unit is already auto-collected and `systemctl stop` returns 0 (no-such-
|
|
@@ -454,7 +454,7 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
|
|
|
454
454
|
fi
|
|
455
455
|
|
|
456
456
|
# --------------------------------------------------------------------------
|
|
457
|
-
# Step 2+3: Resolve the tunnel identity from operator input
|
|
457
|
+
# Step 2+3: Resolve the tunnel identity from operator input.
|
|
458
458
|
#
|
|
459
459
|
# Pre-Task-886 the script derived TUNNEL_NAME locally as "${BRAND}-$(hostname
|
|
460
460
|
# -s)" and reused-or-created. That breaks the same doctrine as pre-Task-589
|
|
@@ -538,10 +538,10 @@ echo "tunnel: ${TUNNEL_NAME} (${TUNNEL_ID}) [${TUNNEL_SOURCE}]"
|
|
|
538
538
|
# parent zone is not on Cloudflare, refuse the whole run before calling
|
|
539
539
|
# `cloudflared tunnel route dns`.
|
|
540
540
|
#
|
|
541
|
-
# DESIGN NOTE — what this catches and what it does NOT catch
|
|
541
|
+
# DESIGN NOTE — what this catches and what it does NOT catch:
|
|
542
542
|
# CATCHES: parent zone does not exist, or its NS records do not point
|
|
543
543
|
# at Cloudflare's nameservers. Pre-529 the shell relied on a post-
|
|
544
|
-
# flight sed of cloudflared's stdout for this defence
|
|
544
|
+
# flight sed of cloudflared's stdout for this defence
|
|
545
545
|
# deletes that parser because it rejects the idempotent no-op output
|
|
546
546
|
# shape (session 25674fe3) and replaces it with this inline NS probe.
|
|
547
547
|
# Same primitive the MCP path uses in
|
|
@@ -552,7 +552,7 @@ echo "tunnel: ${TUNNEL_NAME} (${TUNNEL_ID}) [${TUNNEL_SOURCE}]"
|
|
|
552
552
|
# exist as of 2026-04) or persisting the bound account's zones at
|
|
553
553
|
# tunnel-login time (deferred — separate task). The wrong-account
|
|
554
554
|
# case is detected post-hoc by tunnel-status's hostname probe, not
|
|
555
|
-
# here. This is an explicitly accepted gap per
|
|
555
|
+
# here. This is an explicitly accepted gap per the scope.
|
|
556
556
|
#
|
|
557
557
|
# Probe uses 1.1.1.1 directly to bypass the device's local resolver
|
|
558
558
|
# (matching Resolver.setServers in the MCP path) — avoids cache /
|
|
@@ -628,7 +628,7 @@ phase_line setup-tunnel step=zone-preflight result=ok \
|
|
|
628
628
|
# another zone on the account. Skip CLI routing for apex; collect for the
|
|
629
629
|
# ACTION REQUIRED summary at the end.
|
|
630
630
|
#
|
|
631
|
-
# Control flow
|
|
631
|
+
# Control flow: cloudflared's exit code is the sole decision
|
|
632
632
|
# signal. No stdout parsing. `cloudflared tunnel route dns --overwrite-dns`
|
|
633
633
|
# exits 0 on every legitimate outcome (create, overwrite, already-correct
|
|
634
634
|
# no-op) and non-zero on every legitimate failure. The pre-flight above
|
|
@@ -651,7 +651,7 @@ for H in "${HOSTNAMES[@]}"; do
|
|
|
651
651
|
ROUTE_LOG="$(mktemp -t maxy-route-dns.XXXXXX)"
|
|
652
652
|
# tee_subprocess_capture streams cloudflared's combined stdout+stderr
|
|
653
653
|
# into STREAM_LOG_PATH line-by-line with the [script:setup-tunnel:cloudflared]
|
|
654
|
-
# tag (live-tailable
|
|
654
|
+
# tag (live-tailable chat-surface namespace) AND passes the same output through this shell's
|
|
655
655
|
# stdout so the `> "${ROUTE_LOG}"` redirection can capture it for the
|
|
656
656
|
# failure-path phase_line. Exit code is cloudflared's PIPESTATUS[0].
|
|
657
657
|
if tee_subprocess_capture setup-tunnel:cloudflared -- \
|
|
@@ -673,7 +673,7 @@ for H in "${HOSTNAMES[@]}"; do
|
|
|
673
673
|
done
|
|
674
674
|
|
|
675
675
|
# --------------------------------------------------------------------------
|
|
676
|
-
#
|
|
676
|
+
# Rehydrate SSH/SMB hostnames from tunnel.state when env unset.
|
|
677
677
|
#
|
|
678
678
|
# A re-run without SSH_HOSTNAME / SMB_HOSTNAME should keep the previously
|
|
679
679
|
# configured ingress rather than silently dropping them. The Node helper
|
|
@@ -703,9 +703,9 @@ if [ -z "${SSH_HOSTNAME}${SMB_HOSTNAME}" ] && [ -f "${CFG_DIR}/tunnel.state" ];
|
|
|
703
703
|
fi
|
|
704
704
|
|
|
705
705
|
# --------------------------------------------------------------------------
|
|
706
|
-
#
|
|
706
|
+
# Samba presence probe (gates SMB ingress stanza).
|
|
707
707
|
#
|
|
708
|
-
|
|
708
|
+
#, the brand's Samba stanza `[<brand>]` is written to
|
|
709
709
|
# /etc/samba/smb.conf at install time. If the stanza is absent, this Pi
|
|
710
710
|
# has no SMB share to expose and the SMB ingress is skipped loudly.
|
|
711
711
|
# Probe via grep on the Pi filesystem (NOT brand.json — Samba is a
|
|
@@ -724,7 +724,7 @@ if [ -n "${SMB_HOSTNAME}" ]; then
|
|
|
724
724
|
fi
|
|
725
725
|
|
|
726
726
|
# --------------------------------------------------------------------------
|
|
727
|
-
#
|
|
727
|
+
# Step 4b: Route DNS for SSH/SMB hostnames (after HTTPS pass).
|
|
728
728
|
#
|
|
729
729
|
# Two-phase ordering: HTTPS hostnames are routed first (loop above). If a
|
|
730
730
|
# subsequent SSH or SMB route DNS fails, emit `*-ingress-deferred` and
|
|
@@ -858,7 +858,7 @@ fi
|
|
|
858
858
|
rm -f "${STATE_SPEC_FILE}"
|
|
859
859
|
|
|
860
860
|
# --------------------------------------------------------------------------
|
|
861
|
-
#
|
|
861
|
+
# Access policy ACTION REQUIRED.
|
|
862
862
|
#
|
|
863
863
|
# The Cloudflare Access policy that gates these new SSH/SMB hostnames must
|
|
864
864
|
# be authored in the dashboard by the operator: CF API/SDK is banned
|
|
@@ -918,7 +918,7 @@ fi
|
|
|
918
918
|
# admin agent invokes it via the Bash tool. `systemctl --user restart
|
|
919
919
|
# ${BRAND}.service` from inside that cgroup SIGTERMs the whole cgroup —
|
|
920
920
|
# the node server, the claude subprocess, the Bash child, and this script
|
|
921
|
-
# itself
|
|
921
|
+
# itself. Dispatching the restart to a transient systemd-run
|
|
922
922
|
# unit is the ONLY primitive that creates a new cgroup outside the service
|
|
923
923
|
# — setsid/nohup/disown/& all inherit cgroup membership, and
|
|
924
924
|
# `systemd-run --scope` runs in the caller's scope.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Pure tunnel-ingress rendering + state I/O.
|
|
2
2
|
//
|
|
3
3
|
// Mirror of `samba-provision.ts`: pure decision functions in this file with
|
|
4
4
|
// no side effects; `setup-tunnel.sh` orchestrates I/O around them. Invoked
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
import { readFileSync, existsSync, appendFileSync } from "node:fs";
|
|
26
26
|
|
|
27
|
-
//
|
|
27
|
+
// STREAM_LOG_PATH writer (contract). The four CLI
|
|
28
28
|
// subcommands invoked from setup-tunnel.sh (probe-samba, render-config,
|
|
29
29
|
// render-state, action-req) emit a `phase=<cmd>-start` line on entry and
|
|
30
30
|
// `phase=<cmd>-ok` / `phase=<cmd>-fail` on exit. Pattern ported verbatim
|
|
@@ -156,8 +156,8 @@ export function readPersistedHostnames(statePath: string): {
|
|
|
156
156
|
// ---------------------------------------------------------------------------
|
|
157
157
|
|
|
158
158
|
/**
|
|
159
|
-
* Probe whether
|
|
160
|
-
* The brand stanza header is `[<brand>]` at the start of a line (
|
|
159
|
+
* Probe whether the per-brand Samba stanza exists in /etc/samba/smb.conf.
|
|
160
|
+
* The brand stanza header is `[<brand>]` at the start of a line (the
|
|
161
161
|
* `renderBrandStanza` output). Source of truth is the Pi filesystem, not
|
|
162
162
|
* brand.json — Samba is provisioned by the installer's post-install step,
|
|
163
163
|
* not declared up-front.
|
|
@@ -244,7 +244,7 @@ const isCli =
|
|
|
244
244
|
|
|
245
245
|
if (isCli) {
|
|
246
246
|
const [, , cmd, ...rest] = process.argv;
|
|
247
|
-
// Track which subcommands carry the
|
|
247
|
+
// Track which subcommands carry the stream-log contract — for these
|
|
248
248
|
// we emit start/ok/fail phase pairs. Unknown subcommands and read-state are
|
|
249
249
|
// out of scope per the task (read-state has no setup-tunnel.sh caller line).
|
|
250
250
|
const instrumented = new Set(["probe-samba", "render-config", "render-state", "action-req"]);
|
|
@@ -22,7 +22,7 @@ Any Cloudflare action outside these four surfaces is a discipline violation —
|
|
|
22
22
|
|
|
23
23
|
Use this when the operator wants Cloudflare set up (or re-set up) end-to-end on the device. The script handles OAuth login, tunnel creation, DNS routing for each subdomain, config.yml + tunnel.state, and dispatches the `${BRAND}.service` restart to a transient `systemd-run` unit — all in one invocation. The restart fires a few seconds after the script exits so the script does not kill its own cgroup when invoked via the Bash tool; the chat UI receives a `server_shutdown` SSE frame and reconnects automatically. Post-restart hostname verification is out of scope for the script (connector is not up when the script exits) — verify via the next admin turn or manually with `curl -I https://<hostname>`. Apex hostnames cannot be routed by the CLI; when one is passed, the script prints an `ACTION REQUIRED` block naming the exact dashboard record to edit.
|
|
24
24
|
|
|
25
|
-
Step 1's OAuth flow is a state machine over two observable variables: the brand-scoped cert path (`${CFG_DIR}/cert.pem`) and the OAuth-default cert path (`~/.cloudflared/cert.pem`). When the brand-scoped cert is missing but the default-path cert is present from any prior partial run, the wrapper promotes it (`mv`) and emits `step=oauth-login result=ok reason=cert-promoted-from-default-path` without re-spawning cloudflared. When both are missing, the wrapper spawns `cloudflared tunnel login`, extracts the argotunnel URL from its stdout, and the instant the URL surfaces, mechanically opens it on the brand's VNC chromium under a transient `systemd-run --user --unit=maxy-oauth-chromium-${BRAND}-$$.service` so the chromium process tree lives in its own cgroup (
|
|
25
|
+
Step 1's OAuth flow is a state machine over two observable variables: the brand-scoped cert path (`${CFG_DIR}/cert.pem`) and the OAuth-default cert path (`~/.cloudflared/cert.pem`). When the brand-scoped cert is missing but the default-path cert is present from any prior partial run, the wrapper promotes it (`mv`) and emits `step=oauth-login result=ok reason=cert-promoted-from-default-path` without re-spawning cloudflared. When both are missing, the wrapper spawns `cloudflared tunnel login`, extracts the argotunnel URL from its stdout, and the instant the URL surfaces, mechanically opens it on the brand's VNC chromium under a transient `systemd-run --user --unit=maxy-oauth-chromium-${BRAND}-$$.service` so the chromium process tree lives in its own cgroup (earlier the spawn was `&` fire-and-forget and orphaned chromium on display `:101` when no pre-existing brand-VNC chromium was available for IPC). The launch uses the install-time-resolved binary (`SETUP_TUNNEL_CHROMIUM_BIN` from `${MAXY_PLATFORM_ROOT}/config/chromium-binary.path` so Ubuntu Noble laptop's snap-replaced Google Chrome is honoured) — emitting `step=browser-spawn result=ok unit=<transient-unit>` and `step=browser-drive mode=operator-click`. The operator clicks the zone row + Authorize on the VNC; cloudflared's callback writes `~/.cloudflared/cert.pem`; the wrapper's cert-poll (180 s budget) picks it up and `mv`s it to the brand-scoped path; the wrapper then `systemctl --user stop`s the transient unit, emitting `step=browser-close result=ok` (or `result=orphan reason=stop-failed` when SIGTERM didn't reach the cgroup — operator-visible signal that an orphan chromium MAY still be alive). There is no CDP auto-click, no DOM matcher, no consent-page driver — the wrapper's job is to faithfully relay `cloudflared tunnel login`, never to layer automation on top.
|
|
26
26
|
|
|
27
27
|
### How inputs reach the script
|
|
28
28
|
|
|
@@ -46,7 +46,7 @@ Example ({{productName}} on `maxy.bot` with a public subdomain and the `maxy.cha
|
|
|
46
46
|
~/setup-tunnel.sh maxy 19200 admin.maxy.bot public.maxy.bot maxy.chat
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
### Optional SSH and SMB ingress
|
|
49
|
+
### Optional SSH and SMB ingress
|
|
50
50
|
|
|
51
51
|
The same script also wires the off-LAN SSH and SMB ingress when the
|
|
52
52
|
corresponding hostnames are passed via environment variables (NOT positional
|
|
@@ -66,7 +66,7 @@ Behaviour:
|
|
|
66
66
|
`[tunnel-install] {ssh,smb}-ingress-deferred` and leaves the HTTPS
|
|
67
67
|
ingress durable (no rollback, no `exit 1`).
|
|
68
68
|
- `SSH_HOSTNAME` adds an ingress entry `service: ssh://localhost:22`.
|
|
69
|
-
- `SMB_HOSTNAME` adds `service: tcp://localhost:445`, gated
|
|
69
|
+
- `SMB_HOSTNAME` adds `service: tcp://localhost:445`, gated's
|
|
70
70
|
Samba stanza being present in `/etc/samba/smb.conf`. Absent stanza →
|
|
71
71
|
`[tunnel-install] smb-ingress-skipped reason=samba-not-provisioned` and
|
|
72
72
|
the SMB pass is skipped entirely.
|
|
@@ -15,8 +15,8 @@ function readPassword() {
|
|
|
15
15
|
}
|
|
16
16
|
export function getDriver() {
|
|
17
17
|
if (!driver) {
|
|
18
|
-
//
|
|
19
|
-
// vector for
|
|
18
|
+
// NEO4J_URI must be explicit. Silent default to:7687 was the
|
|
19
|
+
// vector for the orphan data in Maxy's DB from a realagent install.
|
|
20
20
|
const uri = process.env.NEO4J_URI;
|
|
21
21
|
if (!uri) {
|
|
22
22
|
throw new Error("[contacts] NEO4J_URI unset — refusing to default to bolt://localhost:7687");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neo4j.js","sourceRoot":"","sources":["../../src/lib/neo4j.ts"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAElE,MAAM,YAAY,GAAG,OAAO,CAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EACxE,wBAAwB,CACzB,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yCAAyC,YAAY,gCAAgC,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,
|
|
1
|
+
{"version":3,"file":"neo4j.js","sourceRoot":"","sources":["../../src/lib/neo4j.ts"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAElE,MAAM,YAAY,GAAG,OAAO,CAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EACxE,wBAAwB,CACzB,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yCAAyC,YAAY,gCAAgC,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,6DAA6D;QAC7D,oEAAoE;QACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;QAC/C,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Used by: contact-delete, contact-update, contact-export, contact-erase.
|
|
9
9
|
* NOT used by: contact-create (dedup OR logic), contact-lookup (name search).
|
|
10
10
|
*
|
|
11
|
-
*
|
|
11
|
+
* trashed Person nodes are excluded by default. `contact-erase`
|
|
12
12
|
* passes `includeTrashed: true` because GDPR Article 17 must cascade-delete
|
|
13
13
|
* trashed persons too (they were marked but not yet emptied). Trashed
|
|
14
14
|
* persons also have nulled email/telephone (UNIQUE_KEYS_BY_LABEL snapshot),
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Used by: contact-delete, contact-update, contact-export, contact-erase.
|
|
9
9
|
* NOT used by: contact-create (dedup OR logic), contact-lookup (name search).
|
|
10
10
|
*
|
|
11
|
-
*
|
|
11
|
+
* trashed Person nodes are excluded by default. `contact-erase`
|
|
12
12
|
* passes `includeTrashed: true` because GDPR Article 17 must cascade-delete
|
|
13
13
|
* trashed persons too (they were marked but not yet emptied). Trashed
|
|
14
14
|
* persons also have nulled email/telephone (UNIQUE_KEYS_BY_LABEL snapshot),
|
|
@@ -28,7 +28,7 @@ export async function contactCreate(params) {
|
|
|
28
28
|
try {
|
|
29
29
|
// Dedup only fires when a stable identifier (email/telephone) is present.
|
|
30
30
|
// With no identifier the agent has explicitly chosen to write a sparse
|
|
31
|
-
// Person; dedup/conflict resolution moves downstream
|
|
31
|
+
// Person; dedup/conflict resolution moves downstream
|
|
32
32
|
// "agent and user manage dedup and conflicts").
|
|
33
33
|
const dedupConditions = [];
|
|
34
34
|
const dedupParams = { accountId };
|
|
@@ -85,7 +85,7 @@ export async function contactCreate(params) {
|
|
|
85
85
|
if (embedding.length > 0) {
|
|
86
86
|
props.embedding = embedding;
|
|
87
87
|
}
|
|
88
|
-
//
|
|
88
|
+
// direct admin asks ("add Anneke as person") need a PRODUCED
|
|
89
89
|
// edge from the active :AdminConversation rather than a synthetic :Task.
|
|
90
90
|
// The admin server stamps `CONVERSATION_NODE_ID` in the spawn env; the
|
|
91
91
|
// helper resolves the node, verifies accountId parity, and prepends the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-create.js","sourceRoot":"","sources":["../../src/tools/contact-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAC1E,OAAO,EACL,kBAAkB,EAClB,4BAA4B,GAG7B,MAAM,8CAA8C,CAAC;AAEtD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,wBAAwB,CAAC;AACtE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,kBAAkB,CAAC;AAElE,KAAK,UAAU,gBAAgB,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,YAAY,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC1D,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA+B,CAAC;QAC9D,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA2B;IAE3B,MAAM,EACJ,SAAS,EACT,UAAU,EACV,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,MAAM,GAAG,UAAU,EACnB,SAAS,EACT,aAAa,EACb,SAAS,GACV,GAAG,MAAM,CAAC;IAEX,MAAM,eAAe,GAAG,KAAK,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,eAAe,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IAE1C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,0EAA0E;QAC1E,uEAAuE;QACvE,
|
|
1
|
+
{"version":3,"file":"contact-create.js","sourceRoot":"","sources":["../../src/tools/contact-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAC1E,OAAO,EACL,kBAAkB,EAClB,4BAA4B,GAG7B,MAAM,8CAA8C,CAAC;AAEtD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,wBAAwB,CAAC;AACtE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,kBAAkB,CAAC;AAElE,KAAK,UAAU,gBAAgB,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,YAAY,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC1D,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA+B,CAAC;QAC9D,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA2B;IAE3B,MAAM,EACJ,SAAS,EACT,UAAU,EACV,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,MAAM,GAAG,UAAU,EACnB,SAAS,EACT,aAAa,EACb,SAAS,GACV,GAAG,MAAM,CAAC;IAEX,MAAM,eAAe,GAAG,KAAK,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,eAAe,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IAE1C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,0EAA0E;QAC1E,uEAAuE;QACvE,qDAAqD;QACrD,gDAAgD;QAChD,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,MAAM,WAAW,GAA4B,EAAE,SAAS,EAAE,CAAC;QAE3D,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACzC,WAAW,CAAC,KAAK,GAAG,eAAe,CAAC;QACtC,CAAC;QACD,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACjD,WAAW,CAAC,SAAS,GAAG,eAAe,CAAC;QAC1C,CAAC;QAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,oDAAoD;YACpD,sEAAsE;YACtE,qEAAqE;YACrE,sCAAsC;YACtC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC;kBACU,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,UAAU,CAAC,GAAG,CAAC;mFACa,EAC3E,WAAW,CACZ,CAAC;YAEF,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC;gBACvE,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAEhD,CAAC;gBACT,MAAM,iBAAiB,GAAG,YAAY,IAAI,YAAY,IAAI,SAAS,CAAC;gBAEpE,OAAO;oBACL,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAW;oBACnD,UAAU,EAAE,iBAAiB;oBAC7B,OAAO,EAAE,KAAK;oBACd,aAAa,EAAE,IAAI;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAA4B;YACrC,MAAM;YACN,MAAM;YACN,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,IAAI,SAAS;YAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3C,IAAI,eAAe;YAAE,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC;QACnD,IAAI,eAAe;YAAE,KAAK,CAAC,SAAS,GAAG,eAAe,CAAC;QACvD,IAAI,UAAU;YAAE,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAC9C,IAAI,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAExC,MAAM,cAAc,GAAG,eAAe;YACpC,CAAC,CAAC,IAAI,eAAe,GAAG;YACxB,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,MAAM,gBAAgB,GACpB,WAAW,QAAQ,IAAI,WAAW,IAAI,cAAc,YAAY,MAAM,YAAY,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QACpG,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QAC3D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QAC9B,CAAC;QAED,6DAA6D;QAC7D,yEAAyE;QACzE,uEAAuE;QACvE,wEAAwE;QACxE,qEAAqE;QACrE,kCAAkC;QAClC,MAAM,qBAAqB,GAAG,MAAM,4BAA4B,CAAC;YAC/D,OAAO;YACP,aAAa;YACb,SAAS,EAAE,SAAS,IAAI,EAAE;YAC1B,WAAW,EAAE,CAAC,QAAQ,CAAC;YACvB,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;YACpD,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,OAAO;YACP,MAAM,EAAE,CAAC,QAAQ,CAAC;YAClB,KAAK;YACL,aAAa,EAAE,qBAAqB;YACpC,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzE,MAAM,iBAAiB,GACrB,eAAe,IAAI,eAAe,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,CAAC;QAEtE,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,iBAAiB;YAC7B,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -30,7 +30,7 @@ export async function groupCreate(params) {
|
|
|
30
30
|
}
|
|
31
31
|
// Pre-resolve every participant so we reject the whole call if fewer
|
|
32
32
|
// than one matches — creating a group Conversation with zero live
|
|
33
|
-
// participants is a write-doctrine orphan
|
|
33
|
+
// participants is a write-doctrine orphan. Participant
|
|
34
34
|
// PARTICIPATES_IN edges are added inside the same transaction as the
|
|
35
35
|
// Conversation node to guarantee ≥1 adjacency at commit time.
|
|
36
36
|
const resolvedParticipants = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group-create.js","sourceRoot":"","sources":["../../src/tools/group-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAkB,MAAM,8CAA8C,CAAC;AAE9F,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,IAAI,GAAG,IAAI;SACd,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,IAAI,IAAI,OAAO,CAAC;AACzB,CAAC;AAkBD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAyB;IACzD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE5E,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC;IACpC,IAAI,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,qEAAqE;QACrE,8DAA8D;QAC9D,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC;eACS,UAAU,CAAC,GAAG,CAAC;8BACA,EACxB,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAC/B,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7D,SAAS,GAAG,GAAG,SAAS,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACzD,CAAC;QAED,qEAAqE;QACrE,kEAAkE;QAClE,
|
|
1
|
+
{"version":3,"file":"group-create.js","sourceRoot":"","sources":["../../src/tools/group-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,7 +52,36 @@ Grep for both in `~/.<brand>/logs/install-*.log`. Absence after a clean install
|
|
|
52
52
|
|
|
53
53
|
The first user-domain write the agent attempts (e.g. recording who the operator is) hits the graph-write gate's `Write blocked (no-admin-user)` or `Write blocked (no-local-business)` error. The agent then asks the persona question, persists the answer through the `business-profile` skill or `profile-update.personFields`, and proceeds. The error itself is the signal — grep `Write blocked` in `~/.<brand>/logs/server.log` to confirm.
|
|
54
54
|
|
|
55
|
-
Cloudflare, WhatsApp, Telegram, and any other dormant capability surfaces on owner request via the `<dormant-plugins>`
|
|
55
|
+
Cloudflare, WhatsApp, Telegram, and any other dormant capability surfaces on owner request via the `<dormant-plugins>` sentinel the manager injects per-spawn. Execution is the existing plugin skill (`cloudflare:setup-tunnel`, etc.) — no banner, no per-step flag.
|
|
56
|
+
|
|
57
|
+
### Per-spawn system-prompt sentinels
|
|
58
|
+
|
|
59
|
+
Every PTY spawn injects an `--append-system-prompt` block composed of six sentinel sections in fixed order:
|
|
60
|
+
|
|
61
|
+
| Sentinel | Source | Behaviour on resolve failure |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| `<host>` | brand.json + boot-time LAN resolution | spawn refuses with `host-context-unresolved` |
|
|
64
|
+
| `<attachment-ceiling>` | hard-coded 30 MiB rule | always present |
|
|
65
|
+
| `<identity>` | `<accountDir>/agents/<role>/IDENTITY.md` | spawn refuses with `identity-unresolved` |
|
|
66
|
+
| `<soul>` | `<accountDir>/agents/<role>/SOUL.md` | spawn refuses with `identity-unresolved` |
|
|
67
|
+
| `<about-owner>` | upstream `loadUserProfile` + `formatProfileSummary` (UI process) | sentinel carries `coverage-unresolved: <reason>`; spawn proceeds |
|
|
68
|
+
| `<dormant-plugins>` | installed-minus-enabled set from `platform/plugins/` and `account.json` | sentinel omitted when set is empty |
|
|
69
|
+
|
|
70
|
+
Diagnostic line per spawn (`~/.<brand>/logs/server.log`):
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
[pty-spawn] sessionId=<id> appendSystemPromptBytes=<n> identityBytes=<n> soulBytes=<n> aboutOwnerBytes=<n> dormantPluginsBytes=<n> accountDir=<path> role=<admin|public> hostname=<h> lanIPv4=<ip> adminUrl=<url> tunnelUrl=<url|none>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Zero `aboutOwnerBytes` on a fresh-account spawn (sparse profile) is a regression: the upstream resolver returned ok:false with a reason, and the operator should see `coverage-unresolved: <reason>` in the agent's first turn. Zero `dormantPluginsBytes` on a Maxy install with `cloudflare` not enabled is likewise a regression.
|
|
77
|
+
|
|
78
|
+
The manager also runs a boot-time self-test that renders a fixture compose call against synthetic inputs and refuses to start if any sentinel is missing:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
[claude-session-manager] startup-self-test system-prompt-sentinels=ok
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
LOUD-FAIL output is `startup-self-test system-prompt-sentinels=fail missing=<tag>` followed by an immediate process exit. Catches IDENTITY-promise-vs-emitter drift at boot rather than at the first real spawn.
|
|
56
85
|
|
|
57
86
|
## Service Management
|
|
58
87
|
|
|
@@ -65,7 +65,7 @@ There is no dashboard, no settings panel, no menus. Everything is done through c
|
|
|
65
65
|
|
|
66
66
|
The chat input auto-grows as you type — it expands to fit your message and shrinks back when you delete text. You can also drag the resize handle above the input to set a custom height.
|
|
67
67
|
|
|
68
|
-
The admin interface is a three-pane layout: a sidebar on the left with
|
|
68
|
+
The admin interface is a three-pane layout: a sidebar on the left with navigation (Sessions, People, Agents, Projects, Tasks, Artefacts) and your recent conversations; the chat in the middle; and an artefact pane on the right that opens when you select a document, click a project, or open Browser, Data, or Graph from the menu, holding the surface side-by-side with the conversation so the chat stays live while you work in it. At the very top of the sidebar list, a labelled "+ New session" pill spawns a fresh Claude Code session, and a small Mode trigger sits next to it: clicking the trigger opens a popover whose header reads "Mode" and lists the four permission modes (Ask, Accept edits, Plan, Auto) with the current selection check-marked. The sidebar's nav rows swap the list view in place: Sessions shows recent conversations, Projects shows your active work projects, and Artefacts lists every KnowledgeDocument plus this account's agent templates (your admin agent's IDENTITY, SOUL, and KNOWLEDGE files plus one entry per enabled specialist). Each recent session row carries a small status dot (filled sage for alive, hollow circle for ended) so you can read the live state at a glance without parsing the subtitle. The People, Agents, and Tasks rows are graph shortcuts: clicking each opens the artefact-pane Graph filtered to every Person, every public Agent, or every Task in your account respectively, with no side-list, because the graph itself is the result. Public agents become first-class graph entities the moment you create them, with edges to their IDENTITY/SOUL/KNOWLEDGE files, edges to every knowledge document they have access to, and edges from every conversation they have handled, so a single Agents click reveals the whole shape of who knows what and who has been talking to whom. Click an artefact row to open the document. KnowledgeDocuments and your admin agent's templates are editable: type in the document and changes save automatically; specialist agent templates are read-only because they ship with Maxy and your edits would be overwritten on the next install. PDF artefacts render inline so you can read them without leaving the pane. If your browser doesn't have a built-in PDF viewer, a Download button appears instead. Artefacts that have no readable file backing them (orphan rows, files removed from disk, unsupported content types) show a one-line banner explaining the skip instead of opening to a blank pane. Click a project row to open the Graph view focused on that project's neighbourhood; clicking a second project swaps the focus rather than stacking on top. The chat and artefact divider is drag-resizable: drag the line between the columns to make either side wider; double-click it to reset to half of the available width (viewport minus sidebar), clamped to the chat and artefact min-width floors. Your chosen width is remembered across reloads. On wider screens (>1280px) all three panes are visible. The sidebar narrows at 1280px, the artefact pane hides at 1080px (Browser, Data, and Graph then open as full-window pages instead), and the sidebar collapses to a 56px icon rail at 820px. On every viewport the chat header reads left to right as a triptych: a dedicated sidebar toggle (the panel-right icon, which swaps to panel-right-open when the sidebar is showing), the brand mark next to the title in the centre, and the menu burger on the right. This header toggle is the sole sidebar-toggle button; the sidebar itself no longer carries a duplicate. Tap the sidebar toggle to show or hide the sidebar: on phones (<720px) it slides the drawer in or out, on wider screens it collapses or expands the sidebar column. The brand mark in the centre is decorative; clicks go through the dedicated toggle so the affordance is unambiguous. The drawer animation only fires on tap (220ms slide in or out); resizing your window across the 720px boundary snaps the layout without animation, so you never see a half-open flash. At ≤640px the session metadata pane stacks each label above its value instead of the desktop two-column grid, and the row of action buttons (Open in new tab / Open JSONL / Rename / Pin / Archive / End or Purge) collapses behind a single Actions trigger that opens a popover upward from the foot of the pane. Breakpoint summary: >1280px = full sidebar + chat + artefact pane (drag-resizable divider); 1280px→1080px = sidebar narrows; 1080px→820px = artefact pane hides (Browser/Data/Graph open as full-window pages instead); 820px→720px = sidebar collapses to 56px icon rail; ≤720px = sidebar becomes off-canvas drawer (vertical stack of nav, recents list, foot, the same shape as the desktop sidebar, just on top of the chat instead of beside it).
|
|
69
69
|
|
|
70
70
|
Page titles are brand-aware: the browser tab shows your product name (e.g. `Real Agent` instead of `Maxy`) on every shell — chat, graph, and data — so a non-default brand never leaks the default name in tab strips or browser history.
|
|
71
71
|
|