@rubytech/create-maxy-code 0.1.158 → 0.1.161
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/package.json +1 -1
- package/payload/platform/lib/admin-conversation-purge/dist/index.d.ts +1 -1
- package/payload/platform/lib/admin-conversation-purge/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/admin-conversation-purge/dist/index.js +4 -4
- package/payload/platform/lib/admin-conversation-purge/dist/index.js.map +1 -1
- package/payload/platform/lib/admin-conversation-purge/src/index.ts +5 -5
- package/payload/platform/lib/graph-search/src/__tests__/fulltext-coverage.test.ts +48 -17
- package/payload/platform/lib/graph-style/dist/index.js +2 -2
- package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-style/src/__tests__/parity.test.ts +1 -1
- package/payload/platform/lib/graph-style/src/index.ts +2 -2
- package/payload/platform/lib/graph-trash/dist/index.js +1 -1
- package/payload/platform/lib/graph-trash/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-trash/src/index.ts +1 -1
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js +1 -1
- package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js.map +1 -1
- package/payload/platform/lib/graph-write/dist/conversation-provenance.d.ts +3 -3
- package/payload/platform/lib/graph-write/dist/conversation-provenance.js +5 -5
- package/payload/platform/lib/graph-write/dist/conversation-provenance.js.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.js +1 -1
- 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 +1 -1
- package/payload/platform/lib/graph-write/src/conversation-provenance.ts +8 -8
- package/payload/platform/lib/graph-write/src/index.ts +1 -1
- package/payload/platform/neo4j/schema.cypher +86 -46
- package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
- package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +8 -4
- package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +1 -1
- package/payload/platform/plugins/admin/hooks/__tests__/per-turn-graph-pass-gate.test.sh +361 -0
- package/payload/platform/plugins/admin/hooks/__tests__/pre-turn-graph-pass.test.sh +13 -13
- package/payload/platform/plugins/admin/hooks/__tests__/turn-completed-graph-write.test.sh +1 -1
- package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +2 -2
- package/payload/platform/plugins/admin/hooks/lib/admin-graph-pass-common.sh +102 -0
- package/payload/platform/plugins/admin/hooks/per-turn-graph-pass-gate.sh +106 -0
- package/payload/platform/plugins/admin/hooks/pre-turn-graph-pass.sh +15 -8
- package/payload/platform/plugins/admin/hooks/turn-completed-graph-write.sh +4 -4
- package/payload/platform/plugins/admin/mcp/dist/index.js +65 -24
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/skills/business-profile/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/session-management/SKILL.md +2 -2
- package/payload/platform/plugins/admin/skills/stream-log-review/SKILL.md +5 -5
- package/payload/platform/plugins/admin/skills/stream-log-review/references/analysis-patterns.md +6 -6
- package/payload/platform/plugins/business-assistant/references/profiling.md +1 -1
- package/payload/platform/plugins/contacts/PLUGIN.md +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/contact-erase.js +3 -3
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.d.ts +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-export.js +2 -2
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.d.ts +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.d.ts.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js +4 -4
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js.map +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-manage.js +10 -10
- package/payload/platform/plugins/contacts/mcp/dist/tools/group-manage.js.map +1 -1
- package/payload/platform/plugins/docs/references/admin-session.md +6 -6
- package/payload/platform/plugins/docs/references/admin-ui.md +1 -1
- package/payload/platform/plugins/docs/references/internals.md +5 -5
- package/payload/platform/plugins/docs/references/plugins-guide.md +6 -5
- package/payload/platform/plugins/docs/references/troubleshooting.md +1 -1
- package/payload/platform/plugins/email/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/email/PLUGIN.md +19 -2
- package/payload/platform/plugins/email/mcp/dist/index.js +78 -0
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-dispatch.d.ts +8 -0
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-dispatch.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-dispatch.js +177 -0
- package/payload/platform/plugins/email/mcp/dist/lib/conversation-archive-dispatch.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/embedding.js +2 -2
- package/payload/platform/plugins/email/mcp/dist/lib/embedding.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts +6 -54
- package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/graph.js +12 -300
- package/payload/platform/plugins/email/mcp/dist/lib/graph.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/ingest-batch.d.ts +23 -0
- package/payload/platform/plugins/email/mcp/dist/lib/ingest-batch.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/ingest-batch.js +15 -0
- package/payload/platform/plugins/email/mcp/dist/lib/ingest-batch.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-classify.d.ts +6 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-classify.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-classify.js +89 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-classify.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch.d.ts +15 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch.js +49 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-ingest.d.ts +20 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-ingest.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-ingest.js +91 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-ingest.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-setup.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js +32 -52
- package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +19 -83
- package/payload/platform/plugins/email/skills/email-ingest/SKILL.md +87 -0
- package/payload/platform/plugins/linkedin-import/skills/linkedin-import/SKILL.md +10 -37
- package/payload/platform/plugins/linkedin-import/skills/linkedin-import/references/connections.md +1 -0
- package/payload/platform/plugins/memory/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +11 -2
- package/payload/platform/plugins/memory/bin/conversation-archive-ingest.mjs +139 -439
- package/payload/platform/plugins/memory/bin/conversation-archive-ingest.sh +15 -47
- package/payload/platform/plugins/memory/mcp/dist/index.js +197 -58
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js +43 -27
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/label-delete-gate.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/label-delete-gate.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/label-delete-gate.test.js +62 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/label-delete-gate.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-cypher-drift.test.js +5 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-cypher-drift.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.d.ts +42 -25
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.js +23 -17
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/email.d.ts +3 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/email.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/email.js +61 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/email.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.d.ts +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.js +3 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js +1 -0
- 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/x-dm.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/x-dm.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.d.ts +2 -0
- 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 +9 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +3 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +6 -6
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/kd-classify-gate.d.ts +41 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/kd-classify-gate.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/kd-classify-gate.js +71 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/kd-classify-gate.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/label-delete-gate.d.ts +18 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/label-delete-gate.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/label-delete-gate.js +31 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/label-delete-gate.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-pass.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-pass.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.d.ts +5 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js +162 -78
- 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-memory-expunge-emit.test.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-memory-expunge-emit.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js +2 -0
- 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__/log-ingest.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/log-ingest.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-compiled-truth-history.test.js +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-compiled-truth-history.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-delete-emit.test.js +6 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-delete-emit.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-delete-reserved-label.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-delete-reserved-label.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-delete-reserved-label.test.js +141 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-delete-reserved-label.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-empty-trash-admin-conversation.test.js +8 -8
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-empty-trash-admin-conversation.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-empty-trash-reserved-label.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-empty-trash-reserved-label.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-empty-trash-reserved-label.test.js +86 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-empty-trash-reserved-label.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-report-tools.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-report-tools.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts +33 -34
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +94 -273
- 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-list-chunks.d.ts +43 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-list-chunks.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-list-chunks.js +96 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-list-chunks.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-memory-expunge.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/kd-classify.d.ts +6 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/kd-classify.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/kd-classify.js +73 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/kd-classify.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-brain-capture-recent.d.ts +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-brain-capture-recent.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-brain-capture-recent.js +4 -4
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-brain-capture-recent.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.d.ts +6 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.js +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts +8 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js +40 -5
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.d.ts +8 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.js +25 -9
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +11 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-node-exists.d.ts +28 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-node-exists.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-node-exists.js +46 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-node-exists.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-write.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-write.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +26 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +11 -11
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/scripts/backfill-typed-edges.ts +1 -1
- package/payload/platform/plugins/memory/mcp/scripts/graph/fixture.cypher +1 -1
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +5 -4
- package/payload/platform/plugins/memory/references/graph-primitives.md +1 -1
- package/payload/platform/plugins/memory/references/schema-base.md +8 -10
- package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +100 -116
- package/payload/platform/plugins/memory/skills/conversation-archive-enrich/SKILL.md +74 -24
- package/payload/platform/plugins/memory/skills/conversational-memory/SKILL.md +1 -1
- package/payload/platform/plugins/notion-import/skills/notion-import/SKILL.md +1 -1
- package/payload/platform/plugins/obsidian-import/skills/obsidian-import/SKILL.md +1 -1
- package/payload/platform/plugins/substack-import/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/substack-import/PLUGIN.md +34 -0
- package/payload/platform/plugins/substack-import/skills/substack-import/SKILL.md +182 -0
- package/payload/platform/plugins/substack-import/skills/substack-import/references/archive-shape.md +68 -0
- package/payload/platform/plugins/substack-import/skills/substack-import/references/attachments.md +72 -0
- package/payload/platform/plugins/substack-import/skills/substack-import/references/engagement.md +61 -0
- package/payload/platform/plugins/substack-import/skills/substack-import/references/posts.md +80 -0
- package/payload/platform/plugins/substack-import/skills/substack-import/references/subscribers.md +74 -0
- package/payload/platform/plugins/whatsapp/PLUGIN.md +1 -1
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js +2 -2
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/index.js +2 -2
- package/payload/platform/plugins/work/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/project-create.js +6 -6
- package/payload/platform/plugins/work/mcp/dist/tools/project-create.js.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/session-list.d.ts +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/session-list.d.ts.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/session-list.js +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/session-list.js.map +1 -1
- package/payload/platform/plugins/x-import/references/archive-shape.md +2 -2
- package/payload/platform/plugins/x-import/skills/x-import/SKILL.md +4 -4
- package/payload/platform/scripts/admin-persist-audit.ts +18 -18
- package/payload/platform/scripts/identity-forbidden-token-check.mjs +2 -0
- package/payload/platform/scripts/seed-neo4j.sh +1 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.js +3 -3
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +3 -3
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +4 -4
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -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 +2 -0
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
- package/payload/platform/templates/specialists/agents/archive-ingest-operator.md +45 -0
- package/payload/platform/templates/specialists/agents/database-operator.md +5 -17
- package/payload/platform/templates/specialists/agents/librarian.md +1 -1
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
- package/payload/server/{chunk-AXOL2PPG.js → chunk-3TRIXQSJ.js} +101 -101
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/{admin-3fLFD5h_.js → admin-Dal5FWaD.js} +2 -2
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-Breg9-99.js → architectureDiagram-Q4EWVU46-Do2zYONG.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DXf1_673.js → blockDiagram-DXYQGD6D-DpIX_bRu.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CSZ36W4-.js → c4Diagram-AHTNJAMY-Cz335ZSY.js} +1 -1
- package/payload/server/public/assets/channel-PC4_IjI1.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-DsrLk2eK.js → chunk-336JU56O-Dmknn3Wo.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-JpNfNf81.js → chunk-426QAEUC-ClfGjizN.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-DmClEAD0.js → chunk-4TB4RGXK-BPKctJ5c.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-BI9blW3N.js → chunk-5FUZZQ4R-BWDCO9zw.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-BbgttEFO.js → chunk-5PVQY5BW-BE34_Db0.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-BX_LCFOx.js → chunk-EDXVE4YY-BysA-_6v.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-Bb7EoD0w.js → chunk-ENJZ2VHE-BMVyMsqA.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-DH8uQk-s.js → chunk-ICPOFSXX-C5KRdLV4.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-FH5kgXsw.js → chunk-OYMX7WX6-DVZD-AVc.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-D_ljlkHr.js → chunk-U2HBQHQK-DYmQdx8x.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-BX3EmZvm.js → chunk-X2U36JSP-DrZenIl3.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-Vu7-E93h.js → chunk-YZCP3GAM-CDuGbvMq.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-CwjhNPX5.js → chunk-ZZ45TVLE-COztbiu5.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-B_pMa-SX.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BdBAgF20.js +1 -0
- package/payload/server/public/assets/clone-CkNt9L9r.js +1 -0
- package/payload/server/public/assets/{dagre-Ce6gsj0C.js → dagre-Cv9Ib2OM.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-BaMGpsoy.js → dagre-KV5264BT-CoEd61KZ.js} +1 -1
- package/payload/server/public/assets/{data-BHASh0_Y.js → data-DbSORCl4.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-CHEE9rjq.js → diagram-5BDNPKRD-WXNzw3uW.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-C98sZLW1.js → diagram-G4DWMVQ6-C6IuQ2VV.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-DNvMGsTZ.js → diagram-MMDJMWI5-CdJdir5A.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-Cdte4IBa.js → diagram-TYMM5635-DxWKQH5T.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-C9VZsWXK.js → erDiagram-SMLLAGMA-C9fvs33K.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-tuP5fzzR.js → flowDiagram-DWJPFMVM-BO7Yrbqv.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-SJgRPUwx.js → ganttDiagram-T4ZO3ILL-CQJyWBZq.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-DU_cI_50.js → gitGraphDiagram-UUTBAWPF-DZfQHrYw.js} +1 -1
- package/payload/server/public/assets/{graph-labels-DXlmm1og.js → graph-labels-BBB5jsZk.js} +1 -1
- package/payload/server/public/assets/{graph-BhEI09tF.js → graph-ys_joP2o.js} +1 -1
- package/payload/server/public/assets/{graphlib-D_nAsvmx.js → graphlib-C40H-Q5E.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-Cj2Y19m6.js → infoDiagram-42DDH7IO-CakfV5f9.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-DMc1xq1y.js → ishikawaDiagram-UXIWVN3A-CPuBPyfa.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-C4CRAQma.js → journeyDiagram-VCZTEJTY-zpZm2Mmo.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-CTr4AldU.js → kanban-definition-6JOO6SKY-DfJduQCo.js} +1 -1
- package/payload/server/public/assets/{line-Btlm_IAl.js → line-BpYQqO5R.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-DXFdj_y1.js → mermaid-parser.core-C5Mwi14D.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-DFBhoCr5.js → mermaid.core-D8qBtvvT.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-r9gVQybo.js → mindmap-definition-QFDTVHPH-Bli9JhIN.js} +1 -1
- package/payload/server/public/assets/{page-CDWu1Aft.js → page--bl5Y7ZI.js} +2 -2
- package/payload/server/public/assets/page-CwmZ76U7.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-CHKZjSaH.js → pieDiagram-DEJITSTG-MsLXTSLg.js} +1 -1
- package/payload/server/public/assets/{public-DyGWgfaZ.js → public-DltgEfA9.js} +2 -2
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CSGR1HJr.js → quadrantDiagram-34T5L4WZ-De1sh2K0.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-DZ6hX9D6.js → requirementDiagram-MS252O5E-D5Sfg1t_.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-DbZBKh0m.js → sankeyDiagram-XADWPNL6-DHA3LIbv.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BHHpb8dt.js → sequenceDiagram-FGHM5R23-BE_QlG1B.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-DQ1jiLB4.js → stateDiagram-FHFEXIEX-NIwp3F4u.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-pfk2F6st.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BlGiEU7p.js → timeline-definition-GMOUNBTQ-CPE9jyDF.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-DmEH-hsB.js → vennDiagram-DHZGUBPP-CKfoyYmH.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-C7KJJ40d.js → wardleyDiagram-NUSXRM2D-B9yJek-o.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-JDnusCaa.js → xychartDiagram-5P7HB3ND-DuCcSLqX.js} +1 -1
- package/payload/server/public/data.html +3 -3
- package/payload/server/public/graph.html +3 -3
- package/payload/server/public/index.html +4 -4
- package/payload/server/public/public.html +1 -1
- package/payload/server/server.js +133 -133
- package/payload/server/public/assets/channel-BmZnt3PP.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-kmMLFUpV.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BV7Ae8ct.js +0 -1
- package/payload/server/public/assets/clone-B5eqoN9I.js +0 -1
- package/payload/server/public/assets/page-cyvshX4Z.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CByT2RzF.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e,t}from"./chunk-DD-I1_y5.js";import{_ as n,a as r,d as i,f as a,g as o,l as s,m as c,p as l,r as u,u as d,v as f,y as p}from"./ChatInput-CJo_77bp.js";import{C as m,S as h,_ as g,a as _,b as v,c as y,d as b,f as x,i as S,l as C,m as w,o as T,p as ee,u as te,v as ne,w as E,x as D,y as O}from"./graph-labels-DXlmm1og.js";import{a as re,i as ie,r as ae,t as oe}from"./page-CDWu1Aft.js";import{i as se,n as ce,r as le}from"./page-cyvshX4Z.js";import{t as ue}from"./Checkbox-YrQovXpN.js";import{n as de,r as k,t as fe}from"./lib-Bnh57com.js";var pe=n(),A=e(p(),1);new Set(`image/jpeg,image/png,image/gif,image/webp,application/pdf,text/plain,text/markdown,text/csv,text/html,text/calendar,application/zip,application/x-zip-compressed,audio/ogg,audio/opus,audio/mp4,audio/mpeg,audio/webm,audio/wav,.opus,.ogg,.m4a,.mp3,.wav,.webm`.split(`,`).filter(e=>!e.startsWith(`.`)));function me(e){switch(e){case`expanded`:return!0;case`collapsed`:return!1;default:return}}var he=`admin-landing-redirected`,ge=`/graph`;function _e(e){return e.appState===`chat`&&!e.alreadyRedirected}function ve(){let[e,t]=(0,A.useState)(`loading`),[n,r]=(0,A.useState)(``),[i,a]=(0,A.useState)(``),[o,s]=(0,A.useState)(``),[c,l]=(0,A.useState)(!1),[u,d]=(0,A.useState)(!1),[f,p]=(0,A.useState)(!1),[m,h]=(0,A.useState)(!1),[g,_]=(0,A.useState)(!1),[v,y]=(0,A.useState)(null),[b,x]=(0,A.useState)(null),[S,C]=(0,A.useState)(void 0),[w,T]=(0,A.useState)(null),[ee,te]=(0,A.useState)(void 0),[ne,E]=(0,A.useState)(null),[D,O]=(0,A.useState)(null),[re,ie]=(0,A.useState)([]),[ae,oe]=(0,A.useState)(!1),[se,ce]=(0,A.useState)(void 0),le=(0,A.useRef)(void 0),[ue,de]=(0,A.useState)(!1);(0,A.useEffect)(()=>{typeof window>`u`||window.location.hostname.startsWith(`admin.`)&&fetch(`/api/remote-auth/status`).then(e=>e.ok?e.json():null).then(e=>{e?.configured&&de(!0)}).catch(()=>{})},[]);let k=(0,A.useRef)(null),fe=(0,A.useRef)(null);(0,A.useEffect)(()=>{async function e(){let e=null;try{e=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!e)return!1;try{let n=await fetch(`/api/admin/session?session_key=${encodeURIComponent(e)}`);if(n.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}return!1}if(!n.ok)return!1;let r=await n.json();y(r.session_key),O(r.conversationId??null),C(r.businessName),T(r.role??null),te(r.userName===void 0?null:r.userName),E(r.avatar??null);let i=me(r.thinkingView);return le.current=i,ce(i),t(`chat`),!0}catch(e){return console.error(`[admin] session restore failed:`,e),!1}}async function n(r=2){try{let i=await fetch(`/api/health`);if(!i.ok){if(r>0)return await new Promise(e=>setTimeout(e,1500)),n(r-1);console.error(`[admin] health check returned ${i.status} after retries`),t(`set-pin`);return}let a=await i.json();if(!a.pin_configured){t(`set-pin`);return}if(!a.claude_authenticated){t(`connect-claude`);return}if(await e())return;t(`enter-pin`)}catch(e){if(r>0)return await new Promise(e=>setTimeout(e,1500)),n(r-1);console.error(`[admin] health check failed:`,e),t(`set-pin`)}}n()},[]),(0,A.useEffect)(()=>{e===`chat`&&fetch(`/api/admin/claude-info`).then(e=>{if(e.ok)return e.json()}).then(e=>{e&&x(e)}).catch(()=>{})},[e]),(0,A.useEffect)(()=>{if(typeof window>`u`)return;let t=!1;try{t=sessionStorage.getItem(he)===`1`}catch{}if(_e({appState:e,alreadyRedirected:t})){try{sessionStorage.setItem(he,`1`)}catch{}console.info(`[admin-ui] landing-redirect target=${ge}`),window.location.replace(ge)}},[e]);let pe=(0,A.useRef)(null);(0,A.useEffect)(()=>{if(e!==`chat`)return;let n=setInterval(async()=>{try{let e=await fetch(`/api/health`);if(e.ok){let n=await e.json();if(n.auth_status===`dead`||n.auth_status===`missing`){t(`connect-claude`);return}}}catch{}if(v)try{let e=await fetch(`/api/admin/session?session_key=${encodeURIComponent(v)}`);if(e.status!==401)return;let t=(await e.clone().json().catch(()=>null))?.code??`unknown-401`;console.warn(`[admin-auth] outcome=heartbeat-detected-expiry code=${t}`),pe.current?.()}catch{}},300*1e3);return()=>clearInterval(n)},[e,v]),(0,A.useEffect)(()=>{e===`connect-claude`&&fetch(`/api/health`).then(e=>e.ok?e.json():null).then(e=>{e?.claude_authenticated&&t(`enter-pin`)}).catch(()=>{})},[e]);async function ve(e,n){d(!0);try{let i=await fetch(`/api/admin/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:e,...n?{accountId:n}:{}})});if(!i.ok){s((await i.json().catch(()=>({}))).error||`Invalid PIN`);return}let a=await i.json();if(a.accounts&&!a.session_key){console.log(`[admin] account picker shown: userId=${a.userId} accountCount=${a.accounts.length}`),ie(a.accounts),t(`account-picker`);return}y(a.session_key),O(a.conversationId??null),C(a.businessName),T(a.role??null),te(a.userName===void 0?null:a.userName),E(a.avatar??null);let o=me(a.thinkingView);if(le.current=o,ce(o),n)try{sessionStorage.setItem(`maxy-account-id`,n)}catch{}try{sessionStorage.setItem(`maxy-admin-session-key`,a.session_key)}catch{}r(``),t(`chat`)}catch(e){console.error(`[admin] connection error:`,e),s(`Could not connect.`)}finally{d(!1),oe(!1)}}let ye=(0,A.useCallback)(async e=>{if(e.preventDefault(),u)return;s(``);let a=i.trim();if(!a){s(`Please enter your name.`);return}if(n.length<4){s(`PIN must be at least 4 characters.`);return}let o=n;d(!0);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:o,name:a})});if(!e.ok){let n=await e.json().catch(()=>({}));if(e.status===409){console.log(`[admin] PIN already configured — re-checking health`);try{let e=await fetch(`/api/health`);if(e.ok){let r=await e.json();r.pin_configured&&r.claude_authenticated?t(`enter-pin`):r.pin_configured?t(`connect-claude`):s(n.error||`Failed to set PIN.`)}else t(`enter-pin`)}catch{t(`enter-pin`)}return}s(n.error||`Failed to set PIN.`);return}let n=await fetch(`/api/health`);if((n.ok?await n.json():null)?.claude_authenticated){await ve(o);return}r(``),t(`connect-claude`)}catch(e){console.error(`[admin] connection error:`,e),s(`Could not connect.`)}finally{d(!1)}},[n,u,i]),be=(0,A.useCallback)(async e=>{e.preventDefault(),s(``),await ve(n)},[n]),xe=(0,A.useCallback)(async()=>{_(!0);try{await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`logout`})}),y(null),T(null),te(void 0),E(null);try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}t(`connect-claude`)}finally{_(!1)}},[]),Se=(0,A.useCallback)(()=>{y(null),T(null),te(void 0),E(null);try{sessionStorage.removeItem(`maxy-admin-session-key`),sessionStorage.removeItem(`maxy-account-id`),sessionStorage.removeItem(he)}catch{}r(``),s(``),t(`enter-pin`)},[]);return(0,A.useEffect)(()=>{pe.current=Se},[Se]),{appState:e,setAppState:t,pin:n,setPin:r,operatorName:i,setOperatorName:a,pinError:o,setPinError:s,showPin:c,setShowPin:l,pinLoading:u,authPolling:f,setAuthPolling:p,authLoading:m,setAuthLoading:h,disconnecting:g,cacheKey:v,setCacheKey:y,claudeInfo:b,setClaudeInfo:x,businessName:S,role:w,userName:ee,userAvatar:ne,conversationId:D,setConversationId:O,accounts:re,accountPickerLoading:ae,expandAll:se,setExpandAll:ce,expandAllDefaultRef:le,remoteAuthEnabled:ue,pinInputRef:k,setPinFormRef:fe,handleSetPin:ye,handleLogin:be,handleAccountSelect:(0,A.useCallback)(async e=>{oe(!0),s(``),await ve(n,e)},[n]),handleDisconnect:xe,handleLogout:Se,handleChangePin:(0,A.useCallback)(async()=>{if(!n){s(`Enter your current PIN first.`);return}d(!0),s(``);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify({currentPin:n})});if(!e.ok){s((await e.json().catch(()=>({error:`Incorrect PIN.`}))).error||`Incorrect PIN.`);return}r(``),s(``),t(`set-pin`)}catch(e){console.error(`[admin-auth] change pin failed:`,e),s(e instanceof Error?e.message:String(e))}finally{d(!1)}},[n])}}var ye=o(`bold`,[[`path`,{d:`M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8`,key:`mg9rjx`}]]),be=o(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),xe=o(`ellipsis-vertical`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}]]),Se=o(`file-exclamation-point`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Ce=o(`italic`,[[`line`,{x1:`19`,x2:`10`,y1:`4`,y2:`4`,key:`15jd3p`}],[`line`,{x1:`14`,x2:`5`,y1:`20`,y2:`20`,key:`bu0au3`}],[`line`,{x1:`15`,x2:`9`,y1:`4`,y2:`20`,key:`uljnxc`}]]),we=o(`link-2`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]),Te=o(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),Ee=o(`message-square-plus`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M12 8v6`,key:`1ib9pf`}],[`path`,{d:`M9 11h6`,key:`1fldmi`}]]),De=o(`minimize-2`,[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]),Oe=o(`pin`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z`,key:`1nkz8b`}]]),ke=o(`square-arrow-down-left`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`m16 8-8 8`,key:`166keh`}],[`path`,{d:`M16 16H8V8`,key:`1w2ppm`}]]),Ae=o(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),j=d();function je({inputRef:e,value:t,onChange:n,onComplete:r,showPin:i,autoFocus:a}){let o=(0,A.useRef)([]);function s(e,r){r.key===`Backspace`?(r.preventDefault(),t[e]?n(t.slice(0,e)+t.slice(e+1)):e>0&&(n(t.slice(0,e-1)+t.slice(e)),o.current[e-1]?.focus())):r.key===`ArrowLeft`&&e>0?o.current[e-1]?.focus():r.key===`ArrowRight`&&e<5?o.current[e+1]?.focus():r.key===`Enter`&&(r.preventDefault(),r.currentTarget.form?.requestSubmit())}function c(e,i){let a=i.nativeEvent.data;if(!a||!/^\d$/.test(a))return;let s=t.split(``);for(s[e]=a;s.length<e;)s.push(``);let c=s.join(``).replace(/\D/g,``).slice(0,6);n(c),c.length===6?r?.(c):e<5&&o.current[e+1]?.focus()}function l(e){e.preventDefault();let t=e.clipboardData.getData(`text`).replace(/\D/g,``).slice(0,6);t&&(n(t),t.length===6?r?.(t):o.current[t.length]?.focus())}return(0,j.jsx)(`div`,{className:`pin-field`,children:Array.from({length:6}).map((n,r)=>(0,j.jsx)(`input`,{ref:t=>{o.current[r]=t,r===0&&e&&(e.current=t)},type:`text`,inputMode:`numeric`,className:`pin-box${t[r]?` pin-box-filled`:``}`,value:t[r]?i?t[r]:`•`:``,onKeyDown:e=>s(r,e),onInput:e=>c(r,e),onPaste:l,onFocus:e=>e.target.select(),autoFocus:a&&r===0,autoComplete:`off`,maxLength:1,"aria-label":`PIN digit ${r+1}`},r))})}function Me(e){let{pin:t,setPin:n,showPin:i,setShowPin:a,pinLoading:o,pinError:c,pinInputRef:l,setPinFormRef:u,onSubmit:d,operatorName:f,setOperatorName:p}=e;return(0,j.jsx)(`div`,{className:`connect-page`,children:(0,j.jsxs)(`div`,{className:`connect-content`,children:[(0,j.jsx)(`img`,{src:s,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,j.jsxs)(`h1`,{className:`connect-title`,children:[`Welcome to `,r.productName]}),(0,j.jsxs)(`p`,{className:`connect-subtitle`,children:[`Tell `,r.productName,` who you are, then choose a PIN.`]}),(0,j.jsxs)(`form`,{ref:u,onSubmit:d,className:`connect-pin-form`,children:[(0,j.jsxs)(`div`,{className:`pin-input-row`,children:[(0,j.jsx)(`input`,{type:`text`,className:`connect-name-input`,placeholder:`Your full name`,value:f,onChange:e=>p(e.target.value),autoComplete:`name`,autoFocus:!0,required:!0,"aria-label":`Your full name`}),(0,j.jsx)(`div`,{style:{width:38,flexShrink:0},"aria-hidden":`true`})]}),(0,j.jsxs)(`div`,{className:`pin-input-row`,children:[(0,j.jsx)(je,{inputRef:l,value:t,onChange:n,onComplete:()=>{},showPin:i}),(0,j.jsx)(k,{variant:`send`,type:`submit`,disabled:!t||!f.trim(),loading:o,"aria-label":`Set PIN`,children:(0,j.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,j.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,j.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,j.jsx)(ue,{checked:i,onChange:()=>a(e=>!e),label:`Show PIN`})]}),c&&(0,j.jsx)(`p`,{className:`admin-pin-error`,children:c})]})})}function Ne(e){let{pin:t,setPin:n,showPin:i,setShowPin:a,pinLoading:o,pinError:c,pinInputRef:l,onSubmit:u,onChangePin:d,remoteAuthEnabled:f,onSignOutRemote:p}=e;return(0,j.jsxs)(`div`,{className:`connect-page`,children:[f&&p&&(0,j.jsx)(`button`,{type:`button`,className:`connect-signout`,onClick:p,children:`Sign out`}),(0,j.jsxs)(`div`,{className:`connect-content`,children:[(0,j.jsx)(`img`,{src:s,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,j.jsx)(`h1`,{className:`connect-title`,children:r.productName}),(0,j.jsxs)(`form`,{onSubmit:u,className:`connect-pin-form`,children:[(0,j.jsxs)(`div`,{className:`pin-input-row`,children:[(0,j.jsx)(je,{inputRef:l,value:t,onChange:n,onComplete:()=>{},showPin:i,autoFocus:!0}),(0,j.jsx)(k,{variant:`send`,type:`submit`,disabled:!t,loading:o,children:(0,j.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,j.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,j.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,j.jsxs)(`div`,{className:`pin-options`,children:[(0,j.jsx)(ue,{checked:i,onChange:()=>a(e=>!e),label:`Show PIN`}),(0,j.jsx)(k,{type:`button`,variant:`ghost`,onClick:d,children:`Change PIN`})]})]}),c&&(0,j.jsx)(`p`,{className:`admin-pin-error`,children:c})]})]})}function Pe(e){let{accounts:t,loading:n,error:i,onSelect:a}=e;return(0,j.jsx)(`div`,{className:`connect-page`,children:(0,j.jsxs)(`div`,{className:`connect-content`,children:[(0,j.jsx)(`img`,{src:s,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,j.jsx)(`h1`,{className:`connect-title`,children:r.productName}),(0,j.jsx)(`p`,{className:`connect-subtitle`,children:`Select an account`}),(0,j.jsx)(`div`,{className:`account-picker-list`,children:t.map(e=>(0,j.jsxs)(`button`,{className:`account-picker-card`,onClick:()=>a(e.accountId),disabled:n,type:`button`,children:[(0,j.jsx)(`span`,{className:`account-picker-name`,children:e.businessName||e.accountId}),(0,j.jsx)(`span`,{className:`account-picker-role`,children:e.role}),n&&(0,j.jsx)(O,{className:`account-picker-spinner`,size:16})]},e.accountId))}),i&&(0,j.jsx)(`p`,{className:`admin-pin-error`,children:i})]})})}function Fe(e){let{authPolling:t,setAuthPolling:n,authLoading:i,setAuthLoading:a,pinError:o,setPinError:c,setAppState:l}=e,[u,d]=(0,A.useState)(!1),[f,p]=(0,A.useState)(!1);async function m(){p(!0),c(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`launch-browser`})})).json();e.launched?d(!0):e.error&&c(e.error)}catch(e){console.error(`[admin] browser launch error:`,e),c(`Could not launch browser.`)}p(!1)}async function h(){a(!0),c(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`})).json();if(e.started){n(!0),d(!0),a(!1);for(let e=0;e<120;e++)if(await new Promise(e=>setTimeout(e,2e3)),(await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`wait`})})).json()).authenticated){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),l(`enter-pin`);return}c(`Timed out waiting for sign-in. Try again.`),n(!1)}else e.error&&c(e.error)}catch(e){console.error(`[admin] auth flow error:`,e),c(`Could not start auth flow.`)}a(!1)}async function g(){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),n(!1),c(``)}return t||u?(0,j.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,height:`100dvh`,overflow:`auto`},children:[(0,j.jsxs)(`header`,{className:`chat-header`,style:{paddingBottom:`12px`,flexShrink:0,position:`relative`,maxWidth:`680px`,width:`100%`,margin:`0 auto`,padding:`24px 20px 12px`},children:[t?(0,j.jsx)(`button`,{onClick:g,style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Cancel`,children:`✕`}):(0,j.jsx)(`button`,{onClick:()=>d(!1),style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Close browser`,children:`✕`}),(0,j.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`chat-logo`}),(0,j.jsx)(`h1`,{className:`chat-tagline`,children:`Connect Claude`}),(0,j.jsx)(`p`,{className:`chat-intro`,children:t?`Sign in and authorize in the browser below.`:`Open your email or prepare your accounts, then sign in.`}),!t&&(0,j.jsx)(`div`,{style:{marginTop:`12px`},children:(0,j.jsx)(k,{variant:`primary`,onClick:h,disabled:i,children:i?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`})})]}),(0,j.jsx)(`div`,{style:{flex:1,display:`flex`,flexDirection:`column`,minHeight:0,gap:`10px`,padding:`0 0 16px`},children:(0,j.jsx)(`iframe`,{src:`/vnc-viewer.html`,style:{flex:1,width:`100%`,minHeight:0,border:`none`,background:`#111`,display:`block`},title:`Claude Sign-in`})}),o&&(0,j.jsx)(`p`,{className:`admin-pin-error`,style:{textAlign:`center`,padding:`0 20px 16px`},children:o})]}):(0,j.jsx)(`div`,{className:`connect-page`,children:(0,j.jsxs)(`div`,{className:`connect-content`,children:[(0,j.jsxs)(`div`,{className:`connect-logos`,children:[(0,j.jsx)(`div`,{className:`connect-logo-wrap`,children:(0,j.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`connect-logo`})}),(0,j.jsx)(`svg`,{className:`connect-arrow`,viewBox:`0 0 48 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:(0,j.jsx)(`path`,{d:`M0 12h44m0 0l-8-8m8 8l-8 8`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`})}),(0,j.jsxs)(`div`,{className:`connect-logo-wrap`,children:[(0,j.jsx)(`img`,{src:s,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,j.jsx)(`span`,{className:`connect-logo-label`,children:r.productName})]})]}),(0,j.jsxs)(`h1`,{className:`connect-title`,children:[`Connect Claude to power `,r.productName]}),(0,j.jsx)(`p`,{className:`connect-subtitle`,children:`Sign in with your Anthropic account to get started.`}),(0,j.jsx)(k,{variant:`primary`,onClick:h,disabled:i,children:i?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`}),(0,j.jsx)(`p`,{style:{marginTop:`6px`,fontSize:`11px`,color:`#999`,maxWidth:`300px`,textAlign:`center`,lineHeight:`1.4`},children:`First time? You may need to sign into your email and Anthropic account in the browser before connecting.`}),(0,j.jsx)(`button`,{onClick:m,disabled:f,style:{marginTop:`12px`,background:`none`,border:`none`,color:`var(--color-primary, #666)`,fontSize:`13px`,cursor:`pointer`,textDecoration:`underline`,textUnderlineOffset:`3px`},children:f?`Launching…`:`Open browser first`}),o&&(0,j.jsx)(`p`,{className:`admin-pin-error`,children:o})]})})}var Ie=`maxy-shell-artefact-px`;function Le(){if(typeof window>`u`)return 320;let e=window.innerWidth,t=document.querySelector(`.platform > .side`)?.getBoundingClientRect(),n=t?t.right:Math.round(e*.3);return ze(Math.round((e-n)*(2/3)))}function Re(){if(typeof window>`u`)return 320;try{let e=window.localStorage.getItem(Ie);if(!e)return Le();let t=parseInt(e,10);if(Number.isFinite(t)&&t>=320)return t}catch{}return Le()}function ze(e){if(typeof window>`u`)return e;let t=window.innerWidth,n=document.querySelector(`.platform > .side`)?.getBoundingClientRect(),r=n?n.right:Math.round(t*.3),i=Math.max(320,t-r-480);return Math.min(Math.max(e,320),i)}function Be({targetSelector:e=`.platform`}){let t=(0,A.useRef)(null),[n,r]=(0,A.useState)(()=>Re()),i=(0,A.useRef)(n);(0,A.useEffect)(()=>{let t=document.querySelector(e);!t||!(t instanceof HTMLElement)||(t.style.setProperty(`--artefact-px`,`${n}px`),i.current=n)},[n,e]);let a=(0,A.useCallback)(()=>{r(e=>{let t=ze(e);return t===e?e:t})},[]);(0,A.useEffect)(()=>(a(),window.addEventListener(`resize`,a),()=>window.removeEventListener(`resize`,a)),[a]);let o=e=>{e.preventDefault();let n=t.current;if(!n)return;n.setPointerCapture(e.pointerId),n.classList.add(`dragging`);let a=!1,o=e=>{a=!0,r(ze(Math.round(window.innerWidth-e.clientX)))},s=()=>{if(n.releasePointerCapture(e.pointerId),n.classList.remove(`dragging`),window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),!a)return;let t=i.current;try{window.localStorage.setItem(Ie,String(t))}catch{}console.info(`[admin-ui] artefact-resize px=${t}`)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s)},s=()=>{let e=Le();r(e);try{window.localStorage.removeItem(Ie)}catch{}console.info(`[admin-ui] artefact-resize px=${e}`)};return(0,j.jsx)(`div`,{ref:t,className:`art-resize-handle`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize artefact pane`,onPointerDown:o,onDoubleClick:s})}async function*Ve(e,t){let n=await fetch(e,{signal:t});if(n.status===202)throw Error(`transcript not yet on disk; reopen after first turn`);if(!n.ok)throw Error(`stream-failed status=${n.status}`);let r=n.body;if(!r)throw Error(`stream-failed no-body`);let i=r.getReader(),a=new TextDecoder(`utf-8`),o=``,s=0,c=new Promise(e=>{let n={value:void 0,done:!0};if(t.aborted){e(n);return}t.addEventListener(`abort`,()=>e(n),{once:!0})});try{for(;;){if(t.aborted)return;let{value:e,done:n}=await Promise.race([i.read(),c]);if(t.aborted)return;if(n)break;o+=a.decode(e,{stream:!0});let r=o.split(`
|
|
1
|
+
import{o as e,t}from"./chunk-DD-I1_y5.js";import{_ as n,a as r,d as i,f as a,g as o,l as s,m as c,p as l,r as u,u as d,v as f,y as p}from"./ChatInput-CJo_77bp.js";import{C as m,S as h,_ as g,a as _,b as v,c as y,d as b,f as x,i as S,l as C,m as w,o as T,p as ee,u as te,v as ne,w as E,x as D,y as O}from"./graph-labels-BBB5jsZk.js";import{a as re,i as ie,r as ae,t as oe}from"./page--bl5Y7ZI.js";import{i as se,n as ce,r as le}from"./page-CwmZ76U7.js";import{t as ue}from"./Checkbox-YrQovXpN.js";import{n as de,r as k,t as fe}from"./lib-Bnh57com.js";var pe=n(),A=e(p(),1);new Set(`image/jpeg,image/png,image/gif,image/webp,application/pdf,text/plain,text/markdown,text/csv,text/html,text/calendar,application/zip,application/x-zip-compressed,audio/ogg,audio/opus,audio/mp4,audio/mpeg,audio/webm,audio/wav,.opus,.ogg,.m4a,.mp3,.wav,.webm`.split(`,`).filter(e=>!e.startsWith(`.`)));function me(e){switch(e){case`expanded`:return!0;case`collapsed`:return!1;default:return}}var he=`admin-landing-redirected`,ge=`/graph`;function _e(e){return e.appState===`chat`&&!e.alreadyRedirected}function ve(){let[e,t]=(0,A.useState)(`loading`),[n,r]=(0,A.useState)(``),[i,a]=(0,A.useState)(``),[o,s]=(0,A.useState)(``),[c,l]=(0,A.useState)(!1),[u,d]=(0,A.useState)(!1),[f,p]=(0,A.useState)(!1),[m,h]=(0,A.useState)(!1),[g,_]=(0,A.useState)(!1),[v,y]=(0,A.useState)(null),[b,x]=(0,A.useState)(null),[S,C]=(0,A.useState)(void 0),[w,T]=(0,A.useState)(null),[ee,te]=(0,A.useState)(void 0),[ne,E]=(0,A.useState)(null),[D,O]=(0,A.useState)(null),[re,ie]=(0,A.useState)([]),[ae,oe]=(0,A.useState)(!1),[se,ce]=(0,A.useState)(void 0),le=(0,A.useRef)(void 0),[ue,de]=(0,A.useState)(!1);(0,A.useEffect)(()=>{typeof window>`u`||window.location.hostname.startsWith(`admin.`)&&fetch(`/api/remote-auth/status`).then(e=>e.ok?e.json():null).then(e=>{e?.configured&&de(!0)}).catch(()=>{})},[]);let k=(0,A.useRef)(null),fe=(0,A.useRef)(null);(0,A.useEffect)(()=>{async function e(){let e=null;try{e=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!e)return!1;try{let n=await fetch(`/api/admin/session?session_key=${encodeURIComponent(e)}`);if(n.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}return!1}if(!n.ok)return!1;let r=await n.json();y(r.session_key),O(r.sessionId??null),C(r.businessName),T(r.role??null),te(r.userName===void 0?null:r.userName),E(r.avatar??null);let i=me(r.thinkingView);return le.current=i,ce(i),t(`chat`),!0}catch(e){return console.error(`[admin] session restore failed:`,e),!1}}async function n(r=2){try{let i=await fetch(`/api/health`);if(!i.ok){if(r>0)return await new Promise(e=>setTimeout(e,1500)),n(r-1);console.error(`[admin] health check returned ${i.status} after retries`),t(`set-pin`);return}let a=await i.json();if(!a.pin_configured){t(`set-pin`);return}if(!a.claude_authenticated){t(`connect-claude`);return}if(await e())return;t(`enter-pin`)}catch(e){if(r>0)return await new Promise(e=>setTimeout(e,1500)),n(r-1);console.error(`[admin] health check failed:`,e),t(`set-pin`)}}n()},[]),(0,A.useEffect)(()=>{e===`chat`&&fetch(`/api/admin/claude-info`).then(e=>{if(e.ok)return e.json()}).then(e=>{e&&x(e)}).catch(()=>{})},[e]),(0,A.useEffect)(()=>{if(typeof window>`u`)return;let t=!1;try{t=sessionStorage.getItem(he)===`1`}catch{}if(_e({appState:e,alreadyRedirected:t})){try{sessionStorage.setItem(he,`1`)}catch{}console.info(`[admin-ui] landing-redirect target=${ge}`),window.location.replace(ge)}},[e]);let pe=(0,A.useRef)(null);(0,A.useEffect)(()=>{if(e!==`chat`)return;let n=setInterval(async()=>{try{let e=await fetch(`/api/health`);if(e.ok){let n=await e.json();if(n.auth_status===`dead`||n.auth_status===`missing`){t(`connect-claude`);return}}}catch{}if(v)try{let e=await fetch(`/api/admin/session?session_key=${encodeURIComponent(v)}`);if(e.status!==401)return;let t=(await e.clone().json().catch(()=>null))?.code??`unknown-401`;console.warn(`[admin-auth] outcome=heartbeat-detected-expiry code=${t}`),pe.current?.()}catch{}},300*1e3);return()=>clearInterval(n)},[e,v]),(0,A.useEffect)(()=>{e===`connect-claude`&&fetch(`/api/health`).then(e=>e.ok?e.json():null).then(e=>{e?.claude_authenticated&&t(`enter-pin`)}).catch(()=>{})},[e]);async function ve(e,n){d(!0);try{let i=await fetch(`/api/admin/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:e,...n?{accountId:n}:{}})});if(!i.ok){s((await i.json().catch(()=>({}))).error||`Invalid PIN`);return}let a=await i.json();if(a.accounts&&!a.session_key){console.log(`[admin] account picker shown: userId=${a.userId} accountCount=${a.accounts.length}`),ie(a.accounts),t(`account-picker`);return}y(a.session_key),O(a.sessionId??null),C(a.businessName),T(a.role??null),te(a.userName===void 0?null:a.userName),E(a.avatar??null);let o=me(a.thinkingView);if(le.current=o,ce(o),n)try{sessionStorage.setItem(`maxy-account-id`,n)}catch{}try{sessionStorage.setItem(`maxy-admin-session-key`,a.session_key)}catch{}r(``),t(`chat`)}catch(e){console.error(`[admin] connection error:`,e),s(`Could not connect.`)}finally{d(!1),oe(!1)}}let ye=(0,A.useCallback)(async e=>{if(e.preventDefault(),u)return;s(``);let a=i.trim();if(!a){s(`Please enter your name.`);return}if(n.length<4){s(`PIN must be at least 4 characters.`);return}let o=n;d(!0);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:o,name:a})});if(!e.ok){let n=await e.json().catch(()=>({}));if(e.status===409){console.log(`[admin] PIN already configured — re-checking health`);try{let e=await fetch(`/api/health`);if(e.ok){let r=await e.json();r.pin_configured&&r.claude_authenticated?t(`enter-pin`):r.pin_configured?t(`connect-claude`):s(n.error||`Failed to set PIN.`)}else t(`enter-pin`)}catch{t(`enter-pin`)}return}s(n.error||`Failed to set PIN.`);return}let n=await fetch(`/api/health`);if((n.ok?await n.json():null)?.claude_authenticated){await ve(o);return}r(``),t(`connect-claude`)}catch(e){console.error(`[admin] connection error:`,e),s(`Could not connect.`)}finally{d(!1)}},[n,u,i]),be=(0,A.useCallback)(async e=>{e.preventDefault(),s(``),await ve(n)},[n]),xe=(0,A.useCallback)(async()=>{_(!0);try{await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`logout`})}),y(null),T(null),te(void 0),E(null);try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}t(`connect-claude`)}finally{_(!1)}},[]),Se=(0,A.useCallback)(()=>{y(null),T(null),te(void 0),E(null);try{sessionStorage.removeItem(`maxy-admin-session-key`),sessionStorage.removeItem(`maxy-account-id`),sessionStorage.removeItem(he)}catch{}r(``),s(``),t(`enter-pin`)},[]);return(0,A.useEffect)(()=>{pe.current=Se},[Se]),{appState:e,setAppState:t,pin:n,setPin:r,operatorName:i,setOperatorName:a,pinError:o,setPinError:s,showPin:c,setShowPin:l,pinLoading:u,authPolling:f,setAuthPolling:p,authLoading:m,setAuthLoading:h,disconnecting:g,cacheKey:v,setCacheKey:y,claudeInfo:b,setClaudeInfo:x,businessName:S,role:w,userName:ee,userAvatar:ne,sessionId:D,setSessionId:O,accounts:re,accountPickerLoading:ae,expandAll:se,setExpandAll:ce,expandAllDefaultRef:le,remoteAuthEnabled:ue,pinInputRef:k,setPinFormRef:fe,handleSetPin:ye,handleLogin:be,handleAccountSelect:(0,A.useCallback)(async e=>{oe(!0),s(``),await ve(n,e)},[n]),handleDisconnect:xe,handleLogout:Se,handleChangePin:(0,A.useCallback)(async()=>{if(!n){s(`Enter your current PIN first.`);return}d(!0),s(``);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify({currentPin:n})});if(!e.ok){s((await e.json().catch(()=>({error:`Incorrect PIN.`}))).error||`Incorrect PIN.`);return}r(``),s(``),t(`set-pin`)}catch(e){console.error(`[admin-auth] change pin failed:`,e),s(e instanceof Error?e.message:String(e))}finally{d(!1)}},[n])}}var ye=o(`bold`,[[`path`,{d:`M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8`,key:`mg9rjx`}]]),be=o(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),xe=o(`ellipsis-vertical`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}]]),Se=o(`file-exclamation-point`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Ce=o(`italic`,[[`line`,{x1:`19`,x2:`10`,y1:`4`,y2:`4`,key:`15jd3p`}],[`line`,{x1:`14`,x2:`5`,y1:`20`,y2:`20`,key:`bu0au3`}],[`line`,{x1:`15`,x2:`9`,y1:`4`,y2:`20`,key:`uljnxc`}]]),we=o(`link-2`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]),Te=o(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),Ee=o(`message-square-plus`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M12 8v6`,key:`1ib9pf`}],[`path`,{d:`M9 11h6`,key:`1fldmi`}]]),De=o(`minimize-2`,[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]),Oe=o(`pin`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z`,key:`1nkz8b`}]]),ke=o(`square-arrow-down-left`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`m16 8-8 8`,key:`166keh`}],[`path`,{d:`M16 16H8V8`,key:`1w2ppm`}]]),Ae=o(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),j=d();function je({inputRef:e,value:t,onChange:n,onComplete:r,showPin:i,autoFocus:a}){let o=(0,A.useRef)([]);function s(e,r){r.key===`Backspace`?(r.preventDefault(),t[e]?n(t.slice(0,e)+t.slice(e+1)):e>0&&(n(t.slice(0,e-1)+t.slice(e)),o.current[e-1]?.focus())):r.key===`ArrowLeft`&&e>0?o.current[e-1]?.focus():r.key===`ArrowRight`&&e<5?o.current[e+1]?.focus():r.key===`Enter`&&(r.preventDefault(),r.currentTarget.form?.requestSubmit())}function c(e,i){let a=i.nativeEvent.data;if(!a||!/^\d$/.test(a))return;let s=t.split(``);for(s[e]=a;s.length<e;)s.push(``);let c=s.join(``).replace(/\D/g,``).slice(0,6);n(c),c.length===6?r?.(c):e<5&&o.current[e+1]?.focus()}function l(e){e.preventDefault();let t=e.clipboardData.getData(`text`).replace(/\D/g,``).slice(0,6);t&&(n(t),t.length===6?r?.(t):o.current[t.length]?.focus())}return(0,j.jsx)(`div`,{className:`pin-field`,children:Array.from({length:6}).map((n,r)=>(0,j.jsx)(`input`,{ref:t=>{o.current[r]=t,r===0&&e&&(e.current=t)},type:`text`,inputMode:`numeric`,className:`pin-box${t[r]?` pin-box-filled`:``}`,value:t[r]?i?t[r]:`•`:``,onKeyDown:e=>s(r,e),onInput:e=>c(r,e),onPaste:l,onFocus:e=>e.target.select(),autoFocus:a&&r===0,autoComplete:`off`,maxLength:1,"aria-label":`PIN digit ${r+1}`},r))})}function Me(e){let{pin:t,setPin:n,showPin:i,setShowPin:a,pinLoading:o,pinError:c,pinInputRef:l,setPinFormRef:u,onSubmit:d,operatorName:f,setOperatorName:p}=e;return(0,j.jsx)(`div`,{className:`connect-page`,children:(0,j.jsxs)(`div`,{className:`connect-content`,children:[(0,j.jsx)(`img`,{src:s,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,j.jsxs)(`h1`,{className:`connect-title`,children:[`Welcome to `,r.productName]}),(0,j.jsxs)(`p`,{className:`connect-subtitle`,children:[`Tell `,r.productName,` who you are, then choose a PIN.`]}),(0,j.jsxs)(`form`,{ref:u,onSubmit:d,className:`connect-pin-form`,children:[(0,j.jsxs)(`div`,{className:`pin-input-row`,children:[(0,j.jsx)(`input`,{type:`text`,className:`connect-name-input`,placeholder:`Your full name`,value:f,onChange:e=>p(e.target.value),autoComplete:`name`,autoFocus:!0,required:!0,"aria-label":`Your full name`}),(0,j.jsx)(`div`,{style:{width:38,flexShrink:0},"aria-hidden":`true`})]}),(0,j.jsxs)(`div`,{className:`pin-input-row`,children:[(0,j.jsx)(je,{inputRef:l,value:t,onChange:n,onComplete:()=>{},showPin:i}),(0,j.jsx)(k,{variant:`send`,type:`submit`,disabled:!t||!f.trim(),loading:o,"aria-label":`Set PIN`,children:(0,j.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,j.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,j.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,j.jsx)(ue,{checked:i,onChange:()=>a(e=>!e),label:`Show PIN`})]}),c&&(0,j.jsx)(`p`,{className:`admin-pin-error`,children:c})]})})}function Ne(e){let{pin:t,setPin:n,showPin:i,setShowPin:a,pinLoading:o,pinError:c,pinInputRef:l,onSubmit:u,onChangePin:d,remoteAuthEnabled:f,onSignOutRemote:p}=e;return(0,j.jsxs)(`div`,{className:`connect-page`,children:[f&&p&&(0,j.jsx)(`button`,{type:`button`,className:`connect-signout`,onClick:p,children:`Sign out`}),(0,j.jsxs)(`div`,{className:`connect-content`,children:[(0,j.jsx)(`img`,{src:s,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,j.jsx)(`h1`,{className:`connect-title`,children:r.productName}),(0,j.jsxs)(`form`,{onSubmit:u,className:`connect-pin-form`,children:[(0,j.jsxs)(`div`,{className:`pin-input-row`,children:[(0,j.jsx)(je,{inputRef:l,value:t,onChange:n,onComplete:()=>{},showPin:i,autoFocus:!0}),(0,j.jsx)(k,{variant:`send`,type:`submit`,disabled:!t,loading:o,children:(0,j.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,j.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,j.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,j.jsxs)(`div`,{className:`pin-options`,children:[(0,j.jsx)(ue,{checked:i,onChange:()=>a(e=>!e),label:`Show PIN`}),(0,j.jsx)(k,{type:`button`,variant:`ghost`,onClick:d,children:`Change PIN`})]})]}),c&&(0,j.jsx)(`p`,{className:`admin-pin-error`,children:c})]})]})}function Pe(e){let{accounts:t,loading:n,error:i,onSelect:a}=e;return(0,j.jsx)(`div`,{className:`connect-page`,children:(0,j.jsxs)(`div`,{className:`connect-content`,children:[(0,j.jsx)(`img`,{src:s,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,j.jsx)(`h1`,{className:`connect-title`,children:r.productName}),(0,j.jsx)(`p`,{className:`connect-subtitle`,children:`Select an account`}),(0,j.jsx)(`div`,{className:`account-picker-list`,children:t.map(e=>(0,j.jsxs)(`button`,{className:`account-picker-card`,onClick:()=>a(e.accountId),disabled:n,type:`button`,children:[(0,j.jsx)(`span`,{className:`account-picker-name`,children:e.businessName||e.accountId}),(0,j.jsx)(`span`,{className:`account-picker-role`,children:e.role}),n&&(0,j.jsx)(O,{className:`account-picker-spinner`,size:16})]},e.accountId))}),i&&(0,j.jsx)(`p`,{className:`admin-pin-error`,children:i})]})})}function Fe(e){let{authPolling:t,setAuthPolling:n,authLoading:i,setAuthLoading:a,pinError:o,setPinError:c,setAppState:l}=e,[u,d]=(0,A.useState)(!1),[f,p]=(0,A.useState)(!1);async function m(){p(!0),c(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`launch-browser`})})).json();e.launched?d(!0):e.error&&c(e.error)}catch(e){console.error(`[admin] browser launch error:`,e),c(`Could not launch browser.`)}p(!1)}async function h(){a(!0),c(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`})).json();if(e.started){n(!0),d(!0),a(!1);for(let e=0;e<120;e++)if(await new Promise(e=>setTimeout(e,2e3)),(await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`wait`})})).json()).authenticated){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),l(`enter-pin`);return}c(`Timed out waiting for sign-in. Try again.`),n(!1)}else e.error&&c(e.error)}catch(e){console.error(`[admin] auth flow error:`,e),c(`Could not start auth flow.`)}a(!1)}async function g(){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),n(!1),c(``)}return t||u?(0,j.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,height:`100dvh`,overflow:`auto`},children:[(0,j.jsxs)(`header`,{className:`chat-header`,style:{paddingBottom:`12px`,flexShrink:0,position:`relative`,maxWidth:`680px`,width:`100%`,margin:`0 auto`,padding:`24px 20px 12px`},children:[t?(0,j.jsx)(`button`,{onClick:g,style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Cancel`,children:`✕`}):(0,j.jsx)(`button`,{onClick:()=>d(!1),style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Close browser`,children:`✕`}),(0,j.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`chat-logo`}),(0,j.jsx)(`h1`,{className:`chat-tagline`,children:`Connect Claude`}),(0,j.jsx)(`p`,{className:`chat-intro`,children:t?`Sign in and authorize in the browser below.`:`Open your email or prepare your accounts, then sign in.`}),!t&&(0,j.jsx)(`div`,{style:{marginTop:`12px`},children:(0,j.jsx)(k,{variant:`primary`,onClick:h,disabled:i,children:i?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`})})]}),(0,j.jsx)(`div`,{style:{flex:1,display:`flex`,flexDirection:`column`,minHeight:0,gap:`10px`,padding:`0 0 16px`},children:(0,j.jsx)(`iframe`,{src:`/vnc-viewer.html`,style:{flex:1,width:`100%`,minHeight:0,border:`none`,background:`#111`,display:`block`},title:`Claude Sign-in`})}),o&&(0,j.jsx)(`p`,{className:`admin-pin-error`,style:{textAlign:`center`,padding:`0 20px 16px`},children:o})]}):(0,j.jsx)(`div`,{className:`connect-page`,children:(0,j.jsxs)(`div`,{className:`connect-content`,children:[(0,j.jsxs)(`div`,{className:`connect-logos`,children:[(0,j.jsx)(`div`,{className:`connect-logo-wrap`,children:(0,j.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`connect-logo`})}),(0,j.jsx)(`svg`,{className:`connect-arrow`,viewBox:`0 0 48 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:(0,j.jsx)(`path`,{d:`M0 12h44m0 0l-8-8m8 8l-8 8`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`})}),(0,j.jsxs)(`div`,{className:`connect-logo-wrap`,children:[(0,j.jsx)(`img`,{src:s,alt:r.productName,className:`connect-logo connect-logo--maxy`}),!r.logoContainsName&&(0,j.jsx)(`span`,{className:`connect-logo-label`,children:r.productName})]})]}),(0,j.jsxs)(`h1`,{className:`connect-title`,children:[`Connect Claude to power `,r.productName]}),(0,j.jsx)(`p`,{className:`connect-subtitle`,children:`Sign in with your Anthropic account to get started.`}),(0,j.jsx)(k,{variant:`primary`,onClick:h,disabled:i,children:i?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`}),(0,j.jsx)(`p`,{style:{marginTop:`6px`,fontSize:`11px`,color:`#999`,maxWidth:`300px`,textAlign:`center`,lineHeight:`1.4`},children:`First time? You may need to sign into your email and Anthropic account in the browser before connecting.`}),(0,j.jsx)(`button`,{onClick:m,disabled:f,style:{marginTop:`12px`,background:`none`,border:`none`,color:`var(--color-primary, #666)`,fontSize:`13px`,cursor:`pointer`,textDecoration:`underline`,textUnderlineOffset:`3px`},children:f?`Launching…`:`Open browser first`}),o&&(0,j.jsx)(`p`,{className:`admin-pin-error`,children:o})]})})}var Ie=`maxy-shell-artefact-px`;function Le(){if(typeof window>`u`)return 320;let e=window.innerWidth,t=document.querySelector(`.platform > .side`)?.getBoundingClientRect(),n=t?t.right:Math.round(e*.3);return ze(Math.round((e-n)*(2/3)))}function Re(){if(typeof window>`u`)return 320;try{let e=window.localStorage.getItem(Ie);if(!e)return Le();let t=parseInt(e,10);if(Number.isFinite(t)&&t>=320)return t}catch{}return Le()}function ze(e){if(typeof window>`u`)return e;let t=window.innerWidth,n=document.querySelector(`.platform > .side`)?.getBoundingClientRect(),r=n?n.right:Math.round(t*.3),i=Math.max(320,t-r-480);return Math.min(Math.max(e,320),i)}function Be({targetSelector:e=`.platform`}){let t=(0,A.useRef)(null),[n,r]=(0,A.useState)(()=>Re()),i=(0,A.useRef)(n);(0,A.useEffect)(()=>{let t=document.querySelector(e);!t||!(t instanceof HTMLElement)||(t.style.setProperty(`--artefact-px`,`${n}px`),i.current=n)},[n,e]);let a=(0,A.useCallback)(()=>{r(e=>{let t=ze(e);return t===e?e:t})},[]);(0,A.useEffect)(()=>(a(),window.addEventListener(`resize`,a),()=>window.removeEventListener(`resize`,a)),[a]);let o=e=>{e.preventDefault();let n=t.current;if(!n)return;n.setPointerCapture(e.pointerId),n.classList.add(`dragging`);let a=!1,o=e=>{a=!0,r(ze(Math.round(window.innerWidth-e.clientX)))},s=()=>{if(n.releasePointerCapture(e.pointerId),n.classList.remove(`dragging`),window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),!a)return;let t=i.current;try{window.localStorage.setItem(Ie,String(t))}catch{}console.info(`[admin-ui] artefact-resize px=${t}`)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s)},s=()=>{let e=Le();r(e);try{window.localStorage.removeItem(Ie)}catch{}console.info(`[admin-ui] artefact-resize px=${e}`)};return(0,j.jsx)(`div`,{ref:t,className:`art-resize-handle`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize artefact pane`,onPointerDown:o,onDoubleClick:s})}async function*Ve(e,t){let n=await fetch(e,{signal:t});if(n.status===202)throw Error(`transcript not yet on disk; reopen after first turn`);if(!n.ok)throw Error(`stream-failed status=${n.status}`);let r=n.body;if(!r)throw Error(`stream-failed no-body`);let i=r.getReader(),a=new TextDecoder(`utf-8`),o=``,s=0,c=new Promise(e=>{let n={value:void 0,done:!0};if(t.aborted){e(n);return}t.addEventListener(`abort`,()=>e(n),{once:!0})});try{for(;;){if(t.aborted)return;let{value:e,done:n}=await Promise.race([i.read(),c]);if(t.aborted)return;if(n)break;o+=a.decode(e,{stream:!0});let r=o.split(`
|
|
2
2
|
`);o=r.pop()??``;for(let e of r)s++,yield He(e,s)}let e=o+a.decode();e.length>0&&(s++,yield He(e,s))}finally{try{await i.cancel()}catch{}}}function He(e,t){try{return{kind:`json`,raw:e,parsed:JSON.parse(e),lineNumber:t}}catch(n){return{kind:`parse-error`,raw:e,lineNumber:t,error:n instanceof Error?n.message:String(n)}}}var Ue=28,We=240,Ge=16,Ke=8;function qe(e,t){switch(t.type){case`append`:{let n=e.lines.length>=5e4?[...e.lines.slice(1),t.line]:[...e.lines,t.line],r=e.lines.length>=5e4?e.droppedCount+1:e.droppedCount;return{...e,lines:n,droppedCount:r}}case`complete`:return{...e,streamStatus:`complete`};case`error`:return{...e,streamStatus:`error`,errorMessage:t.message}}}var Je={lines:[],droppedCount:0,streamStatus:`streaming`,errorMessage:null};function Ye(e){if(e.kind===`parse-error`)return{label:`parse-error`,tone:`error`};let t=e.parsed;if(!t||typeof t!=`object`)return{label:`raw`,tone:`raw`};let n=typeof t.type==`string`?t.type:null,r=typeof t.role==`string`?t.role:null;return n===`user`||r===`user`?{label:`user`,tone:`user`}:n===`assistant`||r===`assistant`?{label:`assistant`,tone:`assistant`}:n===`tool_use`?{label:`tool_use`,tone:`tool`}:n===`tool_result`?{label:`tool_result`,tone:`tool`}:n===`system`?{label:`system`,tone:`system`}:{label:`raw`,tone:`raw`}}function Xe(e,t,n){let r=We-Ue,i=0,a=Math.max(0,e-1);for(;i<a;){let e=i+a+1>>1,o=0;for(;o<t.length&&t[o]<e;)o++;e*Ue+o*r<=n?i=e:a=e-1}return i}function Ze(e){let{sessionId:t,cacheKey:n,displayName:r,liveStatus:i,onClose:a}=e,[o,s]=(0,A.useReducer)(qe,Je),[l,d]=(0,A.useState)(``),[f,p]=(0,A.useState)(()=>new Set),[m,h]=(0,A.useState)(0),[g,_]=(0,A.useState)(0),v=(0,A.useRef)(null),y=(0,A.useRef)(Date.now()),b=(0,A.useRef)(!0),S=(0,A.useRef)(0);(0,A.useEffect)(()=>(console.info(`[admin-ui] jsonl-viewer-open sessionId=${t.slice(0,8)} alive=${i===`alive`}`),()=>{let e=Date.now()-y.current;console.info(`[admin-ui] jsonl-viewer-close sessionId=${t.slice(0,8)} reason=unmount linesRendered=${S.current} ms=${e}`)}),[]),(0,A.useEffect)(()=>{let e=new AbortController,r=`/api/admin/claude-sessions/${encodeURIComponent(t)}/log?session_key=${encodeURIComponent(n)}&follow=1`,i=0;return(async()=>{try{for await(let n of Ve(r,e.signal))n.kind===`parse-error`&&i<100&&(i++,console.warn(`[admin-ui] jsonl-viewer parse-error sessionId=${t.slice(0,8)} lineNumber=${n.lineNumber}`)),s({type:`append`,line:n});e.signal.aborted||s({type:`complete`})}catch(t){if(e.signal.aborted)return;s({type:`error`,message:t instanceof Error?t.message:String(t)})}})(),()=>e.abort()},[t,n]),(0,A.useEffect)(()=>{let e=e=>{e.key===`Escape`&&a()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[a]);let C=(0,A.useMemo)(()=>{if(l.length===0)return o.lines;let e=l.toLowerCase();return o.lines.filter(t=>(t.kind===`json`?JSON.stringify(t.parsed):t.raw).toLowerCase().includes(e))},[o.lines,l]),w=(0,A.useMemo)(()=>[...f].sort((e,t)=>e-t),[f]),T=C.length*Ue+Math.min(w.length,C.length)*(We-Ue),ee=Math.max(0,Xe(C.length,w,m)-Ke),te=g===0?Math.min(C.length,30):Math.ceil(g/Ue)+2*Ke,ne=Math.min(C.length,ee+te);(0,A.useLayoutEffect)(()=>{let e=v.current;e&&b.current&&(e.scrollTop=e.scrollHeight)},[C.length,T]);let E=(0,A.useCallback)(e=>{let t=e.currentTarget;h(t.scrollTop),_(t.clientHeight),b.current=t.scrollHeight-t.scrollTop-t.clientHeight<Ge},[]),D=(0,A.useCallback)(e=>{p(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),O=(0,A.useCallback)(async e=>{await u(e)},[]),re=(0,A.useCallback)(e=>{let t=0;for(;t<w.length&&w[t]<e;)t++;return e*Ue+t*(We-Ue)},[w]),ie=Qe(o,i),ae=C.length===o.lines.length?0:o.lines.length-C.length;return S.current=o.lines.length,(0,j.jsx)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":`JSONL viewer`,className:`modal-overlay`,onClick:e=>{e.target===e.currentTarget&&a()},children:(0,j.jsxs)(`div`,{className:`modal-card jsonl-viewer-card`,children:[(0,j.jsxs)(`header`,{className:`jsonl-viewer-header`,children:[(0,j.jsxs)(`div`,{className:`jsonl-viewer-title`,children:[(0,j.jsx)(`strong`,{children:r??`session`}),(0,j.jsx)(`span`,{"data-mono":!0,className:`jsonl-viewer-sid`,children:t.slice(0,8)})]}),(0,j.jsx)(`input`,{type:`text`,className:`jsonl-viewer-search`,placeholder:`search…`,value:l,onChange:e=>d(e.target.value),"aria-label":`Filter visible lines`}),(0,j.jsxs)(`div`,{className:`jsonl-viewer-counts`,children:[(0,j.jsxs)(`span`,{children:[C.length.toLocaleString(),` lines`]}),ae>0&&(0,j.jsxs)(`span`,{children:[` · `,ae.toLocaleString(),` hidden`]}),o.droppedCount>0&&(0,j.jsxs)(`span`,{children:[` · `,o.droppedCount.toLocaleString(),` older dropped`]})]}),(0,j.jsx)(`button`,{type:`button`,className:`action-btn`,"aria-label":`Close JSONL viewer`,onClick:a,children:(0,j.jsx)(x,{size:14})})]}),(0,j.jsx)(`div`,{ref:v,className:`jsonl-viewer-scroll`,onScroll:E,children:(0,j.jsx)(`div`,{className:`jsonl-viewer-inner`,style:{height:T},children:C.slice(ee,ne).map((e,t)=>{let n=ee+t,r=f.has(n),i=re(n),a=Ye(e),o={position:`absolute`,top:i,left:0,right:0,height:r?We:Ue},s=(e.kind,e.raw.slice(0,200));return(0,j.jsxs)(`div`,{className:`jsonl-viewer-row`,"data-expanded":r||void 0,"data-tone":a.tone,style:o,children:[(0,j.jsxs)(`button`,{type:`button`,className:`jsonl-viewer-row__main`,onClick:()=>D(n),"aria-expanded":r,children:[(0,j.jsx)(`span`,{className:`jsonl-viewer-badge`,"data-tone":a.tone,children:a.label}),(0,j.jsx)(`span`,{className:`jsonl-viewer-line-no`,"data-mono":!0,children:e.lineNumber}),r?(0,j.jsxs)(`pre`,{className:`jsonl-viewer-pre`,"data-mono":!0,children:[e.kind===`json`?$e(e.parsed):e.raw,e.kind===`parse-error`&&(0,j.jsx)(`span`,{className:`jsonl-viewer-error`,children:`\n\n[parse-error] ${e.error}`})]}):(0,j.jsx)(`span`,{className:`jsonl-viewer-preview`,"data-mono":!0,children:s})]}),(0,j.jsx)(`button`,{type:`button`,className:`jsonl-viewer-copy`,title:`Copy raw line`,onClick:()=>void O(e.raw),children:(0,j.jsx)(c,{size:12})})]},`${e.lineNumber}-${n}`)})})}),(0,j.jsx)(`footer`,{className:`jsonl-viewer-footer`,children:(0,j.jsx)(`span`,{className:`jsonl-viewer-status`,"data-tone":ie.tone,children:ie.label})})]})})}function Qe(e,t){return e.streamStatus===`error`?{label:`error: ${e.errorMessage??`stream failed`}`,tone:`error`}:t===`alive`?{label:`streaming`,tone:`streaming`}:{label:`complete`,tone:`complete`}}function $e(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function et(e){return{pid:e.pid,url:e.url,startedAt:e.startedAt,accountId:e.senderId,role:e.role,channel:e.channel,jsonlPath:e.jsonlPath,status:e.status,archived:e.archived===!0,displayName:e.displayName,titleSource:e.titleSource===`user`||e.titleSource===`ai`?e.titleSource:null,lastMessageAt:e.lastMessageAt,turnCount:e.turnCount,capped:e.capped,sizeBytes:e.sizeBytes,sessionId:e.sessionId,specialist:e.specialist,model:e.model,permissionMode:typeof e.permissionMode==`string`?e.permissionMode:null,effectivePermissionMode:typeof e.effectivePermissionMode==`string`?e.effectivePermissionMode:null}}function tt(e){if(!e)return`—`;let t=Date.parse(e);if(Number.isNaN(t))return e;let n=Date.now()-t,r=Math.round(n/1e3);if(r<60)return`${r}s ago`;let i=Math.round(r/60);if(i<60)return`${i}m ago`;let a=Math.round(i/60);return a<24?`${a}h ago`:`${Math.round(a/24)}d ago`}function nt(e){return e==null?`—`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function rt(e,t,n){let r=e.permissionMode,i=e.effectivePermissionMode;return r===null&&i===null?`—`:i===null||i===r?r??i??`—`:(n.current!==t&&(n.current=t,console.warn(`[admin-ui] permission-mode-downgraded sessionId=${t.slice(0,8)} requested=${r??`null`} effective=${i}`)),(0,j.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:6},children:[(0,j.jsx)(Ae,{size:14,"aria-label":`Permission mode downgraded`,style:{color:`var(--text-warn, #b8860b)`}}),(0,j.jsx)(`span`,{children:i}),(0,j.jsxs)(`span`,{className:`text-tertiary`,children:[`(requested: `,r??`null`,`, downgraded)`]})]}))}function it({sessionId:e,cacheKey:t,onClose:n,recentsActions:o,liveRow:s,onSessionNotFound:d}){let[f,p]=(0,A.useState)(null),[g,_]=(0,A.useState)(!0),[b,S]=(0,A.useState)(null),[w,T]=(0,A.useState)(!1),[D,ie]=(0,A.useState)(null),[ae,oe]=(0,A.useState)(null),[se,ce]=(0,A.useState)(null),[le,ue]=(0,A.useState)(null),[de,k]=(0,A.useState)(!1),[fe,pe]=(0,A.useState)(!1),me=(0,A.useRef)(null),he=te(t,o,`pane`),{isPinned:ge,togglePin:_e}=y(r.hostname),[ve,ye]=(0,A.useState)(!1),[be,Se]=(0,A.useState)(``),Ce=(0,A.useRef)(s?.status),we=s?.status,Te=(0,A.useRef)(null),Ee=(0,A.useCallback)(async()=>{_(!0),S(null);try{let n=await fetch(`/api/admin/claude-sessions/${encodeURIComponent(e)}/meta?session_key=${encodeURIComponent(t)}`);if(n.status===404){let t=Ce.current??`alive`;console.info(`[admin-ui] sidebar-meta-pane-reconcile sessionId=${e.slice(0,8)} from=${t} to=gone trigger=404`),T(!0),p(null),d&&d(e);return}if(!n.ok){let e=await n.text().catch(()=>``);throw Error(`meta returned ${n.status} ${e.slice(0,200)}`)}p(et(await n.json())),T(!1)}catch(e){S(e instanceof Error?e.message:String(e)),console.error(`[admin-ui] sidebar-meta-pane fetch failed:`,e)}finally{_(!1)}},[e,t,d]);(0,A.useEffect)(()=>{console.info(`[admin-ui] sidebar-meta-pane sessionId=${e.slice(0,8)}`),Ee()},[Ee,e]),(0,A.useEffect)(()=>{let t=Ce.current;if(Ce.current=we,!(t===void 0&&we!==void 0)&&t!==we){if(t===`alive`&&we===`ended`){console.info(`[admin-ui] sidebar-meta-pane-reconcile sessionId=${e.slice(0,8)} from=alive to=ended trigger=list-flip`),Ee();return}if(t!==void 0&&we===void 0){console.info(`[admin-ui] sidebar-meta-pane-reconcile sessionId=${e.slice(0,8)} from=${t} to=gone trigger=list-flip`),Ee();return}}},[we,Ee,e]),(0,A.useEffect)(()=>{if(!de)return;let e=e=>{me.current&&!me.current.contains(e.target)&&k(!1)},t=e=>{e.key===`Escape`&&k(!1)};return document.addEventListener(`mousedown`,e),window.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),window.removeEventListener(`keydown`,t)}},[de]);let De=(0,A.useCallback)(async(e,t)=>{let n=await u(t);ie(n?`Copied ${e}`:`Copy failed`),n&&oe(e),window.setTimeout(()=>{ie(null),oe(t=>t===e?null:t)},1500)},[]),ke=(0,A.useCallback)(()=>{let n=`/api/admin/claude-sessions/${encodeURIComponent(e)}/log?session_key=${encodeURIComponent(t)}&download=1`;try{let t=document.createElement(`a`);t.href=n,t.download=``,t.rel=`noopener`,document.body.appendChild(t),t.click(),document.body.removeChild(t),console.info(`[admin-ui] pane-download-jsonl sessionId=${e.slice(0,8)} outcome=initiated`)}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`[admin-ui] pane-download-jsonl sessionId=${e.slice(0,8)} outcome=error reason=${n}`),ce(`Download failed: ${n}`)}},[e,t]),Ae=(0,A.useCallback)(async(e,t,r)=>{ce(null);let i=e===`resume`?await he.resume(t):e===`end`?await he.end(t):e===`purge`?await he.purge(t):e===`archive`?await he.archive(t):await he.unarchive(t);if(!i.ok){ce(i.error??`action failed`);return}r&&n()},[he,n]);if(w&&s===void 0)return(0,j.jsxs)(`main`,{className:`session-meta-pane`,style:{padding:24,display:`flex`,flexDirection:`column`,gap:12},children:[(0,j.jsx)(`p`,{style:{margin:0,fontSize:13,color:`var(--text-secondary)`},children:`Session ended without a transcript. Close this pane.`}),(0,j.jsx)(`div`,{children:(0,j.jsxs)(`button`,{type:`button`,className:`action-btn`,onClick:n,children:[(0,j.jsx)(x,{size:14}),` Close`]})})]});if(g&&!f)return(0,j.jsx)(`main`,{className:`session-meta-pane`,style:{padding:24},children:(0,j.jsx)(O,{size:16,className:`spinning`})});if(b&&!f)return(0,j.jsxs)(`main`,{className:`session-meta-pane`,style:{padding:24},children:[(0,j.jsx)(`p`,{style:{color:`var(--text-tertiary)`},children:b}),(0,j.jsx)(`button`,{type:`button`,className:`action-btn`,onClick:()=>void Ee(),children:`Retry`})]});if(!f)return null;let je=f.status===`alive`,Me=ge(e),Ne=he.inFlight,Pe=f.url?f.url.match(/session_[A-Za-z0-9]+/)?.[0]??null:null;return(0,j.jsxs)(`main`,{className:`session-meta-pane`,style:{padding:24,display:`flex`,flexDirection:`column`,gap:20,overflowY:`auto`},children:[(0,j.jsxs)(`header`,{style:{display:`flex`,alignItems:`center`,gap:12},children:[ve?(0,j.jsx)(`input`,{type:`text`,value:be,autoFocus:!0,maxLength:200,onChange:e=>Se(e.target.value),onKeyDown:async t=>{if(t.key===`Enter`){t.preventDefault();let n=be.trim();if(n.length===0||!C(n)){ye(!1);return}if(n===(f.displayName??``)){ye(!1);return}let r=await he.rename(e,n);r.ok?p(e=>e&&{...e,displayName:n,titleSource:`user`}):console.error(`[admin-ui] pane-rename failed: ${r.error}`),ye(!1)}else t.key===`Escape`&&(t.preventDefault(),ye(!1))},onBlur:async()=>{let t=be.trim();if(t.length===0||!C(t)||t===(f.displayName??``)){ye(!1);return}let n=await he.rename(e,t);n.ok?p(e=>e&&{...e,displayName:t,titleSource:`user`}):console.error(`[admin-ui] pane-rename failed: ${n.error}`),ye(!1)},"aria-label":`Rename session`,style:{fontSize:22,fontWeight:600,flex:1,background:`transparent`,border:`1px solid var(--border, #888)`,borderRadius:4,padding:`2px 6px`,color:`inherit`,font:`inherit`,minWidth:0}}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`h2`,{style:{fontSize:22,fontWeight:600,margin:0,flex:1},children:f.displayName??(0,j.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`(unnamed)`})}),f.titleSource&&(0,j.jsx)(`span`,{style:{fontSize:11,color:`var(--text-tertiary)`},children:f.titleSource===`user`?`set by you`:`set by Claude`}),(0,j.jsx)(`button`,{type:`button`,className:`icon-btn`,"aria-label":`Rename session`,title:`Rename`,onClick:()=>{Se(f.displayName??``),ye(!0)},children:(0,j.jsx)(ne,{size:16})})]}),(0,j.jsx)(`button`,{type:`button`,className:`icon-btn`,"aria-label":`Close pane`,onClick:n,children:(0,j.jsx)(x,{size:18})})]}),(0,j.jsx)(`section`,{children:(0,j.jsxs)(`dl`,{className:`meta-dl`,children:[(0,j.jsx)(`dt`,{children:`Status`}),(0,j.jsx)(`dd`,{children:je?`alive · pid ${f.pid??`?`}`:`ended`}),(0,j.jsx)(`dt`,{children:`Agent`}),(0,j.jsx)(`dd`,{children:f.specialist??`admin`}),(0,j.jsx)(`dt`,{title:`Permission mode. The operator's spawn-time choice is the requested mode; the binary may downgrade auto to default at runtime if the auto-mode opt-in isn't satisfied.`,children:`Mode`}),(0,j.jsx)(`dd`,{children:rt(f,e,Te)}),(0,j.jsx)(`dt`,{title:`Model id from the most recent assistant turn in the JSONL tail. Null until the first assistant turn flushes; reflects the latest model used (claude can downgrade mid-session).`,children:`Model`}),(0,j.jsx)(`dd`,{children:f.model??`—`}),(0,j.jsx)(`dt`,{title:`Claude's session — one identity, two phases: bridge suffix from claude.ai/code/<session_xxx> and the JSONL basename UUID on disk. Both reconcile to the same row.`,children:`sessionId`}),(0,j.jsxs)(`dd`,{"data-mono":!0,children:[(0,j.jsx)(`span`,{children:e}),(0,j.jsx)(`button`,{type:`button`,className:`icon-btn`,"aria-label":`Copy sessionId`,onClick:()=>void De(`sessionId`,e),children:ae===`sessionId`?(0,j.jsx)(h,{size:12}):(0,j.jsx)(c,{size:12})})]}),(0,j.jsx)(`dt`,{children:`Started at`}),(0,j.jsxs)(`dd`,{children:[f.startedAt,` `,(0,j.jsxs)(`span`,{className:`text-tertiary`,children:[`(`,tt(f.startedAt),`)`]})]}),(0,j.jsx)(`dt`,{children:`Last message`}),(0,j.jsx)(`dd`,{children:f.lastMessageAt?(0,j.jsxs)(j.Fragment,{children:[f.lastMessageAt,` `,(0,j.jsxs)(`span`,{className:`text-tertiary`,children:[`(`,tt(f.lastMessageAt),`)`]})]}):`—`}),(0,j.jsx)(`dt`,{children:`Turns`}),(0,j.jsxs)(`dd`,{children:[f.turnCount,f.capped?(0,j.jsx)(`span`,{className:`text-tertiary`,children:` (≥, JSONL exceeds tail-read cap)`}):null]}),(0,j.jsx)(`dt`,{children:`JSONL size`}),(0,j.jsx)(`dd`,{children:nt(f.sizeBytes)}),(0,j.jsx)(`dt`,{children:`JSONL path`}),(0,j.jsxs)(`dd`,{"data-mono":!0,children:[(0,j.jsx)(`span`,{children:f.jsonlPath??`—`}),f.jsonlPath&&(0,j.jsx)(`button`,{type:`button`,className:`icon-btn`,"aria-label":`Copy JSONL path`,onClick:()=>void De(`path`,f.jsonlPath),children:ae===`path`?(0,j.jsx)(h,{size:12}):(0,j.jsx)(c,{size:12})})]}),(0,j.jsx)(`dt`,{children:`Session URL`}),(0,j.jsxs)(`dd`,{"data-mono":!0,children:[(0,j.jsx)(`span`,{children:f.url??`—`}),f.url&&(0,j.jsx)(`button`,{type:`button`,className:`icon-btn`,"aria-label":`Copy URL`,onClick:()=>void De(`URL`,f.url),children:ae===`URL`?(0,j.jsx)(h,{size:12}):(0,j.jsx)(c,{size:12})})]}),(0,j.jsx)(`dt`,{title:"Cross-surface identifier — the `session_xxx` segment from the claude.ai/code URL. Operators use this to map a browser URL back to a row.",children:`Bridge id`}),(0,j.jsxs)(`dd`,{"data-mono":!0,children:[(0,j.jsx)(`span`,{children:Pe??`—`}),Pe&&(0,j.jsx)(`button`,{type:`button`,className:`icon-btn`,"aria-label":`Copy Bridge id`,onClick:()=>void De(`Bridge id`,Pe),children:ae===`Bridge id`?(0,j.jsx)(h,{size:12}):(0,j.jsx)(c,{size:12})})]}),(0,j.jsx)(`dt`,{children:`Channel`}),(0,j.jsx)(`dd`,{children:f.channel??`—`}),(0,j.jsx)(`dt`,{children:`Role`}),(0,j.jsx)(`dd`,{children:f.role??`—`}),(0,j.jsx)(`dt`,{title:"Account / workspace UUID. Manager API still calls this `senderId` on the wire (channel-agnostic field).",children:`accountId`}),(0,j.jsx)(`dd`,{"data-mono":!0,children:(0,j.jsx)(`span`,{children:f.accountId||`—`})})]})}),(()=>{let t=[];return f.url&&t.push((0,j.jsxs)(`button`,{type:`button`,className:`action-btn`,onClick:()=>window.open(f.url,`_blank`,`noopener,noreferrer`),children:[(0,j.jsx)(v,{size:14}),` Open in new tab`]},`open-tab`)),f.jsonlPath&&t.push((0,j.jsxs)(`button`,{type:`button`,className:`action-btn`,title:`Download the JSONL transcript file`,onClick:()=>ke(),children:[(0,j.jsx)(l,{size:14}),` Download JSONL`]},`download-jsonl`),(0,j.jsxs)(`button`,{type:`button`,className:`action-btn`,title:`View the JSONL transcript in-app`,onClick:()=>pe(!0),children:[(0,j.jsx)(re,{size:14}),` View JSONL`]},`view-jsonl`)),je||t.push((0,j.jsxs)(`button`,{type:`button`,className:`action-btn`,"data-variant":`primary`,disabled:Ne===`resume`,onClick:()=>void Ae(`resume`,e,!1),children:[Ne===`resume`?(0,j.jsx)(O,{size:14,className:`spinning`}):(0,j.jsx)(a,{size:14}),` Resume`]},`resume`)),t.push((0,j.jsxs)(`button`,{type:`button`,className:`action-btn`,"data-active":Me?`true`:void 0,onClick:()=>_e(e),children:[(0,j.jsx)(Oe,{size:14}),` `,Me?`Unpin`:`Pin`]},`pin`),f.archived?(0,j.jsxs)(`button`,{type:`button`,className:`action-btn`,disabled:Ne===`unarchive`,onClick:()=>void Ae(`unarchive`,e,!0),children:[Ne===`unarchive`?(0,j.jsx)(O,{size:14,className:`spinning`}):(0,j.jsx)(E,{size:14}),` Unarchive`]},`archive`):(0,j.jsxs)(`button`,{type:`button`,className:`action-btn`,disabled:Ne===`archive`,onClick:()=>{je?ue({action:`archive-alive`,sessionId:e,displayName:f.displayName}):Ae(`archive`,e,!0)},children:[Ne===`archive`?(0,j.jsx)(O,{size:14,className:`spinning`}):(0,j.jsx)(m,{size:14}),` Archive`]},`archive`)),t.push(je?(0,j.jsxs)(`button`,{type:`button`,className:`action-btn`,"data-variant":`danger`,disabled:Ne===`end`,onClick:()=>ue({action:`end`,sessionId:e,displayName:f.displayName}),children:[(0,j.jsx)(ee,{size:14}),` End session`]},`end`):(0,j.jsxs)(`button`,{type:`button`,className:`action-btn`,"data-variant":`danger`,disabled:Ne===`purge`,onClick:()=>ue({action:`purge`,sessionId:e,displayName:f.displayName}),children:[(0,j.jsx)(i,{size:14}),` Purge JSONL`]},`purge`)),(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`section`,{className:`action-bar`,children:t}),(0,j.jsxs)(`section`,{className:`session-actions-overflow`,ref:me,children:[(0,j.jsx)(`button`,{type:`button`,className:`session-actions-overflow__trigger`,"aria-label":`Actions`,"aria-haspopup":`menu`,"aria-expanded":de,onClick:()=>{k(t=>{let n=!t;return n&&console.info(`[admin-ui] pane-actions-overflow-open sessionId=${e.slice(0,8)}`),n})},children:(0,j.jsx)(xe,{size:14})}),de&&(0,j.jsx)(`div`,{className:`overflow-popover`,role:`menu`,onClick:()=>k(!1),children:t})]})]})})(),D&&(0,j.jsx)(`div`,{style:{color:`var(--text-tertiary)`,fontSize:12},children:D}),se&&(0,j.jsx)(ot,{message:se,onClose:()=>ce(null)}),fe&&f.jsonlPath&&(0,j.jsx)(Ze,{sessionId:e,cacheKey:t,displayName:f.displayName,liveStatus:f.status,onClose:()=>pe(!1)}),b&&(0,j.jsx)(`div`,{style:{color:`var(--text-tertiary)`,fontSize:12},children:b}),le&&(0,j.jsx)(at,{confirm:le,busy:le.action===`archive-alive`?Ne===`end`||Ne===`archive`:Ne===le.action,onCancel:()=>ue(null),onConfirm:async()=>{if(le.action===`archive-alive`){ce(null);let e=await he.end(le.sessionId);if(!e.ok){ce(e.error??`failed to end session`),ue(null);return}let t=await he.archive(le.sessionId);if(!t.ok){ce(t.error??`failed to archive session`),ue(null);return}ue(null),n();return}await Ae(le.action,le.sessionId,le.action===`purge`),ue(null)}})]})}function at({confirm:e,busy:t,onCancel:n,onConfirm:r}){let i,a,o,s=e.displayName??e.sessionId.slice(0,8);switch(e.action){case`end`:i=`End live session?`,a=`This kills the PTY for ${s}. The JSONL is kept on disk and can be resumed later.`,o=`End session`;break;case`purge`:i=`Purge session JSONL?`,a=`This hard-deletes the transcript for ${s}. The action cannot be undone.`,o=`Purge`;break;case`archive-alive`:i=`Session is still running`,a=`End ${s} before archiving? The JSONL is kept and the row moves to the archive.`,o=`End and archive`;break}return(0,j.jsx)(`div`,{role:`dialog`,"aria-modal":`true`,className:`modal-overlay`,onClick:e=>{e.target===e.currentTarget&&!t&&n()},children:(0,j.jsxs)(`div`,{className:`modal-card`,children:[(0,j.jsx)(`h3`,{style:{margin:0,marginBottom:8,fontSize:16,fontWeight:600},children:i}),(0,j.jsx)(`p`,{style:{margin:0,marginBottom:12,fontSize:13},children:a}),(0,j.jsxs)(`div`,{className:`modal-action-row`,children:[(0,j.jsx)(`button`,{type:`button`,className:`modal-action-btn`,disabled:t,onClick:n,children:`Cancel`}),(0,j.jsx)(`button`,{type:`button`,className:`modal-action-btn`,"data-variant":`danger`,disabled:t,onClick:()=>r(),children:t?(0,j.jsx)(O,{size:13,className:`spinning`}):o})]})]})})}function ot({message:e,onClose:t}){return(0,j.jsx)(`div`,{role:`alertdialog`,"aria-modal":`true`,className:`modal-overlay`,onClick:e=>{e.target===e.currentTarget&&t()},children:(0,j.jsxs)(`div`,{className:`modal-card`,children:[(0,j.jsx)(`h3`,{style:{margin:0,marginBottom:8,fontSize:16,fontWeight:600},children:`Action failed`}),(0,j.jsx)(`p`,{style:{margin:0,marginBottom:12,fontSize:13,wordBreak:`break-word`},children:e}),(0,j.jsx)(`div`,{className:`modal-action-row`,children:(0,j.jsx)(`button`,{type:`button`,className:`modal-action-btn`,onClick:t,children:`OK`})})]})})}function st({onOpen:e}){return(0,j.jsx)(`footer`,{className:`admin-footer`,children:(0,j.jsxs)(`div`,{className:`powered-by`,role:`button`,tabIndex:0,onClick:e,onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),e())},"aria-label":`Powered by Claude Code — show details`,children:[(0,j.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`powered-by-icon`}),(0,j.jsx)(`span`,{children:`Powered by Claude Code`})]})})}var ct=t((e=>{var t=p();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var r=typeof Object.is==`function`?Object.is:n,i=t.useState,a=t.useEffect,o=t.useLayoutEffect,s=t.useDebugValue;function c(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),c=r[0].inst,u=r[1];return o(function(){c.value=n,c.getSnapshot=t,l(c)&&u({inst:c})},[e,n,t]),a(function(){return l(c)&&u({inst:c}),e(function(){l(c)&&u({inst:c})})},[e]),s(n),n}function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch{return!0}}function u(e,t){return t()}var d=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?u:c;e.useSyncExternalStore=t.useSyncExternalStore===void 0?d:t.useSyncExternalStore})),lt=t(((e,t)=>{t.exports=ct()})),ut=lt(),dt=e(f(),1);function M(e){this.content=e}M.prototype={constructor:M,find:function(e){for(var t=0;t<this.content.length;t+=2)if(this.content[t]===e)return t;return-1},get:function(e){var t=this.find(e);return t==-1?void 0:this.content[t+1]},update:function(e,t,n){var r=n&&n!=e?this.remove(n):this,i=r.find(e),a=r.content.slice();return i==-1?a.push(n||e,t):(a[i+1]=t,n&&(a[i]=n)),new M(a)},remove:function(e){var t=this.find(e);if(t==-1)return this;var n=this.content.slice();return n.splice(t,2),new M(n)},addToStart:function(e,t){return new M([e,t].concat(this.remove(e).content))},addToEnd:function(e,t){var n=this.remove(e).content.slice();return n.push(e,t),new M(n)},addBefore:function(e,t,n){var r=this.remove(t),i=r.content.slice(),a=r.find(e);return i.splice(a==-1?i.length:a,0,t,n),new M(i)},forEach:function(e){for(var t=0;t<this.content.length;t+=2)e(this.content[t],this.content[t+1])},prepend:function(e){return e=M.from(e),e.size?new M(e.content.concat(this.subtract(e).content)):this},append:function(e){return e=M.from(e),e.size?new M(this.subtract(e).content.concat(e.content)):this},subtract:function(e){var t=this;e=M.from(e);for(var n=0;n<e.content.length;n+=2)t=t.remove(e.content[n]);return t},toObject:function(){var e={};return this.forEach(function(t,n){e[t]=n}),e},get size(){return this.content.length>>1}},M.from=function(e){if(e instanceof M)return e;var t=[];if(e)for(var n in e)t.push(n,e[n]);return new M(t)};function ft(e,t,n){for(let r=0;;r++){if(r==e.childCount||r==t.childCount)return e.childCount==t.childCount?null:n;let i=e.child(r),a=t.child(r);if(i==a){n+=i.nodeSize;continue}if(!i.sameMarkup(a))return n;if(i.isText&&i.text!=a.text){for(let e=0;i.text[e]==a.text[e];e++)n++;return n}if(i.content.size||a.content.size){let e=ft(i.content,a.content,n+1);if(e!=null)return e}n+=i.nodeSize}}function pt(e,t,n,r){for(let i=e.childCount,a=t.childCount;;){if(i==0||a==0)return i==a?null:{a:n,b:r};let o=e.child(--i),s=t.child(--a),c=o.nodeSize;if(o==s){n-=c,r-=c;continue}if(!o.sameMarkup(s))return{a:n,b:r};if(o.isText&&o.text!=s.text){let e=0,t=Math.min(o.text.length,s.text.length);for(;e<t&&o.text[o.text.length-e-1]==s.text[s.text.length-e-1];)e++,n--,r--;return{a:n,b:r}}if(o.content.size||s.content.size){let e=pt(o.content,s.content,n-1,r-1);if(e)return e}n-=c,r-=c}}var N=class e{constructor(e,t){if(this.content=e,this.size=t||0,t==null)for(let t=0;t<e.length;t++)this.size+=e[t].nodeSize}nodesBetween(e,t,n,r=0,i){for(let a=0,o=0;o<t;a++){let s=this.content[a],c=o+s.nodeSize;if(c>e&&n(s,r+o,i||null,a)!==!1&&s.content.size){let i=o+1;s.nodesBetween(Math.max(0,e-i),Math.min(s.content.size,t-i),n,r+i)}o=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,t,n,r){let i=``,a=!0;return this.nodesBetween(e,t,(o,s)=>{let c=o.isText?o.text.slice(Math.max(e,s)-s,t-s):o.isLeaf?r?typeof r==`function`?r(o):r:o.type.spec.leafText?o.type.spec.leafText(o):``:``;o.isBlock&&(o.isLeaf&&c||o.isTextblock)&&n&&(a?a=!1:i+=n),i+=c},0),i}append(t){if(!t.size)return this;if(!this.size)return t;let n=this.lastChild,r=t.firstChild,i=this.content.slice(),a=0;for(n.isText&&n.sameMarkup(r)&&(i[i.length-1]=n.withText(n.text+r.text),a=1);a<t.content.length;a++)i.push(t.content[a]);return new e(i,this.size+t.size)}cut(t,n=this.size){if(t==0&&n==this.size)return this;let r=[],i=0;if(n>t)for(let e=0,a=0;a<n;e++){let o=this.content[e],s=a+o.nodeSize;s>t&&((a<t||s>n)&&(o=o.isText?o.cut(Math.max(0,t-a),Math.min(o.text.length,n-a)):o.cut(Math.max(0,t-a-1),Math.min(o.content.size,n-a-1))),r.push(o),i+=o.nodeSize),a=s}return new e(r,i)}cutByIndex(t,n){return t==n?e.empty:t==0&&n==this.content.length?this:new e(this.content.slice(t,n))}replaceChild(t,n){let r=this.content[t];if(r==n)return this;let i=this.content.slice(),a=this.size+n.nodeSize-r.nodeSize;return i[t]=n,new e(i,a)}addToStart(t){return new e([t].concat(this.content),this.size+t.nodeSize)}addToEnd(t){return new e(this.content.concat(t),this.size+t.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let t=0;t<this.content.length;t++)if(!this.content[t].eq(e.content[t]))return!1;return!0}get firstChild(){return this.content.length?this.content[0]:null}get lastChild(){return this.content.length?this.content[this.content.length-1]:null}get childCount(){return this.content.length}child(e){let t=this.content[e];if(!t)throw RangeError(`Index `+e+` out of range for `+this);return t}maybeChild(e){return this.content[e]||null}forEach(e){for(let t=0,n=0;t<this.content.length;t++){let r=this.content[t];e(r,n,t),n+=r.nodeSize}}findDiffStart(e,t=0){return ft(this,e,t)}findDiffEnd(e,t=this.size,n=e.size){return pt(this,e,t,n)}findIndex(e){if(e==0)return ht(0,e);if(e==this.size)return ht(this.content.length,e);if(e>this.size||e<0)throw RangeError(`Position ${e} outside of fragment (${this})`);for(let t=0,n=0;;t++){let r=this.child(t),i=n+r.nodeSize;if(i>=e)return i==e?ht(t+1,i):ht(t,n);n=i}}toString(){return`<`+this.toStringInner()+`>`}toStringInner(){return this.content.join(`, `)}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(t,n){if(!n)return e.empty;if(!Array.isArray(n))throw RangeError(`Invalid input for Fragment.fromJSON`);return new e(n.map(t.nodeFromJSON))}static fromArray(t){if(!t.length)return e.empty;let n,r=0;for(let e=0;e<t.length;e++){let i=t[e];r+=i.nodeSize,e&&i.isText&&t[e-1].sameMarkup(i)?(n||=t.slice(0,e),n[n.length-1]=i.withText(n[n.length-1].text+i.text)):n&&n.push(i)}return new e(n||t,r)}static from(t){if(!t)return e.empty;if(t instanceof e)return t;if(Array.isArray(t))return this.fromArray(t);if(t.attrs)return new e([t],t.nodeSize);throw RangeError(`Can not convert `+t+` to a Fragment`+(t.nodesBetween?` (looks like multiple versions of prosemirror-model were loaded)`:``))}};N.empty=new N([],0);var mt={index:0,offset:0};function ht(e,t){return mt.index=e,mt.offset=t,mt}function gt(e,t){if(e===t)return!0;if(!(e&&typeof e==`object`)||!(t&&typeof t==`object`))return!1;let n=Array.isArray(e);if(Array.isArray(t)!=n)return!1;if(n){if(e.length!=t.length)return!1;for(let n=0;n<e.length;n++)if(!gt(e[n],t[n]))return!1}else{for(let n in e)if(!(n in t)||!gt(e[n],t[n]))return!1;for(let n in t)if(!(n in e))return!1}return!0}var P=class e{constructor(e,t){this.type=e,this.attrs=t}addToSet(e){let t,n=!1;for(let r=0;r<e.length;r++){let i=e[r];if(this.eq(i))return e;if(this.type.excludes(i.type))t||=e.slice(0,r);else if(i.type.excludes(this.type))return e;else !n&&i.type.rank>this.type.rank&&(t||=e.slice(0,r),t.push(this),n=!0),t&&t.push(i)}return t||=e.slice(),n||t.push(this),t}removeFromSet(e){for(let t=0;t<e.length;t++)if(this.eq(e[t]))return e.slice(0,t).concat(e.slice(t+1));return e}isInSet(e){for(let t=0;t<e.length;t++)if(this.eq(e[t]))return!0;return!1}eq(e){return this==e||this.type==e.type&>(this.attrs,e.attrs)}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return e}static fromJSON(e,t){if(!t)throw RangeError(`Invalid input for Mark.fromJSON`);let n=e.marks[t.type];if(!n)throw RangeError(`There is no mark type ${t.type} in this schema`);let r=n.create(t.attrs);return n.checkAttrs(r.attrs),r}static sameSet(e,t){if(e==t)return!0;if(e.length!=t.length)return!1;for(let n=0;n<e.length;n++)if(!e[n].eq(t[n]))return!1;return!0}static setFrom(t){if(!t||Array.isArray(t)&&t.length==0)return e.none;if(t instanceof e)return[t];let n=t.slice();return n.sort((e,t)=>e.type.rank-t.type.rank),n}};P.none=[];var _t=class extends Error{},F=class e{constructor(e,t,n){this.content=e,this.openStart=t,this.openEnd=n}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(t,n){let r=yt(this.content,t+this.openStart,n);return r&&new e(r,this.openStart,this.openEnd)}removeBetween(t,n){return new e(vt(this.content,t+this.openStart,n+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+`(`+this.openStart+`,`+this.openEnd+`)`}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(t,n){if(!n)return e.empty;let r=n.openStart||0,i=n.openEnd||0;if(typeof r!=`number`||typeof i!=`number`)throw RangeError(`Invalid input for Slice.fromJSON`);return new e(N.fromJSON(t,n.content),r,i)}static maxOpen(t,n=!0){let r=0,i=0;for(let e=t.firstChild;e&&!e.isLeaf&&(n||!e.type.spec.isolating);e=e.firstChild)r++;for(let e=t.lastChild;e&&!e.isLeaf&&(n||!e.type.spec.isolating);e=e.lastChild)i++;return new e(t,r,i)}};F.empty=new F(N.empty,0,0);function vt(e,t,n){let{index:r,offset:i}=e.findIndex(t),a=e.maybeChild(r),{index:o,offset:s}=e.findIndex(n);if(i==t||a.isText){if(s!=n&&!e.child(o).isText)throw RangeError(`Removing non-flat range`);return e.cut(0,t).append(e.cut(n))}if(r!=o)throw RangeError(`Removing non-flat range`);return e.replaceChild(r,a.copy(vt(a.content,t-i-1,n-i-1)))}function yt(e,t,n,r){let{index:i,offset:a}=e.findIndex(t),o=e.maybeChild(i);if(a==t||o.isText)return r&&!r.canReplace(i,i,n)?null:e.cut(0,t).append(n).append(e.cut(t));let s=yt(o.content,t-a-1,n,o);return s&&e.replaceChild(i,o.copy(s))}function bt(e,t,n){if(n.openStart>e.depth)throw new _t(`Inserted content deeper than insertion position`);if(e.depth-n.openStart!=t.depth-n.openEnd)throw new _t(`Inconsistent open depths`);return xt(e,t,n,0)}function xt(e,t,n,r){let i=e.index(r),a=e.node(r);if(i==t.index(r)&&r<e.depth-n.openStart){let o=xt(e,t,n,r+1);return a.copy(a.content.replaceChild(i,o))}else if(!n.content.size)return Et(a,Ot(e,t,r));else if(!n.openStart&&!n.openEnd&&e.depth==r&&t.depth==r){let r=e.parent,i=r.content;return Et(r,i.cut(0,e.parentOffset).append(n.content).append(i.cut(t.parentOffset)))}else{let{start:i,end:o}=kt(n,e);return Et(a,Dt(e,i,o,t,r))}}function St(e,t){if(!t.type.compatibleContent(e.type))throw new _t(`Cannot join `+t.type.name+` onto `+e.type.name)}function Ct(e,t,n){let r=e.node(n);return St(r,t.node(n)),r}function wt(e,t){let n=t.length-1;n>=0&&e.isText&&e.sameMarkup(t[n])?t[n]=e.withText(t[n].text+e.text):t.push(e)}function Tt(e,t,n,r){let i=(t||e).node(n),a=0,o=t?t.index(n):i.childCount;e&&(a=e.index(n),e.depth>n?a++:e.textOffset&&(wt(e.nodeAfter,r),a++));for(let e=a;e<o;e++)wt(i.child(e),r);t&&t.depth==n&&t.textOffset&&wt(t.nodeBefore,r)}function Et(e,t){return e.type.checkContent(t),e.copy(t)}function Dt(e,t,n,r,i){let a=e.depth>i&&Ct(e,t,i+1),o=r.depth>i&&Ct(n,r,i+1),s=[];return Tt(null,e,i,s),a&&o&&t.index(i)==n.index(i)?(St(a,o),wt(Et(a,Dt(e,t,n,r,i+1)),s)):(a&&wt(Et(a,Ot(e,t,i+1)),s),Tt(t,n,i,s),o&&wt(Et(o,Ot(n,r,i+1)),s)),Tt(r,null,i,s),new N(s)}function Ot(e,t,n){let r=[];return Tt(null,e,n,r),e.depth>n&&wt(Et(Ct(e,t,n+1),Ot(e,t,n+1)),r),Tt(t,null,n,r),new N(r)}function kt(e,t){let n=t.depth-e.openStart,r=t.node(n).copy(e.content);for(let e=n-1;e>=0;e--)r=t.node(e).copy(N.from(r));return{start:r.resolveNoCache(e.openStart+n),end:r.resolveNoCache(r.content.size-e.openEnd-n)}}var At=class e{constructor(e,t,n){this.pos=e,this.path=t,this.parentOffset=n,this.depth=t.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw RangeError(`There is no position before the top-level node`);return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw RangeError(`There is no position after the top-level node`);return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,t=this.index(this.depth);if(t==e.childCount)return null;let n=this.pos-this.path[this.path.length-1],r=e.child(t);return n?e.child(t).cut(n):r}get nodeBefore(){let e=this.index(this.depth),t=this.pos-this.path[this.path.length-1];return t?this.parent.child(e).cut(0,t):e==0?null:this.parent.child(e-1)}posAtIndex(e,t){t=this.resolveDepth(t);let n=this.path[t*3],r=t==0?0:this.path[t*3-1]+1;for(let t=0;t<e;t++)r+=n.child(t).nodeSize;return r}marks(){let e=this.parent,t=this.index();if(e.content.size==0)return P.none;if(this.textOffset)return e.child(t).marks;let n=e.maybeChild(t-1),r=e.maybeChild(t);if(!n){let e=n;n=r,r=e}let i=n.marks;for(var a=0;a<i.length;a++)i[a].type.spec.inclusive===!1&&(!r||!i[a].isInSet(r.marks))&&(i=i[a--].removeFromSet(i));return i}marksAcross(e){let t=this.parent.maybeChild(this.index());if(!t||!t.isInline)return null;let n=t.marks,r=e.parent.maybeChild(e.index());for(var i=0;i<n.length;i++)n[i].type.spec.inclusive===!1&&(!r||!n[i].isInSet(r.marks))&&(n=n[i--].removeFromSet(n));return n}sharedDepth(e){for(let t=this.depth;t>0;t--)if(this.start(t)<=e&&this.end(t)>=e)return t;return 0}blockRange(e=this,t){if(e.pos<this.pos)return e.blockRange(this);for(let n=this.depth-(this.parent.inlineContent||this.pos==e.pos?1:0);n>=0;n--)if(e.pos<=this.end(n)&&(!t||t(this.node(n))))return new Pt(this,e,n);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos<this.pos?e:this}toString(){let e=``;for(let t=1;t<=this.depth;t++)e+=(e?`/`:``)+this.node(t).type.name+`_`+this.index(t-1);return e+`:`+this.parentOffset}static resolve(t,n){if(!(n>=0&&n<=t.content.size))throw RangeError(`Position `+n+` out of range`);let r=[],i=0,a=n;for(let e=t;;){let{index:t,offset:n}=e.content.findIndex(a),o=a-n;if(r.push(e,t,i+n),!o||(e=e.child(t),e.isText))break;a=o-1,i+=n+1}return new e(n,r,a)}static resolveCached(t,n){let r=Nt.get(t);if(r)for(let e=0;e<r.elts.length;e++){let t=r.elts[e];if(t.pos==n)return t}else Nt.set(t,r=new jt);let i=r.elts[r.i]=e.resolve(t,n);return r.i=(r.i+1)%Mt,i}},jt=class{constructor(){this.elts=[],this.i=0}},Mt=12,Nt=new WeakMap,Pt=class{constructor(e,t,n){this.$from=e,this.$to=t,this.depth=n}get start(){return this.$from.before(this.depth+1)}get end(){return this.$to.after(this.depth+1)}get parent(){return this.$from.node(this.depth)}get startIndex(){return this.$from.index(this.depth)}get endIndex(){return this.$to.indexAfter(this.depth)}},Ft=Object.create(null),It=class e{constructor(e,t,n,r=P.none){this.type=e,this.attrs=t,this.marks=r,this.content=n||N.empty}get children(){return this.content.content}get nodeSize(){return this.isLeaf?1:2+this.content.size}get childCount(){return this.content.childCount}child(e){return this.content.child(e)}maybeChild(e){return this.content.maybeChild(e)}forEach(e){this.content.forEach(e)}nodesBetween(e,t,n,r=0){this.content.nodesBetween(e,t,n,r,this)}descendants(e){this.nodesBetween(0,this.content.size,e)}get textContent(){return this.isLeaf&&this.type.spec.leafText?this.type.spec.leafText(this):this.textBetween(0,this.content.size,``)}textBetween(e,t,n,r){return this.content.textBetween(e,t,n,r)}get firstChild(){return this.content.firstChild}get lastChild(){return this.content.lastChild}eq(e){return this==e||this.sameMarkup(e)&&this.content.eq(e.content)}sameMarkup(e){return this.hasMarkup(e.type,e.attrs,e.marks)}hasMarkup(e,t,n){return this.type==e&>(this.attrs,t||e.defaultAttrs||Ft)&&P.sameSet(this.marks,n||P.none)}copy(t=null){return t==this.content?this:new e(this.type,this.attrs,t,this.marks)}mark(t){return t==this.marks?this:new e(this.type,this.attrs,this.content,t)}cut(e,t=this.content.size){return e==0&&t==this.content.size?this:this.copy(this.content.cut(e,t))}slice(e,t=this.content.size,n=!1){if(e==t)return F.empty;let r=this.resolve(e),i=this.resolve(t),a=n?0:r.sharedDepth(t),o=r.start(a);return new F(r.node(a).content.cut(r.pos-o,i.pos-o),r.depth-a,i.depth-a)}replace(e,t,n){return bt(this.resolve(e),this.resolve(t),n)}nodeAt(e){for(let t=this;;){let{index:n,offset:r}=t.content.findIndex(e);if(t=t.maybeChild(n),!t)return null;if(r==e||t.isText)return t;e-=r+1}}childAfter(e){let{index:t,offset:n}=this.content.findIndex(e);return{node:this.content.maybeChild(t),index:t,offset:n}}childBefore(e){if(e==0)return{node:null,index:0,offset:0};let{index:t,offset:n}=this.content.findIndex(e);if(n<e)return{node:this.content.child(t),index:t,offset:n};let r=this.content.child(t-1);return{node:r,index:t-1,offset:n-r.nodeSize}}resolve(e){return At.resolveCached(this,e)}resolveNoCache(e){return At.resolve(this,e)}rangeHasMark(e,t,n){let r=!1;return t>e&&this.nodesBetween(e,t,e=>(n.isInSet(e.marks)&&(r=!0),!r)),r}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+=`(`+this.content.toStringInner()+`)`),Rt(this.marks,e)}contentMatchAt(e){let t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw Error(`Called contentMatchAt on a node with invalid content`);return t}canReplace(e,t,n=N.empty,r=0,i=n.childCount){let a=this.contentMatchAt(e).matchFragment(n,r,i),o=a&&a.matchFragment(this.content,t);if(!o||!o.validEnd)return!1;for(let e=r;e<i;e++)if(!this.type.allowsMarks(n.child(e).marks))return!1;return!0}canReplaceWith(e,t,n,r){if(r&&!this.type.allowsMarks(r))return!1;let i=this.contentMatchAt(e).matchType(n),a=i&&i.matchFragment(this.content,t);return a?a.validEnd:!1}canAppend(e){return e.content.size?this.canReplace(this.childCount,this.childCount,e.content):this.type.compatibleContent(e.type)}check(){this.type.checkContent(this.content),this.type.checkAttrs(this.attrs);let e=P.none;for(let t=0;t<this.marks.length;t++){let n=this.marks[t];n.type.checkAttrs(n.attrs),e=n.addToSet(e)}if(!P.sameSet(e,this.marks))throw RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(e=>e.type.name)}`);this.content.forEach(e=>e.check())}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(e=>e.toJSON())),e}static fromJSON(e,t){if(!t)throw RangeError(`Invalid input for Node.fromJSON`);let n;if(t.marks){if(!Array.isArray(t.marks))throw RangeError(`Invalid mark data for Node.fromJSON`);n=t.marks.map(e.markFromJSON)}if(t.type==`text`){if(typeof t.text!=`string`)throw RangeError(`Invalid text node in JSON`);return e.text(t.text,n)}let r=N.fromJSON(e,t.content),i=e.nodeType(t.type).create(t.attrs,r,n);return i.type.checkAttrs(i.attrs),i}};It.prototype.text=void 0;var Lt=class e extends It{constructor(e,t,n,r){if(super(e,t,null,r),!n)throw RangeError(`Empty text nodes are not allowed`);this.text=n}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):Rt(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,t){return this.text.slice(e,t)}get nodeSize(){return this.text.length}mark(t){return t==this.marks?this:new e(this.type,this.attrs,this.text,t)}withText(t){return t==this.text?this:new e(this.type,this.attrs,t,this.marks)}cut(e=0,t=this.text.length){return e==0&&t==this.text.length?this:this.withText(this.text.slice(e,t))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}};function Rt(e,t){for(let n=e.length-1;n>=0;n--)t=e[n].type.name+`(`+t+`)`;return t}var zt=class e{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(t,n){let r=new Bt(t,n);if(r.next==null)return e.empty;let i=Vt(r);r.next&&r.err(`Unexpected trailing text`);let a=Zt(Jt(i));return Qt(a,r),a}matchType(e){for(let t=0;t<this.next.length;t++)if(this.next[t].type==e)return this.next[t].next;return null}matchFragment(e,t=0,n=e.childCount){let r=this;for(let i=t;r&&i<n;i++)r=r.matchType(e.child(i).type);return r}get inlineContent(){return this.next.length!=0&&this.next[0].type.isInline}get defaultType(){for(let e=0;e<this.next.length;e++){let{type:t}=this.next[e];if(!(t.isText||t.hasRequiredAttrs()))return t}return null}compatible(e){for(let t=0;t<this.next.length;t++)for(let n=0;n<e.next.length;n++)if(this.next[t].type==e.next[n].type)return!0;return!1}fillBefore(e,t=!1,n=0){let r=[this];function i(a,o){let s=a.matchFragment(e,n);if(s&&(!t||s.validEnd))return N.from(o.map(e=>e.createAndFill()));for(let e=0;e<a.next.length;e++){let{type:t,next:n}=a.next[e];if(!(t.isText||t.hasRequiredAttrs())&&r.indexOf(n)==-1){r.push(n);let e=i(n,o.concat(t));if(e)return e}}return null}return i(this,[])}findWrapping(e){for(let t=0;t<this.wrapCache.length;t+=2)if(this.wrapCache[t]==e)return this.wrapCache[t+1];let t=this.computeWrapping(e);return this.wrapCache.push(e,t),t}computeWrapping(e){let t=Object.create(null),n=[{match:this,type:null,via:null}];for(;n.length;){let r=n.shift(),i=r.match;if(i.matchType(e)){let e=[];for(let t=r;t.type;t=t.via)e.push(t.type);return e.reverse()}for(let e=0;e<i.next.length;e++){let{type:a,next:o}=i.next[e];!a.isLeaf&&!a.hasRequiredAttrs()&&!(a.name in t)&&(!r.type||o.validEnd)&&(n.push({match:a.contentMatch,type:a,via:r}),t[a.name]=!0)}}return null}get edgeCount(){return this.next.length}edge(e){if(e>=this.next.length)throw RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function t(n){e.push(n);for(let r=0;r<n.next.length;r++)e.indexOf(n.next[r].next)==-1&&t(n.next[r].next)}return t(this),e.map((t,n)=>{let r=n+(t.validEnd?`*`:` `)+` `;for(let n=0;n<t.next.length;n++)r+=(n?`, `:``)+t.next[n].type.name+`->`+e.indexOf(t.next[n].next);return r}).join(`
|
|
3
3
|
`)}};zt.empty=new zt(!0);var Bt=class{constructor(e,t){this.string=e,this.nodeTypes=t,this.inline=null,this.pos=0,this.tokens=e.split(/\s*(?=\b|\W|$)/),this.tokens[this.tokens.length-1]==``&&this.tokens.pop(),this.tokens[0]==``&&this.tokens.shift()}get next(){return this.tokens[this.pos]}eat(e){return this.next==e&&(this.pos++||!0)}err(e){throw SyntaxError(e+` (in content expression '`+this.string+`')`)}};function Vt(e){let t=[];do t.push(Ht(e));while(e.eat(`|`));return t.length==1?t[0]:{type:`choice`,exprs:t}}function Ht(e){let t=[];do t.push(Ut(e));while(e.next&&e.next!=`)`&&e.next!=`|`);return t.length==1?t[0]:{type:`seq`,exprs:t}}function Ut(e){let t=qt(e);for(;;)if(e.eat(`+`))t={type:`plus`,expr:t};else if(e.eat(`*`))t={type:`star`,expr:t};else if(e.eat(`?`))t={type:`opt`,expr:t};else if(e.eat(`{`))t=Gt(e,t);else break;return t}function Wt(e){/\D/.test(e.next)&&e.err(`Expected number, got '`+e.next+`'`);let t=Number(e.next);return e.pos++,t}function Gt(e,t){let n=Wt(e),r=n;return e.eat(`,`)&&(r=e.next==`}`?-1:Wt(e)),e.eat(`}`)||e.err(`Unclosed braced range`),{type:`range`,min:n,max:r,expr:t}}function Kt(e,t){let n=e.nodeTypes,r=n[t];if(r)return[r];let i=[];for(let e in n){let r=n[e];r.isInGroup(t)&&i.push(r)}return i.length==0&&e.err(`No node type or group '`+t+`' found`),i}function qt(e){if(e.eat(`(`)){let t=Vt(e);return e.eat(`)`)||e.err(`Missing closing paren`),t}else if(/\W/.test(e.next))e.err(`Unexpected token '`+e.next+`'`);else{let t=Kt(e,e.next).map(t=>(e.inline==null?e.inline=t.isInline:e.inline!=t.isInline&&e.err(`Mixing inline and block content`),{type:`name`,value:t}));return e.pos++,t.length==1?t[0]:{type:`choice`,exprs:t}}}function Jt(e){let t=[[]];return i(a(e,0),n()),t;function n(){return t.push([])-1}function r(e,n,r){let i={term:r,to:n};return t[e].push(i),i}function i(e,t){e.forEach(e=>e.to=t)}function a(e,t){if(e.type==`choice`)return e.exprs.reduce((e,n)=>e.concat(a(n,t)),[]);if(e.type==`seq`)for(let r=0;;r++){let o=a(e.exprs[r],t);if(r==e.exprs.length-1)return o;i(o,t=n())}else if(e.type==`star`){let o=n();return r(t,o),i(a(e.expr,o),o),[r(o)]}else if(e.type==`plus`){let o=n();return i(a(e.expr,t),o),i(a(e.expr,o),o),[r(o)]}else if(e.type==`opt`)return[r(t)].concat(a(e.expr,t));else if(e.type==`range`){let o=t;for(let t=0;t<e.min;t++){let t=n();i(a(e.expr,o),t),o=t}if(e.max==-1)i(a(e.expr,o),o);else for(let t=e.min;t<e.max;t++){let t=n();r(o,t),i(a(e.expr,o),t),o=t}return[r(o)]}else if(e.type==`name`)return[r(t,void 0,e.value)];else throw Error(`Unknown expr type`)}}function Yt(e,t){return t-e}function Xt(e,t){let n=[];return r(t),n.sort(Yt);function r(t){let i=e[t];if(i.length==1&&!i[0].term)return r(i[0].to);n.push(t);for(let e=0;e<i.length;e++){let{term:t,to:a}=i[e];!t&&n.indexOf(a)==-1&&r(a)}}}function Zt(e){let t=Object.create(null);return n(Xt(e,0));function n(r){let i=[];r.forEach(t=>{e[t].forEach(({term:t,to:n})=>{if(!t)return;let r;for(let e=0;e<i.length;e++)i[e][0]==t&&(r=i[e][1]);Xt(e,n).forEach(e=>{r||i.push([t,r=[]]),r.indexOf(e)==-1&&r.push(e)})})});let a=t[r.join(`,`)]=new zt(r.indexOf(e.length-1)>-1);for(let e=0;e<i.length;e++){let r=i[e][1].sort(Yt);a.next.push({type:i[e][0],next:t[r.join(`,`)]||n(r)})}return a}}function Qt(e,t){for(let n=0,r=[e];n<r.length;n++){let e=r[n],i=!e.validEnd,a=[];for(let t=0;t<e.next.length;t++){let{type:n,next:o}=e.next[t];a.push(n.name),i&&!(n.isText||n.hasRequiredAttrs())&&(i=!1),r.indexOf(o)==-1&&r.push(o)}i&&t.err(`Only non-generatable nodes (`+a.join(`, `)+`) in a required position (see https://prosemirror.net/docs/guide/#generatable)`)}}function $t(e){let t=Object.create(null);for(let n in e){let r=e[n];if(!r.hasDefault)return null;t[n]=r.default}return t}function en(e,t){let n=Object.create(null);for(let r in e){let i=t&&t[r];if(i===void 0){let t=e[r];if(t.hasDefault)i=t.default;else throw RangeError(`No value supplied for attribute `+r)}n[r]=i}return n}function tn(e,t,n,r){for(let r in t)if(!(r in e))throw RangeError(`Unsupported attribute ${r} for ${n} of type ${r}`);for(let n in e){let r=e[n];r.validate&&r.validate(t[n])}}function nn(e,t){let n=Object.create(null);if(t)for(let r in t)n[r]=new on(e,r,t[r]);return n}var rn=class e{constructor(e,t,n){this.name=e,this.schema=t,this.spec=n,this.markSet=null,this.groups=n.group?n.group.split(` `):[],this.attrs=nn(e,n.attrs),this.defaultAttrs=$t(this.attrs),this.contentMatch=null,this.inlineContent=null,this.isBlock=!(n.inline||e==`text`),this.isText=e==`text`}get isInline(){return!this.isBlock}get isTextblock(){return this.isBlock&&this.inlineContent}get isLeaf(){return this.contentMatch==zt.empty}get isAtom(){return this.isLeaf||!!this.spec.atom}isInGroup(e){return this.groups.indexOf(e)>-1}get whitespace(){return this.spec.whitespace||(this.spec.code?`pre`:`normal`)}hasRequiredAttrs(){for(let e in this.attrs)if(this.attrs[e].isRequired)return!0;return!1}compatibleContent(e){return this==e||this.contentMatch.compatible(e.contentMatch)}computeAttrs(e){return!e&&this.defaultAttrs?this.defaultAttrs:en(this.attrs,e)}create(e=null,t,n){if(this.isText)throw Error(`NodeType.create can't construct text nodes`);return new It(this,this.computeAttrs(e),N.from(t),P.setFrom(n))}createChecked(e=null,t,n){return t=N.from(t),this.checkContent(t),new It(this,this.computeAttrs(e),t,P.setFrom(n))}createAndFill(e=null,t,n){if(e=this.computeAttrs(e),t=N.from(t),t.size){let e=this.contentMatch.fillBefore(t);if(!e)return null;t=e.append(t)}let r=this.contentMatch.matchFragment(t),i=r&&r.fillBefore(N.empty,!0);return i?new It(this,e,t.append(i),P.setFrom(n)):null}validContent(e){let t=this.contentMatch.matchFragment(e);if(!t||!t.validEnd)return!1;for(let t=0;t<e.childCount;t++)if(!this.allowsMarks(e.child(t).marks))return!1;return!0}checkContent(e){if(!this.validContent(e))throw RangeError(`Invalid content for node ${this.name}: ${e.toString().slice(0,50)}`)}checkAttrs(e){tn(this.attrs,e,`node`,this.name)}allowsMarkType(e){return this.markSet==null||this.markSet.indexOf(e)>-1}allowsMarks(e){if(this.markSet==null)return!0;for(let t=0;t<e.length;t++)if(!this.allowsMarkType(e[t].type))return!1;return!0}allowedMarks(e){if(this.markSet==null)return e;let t;for(let n=0;n<e.length;n++)this.allowsMarkType(e[n].type)?t&&t.push(e[n]):t||=e.slice(0,n);return t?t.length?t:P.none:e}static compile(t,n){let r=Object.create(null);t.forEach((t,i)=>r[t]=new e(t,n,i));let i=n.spec.topNode||`doc`;if(!r[i])throw RangeError(`Schema is missing its top node type ('`+i+`')`);if(!r.text)throw RangeError(`Every schema needs a 'text' type`);for(let e in r.text.attrs)throw RangeError(`The text node type should not have attributes`);return r}};function an(e,t,n){let r=n.split(`|`);return n=>{let i=n===null?`null`:typeof n;if(r.indexOf(i)<0)throw RangeError(`Expected value of type ${r} for attribute ${t} on type ${e}, got ${i}`)}}var on=class{constructor(e,t,n){this.hasDefault=Object.prototype.hasOwnProperty.call(n,`default`),this.default=n.default,this.validate=typeof n.validate==`string`?an(e,t,n.validate):n.validate}get isRequired(){return!this.hasDefault}},sn=class e{constructor(e,t,n,r){this.name=e,this.rank=t,this.schema=n,this.spec=r,this.attrs=nn(e,r.attrs),this.excluded=null;let i=$t(this.attrs);this.instance=i?new P(this,i):null}create(e=null){return!e&&this.instance?this.instance:new P(this,en(this.attrs,e))}static compile(t,n){let r=Object.create(null),i=0;return t.forEach((t,a)=>r[t]=new e(t,i++,n,a)),r}removeFromSet(e){for(var t=0;t<e.length;t++)e[t].type==this&&(e=e.slice(0,t).concat(e.slice(t+1)),t--);return e}isInSet(e){for(let t=0;t<e.length;t++)if(e[t].type==this)return e[t]}checkAttrs(e){tn(this.attrs,e,`mark`,this.name)}excludes(e){return this.excluded.indexOf(e)>-1}},cn=class{constructor(e){this.linebreakReplacement=null,this.cached=Object.create(null);let t=this.spec={};for(let n in e)t[n]=e[n];t.nodes=M.from(e.nodes),t.marks=M.from(e.marks||{}),this.nodes=rn.compile(this.spec.nodes,this),this.marks=sn.compile(this.spec.marks,this);let n=Object.create(null);for(let e in this.nodes){if(e in this.marks)throw RangeError(e+` can not be both a node and a mark`);let t=this.nodes[e],r=t.spec.content||``,i=t.spec.marks;if(t.contentMatch=n[r]||(n[r]=zt.parse(r,this.nodes)),t.inlineContent=t.contentMatch.inlineContent,t.spec.linebreakReplacement){if(this.linebreakReplacement)throw RangeError(`Multiple linebreak nodes defined`);if(!t.isInline||!t.isLeaf)throw RangeError(`Linebreak replacement nodes must be inline leaf nodes`);this.linebreakReplacement=t}t.markSet=i==`_`?null:i?ln(this,i.split(` `)):i==``||!t.inlineContent?[]:null}for(let e in this.marks){let t=this.marks[e],n=t.spec.excludes;t.excluded=n==null?[t]:n==``?[]:ln(this,n.split(` `))}this.nodeFromJSON=e=>It.fromJSON(this,e),this.markFromJSON=e=>P.fromJSON(this,e),this.topNodeType=this.nodes[this.spec.topNode||`doc`],this.cached.wrappings=Object.create(null)}node(e,t=null,n,r){if(typeof e==`string`)e=this.nodeType(e);else if(!(e instanceof rn))throw RangeError(`Invalid node type: `+e);else if(e.schema!=this)throw RangeError(`Node type from different schema used (`+e.name+`)`);return e.createChecked(t,n,r)}text(e,t){let n=this.nodes.text;return new Lt(n,n.defaultAttrs,e,P.setFrom(t))}mark(e,t){return typeof e==`string`&&(e=this.marks[e]),e.create(t)}nodeType(e){let t=this.nodes[e];if(!t)throw RangeError(`Unknown node type: `+e);return t}};function ln(e,t){let n=[];for(let r=0;r<t.length;r++){let i=t[r],a=e.marks[i],o=a;if(a)n.push(a);else for(let t in e.marks){let r=e.marks[t];(i==`_`||r.spec.group&&r.spec.group.split(` `).indexOf(i)>-1)&&n.push(o=r)}if(!o)throw SyntaxError(`Unknown mark type: '`+t[r]+`'`)}return n}function un(e){return e.tag!=null}function dn(e){return e.style!=null}var fn=class e{constructor(e,t){this.schema=e,this.rules=t,this.tags=[],this.styles=[];let n=this.matchedStyles=[];t.forEach(e=>{if(un(e))this.tags.push(e);else if(dn(e)){let t=/[^=]*/.exec(e.style)[0];n.indexOf(t)<0&&n.push(t),this.styles.push(e)}}),this.normalizeLists=!this.tags.some(t=>{if(!/^(ul|ol)\b/.test(t.tag)||!t.node)return!1;let n=e.nodes[t.node];return n.contentMatch.matchType(n)})}parse(e,t={}){let n=new xn(this,t,!1);return n.addAll(e,P.none,t.from,t.to),n.finish()}parseSlice(e,t={}){let n=new xn(this,t,!0);return n.addAll(e,P.none,t.from,t.to),F.maxOpen(n.finish())}matchTag(e,t,n){for(let r=n?this.tags.indexOf(n)+1:0;r<this.tags.length;r++){let n=this.tags[r];if(Cn(e,n.tag)&&(n.namespace===void 0||e.namespaceURI==n.namespace)&&(!n.context||t.matchesContext(n.context))){if(n.getAttrs){let t=n.getAttrs(e);if(t===!1)continue;n.attrs=t||void 0}return n}}}matchStyle(e,t,n,r){for(let i=r?this.styles.indexOf(r)+1:0;i<this.styles.length;i++){let r=this.styles[i],a=r.style;if(!(a.indexOf(e)!=0||r.context&&!n.matchesContext(r.context)||a.length>e.length&&(a.charCodeAt(e.length)!=61||a.slice(e.length+1)!=t))){if(r.getAttrs){let e=r.getAttrs(t);if(e===!1)continue;r.attrs=e||void 0}return r}}}static schemaRules(e){let t=[];function n(e){let n=e.priority==null?50:e.priority,r=0;for(;r<t.length;r++){let e=t[r];if((e.priority==null?50:e.priority)<n)break}t.splice(r,0,e)}for(let t in e.marks){let r=e.marks[t].spec.parseDOM;r&&r.forEach(e=>{n(e=wn(e)),e.mark||e.ignore||e.clearMark||(e.mark=t)})}for(let t in e.nodes){let r=e.nodes[t].spec.parseDOM;r&&r.forEach(e=>{n(e=wn(e)),e.node||e.ignore||e.mark||(e.node=t)})}return t}static fromSchema(t){return t.cached.domParser||(t.cached.domParser=new e(t,e.schemaRules(t)))}},pn={address:!0,article:!0,aside:!0,blockquote:!0,canvas:!0,dd:!0,div:!0,dl:!0,fieldset:!0,figcaption:!0,figure:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,li:!0,noscript:!0,ol:!0,output:!0,p:!0,pre:!0,section:!0,table:!0,tfoot:!0,ul:!0},mn={head:!0,noscript:!0,object:!0,script:!0,style:!0,title:!0},hn={ol:!0,ul:!0},gn=1,_n=2,vn=4;function yn(e,t,n){return t==null?e&&e.whitespace==`pre`?gn|_n:n&~vn:(t?gn:0)|(t===`full`?_n:0)}var bn=class{constructor(e,t,n,r,i,a){this.type=e,this.attrs=t,this.marks=n,this.solid=r,this.options=a,this.content=[],this.activeMarks=P.none,this.match=i||(a&vn?null:e.contentMatch)}findWrapping(e){if(!this.match){if(!this.type)return[];let t=this.type.contentMatch.fillBefore(N.from(e));if(t)this.match=this.type.contentMatch.matchFragment(t);else{let t=this.type.contentMatch,n;return(n=t.findWrapping(e.type))?(this.match=t,n):null}}return this.match.findWrapping(e.type)}finish(e){if(!(this.options&gn)){let e=this.content[this.content.length-1],t;if(e&&e.isText&&(t=/[ \t\r\n\u000c]+$/.exec(e.text))){let n=e;e.text.length==t[0].length?this.content.pop():this.content[this.content.length-1]=n.withText(n.text.slice(0,n.text.length-t[0].length))}}let t=N.from(this.content);return!e&&this.match&&(t=t.append(this.match.fillBefore(N.empty,!0))),this.type?this.type.create(this.attrs,t,this.marks):t}inlineContext(e){return this.type?this.type.inlineContent:this.content.length?this.content[0].isInline:e.parentNode&&!pn.hasOwnProperty(e.parentNode.nodeName.toLowerCase())}},xn=class{constructor(e,t,n){this.parser=e,this.options=t,this.isOpen=n,this.open=0,this.localPreserveWS=!1;let r=t.topNode,i,a=yn(null,t.preserveWhitespace,0)|(n?vn:0);i=r?new bn(r.type,r.attrs,P.none,!0,t.topMatch||r.type.contentMatch,a):n?new bn(null,null,P.none,!0,null,a):new bn(e.schema.topNodeType,null,P.none,!0,null,a),this.nodes=[i],this.find=t.findPositions,this.needsBlock=!1}get top(){return this.nodes[this.open]}addDOM(e,t){e.nodeType==3?this.addTextNode(e,t):e.nodeType==1&&this.addElement(e,t)}addTextNode(e,t){let n=e.nodeValue,r=this.top,i=r.options&_n?`full`:this.localPreserveWS||(r.options&gn)>0,{schema:a}=this.parser;if(i===`full`||r.inlineContext(e)||/[^ \t\r\n\u000c]/.test(n)){if(!i){if(n=n.replace(/[ \t\r\n\u000c]+/g,` `),/^[ \t\r\n\u000c]/.test(n)&&this.open==this.nodes.length-1){let t=r.content[r.content.length-1],i=e.previousSibling;(!t||i&&i.nodeName==`BR`||t.isText&&/[ \t\r\n\u000c]$/.test(t.text))&&(n=n.slice(1))}}else if(i===`full`)n=n.replace(/\r\n?/g,`
|
|
4
4
|
`);else if(a.linebreakReplacement&&/[\r\n]/.test(n)&&this.top.findWrapping(a.linebreakReplacement.create())){let e=n.split(/\r?\n|\r/);for(let n=0;n<e.length;n++)n&&this.insertNode(a.linebreakReplacement.create(),t,!0),e[n]&&this.insertNode(a.text(e[n]),t,!/\S/.test(e[n]));n=``}else n=n.replace(/\r?\n|\r/g,` `);n&&this.insertNode(a.text(n),t,!/\S/.test(n)),this.findInText(e)}else this.findInside(e)}addElement(e,t,n){let r=this.localPreserveWS,i=this.top;(e.tagName==`PRE`||/pre/.test(e.style&&e.style.whiteSpace))&&(this.localPreserveWS=!0);let a=e.nodeName.toLowerCase(),o;hn.hasOwnProperty(a)&&this.parser.normalizeLists&&Sn(e);let s=this.options.ruleFromNode&&this.options.ruleFromNode(e)||(o=this.parser.matchTag(e,this,n));out:if(s?s.ignore:mn.hasOwnProperty(a))this.findInside(e),this.ignoreFallback(e,t);else if(!s||s.skip||s.closeParent){s&&s.closeParent?this.open=Math.max(0,this.open-1):s&&s.skip.nodeType&&(e=s.skip);let n,r=this.needsBlock;if(pn.hasOwnProperty(a))i.content.length&&i.content[0].isInline&&this.open&&(this.open--,i=this.top),n=!0,i.type||(this.needsBlock=!0);else if(!e.firstChild){this.leafFallback(e,t);break out}let o=s&&s.skip?t:this.readStyles(e,t);o&&this.addAll(e,o),n&&this.sync(i),this.needsBlock=r}else{let n=this.readStyles(e,t);n&&this.addElementByRule(e,s,n,s.consuming===!1?o:void 0)}this.localPreserveWS=r}leafFallback(e,t){e.nodeName==`BR`&&this.top.type&&this.top.type.inlineContent&&this.addTextNode(e.ownerDocument.createTextNode(`
|
|
@@ -214,4 +214,4 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
214
214
|
a { color: #7C8C72; }
|
|
215
215
|
.title { font-size: 20px; font-weight: 600; margin-bottom: 16px; padding-bottom: 8px;
|
|
216
216
|
border-bottom: 1px solid rgba(0,0,0,0.06); }
|
|
217
|
-
`;function KC({data:e,onSubmit:t,submitted:n,isStreaming:r}){let{title:i,content:a,filePath:o,readOnly:s}=e??{},c=i??`Document`,u=(0,A.useCallback)(e=>{t(JSON.stringify({_lifecycle:!0,component:`document-editor`,event:e,...o?{filePath:o}:{}}))},[t,o]),[d,f]=(0,A.useState)(`idle`),p=(0,A.useRef)(null),m=(0,A.useRef)(null),[_,y]=(0,A.useState)(!1),[b,S]=(0,A.useState)(!1),[C,w]=(0,A.useState)(`idle`),T=(0,A.useRef)(a),ee=(0,A.useMemo)(()=>ex.extend({markdownTokenizer:null}),[]),te=(0,A.useMemo)(()=>[tS.configure({orderedList:!1}),ee,Db.configure({openOnClick:!1}),zC,UC],[ee]),ne=(0,A.useCallback)(e=>e.replace(/\u2014/g,`-`).replace(/\u2013/g,`-`).replace(/\u201C/g,`"`).replace(/\u201D/g,`"`).replace(/\u2018/g,`'`).replace(/\u2019/g,`'`).replace(/\u2026/g,`...`).replace(/\u00A0/g,` `),[]),E=jm({extensions:te,content:(0,A.useMemo)(()=>a&&ne(a),[a,ne]),contentType:`markdown`,editable:!s,editorProps:{attributes:{class:`doc-editor__content`,role:`textbox`,"aria-multiline":`true`}},onUpdate:({editor:e})=>{s||(p.current&&clearTimeout(p.current),p.current=setTimeout(()=>{let n=e.getMarkdown();f(`saving`),t(JSON.stringify({action:`save`,content:n,...o?{filePath:o}:{}})),u(`auto-saved`),m.current&&clearTimeout(m.current),f(`saved`),m.current=setTimeout(()=>f(`idle`),2e3)},500))},onCreate:({editor:e})=>{e||y(!0)},onFocus:()=>S(!0),onBlur:()=>S(!1)}),D=VC({title:c,isStreaming:r,persistent:!0,channelName:`maxy-doc-editor`,renderPopout:(0,A.useCallback)((e,t)=>{let n=e.document;n.open(),n.close(),n.title=t;let r=n.createElement(`style`);r.textContent=GC,n.head.appendChild(r);let i=n.createElement(`div`);i.className=`title`,i.textContent=t,n.body.appendChild(i);let a=n.createElement(`pre`);a.style.whiteSpace=`pre-wrap`,a.style.fontFamily=`inherit`,a.style.background=`transparent`,a.style.padding=`0`,a.textContent=E?.getMarkdown()??``,n.body.appendChild(a)},[E]),onSyncMessage:(0,A.useCallback)(e=>{let t=e;t?.type===`content`&&t.markdown&&E&&E.commands.setContent(ne(t.markdown),{contentType:`markdown`})},[E,ne])});(0,A.useEffect)(()=>{D.poppedOut&&E&&D.syncToPopout({type:`content`,markdown:E.getMarkdown(),title:c})},[D.poppedOut]);let O=HC({onSubmit:t}),re=(0,A.useRef)(null);(0,A.useEffect)(()=>{if(!E||!a||a===T.current)return;T.current=a;let e=ne(a);if(re.current&&=(E.off(`blur`,re.current),null),!E.isFocused)E.commands.setContent(e,{contentType:`markdown`});else{let t=()=>{E.commands.setContent(e,{contentType:`markdown`}),E.off(`blur`,t),re.current=null};re.current=t,E.on(`blur`,t)}},[E,a,ne]),(0,A.useEffect)(()=>(u(`rendered`),()=>{p.current&&clearTimeout(p.current),m.current&&clearTimeout(m.current)}),[]);let ae=(0,A.useCallback)(()=>{if(!E)return;let{from:e,to:t}=E.state.selection;e!==t&&O.openCommentInput()},[E,O]),oe=(0,A.useCallback)(()=>{if(!E)return;let{from:e,to:t}=E.state.selection,n=E.state.doc.textBetween(e,t);if(!n)return;let r=O.submitComment(n,{startOffset:e,endOffset:t});r&&E.chain().focus().setMark(`comment`,{commentId:r,commentText:O.commentText,createdAt:new Date().toISOString()}).run()},[E,O]),ce=(0,A.useCallback)(()=>{s||!E||(S(!0),E.commands.focus())},[s,E]),le=(0,A.useCallback)(()=>{if(!E||!o)return;let e=E.getMarkdown();!e.trim()&&!window.confirm(`Save empty document?`)||(t(JSON.stringify({action:`approve`,content:e,filePath:o})),u(`approved`),w(`approved`))},[E,o,t,u]),ue=(0,A.useCallback)(()=>{if(!E)return;let e=E.getMarkdown(),n=(c||``).replace(/\.md$/i,``).toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,80)||`document`,r=new Blob([e],{type:`text/markdown;charset=utf-8`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${n}.md`,a.click(),URL.revokeObjectURL(i),t(JSON.stringify({_lifecycle:!0,component:`document-editor`,event:`downloaded`,title:c,contentLength:e.length,...o?{filePath:o}:{}}))},[E,c,o,t]);if(n&&!s)return(0,j.jsxs)(`div`,{className:`editor-base doc-editor doc-editor--approved`,children:[(0,j.jsxs)(`div`,{className:`editor-base__bar`,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base__title`,children:c}),(0,j.jsx)(`div`,{className:`editor-base__actions`,children:(0,j.jsx)(`span`,{className:`editor-base__status`,children:`Approved`})})]}),(0,j.jsx)(`div`,{className:`doc-editor__body`,children:(0,j.jsx)(WC,{content:a||``})})]});if(_||!E)return(0,j.jsxs)(`div`,{className:`editor-base doc-editor`,children:[(0,j.jsxs)(`div`,{className:`editor-base__bar`,...D.dragBarProps,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base__title`,children:c})]}),(0,j.jsx)(WC,{content:a||``})]});let de=typeof window<`u`&&window.innerWidth<640,fe=typeof BroadcastChannel<`u`,pe=(0,j.jsxs)(`div`,{className:`editor-base__actions`,children:[d===`saving`&&(0,j.jsx)(`span`,{className:`editor-base__status`,children:`Saving...`}),d===`saved`&&(0,j.jsx)(`span`,{className:`editor-base__status`,children:`Saved`}),C===`approved`&&(0,j.jsx)(`span`,{className:`editor-base__status`,children:`Approved`}),s&&(0,j.jsx)(`span`,{className:`editor-base__status`,children:`View only`}),o&&!s&&C!==`approved`&&(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:h,onClick:le,"aria-label":`Approve`,children:`Approve`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:se,onClick:ue,"aria-label":`Download`}),O.pendingComments.length>0&&(0,j.jsxs)(k,{variant:`ghost`,size:`sm`,onClick:O.sendComments,children:[`Send `,O.pendingComments.length,` comment`,O.pendingComments.length>1?`s`:``]}),!de&&fe&&!D.poppedOut&&(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:v,onClick:D.handlePopout,"aria-label":`Pop out`}),!D.fullscreen&&(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:Te,onClick:D.handleFullscreen,"aria-label":`Full screen`}),D.fullscreen&&(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:De,onClick:D.exitFullscreen,"aria-label":`Exit full screen`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:ie,onClick:D.handleMinimise,"aria-label":`Minimise`})]}),me=s?null:(0,j.jsx)(W_,{editor:E,children:(0,j.jsxs)(`div`,{className:`doc-editor__bubble-menu`,role:`toolbar`,"aria-label":`Formatting`,children:[(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:ye,onClick:()=>E.chain().focus().toggleBold().run(),"aria-label":`Bold`,"aria-pressed":E.isActive(`bold`)}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:Ce,onClick:()=>E.chain().focus().toggleItalic().run(),"aria-label":`Italic`,"aria-pressed":E.isActive(`italic`)}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:we,onClick:()=>{let e=window.prompt(`URL`);e&&E.chain().focus().setLink({href:e}).run()},"aria-label":`Link`,"aria-pressed":E.isActive(`link`)}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:be,onClick:()=>E.chain().focus().toggleCode().run(),"aria-label":`Code`,"aria-pressed":E.isActive(`code`)}),(0,j.jsx)(`div`,{className:`doc-editor__bubble-divider`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:Ee,onClick:ae,"aria-label":`Add comment`})]})}),he=O.showCommentInput?(0,j.jsxs)(`div`,{className:`doc-editor__comment-popover`,children:[(0,j.jsx)(`input`,{ref:O.commentInputRef,type:`text`,value:O.commentText,onChange:e=>O.setCommentText(e.target.value),onKeyDown:e=>{e.key===`Enter`&&oe(),e.key===`Escape`&&O.cancelComment()},placeholder:`Add a comment...`,className:`doc-editor__comment-input`,"aria-label":`Add comment`}),(0,j.jsxs)(`div`,{className:`doc-editor__comment-actions`,children:[(0,j.jsx)(k,{variant:`primary`,size:`sm`,onClick:oe,disabled:!O.commentText.trim(),children:`Add`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:x,onClick:O.cancelComment,"aria-label":`Cancel`})]})]}):null;if(D.fullscreen)return(0,j.jsxs)(`div`,{className:`editor-base-fullscreen`,children:[(0,j.jsxs)(`div`,{className:`editor-base-fullscreen__bar`,...D.dragBarProps,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base-fullscreen__title`,children:c}),pe]}),(0,j.jsx)(`div`,{className:`editor-base-fullscreen__body`,children:b||s?(0,j.jsxs)(j.Fragment,{children:[me,he,(0,j.jsx)(Cm,{editor:E})]}):(0,j.jsx)(`div`,{className:`doc-editor__preview`,onClick:ce,role:`button`,tabIndex:0,onKeyDown:e=>(e.key===`Enter`||e.key===` `)&&ce(),children:(0,j.jsx)(WC,{content:E?.getMarkdown()??a??``})})})]});if(D.poppedOut)return(0,j.jsx)(`div`,{className:`editor-base editor-base--popout`,children:(0,j.jsxs)(`div`,{className:`editor-base__bar`,...D.dragBarProps,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base__title`,children:c}),(0,j.jsxs)(`div`,{className:`editor-base__actions`,children:[(0,j.jsx)(`span`,{className:`editor-base__status`,children:`Popped out`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:ke,onClick:D.handlePopIn,"aria-label":`Pop back in`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:ie,onClick:D.handleMinimise,"aria-label":`Close`})]})]})});if(D.minimised)return(0,j.jsx)(`div`,{className:`editor-base editor-base--minimised`,onClick:D.handleExpand,role:`button`,tabIndex:0,onKeyDown:e=>e.key===`Enter`&&D.handleExpand(),children:(0,j.jsxs)(`div`,{className:`editor-base__bar`,...D.dragBarProps,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base__title`,children:c}),(0,j.jsxs)(`div`,{className:`editor-base__actions`,onClick:e=>e.stopPropagation(),children:[!de&&fe&&(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:v,onClick:D.handlePopout,"aria-label":`Pop out`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:Te,onClick:D.handleFullscreen,"aria-label":`Full screen`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:g,onClick:D.handleExpand,"aria-label":`Expand`})]})]})});let ge=E?.getMarkdown()??a??``;return(0,j.jsxs)(`div`,{className:`editor-base doc-editor`,children:[(0,j.jsxs)(`div`,{className:`editor-base__bar`,...D.dragBarProps,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base__title`,children:c}),pe]}),(0,j.jsx)(`div`,{className:`doc-editor__body`,children:b||s?(0,j.jsxs)(j.Fragment,{children:[me,he,(0,j.jsx)(Cm,{editor:E})]}):(0,j.jsx)(`div`,{className:`doc-editor__preview`,onClick:ce,role:`button`,tabIndex:0,onKeyDown:e=>(e.key===`Enter`||e.key===` `)&&ce(),children:(0,j.jsx)(WC,{content:ge})})})]})}var qC=()=>{},JC=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function YC(e){return JC.test(e)?`uuid`:e.startsWith(`agent-template:`)?`agent-template`:`other`}var XC={"null-attachmentId":`No file backing this artefact.`,"non-text-mime":`Content type cannot be displayed inline.`,"containment-rejected":`File path failed containment check; cannot display.`,"missing-on-disk":`File is missing on disk.`};function ZC({reason:e}){return(0,j.jsxs)(`div`,{className:`art-skip-banner`,role:`status`,children:[(0,j.jsx)(Se,{size:14}),(0,j.jsx)(`span`,{children:XC[e]})]})}function QC({src:e,name:t,docId:n}){let[r,i]=(0,A.useState)(!1),a=(0,A.useRef)(null),o=(0,A.useRef)(!1),s=(0,A.useRef)(!1),c=(0,A.useCallback)(e=>{s.current||(s.current=!0,console.info(`[admin-ui] artefact-pdf-fallback id=${n.slice(0,8)} reason=${e}`),i(!0))},[n]);(0,A.useEffect)(()=>{let e=setTimeout(()=>{o.current||c(`onload-timeout`)},3e3);return()=>clearTimeout(e)},[c]);let u=()=>{o.current=!0;try{let e=a.current?.contentDocument?.body;e&&e.children.length===0&&!e.textContent?.trim()&&c(`empty-body`)}catch{}};return r?(0,j.jsxs)(`a`,{className:`art-pdf-fallback`,href:e,download:t,children:[(0,j.jsx)(l,{size:20}),(0,j.jsxs)(`div`,{className:`art-pdf-fallback-text`,children:[(0,j.jsx)(`div`,{className:`art-pdf-fallback-name`,children:t}),(0,j.jsx)(`div`,{className:`art-pdf-fallback-hint`,children:`Your browser can't display this PDF inline. Click to download.`})]}),(0,j.jsx)(se,{size:16})]}):(0,j.jsx)(`iframe`,{ref:a,className:`art-pdf`,src:e,title:t,"aria-label":`PDF preview of ${t}`,onLoad:u,onError:()=>c(`onerror`)})}var $C={data:`Data`,graph:`Graph`};function ew({selection:e,trigger:t,cacheKey:n,onClose:r,onArtefactSaved:i,onSwapToGraph:a}){let o=e!==null,s=e?.surface??null,l=(0,A.useRef)(null),[d,f]=(0,A.useState)(null),p=e?.surface===`doc`?e.docId:null,m=[250,500,1e3,2e3],h=T(n),g=(0,A.useCallback)(e=>{if(!n||!p)return;let t={};try{t=JSON.parse(e)}catch{return}if(t.action!==`save`||typeof t.content!=`string`)return;f(null);let r=t.content,a=e=>{h(`/api/admin/sidebar-artefact-save`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:p,content:r})}).then(async t=>{if(t.status===503&&e<m.length){let t=m[e];console.info(`[admin-ui] artefact-save-retry docId=${p} attempt=${e+1} delayMs=${t} status=503`),setTimeout(()=>a(e+1),t);return}if(!t.ok){let n=(await t.json().catch(()=>({}))).error??`status ${t.status}`,r=t.status===503?`retries-exhausted`:`status-${t.status}`;f(`Save failed: ${n}`),console.error(`[admin-ui] artefact-save-failed docId=${p} status=${t.status} attempts=${e+1} source=${r} error="${n}"`);return}let n=await t.json();i?.(p,n.updatedAt,r)}).catch(t=>{let n=t instanceof Error?t.message:String(t);f(`Save failed: ${n}`),console.error(`[admin-ui] artefact-save-failed docId=${p} attempts=${e+1} error="${n}"`)})};a(0)},[n,p,i,h]);(0,A.useEffect)(()=>{f(null)},[p]),(0,A.useEffect)(()=>{let n=e?.surface===`doc`?e.docId:null,r=e?.surface===`graph`?e.focusNodeId??null:null,i=e?.surface??null,a=i===null?`closed`:`${i}:${n??`none`}:${r??`none`}`;if(a===l.current)return;let s=o?`open`:`closed`,c=o?t??`chat-link`:`toolbar-close`,u=i??l.current?.split(`:`)[0]??`doc`,d=n?` docIdShape=${YC(n)} docIdSample=${n.slice(0,8)}`:``;console.info(`[admin-ui] artefact-pane state=${s} docId=${n??`none`} trigger=${c} surface=${u}${d}`),l.current=a},[e,t,o]);let _=e?.surface===`doc`,v=_?(e.tag||e.name.split(`.`).pop()||`doc`).toUpperCase().slice(0,6):``,y=_?e.revision||`rev 1`:`live`,b=e&&e.surface!==`doc`?$C[e.surface]:``,S=_?e.name:b;return(0,j.jsxs)(`aside`,{className:`artefact`,"data-open":o,"data-surface":s??`none`,children:[(0,j.jsxs)(`div`,{className:`art-head`,children:[(0,j.jsxs)(`div`,{className:`left`,children:[!_&&s===`data`&&(0,j.jsx)(D,{size:14,className:`art-head-surface-icon`}),!_&&s===`graph`&&(0,j.jsx)(w,{size:14,className:`art-head-surface-icon`}),(0,j.jsx)(`span`,{className:`file-name`,children:S}),_&&(0,j.jsx)(`span`,{className:`file-tag`,children:v})]}),(0,j.jsxs)(`div`,{className:`right`,children:[_&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`button`,{className:`icon-btn`,title:`Copy`,type:`button`,"aria-label":`Copy`,onClick:()=>{u(e.content)},children:(0,j.jsx)(c,{size:14})}),(0,j.jsx)(`button`,{className:`icon-btn`,title:`Refresh`,type:`button`,"aria-label":`Refresh`,children:(0,j.jsx)(ae,{size:14})})]}),o&&(0,j.jsx)(`button`,{className:`icon-btn`,title:`Close`,type:`button`,"aria-label":`Close`,onClick:r,children:(0,j.jsx)(x,{size:14})})]})]}),(0,j.jsxs)(`div`,{className:`art-toolbar`,children:[(0,j.jsxs)(`span`,{className:`seg`,children:[(0,j.jsx)(`span`,{className:`bullet`}),(0,j.jsx)(`strong`,{children:_?`Artefact`:b})]}),(0,j.jsx)(`span`,{className:`right-meta`,children:y})]}),(0,j.jsxs)(`div`,{className:`art-body`,"data-surface":s??`none`,children:[_&&(()=>{let t=e.editable!==!1,r=e.skipReason??null,i=(e.mimeType??``).startsWith(`application/pdf`);if(r)return(0,j.jsx)(ZC,{reason:r});if(i&&n){let t=`/api/admin/sidebar-artefact-content?id=${encodeURIComponent(e.docId)}&session_key=${encodeURIComponent(n)}`;return(0,j.jsx)(QC,{src:t,name:e.name,docId:e.docId},t)}return(0,j.jsxs)(j.Fragment,{children:[d&&(0,j.jsx)(`div`,{className:`art-save-error`,role:`alert`,children:d}),(0,j.jsx)(KC,{data:{title:e.name,content:e.content,readOnly:!t},onSubmit:t?g:qC,submitted:!1})]})})(),s===`data`&&n&&(0,j.jsx)(ce,{cacheKey:n,onOpenInGraph:a?e=>{let t=le(e.properties);a(e.nodeId,t??e.labels[0]??null)}:void 0}),e?.surface===`graph`&&n&&(0,j.jsx)(oe,{cacheKey:n,initialFocus:e.focusNodeId?{nodeId:e.focusNodeId,nodeLabel:e.focusNodeLabel??null}:null,initialLabels:e.initialLabels??null})]}),(0,j.jsxs)(`div`,{className:`art-foot`,children:[(0,j.jsx)(`span`,{className:`left`,children:y}),(0,j.jsx)(`span`,{className:`right in-sync`,children:`in sync`})]})]})}function tw(e){if(e<60)return`${e}s`;let t=Math.floor(e/60),n=e%60;return n>0?`${t}m ${n}s`:`${t}m`}function nw(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function rw(e){let{show:t,onClose:n,claudeInfo:r,messages:i,sessionElapsed:a,conversationId:o,cacheKey:s}=e,[c,l]=(0,A.useState)(null);if(!t)return null;let d=i.flatMap(e=>e.events?.filter(e=>e.type===`usage`)??[]),f=d.at(-1),p=f?.peak_request_pct==null?f?.context_window?Math.round((f.input_tokens+f.cache_creation_tokens+f.cache_read_tokens)/f.context_window*100):0:Math.round(f.peak_request_pct*100),m=d.reduce((e,t)=>e+t.input_tokens+t.cache_creation_tokens+t.cache_read_tokens+t.output_tokens,0),h=i.flatMap(e=>e.events?.filter(e=>e.type===`rate_limit`)??[]).at(-1),g=d.reduce((e,t)=>e+(t.total_cost_usd??0),0),_=r?.account?.subscriptionType,v=e=>{let t=e*1e3-Date.now();if(t<=0)return`now`;let n=Math.floor(t/36e5),r=Math.floor(t%36e5/6e4);return n>0?`${n}h ${r}m`:`${r}m`};return(0,j.jsx)(`div`,{className:`claude-info-overlay`,onClick:n,children:(0,j.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),children:[(0,j.jsxs)(`div`,{className:`claude-info-header`,children:[(0,j.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`claude-info-icon`}),(0,j.jsx)(`span`,{children:`Claude Code`}),(0,j.jsx)(`button`,{className:`claude-info-close`,onClick:n,"aria-label":`Close`,children:`✕`})]}),(0,j.jsxs)(`div`,{className:`claude-info-section`,children:[(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Version`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:r?r.version:`…`})]}),(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Email`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:r?.account?.email??`…`})]})]}),(_||h||g>0)&&(0,j.jsxs)(`div`,{className:`claude-info-section`,children:[_&&(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Plan`}),(0,j.jsx)(`span`,{className:`claude-info-value`,style:{textTransform:`capitalize`},children:_})]}),h&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Usage`}),(0,j.jsxs)(`span`,{className:`claude-info-value`,children:[Math.round(h.utilization*100),`%`]})]}),(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Resets in`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:v(h.resetsAt)})]}),h.isUsingOverage&&(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Overage`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:`Active`})]})]}),g>0&&(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Session cost`}),(0,j.jsxs)(`span`,{className:`claude-info-value`,children:[`$`,g<.01?g.toFixed(4):g.toFixed(2)]})]})]}),(0,j.jsxs)(`div`,{className:`claude-info-section`,children:[(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Model`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:r?.model??`…`})]}),(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Context used`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:p>0?`${p}%`:`—`})]}),(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Tokens`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:m>0?nw(m):`—`})]}),(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:tw(a)})]}),(o||s)&&(()=>{let e=o??s??``;return(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,j.jsx)(`button`,{type:`button`,className:`claude-info-value claude-info-id-copy`,title:`${e} (${o?`flushed`:`pre-flush`}) — click to copy`,onClick:async()=>{l(await u(e)?`copied`:`failed`),setTimeout(()=>l(null),1200)},children:c===`copied`?`copied ✓`:c===`failed`?`copy failed ✕`:`${e.slice(0,8)}…`})]})})()]})]})})}function iw(e){let{urlSessionId:t,sessions:n,sessionsLoaded:r,sessionRowIds:i,sessionRowsConnected:a}=e;if(t==null)return{selectedSessionId:null,notFound:!1,source:`none`};let o=n.some(e=>e.sessionId===t),s=i.includes(t);return o&&s?{selectedSessionId:t,notFound:!1,source:`both`}:s?{selectedSessionId:t,notFound:!1,source:`sse`}:o?{selectedSessionId:t,notFound:!1,source:`rest`}:!r||!a?{selectedSessionId:t,notFound:!1,source:`none`}:{selectedSessionId:null,notFound:!0,source:`none`}}function aw(){let e=ve(),[t,n]=(0,A.useState)(()=>typeof window>`u`?null:new URLSearchParams(window.location.search).get(`sessionId`)),r=(0,A.useCallback)(e=>{if(n(e),typeof window>`u`)return;let t=e?`/?sessionId=${encodeURIComponent(e)}`:`/`;t!==window.location.pathname+window.location.search&&window.history.replaceState(null,``,t)},[]);(0,A.useEffect)(()=>{let e=()=>{n(new URLSearchParams(window.location.search).get(`sessionId`))};return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]);let[i,a]=(0,A.useState)(null),[o,s]=(0,A.useState)(null),[c,l]=(0,A.useState)(!1);(0,A.useEffect)(()=>{if(!c)return;let e=e=>{e.key===`Escape`&&l(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[c]);let u=(0,A.useCallback)(async()=>{let t=e.claudeInfo!=null;if(l(!0),t){console.info(`[admin-ui] claude-info-open cached=true ms=0`);return}let n=Date.now();try{let t=await fetch(`/api/admin/claude-info`);if(t.ok){let n=await t.json();e.setClaudeInfo(n)}console.info(`[admin-ui] claude-info-open cached=false ms=${Date.now()-n}`)}catch(e){console.error(`[admin-ui] claude-info-fetch-failed ms=${Date.now()-n} error="${e instanceof Error?e.message:String(e)}"`)}},[e]),d=(0,A.useCallback)(()=>{a(null),s(null)},[]),f=(0,A.useCallback)(e=>{console.info(`[admin-ui] session-not-found sessionId=${e.slice(0,8)} trigger=meta-404`)},[]),p=(0,A.useCallback)(({code:t,path:n})=>{console.warn(`[admin-auth] outcome=chat-tab-logout-on-401 code=${t} path=${n}`),e.handleLogout()},[e]);if(e.appState===`loading`)return(0,j.jsx)(`div`,{className:`connect-page`});if(e.appState===`set-pin`)return(0,j.jsx)(Me,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,setPinFormRef:e.setPinFormRef,onSubmit:e.handleSetPin,operatorName:e.operatorName,setOperatorName:e.setOperatorName});if(e.appState===`connect-claude`)return(0,j.jsx)(Fe,{authPolling:e.authPolling,setAuthPolling:e.setAuthPolling,authLoading:e.authLoading,setAuthLoading:e.setAuthLoading,pinError:e.pinError,setPinError:e.setPinError,setAppState:e.setAppState});if(e.appState===`enter-pin`)return(0,j.jsx)(Ne,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,onSubmit:e.handleLogin,onChangePin:e.handleChangePin,remoteAuthEnabled:e.remoteAuthEnabled,onSignOutRemote:e.handleLogout});if(e.appState===`account-picker`)return(0,j.jsx)(Pe,{accounts:e.accounts,loading:e.accountPickerLoading,error:e.pinError,onSelect:e.handleAccountSelect});let m=i!==null;return(0,j.jsx)(_,{cacheKey:e.cacheKey,onSessionExpired:p,surface:`chat`,children:(0,j.jsx)(S,{cacheKey:e.cacheKey,businessName:e.businessName,conversationId:e.conversationId,onLogout:e.handleLogout,userName:e.userName,userAvatar:e.userAvatar,role:e.role,selectedSessionId:t,onSelectSession:r,dataArtefact:m?`open`:`closed`,footer:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(st,{onOpen:u}),(0,j.jsx)(rw,{show:c,onClose:()=>l(!1),claudeInfo:e.claudeInfo,messages:[],sessionElapsed:0,conversationId:e.conversationId,cacheKey:e.cacheKey})]}),children:({sessionsState:n,sessionRowIds:a,sessionRowsConnected:s})=>{let{selectedSessionId:c,notFound:l,source:u}=iw({urlSessionId:t,sessions:n.sessions,sessionsLoaded:n.loaded,sessionRowIds:a,sessionRowsConnected:s});return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(b,{}),l?(0,j.jsx)(ow,{sessionId:t??``,onClose:()=>r(null)}):c&&e.cacheKey?(0,j.jsx)(it,{sessionId:c,cacheKey:e.cacheKey,onClose:()=>r(null),recentsActions:{setSessions:n.setSessions,refetch:n.refetch},liveRow:n.sessions.find(e=>e.sessionId===c),onSessionNotFound:f},c):(0,j.jsx)(`main`,{}),(0,j.jsx)(sw,{urlSessionId:t,selectedSessionId:c,notFound:l,source:u,sessionsLoaded:n.loaded,sessionRowsConnected:s}),m&&(0,j.jsx)(Be,{}),(0,j.jsx)(ew,{selection:i,trigger:o,cacheKey:e.cacheKey,onClose:d})]})}})})}function ow({sessionId:e,onClose:t}){return(0,j.jsxs)(`main`,{className:`session-meta-pane`,style:{padding:24,display:`flex`,flexDirection:`column`,gap:12},children:[(0,j.jsx)(`p`,{style:{margin:0,fontSize:13,color:`var(--text-secondary)`},children:`Session not found.`}),(0,j.jsxs)(`p`,{style:{margin:0,fontSize:12,color:`var(--text-tertiary)`},children:[e.slice(0,8),`… is not in the session list. It may have been purged or never existed.`]}),(0,j.jsx)(`div`,{children:(0,j.jsx)(`button`,{type:`button`,className:`action-btn`,onClick:t,children:`Close`})})]})}function sw({urlSessionId:e,selectedSessionId:t,notFound:n,source:r,sessionsLoaded:i,sessionRowsConnected:a}){let o=(0,A.useRef)(null);return(0,A.useEffect)(()=>{if(e!=null&&(!i||!a))return;let s=n?`not-found`:`applied`,c=`${e??`-`}::${t??`-`}::${s}::${r}`;o.current!==c&&(o.current=c,console.info(`[selection] route-param=${e??`-`} selected=${t??`-`} outcome=${s} source=${r}`))},[e,t,n,r,i,a]),null}(0,pe.createRoot)(document.getElementById(`root`)).render((0,j.jsx)(aw,{}));
|
|
217
|
+
`;function KC({data:e,onSubmit:t,submitted:n,isStreaming:r}){let{title:i,content:a,filePath:o,readOnly:s}=e??{},c=i??`Document`,u=(0,A.useCallback)(e=>{t(JSON.stringify({_lifecycle:!0,component:`document-editor`,event:e,...o?{filePath:o}:{}}))},[t,o]),[d,f]=(0,A.useState)(`idle`),p=(0,A.useRef)(null),m=(0,A.useRef)(null),[_,y]=(0,A.useState)(!1),[b,S]=(0,A.useState)(!1),[C,w]=(0,A.useState)(`idle`),T=(0,A.useRef)(a),ee=(0,A.useMemo)(()=>ex.extend({markdownTokenizer:null}),[]),te=(0,A.useMemo)(()=>[tS.configure({orderedList:!1}),ee,Db.configure({openOnClick:!1}),zC,UC],[ee]),ne=(0,A.useCallback)(e=>e.replace(/\u2014/g,`-`).replace(/\u2013/g,`-`).replace(/\u201C/g,`"`).replace(/\u201D/g,`"`).replace(/\u2018/g,`'`).replace(/\u2019/g,`'`).replace(/\u2026/g,`...`).replace(/\u00A0/g,` `),[]),E=jm({extensions:te,content:(0,A.useMemo)(()=>a&&ne(a),[a,ne]),contentType:`markdown`,editable:!s,editorProps:{attributes:{class:`doc-editor__content`,role:`textbox`,"aria-multiline":`true`}},onUpdate:({editor:e})=>{s||(p.current&&clearTimeout(p.current),p.current=setTimeout(()=>{let n=e.getMarkdown();f(`saving`),t(JSON.stringify({action:`save`,content:n,...o?{filePath:o}:{}})),u(`auto-saved`),m.current&&clearTimeout(m.current),f(`saved`),m.current=setTimeout(()=>f(`idle`),2e3)},500))},onCreate:({editor:e})=>{e||y(!0)},onFocus:()=>S(!0),onBlur:()=>S(!1)}),D=VC({title:c,isStreaming:r,persistent:!0,channelName:`maxy-doc-editor`,renderPopout:(0,A.useCallback)((e,t)=>{let n=e.document;n.open(),n.close(),n.title=t;let r=n.createElement(`style`);r.textContent=GC,n.head.appendChild(r);let i=n.createElement(`div`);i.className=`title`,i.textContent=t,n.body.appendChild(i);let a=n.createElement(`pre`);a.style.whiteSpace=`pre-wrap`,a.style.fontFamily=`inherit`,a.style.background=`transparent`,a.style.padding=`0`,a.textContent=E?.getMarkdown()??``,n.body.appendChild(a)},[E]),onSyncMessage:(0,A.useCallback)(e=>{let t=e;t?.type===`content`&&t.markdown&&E&&E.commands.setContent(ne(t.markdown),{contentType:`markdown`})},[E,ne])});(0,A.useEffect)(()=>{D.poppedOut&&E&&D.syncToPopout({type:`content`,markdown:E.getMarkdown(),title:c})},[D.poppedOut]);let O=HC({onSubmit:t}),re=(0,A.useRef)(null);(0,A.useEffect)(()=>{if(!E||!a||a===T.current)return;T.current=a;let e=ne(a);if(re.current&&=(E.off(`blur`,re.current),null),!E.isFocused)E.commands.setContent(e,{contentType:`markdown`});else{let t=()=>{E.commands.setContent(e,{contentType:`markdown`}),E.off(`blur`,t),re.current=null};re.current=t,E.on(`blur`,t)}},[E,a,ne]),(0,A.useEffect)(()=>(u(`rendered`),()=>{p.current&&clearTimeout(p.current),m.current&&clearTimeout(m.current)}),[]);let ae=(0,A.useCallback)(()=>{if(!E)return;let{from:e,to:t}=E.state.selection;e!==t&&O.openCommentInput()},[E,O]),oe=(0,A.useCallback)(()=>{if(!E)return;let{from:e,to:t}=E.state.selection,n=E.state.doc.textBetween(e,t);if(!n)return;let r=O.submitComment(n,{startOffset:e,endOffset:t});r&&E.chain().focus().setMark(`comment`,{commentId:r,commentText:O.commentText,createdAt:new Date().toISOString()}).run()},[E,O]),ce=(0,A.useCallback)(()=>{s||!E||(S(!0),E.commands.focus())},[s,E]),le=(0,A.useCallback)(()=>{if(!E||!o)return;let e=E.getMarkdown();!e.trim()&&!window.confirm(`Save empty document?`)||(t(JSON.stringify({action:`approve`,content:e,filePath:o})),u(`approved`),w(`approved`))},[E,o,t,u]),ue=(0,A.useCallback)(()=>{if(!E)return;let e=E.getMarkdown(),n=(c||``).replace(/\.md$/i,``).toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,80)||`document`,r=new Blob([e],{type:`text/markdown;charset=utf-8`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${n}.md`,a.click(),URL.revokeObjectURL(i),t(JSON.stringify({_lifecycle:!0,component:`document-editor`,event:`downloaded`,title:c,contentLength:e.length,...o?{filePath:o}:{}}))},[E,c,o,t]);if(n&&!s)return(0,j.jsxs)(`div`,{className:`editor-base doc-editor doc-editor--approved`,children:[(0,j.jsxs)(`div`,{className:`editor-base__bar`,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base__title`,children:c}),(0,j.jsx)(`div`,{className:`editor-base__actions`,children:(0,j.jsx)(`span`,{className:`editor-base__status`,children:`Approved`})})]}),(0,j.jsx)(`div`,{className:`doc-editor__body`,children:(0,j.jsx)(WC,{content:a||``})})]});if(_||!E)return(0,j.jsxs)(`div`,{className:`editor-base doc-editor`,children:[(0,j.jsxs)(`div`,{className:`editor-base__bar`,...D.dragBarProps,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base__title`,children:c})]}),(0,j.jsx)(WC,{content:a||``})]});let de=typeof window<`u`&&window.innerWidth<640,fe=typeof BroadcastChannel<`u`,pe=(0,j.jsxs)(`div`,{className:`editor-base__actions`,children:[d===`saving`&&(0,j.jsx)(`span`,{className:`editor-base__status`,children:`Saving...`}),d===`saved`&&(0,j.jsx)(`span`,{className:`editor-base__status`,children:`Saved`}),C===`approved`&&(0,j.jsx)(`span`,{className:`editor-base__status`,children:`Approved`}),s&&(0,j.jsx)(`span`,{className:`editor-base__status`,children:`View only`}),o&&!s&&C!==`approved`&&(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:h,onClick:le,"aria-label":`Approve`,children:`Approve`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:se,onClick:ue,"aria-label":`Download`}),O.pendingComments.length>0&&(0,j.jsxs)(k,{variant:`ghost`,size:`sm`,onClick:O.sendComments,children:[`Send `,O.pendingComments.length,` comment`,O.pendingComments.length>1?`s`:``]}),!de&&fe&&!D.poppedOut&&(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:v,onClick:D.handlePopout,"aria-label":`Pop out`}),!D.fullscreen&&(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:Te,onClick:D.handleFullscreen,"aria-label":`Full screen`}),D.fullscreen&&(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:De,onClick:D.exitFullscreen,"aria-label":`Exit full screen`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:ie,onClick:D.handleMinimise,"aria-label":`Minimise`})]}),me=s?null:(0,j.jsx)(W_,{editor:E,children:(0,j.jsxs)(`div`,{className:`doc-editor__bubble-menu`,role:`toolbar`,"aria-label":`Formatting`,children:[(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:ye,onClick:()=>E.chain().focus().toggleBold().run(),"aria-label":`Bold`,"aria-pressed":E.isActive(`bold`)}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:Ce,onClick:()=>E.chain().focus().toggleItalic().run(),"aria-label":`Italic`,"aria-pressed":E.isActive(`italic`)}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:we,onClick:()=>{let e=window.prompt(`URL`);e&&E.chain().focus().setLink({href:e}).run()},"aria-label":`Link`,"aria-pressed":E.isActive(`link`)}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:be,onClick:()=>E.chain().focus().toggleCode().run(),"aria-label":`Code`,"aria-pressed":E.isActive(`code`)}),(0,j.jsx)(`div`,{className:`doc-editor__bubble-divider`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:Ee,onClick:ae,"aria-label":`Add comment`})]})}),he=O.showCommentInput?(0,j.jsxs)(`div`,{className:`doc-editor__comment-popover`,children:[(0,j.jsx)(`input`,{ref:O.commentInputRef,type:`text`,value:O.commentText,onChange:e=>O.setCommentText(e.target.value),onKeyDown:e=>{e.key===`Enter`&&oe(),e.key===`Escape`&&O.cancelComment()},placeholder:`Add a comment...`,className:`doc-editor__comment-input`,"aria-label":`Add comment`}),(0,j.jsxs)(`div`,{className:`doc-editor__comment-actions`,children:[(0,j.jsx)(k,{variant:`primary`,size:`sm`,onClick:oe,disabled:!O.commentText.trim(),children:`Add`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:x,onClick:O.cancelComment,"aria-label":`Cancel`})]})]}):null;if(D.fullscreen)return(0,j.jsxs)(`div`,{className:`editor-base-fullscreen`,children:[(0,j.jsxs)(`div`,{className:`editor-base-fullscreen__bar`,...D.dragBarProps,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base-fullscreen__title`,children:c}),pe]}),(0,j.jsx)(`div`,{className:`editor-base-fullscreen__body`,children:b||s?(0,j.jsxs)(j.Fragment,{children:[me,he,(0,j.jsx)(Cm,{editor:E})]}):(0,j.jsx)(`div`,{className:`doc-editor__preview`,onClick:ce,role:`button`,tabIndex:0,onKeyDown:e=>(e.key===`Enter`||e.key===` `)&&ce(),children:(0,j.jsx)(WC,{content:E?.getMarkdown()??a??``})})})]});if(D.poppedOut)return(0,j.jsx)(`div`,{className:`editor-base editor-base--popout`,children:(0,j.jsxs)(`div`,{className:`editor-base__bar`,...D.dragBarProps,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base__title`,children:c}),(0,j.jsxs)(`div`,{className:`editor-base__actions`,children:[(0,j.jsx)(`span`,{className:`editor-base__status`,children:`Popped out`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:ke,onClick:D.handlePopIn,"aria-label":`Pop back in`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:ie,onClick:D.handleMinimise,"aria-label":`Close`})]})]})});if(D.minimised)return(0,j.jsx)(`div`,{className:`editor-base editor-base--minimised`,onClick:D.handleExpand,role:`button`,tabIndex:0,onKeyDown:e=>e.key===`Enter`&&D.handleExpand(),children:(0,j.jsxs)(`div`,{className:`editor-base__bar`,...D.dragBarProps,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base__title`,children:c}),(0,j.jsxs)(`div`,{className:`editor-base__actions`,onClick:e=>e.stopPropagation(),children:[!de&&fe&&(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:v,onClick:D.handlePopout,"aria-label":`Pop out`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:Te,onClick:D.handleFullscreen,"aria-label":`Full screen`}),(0,j.jsx)(k,{variant:`ghost`,size:`sm`,icon:g,onClick:D.handleExpand,"aria-label":`Expand`})]})]})});let ge=E?.getMarkdown()??a??``;return(0,j.jsxs)(`div`,{className:`editor-base doc-editor`,children:[(0,j.jsxs)(`div`,{className:`editor-base__bar`,...D.dragBarProps,children:[(0,j.jsx)(l,{className:`editor-base__icon`}),(0,j.jsx)(`span`,{className:`editor-base__title`,children:c}),pe]}),(0,j.jsx)(`div`,{className:`doc-editor__body`,children:b||s?(0,j.jsxs)(j.Fragment,{children:[me,he,(0,j.jsx)(Cm,{editor:E})]}):(0,j.jsx)(`div`,{className:`doc-editor__preview`,onClick:ce,role:`button`,tabIndex:0,onKeyDown:e=>(e.key===`Enter`||e.key===` `)&&ce(),children:(0,j.jsx)(WC,{content:ge})})})]})}var qC=()=>{},JC=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function YC(e){return JC.test(e)?`uuid`:e.startsWith(`agent-template:`)?`agent-template`:`other`}var XC={"null-attachmentId":`No file backing this artefact.`,"non-text-mime":`Content type cannot be displayed inline.`,"containment-rejected":`File path failed containment check; cannot display.`,"missing-on-disk":`File is missing on disk.`};function ZC({reason:e}){return(0,j.jsxs)(`div`,{className:`art-skip-banner`,role:`status`,children:[(0,j.jsx)(Se,{size:14}),(0,j.jsx)(`span`,{children:XC[e]})]})}function QC({src:e,name:t,docId:n}){let[r,i]=(0,A.useState)(!1),a=(0,A.useRef)(null),o=(0,A.useRef)(!1),s=(0,A.useRef)(!1),c=(0,A.useCallback)(e=>{s.current||(s.current=!0,console.info(`[admin-ui] artefact-pdf-fallback id=${n.slice(0,8)} reason=${e}`),i(!0))},[n]);(0,A.useEffect)(()=>{let e=setTimeout(()=>{o.current||c(`onload-timeout`)},3e3);return()=>clearTimeout(e)},[c]);let u=()=>{o.current=!0;try{let e=a.current?.contentDocument?.body;e&&e.children.length===0&&!e.textContent?.trim()&&c(`empty-body`)}catch{}};return r?(0,j.jsxs)(`a`,{className:`art-pdf-fallback`,href:e,download:t,children:[(0,j.jsx)(l,{size:20}),(0,j.jsxs)(`div`,{className:`art-pdf-fallback-text`,children:[(0,j.jsx)(`div`,{className:`art-pdf-fallback-name`,children:t}),(0,j.jsx)(`div`,{className:`art-pdf-fallback-hint`,children:`Your browser can't display this PDF inline. Click to download.`})]}),(0,j.jsx)(se,{size:16})]}):(0,j.jsx)(`iframe`,{ref:a,className:`art-pdf`,src:e,title:t,"aria-label":`PDF preview of ${t}`,onLoad:u,onError:()=>c(`onerror`)})}var $C={data:`Data`,graph:`Graph`};function ew({selection:e,trigger:t,cacheKey:n,onClose:r,onArtefactSaved:i,onSwapToGraph:a}){let o=e!==null,s=e?.surface??null,l=(0,A.useRef)(null),[d,f]=(0,A.useState)(null),p=e?.surface===`doc`?e.docId:null,m=[250,500,1e3,2e3],h=T(n),g=(0,A.useCallback)(e=>{if(!n||!p)return;let t={};try{t=JSON.parse(e)}catch{return}if(t.action!==`save`||typeof t.content!=`string`)return;f(null);let r=t.content,a=e=>{h(`/api/admin/sidebar-artefact-save`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:p,content:r})}).then(async t=>{if(t.status===503&&e<m.length){let t=m[e];console.info(`[admin-ui] artefact-save-retry docId=${p} attempt=${e+1} delayMs=${t} status=503`),setTimeout(()=>a(e+1),t);return}if(!t.ok){let n=(await t.json().catch(()=>({}))).error??`status ${t.status}`,r=t.status===503?`retries-exhausted`:`status-${t.status}`;f(`Save failed: ${n}`),console.error(`[admin-ui] artefact-save-failed docId=${p} status=${t.status} attempts=${e+1} source=${r} error="${n}"`);return}let n=await t.json();i?.(p,n.updatedAt,r)}).catch(t=>{let n=t instanceof Error?t.message:String(t);f(`Save failed: ${n}`),console.error(`[admin-ui] artefact-save-failed docId=${p} attempts=${e+1} error="${n}"`)})};a(0)},[n,p,i,h]);(0,A.useEffect)(()=>{f(null)},[p]),(0,A.useEffect)(()=>{let n=e?.surface===`doc`?e.docId:null,r=e?.surface===`graph`?e.focusNodeId??null:null,i=e?.surface??null,a=i===null?`closed`:`${i}:${n??`none`}:${r??`none`}`;if(a===l.current)return;let s=o?`open`:`closed`,c=o?t??`chat-link`:`toolbar-close`,u=i??l.current?.split(`:`)[0]??`doc`,d=n?` docIdShape=${YC(n)} docIdSample=${n.slice(0,8)}`:``;console.info(`[admin-ui] artefact-pane state=${s} docId=${n??`none`} trigger=${c} surface=${u}${d}`),l.current=a},[e,t,o]);let _=e?.surface===`doc`,v=_?(e.tag||e.name.split(`.`).pop()||`doc`).toUpperCase().slice(0,6):``,y=_?e.revision||`rev 1`:`live`,b=e&&e.surface!==`doc`?$C[e.surface]:``,S=_?e.name:b;return(0,j.jsxs)(`aside`,{className:`artefact`,"data-open":o,"data-surface":s??`none`,children:[(0,j.jsxs)(`div`,{className:`art-head`,children:[(0,j.jsxs)(`div`,{className:`left`,children:[!_&&s===`data`&&(0,j.jsx)(D,{size:14,className:`art-head-surface-icon`}),!_&&s===`graph`&&(0,j.jsx)(w,{size:14,className:`art-head-surface-icon`}),(0,j.jsx)(`span`,{className:`file-name`,children:S}),_&&(0,j.jsx)(`span`,{className:`file-tag`,children:v})]}),(0,j.jsxs)(`div`,{className:`right`,children:[_&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`button`,{className:`icon-btn`,title:`Copy`,type:`button`,"aria-label":`Copy`,onClick:()=>{u(e.content)},children:(0,j.jsx)(c,{size:14})}),(0,j.jsx)(`button`,{className:`icon-btn`,title:`Refresh`,type:`button`,"aria-label":`Refresh`,children:(0,j.jsx)(ae,{size:14})})]}),o&&(0,j.jsx)(`button`,{className:`icon-btn`,title:`Close`,type:`button`,"aria-label":`Close`,onClick:r,children:(0,j.jsx)(x,{size:14})})]})]}),(0,j.jsxs)(`div`,{className:`art-toolbar`,children:[(0,j.jsxs)(`span`,{className:`seg`,children:[(0,j.jsx)(`span`,{className:`bullet`}),(0,j.jsx)(`strong`,{children:_?`Artefact`:b})]}),(0,j.jsx)(`span`,{className:`right-meta`,children:y})]}),(0,j.jsxs)(`div`,{className:`art-body`,"data-surface":s??`none`,children:[_&&(()=>{let t=e.editable!==!1,r=e.skipReason??null,i=(e.mimeType??``).startsWith(`application/pdf`);if(r)return(0,j.jsx)(ZC,{reason:r});if(i&&n){let t=`/api/admin/sidebar-artefact-content?id=${encodeURIComponent(e.docId)}&session_key=${encodeURIComponent(n)}`;return(0,j.jsx)(QC,{src:t,name:e.name,docId:e.docId},t)}return(0,j.jsxs)(j.Fragment,{children:[d&&(0,j.jsx)(`div`,{className:`art-save-error`,role:`alert`,children:d}),(0,j.jsx)(KC,{data:{title:e.name,content:e.content,readOnly:!t},onSubmit:t?g:qC,submitted:!1})]})})(),s===`data`&&n&&(0,j.jsx)(ce,{cacheKey:n,onOpenInGraph:a?e=>{let t=le(e.properties);a(e.nodeId,t??e.labels[0]??null)}:void 0}),e?.surface===`graph`&&n&&(0,j.jsx)(oe,{cacheKey:n,initialFocus:e.focusNodeId?{nodeId:e.focusNodeId,nodeLabel:e.focusNodeLabel??null}:null,initialLabels:e.initialLabels??null})]}),(0,j.jsxs)(`div`,{className:`art-foot`,children:[(0,j.jsx)(`span`,{className:`left`,children:y}),(0,j.jsx)(`span`,{className:`right in-sync`,children:`in sync`})]})]})}function tw(e){if(e<60)return`${e}s`;let t=Math.floor(e/60),n=e%60;return n>0?`${t}m ${n}s`:`${t}m`}function nw(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function rw(e){let{show:t,onClose:n,claudeInfo:r,messages:i,sessionElapsed:a,sessionId:o,cacheKey:s}=e,[c,l]=(0,A.useState)(null);if(!t)return null;let d=i.flatMap(e=>e.events?.filter(e=>e.type===`usage`)??[]),f=d.at(-1),p=f?.peak_request_pct==null?f?.context_window?Math.round((f.input_tokens+f.cache_creation_tokens+f.cache_read_tokens)/f.context_window*100):0:Math.round(f.peak_request_pct*100),m=d.reduce((e,t)=>e+t.input_tokens+t.cache_creation_tokens+t.cache_read_tokens+t.output_tokens,0),h=i.flatMap(e=>e.events?.filter(e=>e.type===`rate_limit`)??[]).at(-1),g=d.reduce((e,t)=>e+(t.total_cost_usd??0),0),_=r?.account?.subscriptionType,v=e=>{let t=e*1e3-Date.now();if(t<=0)return`now`;let n=Math.floor(t/36e5),r=Math.floor(t%36e5/6e4);return n>0?`${n}h ${r}m`:`${r}m`};return(0,j.jsx)(`div`,{className:`claude-info-overlay`,onClick:n,children:(0,j.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),children:[(0,j.jsxs)(`div`,{className:`claude-info-header`,children:[(0,j.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`claude-info-icon`}),(0,j.jsx)(`span`,{children:`Claude Code`}),(0,j.jsx)(`button`,{className:`claude-info-close`,onClick:n,"aria-label":`Close`,children:`✕`})]}),(0,j.jsxs)(`div`,{className:`claude-info-section`,children:[(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Version`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:r?r.version:`…`})]}),(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Email`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:r?.account?.email??`…`})]})]}),(_||h||g>0)&&(0,j.jsxs)(`div`,{className:`claude-info-section`,children:[_&&(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Plan`}),(0,j.jsx)(`span`,{className:`claude-info-value`,style:{textTransform:`capitalize`},children:_})]}),h&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Usage`}),(0,j.jsxs)(`span`,{className:`claude-info-value`,children:[Math.round(h.utilization*100),`%`]})]}),(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Resets in`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:v(h.resetsAt)})]}),h.isUsingOverage&&(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Overage`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:`Active`})]})]}),g>0&&(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Session cost`}),(0,j.jsxs)(`span`,{className:`claude-info-value`,children:[`$`,g<.01?g.toFixed(4):g.toFixed(2)]})]})]}),(0,j.jsxs)(`div`,{className:`claude-info-section`,children:[(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Model`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:r?.model??`…`})]}),(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Context used`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:p>0?`${p}%`:`—`})]}),(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Tokens`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:m>0?nw(m):`—`})]}),(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,j.jsx)(`span`,{className:`claude-info-value`,children:tw(a)})]}),(o||s)&&(()=>{let e=o??s??``;return(0,j.jsxs)(`div`,{className:`claude-info-row`,children:[(0,j.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,j.jsx)(`button`,{type:`button`,className:`claude-info-value claude-info-id-copy`,title:`${e} (${o?`flushed`:`pre-flush`}) — click to copy`,onClick:async()=>{l(await u(e)?`copied`:`failed`),setTimeout(()=>l(null),1200)},children:c===`copied`?`copied ✓`:c===`failed`?`copy failed ✕`:`${e.slice(0,8)}…`})]})})()]})]})})}function iw(e){let{urlSessionId:t,sessions:n,sessionsLoaded:r,sessionRowIds:i,sessionRowsConnected:a}=e;if(t==null)return{selectedSessionId:null,notFound:!1,source:`none`};let o=n.some(e=>e.sessionId===t),s=i.includes(t);return o&&s?{selectedSessionId:t,notFound:!1,source:`both`}:s?{selectedSessionId:t,notFound:!1,source:`sse`}:o?{selectedSessionId:t,notFound:!1,source:`rest`}:!r||!a?{selectedSessionId:t,notFound:!1,source:`none`}:{selectedSessionId:null,notFound:!0,source:`none`}}function aw(){let e=ve(),[t,n]=(0,A.useState)(()=>typeof window>`u`?null:new URLSearchParams(window.location.search).get(`sessionId`)),r=(0,A.useCallback)(e=>{if(n(e),typeof window>`u`)return;let t=e?`/?sessionId=${encodeURIComponent(e)}`:`/`;t!==window.location.pathname+window.location.search&&window.history.replaceState(null,``,t)},[]);(0,A.useEffect)(()=>{let e=()=>{n(new URLSearchParams(window.location.search).get(`sessionId`))};return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[]);let[i,a]=(0,A.useState)(null),[o,s]=(0,A.useState)(null),[c,l]=(0,A.useState)(!1);(0,A.useEffect)(()=>{if(!c)return;let e=e=>{e.key===`Escape`&&l(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[c]);let u=(0,A.useCallback)(async()=>{let t=e.claudeInfo!=null;if(l(!0),t){console.info(`[admin-ui] claude-info-open cached=true ms=0`);return}let n=Date.now();try{let t=await fetch(`/api/admin/claude-info`);if(t.ok){let n=await t.json();e.setClaudeInfo(n)}console.info(`[admin-ui] claude-info-open cached=false ms=${Date.now()-n}`)}catch(e){console.error(`[admin-ui] claude-info-fetch-failed ms=${Date.now()-n} error="${e instanceof Error?e.message:String(e)}"`)}},[e]),d=(0,A.useCallback)(()=>{a(null),s(null)},[]),f=(0,A.useCallback)(e=>{console.info(`[admin-ui] session-not-found sessionId=${e.slice(0,8)} trigger=meta-404`)},[]),p=(0,A.useCallback)(({code:t,path:n})=>{console.warn(`[admin-auth] outcome=chat-tab-logout-on-401 code=${t} path=${n}`),e.handleLogout()},[e]);if(e.appState===`loading`)return(0,j.jsx)(`div`,{className:`connect-page`});if(e.appState===`set-pin`)return(0,j.jsx)(Me,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,setPinFormRef:e.setPinFormRef,onSubmit:e.handleSetPin,operatorName:e.operatorName,setOperatorName:e.setOperatorName});if(e.appState===`connect-claude`)return(0,j.jsx)(Fe,{authPolling:e.authPolling,setAuthPolling:e.setAuthPolling,authLoading:e.authLoading,setAuthLoading:e.setAuthLoading,pinError:e.pinError,setPinError:e.setPinError,setAppState:e.setAppState});if(e.appState===`enter-pin`)return(0,j.jsx)(Ne,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,onSubmit:e.handleLogin,onChangePin:e.handleChangePin,remoteAuthEnabled:e.remoteAuthEnabled,onSignOutRemote:e.handleLogout});if(e.appState===`account-picker`)return(0,j.jsx)(Pe,{accounts:e.accounts,loading:e.accountPickerLoading,error:e.pinError,onSelect:e.handleAccountSelect});let m=i!==null;return(0,j.jsx)(_,{cacheKey:e.cacheKey,onSessionExpired:p,surface:`chat`,children:(0,j.jsx)(S,{cacheKey:e.cacheKey,businessName:e.businessName,sessionId:e.sessionId,onLogout:e.handleLogout,userName:e.userName,userAvatar:e.userAvatar,role:e.role,selectedSessionId:t,onSelectSession:r,dataArtefact:m?`open`:`closed`,footer:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(st,{onOpen:u}),(0,j.jsx)(rw,{show:c,onClose:()=>l(!1),claudeInfo:e.claudeInfo,messages:[],sessionElapsed:0,sessionId:e.sessionId,cacheKey:e.cacheKey})]}),children:({sessionsState:n,sessionRowIds:a,sessionRowsConnected:s})=>{let{selectedSessionId:c,notFound:l,source:u}=iw({urlSessionId:t,sessions:n.sessions,sessionsLoaded:n.loaded,sessionRowIds:a,sessionRowsConnected:s});return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(b,{}),l?(0,j.jsx)(ow,{sessionId:t??``,onClose:()=>r(null)}):c&&e.cacheKey?(0,j.jsx)(it,{sessionId:c,cacheKey:e.cacheKey,onClose:()=>r(null),recentsActions:{setSessions:n.setSessions,refetch:n.refetch},liveRow:n.sessions.find(e=>e.sessionId===c),onSessionNotFound:f},c):(0,j.jsx)(`main`,{}),(0,j.jsx)(sw,{urlSessionId:t,selectedSessionId:c,notFound:l,source:u,sessionsLoaded:n.loaded,sessionRowsConnected:s}),m&&(0,j.jsx)(Be,{}),(0,j.jsx)(ew,{selection:i,trigger:o,cacheKey:e.cacheKey,onClose:d})]})}})})}function ow({sessionId:e,onClose:t}){return(0,j.jsxs)(`main`,{className:`session-meta-pane`,style:{padding:24,display:`flex`,flexDirection:`column`,gap:12},children:[(0,j.jsx)(`p`,{style:{margin:0,fontSize:13,color:`var(--text-secondary)`},children:`Session not found.`}),(0,j.jsxs)(`p`,{style:{margin:0,fontSize:12,color:`var(--text-tertiary)`},children:[e.slice(0,8),`… is not in the session list. It may have been purged or never existed.`]}),(0,j.jsx)(`div`,{children:(0,j.jsx)(`button`,{type:`button`,className:`action-btn`,onClick:t,children:`Close`})})]})}function sw({urlSessionId:e,selectedSessionId:t,notFound:n,source:r,sessionsLoaded:i,sessionRowsConnected:a}){let o=(0,A.useRef)(null);return(0,A.useEffect)(()=>{if(e!=null&&(!i||!a))return;let s=n?`not-found`:`applied`,c=`${e??`-`}::${t??`-`}::${s}::${r}`;o.current!==c&&(o.current=c,console.info(`[selection] route-param=${e??`-`} selected=${t??`-`} outcome=${s} source=${r}`))},[e,t,n,r,i,a]),null}(0,pe.createRoot)(document.getElementById(`root`)).render((0,j.jsx)(aw,{}));
|