imperal-sdk 4.2.4__tar.gz → 4.2.5__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.
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/CHANGELOG.md +26 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/PKG-INFO +1 -1
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/__init__.py +1 -1
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/validator.py +11 -2
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_panels.py +4 -1
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/.github/workflows/identity-contract.yml +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/.github/workflows/publish.yml +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/.github/workflows/test.yml +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/.gitignore +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/LICENSE +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/README.md +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/api_surface.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/pyproject.toml +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/.codebase-index-cache.pkl +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ai/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ai/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/auth/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/auth/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/auth/middleware.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/billing/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/billing/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/cache/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/cache/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/cache/protocol.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/action_result.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/error_codes.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/extension.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/filters.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/guards.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/handler.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/kernel_primitives.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/narration.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/narration_guard.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/prompt.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/refusal.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/chat/retry.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/cli/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/cli/main.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/config/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/config/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/context.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/db/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/db/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/errors.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/extension.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/extensions/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/extensions/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/http/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/http/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/manifest.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/manifest_schema.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/notify/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/notify/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/prompts/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/prompts/icnli_integrity_rules.txt +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/prompts/kernel_formatting_rule.txt +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/prompts/kernel_proactivity_rule.txt +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/protocols.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/rpc/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/rpc/codec.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/rpc/contract.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/runtime/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/runtime/executor.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/runtime/llm_provider.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/runtime/message_adapter.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/action_result.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/balance_info.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/chat_result.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/completion_result.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/document.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/event.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/file_info.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/function_call.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/http_response.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/imperal.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/limits_result.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/subscription_info.schema.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/secrets/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/secrets/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/secrets/exceptions.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/secrets/panel_handler.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/secrets/spec.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/security/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/security/call_token.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/skeleton/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/skeleton/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/storage/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/storage/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/store/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/store/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/store/exceptions.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/testing/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/testing/mock_context.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/testing/mock_secrets.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/tools/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/tools/client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/tools/generate_api_surface.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/tools/validate_identity_contract.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/action_result.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/chat_result.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/client_contracts.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/contracts.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/contributions.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/events.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/health.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/identity.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/models.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/pagination.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/types/store_contracts.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/actions.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/base.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/data.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/display.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/feedback.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/graph.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/input_components.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/interactive.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/layout.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/ui/theme.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/validator_v1_6_0.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/conftest.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/contracts/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/contracts/test_store_contracts.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/fixtures/openapi/auth-gateway.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/fixtures/openapi/registry.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/fixtures/openapi/sharelock-cases.json +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/rpc/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/rpc/test_codec.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/rpc/test_contract.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/runtime/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/runtime/test_llm_provider_config_store.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/runtime/test_llm_provider_ctx_injection.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/store/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/store/test_list_users_client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/store/test_query_all_client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_action_result_typed.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_as_user.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_auth.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_billing.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_cache_client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_cache_model.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_call_token.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_chat_extension_deprecation.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_chat_filters.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_chat_guards.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_chat_guards_bleed.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_chat_prompt.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_chat_pydantic_retry.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_chat_result.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_cli.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_client_contracts.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_config_client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_context.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_context_guards.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_contracts.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_contracts_live.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_contributions.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_document_contract.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_emits_decorator.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_error_codes.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_errors.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_event_schema_v2.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_events_health.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_extension.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_extension_v2.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_extensions_emit.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_handler_p2.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_id_shape_guard.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_identity_contract.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_imperal_schema_v2.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_kernel_primitives.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_manifest.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_manifest_roundtrip_gate.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_manifest_schema.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_manifest_v2_events.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_manifest_v2_other_sections.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_manifest_v2_webhooks.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_manifest_validator_v2.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_mock_context.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_models.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_narration_emission.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_narration_guard.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_openai_max_completion_tokens.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_pagination.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_panel_rendering_contract.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_skeleton_decorator.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_spec_validation.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_tools_client.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_ui.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_ui_fileupload_enhanced.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_ui_html.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_ui_image_enhanced.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_ui_open.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_ui_theme.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_user.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_v7_emit_refusal.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_validator.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_validator_drift.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_validator_pep563.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_validator_v1_6_0_rules.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/test_write_arg_bleed.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/tools/__init__.py +0 -0
- {imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/tests/tools/test_generate_api_surface.py +0 -0
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `imperal-sdk` are documented here.
|
|
4
4
|
|
|
5
|
+
## 4.2.5 — 2026-05-13
|
|
6
|
+
|
|
7
|
+
**Fix: synthetic `__panel__*` tools excluded from validator tool_count + tests**
|
|
8
|
+
|
|
9
|
+
v4.2.4 introduced an unconditional synthetic `secrets` panel via `Extension.__init__`,
|
|
10
|
+
which auto-registers a `__panel__secrets` tool internally. The validator's `tool_count`
|
|
11
|
+
logic was counting this synthetic tool as a user-authored tool, masking V3 ("at least
|
|
12
|
+
one tool") error detection for extensions with zero user tools and inflating
|
|
13
|
+
marketplace tool counts.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **`validator.tool_count`** now excludes any tool whose name matches the
|
|
18
|
+
synthetic-prefix allowlist (`__panel__`, `__widget__`, `__tray__`, `__webhook__`).
|
|
19
|
+
These are platform-provided, not author-authored, and shouldn't count.
|
|
20
|
+
- **`V3 "at least one tool"`** check now correctly fires for ext'ы with only
|
|
21
|
+
synthetic auto-registered tools.
|
|
22
|
+
- `tests/test_panels.py::test_multiple_panels` updated to assert +1 for the
|
|
23
|
+
always-present synthetic `secrets` panel.
|
|
24
|
+
|
|
25
|
+
### Notes
|
|
26
|
+
|
|
27
|
+
- No behavior change for extensions with at least one real `@ext.tool` or
|
|
28
|
+
ChatExtension. Strict-tool-count-zero ext'ы now properly fail V3 again.
|
|
29
|
+
- Marketplace tool counts shown to users no longer count synthetic panels.
|
|
30
|
+
|
|
5
31
|
## 4.2.4 — 2026-05-13
|
|
6
32
|
|
|
7
33
|
**EXT-SECRETS-V1 — unconditional synthetic Secrets panel**
|
|
@@ -145,8 +145,17 @@ def validate_extension(ext) -> ValidationReport:
|
|
|
145
145
|
fix="Set version to a valid semver string",
|
|
146
146
|
))
|
|
147
147
|
|
|
148
|
-
# Count registered @ext.tool entries
|
|
149
|
-
|
|
148
|
+
# Count registered @ext.tool entries. Exclude synthetic tools that the
|
|
149
|
+
# SDK auto-registers internally (e.g. __panel__secrets from the
|
|
150
|
+
# EXT-SECRETS-V1 unconditional synthetic Secrets panel, v4.2.4) — those
|
|
151
|
+
# are platform-provided, not user-authored, and shouldn't count toward
|
|
152
|
+
# V3 "at least one tool" or marketplace tool counts.
|
|
153
|
+
_all_tools = getattr(ext, "_tools", {})
|
|
154
|
+
_SYNTHETIC_PREFIXES = ("__panel__", "__widget__", "__tray__", "__webhook__")
|
|
155
|
+
tools = {
|
|
156
|
+
name: t for name, t in _all_tools.items()
|
|
157
|
+
if not any(name.startswith(p) for p in _SYNTHETIC_PREFIXES)
|
|
158
|
+
}
|
|
150
159
|
report.tool_count = len(tools)
|
|
151
160
|
|
|
152
161
|
# Collect all ChatExtension instances registered on this extension
|
|
@@ -34,9 +34,12 @@ class TestPanelDecorator:
|
|
|
34
34
|
async def left(ctx): pass
|
|
35
35
|
@ext.panel("stats", slot="right", title="Right")
|
|
36
36
|
async def right(ctx): pass
|
|
37
|
-
|
|
37
|
+
# +1 for the synthetic 'secrets' panel auto-injected by Extension.__init__
|
|
38
|
+
# (EXT-SECRETS-V1 v4.2.4) — see Extension._auto_register_secrets_panel.
|
|
39
|
+
assert len(ext.panels) == 3
|
|
38
40
|
assert "sidebar" in ext.panels
|
|
39
41
|
assert "stats" in ext.panels
|
|
42
|
+
assert "secrets" in ext.panels
|
|
40
43
|
|
|
41
44
|
def test_default_slot(self):
|
|
42
45
|
ext = Extension("test-app")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/completion_result.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{imperal_sdk-4.2.4 → imperal_sdk-4.2.5}/src/imperal_sdk/schemas/subscription_info.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|