imperal-sdk 4.2.9__tar.gz → 4.2.11__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 (206) hide show
  1. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/CHANGELOG.md +48 -0
  2. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/PKG-INFO +1 -1
  3. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/__init__.py +1 -1
  4. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/extension.py +10 -1
  5. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/interactive.py +17 -3
  6. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/.github/workflows/identity-contract.yml +0 -0
  7. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/.github/workflows/publish.yml +0 -0
  8. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/.github/workflows/test.yml +0 -0
  9. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/.gitignore +0 -0
  10. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/LICENSE +0 -0
  11. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/README.md +0 -0
  12. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/api_surface.json +0 -0
  13. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/pyproject.toml +0 -0
  14. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/.codebase-index-cache.pkl +0 -0
  15. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ai/__init__.py +0 -0
  16. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ai/client.py +0 -0
  17. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/auth/__init__.py +0 -0
  18. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/auth/client.py +0 -0
  19. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/auth/middleware.py +0 -0
  20. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/billing/__init__.py +0 -0
  21. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/billing/client.py +0 -0
  22. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/cache/__init__.py +0 -0
  23. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/cache/client.py +0 -0
  24. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/cache/protocol.py +0 -0
  25. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/__init__.py +0 -0
  26. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/action_result.py +0 -0
  27. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/error_codes.py +0 -0
  28. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/filters.py +0 -0
  29. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/guards.py +0 -0
  30. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/handler.py +0 -0
  31. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/kernel_primitives.py +0 -0
  32. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/narration.py +0 -0
  33. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/narration_guard.py +0 -0
  34. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/prompt.py +0 -0
  35. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/refusal.py +0 -0
  36. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/chat/retry.py +0 -0
  37. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/cli/__init__.py +0 -0
  38. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/cli/main.py +0 -0
  39. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/config/__init__.py +0 -0
  40. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/config/client.py +0 -0
  41. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/context.py +0 -0
  42. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/db/__init__.py +0 -0
  43. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/db/client.py +0 -0
  44. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/errors.py +0 -0
  45. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/extension.py +0 -0
  46. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/extensions/__init__.py +0 -0
  47. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/extensions/client.py +0 -0
  48. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/http/__init__.py +0 -0
  49. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/http/client.py +0 -0
  50. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/manifest.py +0 -0
  51. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/manifest_schema.py +0 -0
  52. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/notify/__init__.py +0 -0
  53. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/notify/client.py +0 -0
  54. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/prompts/__init__.py +0 -0
  55. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/prompts/icnli_integrity_rules.txt +0 -0
  56. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/prompts/kernel_formatting_rule.txt +0 -0
  57. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/prompts/kernel_proactivity_rule.txt +0 -0
  58. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/protocols.py +0 -0
  59. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/rpc/__init__.py +0 -0
  60. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/rpc/codec.py +0 -0
  61. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/rpc/contract.py +0 -0
  62. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/runtime/__init__.py +0 -0
  63. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/runtime/executor.py +0 -0
  64. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/runtime/llm_provider.py +0 -0
  65. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/runtime/message_adapter.py +0 -0
  66. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/action_result.schema.json +0 -0
  67. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/balance_info.schema.json +0 -0
  68. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/chat_result.schema.json +0 -0
  69. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/completion_result.schema.json +0 -0
  70. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/document.schema.json +0 -0
  71. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/event.schema.json +0 -0
  72. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/file_info.schema.json +0 -0
  73. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/function_call.schema.json +0 -0
  74. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/http_response.schema.json +0 -0
  75. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/imperal.schema.json +0 -0
  76. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/limits_result.schema.json +0 -0
  77. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/schemas/subscription_info.schema.json +0 -0
  78. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/secrets/__init__.py +0 -0
  79. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/secrets/client.py +0 -0
  80. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/secrets/exceptions.py +0 -0
  81. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/secrets/panel_handler.py +0 -0
  82. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/secrets/spec.py +0 -0
  83. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/security/__init__.py +0 -0
  84. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/security/call_token.py +0 -0
  85. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/skeleton/__init__.py +0 -0
  86. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/skeleton/client.py +0 -0
  87. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/storage/__init__.py +0 -0
  88. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/storage/client.py +0 -0
  89. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/store/__init__.py +0 -0
  90. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/store/client.py +0 -0
  91. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/store/exceptions.py +0 -0
  92. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/testing/__init__.py +0 -0
  93. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/testing/mock_context.py +0 -0
  94. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/testing/mock_secrets.py +0 -0
  95. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/tools/__init__.py +0 -0
  96. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/tools/client.py +0 -0
  97. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/tools/generate_api_surface.py +0 -0
  98. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/tools/validate_identity_contract.py +0 -0
  99. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/__init__.py +0 -0
  100. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/action_result.py +0 -0
  101. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/chat_result.py +0 -0
  102. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/client_contracts.py +0 -0
  103. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/contracts.py +0 -0
  104. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/contributions.py +0 -0
  105. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/events.py +0 -0
  106. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/health.py +0 -0
  107. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/identity.py +0 -0
  108. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/models.py +0 -0
  109. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/pagination.py +0 -0
  110. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/types/store_contracts.py +0 -0
  111. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/__init__.py +0 -0
  112. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/actions.py +0 -0
  113. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/base.py +0 -0
  114. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/data.py +0 -0
  115. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/display.py +0 -0
  116. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/feedback.py +0 -0
  117. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/graph.py +0 -0
  118. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/input_components.py +0 -0
  119. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/layout.py +0 -0
  120. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/ui/theme.py +0 -0
  121. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/validator.py +0 -0
  122. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/src/imperal_sdk/validator_v1_6_0.py +0 -0
  123. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/conftest.py +0 -0
  124. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/contracts/__init__.py +0 -0
  125. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/contracts/test_store_contracts.py +0 -0
  126. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/fixtures/openapi/auth-gateway.json +0 -0
  127. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/fixtures/openapi/registry.json +0 -0
  128. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/fixtures/openapi/sharelock-cases.json +0 -0
  129. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/rpc/__init__.py +0 -0
  130. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/rpc/test_codec.py +0 -0
  131. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/rpc/test_contract.py +0 -0
  132. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/runtime/__init__.py +0 -0
  133. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/runtime/test_llm_provider_config_store.py +0 -0
  134. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/runtime/test_llm_provider_ctx_injection.py +0 -0
  135. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/store/__init__.py +0 -0
  136. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/store/test_list_users_client.py +0 -0
  137. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/store/test_query_all_client.py +0 -0
  138. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_action_result_typed.py +0 -0
  139. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_as_user.py +0 -0
  140. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_auth.py +0 -0
  141. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_billing.py +0 -0
  142. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_cache_client.py +0 -0
  143. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_cache_model.py +0 -0
  144. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_call_token.py +0 -0
  145. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_chat_extension_deprecation.py +0 -0
  146. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_chat_filters.py +0 -0
  147. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_chat_guards.py +0 -0
  148. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_chat_guards_bleed.py +0 -0
  149. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_chat_prompt.py +0 -0
  150. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_chat_pydantic_retry.py +0 -0
  151. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_chat_result.py +0 -0
  152. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_cli.py +0 -0
  153. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_client_contracts.py +0 -0
  154. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_config_client.py +0 -0
  155. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_context.py +0 -0
  156. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_context_guards.py +0 -0
  157. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_contracts.py +0 -0
  158. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_contracts_live.py +0 -0
  159. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_contributions.py +0 -0
  160. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_document_contract.py +0 -0
  161. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_emits_decorator.py +0 -0
  162. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_error_codes.py +0 -0
  163. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_errors.py +0 -0
  164. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_event_schema_v2.py +0 -0
  165. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_events_health.py +0 -0
  166. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_extension.py +0 -0
  167. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_extension_v2.py +0 -0
  168. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_extensions_emit.py +0 -0
  169. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_handler_p2.py +0 -0
  170. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_id_shape_guard.py +0 -0
  171. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_identity_contract.py +0 -0
  172. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_imperal_schema_v2.py +0 -0
  173. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_kernel_primitives.py +0 -0
  174. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_manifest.py +0 -0
  175. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_manifest_roundtrip_gate.py +0 -0
  176. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_manifest_schema.py +0 -0
  177. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_manifest_v2_events.py +0 -0
  178. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_manifest_v2_other_sections.py +0 -0
  179. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_manifest_v2_webhooks.py +0 -0
  180. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_manifest_validator_v2.py +0 -0
  181. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_mock_context.py +0 -0
  182. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_models.py +0 -0
  183. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_narration_emission.py +0 -0
  184. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_narration_guard.py +0 -0
  185. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_openai_max_completion_tokens.py +0 -0
  186. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_pagination.py +0 -0
  187. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_panel_rendering_contract.py +0 -0
  188. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_panels.py +0 -0
  189. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_skeleton_decorator.py +0 -0
  190. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_spec_validation.py +0 -0
  191. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_tools_client.py +0 -0
  192. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_ui.py +0 -0
  193. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_ui_fileupload_enhanced.py +0 -0
  194. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_ui_html.py +0 -0
  195. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_ui_image_enhanced.py +0 -0
  196. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_ui_open.py +0 -0
  197. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_ui_theme.py +0 -0
  198. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_user.py +0 -0
  199. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_v7_emit_refusal.py +0 -0
  200. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_validator.py +0 -0
  201. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_validator_drift.py +0 -0
  202. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_validator_pep563.py +0 -0
  203. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_validator_v1_6_0_rules.py +0 -0
  204. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/test_write_arg_bleed.py +0 -0
  205. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/tools/__init__.py +0 -0
  206. {imperal_sdk-4.2.9 → imperal_sdk-4.2.11}/tests/tools/test_generate_api_surface.py +0 -0
