imperal-sdk 4.2.7__tar.gz → 4.2.8__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.7 → imperal_sdk-4.2.8}/CHANGELOG.md +36 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/PKG-INFO +1 -1
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/__init__.py +1 -1
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/manifest_schema.py +28 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/.github/workflows/identity-contract.yml +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/.github/workflows/publish.yml +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/.github/workflows/test.yml +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/.gitignore +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/LICENSE +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/README.md +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/api_surface.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/pyproject.toml +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/.codebase-index-cache.pkl +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ai/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ai/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/auth/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/auth/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/auth/middleware.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/billing/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/billing/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/cache/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/cache/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/cache/protocol.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/action_result.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/error_codes.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/extension.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/filters.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/guards.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/handler.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/kernel_primitives.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/narration.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/narration_guard.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/prompt.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/refusal.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/chat/retry.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/cli/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/cli/main.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/config/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/config/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/context.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/db/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/db/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/errors.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/extension.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/extensions/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/extensions/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/http/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/http/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/manifest.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/notify/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/notify/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/prompts/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/prompts/icnli_integrity_rules.txt +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/prompts/kernel_formatting_rule.txt +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/prompts/kernel_proactivity_rule.txt +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/protocols.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/rpc/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/rpc/codec.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/rpc/contract.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/runtime/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/runtime/executor.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/runtime/llm_provider.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/runtime/message_adapter.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/action_result.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/balance_info.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/chat_result.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/completion_result.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/document.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/event.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/file_info.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/function_call.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/http_response.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/imperal.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/limits_result.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/schemas/subscription_info.schema.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/secrets/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/secrets/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/secrets/exceptions.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/secrets/panel_handler.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/secrets/spec.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/security/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/security/call_token.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/skeleton/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/skeleton/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/storage/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/storage/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/store/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/store/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/store/exceptions.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/testing/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/testing/mock_context.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/testing/mock_secrets.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/tools/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/tools/client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/tools/generate_api_surface.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/tools/validate_identity_contract.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/action_result.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/chat_result.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/client_contracts.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/contracts.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/contributions.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/events.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/health.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/identity.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/models.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/pagination.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/types/store_contracts.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/actions.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/base.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/data.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/display.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/feedback.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/graph.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/input_components.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/interactive.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/layout.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/ui/theme.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/validator.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/src/imperal_sdk/validator_v1_6_0.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/conftest.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/contracts/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/contracts/test_store_contracts.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/fixtures/openapi/auth-gateway.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/fixtures/openapi/registry.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/fixtures/openapi/sharelock-cases.json +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/rpc/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/rpc/test_codec.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/rpc/test_contract.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/runtime/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/runtime/test_llm_provider_config_store.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/runtime/test_llm_provider_ctx_injection.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/store/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/store/test_list_users_client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/store/test_query_all_client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_action_result_typed.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_as_user.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_auth.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_billing.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_cache_client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_cache_model.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_call_token.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_chat_extension_deprecation.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_chat_filters.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_chat_guards.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_chat_guards_bleed.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_chat_prompt.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_chat_pydantic_retry.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_chat_result.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_cli.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_client_contracts.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_config_client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_context.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_context_guards.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_contracts.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_contracts_live.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_contributions.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_document_contract.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_emits_decorator.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_error_codes.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_errors.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_event_schema_v2.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_events_health.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_extension.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_extension_v2.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_extensions_emit.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_handler_p2.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_id_shape_guard.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_identity_contract.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_imperal_schema_v2.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_kernel_primitives.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_manifest.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_manifest_roundtrip_gate.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_manifest_schema.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_manifest_v2_events.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_manifest_v2_other_sections.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_manifest_v2_webhooks.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_manifest_validator_v2.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_mock_context.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_models.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_narration_emission.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_narration_guard.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_openai_max_completion_tokens.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_pagination.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_panel_rendering_contract.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_panels.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_skeleton_decorator.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_spec_validation.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_tools_client.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_ui.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_ui_fileupload_enhanced.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_ui_html.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_ui_image_enhanced.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_ui_open.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_ui_theme.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_user.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_v7_emit_refusal.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_validator.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_validator_drift.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_validator_pep563.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_validator_v1_6_0_rules.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/test_write_arg_bleed.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/tools/__init__.py +0 -0
- {imperal_sdk-4.2.7 → imperal_sdk-4.2.8}/tests/tools/test_generate_api_surface.py +0 -0
|
@@ -2,6 +2,42 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `imperal-sdk` are documented here.
|
|
4
4
|
|
|
5
|
+
## 4.2.8 — 2026-05-13
|
|
6
|
+
|
|
7
|
+
**Fix: `secrets[]` finally in `Manifest` Pydantic schema**
|
|
8
|
+
|
|
9
|
+
EXT-SECRETS-V1 manifest emitter has been writing `manifest["secrets"] = [...]`
|
|
10
|
+
since v4.2.2, but the `Manifest` Pydantic model in `manifest_schema.py` had
|
|
11
|
+
no matching field. With `model_config = ConfigDict(extra="forbid")`, this
|
|
12
|
+
should have caused `validate_manifest_dict()` to reject every manifest that
|
|
13
|
+
declared secrets — but publish-time validators didn't gate through this
|
|
14
|
+
schema, so the drift lived silently for six PATCH releases.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **`SecretDecl` Pydantic model** in `manifest_schema.py` — mirrors
|
|
19
|
+
`imperal_sdk.secrets.spec.SecretSpec.to_manifest_dict()`. Validates
|
|
20
|
+
`name` regex (`^[a-z][a-z0-9_]{0,62}$`), `write_mode` in
|
|
21
|
+
`{user, extension, both}`, `max_bytes` in `[1, 65536]`,
|
|
22
|
+
`rotation_hint_days >= 1` when present, non-empty `description`.
|
|
23
|
+
- **`Manifest.secrets: Optional[List[SecretDecl]]`** field — additive,
|
|
24
|
+
back-compatible with manifests that don't declare any secrets.
|
|
25
|
+
|
|
26
|
+
### Federal invariants
|
|
27
|
+
|
|
28
|
+
| Invariant | What it pins |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `I-MANIFEST-EMITTER-SCHEMA-SYMMETRIC` | (already declared in v4.1.6 canary roundtrip test) Now actually holds for `secrets[]` — emitter and schema agree. |
|
|
31
|
+
|
|
32
|
+
### Migration notes
|
|
33
|
+
|
|
34
|
+
- **No code change required** in any extension. Existing manifests with
|
|
35
|
+
`secrets[]` (emitted since v4.2.2) now pass strict Pydantic validation
|
|
36
|
+
instead of relying on validators that didn't gate through the schema.
|
|
37
|
+
- Manifests with malformed secret entries (e.g. `name` with uppercase or
|
|
38
|
+
invalid `write_mode`) will now fail `validate_manifest_dict()` at
|
|
39
|
+
publish time. Previously they slipped through.
|
|
40
|
+
|
|
5
41
|
## 4.2.7 — 2026-05-13
|
|
6
42
|
|
|
7
43
|
**OAuth callback infrastructure + `ctx.webhook_url()` helper**
|
|
@@ -240,6 +240,26 @@ class TrayDecl(BaseModel):
|
|
|
240
240
|
tooltip: Optional[str] = None
|
|
241
241
|
|
|
242
242
|
|
|
243
|
+
class SecretDecl(BaseModel):
|
|
244
|
+
"""One entry in `manifest['secrets']` — EXT-SECRETS-V1 (v4.2.2+).
|
|
245
|
+
|
|
246
|
+
Mirrors :class:`imperal_sdk.secrets.spec.SecretSpec` after
|
|
247
|
+
``to_manifest_dict()``. The Pydantic model exists so
|
|
248
|
+
:func:`validate_manifest_dict` round-trips the emitted shape — closes
|
|
249
|
+
the `I-MANIFEST-EMITTER-SCHEMA-SYMMETRIC` drift gap that lived
|
|
250
|
+
silently from v4.2.2 → v4.2.7.
|
|
251
|
+
"""
|
|
252
|
+
|
|
253
|
+
model_config = ConfigDict(extra="forbid")
|
|
254
|
+
|
|
255
|
+
name: str = Field(..., pattern=r"^[a-z][a-z0-9_]{0,62}$")
|
|
256
|
+
description: str = Field(..., min_length=1)
|
|
257
|
+
required: bool = False
|
|
258
|
+
write_mode: Literal["user", "extension", "both"] = "user"
|
|
259
|
+
max_bytes: int = Field(default=4096, ge=1, le=65536)
|
|
260
|
+
rotation_hint_days: Optional[int] = Field(default=None, ge=1)
|
|
261
|
+
|
|
262
|
+
|
|
243
263
|
# === Root model =======================================================
|
|
244
264
|
|
|
245
265
|
class Manifest(BaseModel):
|
|
@@ -290,6 +310,14 @@ class Manifest(BaseModel):
|
|
|
290
310
|
# Reserved for first-party Imperal authors (validator V31).
|
|
291
311
|
system: Optional[bool] = None
|
|
292
312
|
|
|
313
|
+
# Federal v4.2.2 — EXT-SECRETS-V1. Optional array of per-user encrypted
|
|
314
|
+
# credential declarations the extension reads via ``ctx.secrets.get()``.
|
|
315
|
+
# Closes the `I-MANIFEST-EMITTER-SCHEMA-SYMMETRIC` drift where the
|
|
316
|
+
# emitter wrote `secrets[]` from v4.2.2 onwards but this Pydantic model
|
|
317
|
+
# had no matching field (extra="forbid" would have rejected — but
|
|
318
|
+
# publish-time validators didn't gate through here).
|
|
319
|
+
secrets: Optional[List[SecretDecl]] = None
|
|
320
|
+
|
|
293
321
|
# --- Marketplace merge (docs/imperal-cloud/developer-portal.md) ---
|
|
294
322
|
name: Optional[str] = None
|
|
295
323
|
description: Optional[str] = None
|
|
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.7 → imperal_sdk-4.2.8}/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.7 → imperal_sdk-4.2.8}/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
|
|
File without changes
|
|
File without changes
|