plexora 0.0.32__tar.gz → 0.0.35__tar.gz
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.
- {plexora-0.0.32/plexora.egg-info → plexora-0.0.35}/PKG-INFO +2 -1
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/bridge_wire.py +19 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/project.py +69 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/api/plugin.py +29 -7
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/__init__.py +7 -6
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureQuickEdit.js +28 -7
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figure_builder.css +2 -2
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/capabilities_session.py +23 -3
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/report.py +17 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/transitions.py +3 -3
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/model.py +0 -16
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/routes.py +3 -1
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/remote_sessions.py +14 -2
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/agent_routes.py +3 -2
- {plexora-0.0.32 → plexora-0.0.35/plexora.egg-info}/PKG-INFO +2 -1
- {plexora-0.0.32 → plexora-0.0.35}/plexora.egg-info/requires.txt +1 -0
- plexora-0.0.35/plexora_intelligence/__init__.py +250 -0
- plexora-0.0.35/plexora_intelligence/guest.json +6497 -0
- {plexora-0.0.32 → plexora-0.0.35}/pyproject.toml +12 -1
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_http_capabilities.py +18 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_harness.py +22 -3
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_autogate_units.py +2 -1
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_bridge_mcp.py +16 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_cli.py +11 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_connect.py +4 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_delta.py +6 -10
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_session.py +39 -0
- plexora-0.0.35/tests/test_intelligence_registration.py +316 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_licensing_hardening.py +2 -1
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mini_map.py +4 -3
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_plugins.py +30 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_project_bind.py +100 -1
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_connect.py +62 -8
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_settings_remotes_page.py +4 -2
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_node.py +13 -0
- plexora-0.0.32/plexora_intelligence/__init__.py +0 -126
- plexora-0.0.32/plexora_intelligence/guest.json +0 -2594
- plexora-0.0.32/tests/test_intelligence_registration.py +0 -117
- {plexora-0.0.32 → plexora-0.0.35}/LICENSE +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/MANIFEST.in +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/README.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/__main__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/_guard.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/_lifetime.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/_logging.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/_resources.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/_subprocess.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/_transient_locks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/_url.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/artifacts.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/attach.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/audit.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/bridge_provider.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/bridge_roles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/cell_exclusions.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/cell_explain.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/cell_gallery.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/coordinates.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/bridge.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/cells.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/image.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/jobs.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/operations.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/scene.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/selection.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/surface.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/table.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/viewer.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/visual.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/volume.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/core/volume_analysis.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/errors.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/calibration.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/cell_window.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/collage.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/crops.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/density_plot.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/display_contrast.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/display_grid.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/image_cells.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/image_qc.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/evidence/sheet_layout.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/expression.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/gate_panel.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/gate_rule.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/gate_sampling.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/jobs.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/limits.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/plots.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/policy.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/presets.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/receipts.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/registry.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/render.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/render_spec.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/report.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/revision.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/scene_models.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/schemas.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/sections.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/session.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/sessions/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/sessions/budget.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/sessions/control.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/sessions/engine.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/sessions/events.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/sessions/memo.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/sessions/mirror.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/sessions/store.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/sessions/tools.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/tasks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/tokens.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/agent/viewer.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/audit.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/bench.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/bench_data.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/bench_experience.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/bench_qc.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/context.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/delegation.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/backend.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/cache_plan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/capabilities.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/chat_capabilities.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/cli.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/conversations.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/decision.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/expression.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/gateway.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/prefix.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/route_bench.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/schema.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/toolcache.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/harness/trace.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/knowledge/biology.yaml +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/knowledge/markers.yaml +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/models_config.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/qc_scenes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/setup.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skill_manifest.yaml +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/analysis-handoff/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/dataset-triage/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/gate-image/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/gate-packets/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/gate-review/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/gating/dataset.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/gating/decisions.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/gating/qc-cells.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/gating/setup.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/gating/visual-gating.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/marker-qc/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/qc-checks/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/qc-image/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/qc-packets/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/qc-visual-artifacts/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/review-objects/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/review-qc/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/surface-rendering/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/video-storyboard/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/visual-inspection/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills/volume-triage/SKILL.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/skills.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/tasks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/tasks.yaml +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/ai/vocabulary.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/api/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/api/dataset.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/api/features.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/api/http.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/api/representation.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/api/store.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/askpass.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/cli.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/124_bundle.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/248_bundle.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/248_bundle.js.LICENSE.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/354_bundle.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/354_bundle.js.LICENSE.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/418_bundle.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/418_bundle.js.LICENSE.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/693b935cb1f907814be9c6199a68c217.svg +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/713c134ff47cd328a5b711526f151082.svg +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/770_bundle.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/908_bundle.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/908_bundle.js.LICENSE.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/ff743f408972e0e96ca9153ed5ae4c83.svg +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/vendor_bundle.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/vendor_bundle.js.LICENSE.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/vendors-node_modules_canvg_lib_index_es_js_bundle.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/vendors-node_modules_dompurify_dist_purify_es_mjs_bundle.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/dist/vendors-node_modules_html2canvas_dist_html2canvas_js_bundle.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/LICENSE.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/canvas-overlay-hd.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/changelog.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/.gitattributes +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/LICENSE.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/Toolbar.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/fullpage.psd +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/home.psd +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/next.psd +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/previous.psd +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/rotateleft.psd +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/rotateright.psd +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/zoom.psd +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/README.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_grouphover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_hover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_pressed.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_rest.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_grouphover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_hover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_pressed.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_rest.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_grouphover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_hover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_pressed.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_rest.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_grouphover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_hover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_pressed.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_rest.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_grouphover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_hover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_pressed.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_rest.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_grouphover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_hover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_pressed.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_rest.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_grouphover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_hover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_pressed.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_rest.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_grouphover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_hover.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_pressed.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_rest.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-scalebar.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/thinking-orbs-0.3.2/LICENSE +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/thinking-orbs-0.3.2/README-plexora.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/external/thinking-orbs-0.3.2/orbs.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/css/agentPanel.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/css/chatPanel.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/css/explorer.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/css/import.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/css/main.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/css/openProject.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/css/quickView.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/css/settings.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/css/tokens.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/css/viewer.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/img/apple-touch-icon.png +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/img/favicon.ico +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/img/logo.ai +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/img/logo.svg +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/img/logo_with_text.ai +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/img/logo_with_text.svg +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/main.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/pluginRegistry.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/agentBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/appRouter.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/appStatus.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/bookmarks.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/browsePicker.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/canvasHint.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/canvasLayout.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/carryOver.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/channelFade.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/connectionModal.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/dataLayer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/dataLocation.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/datasetContext.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/desktopBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/displayCurve.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/drawToolbar.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/dropRouter.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/errors.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/explorer/explorerCrumbs.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/explorer/explorerListing.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/explorer/explorerSidebar.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/explorer/explorerTypes.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/explorer/fileExplorer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/explorer/floatingWindow.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/failureMessage.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/fileLocation.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/glRenderer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/inspectGeometry.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/inspectState.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/keyboardShortcuts.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/launchContext.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/logTerminal.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/maskSurfaces.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/numericData.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/orbDriver.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/pageBoot.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/passVariablesToFrontend.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/perfProbe.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/performanceTelemetry.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/placePicker.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/pointerDrag.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/proFeature.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/remoteGlobe.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/remoteState.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/renderClipboard.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/resourceRouting.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/resourceStatus.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/segmentService.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/sessionExpiry.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/simpleEventHandler.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/surfaceLayers.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/telemetry.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/toast.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/tooltip.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/viewControls.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/viewHistory.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/viewRaster.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/viewSnapshot.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/viewState.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/viewTransform.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/viewerLoader.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/viewerPrefs.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/viewerScene.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/services/volumeWindows.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/vendor.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/agentPanel.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/areaTool.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/backButton.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/bookmarkTray.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/brightfieldAdjust.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/cardList.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/channelList.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/channelNamesUpload.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/chatPanel.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/colorSwatchPicker.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/columnClassifier.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/confirmDialog.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/coordinateField.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/dataSourceField.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/datasetBuilder.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/datasetNav.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/datasetPicker.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/datasetStrip.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/depthSettings.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/depthStrip.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/depthTools.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/fileSourceRow.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/geneGroupModal.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/geneList.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/glInit.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/gradientRange.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/helpMenu.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/imageViewer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/importHelp.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/importSample.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/jobProgress.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/jobWait.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/labelGpu.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/labelTile.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/layerChannelPanel.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/layerManager.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/layerSections.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/layerStack.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/loadProgress.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/locators.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/machineChip.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/maskSurfaceWait.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/miniMap.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/navbarControls.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/openProjectPage.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/orientationGizmo.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/panCursor.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/paneStatus.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/planeMotion.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/pluginHelp.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/popoverMenu.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/popoverPortal.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/projectEdit.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/quickViewLanding.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/rainbow.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/requirementsModal.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/rgbImageViewer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/scaleCalibration.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/searchableSelect.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/sectionCells.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/sectionPanes.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/segmentationWait.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/settingsPage.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/slider.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/surfaceCard.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/surfaceInspect.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/surfaceObjects.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/surfaceRenderer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/surfaceStudio.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/tableProgress.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/tileColorize.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/tileDecode.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/tileFetch.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/toolLoader.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/updateDialog.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/viewTransformTools.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/viewerControls.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/viewerErrorState.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/viewerManager.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/viewerSidebar.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/volumeAtlas.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/volumeCamera.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/volumeDock.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/volumeHandles.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/views/volumeRenderer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/js/workers/tileDecoder.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/shaders/frag.glsl +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/shaders/label.frag.glsl +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/src/shaders/vert.glsl +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/templates/_fragment.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/templates/_scale_calibration.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/templates/_scale_calibration_float.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/templates/base.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/templates/index.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/templates/open_project.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/templates/project_edit.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/templates/settings.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/templates/tools/depth_panel.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/client/templates/tools/rotate_panel.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/connect.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/datasets.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/datasource.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/gcloud.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/jupyter.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/licensing/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/licensing/cli.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/licensing/guards.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/licensing/manifest.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/licensing/tokens.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/links.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/auth.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/profiles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/prompts.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/resources.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/resources_gating.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/resources_scene.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/resources_visual.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/serialize.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/server.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/smoke.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/mcp/tools.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/memory.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/nodes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/notebook_env.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/paths.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/server/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/server/routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/server/state.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/server/values.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/server/variables.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/static/cellExplorerAnalysisBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/static/cellExplorerApi.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/static/cellExplorerColors.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/static/cellExplorerContinuous.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/static/cellExplorerFigureBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/static/cellExplorerLegend.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/static/cellExplorerRoiBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/static/cellExplorerSidebarController.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/static/cellExplorerState.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/static/cell_explorer.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/cell_explorer/templates/cell_explorer/panel.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/captures.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/compose.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/export.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/export_jobs.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/operations.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/pixels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/provenance.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/render.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/repository.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/schema.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/shapegeom.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/sources.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/strokegeom.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/server/textmetrics.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureActions.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureBookmarkStore.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureBuilderApi.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureCanvas.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureCaptureBin.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureCaptureBinGrid.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureCaptureBoxes.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureCaptureDock.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureCaptureTool.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureChoiceField.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureColorField.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureConfirm.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureContextBar.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureContextMenu.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureDestinationPicker.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureDocumentState.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureExportUi.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureImagePanel.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureLibrary.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureLineDefs.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureLinePanel.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figurePanelCompositor.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figurePointEditor.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureRichText.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureSceneSnapshot.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureSchema.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureShapeDefs.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureShapeDrawing.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureShapeGeometry.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureShapePanel.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureSidebarController.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureStrokeGeometry.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureTextEditor.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureTextPanel.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureThumbnail.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureViewOptions.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/static/figureWorkspace.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/templates/figure_builder/captures.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/templates/figure_builder/library.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/templates/figure_builder/workspace.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/figure_builder/templates/figure_builder/workspace_body.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/capabilities.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/capabilities_autogate.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/capabilities_classifier.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/anndata_gates.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/absence.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/answers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/biology.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/bivariate.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/bulk.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/candidates.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/cellcalls.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/cells.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/context.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/engine.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/events.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/hierarchy.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/hypotheses/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/hypotheses/calibration.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/hypotheses/candidates.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/hypotheses/classifier_check.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/hypotheses/controller.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/hypotheses/evidence.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/hypotheses/panel.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/kernels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/lattice.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/memo.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/mirror_script.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/packets.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/partners.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/pixel_estimate.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/profile.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/provenance.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/qc_cells.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/reference.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/regression.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/replan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/sampler.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/schemas.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/scoring.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/sheet.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/tableops.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/transfer.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/verdicts.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/autogate/views.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/autopick.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/calls.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/export.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/features.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/geometry.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/learner.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/panel.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/rules.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/runs.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/signal.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/source_write.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/classifier/store.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/database.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/experience.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/mixture.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/provenance.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/server/tableops.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/static/csvGatingList.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/static/gating.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/static/gatingAgentBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/static/gatingAgentShow.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/static/gatingApi.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/static/gatingClassifier.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/static/gatingPlanes.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/static/gatingSidebarController.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/templates/gating/legacy.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/gating/templates/gating/panel.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/capabilities.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/capabilities_checks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/capabilities_objects.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/capabilities_segment.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/capabilities_session.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/capabilities_stack.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/capabilities_visual.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/mcp.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/answers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/artifacts.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/background.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/blur.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/bulk.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/candidates.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/cells/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/cells/areas.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/cells/calls.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/cells/channel_findings.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/cells/columns.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/cells/inputs.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/check_candidates.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/checks_bulk.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/checks_result.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/class_rules.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/consolidate.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/cycles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/detectors/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/detectors/base.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/detectors/classical.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/digest.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/dna_retention.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/engine.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/events.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/exclusions.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/export.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/finalize.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/frames.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/mirror_script.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/nuclei_trace.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/overview.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/packets.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/plane.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/polygons.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/propagate.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/provenance.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/refine.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/refine_sam.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/region_write.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/registration.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/report.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/results.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/roi_link.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/scan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/schemas.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/score_fields.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/score_review.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/segqc/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/segqc/analysis.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/segqc/kernels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/segqc/run.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/sheets.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/source_write.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/spatialdata_write.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/strictness.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/tableops.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/tissue.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/transitions.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/server/viewer_data.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qc.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcAgentBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcApi.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcArtifacts.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcBlur.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcDraw.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcHover.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcLayers.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcRegistration.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcSegmentation.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcSidebarController.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcStack.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/static/qcTree.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/qc/templates/qc/panel.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/capabilities.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/adapters.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/geojson.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/geometry.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/mapping.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/operations.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/repository.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/schema.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/service.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/server/tableops.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/static/roi.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/static/roiAgentBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/static/roiApi.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/static/roiFigureBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/static/roiGeometry.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/static/roiRenderer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/static/roiSidebarController.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/static/roiState.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/static/roiTools.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/static/roiTree.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/roi/templates/roi/panel.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/segmentation/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/segmentation/capabilities.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/segmentation/server/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/segmentation/server/cellpose3d.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/segmentation/server/routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/segmentation/server/run.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/segmentation/static/segmentation3d.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/segmentation/static/segmentation3d.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/segmentation/templates/segmentation/panel.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/transcripts/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/transcripts/server/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/transcripts/server/routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/transcripts/server/xenium.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/transcripts/static/transcriptLayer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/transcripts/static/transcriptPoints.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/transcripts/static/transcripts.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/transcripts/static/transcriptsApi.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/transcripts/static/transcriptsSidebarController.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/transcripts/templates/transcripts/panel.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/capabilities.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/server/encode_jobs.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/server/encoders.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/server/facts.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/server/manifest.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/server/operations.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/server/presets.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/server/repository.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/server/routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/server/schema.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/server/writers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/vendor/LICENSE-mediabunny +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/vendor/README.md +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/vendor/mediabunny-1.60.0.mjs +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoAgentBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoAnimation.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoArcLength.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoCamera2d.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoCamera3d.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoComposite.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoEasing.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoEncodeWorker.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoEncoders.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoExportLoop.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoExportUi.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoFigureBridge.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoHistory.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoInterp.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoOverlays.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoParamFields.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoPathEditor.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoPrefetch.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoPreview.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoProjectApi.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoReadiness.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoRecorder.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoRenderCoordinator.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoRenderCover.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoSceneState.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoSchema.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoStage.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoStudioBar.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoStudioSidebarController.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoTimeline.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoTracking.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/videoViewerState.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/video_studio/static/video_studio.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/server/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/server/routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/server/spots.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/server/tenx.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/static/binLayer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/static/spotLayer.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/static/visiumHdApi.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/static/visiumHdSidebarController.js +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/static/visium_hd.css +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/plugins/visium_hd/templates/visium_hd/panel.html +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/proxy.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/core_tools.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/adapters/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/adapters/anndata_adapter.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/adapters/base.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/adapters/classify.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/adapters/csv_adapter.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/adapters/flat_table.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/adapters/inspection.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/adapters/memory_adapter.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/adapters/spatialdata_adapter.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/bin_tiles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/centroid_tiles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/consistency.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/data_migration.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/data_model.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/database_model.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/dataset_answers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/dataset_build.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/dataset_events.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/dataset_plan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/dataset_scan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/datasets.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/drop_plan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/import_proposal.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/import_sample.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/layer_jobs.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/layer_sources.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/manifest.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/nodes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/project.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/recipes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/remote_sources.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/remotes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/secret_store.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/server_records.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/table_correction.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/transcript_tiles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/viewer_sessions.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/models/views.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/node/api.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/node/app.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/node/resources.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/plugins.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/providers/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/providers/base.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/providers/http.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/providers/local.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/providers/memory.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/providers/node.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/providers/operations.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/providers/remote.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/providers/wire.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/ai_chat_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/ai_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/browse_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/data_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/dataset_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/dataset_scan_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/desktop_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/drop_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/gcloud_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/import_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/license_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/page_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/project_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/segment_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/settings_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/surface_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/system_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/telemetry_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/tool_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/transfer_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/update_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/routes/volume_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/contacts.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/export.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/importers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/isosurface.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/labels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/levels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/marching.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/mesh.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/nets.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/preview.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/refine.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/sections.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/store.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/surface/suggest.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/tile_batch.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/addHEColumns.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/boundary_mask.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/brightfield.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/cell_features.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/channel_file.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/colormaps.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/dataset_marks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/dicom_wsi.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/dir_listing.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/dir_search.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/display_curve.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/fast_png.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/file_transfer.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/fs_places.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/fullConversion.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/gene_groups.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/head_cache.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/host_policy.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/image_pyramid.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/jit.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/label_kernels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/label_overlay.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/layer_composite.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/mask_polygon.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/memory_pyramid.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/native_dialog.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/ngff_transform.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/ome_zarr.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/pixel_scale.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/remote_image.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/remote_store.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/safe_pickle.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/segmentation_pyramid.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/sftp.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/smallestenclosingcircle.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/source_image.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/spatial_index.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/spatial_scene.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/tenx_matrix.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/tiff_region.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/tiff_series.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/tiffsurgeon.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/xenium_cells.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/utils/xenium_focus.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/axes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/brick_serve.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/bricks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/chunk_cache.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/labels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/measure.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/model.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/objects.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/pin.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/plane_view.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/planes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/prefetch.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/provenance.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/qc3d.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/reduce.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/section_cells.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/serve.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/sources/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/sources/dicom.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/sources/ims.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/sources/ims_index.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/sources/memory.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/sources/ngff.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/sources/tiff.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/tracking.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/viewspec.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/windows.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/volume/zprofile.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server/warmup.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/server_cli.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/agent_hooks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/batch.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/cli.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/client.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/config.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/dataset.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/environment.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/flask_hooks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/identity.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/node_hooks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/performance.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/queue.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/redact.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/report.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/sample.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/schema.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/telemetry/uploader.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/test.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/updates.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/vision/__init__.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/vision/cli.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/vision/model_files.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/vision/propagate.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/vision/sam.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/vision/sam_backend.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/vision/sam_video.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/vision/sam_weights.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora/vision/segment.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora.egg-info/SOURCES.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora.egg-info/dependency_links.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora.egg-info/entry_points.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/plexora.egg-info/top_level.txt +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/setup.cfg +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_architecture.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_artifacts.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_cell_gallery.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_client_probes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_explain_cell.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_future_modality.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_gate_panel.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_gate_sampling.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_gating.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_gating_dataset.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_jobs.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_policy_scopes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_registry.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_render.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_render_formats.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_render_layers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_render_node.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_report.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_roi.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_routes_guard.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_scene.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_scope.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_session.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_undo.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_vertical_slice.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_viewer_api.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_viewer_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_agent_volume.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_bench.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_chat.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_chat_panel.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_context.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_harness_qc.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_models_mcp.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_parallel_markers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_route_bench.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_setup.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_skills.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_tasks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ai_token.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_anndata_adapter.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_api_dataset.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_api_store.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_app_router.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_app_shell.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_auth_token.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_bench_remote.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_bench_run_arms.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_bin_tiles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_blank_frame.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_bookmarks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_boundary_mask.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_bridge_approval.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_bridge_handoff.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_brightfield_detection.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_brightfield_pipeline.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_brightfield_reader.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_brightfield_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_browse_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_browser_guard.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_canvas_hint_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_carry_over.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_cell_color_layer.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_cell_features.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_cell_mode_control.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_centroid_tiles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_channel_auto_revert.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_channel_fade_client.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_channel_names_modal.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_channel_names_sidecar.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_channel_names_upload.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_channel_overview.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_channel_rename_state.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_channel_row_position.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_classify_columns.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_colormaps.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_column_classifier_css.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_config_store.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_connection_modal.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_consistency.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_contrast_observations.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_core_tools.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_csv_adapter.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_csv_xyz.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_data_location.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_database_model.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_datalayer_requests.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_answers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_build.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_builder_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_changed.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_nav.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_plan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_remote.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_scan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_scan_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_strip.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dataset_web.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_datasets_api.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_datasets_api_on_a_node.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_datasets_registry.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_derive_anndata_channel_names.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_desktop_bridge.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_desktop_cli.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_desktop_menu.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_desktop_process.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_desktop_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_detect_data_type.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dicom_assembly.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dicom_detection.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dicom_pyramid.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dicom_registration.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dicom_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dir_listing.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_dir_search.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_display_curve.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_docs_coverage.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_docs_docstrings.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_docs_envvars.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_docs_examples.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_docs_freshness.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_docs_links.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_docs_signatures.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_draw_toolbar_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_drop_plan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_drop_router.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_file_explorer.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_file_location.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_file_transfer_node.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_files_server.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_fs_places.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gate_not_called_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_3d.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_candidates.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_channel_match.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_classifier_layer.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_experience.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_hierarchy.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_hypotheses.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_limits.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_log_layer.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_panel_replay.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_planes_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_qc_exclusion.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_replan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_split_views.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gating_tiles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_gcloud.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_hd_default.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_hd_slider_domain.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_head_cache.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_home_landing.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_host_policy.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_icon_names.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_image_cells.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_image_pyramid.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_image_status.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_costs_nothing.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_dialog.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_entry_points.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_from_a_node.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_help.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_progressive.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_proposal.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_roles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_routes_json_errors.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_sample_association.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_import_sample_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ims_index.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ims_masks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_jupyter_viewer.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_label_gpu.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_label_gpu_parity.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_label_outlines.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_label_overlay.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_label_region.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_label_tile_lifecycle.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_launch_context.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_launch_state.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_layer_channel_panel.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_layer_draw.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_layer_jobs.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_layer_manager.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_layer_sources.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_layer_spec.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_layer_state.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_layer_transform.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_layer_visibility.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_license_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_license_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_license_transcriptomics.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_license_visibility.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_license_volume.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_licensing_cli.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_licensing_enforcement.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_licensing_hpc.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_licensing_manifest.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_licensing_plugins.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_lifetime.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_load_progress.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_logging.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_machine_chip.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_magic_select_wording.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_manifest.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_marker_split.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mask_formats.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mask_without_table.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mcp_gating.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mcp_http.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mcp_job_streaming.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mcp_link.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mcp_profiles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mcp_qc.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mcp_server.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_mcp_stdio.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_memory_adapter.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_memory_datasource.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_memory_pyramid.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_metadata_columns.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_nan_tables.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_nav_shortcuts.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_nearest_cell.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_nearest_cell_3d.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_cell_features.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_direct_routing.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_disconnect.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_dynamic.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_image.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_image_pyramid.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_image_type.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_label_volume.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_mask_status.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_new_formats.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_plane_index.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_reconnect.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_surfaces.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_table.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_node_warm_and_cache.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_notebook_env.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_notebook_mode.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_ome_zarr_reader.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_open_project.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_optional_segmentation.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_page_assets.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_page_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_parquet_tables.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_path_drop.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_paths.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_physical_coordinates.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_pixel_scale.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_pixel_size.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_plane_cells_route.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_plane_index.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_plugin_boundary.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_plugin_css_boundary.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_plugin_layers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_plugin_panel_standard.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_popover_menu.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_popover_portal.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_presets_nuclear.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_prime_hot_code.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_project_edit_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_project_layer_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_project_record.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_project_title.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_artifacts_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_bench.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_blur_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_bulk_timing.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_candidate_noise.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_cell_rules.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_cells_derive.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_cells_exports.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_cells_frame.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_check_sampling.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_columns.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_consolidate.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_cycle_rule.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_delegated_run_fixes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_detectors.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_digest.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_geojson_member.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_hover_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_live_run_fixes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_magic_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_magic_select.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_mirror.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_payload_trim.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_picker_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_provenance.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_refine.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_refine_tool.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_registration.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_registration_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_registration_report.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_results.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_rework.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_scan.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_score_fields.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_segment_tool.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_session.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_session_checks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_session_refine.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_stack.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_tool_surface.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_units.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_visual_session.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_qc_visual_tools.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_recipes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_reconnect.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_refresh_dataset.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_register_anndata_datasource.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_register_image_datasource.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_register_zarr_image_datasource.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_release_script.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_chunk_cache.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_dicom.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_discovery.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_file.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_globe.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_health.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_image_provider.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_image_status.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_ims.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_jobs.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_labels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_locator.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_picture.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_state.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_tables.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_remote_tiff.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_rename_channels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_rename_channels_json.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_render_clipboard.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_requirements_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_resource_status_notice.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_roi_cell_regions.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_roi_magic_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_safe_pickle.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_scimappro_plugin.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_secret_store.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_section_cells.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_security_headers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_segment_service_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_segmentation_3d.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_segmentation_mapping.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_segmentation_mode_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_segmentation_pyramid.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_segmentation_wait.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_selection.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_server_records.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_session_expiry.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_session_mirror.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_session_walltime.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_settings_page.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_settings_telemetry_page.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_settings_webdata_page.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_sftp.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_shared_roots.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_sidebar_scoping.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_single_image_import.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_slider.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_slider_css.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_source_image_core.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_spatial_index.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_spatial_scene.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_spatialdata_adapter.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_spatialdata_image_import.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_stack_contrast_client.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_staged_progress.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_subprocess_flags.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_surface_agent.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_surface_engine.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_surface_layer.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_surface_perf.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_surface_phase2.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_table_correction.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_table_progress.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_agent.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_cli.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_client.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_config.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_dataset.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_hooks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_hooks_cost.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_privacy.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_queue.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_schema.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_tiles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_telemetry_uploader.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tenx_matrix.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_thumbnail_rgb.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tiff_hyperstack.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tiff_region.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tile_batch.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tile_colorize.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tile_url.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_toast.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tool_assets.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tool_cards.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tool_coexistence.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tool_switching.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_tooltip.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_transcript_cost.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_transcript_tiles.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_transfer_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_unreachable_node.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_updates.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_url_helpers.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_view_menu.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_view_snapshot_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_view_state_client.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_view_transform.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_view_transform_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_viewer_3d_client.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_viewer_color_by.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_viewer_error_state.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_viewer_loader.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_viewer_sessions.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_vision_first.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_vision_sam.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_vision_sam_real.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_vision_segment.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_visium_hd_import.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_visium_import.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_vocabulary_learned.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_backend.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_bricks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_bricks_serve.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_chunk_cache.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_core.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_deep_stacks.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_depth_levels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_dicom.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_fluid_planes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_labels.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_level_cache.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_magic.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_memory.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_objects_route.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_pin.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_plane_read_ahead.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_propagate.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_remote.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_routes.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_sections.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_time_series.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_volume_window_provisional.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_wide_features.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_xenium_cells.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_xenium_focus.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_xss_sinks_js.py +0 -0
- {plexora-0.0.32 → plexora-0.0.35}/tests/test_zarr_write_retry.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plexora
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.35
|
|
4
4
|
Summary: OpenSeadragon-based cellular image viewing and analysis tool.
|
|
5
5
|
Author-email: BioCognia <support@biocognia.com>
|
|
6
6
|
License-Expression: LicenseRef-Plexora-EULA-1.0
|
|
@@ -15,6 +15,7 @@ License-File: LICENSE
|
|
|
15
15
|
Requires-Dist: aiohttp>=3.14.4
|
|
16
16
|
Requires-Dist: anndata>=0.10
|
|
17
17
|
Requires-Dist: biocognia<0.2,>=0.1.2
|
|
18
|
+
Requires-Dist: biocognia-intelligence<0.4,>=0.2.1
|
|
18
19
|
Requires-Dist: Flask>=3.1
|
|
19
20
|
Requires-Dist: fsspec>=2024.12
|
|
20
21
|
Requires-Dist: h5py>=3.16.0
|
|
@@ -182,3 +182,22 @@ def job_state(record: dict) -> dict:
|
|
|
182
182
|
"message": f"the job was {record.get('status')}"}
|
|
183
183
|
out["error"] = problem(error)
|
|
184
184
|
return out
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def encode_images(result):
|
|
188
|
+
"""`result` with its `_images` -- PNG bytes, or `{data: bytes, format}` -- as
|
|
189
|
+
`{"data": "<base64>", "encoding": "base64", "format"}` each, so JSON can
|
|
190
|
+
carry them (the protocol's wire form, `spatialbridge.images`). Anything
|
|
191
|
+
else unchanged."""
|
|
192
|
+
import base64
|
|
193
|
+
|
|
194
|
+
if not isinstance(result, dict) or not result.get("_images"):
|
|
195
|
+
return result
|
|
196
|
+
encoded = []
|
|
197
|
+
for image in result["_images"]:
|
|
198
|
+
data, fmt = (image, "png") if isinstance(image, (bytes, bytearray)) else (
|
|
199
|
+
(image.get("data"), image.get("format") or "png") if isinstance(image, dict) else (None, None))
|
|
200
|
+
if isinstance(data, (bytes, bytearray)):
|
|
201
|
+
encoded.append({"data": base64.b64encode(bytes(data)).decode("ascii"), "encoding": "base64",
|
|
202
|
+
"format": str(fmt)})
|
|
203
|
+
return {**result, "_images": encoded}
|
|
@@ -679,6 +679,67 @@ def _record_depth_roles(name, roles):
|
|
|
679
679
|
record.patch(dataset=spec).with_confirmed(tuple(f"role:{key}" for key in named)).save()
|
|
680
680
|
|
|
681
681
|
|
|
682
|
+
# -- which project shows this image (another application's import) ---------------
|
|
683
|
+
|
|
684
|
+
|
|
685
|
+
class ImportInput(AgentModel):
|
|
686
|
+
image: str = Field(description="Path to the image on this machine (OME-TIFF, TIFF, "
|
|
687
|
+
"OME-Zarr, a whole-slide file).")
|
|
688
|
+
mask: str | None = Field(None, description="Its segmentation mask (a label image), for "
|
|
689
|
+
"a new project.")
|
|
690
|
+
table: str | None = Field(None, description="Its cell table (CSV, Parquet, .h5ad, a "
|
|
691
|
+
"SpatialData store), for a new project.")
|
|
692
|
+
name: str | None = Field(None, description="The new project's name; default from the "
|
|
693
|
+
"image's filename.")
|
|
694
|
+
dataset: str | None = Field(None, description="Put the new project in this dataset.")
|
|
695
|
+
|
|
696
|
+
|
|
697
|
+
def import_image(call, inp):
|
|
698
|
+
"""The project that shows this image, made from it when there is none.
|
|
699
|
+
|
|
700
|
+
What another application calls when a person adds an image to its
|
|
701
|
+
workspace (Biocognia Intelligence, through `plexora_intelligence`). A
|
|
702
|
+
project already showing this file -- matched on the file, however its path
|
|
703
|
+
is spelled, as quick view matches it -- is answered as it is, its mask and
|
|
704
|
+
table left alone. Otherwise one is made from the image, with the mask and
|
|
705
|
+
table when they are given (`datasets.create_project`). The image is read
|
|
706
|
+
where it lies, never copied; what is written is Plexora's project
|
|
707
|
+
registry, and for a large TIFF with no reduced-resolution levels the
|
|
708
|
+
one-time pyramidized copy every import makes of it.
|
|
709
|
+
"""
|
|
710
|
+
import os
|
|
711
|
+
from pathlib import Path
|
|
712
|
+
|
|
713
|
+
from plexora import datasets, get_config
|
|
714
|
+
from plexora.agent.receipts import make_receipt
|
|
715
|
+
from plexora.datasource import _find_existing_datasource_for_image
|
|
716
|
+
|
|
717
|
+
# Absolute, so the project never depends on this process's working folder.
|
|
718
|
+
image = Path(os.path.abspath(Path(inp.image).expanduser()))
|
|
719
|
+
if not image.exists():
|
|
720
|
+
raise AgentError("invalid_input", f"no image at {inp.image}",
|
|
721
|
+
detail={"image": str(image)})
|
|
722
|
+
if not os.access(image, os.R_OK):
|
|
723
|
+
raise AgentError("invalid_input", f"{inp.image} cannot be read by Plexora",
|
|
724
|
+
detail={"image": str(image)})
|
|
725
|
+
found = _find_existing_datasource_for_image(image, get_config())
|
|
726
|
+
if found:
|
|
727
|
+
call.project_name = found
|
|
728
|
+
return {"project": found, "created": False, "image": str(image)}
|
|
729
|
+
try:
|
|
730
|
+
name = datasets.create_project(str(image), name=inp.name, segmentation=inp.mask,
|
|
731
|
+
data=inp.table, exist_ok=False, dataset=inp.dataset)
|
|
732
|
+
except ValueError as exc:
|
|
733
|
+
raise AgentError("invalid_input", str(exc), detail={"image": str(image)}) from None
|
|
734
|
+
call.project_name = name
|
|
735
|
+
receipt = make_receipt(
|
|
736
|
+
call, changed=True, before=None,
|
|
737
|
+
after={"project": name, "image": str(image), "mask": inp.mask, "table": inp.table},
|
|
738
|
+
persistent_state="config", reversible=False)
|
|
739
|
+
return {"project": name, "created": True, "image": str(image),
|
|
740
|
+
"receipt": receipt.model_dump(mode="json")}
|
|
741
|
+
|
|
742
|
+
|
|
682
743
|
def capabilities():
|
|
683
744
|
return [
|
|
684
745
|
Capability(
|
|
@@ -759,6 +820,14 @@ def capabilities():
|
|
|
759
820
|
permission="reversible_write", input_model=BindInput, handler=bind_project,
|
|
760
821
|
writes=("project",), persistent=True, reversible=False,
|
|
761
822
|
tags=("project", "bind", "bridge", "handoff")),
|
|
823
|
+
Capability(
|
|
824
|
+
name="project.import", tool_name="import_image", owner="core",
|
|
825
|
+
purpose="The project that shows an image file on this machine, made from it (with "
|
|
826
|
+
"its mask and cell table, when given) when there is none yet: the image is "
|
|
827
|
+
"read where it lies, and a project already showing it is answered as it is.",
|
|
828
|
+
permission="reversible_write", input_model=ImportInput, handler=import_image,
|
|
829
|
+
writes=("project",), persistent=True, reversible=False,
|
|
830
|
+
tags=("project", "import", "image", "bridge", "handoff")),
|
|
762
831
|
Capability(
|
|
763
832
|
name="resource.status", tool_name="get_resource_status", owner="core",
|
|
764
833
|
purpose="Where a project's image, mask and table are (this machine or a data "
|
|
@@ -116,6 +116,27 @@ def _depth_keys(project, wanted) -> list[str]:
|
|
|
116
116
|
return ["role:z"] if int(getattr(project.image, "depth", 1) or 1) > 1 else []
|
|
117
117
|
|
|
118
118
|
|
|
119
|
+
def _asked_as(project, keys) -> list[str]:
|
|
120
|
+
"""`keys` with any `role:x`/`role:y` in it put the way this project can
|
|
121
|
+
answer them -- `_coordinate_keys`, at the place the first one stood.
|
|
122
|
+
|
|
123
|
+
For keys a plugin names outside `roles`: its optional inputs, and the ones
|
|
124
|
+
its panel asks for mid-session. Left literal, those were two column selects
|
|
125
|
+
over `obs` on an AnnData project, which cannot point at an `obsm` array --
|
|
126
|
+
the X and Y a user could not give were the ones their file already had.
|
|
127
|
+
"""
|
|
128
|
+
wanted = [role for role in _COORDINATE_ROLES if f"role:{role}" in keys]
|
|
129
|
+
asked = []
|
|
130
|
+
for key in keys:
|
|
131
|
+
if key in (f"role:{role}" for role in _COORDINATE_ROLES):
|
|
132
|
+
fresh = _coordinate_keys(project, wanted)
|
|
133
|
+
wanted = []
|
|
134
|
+
else:
|
|
135
|
+
fresh = [key]
|
|
136
|
+
asked.extend(one for one in fresh if one not in asked)
|
|
137
|
+
return asked
|
|
138
|
+
|
|
139
|
+
|
|
119
140
|
def _layer_matches(layer, wanted: str) -> bool:
|
|
120
141
|
"""Whether one layer answers a `Requires.layers` entry.
|
|
121
142
|
|
|
@@ -401,12 +422,13 @@ class Requires:
|
|
|
401
422
|
if key not in keys]
|
|
402
423
|
|
|
403
424
|
def _optional_keys(self, project) -> tuple[str, ...]:
|
|
404
|
-
"""`optional`, with
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
return tuple(self.optional)
|
|
425
|
+
"""`optional`, with an optional X and Y asked the way a required pair
|
|
426
|
+
is (`_asked_as`): one `coordinates` question on AnnData and
|
|
427
|
+
SpatialData, Z beside them on a z-stack's table. What that adds is
|
|
428
|
+
dropped where the plugin already requires it."""
|
|
429
|
+
required = self._column_keys(project)
|
|
430
|
+
return tuple(key for key in _asked_as(project, self.optional)
|
|
431
|
+
if key in self.optional or key not in required)
|
|
410
432
|
|
|
411
433
|
def declared_keys(self, project) -> list[str]:
|
|
412
434
|
"""Every input this plugin names, required and optional, in ask order.
|
|
@@ -499,7 +521,7 @@ class Requires:
|
|
|
499
521
|
declared = set(self.declared_keys(project))
|
|
500
522
|
optional = self._optional_keys(project)
|
|
501
523
|
return [requirement(key, optional=key in optional)
|
|
502
|
-
for key in keys
|
|
524
|
+
for key in _asked_as(project, list(keys))
|
|
503
525
|
if key in declared and not _answered(project, key)]
|
|
504
526
|
|
|
505
527
|
def satisfied_by(self, project) -> bool:
|
|
@@ -84,12 +84,13 @@ PLUGIN = Plugin(
|
|
|
84
84
|
# y)", so all three are offered and the panel checks for itself that at
|
|
85
85
|
# least one arrived (see `intro`, and the empty state in panel.html).
|
|
86
86
|
#
|
|
87
|
-
# `role:x`/`role:y` rather than `coordinates`:
|
|
88
|
-
#
|
|
89
|
-
#
|
|
90
|
-
#
|
|
91
|
-
#
|
|
92
|
-
#
|
|
87
|
+
# `role:x`/`role:y` rather than `coordinates`: a plugin names the roles it
|
|
88
|
+
# reads, and core decides which question answers them. On a CSV that is
|
|
89
|
+
# two column selects; on AnnData and SpatialData it is the one coordinate
|
|
90
|
+
# question, which can name an obsm array as well as two obs columns, and
|
|
91
|
+
# which coordinates already resolved at import count as answering. See
|
|
92
|
+
# plugin.py's _asked_as -- the panel's own "add what's missing" button
|
|
93
|
+
# names the same two roles and goes through it too.
|
|
93
94
|
requires=Requires(
|
|
94
95
|
table=True,
|
|
95
96
|
roles=("cell_id",),
|
|
@@ -204,7 +204,16 @@ class FigureQuickEdit {
|
|
|
204
204
|
?.addEventListener("click", () => this.close());
|
|
205
205
|
document.getElementById("fb_quickedit_main")
|
|
206
206
|
?.addEventListener("click", () => this.openInViewer());
|
|
207
|
-
|
|
207
|
+
// The app's slider (slider.js), wrapped around the template's input;
|
|
208
|
+
// a page without it keeps the bare input.
|
|
209
|
+
if (this.zRange && typeof PlexoraSlider !== "undefined") {
|
|
210
|
+
this.zSlider = new PlexoraSlider(this.zRange, {
|
|
211
|
+
integer: true, fieldId: "fb_quickedit_z_value",
|
|
212
|
+
onInput: (value) => this.onPlaneInput(value),
|
|
213
|
+
});
|
|
214
|
+
} else {
|
|
215
|
+
this.zRange?.addEventListener("input", () => this.onPlaneInput());
|
|
216
|
+
}
|
|
208
217
|
this.bindView();
|
|
209
218
|
|
|
210
219
|
// The card is a flex child of the body and the body is the window's:
|
|
@@ -229,6 +238,9 @@ class FigureQuickEdit {
|
|
|
229
238
|
|
|
230
239
|
destroy() {
|
|
231
240
|
this.resizeObserver?.disconnect();
|
|
241
|
+
// Gives the template's input back, for the next setup() to wrap.
|
|
242
|
+
this.zSlider?.destroy();
|
|
243
|
+
this.zSlider = null;
|
|
232
244
|
this.close();
|
|
233
245
|
}
|
|
234
246
|
|
|
@@ -680,20 +692,29 @@ class FigureQuickEdit {
|
|
|
680
692
|
if (volume.mode === "slab") {
|
|
681
693
|
// The range slides; its thickness is the panel's.
|
|
682
694
|
const thickness = Math.max(0, volume.slab.z1 - volume.slab.z0);
|
|
683
|
-
this.
|
|
684
|
-
this.zRange.value = String(volume.slab.z0);
|
|
695
|
+
this.placePlane(Math.max(0, depth - 1 - thickness), volume.slab.z0);
|
|
685
696
|
} else {
|
|
686
|
-
this.
|
|
687
|
-
this.zRange.value = String(Number(volume.z) || 0);
|
|
697
|
+
this.placePlane(depth - 1, Number(volume.z) || 0);
|
|
688
698
|
}
|
|
689
699
|
this.zLabel.textContent = this.planeLabel();
|
|
690
700
|
}
|
|
691
701
|
|
|
692
|
-
|
|
702
|
+
/** The plane control's extent and position, without an event. */
|
|
703
|
+
placePlane(max, value) {
|
|
704
|
+
if (this.zSlider) {
|
|
705
|
+
this.zSlider.setBounds({ min: 0, max });
|
|
706
|
+
this.zSlider.set(value, { silent: true });
|
|
707
|
+
} else {
|
|
708
|
+
this.zRange.max = String(max);
|
|
709
|
+
this.zRange.value = String(value);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
onPlaneInput(value) {
|
|
693
714
|
const session = this.session;
|
|
694
715
|
const volume = session?.volume;
|
|
695
716
|
if (!volume || session.three) return;
|
|
696
|
-
const at = Math.round(Number(this.zRange.value) || 0);
|
|
717
|
+
const at = Math.round(Number(value ?? this.zRange.value) || 0);
|
|
697
718
|
if (volume.mode === "slab" && volume.slab) {
|
|
698
719
|
const thickness = volume.slab.z1 - volume.slab.z0;
|
|
699
720
|
volume.slab = { ...volume.slab, z0: at, z1: at + thickness };
|
|
@@ -3585,8 +3585,8 @@
|
|
|
3585
3585
|
min-width: 7.5em;
|
|
3586
3586
|
}
|
|
3587
3587
|
|
|
3588
|
-
|
|
3589
|
-
|
|
3588
|
+
/* The app's slider (PlexoraSlider), wrapped around the template's input. */
|
|
3589
|
+
.fb-quickedit-z > .plx-slider {
|
|
3590
3590
|
flex: 1 1 auto;
|
|
3591
3591
|
min-width: 0;
|
|
3592
3592
|
}
|
|
@@ -2233,9 +2233,11 @@ def status(call, inp):
|
|
|
2233
2233
|
class FinishInput(AgentModel):
|
|
2234
2234
|
session_id: str
|
|
2235
2235
|
action: Literal["close", "commit", "cancel", "rollback"] = Field(
|
|
2236
|
-
"close", description="close: end the session (writes stay; a
|
|
2237
|
-
"
|
|
2238
|
-
"
|
|
2236
|
+
"close", description="close: end the session (writes stay; a marker not yet "
|
|
2237
|
+
"settled is written at the best gate it reached, for review; "
|
|
2238
|
+
"a session the user stopped in the viewer is cancelled); "
|
|
2239
|
+
"commit: write a propose-mode session's accepted gates and "
|
|
2240
|
+
"empty gates; "
|
|
2239
2241
|
"cancel: stop the bulk pass (writes stay); rollback: undo every "
|
|
2240
2242
|
"write the session made, newest first.")
|
|
2241
2243
|
|
|
@@ -2252,6 +2254,22 @@ def _save_versions(call, images, *, session_id=None, by=None):
|
|
|
2252
2254
|
continue
|
|
2253
2255
|
|
|
2254
2256
|
|
|
2257
|
+
def _close_unsettled(engine):
|
|
2258
|
+
"""No marker is left ungated by a close or a commit: one still waiting on
|
|
2259
|
+
a look, a check or the user is written (or, in propose mode, proposed) at
|
|
2260
|
+
the best gate it reached, for review (`Engine.close`). A Stop is a cancel
|
|
2261
|
+
and writes nothing: it may be for values that moved (`_matrix_moved`).
|
|
2262
|
+
An auto-contrast session never gates, so it is left as it is."""
|
|
2263
|
+
if engine.options["purpose"] == "contrast":
|
|
2264
|
+
return
|
|
2265
|
+
for unit in list(engine.record["units"].values()):
|
|
2266
|
+
if unit["state"] not in schemas.TERMINAL_STATES:
|
|
2267
|
+
engine.close(unit, "manual_review_recommended",
|
|
2268
|
+
"the session was closed before this marker was settled; written "
|
|
2269
|
+
"at the best gate it reached, for manual review",
|
|
2270
|
+
unlooked="session_closed")
|
|
2271
|
+
|
|
2272
|
+
|
|
2255
2273
|
def finish(call, inp):
|
|
2256
2274
|
from plexora.agent import jobs, registry
|
|
2257
2275
|
from plexora.plugins.gating.server.autogate import engine as engines
|
|
@@ -2275,6 +2293,7 @@ def finish(call, inp):
|
|
|
2275
2293
|
elif action == "commit":
|
|
2276
2294
|
if record["options"]["mode"] != "propose":
|
|
2277
2295
|
raise AgentError("invalid_input", "commit is for a propose-mode session")
|
|
2296
|
+
_close_unsettled(engine) # proposed, then written below
|
|
2278
2297
|
record["options"]["mode"] = "apply"
|
|
2279
2298
|
written = []
|
|
2280
2299
|
for unit in record["units"].values():
|
|
@@ -2326,6 +2345,7 @@ def finish(call, inp):
|
|
|
2326
2345
|
if record["state"] == "bulk_running":
|
|
2327
2346
|
raise AgentError("conflict", "the bulk pass is still running; cancel it or "
|
|
2328
2347
|
"wait for it", retryable=True)
|
|
2348
|
+
_close_unsettled(engine)
|
|
2329
2349
|
record["state"] = "done"
|
|
2330
2350
|
record["finished_at"] = _now()
|
|
2331
2351
|
if action != "rollback" and any(u.get("receipts") for u in record["units"].values()):
|
|
@@ -643,3 +643,20 @@ def provenance_long_of(ds, project=None) -> list:
|
|
|
643
643
|
**{k: row.get(k, "") for k in CLASSIFIER_COLUMNS}})
|
|
644
644
|
return rows
|
|
645
645
|
|
|
646
|
+
|
|
647
|
+
def source_extras(ds) -> dict:
|
|
648
|
+
"""What a save to the source file writes beside the latest gates:
|
|
649
|
+
`provenance` -- a row per gated marker, who set it, how and when
|
|
650
|
+
(`uns[<table>_provenance]`) -- and `versions` (`model.versions_payload`).
|
|
651
|
+
Here, beside the rows it is made of, so gating's model imports nothing
|
|
652
|
+
from autogate (`tests/test_licensing_hardening.py::KNOWN_COUPLINGS`)."""
|
|
653
|
+
from plexora.agent import cell_exclusions
|
|
654
|
+
|
|
655
|
+
try:
|
|
656
|
+
qc_fp = cell_exclusions.fingerprint(cell_exclusions.call_record(ds))
|
|
657
|
+
except Exception: # no QC to read: the provenance goes without it
|
|
658
|
+
qc_fp = ""
|
|
659
|
+
rows = [{**row, "call_mode": cell_exclusions.current_call_mode(), "qc_fingerprint": qc_fp}
|
|
660
|
+
for row in provenance_long_of(ds)]
|
|
661
|
+
return {"provenance": rows, "versions": model.versions_payload(ds.name)}
|
|
662
|
+
|
|
@@ -748,9 +748,9 @@ def apply_regression(engine, packet, answer):
|
|
|
748
748
|
and not engine.options["whole_image_moves"]:
|
|
749
749
|
# The rows of a look at candidates judged the very cells a move would
|
|
750
750
|
# flip; one glance at the whole image does not overrule them. The
|
|
751
|
-
# gate stays
|
|
752
|
-
#
|
|
753
|
-
#
|
|
751
|
+
# gate stays where the rows put it and the disagreement is on the
|
|
752
|
+
# record; its failed checks unconfirmed, `finalize` writes it there
|
|
753
|
+
# marked for review (a failed check never accepts).
|
|
754
754
|
unit["whole_image_disagreed"] = answer.verdict
|
|
755
755
|
unit["look_flags"] = sorted(set(unit.get("look_flags") or [])
|
|
756
756
|
| {"whole_image_disagreed"})
|
|
@@ -810,22 +810,6 @@ def versions_payload(datasource_name) -> list:
|
|
|
810
810
|
return out
|
|
811
811
|
|
|
812
812
|
|
|
813
|
-
def source_extras(ds) -> dict:
|
|
814
|
-
"""What a save to the source file writes beside the latest gates:
|
|
815
|
-
`provenance` -- a row per gated marker, who set it, how and when
|
|
816
|
-
(`uns[<table>_provenance]`) -- and `versions` (`versions_payload`)."""
|
|
817
|
-
from plexora.agent import cell_exclusions
|
|
818
|
-
from plexora.plugins.gating.server.autogate import report
|
|
819
|
-
|
|
820
|
-
try:
|
|
821
|
-
qc_fp = cell_exclusions.fingerprint(cell_exclusions.call_record(ds))
|
|
822
|
-
except Exception: # no QC to read: the provenance goes without it
|
|
823
|
-
qc_fp = ""
|
|
824
|
-
rows = [{**row, "call_mode": cell_exclusions.current_call_mode(), "qc_fingerprint": qc_fp}
|
|
825
|
-
for row in report.provenance_long_of(ds)]
|
|
826
|
-
return {"provenance": rows, "versions": versions_payload(ds.name)}
|
|
827
|
-
|
|
828
|
-
|
|
829
813
|
def set_gate(ds, marker, low, high, *, expected_revision=None, allow_protected=False,
|
|
830
814
|
empty=False):
|
|
831
815
|
"""Store one marker's range; returns (before, after, new_revision).
|
|
@@ -396,6 +396,8 @@ def save_gates_to_anndata():
|
|
|
396
396
|
active_gates = {channel: low for channel, (low, _high)
|
|
397
397
|
in gating_model.active_gates(dataset).items()}
|
|
398
398
|
|
|
399
|
+
from plexora.plugins.gating.server.autogate import report
|
|
400
|
+
|
|
399
401
|
payload = {
|
|
400
402
|
"image_id": datasource,
|
|
401
403
|
"gates": active_gates,
|
|
@@ -403,7 +405,7 @@ def save_gates_to_anndata():
|
|
|
403
405
|
"imageid_column": imageid_column,
|
|
404
406
|
# Beside the latest gates: where each came from, and every version
|
|
405
407
|
# kept (`<table>_provenance`, `<table>_versions`).
|
|
406
|
-
**
|
|
408
|
+
**report.source_extras(dataset),
|
|
407
409
|
}
|
|
408
410
|
# Markers the Single Cell Classifier decides, and those with a gating
|
|
409
411
|
# session's layer, travel with the gates: their calls and scores as
|
|
@@ -861,7 +861,17 @@ class RemoteSession:
|
|
|
861
861
|
if self.remote.gcloud:
|
|
862
862
|
self._prepare_compute()
|
|
863
863
|
env = self._ssh_environment()
|
|
864
|
-
|
|
864
|
+
built = self._build(env)
|
|
865
|
+
# A Disconnect while the machine was being readied or the session
|
|
866
|
+
# built found nothing to stop (stop() reads `self.session`), so it
|
|
867
|
+
# is honoured here: nothing is spawned for a session already ended.
|
|
868
|
+
with self._lock:
|
|
869
|
+
stopped = self._stopping
|
|
870
|
+
if not stopped:
|
|
871
|
+
self.session = built
|
|
872
|
+
if stopped:
|
|
873
|
+
self._cleanup_helper()
|
|
874
|
+
return
|
|
865
875
|
self.session.establish()
|
|
866
876
|
except BaseException as exc: # noqa: BLE001 - reported, never raised
|
|
867
877
|
self._fail(exc)
|
|
@@ -883,7 +893,9 @@ class RemoteSession:
|
|
|
883
893
|
|
|
884
894
|
self._report_connect("connected", started)
|
|
885
895
|
with self._lock:
|
|
886
|
-
|
|
896
|
+
# Not after a Disconnect that came during establishment: stop()
|
|
897
|
+
# has already said EXITED, and a session it ended stays ended.
|
|
898
|
+
if self.state != STATE_FAILED and not self._stopping:
|
|
887
899
|
self.state = STATE_CONNECTED
|
|
888
900
|
# For a job that was allocated instantly and never announced a
|
|
889
901
|
# queue wait. No-op for one that did -- see the method.
|
|
@@ -338,7 +338,7 @@ def call_capability(tool):
|
|
|
338
338
|
tools included."""
|
|
339
339
|
from plexora import api
|
|
340
340
|
from plexora.agent import registry
|
|
341
|
-
from plexora.agent.bridge_wire import http_status, problem
|
|
341
|
+
from plexora.agent.bridge_wire import encode_images, http_status, problem
|
|
342
342
|
|
|
343
343
|
try:
|
|
344
344
|
policy, origin = _caller()
|
|
@@ -364,7 +364,8 @@ def call_capability(tool):
|
|
|
364
364
|
if not answer["ok"]:
|
|
365
365
|
return jsonify(success=False, error=problem(answer["error"]),
|
|
366
366
|
operation_id=answer.get("operation_id")), http_status(answer["error"])
|
|
367
|
-
|
|
367
|
+
# A rendered image crosses as base64 (JSON cannot carry bytes).
|
|
368
|
+
return jsonify(success=True, result=encode_images(answer["result"]),
|
|
368
369
|
operation_id=answer.get("operation_id"))
|
|
369
370
|
|
|
370
371
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plexora
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.35
|
|
4
4
|
Summary: OpenSeadragon-based cellular image viewing and analysis tool.
|
|
5
5
|
Author-email: BioCognia <support@biocognia.com>
|
|
6
6
|
License-Expression: LicenseRef-Plexora-EULA-1.0
|
|
@@ -15,6 +15,7 @@ License-File: LICENSE
|
|
|
15
15
|
Requires-Dist: aiohttp>=3.14.4
|
|
16
16
|
Requires-Dist: anndata>=0.10
|
|
17
17
|
Requires-Dist: biocognia<0.2,>=0.1.2
|
|
18
|
+
Requires-Dist: biocognia-intelligence<0.4,>=0.2.1
|
|
18
19
|
Requires-Dist: Flask>=3.1
|
|
19
20
|
Requires-Dist: fsspec>=2024.12
|
|
20
21
|
Requires-Dist: h5py>=3.16.0
|