@@ -2,6 +2,54 @@
2
2
 
3
3
  All notable changes to `imperal-sdk` are documented here.
4
4
 
5
+ ## 4.2.11 — 2026-05-13
6
+
7
+ **Fix: `ui.Link(text=...)` no longer breaks panel render**
8
+
9
+ `ui.Link` now accepts the visible text via either `label=` (canonical) or
10
+ `text=` (alias matching the HTML/JSX `<a>text</a>` mental model). Before
11
+ v4.2.11, passing `text=` raised `TypeError: Link() got an unexpected
12
+ keyword argument 'text'` at panel-render time, which killed the right
13
+ panel for any extension that used the natural-looking kwarg.
14
+
15
+ ```python
16
+ # All three are now equivalent
17
+ ui.Link("Read docs", href="https://docs.imperal.io") # positional
18
+ ui.Link(label="Read docs", href="https://docs.imperal.io") # canonical kwarg
19
+ ui.Link(text="Read docs", href="https://docs.imperal.io") # alias kwarg
20
+ ```
21
+
22
+ Calling `ui.Link()` with neither `label` nor `text` raises a clear
23
+ `TypeError("ui.Link requires a 'label' (or 'text' alias)")` instead of
24
+ silently rendering an empty anchor. `label` wins if both are passed.
25
+
26
+ No migration required — existing `label=` callers are unchanged.
27
+
28
+ ## 4.2.10 — 2026-05-13
29
+
30
+ **Feat: `@chat.function` default `chain_callable=True` for ALL action_types (was write/destructive only)**
31
+
32
+ V19 federal default: `chain_callable` now defaults to `True` for read
33
+ action_types too, not just `write` / `destructive`. This closes the
34
+ wrapper-LLM paraphrase risk for typed read handlers (`list_*`,
35
+ `search_*`, `get_*`) — when the classifier picks a read with concrete
36
+ args, the kernel `chain_executor._resolve_typed_dispatch` dispatches
37
+ the typed call directly instead of routing through the ChatExtension
38
+ BYOLLM tool-use loop.
39
+
40
+ Authors who need the wrapper-LLM tool-use loop for their handler
41
+ (conversational catch-all like `case_chat`) must explicitly set
42
+ `chain_callable=False`. The change is backward-compatible — existing
43
+ manifests with explicit `True` / `False` are unaffected; only the
44
+ implicit default for reads flips.
45
+
46
+ Migration: run `imperal build` to regenerate manifests; read functions
47
+ without explicit `chain_callable` will now emit `chain_callable: true`.
48
+
49
+ Federal invariant: closes the wrapper-LLM paraphrase risk class for
50
+ read intents, completing the `I-CHAT-FUNCTION-VERBATIM-PARAMS`
51
+ structural enforcement.
52
+
5
53
  ## 4.2.9 — 2026-05-13
