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.
Files changed (212) hide show
  1. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/CHANGELOG.md +44 -0
  2. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/PKG-INFO +1 -1
  3. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/__init__.py +1 -1
  4. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/manifest_schema.py +28 -1
  5. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/imperal.schema.json +259 -247
  6. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_sdk_version_stamp.py +0 -1
  7. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/.github/workflows/identity-contract.yml +0 -0
  8. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/.github/workflows/publish.yml +0 -0
  9. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/.github/workflows/test.yml +0 -0
  10. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/.gitignore +0 -0
  11. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/LICENSE +0 -0
  12. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/README.md +0 -0
  13. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/api_surface.json +0 -0
  14. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/pyproject.toml +0 -0
  15. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/.codebase-index-cache.pkl +0 -0
  16. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ai/__init__.py +0 -0
  17. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ai/client.py +0 -0
  18. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/auth/__init__.py +0 -0
  19. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/auth/client.py +0 -0
  20. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/auth/middleware.py +0 -0
  21. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/billing/__init__.py +0 -0
  22. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/billing/client.py +0 -0
  23. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/cache/__init__.py +0 -0
  24. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/cache/client.py +0 -0
  25. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/cache/protocol.py +0 -0
  26. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/__init__.py +0 -0
  27. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/action_result.py +0 -0
  28. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/error_codes.py +0 -0
  29. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/exceptions.py +0 -0
  30. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/extension.py +0 -0
  31. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/filters.py +0 -0
  32. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/guards.py +0 -0
  33. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/kernel_primitives.py +0 -0
  34. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/narration.py +0 -0
  35. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/narration_guard.py +0 -0
  36. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/prompt.py +0 -0
  37. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/chat/refusal.py +0 -0
  38. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/cli/__init__.py +0 -0
  39. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/cli/main.py +0 -0
  40. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/config/__init__.py +0 -0
  41. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/config/client.py +0 -0
  42. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/context.py +0 -0
  43. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/db/__init__.py +0 -0
  44. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/db/client.py +0 -0
  45. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/errors.py +0 -0
  46. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/extension.py +0 -0
  47. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/extensions/__init__.py +0 -0
  48. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/extensions/client.py +0 -0
  49. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/http/__init__.py +0 -0
  50. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/http/client.py +0 -0
  51. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/manifest.py +0 -0
  52. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/notify/__init__.py +0 -0
  53. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/notify/client.py +0 -0
  54. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/prompts/__init__.py +0 -0
  55. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/prompts/icnli_integrity_rules.txt +0 -0
  56. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/prompts/kernel_formatting_rule.txt +0 -0
  57. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/prompts/kernel_proactivity_rule.txt +0 -0
  58. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/protocols.py +0 -0
  59. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/rpc/__init__.py +0 -0
  60. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/rpc/codec.py +0 -0
  61. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/rpc/contract.py +0 -0
  62. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/runtime/__init__.py +0 -0
  63. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/runtime/executor.py +0 -0
  64. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/runtime/llm_provider.py +0 -0
  65. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/runtime/message_adapter.py +0 -0
  66. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/action_result.schema.json +0 -0
  67. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/balance_info.schema.json +0 -0
  68. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/chat_result.schema.json +0 -0
  69. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/completion_result.schema.json +0 -0
  70. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/document.schema.json +0 -0
  71. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/event.schema.json +0 -0
  72. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/file_info.schema.json +0 -0
  73. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/function_call.schema.json +0 -0
  74. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/http_response.schema.json +0 -0
  75. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/limits_result.schema.json +0 -0
  76. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/schemas/subscription_info.schema.json +0 -0
  77. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/secrets/__init__.py +0 -0
  78. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/secrets/client.py +0 -0
  79. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/secrets/exceptions.py +0 -0
  80. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/secrets/panel_handler.py +0 -0
  81. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/secrets/spec.py +0 -0
  82. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/security/__init__.py +0 -0
  83. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/security/call_token.py +0 -0
  84. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/skeleton/__init__.py +0 -0
  85. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/skeleton/client.py +0 -0
  86. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/storage/__init__.py +0 -0
  87. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/storage/client.py +0 -0
  88. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/store/__init__.py +0 -0
  89. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/store/client.py +0 -0
  90. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/store/exceptions.py +0 -0
  91. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/testing/__init__.py +0 -0
  92. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/testing/mock_context.py +0 -0
  93. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/testing/mock_secrets.py +0 -0
  94. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/tools/__init__.py +0 -0
  95. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/tools/client.py +0 -0
  96. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/tools/generate_api_surface.py +0 -0
  97. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/tools/validate_identity_contract.py +0 -0
  98. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/__init__.py +0 -0
  99. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/action_result.py +0 -0
  100. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/chat_result.py +0 -0
  101. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/client_contracts.py +0 -0
  102. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/contracts.py +0 -0
  103. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/contributions.py +0 -0
  104. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/events.py +0 -0
  105. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/health.py +0 -0
  106. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/identity.py +0 -0
  107. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/models.py +0 -0
  108. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/pagination.py +0 -0
  109. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/types/store_contracts.py +0 -0
  110. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/__init__.py +0 -0
  111. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/actions.py +0 -0
  112. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/base.py +0 -0
  113. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/data.py +0 -0
  114. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/display.py +0 -0
  115. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/feedback.py +0 -0
  116. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/graph.py +0 -0
  117. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/input_components.py +0 -0
  118. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/interactive.py +0 -0
  119. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/layout.py +0 -0
  120. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/ui/theme.py +0 -0
  121. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/validator.py +0 -0
  122. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/src/imperal_sdk/validator_v1_6_0.py +0 -0
  123. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/conftest.py +0 -0
  124. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/contracts/__init__.py +0 -0
  125. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/contracts/test_store_contracts.py +0 -0
  126. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/fixtures/openapi/auth-gateway.json +0 -0
  127. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/fixtures/openapi/registry.json +0 -0
  128. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/fixtures/openapi/sharelock-cases.json +0 -0
  129. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/rpc/__init__.py +0 -0
  130. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/rpc/test_codec.py +0 -0
  131. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/rpc/test_contract.py +0 -0
  132. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/runtime/__init__.py +0 -0
  133. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/runtime/test_llm_provider_config_store.py +0 -0
  134. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/runtime/test_llm_provider_ctx_injection.py +0 -0
  135. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/store/__init__.py +0 -0
  136. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/store/test_list_users_client.py +0 -0
  137. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/store/test_query_all_client.py +0 -0
  138. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_action_result_typed.py +0 -0
  139. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_as_user.py +0 -0
  140. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_auth.py +0 -0
  141. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_billing.py +0 -0
  142. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_cache_client.py +0 -0
  143. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_cache_model.py +0 -0
  144. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_call_token.py +0 -0
  145. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_extension_deprecation.py +0 -0
  146. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_extension_no_llm_router.py +0 -0
  147. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_filters.py +0 -0
  148. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_function_background_flag.py +0 -0
  149. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_guards.py +0 -0
  150. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_guards_bleed.py +0 -0
  151. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_prompt.py +0 -0
  152. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_chat_result.py +0 -0
  153. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_cli.py +0 -0
  154. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_client_contracts.py +0 -0
  155. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_config_client.py +0 -0
  156. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_context.py +0 -0
  157. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_context_background_task.py +0 -0
  158. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_context_deliver_chat_message.py +0 -0
  159. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_context_guards.py +0 -0
  160. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_contracts.py +0 -0
  161. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_contracts_live.py +0 -0
  162. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_contributions.py +0 -0
  163. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_data_model_kwarg.py +0 -0
  164. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_document_contract.py +0 -0
  165. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_emits_decorator.py +0 -0
  166. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_error_codes.py +0 -0
  167. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_errors.py +0 -0
  168. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_event_schema_v2.py +0 -0
  169. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_events_health.py +0 -0
  170. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_extension.py +0 -0
  171. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_extension_v2.py +0 -0
  172. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_extensions_emit.py +0 -0
  173. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_http_timeout_override.py +0 -0
  174. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_id_shape_guard.py +0 -0
  175. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_identity_contract.py +0 -0
  176. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_imperal_schema_v2.py +0 -0
  177. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_kernel_primitives.py +0 -0
  178. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest.py +0 -0
  179. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_no_orchestrator_tool.py +0 -0
  180. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_roundtrip_gate.py +0 -0
  181. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_schema.py +0 -0
  182. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_v2_events.py +0 -0
  183. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_v2_other_sections.py +0 -0
  184. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_v2_webhooks.py +0 -0
  185. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_manifest_validator_v2.py +0 -0
  186. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_mock_context.py +0 -0
  187. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_models.py +0 -0
  188. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_narration_emission.py +0 -0
  189. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_narration_guard.py +0 -0
  190. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_openai_max_completion_tokens.py +0 -0
  191. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_pagination.py +0 -0
  192. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_panel_rendering_contract.py +0 -0
  193. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_panels.py +0 -0
  194. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_skeleton_decorator.py +0 -0
  195. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_spec_validation.py +0 -0
  196. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_tools_client.py +0 -0
  197. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui.py +0 -0
  198. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui_fileupload_enhanced.py +0 -0
  199. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui_html.py +0 -0
  200. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui_image_enhanced.py +0 -0
  201. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui_open.py +0 -0
  202. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_ui_theme.py +0 -0
  203. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_user.py +0 -0
  204. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_v7_emit_refusal.py +0 -0
  205. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_validator.py +0 -0
  206. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_validator_drift.py +0 -0
  207. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_validator_pep563.py +0 -0
  208. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_validator_v1_6_0_rules.py +0 -0
  209. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_validator_v25.py +0 -0
  210. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/test_write_arg_bleed.py +0 -0
  211. {imperal_sdk-5.0.2 → imperal_sdk-5.0.3}/tests/tools/__init__.py +0 -0
  212. {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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: imperal-sdk
3
- Version: 5.0.2
3
+ Version: 5.0.3
4
4
  Summary: SDK for building Imperal Cloud extensions
5
5
  Author: Valentin Scerbacov, Imperal, Inc.
6
6
  License-Expression: AGPL-3.0-or-later
@@ -39,7 +39,7 @@ from imperal_sdk.secrets import (
39
39
  SecretValueTooLarge, SecretDeclarationConflict,
40
40
  )
41
41
 
42
- __version__ = "5.0.2"
42
+ __version__ = "5.0.3"
43
43
 
44
44
  __all__ = [
45
45
  # Core
@@ -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