@rubytech/create-maxy-code 0.1.32 → 0.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/account-id-env.test.js +1 -1
- package/dist/__tests__/apt-resolve.test.js +7 -7
- package/dist/__tests__/brew-install.test.js +1 -1
- package/dist/__tests__/brew-resolve.test.js +1 -1
- package/dist/__tests__/cdp-port-no-silent-fallback.test.js +4 -4
- package/dist/__tests__/init-logging.test.js +1 -1
- package/dist/__tests__/launchd-plist.test.js +1 -1
- package/dist/__tests__/macos-version.test.js +1 -1
- package/dist/__tests__/peer-brand-detect.test.js +1 -1
- package/dist/__tests__/platform-detect.test.js +2 -2
- package/dist/__tests__/port-canonicalisation.test.js +1 -1
- package/dist/__tests__/preflight-port-classifier.test.js +6 -6
- package/dist/__tests__/samba-provision.test.js +1 -1
- package/dist/__tests__/snap-chromium.test.js +1 -1
- package/dist/apt-resolve.js +5 -5
- package/dist/brew-install.js +1 -1
- package/dist/brew-resolve.js +3 -3
- package/dist/index.js +146 -122
- package/dist/init-logging.js +1 -1
- package/dist/launchd-plist.js +1 -1
- package/dist/macos-version.js +2 -2
- package/dist/peer-brand-detect.js +1 -1
- package/dist/pinned-binaries.js +1 -1
- package/dist/platform-detect.js +1 -1
- package/dist/port-resolution.js +2 -2
- package/dist/preflight-port-classifier.js +3 -3
- package/dist/samba-provision.js +1 -1
- package/dist/snap-chromium.js +3 -3
- package/dist/uninstall.js +28 -28
- package/package.json +1 -1
- package/payload/docs/desktop-code-controls.md +63 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js +1 -1
- package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js.map +1 -1
- package/payload/platform/lib/account-enumeration/dist/index.d.ts +1 -1
- package/payload/platform/lib/account-enumeration/src/__tests__/validate-env.test.ts +1 -1
- package/payload/platform/lib/account-enumeration/src/index.ts +1 -1
- package/payload/platform/lib/admins-write/dist/index.js +3 -3
- package/payload/platform/lib/admins-write/dist/index.js.map +1 -1
- package/payload/platform/lib/admins-write/src/index.ts +4 -4
- package/payload/platform/lib/entitlement/dist/index.d.ts +1 -1
- package/payload/platform/lib/entitlement/dist/index.js +2 -2
- package/payload/platform/lib/entitlement/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.d.ts +3 -3
- package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.js +3 -3
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.js +1 -1
- package/payload/platform/lib/graph-mcp/dist/index.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/index.js +24 -24
- package/payload/platform/lib/graph-mcp/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/schema-cache.d.ts +1 -1
- package/payload/platform/lib/graph-mcp/dist/schema-cache.js +2 -2
- package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.d.ts +3 -3
- package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.js +3 -3
- package/payload/platform/lib/graph-mcp/src/__tests__/warnings-envelope.test.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/cypher-rewrite-stamp.ts +3 -3
- package/payload/platform/lib/graph-mcp/src/cypher-shim-read.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/cypher-shim-write.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/cypher-validate.ts +1 -1
- package/payload/platform/lib/graph-mcp/src/index.ts +29 -29
- package/payload/platform/lib/graph-mcp/src/schema-cache.ts +2 -2
- package/payload/platform/lib/graph-mcp/src/schema-cypher-parser.ts +3 -3
- package/payload/platform/lib/graph-search/dist/index.d.ts +12 -12
- package/payload/platform/lib/graph-search/dist/index.js +11 -11
- package/payload/platform/lib/graph-search/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-search/src/__tests__/bm25-label-gate.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/__tests__/bm25-strong-bypass-threshold.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/__tests__/brochure-threshold.test.ts +3 -3
- package/payload/platform/lib/graph-search/src/__tests__/expand-batch.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/__tests__/fulltext-coverage.test.ts +6 -6
- package/payload/platform/lib/graph-search/src/__tests__/hybrid.test.ts +5 -5
- package/payload/platform/lib/graph-search/src/__tests__/vector-threshold.test.ts +2 -2
- package/payload/platform/lib/graph-search/src/index.ts +18 -18
- package/payload/platform/lib/graph-trash/dist/index.d.ts +3 -3
- package/payload/platform/lib/graph-trash/dist/index.js +3 -3
- package/payload/platform/lib/graph-trash/src/index.ts +3 -3
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js +4 -4
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js.map +1 -1
- package/payload/platform/lib/graph-write/dist/audit.d.ts +2 -2
- package/payload/platform/lib/graph-write/dist/audit.js +2 -2
- package/payload/platform/lib/graph-write/dist/conversation-provenance.js +1 -1
- package/payload/platform/lib/graph-write/dist/conversation-provenance.js.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.d.ts +5 -5
- package/payload/platform/lib/graph-write/dist/index.js +12 -12
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-write/src/__tests__/action-provenance-gate.test.ts +4 -4
- package/payload/platform/lib/graph-write/src/audit.ts +2 -2
- package/payload/platform/lib/graph-write/src/conversation-provenance.ts +1 -1
- package/payload/platform/lib/graph-write/src/index.ts +13 -13
- package/payload/platform/lib/mcp-eager/dist/index.d.ts +2 -2
- package/payload/platform/lib/mcp-eager/dist/index.js +2 -2
- package/payload/platform/lib/mcp-eager/src/index.ts +2 -2
- package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts +2 -2
- package/payload/platform/lib/mcp-spawn-tee/dist/index.js +2 -2
- package/payload/platform/lib/mcp-spawn-tee/src/index.ts +2 -2
- package/payload/platform/lib/mcp-stderr-tee/dist/index.d.ts +1 -1
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js +4 -4
- package/payload/platform/lib/mcp-stderr-tee/dist/index.js.map +1 -1
- package/payload/platform/lib/mcp-stderr-tee/src/index.ts +4 -4
- package/payload/platform/lib/oauth-llm/dist/index.d.ts +4 -4
- package/payload/platform/lib/oauth-llm/dist/index.js +3 -3
- package/payload/platform/lib/oauth-llm/dist/index.js.map +1 -1
- package/payload/platform/lib/oauth-llm/src/index.ts +6 -6
- package/payload/platform/lib/persistent-components/dist/index.d.ts +1 -1
- package/payload/platform/lib/persistent-components/dist/index.js +1 -1
- package/payload/platform/lib/persistent-components/src/index.ts +1 -1
- package/payload/platform/lib/task-secrets/dist/index.js +1 -1
- package/payload/platform/lib/task-secrets/dist/index.js.map +1 -1
- package/payload/platform/lib/task-secrets/src/__tests__/redact-secrets.test.ts +1 -1
- package/payload/platform/lib/task-secrets/src/index.ts +1 -1
- package/payload/platform/neo4j/edge-annotations.json +9 -9
- package/payload/platform/neo4j/schema.cypher +32 -33
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/admin/PLUGIN.md +0 -2
- package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +4 -4
- package/payload/platform/plugins/admin/hooks/__tests__/playwright-file-guard.test.sh +1 -1
- package/payload/platform/plugins/admin/hooks/__tests__/pre-tool-use-base64-guard.test.sh +1 -1
- package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +13 -13
- package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +7 -7
- package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js +1 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/index.js +38 -65
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js +5 -5
- package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js.map +1 -1
- package/payload/platform/plugins/admin/skills/plugin-management/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +0 -1
- package/payload/platform/plugins/admin/skills/publish-site/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/unzip-attachment/SKILL.md +2 -2
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +6 -6
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.d.ts +2 -2
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.js +2 -2
- package/payload/platform/plugins/cloudflare/references/dashboard-guide.md +1 -1
- package/payload/platform/plugins/cloudflare/references/manual-setup.md +4 -4
- package/payload/platform/plugins/cloudflare/scripts/__tests__/tunnel-ingress.test.ts +1 -1
- package/payload/platform/plugins/cloudflare/scripts/_stream-log.sh +8 -8
- package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.sh +2 -2
- package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.ts +16 -16
- package/payload/platform/plugins/cloudflare/scripts/reset-tunnel.sh +1 -1
- package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +28 -28
- package/payload/platform/plugins/cloudflare/scripts/tunnel-ingress.ts +5 -5
- package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +3 -3
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.d.ts +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.js +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +2 -2
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js.map +1 -1
- package/payload/platform/plugins/docs/references/deployment.md +30 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -5
- package/payload/platform/plugins/docs/references/troubleshooting.md +3 -3
- package/payload/platform/plugins/email/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js +2 -2
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/screening.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +6 -6
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +2 -2
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +2 -2
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js +3 -3
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/loop/mcp/src/lib/neo4j.ts +3 -3
- package/payload/platform/plugins/memory/bin/conversation-archive-ingest.mjs +24 -24
- package/payload/platform/plugins/memory/bin/conversation-archive-ingest.sh +6 -6
- package/payload/platform/plugins/memory/mcp/dist/index.js +8 -8
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +33 -33
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js +12 -12
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js +1 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js +6 -6
- package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js +7 -7
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +9 -9
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +25 -25
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js +5 -5
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts +4 -4
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts +3 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +5 -5
- package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js +5 -5
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js +4 -4
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js +6 -6
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js +7 -7
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.d.ts +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +9 -9
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +10 -11
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js +9 -9
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +5 -5
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +9 -9
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/scripts/boot-smoke.sh +1 -1
- package/payload/platform/plugins/memory/mcp/scripts/graph/fixture.cypher +1 -1
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -2
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/scripts/verify-doc-impl.sh +1 -1
- package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js +3 -3
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.d.ts +2 -2
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js +5 -5
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +6 -6
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js +2 -2
- package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.d.ts +5 -5
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js +3 -3
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.d.ts +4 -4
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js +2 -2
- package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +2 -2
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js +3 -3
- package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js +3 -3
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +5 -5
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +1 -1
- package/payload/platform/plugins/whatsapp/mcp/dist/call-api.d.ts +1 -1
- package/payload/platform/plugins/whatsapp/mcp/dist/call-api.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/index.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +4 -4
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/test-workflows.sh +2 -2
- package/payload/platform/scripts/__tests__/first-token-creates-stream-log.test.sh +1 -1
- package/payload/platform/scripts/__tests__/logs-read-prefix.sh +6 -6
- package/payload/platform/scripts/admin-conversation-recover.mjs +5 -5
- package/payload/platform/scripts/admin-persist-audit.ts +4 -4
- package/payload/platform/scripts/check-no-conversation-id-leaks.mjs +1 -1
- package/payload/platform/scripts/check-no-direct-clipboard.mjs +1 -1
- package/payload/platform/scripts/check-no-task-id-leaks.mjs +2 -2
- package/payload/platform/scripts/check-skill-load-coverage.mjs +1 -1
- package/payload/platform/scripts/component-knowledgedoc-backfill.ts +1 -1
- package/payload/platform/scripts/dedupe-userprofile-ghosts.sh +2 -2
- package/payload/platform/scripts/generate-entitlement-fixture.mjs +1 -1
- package/payload/platform/scripts/installer-device-verify.sh +6 -6
- package/payload/platform/scripts/lib/resolve-account-dir.sh +6 -6
- package/payload/platform/scripts/log-adherence-check.sh +3 -3
- package/payload/platform/scripts/logs-read.sh +13 -13
- package/payload/platform/scripts/logs-read.test.sh +1 -1
- package/payload/platform/scripts/migrate-import.sh +4 -4
- package/payload/platform/scripts/redact-install-logs.sh +1 -1
- package/payload/platform/scripts/seed-neo4j.sh +26 -32
- package/payload/platform/scripts/test-laptop-vnc-boot.sh +3 -3
- package/payload/platform/scripts/verify-skill-tool-surface.sh +17 -2
- package/payload/platform/scripts/vnc.sh +9 -9
- package/payload/platform/services/claude-session-manager/dist/config.d.ts +15 -1
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.js +43 -2
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +2 -2
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +133 -90
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +21 -3
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts +2 -2
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js +4 -4
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +2 -2
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +42 -17
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +116 -48
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +36 -11
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-store.js +53 -2
- package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js +2 -2
- package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +60 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js +169 -11
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/types.d.ts +8 -1
- package/payload/platform/services/claude-session-manager/dist/types.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/url-capture.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/url-capture.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +14 -0
- package/payload/platform/templates/agents/admin/SOUL.md +1 -3
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -3
- package/payload/platform/templates/specialists/agents/project-manager.md +1 -1
- package/payload/platform/templates/systemd/edge.service.template +3 -3
- package/payload/premium-plugins/real-agent/BUNDLE.md +2 -4
- package/payload/premium-plugins/real-agent/plugins/.claude-plugin/marketplace.json +0 -5
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js +3 -3
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/neo4j.ts +3 -3
- package/payload/server/{chunk-ZGJ6CUU2.js → chunk-3G6JMV7N.js} +1 -1
- package/payload/server/{chunk-KVGTWNKQ.js → chunk-NNHHGQJL.js} +314 -5
- package/payload/server/{chunk-RZQMYJVY.js → chunk-QC5LHYPH.js} +3 -3
- package/payload/server/{cloudflare-task-tracker-4PKOLE4H.js → cloudflare-task-tracker-NEB3X6O2.js} +2 -2
- package/payload/server/maxy-edge.js +2 -2
- package/payload/server/public/assets/{admin-Cuu1QdAA.js → admin-CF2ZQvXu.js} +1 -1
- package/payload/server/public/index.html +1 -1
- package/payload/server/server.js +274 -396
- package/payload/platform/plugins/anthropic/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/anthropic/PLUGIN.md +0 -40
- package/payload/platform/plugins/anthropic/references/console-api.md +0 -186
- package/payload/platform/plugins/anthropic/references/setup-guide.md +0 -36
- package/payload/platform/plugins/anthropic/skills/get-api-key/SKILL.md +0 -136
- package/payload/platform/plugins/estate-onboarding/.claude-plugin/plugin.json +0 -8
- package/payload/platform/plugins/estate-onboarding/PLUGIN.md +0 -30
- package/payload/platform/plugins/estate-onboarding/skills/bootstrap/SKILL.md +0 -26
- package/payload/platform/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +0 -63
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/.claude-plugin/plugin.json +0 -8
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/PLUGIN.md +0 -30
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/skills/bootstrap/SKILL.md +0 -26
- package/payload/premium-plugins/real-agent/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +0 -63
|
@@ -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":"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"}
|
|
@@ -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
|
|
|
@@ -18,7 +18,6 @@ These are part of {{productName}}'s foundation and cannot be disabled:
|
|
|
18
18
|
| `memory` | Graph memory — search, write, reindex, and ingest knowledge |
|
|
19
19
|
| `maxy-guide` | User guide and platform documentation (this plugin) |
|
|
20
20
|
| `cloudflare` | Cloudflare Tunnel — remote access via your custom domain |
|
|
21
|
-
| `anthropic` | Claude connection — API key acquisition and configuration |
|
|
22
21
|
| `scheduling` | Calendar and scheduling — events, appointments, recurring triggers. Any activity involving time (date, timestamp, day of week, month, duration) routes through `time-resolve` first. Two read-only tools (`current-datetime`, `time-resolve`) are always available to every public agent regardless of enabled plugins. |
|
|
23
22
|
| `email` | Agent email account — setup, read, send, reply, search, auto-respond |
|
|
24
23
|
| `tasks` | Task lifecycle — create, update, list, relate, complete |
|
|
@@ -67,8 +66,6 @@ Install verbatim:
|
|
|
67
66
|
- `claude plugin install meeting-prep-agent@claude-for-financial-services`
|
|
68
67
|
- `claude plugin install pdf-viewer@knowledge-work-plugins`
|
|
69
68
|
|
|
70
|
-
Onboarding observability for this group: Step 1 emits `[plugin-onboarding] group=anthropic-verticals presented=3` when the three entries are offered, then `[plugin-onboarding] group=anthropic-verticals accepted=<n> declined=<n>` when Step 1 completes — derived from your submission against the closed set above. Grep `~/.{productName}/logs/server.log` for the full prefix to see both halves of the funnel.
|
|
71
|
-
|
|
72
69
|
### Premium Plugins
|
|
73
70
|
|
|
74
71
|
Brand decides which premium plugins ship. Maxy installs ship only `platform/plugins/*`. Real Agent installs ship every plugin under `platform/plugins/*` plus every bundle under `premium-plugins/*`. There is no per-account purchase record; brand identity is the gate.
|
|
@@ -76,12 +73,12 @@ Brand decides which premium plugins ship. Maxy installs ship only `platform/plug
|
|
|
76
73
|
| Plugin | Type | What it does | Public agent |
|
|
77
74
|
|--------|------|-------------|-------------|
|
|
78
75
|
| `teaching` | Skills | Interactive tutoring, lesson planning, and study pack generation from your knowledge base | Yes — all 3 skills serve students and parents |
|
|
79
|
-
| `real-agent` | Bundle (
|
|
76
|
+
| `real-agent` | Bundle (10 sub-plugins) | UK estate agency skills — sales, listings, vendor management, buyer management, lead generation, coaching, business operations, teaching, Loop CRM, and property brochures. 3 specialist roles (negotiator, valuer, compliance) | 4 sub-plugins (estate-sales, buyers, estate-coaching, estate-teaching) |
|
|
80
77
|
| `writer-craft` | Skills + Agent | Manuscript review and writing craft — story architecture, reader engagement, prose craft, editorial practice, and multi-level review | No — writing craft serves the author |
|
|
81
78
|
|
|
82
79
|
**How it works:** Every boot {{productName}} delivers the brand's premium plugins from staging into `platform/plugins/` and stamps `enabledPlugins` against what is actually on disk. No conversation needed — the brand's full set is active from the first turn after install. Updates and reinstalls re-deliver from staging.
|
|
83
80
|
|
|
84
|
-
Some premium plugins are **bundles** — multiple sub-plugins shipped under one directory in `premium-plugins/`, each independently activatable. For example, Real Agent ships
|
|
81
|
+
Some premium plugins are **bundles** — multiple sub-plugins shipped under one directory in `premium-plugins/`, each independently activatable. For example, Real Agent ships 10 sub-plugins covering different aspects of estate agency work. They are all enabled by default. Sub-plugins you don't want active can be turned off individually with "disable <name>"; enabling or disabling individual sub-plugins does not affect the others.
|
|
85
82
|
|
|
86
83
|
If you ask {{productName}} about a tool from a plugin your brand does not ship (for example, a Maxy install asking about a Real Agent Loop CRM tool), {{productName}} responds with a structured `<tool-surface-error>` envelope naming the missing plugin and the remedy, rather than improvising with a generic alternative.
|
|
87
84
|
|
|
@@ -537,12 +537,12 @@ sudo systemctl --user start maxy-ui
|
|
|
537
537
|
|
|
538
538
|
**Steady-state invariants at `/` (post-Task-067):**
|
|
539
539
|
|
|
540
|
-
- `grep -c '\[admin-ui\] onboarding-banner-mount' ~/.maxy/logs/admin-ui-console.log` equals page-load count plus onboarding-flip count, not the render count. Sustained climb at idle means the banner mount log regressed back into the render body (
|
|
540
|
+
- `grep -c '\[admin-ui\] onboarding-banner-mount' ~/.maxy/logs/admin-ui-console.log` equals page-load count plus onboarding-flip count, not the render count. Sustained climb at idle means the banner mount log regressed back into the render body (fix).
|
|
541
541
|
- `grep -c '\[admin-ui\] sessions-poll' ~/.maxy/logs/admin-ui-console.log` over a 60-minute idle window equals zero. The hook no longer installs a `setInterval`; every `sessions-poll` line is operator-triggered (initial mount, refresh button, post-mutation refetch). One or more lines during operator idle means `setInterval` was reinstated.
|
|
542
542
|
- `outcome=error` lines name a real fetch failure on an operator-triggered refetch, set the `error` field, and surface in the sidebar.
|
|
543
543
|
|
|
544
|
-
**Reconcile signal
|
|
544
|
+
**Reconcile signal:**
|
|
545
545
|
|
|
546
546
|
- `grep -c '\[admin-ui\] sidebar-meta-pane-reconcile' ~/.maxy/logs/admin-ui-console.log` should equal the count of End / Resume / Purge clicks while the metadata pane was open. A `to=gone` line without a paired Close click means the pane's auto-close logic regressed.
|
|
547
547
|
|
|
548
|
-
**Why this matters.** The render-body log was misleading: it read as "the admin agent is checking onboarding state continuously", when in fact `onboardingComplete` had not changed at all. The
|
|
548
|
+
**Why this matters.** The render-body log was misleading: it read as "the admin agent is checking onboarding state continuously", when in fact `onboardingComplete` had not changed at all. The fix moved the log into `useEffect(…, [])` then dropped the per-tick poll entirely, so a quiet console is now the steady state. With both fixes in place, console output is a faithful record of what the page actually did each operator click.
|