6
54
 
7
55
  **Fix: regenerate `src/imperal_sdk/schemas/imperal.schema.json` after SecretDecl addition**
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: imperal-sdk
3
- Version: 4.2.9
3
+ Version: 4.2.11
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__ = "4.2.9"
42
+ __version__ = "4.2.11"
43
43
 
44
44
  __all__ = [
45
45
  # Core
@@ -147,7 +147,16 @@ class ChatExtension:
147
147
  ``archive_drafts_in_project``.
148
148
  """
149
149
  if chain_callable is None:
150
- chain_callable = action_type in ("write", "destructive")
150
+ # V19 (federal v4.2.10, 2026-05-13): default True for ALL
151
+ # action_types — reads also typed-dispatch when the classifier
152
+ # picked them, closing the wrapper-LLM paraphrase risk on
153
+ # `list_*`, `search_*`, `get_*` style handlers. Authors who
154
+ # need the wrapper-LLM tool-use loop (catch-all conversational
155
+ # handlers like `case_chat`) must set `chain_callable=False`
156
+ # explicitly. Pre-v4.2.10 default kept `False` for reads;
157
+ # backward-compatible because action_type in ("write",
158
+ # "destructive") already returned True and continues to.
159
+ chain_callable = True
151
160
 
152
161
  def decorator(func: Callable) -> Callable:
153
162
  # Auto-detect Pydantic BaseModel params + return type
@@ -73,9 +73,23 @@ def Tooltip(content: str, children: UINode | None = None) -> UINode:
73
73
  return UINode(type="Tooltip", props=props)
74
74
 
75
75
 
76
- def Link(label: str, href: str = "", on_click: UIAction | None = None) -> UINode:
77
- """Hyperlink navigates via href or fires on_click action."""
78
- props: dict[str, Any] = {"label": label}
76
+ def Link(
77
+ label: str = "",
78
+ href: str = "",
79
+ on_click: UIAction | None = None,
80
+ *,
81
+ text: str = "",
82
+ ) -> UINode:
83
+ """Hyperlink — navigates via href or fires on_click action.
84
+
85
+ The visible text can be passed as either ``label`` (canonical) or
86
+ ``text`` (alias matching the HTML/JSX `<a>text</a>` mental model).
87
+ Exactly one must be provided; ``label`` wins if both are set.
88
+ """
89
+ resolved = label or text
90
+ if not resolved:
91
+ raise TypeError("ui.Link requires a 'label' (or 'text' alias)")
92
+ props: dict[str, Any] = {"label": resolved}
79
93
  if href: props["href"] = href
80
94
  if on_click: props["on_click"] = on_click
81
95
  return UINode(type="Link", props=props)
File without changes
File without changes
File without changes
File without changes