abstractcore 2.20.2__tar.gz → 2.22.0__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.
- {abstractcore-2.20.2 → abstractcore-2.22.0}/PKG-INFO +3 -4
- {abstractcore-2.20.2 → abstractcore-2.22.0}/README.md +2 -3
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/model_downloads_catalog.json +11 -1
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/model_downloads_catalog.schema.json +11 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/__init__.py +10 -1
- abstractcore-2.22.0/abstractcore/comms/email/discovery.py +833 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/limits.py +1 -1
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/models.py +7 -2
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/oauth.py +26 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/policy.py +11 -1
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/store.py +151 -14
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/capability_defaults.py +51 -1
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/email_cli.py +110 -15
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/manager.py +169 -2
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/model_catalog.py +34 -1
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/model_materializer.py +33 -8
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/route_engines.py +56 -7
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/console/theme_sync.py +111 -4
- abstractcore-2.22.0/abstractcore/console/themes.py +305 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/console/web.py +874 -255
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/email_routes.py +116 -23
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/version.py +1 -1
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore.egg-info/PKG-INFO +3 -4
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore.egg-info/SOURCES.txt +2 -0
- abstractcore-2.22.0/tests/test_console_email_tab.py +565 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_console_web.py +91 -1
- abstractcore-2.20.2/abstractcore/console/themes.py +0 -298
- {abstractcore-2.20.2 → abstractcore-2.22.0}/LICENSE +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/apps/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/apps/__main__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/apps/app_config_utils.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/apps/deepsearch.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/apps/extractor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/apps/intent.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/apps/judge.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/apps/summarizer.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/architectures/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/architectures/detection.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/architectures/enums.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/architectures/response_postprocessing.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/architectures/thinking_controls.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/OCRA.ttf +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/OCRB.ttf +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/OCRBL.ttf +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/README.md +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/abstractframework_identity.json +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/architecture_formats.json +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/bloc-schema.jsonld +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/model_capabilities.json +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/model_capabilities.schema.json +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/semantic_models.md +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/session_schema.json +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/capabilities/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/capabilities/errors.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/capabilities/host.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/capabilities/music_selectors.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/capabilities/registry.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/capabilities/scene3d_selectors.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/capabilities/types.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/capabilities/vision_catalog.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/bodystructure.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/client.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/context.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/errors.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/imap_codec.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/legacy.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/search.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/comms/email/vault.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/analytics.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/cache.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/config.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/exceptions.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/glyph_processor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/optimizer.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/orchestrator.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/pil_text_renderer.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/quality.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/text_formatter.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/compression/vision_compressor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/engines.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/host_jobs.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/main.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/model_verify.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/models_engines_cli.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/provider_profiles.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/recommendations.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/config/vision_config.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/console/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/bloc_kv.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/bloc_metadata.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/cached_session.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/degeneration.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/endpoint_damping.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/enums.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/factory.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/file_blocs.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/file_boxes.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/generate_contract.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/interface.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/multimodal_generation.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/output_specs.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/retry.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/session.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/core/types.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/download.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/embeddings/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/embeddings/manager.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/embeddings/models.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/endpoint/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/endpoint/app.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/events/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/exceptions/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/mcp/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/mcp/client.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/mcp/factory.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/mcp/naming.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/mcp/stdio_client.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/mcp/tool_source.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/auto_handler.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/base.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/capabilities.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/delivery.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/enrichment.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/handlers/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/handlers/anthropic_handler.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/handlers/local_handler.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/handlers/openai_handler.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/openai_parts.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/pdf_routing.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/processors/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/processors/audio_processor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/processors/direct_pdf_processor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/processors/glyph_pdf_processor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/processors/image_processor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/processors/office_processor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/processors/pdf_processor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/processors/text_processor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/processors/video_processor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/types.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/utils/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/utils/image_scaler.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/utils/video_frames.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/media/vision_fallback.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/processing/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/processing/basic_deepsearch.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/processing/basic_extractor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/processing/basic_intent.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/processing/basic_judge.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/processing/basic_summarizer.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/_http.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/anthropic_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/base.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/capability_host.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/endpoint_context.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/generation_cancel.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/generation_progress.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/hf_residency.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/huggingface_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/lmstudio_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/mlx_model_rules.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/mlx_native_cache.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/mlx_native_session.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/mlx_prefill_observer.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/mlx_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/mlx_qwen4.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/mlx_residency.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/mlx_runtime.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/mlx_vision_addon.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/model_capabilities.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/model_config_fingerprint.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/ollama_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/openai_compatible_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/openai_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/openrouter_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/portkey_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/process_residency.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/registry.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/speculation.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/streaming.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/tokenizer_fingerprint.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/vllm_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/providers/weights_fingerprint.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/py.typed +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/__main__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/app.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/audio_endpoints.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/camera_endpoints.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/capability_generation.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/console_routes.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/credentials.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/first_run.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/host_routes.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/scene3d_endpoints.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/session_routes.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/server/vision_endpoints.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/structured/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/structured/handler.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/structured/retry.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/structured/schema_compat.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/testing/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/testing/mailserver.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/abstractignore.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/arg_canonicalizer.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/arg_coercion.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/browser_tools.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/code_analysis.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/common_tools.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/comms_tools.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/core.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/email_digests.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/fetch_url_ssrf.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/handler.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/inventory.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/parser.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/process_tree.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/registry.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/risk_facts.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/shell_session.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/shell_tools.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/syntax_rewriter.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/tag_rewriter.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/telegram_tdlib.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/telegram_tools.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/tools/wire_naming.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/__init__.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/async_stream.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/cli.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/context_calibration.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/context_estimate.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/data_registry.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/display.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/file_filters.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/host_profile.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/hostinfo.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/identity.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/install_settings.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/jsonish.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/memory.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/message_preprocessor.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/model_cache.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/model_fit.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/residency.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/self_fixes.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/structured_logging.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/token_utils.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/trace_export.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/truncation.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/vlm_token_calculator.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/windows_dll.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/utils/workspace_paths.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore.egg-info/dependency_links.txt +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore.egg-info/entry_points.txt +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore.egg-info/requires.txt +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore.egg-info/top_level.txt +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/pyproject.toml +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/setup.cfg +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_abstractendpoint_singleton_provider.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_agentic_cli_compatibility.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_basic_session.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_bloc_kv.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_bloc_kv_cache_dtype.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_bloc_kv_endpoint.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_bloc_kv_engine_fingerprint.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_bloc_kv_model_config_fingerprint.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_bloc_kv_tokenizer_fingerprint.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_bloc_kv_weights_fingerprint.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_bloc_metadata_json_extract.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_cached_session_kv_mode.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_cached_session_kv_thinking_prefix.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_capabilities_registry.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_capabilities_registry_preferred_backends_from_config.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_complete_integration.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_comprehensive_events.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_core_components.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_display_rule.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_email_digests.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_embedding_model_token_warnings.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_enhanced_prompt.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_environment_variable_tool_call_tags.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_factory.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_file_bloc_store_unit.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_file_boxes_cached_session.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_final_accuracy.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_final_comprehensive.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_final_graceful_errors.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_generate_contract.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_generate_response_reasoning_property_unit.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_generate_with_outputs.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_graceful_fallback.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_import_debug.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_import_safety.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_incremental_thinking_tag_stripper.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_install_hints_no_bare_packages.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_install_settings.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_integrated_functionality.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_llms_sources.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_mcp_integration.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_mcp_stdio_client.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_multimodal_generate_output.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_openai_prompt_cache_key_passthrough.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_output_specs.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_packaging_assets.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_packaging_extras.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_prompt_cache_api.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_prompt_cache_bloc_composition.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_prompt_cache_bloc_e2e_gate.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_prompt_cache_control_plane.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_prompt_cache_prepare_modules_thinking_http.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_retry_observability.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_retry_strategy.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_seed_determinism.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_seed_temperature_basic.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_sensory_prompting.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_server_prompt_cache_control_plane_proxy.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_server_prompt_cache_key_passthrough.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_session_reasoning_persistence_unit.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_structured_output_truncation_retry.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_text_only_model_experience.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_unload_memory.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_user_scenario_validation.py +0 -0
- {abstractcore-2.20.2 → abstractcore-2.22.0}/tests/test_voice_host_credentials.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abstractcore
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.22.0
|
|
4
4
|
Summary: Unified interface to all LLM providers with essential infrastructure for tool calling, streaming, and model management
|
|
5
5
|
Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
|
|
6
6
|
Maintainer-email: Laurent-Philippe Albou <contact@abstractcore.ai>
|
|
@@ -455,7 +455,7 @@ You can also persist settings (including API keys) via the config CLI:
|
|
|
455
455
|
- Embeddings and semantic search → [Embeddings](docs/embeddings.md)
|
|
456
456
|
- Observability: global event bus + interaction traces → [Architecture](docs/architecture.md), [API Reference (Events)](docs/api-reference.md#eventtype), [Interaction Tracing](docs/interaction-tracing.md)
|
|
457
457
|
- MCP (Model Context Protocol): discover tools from MCP servers (HTTP/stdio) → [MCP](docs/mcp.md)
|
|
458
|
-
- Email: one IMAP/SMTP account (password or OAuth2), encrypted credentials, recipient policy, send limits, read-only mailbox and email tools → [Email](docs/email.md)
|
|
458
|
+
- Email: one IMAP/SMTP account (password or OAuth2; servers found from the address), encrypted credentials, recipient policy, send limits, read-only mailbox and email tools → [Email](docs/email.md)
|
|
459
459
|
- OpenAI-compatible server: one `/v1` gateway for chat + optional `/v1/images/*` and `/v1/audio/*` endpoints → [Server](docs/server.md)
|
|
460
460
|
|
|
461
461
|
## Tool calling (passthrough by default)
|
|
@@ -728,8 +728,7 @@ abstractcore engines install ollama --dry-run # the exact install command
|
|
|
728
728
|
Email (see [Email](docs/email.md)):
|
|
729
729
|
|
|
730
730
|
```bash
|
|
731
|
-
abstractcore email connect --address me@example.com
|
|
732
|
-
--imap-host imap.example.com --smtp-host smtp.example.com --password <value>
|
|
731
|
+
abstractcore email connect --address me@example.com --password <value> # servers found from the address
|
|
733
732
|
abstractcore email test
|
|
734
733
|
abstractcore email status
|
|
735
734
|
```
|
|
@@ -270,7 +270,7 @@ You can also persist settings (including API keys) via the config CLI:
|
|
|
270
270
|
- Embeddings and semantic search → [Embeddings](docs/embeddings.md)
|
|
271
271
|
- Observability: global event bus + interaction traces → [Architecture](docs/architecture.md), [API Reference (Events)](docs/api-reference.md#eventtype), [Interaction Tracing](docs/interaction-tracing.md)
|
|
272
272
|
- MCP (Model Context Protocol): discover tools from MCP servers (HTTP/stdio) → [MCP](docs/mcp.md)
|
|
273
|
-
- Email: one IMAP/SMTP account (password or OAuth2), encrypted credentials, recipient policy, send limits, read-only mailbox and email tools → [Email](docs/email.md)
|
|
273
|
+
- Email: one IMAP/SMTP account (password or OAuth2; servers found from the address), encrypted credentials, recipient policy, send limits, read-only mailbox and email tools → [Email](docs/email.md)
|
|
274
274
|
- OpenAI-compatible server: one `/v1` gateway for chat + optional `/v1/images/*` and `/v1/audio/*` endpoints → [Server](docs/server.md)
|
|
275
275
|
|
|
276
276
|
## Tool calling (passthrough by default)
|
|
@@ -543,8 +543,7 @@ abstractcore engines install ollama --dry-run # the exact install command
|
|
|
543
543
|
Email (see [Email](docs/email.md)):
|
|
544
544
|
|
|
545
545
|
```bash
|
|
546
|
-
abstractcore email connect --address me@example.com
|
|
547
|
-
--imap-host imap.example.com --smtp-host smtp.example.com --password <value>
|
|
546
|
+
abstractcore email connect --address me@example.com --password <value> # servers found from the address
|
|
548
547
|
abstractcore email test
|
|
549
548
|
abstractcore email status
|
|
550
549
|
```
|
{abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/model_downloads_catalog.json
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "./model_downloads_catalog.schema.json",
|
|
3
3
|
"schema": "model_downloads_catalog_v1",
|
|
4
4
|
"version": "2026-09-29",
|
|
5
|
-
"notes": "Curated download catalog. Sizes are bytes observed in real engine stores/caches (size_source=catalog) or null (unknown). verified=true means the artifact id was seen on a real engine or cache when the seed was built; other ids follow each engine's naming convention and are checked by presence probes and by the post-download verification in model_materializer. upstream={method, checked, revision?} records an id verified to exist upstream on that date (hf_api: HfApi.model_info(files_metadata=True), download_bytes = the weight files; ollama_registry: the registry manifest, download_bytes = the sum of its layers); such an artifact must carry its verified size. options carries route options the recommendation copies (the MTP builds: speculation). resident={bytes, source} (optional, per artifact) is the MEASURED memory the engine needs while it runs, for models whose working memory is not their file size (video generation): the fit verdict uses it instead of download_bytes, and `source` says where and at which profile it was measured.",
|
|
5
|
+
"notes": "Curated download catalog. Sizes are bytes observed in real engine stores/caches (size_source=catalog) or null (unknown). verified=true means the artifact id was seen on a real engine or cache when the seed was built; other ids follow each engine's naming convention and are checked by presence probes and by the post-download verification in model_materializer. upstream={method, checked, revision?} records an id verified to exist upstream on that date (hf_api: HfApi.model_info(files_metadata=True), download_bytes = the weight files; ollama_registry: the registry manifest, download_bytes = the sum of its layers); such an artifact must carry its verified size. options carries route options the recommendation copies (the MTP builds: speculation). resident={bytes, source} (optional, per artifact) is the MEASURED memory the engine needs while it runs, for models whose working memory is not their file size (video generation): the fit verdict uses it instead of download_bytes, and `source` says where and at which profile it was measured. route={key, provider, model} (optional, per artifact) names the capability route that runs the artifact when its engine is not the download provider (AbstractVoice's faster-whisper runs `base`, fetched as a Hugging Face repo): what a surface shows and writes for that route, and how a route stored with the download pair is repaired (capability_defaults.repair_download_pair_routes).",
|
|
6
6
|
"companion_sizes": {
|
|
7
7
|
"mlx-community/Qwen3.5-4B-MTP-4bit": {
|
|
8
8
|
"download_bytes": 67859512,
|
|
@@ -4345,6 +4345,11 @@
|
|
|
4345
4345
|
"download_bytes": 147886409,
|
|
4346
4346
|
"size_source": "catalog",
|
|
4347
4347
|
"verified": true,
|
|
4348
|
+
"route": {
|
|
4349
|
+
"key": "input.voice",
|
|
4350
|
+
"provider": "faster-whisper",
|
|
4351
|
+
"model": "base"
|
|
4352
|
+
},
|
|
4348
4353
|
"upstream": {
|
|
4349
4354
|
"method": "hf_api",
|
|
4350
4355
|
"checked": "2026-09-28",
|
|
@@ -4381,6 +4386,11 @@
|
|
|
4381
4386
|
"download_bytes": 11105348328,
|
|
4382
4387
|
"size_source": "catalog",
|
|
4383
4388
|
"verified": true,
|
|
4389
|
+
"route": {
|
|
4390
|
+
"key": "output.music",
|
|
4391
|
+
"provider": "acestep",
|
|
4392
|
+
"model": "ACE-Step/acestep-v15-xl-turbo-diffusers"
|
|
4393
|
+
},
|
|
4384
4394
|
"upstream": {
|
|
4385
4395
|
"method": "hf_api",
|
|
4386
4396
|
"checked": "2026-09-28",
|
{abstractcore-2.20.2 → abstractcore-2.22.0}/abstractcore/assets/model_downloads_catalog.schema.json
RENAMED
|
@@ -95,6 +95,17 @@
|
|
|
95
95
|
"properties": {"speculation": {}},
|
|
96
96
|
"additionalProperties": false
|
|
97
97
|
},
|
|
98
|
+
"route": {
|
|
99
|
+
"type": "object",
|
|
100
|
+
"description": "The capability route that runs this artifact when its engine is not the download provider (AbstractVoice's faster-whisper runs `base`, fetched from a Hugging Face repo): what a surface shows and writes for that route, and the target of the repair of a route stored with the download pair.",
|
|
101
|
+
"required": ["key", "provider", "model"],
|
|
102
|
+
"properties": {
|
|
103
|
+
"key": {"type": "string", "minLength": 1},
|
|
104
|
+
"provider": {"type": "string", "minLength": 1},
|
|
105
|
+
"model": {"type": "string", "minLength": 1}
|
|
106
|
+
},
|
|
107
|
+
"additionalProperties": false
|
|
108
|
+
},
|
|
98
109
|
"note": {"type": "string", "minLength": 1},
|
|
99
110
|
"upstream": {"$ref": "#/$defs/upstream"},
|
|
100
111
|
"resident": {
|
|
@@ -20,7 +20,9 @@ Modules: `models` (typed settings), `client` (IMAP read-only + SMTP, verified TL
|
|
|
20
20
|
`bodystructure` (the MIME structure used to fetch only the parts needed),
|
|
21
21
|
`policy` (recipient allowlist / denylist), `limits` (send rate limits), `vault` (encrypted
|
|
22
22
|
credentials), `oauth` (OAuth2 / XOAUTH2), `store` (settings + secret + status), `context`
|
|
23
|
-
(the guarded send), `errors` (typed errors), `legacy` (one-time import of pre-2.20 settings)
|
|
23
|
+
(the guarded send), `errors` (typed errors), `legacy` (one-time import of pre-2.20 settings),
|
|
24
|
+
`discovery` (a mailbox's IMAP/SMTP servers from its address: known providers, autoconfig, ISPDB,
|
|
25
|
+
DNS SRV, MX).
|
|
24
26
|
"""
|
|
25
27
|
|
|
26
28
|
from .client import DEFAULT_MAX_MESSAGE_BYTES, MAX_LIST_LIMIT, EmailClient, auto_submitted_value, tls_context
|
|
@@ -52,6 +54,7 @@ from .errors import (
|
|
|
52
54
|
EmailTransient,
|
|
53
55
|
EmailUnreachable,
|
|
54
56
|
)
|
|
57
|
+
from .discovery import EmailDiscoveryFailed, discover_servers, require_servers, server_defaults
|
|
55
58
|
from .limits import SendRateLimiter
|
|
56
59
|
from .models import (
|
|
57
60
|
AUTO_SUBMITTED_GENERATED,
|
|
@@ -83,6 +86,7 @@ from .oauth import (
|
|
|
83
86
|
OAuthTokenProvider,
|
|
84
87
|
TokenSet,
|
|
85
88
|
builtin_client,
|
|
89
|
+
oauth_providers_public,
|
|
86
90
|
provider_preset,
|
|
87
91
|
resolve_oauth_client,
|
|
88
92
|
xoauth2_string,
|
|
@@ -115,6 +119,7 @@ __all__ = [
|
|
|
115
119
|
"EmailClient",
|
|
116
120
|
"EmailContext",
|
|
117
121
|
"EmailDisabled",
|
|
122
|
+
"EmailDiscoveryFailed",
|
|
118
123
|
"EmailError",
|
|
119
124
|
"EmailInvalidMessage",
|
|
120
125
|
"EmailInvalidSettings",
|
|
@@ -158,6 +163,10 @@ __all__ = [
|
|
|
158
163
|
"SmtpSettings",
|
|
159
164
|
"TokenSet",
|
|
160
165
|
"builtin_client",
|
|
166
|
+
"discover_servers",
|
|
167
|
+
"oauth_providers_public",
|
|
168
|
+
"require_servers",
|
|
169
|
+
"server_defaults",
|
|
161
170
|
"evaluate",
|
|
162
171
|
"guarded_send",
|
|
163
172
|
"normalize_address",
|