imperal-sdk 5.0.2__tar.gz → 5.0.3__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-5.0.2 → imperal_sdk-5.0.3}/CHANGELOG.md +44 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/PKG-INFO +1 -1
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/__init__.py +1 -1
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/manifest_schema.py +28 -1
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/imperal.schema.json +259 -247
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_sdk_version_stamp.py +0 -1
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/.github/workflows/identity-contract.yml +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/.github/workflows/publish.yml +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/.github/workflows/test.yml +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/.gitignore +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/LICENSE +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/README.md +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/api_surface.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/pyproject.toml +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/.codebase-index-cache.pkl +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ai/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ai/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/auth/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/auth/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/auth/middleware.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/billing/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/billing/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/cache/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/cache/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/cache/protocol.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/action_result.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/error_codes.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/exceptions.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/extension.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/filters.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/guards.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/kernel_primitives.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/narration.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/narration_guard.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/prompt.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/refusal.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/cli/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/cli/main.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/config/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/config/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/context.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/db/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/db/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/errors.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/extension.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/extensions/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/extensions/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/http/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/http/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/manifest.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/notify/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/notify/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/prompts/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/prompts/icnli_integrity_rules.txt +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/prompts/kernel_formatting_rule.txt +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/prompts/kernel_proactivity_rule.txt +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/protocols.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/rpc/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/rpc/codec.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/rpc/contract.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/runtime/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/runtime/executor.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/runtime/llm_provider.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/runtime/message_adapter.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/action_result.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/balance_info.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/chat_result.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/completion_result.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/document.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/event.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/file_info.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/function_call.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/http_response.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/limits_result.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/subscription_info.schema.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/secrets/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/secrets/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/secrets/exceptions.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/secrets/panel_handler.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/secrets/spec.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/security/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/security/call_token.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/skeleton/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/skeleton/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/storage/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/storage/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/store/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/store/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/store/exceptions.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/testing/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/testing/mock_context.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/testing/mock_secrets.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/tools/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/tools/client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/tools/generate_api_surface.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/tools/validate_identity_contract.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/action_result.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/chat_result.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/client_contracts.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/contracts.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/contributions.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/events.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/health.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/identity.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/models.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/pagination.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/store_contracts.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/actions.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/base.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/data.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/display.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/feedback.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/graph.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/input_components.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/interactive.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/layout.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/theme.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/validator.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/validator_v1_6_0.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/conftest.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/contracts/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/contracts/test_store_contracts.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/fixtures/openapi/auth-gateway.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/fixtures/openapi/registry.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/fixtures/openapi/sharelock-cases.json +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/rpc/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/rpc/test_codec.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/rpc/test_contract.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/runtime/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/runtime/test_llm_provider_config_store.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/runtime/test_llm_provider_ctx_injection.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/store/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/store/test_list_users_client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/store/test_query_all_client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_action_result_typed.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_as_user.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_auth.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_billing.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_cache_client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_cache_model.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_call_token.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_extension_deprecation.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_extension_no_llm_router.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_filters.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_function_background_flag.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_guards.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_guards_bleed.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_prompt.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_result.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_cli.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_client_contracts.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_config_client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_context.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_context_background_task.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_context_deliver_chat_message.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_context_guards.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_contracts.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_contracts_live.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_contributions.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_data_model_kwarg.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_document_contract.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_emits_decorator.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_error_codes.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_errors.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_event_schema_v2.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_events_health.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_extension.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_extension_v2.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_extensions_emit.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_http_timeout_override.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_id_shape_guard.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_identity_contract.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_imperal_schema_v2.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_kernel_primitives.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_no_orchestrator_tool.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_roundtrip_gate.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_schema.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_v2_events.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_v2_other_sections.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_v2_webhooks.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_validator_v2.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_mock_context.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_models.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_narration_emission.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_narration_guard.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_openai_max_completion_tokens.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_pagination.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_panel_rendering_contract.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_panels.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_skeleton_decorator.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_spec_validation.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_tools_client.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui_fileupload_enhanced.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui_html.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui_image_enhanced.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui_open.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui_theme.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_user.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_v7_emit_refusal.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_validator.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_validator_drift.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_validator_pep563.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_validator_v1_6_0_rules.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_validator_v25.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_write_arg_bleed.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/tools/__init__.py +0 -0
- {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/tools/test_generate_api_surface.py +0 -0
|
@@ -2,6 +2,50 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `imperal-sdk` are documented here.
|
|
4
4
|
|
|
5
|
+
## 5.0.3 — 2026-05-27 — Manifest `hidden_in_sidebar` field (system-only)
|
|
6
|
+
|
|
7
|
+
System apps may opt out of the Imperal Panel sidebar tile by declaring
|
|
8
|
+
`hidden_in_sidebar: true` in their `imperal.json`. Chat tools, lifecycle
|
|
9
|
+
hooks, skeleton refreshes, and audit ledger continue to function — only
|
|
10
|
+
the visual sidebar icon is suppressed.
|
|
11
|
+
|
|
12
|
+
### Federal contract — `I-EXT-MANIFEST-HIDDEN-SIDEBAR-SYSTEM-ONLY`
|
|
13
|
+
|
|
14
|
+
`hidden_in_sidebar=true` is only honoured when `system=true` is also set.
|
|
15
|
+
Third-party extensions MUST NOT hide themselves from the user-facing
|
|
16
|
+
sidebar. A new root model validator on `Manifest` rejects any manifest
|
|
17
|
+
that pairs `hidden_in_sidebar=true` with `system=false`/`None`:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
hidden_in_sidebar=True requires system=True (federal
|
|
21
|
+
I-EXT-MANIFEST-HIDDEN-SIDEBAR-SYSTEM-ONLY — third-party extensions
|
|
22
|
+
cannot hide themselves from the sidebar)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Runtime flow (kernel + auth-gw, shipped 2026-05-27)
|
|
26
|
+
|
|
27
|
+
1. SDK validates the manifest at `imperal build` / publish time.
|
|
28
|
+
2. Kernel scans `/opt/extensions/*/imperal.json` on worker boot and on
|
|
29
|
+
Registry catalog invalidation, publishes the set of opted-out
|
|
30
|
+
`app_id`s to Redis SET `imperal:hidden_in_sidebar_apps`.
|
|
31
|
+
3. `imperal-auth-gateway` `GET /v1/users/{user_id}/extensions` reads the
|
|
32
|
+
set via a second Redis client (`kernel_shared_redis_url`) and drops
|
|
33
|
+
matching tiles from the response so the Imperal Panel sidebar never
|
|
34
|
+
renders the icon.
|
|
35
|
+
|
|
36
|
+
### Touched files
|
|
37
|
+
|
|
38
|
+
- `src/imperal_sdk/manifest_schema.py` — adds
|
|
39
|
+
`Manifest.hidden_in_sidebar: Optional[bool] = None` next to `system`
|
|
40
|
+
and a `model_validator(mode="after")` that enforces the system-only
|
|
41
|
+
rule. `validate_manifest_dict` surfaces violations as `M4`
|
|
42
|
+
ValidationIssues.
|
|
43
|
+
- `src/imperal_sdk/schemas/imperal.schema.json` — regenerated to include
|
|
44
|
+
the new field (static-vs-runtime gate in
|
|
45
|
+
`tests/test_manifest_schema.py` and `tests/test_spec_validation.py`).
|
|
46
|
+
|
|
47
|
+
No other public API changes. No schema-version bump (still v3).
|
|
48
|
+
|
|
5
49
|
## 5.0.2 — 2026-05-26 — Federal source-cite hygiene
|
|
6
50
|
|
|
7
51
|
**Docs-only release. No behavior change. No new APIs.** Adds two federal-contract
|
|
@@ -23,7 +23,7 @@ from __future__ import annotations
|
|
|
23
23
|
import re
|
|
24
24
|
from typing import Any, Dict, List, Literal, Optional
|
|
25
25
|
|
|
26
|
-
from pydantic import BaseModel, ConfigDict, Field, ValidationError, field_validator
|
|
26
|
+
from pydantic import BaseModel, ConfigDict, Field, ValidationError, field_validator, model_validator
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
# === Regex contracts ==================================================
|
|
@@ -321,6 +321,17 @@ class Manifest(BaseModel):
|
|
|
321
321
|
# Reserved for first-party Imperal authors (validator V31).
|
|
322
322
|
system: Optional[bool] = None
|
|
323
323
|
|
|
324
|
+
# Federal I-EXT-MANIFEST-HIDDEN-SIDEBAR-SYSTEM-ONLY (2026-05-27) —
|
|
325
|
+
# `hidden_in_sidebar=True` instructs the Imperal Panel sidebar to NOT
|
|
326
|
+
# render the icon for this extension. Functionality is preserved
|
|
327
|
+
# (chat tools still work, skeleton still runs, lifecycle still fires)
|
|
328
|
+
# — only the visual sidebar tile is suppressed.
|
|
329
|
+
#
|
|
330
|
+
# Restricted to system apps (`system=True`) — third-party extensions
|
|
331
|
+
# MUST NOT hide themselves from the user-facing sidebar. Enforced by
|
|
332
|
+
# `validate_manifest_dict` (V32) and the root model_validator below.
|
|
333
|
+
hidden_in_sidebar: Optional[bool] = None
|
|
334
|
+
|
|
324
335
|
# Federal v4.2.2 — EXT-SECRETS-V1. Optional array of per-user encrypted
|
|
325
336
|
# credential declarations the extension reads via ``ctx.secrets.get()``.
|
|
326
337
|
# Closes the `I-MANIFEST-EMITTER-SCHEMA-SYMMETRIC` drift where the
|
|
@@ -372,6 +383,22 @@ class Manifest(BaseModel):
|
|
|
372
383
|
)
|
|
373
384
|
return v
|
|
374
385
|
|
|
386
|
+
@model_validator(mode="after")
|
|
387
|
+
def _hidden_in_sidebar_requires_system(self) -> "Manifest":
|
|
388
|
+
"""Federal I-EXT-MANIFEST-HIDDEN-SIDEBAR-SYSTEM-ONLY.
|
|
389
|
+
|
|
390
|
+
Third-party extensions MUST NOT hide themselves from the user-facing
|
|
391
|
+
Imperal Panel sidebar. The hidden_in_sidebar flag is reserved for
|
|
392
|
+
first-party Imperal system apps (system=True).
|
|
393
|
+
"""
|
|
394
|
+
if self.hidden_in_sidebar is True and self.system is not True:
|
|
395
|
+
raise ValueError(
|
|
396
|
+
"hidden_in_sidebar=True requires system=True "
|
|
397
|
+
"(federal I-EXT-MANIFEST-HIDDEN-SIDEBAR-SYSTEM-ONLY — "
|
|
398
|
+
"third-party extensions cannot hide themselves from the sidebar)"
|
|
399
|
+
)
|
|
400
|
+
return self
|
|
401
|
+
|
|
375
402
|
|
|
376
403
|
# === Public API =======================================================
|
|
377
404
|
|