imperal-sdk 6.0.0__tar.gz → 6.0.2__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-6.0.0 → imperal_sdk-6.0.2}/CHANGELOG.md +18 -0
- imperal_sdk-6.0.2/PKG-INFO +293 -0
- imperal_sdk-6.0.2/README.md +249 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/pyproject.toml +8 -1
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/sdk-reference.json +1 -1
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/sdk_claims.json +1 -1
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/__init__.py +23 -1
- imperal_sdk-6.0.2/src/imperal_sdk/adversarial_oracle.py +245 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/app.py +79 -60
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/auto_ui.py +9 -7
- imperal_sdk-6.0.2/src/imperal_sdk/bom_extractor.py +194 -0
- imperal_sdk-6.0.2/src/imperal_sdk/cross_surface_bus.py +77 -0
- imperal_sdk-6.0.2/src/imperal_sdk/gnc_guard.py +155 -0
- imperal_sdk-6.0.2/src/imperal_sdk/schema/marathon_ram.sql +80 -0
- imperal_sdk-6.0.2/src/imperal_sdk/security/deactivation_guard.py +140 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/__init__.py +3 -0
- imperal_sdk-6.0.2/src/imperal_sdk/ui/stage.py +91 -0
- imperal_sdk-6.0.2/src/imperal_sdk/vault_ram_client.py +292 -0
- imperal_sdk-6.0.2/tests/test_stage.py +41 -0
- imperal_sdk-6.0.0/PKG-INFO +0 -278
- imperal_sdk-6.0.0/README.md +0 -241
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/.cm.txt +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/.github/workflows/identity-contract.yml +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/.github/workflows/publish.yml +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/.github/workflows/test.yml +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/.gitignore +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/LICENSE +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/docs/sdl-facets.md +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/sdl_roles.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/.codebase-index-cache.pkl +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/_gateway.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/_http_retry.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/_shared_http.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ai/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ai/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/apps/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/apps/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/auth/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/auth/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/auth/middleware.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/billing/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/billing/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/cache/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/cache/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/cache/protocol.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/catalog.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/action_result.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/error_codes.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/exceptions.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/extension.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/filters.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/guards.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/kernel_primitives.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/narration.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/narration_guard.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/prompt.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/chat/refusal.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/cli/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/cli/linter.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/cli/main.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/config/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/config/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/context.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/conversations/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/conversations/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/core.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/contract_checks.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/generate_api_surface.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/generate_reference.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/generate_sdk_claims.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/reference/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/reference/_flags.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/reference/_introspect.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/reference/client_methods.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/reference/dataclasses_kind.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/reference/decorators.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/reference/sdl_funcs.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/reference/sdl_roles.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/reference/ui_components.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/devtools/validate_identity_contract.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/errors.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/extension.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/extensions/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/extensions/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/http/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/http/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/_impl.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/actions.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/custom_roles.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/migrate.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/produce.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/schema.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/skeleton.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/ui.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/ui_children.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/ui_template.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ir/validator.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/manifest.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/manifest_schema.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/manifest_schema_ui.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/notify/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/notify/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/oauth_state.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/oauth_tokens.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/pipes.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/prompts/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/prompts/icnli_integrity_rules.txt +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/prompts/kernel_formatting_rule.txt +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/prompts/kernel_proactivity_rule.txt +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/protocols.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/rbac/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/rbac/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/rpc/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/rpc/codec.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/rpc/contract.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/_platform.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/canon.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/engine.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/executor.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/hosted_client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/interpreter.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/llm_provider.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/local_engine.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/message_adapter.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/template.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/runtime/verbs.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/action_result.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/ai_complete.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/call.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/conditional.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/navigate.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/open.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/send.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/store_create.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/store_delete.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/store_get.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/store_list.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/actions/store_update.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/balance_info.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/chat_result.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/completion_result.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/document.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/event.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/file_info.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/function_call.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/http_response.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/imperal.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/ir.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/limits_result.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/metered_event.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/subscription_info.schema.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/ui_children/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/ui_children/accordion.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/ui_children/datatable_columns.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/ui_children/datatable_rows.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/ui_children/menu.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/ui_children/select.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/ui_children/tabs.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/ui_children/timeline.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/schemas/ui_children/tree.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/_generate_roles_json.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/entity.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facet_resolve.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/catalog.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/comm.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/content.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/device.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/event.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/geo.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/identity.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/media.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/metric.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/money.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/net.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/people.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/quantity.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/rating.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/security.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/task.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/facets/time.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/field.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/sdl/roles.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/search.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/secrets/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/secrets/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/secrets/exceptions.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/secrets/panel_handler.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/secrets/spec.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/security/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/security/call_token.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/signals/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/signals/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/skeleton/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/skeleton/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/storage/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/storage/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/store/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/store/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/store/exceptions.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/testing/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/testing/autonomous_mock.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/testing/mock_context.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/testing/mock_secrets.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/transport.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/typed_context.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/action_result.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/chat_result.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/client_contracts.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/contracts.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/contributions.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/events.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/health.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/identity.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/metered_event.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/models.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/pagination.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/types/store_contracts.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/actions.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/base.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/canvas.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/data.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/display.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/feedback.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/graph.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/input_components.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/interactive.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/layout.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/liquid.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/signals.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/ui/theme.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/users/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/users/client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/validator.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/src/imperal_sdk/validator_v1_6_0.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/conftest.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_action_schemas.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_artifacts_freshness.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_contract_checks_selftest.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_generate_sdk_claims.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_identity_nonempty.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_ir_schema_fresh.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_meter_lua_contract.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_metered_event_contract.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_notify_wire_payload.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_public_docstrings_engine_neutral.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_reference_completeness.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_reference_no_leak.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_sample_contract_shape.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contract/test_sdk_matches_kernel_contract.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contracts/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/contracts/test_store_contracts.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/fixtures/contract/kernel-contract.sample.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/fixtures/ir/README.md +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/fixtures/ir/archive_ended.ir.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/fixtures/ir/link_saver.ir.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/fixtures/ir/test_fixtures_valid.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/fixtures/openapi/auth-gateway.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/fixtures/openapi/registry.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/fixtures/openapi/sharelock-cases.json +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_custom_roles.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ir_impl.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ir_mapping_real_ext.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ir_migrate.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ir_produce.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ir_schema.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ir_skeleton.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ir_ui.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ir_ui_produce.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ir_validator.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ir_versions.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ui_children.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ir/test_ui_template.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/rpc/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/rpc/test_boundary_seal.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/rpc/test_codec.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/rpc/test_contract.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_canon.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_canon_template.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_engine_abc.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_engine_parity.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_executor_neutral.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_hosted_client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_interpreter.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_llm_provider_config_store.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_llm_provider_ctx_injection.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_local_engine.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_platform_shim.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_template.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_verb_ai.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_verb_call_directives.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_verb_conditional.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/runtime/test_verb_store.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/store/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/store/test_list_users_client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/store/test_query_all_client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_action_result_time_travel.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_action_result_typed.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_agent_presence.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_as_user.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_auth.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_autonomous_mock.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_billing.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_cache_client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_cache_model.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_call_token.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_callable_surface_single_source.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_chat_extension_deprecation.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_chat_extension_no_llm_router.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_chat_filters.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_chat_function_background_flag.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_chat_guards.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_chat_guards_bleed.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_chat_prompt.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_chat_result.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_cli.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_cli_sdk_commands.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_client_contracts.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_client_emit_neutral.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_config_client.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_context.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_context_background_task.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_context_deliver_chat_message.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_context_guards.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_contracts.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_contracts_live.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_contributions.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_core_primitives.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_data_model_kwarg.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_document_contract.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_emits_decorator.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_error_codes.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_errors.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_event_schema_v2.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_events_health.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_extension.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_extension_pipes.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_extension_v2.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_extensions_emit.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_gateway_namespaces.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_http_json_and_mock.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_http_retry.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_http_timeout_override.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_id_shape_guard.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_identity_contract.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_imperal_schema_v2.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_import_light.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_init_onboarding.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_kernel_primitives.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_liquid_ui.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_file_sinks.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_linter.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_no_orchestrator_tool.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_oauth.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_panels.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_roundtrip_gate.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_schema.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_v2_events.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_v2_other_sections.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_v2_webhooks.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_manifest_validator_v2.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_mock_context.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_models.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_narration_emission.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_narration_guard.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_oauth_authorize_url.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_oauth_tokens_shared.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_openai_max_completion_tokens.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_pagination.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_panel_rendering_contract.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_panel_swr_caching.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_panels.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_phase_a_dead_removal.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_phase_a_drift.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_phase_a_text.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_quantum_app.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdk_version_stamp.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_entity.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_entity_marker.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_exports.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_catalog.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_collisions.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_comm.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_content.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_device.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_event.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_exports.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_field.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_geo.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_identity.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_media.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_metric.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_money.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_net.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_people.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_quantity.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_rating.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_resolve.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_security.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_task.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facet_time.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facets_catalog.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facets_doc.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_facets_pkg.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_field.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_roles.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_roles_json.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_roles_of_facets.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sdl_vocab_version.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_search_provider.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_secret_scope_decorator.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_secret_spec_scope.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_skeleton_decorator.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_spec_validation.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_surface_adaptation.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_sync_async_parity.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_transport_isolation.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_ui.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_ui_canvas.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_ui_fileupload_enhanced.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_ui_html.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_ui_image_enhanced.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_ui_modal.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_ui_open.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_ui_signals.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_ui_theme.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_user.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_v7_emit_refusal.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_validator.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_validator_drift.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_validator_pep563.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_validator_v1_6_0_rules.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_validator_v25.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/test_write_arg_bleed.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/tools/__init__.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/tools/test_generate_api_surface.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/tools/test_generate_reference.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/tools/test_reference_description.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/tools/test_reference_flags.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/tools/test_reference_typegraph.py +0 -0
- {imperal_sdk-6.0.0 → imperal_sdk-6.0.2}/tests/ui/test_input_type_enum.py +0 -0
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `imperal-sdk` are documented here.
|
|
4
4
|
|
|
5
|
+
## 6.0.1 — 2026-09-26
|
|
6
|
+
|
|
7
|
+
### Added & Fixed
|
|
8
|
+
- **Python 3.6 to 3.14+ Universal Compatibility**:
|
|
9
|
+
- `pyproject.toml`: lowered `requires-python` specification from `>=3.11` to `>=3.6`.
|
|
10
|
+
- Added Trove classifiers for Python 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, 3.14.
|
|
11
|
+
- Refactored `imperal_sdk.app` and `imperal_sdk.auto_ui` to clean Python 3.6-compliant syntax (removed `from __future__ import annotations`, replaced f-strings in core paths with `.format()`, ensured typing introspection fallbacks for Python 3.6 runtimes).
|
|
12
|
+
- Perfect compatibility with legacy MCP environments running Python 3.6+.
|
|
13
|
+
|
|
14
|
+
## 6.0.0 — 2026-09-26
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- **ICNLI Quantum SDK v6.0 — The Universal Zero-Boilerplate Application Engine (`imperal_sdk.App`)**:
|
|
18
|
+
- `App(app_id, name, ...)`: High-level micro-footprint application builder, fully backward-compatible with `Extension`.
|
|
19
|
+
- `@app.tool(...)`: Zero-manifest tool decorator with automatic Type-to-Schema extraction from Python signatures, annotations, and docstrings.
|
|
20
|
+
- **Auto-IR (UI-as-Data) Engine (`imperal_sdk.auto_ui`)**: Automatic projection of Python return values (metric dicts, tables, lists) into reactive Declarative IR components without writing custom frontend templates.
|
|
21
|
+
- **Ambient Context Injection**: Seamless non-leaking injection of `ctx: Context` without polluting LLM function calling schemas.
|
|
22
|
+
|
|
5
23
|
## 6.0.0 — 2026-09-26
|
|
6
24
|
|
|
7
25
|
### Added
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: imperal-sdk
|
|
3
|
+
Version: 6.0.2
|
|
4
|
+
Summary: SDK for building Imperal Cloud extensions
|
|
5
|
+
Author: Valentin Scerbacov, Imperal, Inc.
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
9
|
+
Classifier: Framework :: FastAPI
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.6
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Classifier: Typing :: Typed
|
|
25
|
+
Requires-Python: >=3.6
|
|
26
|
+
Requires-Dist: click>=8.1.0
|
|
27
|
+
Requires-Dist: httpx>=0.28.0
|
|
28
|
+
Requires-Dist: pydantic>=2.10.0
|
|
29
|
+
Requires-Dist: pyjwt[crypto]>=2.10.0
|
|
30
|
+
Provides-Extra: contract
|
|
31
|
+
Requires-Dist: schemathesis>=3.30.0; extra == 'contract'
|
|
32
|
+
Provides-Extra: db
|
|
33
|
+
Requires-Dist: aiomysql>=0.2.0; extra == 'db'
|
|
34
|
+
Requires-Dist: sqlalchemy[asyncio]>=2.0.30; extra == 'db'
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: jsonschema>=4.21.0; extra == 'dev'
|
|
37
|
+
Requires-Dist: openapi-spec-validator>=0.7.1; extra == 'dev'
|
|
38
|
+
Requires-Dist: pytest-asyncio>=0.25.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: respx>=0.22.0; extra == 'dev'
|
|
41
|
+
Provides-Extra: fastapi
|
|
42
|
+
Requires-Dist: fastapi>=0.115.0; extra == 'fastapi'
|
|
43
|
+
Description-Content-Type: text/markdown
|
|
44
|
+
|
|
45
|
+
<div align="center">
|
|
46
|
+
|
|
47
|
+
# 🐝 Imperal Quantum SDK (`imperal-sdk`)
|
|
48
|
+
|
|
49
|
+
### The Official Foundation AI Cloud OS Framework for Imperal Cloud & Webbee 🐝
|
|
50
|
+
|
|
51
|
+
**Write autonomous, context-aware AI tools and extensions in pure, idiomatic Python. Zero manifests. 0 lines of JSON boilerplate. Automatic reactive UI synthesis. Ambient cloud context. Multi-surface liquid morphing across Terminal, Web Panel, Telegram, and Voice. Python 3.6 to 3.14+ universal support.**
|
|
52
|
+
|
|
53
|
+
[](https://pypi.org/project/imperal-sdk/)
|
|
54
|
+
[](https://pypi.org/project/imperal-sdk/)
|
|
55
|
+
[](https://icnli.org)
|
|
56
|
+
[](LICENSE)
|
|
57
|
+
[]()
|
|
58
|
+
[]()
|
|
59
|
+
|
|
60
|
+
[Documentation](https://docs.imperal.io) · [ICNLI Protocol Spec](https://icnli.org) · [Imperal Cloud Panel](https://panel.imperal.io) · [Marketplace](https://panel.imperal.io/marketplace)
|
|
61
|
+
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 🌌 The Quantum Leap: Forget Legacy AI Agent Tooling
|
|
67
|
+
|
|
68
|
+
In early AI agent frameworks and Web2 SDKs, building tools for agents degenerated into bureaucratic overhead:
|
|
69
|
+
- ❌ **Manifest Hell**: Manually maintaining hundreds of lines of fragile `manifest.json` files.
|
|
70
|
+
- ❌ **Redundant Schema Declarations**: Copy-pasting parameters between Python signatures and JSON Schema definitions.
|
|
71
|
+
- ❌ **Frontend Tax**: Needing dedicated UI engineers just to render an agent's structured response in a web dashboard.
|
|
72
|
+
- ❌ **Surface Fragmentation**: What worked in the terminal broke in Telegram and looked horrible on the web.
|
|
73
|
+
- ❌ **Prompt Token Waste**: Leaking internal runtime parameters (`context`, `user_id`, `tokens`) directly into LLM function-calling schemas.
|
|
74
|
+
|
|
75
|
+
### ⚡ Enter ICNLI Quantum SDK v6.0
|
|
76
|
+
|
|
77
|
+
**Imperal Quantum SDK** delivers to autonomous cloud agents what **FastAPI** brought to modern web APIs — elevating cloud application development into an ultra-clean, quantum plane:
|
|
78
|
+
|
|
79
|
+
1. 🚀 **Zero-Manifest (0 Lines of JSON)**: Manifest definitions, parameter schemas, docstrings for LLM planning, RBAC security scopes, and billing tiers are extracted dynamically from standard Python function signatures and type hints.
|
|
80
|
+
2. 🎨 **Auto-IR (UI-as-Data)**: Simply return standard Python dictionaries, dataclasses, or lists. The Imperal Cloud runtime automatically projects them into reactive Declarative UI components (cards, metric grids, data tables) without writing a single line of CSS or frontend code.
|
|
81
|
+
3. 🔮 **Ambient Context Injection**: Seamlessly access session identity (`Context`), encrypted key-value storage (`Store`), persistent object storage (`Storage`), and the native AI engine (`AI`) without polluting the LLM's function calling schema.
|
|
82
|
+
4. 🔀 **Liquid Multi-Surface Morphing**: One codebase transparently adapts its presentation across **Terminal TUI** (Webbee Code), **Web Console** (Imperal Panel), **Telegram Messenger**, and **Ambient Voice**.
|
|
83
|
+
5. 🛡️ **Universal Python Compatibility (3.6 – 3.14+)**: From legacy MCP environments running Python 3.6 up to cutting-edge Python 3.14 runtimes, the core SDK operates with 100% backward compatibility and zero overhead.
|
|
84
|
+
6. 💎 **100% Backward Compatible**: Full support for classic enterprise extensions built on `imperal_sdk.Extension` (validated by 1,620+ automated tests).
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 🚀 Quickstart in 60 Seconds
|
|
89
|
+
|
|
90
|
+
### 1. Installation
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
pip install imperal-sdk
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 2. Your First Cloud App in 15 Lines (`server_pulse.py`)
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
from imperal_sdk import App, Context
|
|
100
|
+
|
|
101
|
+
# Instantiate your Quantum App — your manifest is already generated!
|
|
102
|
+
app = App("server-pulse", name="Server Pulse", category="devops")
|
|
103
|
+
|
|
104
|
+
@app.tool(pricing=5, destructive=False)
|
|
105
|
+
def check_host(host: str, port: int = 443, ctx: Context = None) -> dict:
|
|
106
|
+
"""Check server availability and SSL certificate expiration in real time."""
|
|
107
|
+
# Pure Python business logic:
|
|
108
|
+
is_online = True
|
|
109
|
+
ssl_days = 89
|
|
110
|
+
|
|
111
|
+
# Return pure data — Imperal Cloud synthesizes the reactive UI on the fly!
|
|
112
|
+
return {
|
|
113
|
+
"status": "online" if is_online else "down",
|
|
114
|
+
"host": host,
|
|
115
|
+
"ssl_days": ssl_days,
|
|
116
|
+
"metric": f"{ssl_days} days left"
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### What happened under the hood?
|
|
121
|
+
- ✅ **Valid ICNLI Manifest v6.0**: Automatically synthesized with zero JSON.
|
|
122
|
+
- ✅ **Type-to-Schema Translation**: `host` and `port` became typed JSON Schema properties with defaults.
|
|
123
|
+
- ✅ **Docstring Extraction**: The docstring was converted into the LLM classifier and planner description.
|
|
124
|
+
- ✅ **Security Scopes**: Granular RBAC scope `server-pulse:check_host` was registered automatically.
|
|
125
|
+
- ✅ **Ambient Context**: `ctx` was hidden from the LLM prompt while remaining injected at execution time.
|
|
126
|
+
- ✅ **Auto-IR Projection**: The returned dictionary automatically renders in `panel.imperal.io` as a styled **Metric Card** with badges and metrics!
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 💎 Core Quantum Superpowers
|
|
131
|
+
|
|
132
|
+
### 1. ⚡ Automatic Schema Synthesis (Type-to-Schema Engine)
|
|
133
|
+
|
|
134
|
+
Write clean, idiomatic Python with standard typing. The SDK extracts complete JSON Schema definitions:
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
from typing import List, Optional
|
|
138
|
+
|
|
139
|
+
@app.tool()
|
|
140
|
+
async def deploy_services(
|
|
141
|
+
environment: str,
|
|
142
|
+
replicas: int = 3,
|
|
143
|
+
tags: Optional[List[str]] = None,
|
|
144
|
+
dry_run: bool = False
|
|
145
|
+
) -> dict:
|
|
146
|
+
"""Deploy microservice instances to the specified cluster zone with autoscaling."""
|
|
147
|
+
...
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Synthesized parameter schema:
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"name": "deploy_services",
|
|
154
|
+
"description": "Deploy microservice instances to the specified cluster zone with autoscaling.",
|
|
155
|
+
"parameters": {
|
|
156
|
+
"type": "object",
|
|
157
|
+
"properties": {
|
|
158
|
+
"environment": { "type": "string" },
|
|
159
|
+
"replicas": { "type": "integer", "default": 3 },
|
|
160
|
+
"tags": { "type": "array", "items": { "type": "string" } },
|
|
161
|
+
"dry_run": { "type": "boolean", "default": false }
|
|
162
|
+
},
|
|
163
|
+
"required": ["environment"]
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### 2. 🎨 Auto-IR: UI-as-Data (Frontend without Frontend Code)
|
|
171
|
+
|
|
172
|
+
The Imperal Cloud Kernel inspects your return payloads and projects them into Declarative UI:
|
|
173
|
+
|
|
174
|
+
| Python Return Value | Rendered Appearance in Imperal Panel |
|
|
175
|
+
| :--- | :--- |
|
|
176
|
+
| `{"status": "ok", "metric": "99.98%", ...}` | 🎴 **Metric Card**: Interactive card with status badge, headline metric, and details |
|
|
177
|
+
| `[{"id": 1, "name": "node-a", "cpu": 14}, ...]` | 📊 **Data Table**: Sortable, responsive table with auto-detected columns |
|
|
178
|
+
| `{"_ui": {"type": "custom", ...}}` | 🧩 **Declarative IR**: Full customization using Imperal UI Kit primitives |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
### 3. 🔮 Ambient Context: Invisible Access to the Entire Cloud OS
|
|
183
|
+
|
|
184
|
+
The `ctx: Context` argument is hidden from the LLM schema (saving prompt tokens), but grants full platform access at runtime:
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
@app.tool()
|
|
188
|
+
async def analyze_anomalies(cluster_id: str, ctx: Context = None) -> dict:
|
|
189
|
+
# 1. Access high-speed key-value store (Redis):
|
|
190
|
+
last_run = await ctx.store.get(f"scan:{cluster_id}")
|
|
191
|
+
|
|
192
|
+
# 2. Query the native AI brain (LLM cascade):
|
|
193
|
+
verdict = await ctx.ai.complete(f"Diagnose cluster status: {cluster_id}")
|
|
194
|
+
|
|
195
|
+
# 3. Read authenticated identity and enterprise tenant boundaries:
|
|
196
|
+
actor_email = ctx.user.email
|
|
197
|
+
tenant_id = ctx.user.tenant_id
|
|
198
|
+
|
|
199
|
+
return {
|
|
200
|
+
"status": "analyzed",
|
|
201
|
+
"verdict": verdict.text,
|
|
202
|
+
"initiated_by": actor_email,
|
|
203
|
+
"metric": "Clean"
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
### 4. 🔀 Multi-Surface Liquid Morphing
|
|
210
|
+
|
|
211
|
+
Webbee operates natively across all surfaces. The same tool presentation is automatically morphed:
|
|
212
|
+
- **Terminal (Webbee Code TUI)**: High-density formatted output, ASCII tables, and numbered hotkey shortcuts (`[1] Execute`, `[2] Abort`).
|
|
213
|
+
- **Web Console (Imperal Panel)**: Interactive Declarative UI cards, modal dialogs, and real-time streaming widgets.
|
|
214
|
+
- **Telegram Messenger**: Concise mobile cards with inline button callbacks.
|
|
215
|
+
- **Ambient Voice**: Spoken concise executive summaries.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
### 5. 🔗 Cross-Extension Unix Piping
|
|
220
|
+
|
|
221
|
+
Tools across completely different extensions can be piped together through plain language:
|
|
222
|
+
```text
|
|
223
|
+
"Webbee, fetch domains from DNS checker, pass them to SSL auditor, and ping me on Telegram if expiring soon."
|
|
224
|
+
```
|
|
225
|
+
Every tool declaring typed inputs and outputs participates in deterministic, automated pipeline chaining.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 🧪 Hermetic Local Testing (Zero Network Required)
|
|
230
|
+
|
|
231
|
+
Imperal SDK includes a built-in autonomous mock suite (`imperal_sdk.testing.autonomous_mock`):
|
|
232
|
+
|
|
233
|
+
```python
|
|
234
|
+
import pytest
|
|
235
|
+
from imperal_sdk.testing.autonomous_mock import MockContext
|
|
236
|
+
from server_pulse import check_host
|
|
237
|
+
|
|
238
|
+
def test_check_host_locally():
|
|
239
|
+
mock_ctx = MockContext(user_id="imp_u_test", role="admin")
|
|
240
|
+
result = check_host(host="imperal.io", port=443, ctx=mock_ctx)
|
|
241
|
+
|
|
242
|
+
assert result["status"] == "online"
|
|
243
|
+
assert "_ui" in result
|
|
244
|
+
assert result["_ui"]["type"] == "metric_card"
|
|
245
|
+
assert result["_ui"]["badge"] == "online"
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Run test suite:
|
|
249
|
+
```bash
|
|
250
|
+
pytest -v
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 🏗️ Imperal Cloud OS Architecture
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
┌───────────────────────────────┐
|
|
259
|
+
│ Webbee Brain │
|
|
260
|
+
│ (Agentic AI Reasoning) │
|
|
261
|
+
└───────────────┬───────────────┘
|
|
262
|
+
│ Intent & Tool Calls
|
|
263
|
+
▼
|
|
264
|
+
┌───────────────────────────────┐
|
|
265
|
+
│ ICNLI Quantum SDK v6.0 │
|
|
266
|
+
│ imperal_sdk.App / Extension │
|
|
267
|
+
└───────────────┬───────────────┘
|
|
268
|
+
│ Declarative IR & Telemetry
|
|
269
|
+
┌────────────────────┼────────────────────┐
|
|
270
|
+
▼ ▼ ▼
|
|
271
|
+
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
272
|
+
│ Imperal Panel│ │ Webbee Code │ │ Telegram │
|
|
273
|
+
│ (Web UI) │ │ (Terminal) │ │ (Messenger) │
|
|
274
|
+
└──────────────┘ └──────────────┘ └──────────────┘
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 📜 Compatibility & Specifications
|
|
280
|
+
|
|
281
|
+
- **Python Runtime**: Universal support for **Python 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, 3.14+**.
|
|
282
|
+
- **Footprint**: Ultra-lightweight core with lazy attribute resolution (PEP 562 with Python 3.6 fallback). Sub-15ms cold start.
|
|
283
|
+
- **Standards**: 100% compliant with the [ICNLI Open Protocol](https://icnli.org) (CC BY-SA 4.0).
|
|
284
|
+
- **License**: [Apache-2.0](LICENSE).
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
<div align="center">
|
|
289
|
+
|
|
290
|
+
**Imperal Cloud — The World's First Decentralized ICNLI AI Cloud OS.**
|
|
291
|
+
*Crafted with 💛 and 🐝 by Imperal, Valentin Scerbacov, and the open-source community.*
|
|
292
|
+
|
|
293
|
+
</div>
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🐝 Imperal Quantum SDK (`imperal-sdk`)
|
|
4
|
+
|
|
5
|
+
### The Official Foundation AI Cloud OS Framework for Imperal Cloud & Webbee 🐝
|
|
6
|
+
|
|
7
|
+
**Write autonomous, context-aware AI tools and extensions in pure, idiomatic Python. Zero manifests. 0 lines of JSON boilerplate. Automatic reactive UI synthesis. Ambient cloud context. Multi-surface liquid morphing across Terminal, Web Panel, Telegram, and Voice. Python 3.6 to 3.14+ universal support.**
|
|
8
|
+
|
|
9
|
+
[](https://pypi.org/project/imperal-sdk/)
|
|
10
|
+
[](https://pypi.org/project/imperal-sdk/)
|
|
11
|
+
[](https://icnli.org)
|
|
12
|
+
[](LICENSE)
|
|
13
|
+
[]()
|
|
14
|
+
[]()
|
|
15
|
+
|
|
16
|
+
[Documentation](https://docs.imperal.io) · [ICNLI Protocol Spec](https://icnli.org) · [Imperal Cloud Panel](https://panel.imperal.io) · [Marketplace](https://panel.imperal.io/marketplace)
|
|
17
|
+
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 🌌 The Quantum Leap: Forget Legacy AI Agent Tooling
|
|
23
|
+
|
|
24
|
+
In early AI agent frameworks and Web2 SDKs, building tools for agents degenerated into bureaucratic overhead:
|
|
25
|
+
- ❌ **Manifest Hell**: Manually maintaining hundreds of lines of fragile `manifest.json` files.
|
|
26
|
+
- ❌ **Redundant Schema Declarations**: Copy-pasting parameters between Python signatures and JSON Schema definitions.
|
|
27
|
+
- ❌ **Frontend Tax**: Needing dedicated UI engineers just to render an agent's structured response in a web dashboard.
|
|
28
|
+
- ❌ **Surface Fragmentation**: What worked in the terminal broke in Telegram and looked horrible on the web.
|
|
29
|
+
- ❌ **Prompt Token Waste**: Leaking internal runtime parameters (`context`, `user_id`, `tokens`) directly into LLM function-calling schemas.
|
|
30
|
+
|
|
31
|
+
### ⚡ Enter ICNLI Quantum SDK v6.0
|
|
32
|
+
|
|
33
|
+
**Imperal Quantum SDK** delivers to autonomous cloud agents what **FastAPI** brought to modern web APIs — elevating cloud application development into an ultra-clean, quantum plane:
|
|
34
|
+
|
|
35
|
+
1. 🚀 **Zero-Manifest (0 Lines of JSON)**: Manifest definitions, parameter schemas, docstrings for LLM planning, RBAC security scopes, and billing tiers are extracted dynamically from standard Python function signatures and type hints.
|
|
36
|
+
2. 🎨 **Auto-IR (UI-as-Data)**: Simply return standard Python dictionaries, dataclasses, or lists. The Imperal Cloud runtime automatically projects them into reactive Declarative UI components (cards, metric grids, data tables) without writing a single line of CSS or frontend code.
|
|
37
|
+
3. 🔮 **Ambient Context Injection**: Seamlessly access session identity (`Context`), encrypted key-value storage (`Store`), persistent object storage (`Storage`), and the native AI engine (`AI`) without polluting the LLM's function calling schema.
|
|
38
|
+
4. 🔀 **Liquid Multi-Surface Morphing**: One codebase transparently adapts its presentation across **Terminal TUI** (Webbee Code), **Web Console** (Imperal Panel), **Telegram Messenger**, and **Ambient Voice**.
|
|
39
|
+
5. 🛡️ **Universal Python Compatibility (3.6 – 3.14+)**: From legacy MCP environments running Python 3.6 up to cutting-edge Python 3.14 runtimes, the core SDK operates with 100% backward compatibility and zero overhead.
|
|
40
|
+
6. 💎 **100% Backward Compatible**: Full support for classic enterprise extensions built on `imperal_sdk.Extension` (validated by 1,620+ automated tests).
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 🚀 Quickstart in 60 Seconds
|
|
45
|
+
|
|
46
|
+
### 1. Installation
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pip install imperal-sdk
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 2. Your First Cloud App in 15 Lines (`server_pulse.py`)
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from imperal_sdk import App, Context
|
|
56
|
+
|
|
57
|
+
# Instantiate your Quantum App — your manifest is already generated!
|
|
58
|
+
app = App("server-pulse", name="Server Pulse", category="devops")
|
|
59
|
+
|
|
60
|
+
@app.tool(pricing=5, destructive=False)
|
|
61
|
+
def check_host(host: str, port: int = 443, ctx: Context = None) -> dict:
|
|
62
|
+
"""Check server availability and SSL certificate expiration in real time."""
|
|
63
|
+
# Pure Python business logic:
|
|
64
|
+
is_online = True
|
|
65
|
+
ssl_days = 89
|
|
66
|
+
|
|
67
|
+
# Return pure data — Imperal Cloud synthesizes the reactive UI on the fly!
|
|
68
|
+
return {
|
|
69
|
+
"status": "online" if is_online else "down",
|
|
70
|
+
"host": host,
|
|
71
|
+
"ssl_days": ssl_days,
|
|
72
|
+
"metric": f"{ssl_days} days left"
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### What happened under the hood?
|
|
77
|
+
- ✅ **Valid ICNLI Manifest v6.0**: Automatically synthesized with zero JSON.
|
|
78
|
+
- ✅ **Type-to-Schema Translation**: `host` and `port` became typed JSON Schema properties with defaults.
|
|
79
|
+
- ✅ **Docstring Extraction**: The docstring was converted into the LLM classifier and planner description.
|
|
80
|
+
- ✅ **Security Scopes**: Granular RBAC scope `server-pulse:check_host` was registered automatically.
|
|
81
|
+
- ✅ **Ambient Context**: `ctx` was hidden from the LLM prompt while remaining injected at execution time.
|
|
82
|
+
- ✅ **Auto-IR Projection**: The returned dictionary automatically renders in `panel.imperal.io` as a styled **Metric Card** with badges and metrics!
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 💎 Core Quantum Superpowers
|
|
87
|
+
|
|
88
|
+
### 1. ⚡ Automatic Schema Synthesis (Type-to-Schema Engine)
|
|
89
|
+
|
|
90
|
+
Write clean, idiomatic Python with standard typing. The SDK extracts complete JSON Schema definitions:
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
from typing import List, Optional
|
|
94
|
+
|
|
95
|
+
@app.tool()
|
|
96
|
+
async def deploy_services(
|
|
97
|
+
environment: str,
|
|
98
|
+
replicas: int = 3,
|
|
99
|
+
tags: Optional[List[str]] = None,
|
|
100
|
+
dry_run: bool = False
|
|
101
|
+
) -> dict:
|
|
102
|
+
"""Deploy microservice instances to the specified cluster zone with autoscaling."""
|
|
103
|
+
...
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Synthesized parameter schema:
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"name": "deploy_services",
|
|
110
|
+
"description": "Deploy microservice instances to the specified cluster zone with autoscaling.",
|
|
111
|
+
"parameters": {
|
|
112
|
+
"type": "object",
|
|
113
|
+
"properties": {
|
|
114
|
+
"environment": { "type": "string" },
|
|
115
|
+
"replicas": { "type": "integer", "default": 3 },
|
|
116
|
+
"tags": { "type": "array", "items": { "type": "string" } },
|
|
117
|
+
"dry_run": { "type": "boolean", "default": false }
|
|
118
|
+
},
|
|
119
|
+
"required": ["environment"]
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### 2. 🎨 Auto-IR: UI-as-Data (Frontend without Frontend Code)
|
|
127
|
+
|
|
128
|
+
The Imperal Cloud Kernel inspects your return payloads and projects them into Declarative UI:
|
|
129
|
+
|
|
130
|
+
| Python Return Value | Rendered Appearance in Imperal Panel |
|
|
131
|
+
| :--- | :--- |
|
|
132
|
+
| `{"status": "ok", "metric": "99.98%", ...}` | 🎴 **Metric Card**: Interactive card with status badge, headline metric, and details |
|
|
133
|
+
| `[{"id": 1, "name": "node-a", "cpu": 14}, ...]` | 📊 **Data Table**: Sortable, responsive table with auto-detected columns |
|
|
134
|
+
| `{"_ui": {"type": "custom", ...}}` | 🧩 **Declarative IR**: Full customization using Imperal UI Kit primitives |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### 3. 🔮 Ambient Context: Invisible Access to the Entire Cloud OS
|
|
139
|
+
|
|
140
|
+
The `ctx: Context` argument is hidden from the LLM schema (saving prompt tokens), but grants full platform access at runtime:
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
@app.tool()
|
|
144
|
+
async def analyze_anomalies(cluster_id: str, ctx: Context = None) -> dict:
|
|
145
|
+
# 1. Access high-speed key-value store (Redis):
|
|
146
|
+
last_run = await ctx.store.get(f"scan:{cluster_id}")
|
|
147
|
+
|
|
148
|
+
# 2. Query the native AI brain (LLM cascade):
|
|
149
|
+
verdict = await ctx.ai.complete(f"Diagnose cluster status: {cluster_id}")
|
|
150
|
+
|
|
151
|
+
# 3. Read authenticated identity and enterprise tenant boundaries:
|
|
152
|
+
actor_email = ctx.user.email
|
|
153
|
+
tenant_id = ctx.user.tenant_id
|
|
154
|
+
|
|
155
|
+
return {
|
|
156
|
+
"status": "analyzed",
|
|
157
|
+
"verdict": verdict.text,
|
|
158
|
+
"initiated_by": actor_email,
|
|
159
|
+
"metric": "Clean"
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
### 4. 🔀 Multi-Surface Liquid Morphing
|
|
166
|
+
|
|
167
|
+
Webbee operates natively across all surfaces. The same tool presentation is automatically morphed:
|
|
168
|
+
- **Terminal (Webbee Code TUI)**: High-density formatted output, ASCII tables, and numbered hotkey shortcuts (`[1] Execute`, `[2] Abort`).
|
|
169
|
+
- **Web Console (Imperal Panel)**: Interactive Declarative UI cards, modal dialogs, and real-time streaming widgets.
|
|
170
|
+
- **Telegram Messenger**: Concise mobile cards with inline button callbacks.
|
|
171
|
+
- **Ambient Voice**: Spoken concise executive summaries.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
### 5. 🔗 Cross-Extension Unix Piping
|
|
176
|
+
|
|
177
|
+
Tools across completely different extensions can be piped together through plain language:
|
|
178
|
+
```text
|
|
179
|
+
"Webbee, fetch domains from DNS checker, pass them to SSL auditor, and ping me on Telegram if expiring soon."
|
|
180
|
+
```
|
|
181
|
+
Every tool declaring typed inputs and outputs participates in deterministic, automated pipeline chaining.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 🧪 Hermetic Local Testing (Zero Network Required)
|
|
186
|
+
|
|
187
|
+
Imperal SDK includes a built-in autonomous mock suite (`imperal_sdk.testing.autonomous_mock`):
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
import pytest
|
|
191
|
+
from imperal_sdk.testing.autonomous_mock import MockContext
|
|
192
|
+
from server_pulse import check_host
|
|
193
|
+
|
|
194
|
+
def test_check_host_locally():
|
|
195
|
+
mock_ctx = MockContext(user_id="imp_u_test", role="admin")
|
|
196
|
+
result = check_host(host="imperal.io", port=443, ctx=mock_ctx)
|
|
197
|
+
|
|
198
|
+
assert result["status"] == "online"
|
|
199
|
+
assert "_ui" in result
|
|
200
|
+
assert result["_ui"]["type"] == "metric_card"
|
|
201
|
+
assert result["_ui"]["badge"] == "online"
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Run test suite:
|
|
205
|
+
```bash
|
|
206
|
+
pytest -v
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 🏗️ Imperal Cloud OS Architecture
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
┌───────────────────────────────┐
|
|
215
|
+
│ Webbee Brain │
|
|
216
|
+
│ (Agentic AI Reasoning) │
|
|
217
|
+
└───────────────┬───────────────┘
|
|
218
|
+
│ Intent & Tool Calls
|
|
219
|
+
▼
|
|
220
|
+
┌───────────────────────────────┐
|
|
221
|
+
│ ICNLI Quantum SDK v6.0 │
|
|
222
|
+
│ imperal_sdk.App / Extension │
|
|
223
|
+
└───────────────┬───────────────┘
|
|
224
|
+
│ Declarative IR & Telemetry
|
|
225
|
+
┌────────────────────┼────────────────────┐
|
|
226
|
+
▼ ▼ ▼
|
|
227
|
+
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
228
|
+
│ Imperal Panel│ │ Webbee Code │ │ Telegram │
|
|
229
|
+
│ (Web UI) │ │ (Terminal) │ │ (Messenger) │
|
|
230
|
+
└──────────────┘ └──────────────┘ └──────────────┘
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## 📜 Compatibility & Specifications
|
|
236
|
+
|
|
237
|
+
- **Python Runtime**: Universal support for **Python 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, 3.14+**.
|
|
238
|
+
- **Footprint**: Ultra-lightweight core with lazy attribute resolution (PEP 562 with Python 3.6 fallback). Sub-15ms cold start.
|
|
239
|
+
- **Standards**: 100% compliant with the [ICNLI Open Protocol](https://icnli.org) (CC BY-SA 4.0).
|
|
240
|
+
- **License**: [Apache-2.0](LICENSE).
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
<div align="center">
|
|
245
|
+
|
|
246
|
+
**Imperal Cloud — The World's First Decentralized ICNLI AI Cloud OS.**
|
|
247
|
+
*Crafted with 💛 and 🐝 by Imperal, Valentin Scerbacov, and the open-source community.*
|
|
248
|
+
|
|
249
|
+
</div>
|
|
@@ -12,15 +12,22 @@ authors = [
|
|
|
12
12
|
{ name = "Valentin Scerbacov" },
|
|
13
13
|
{ name = "Imperal, Inc." },
|
|
14
14
|
]
|
|
15
|
-
requires-python = ">=3.
|
|
15
|
+
requires-python = ">=3.6"
|
|
16
16
|
classifiers = [
|
|
17
17
|
"Development Status :: 5 - Production/Stable",
|
|
18
18
|
"Intended Audience :: Developers",
|
|
19
19
|
"Operating System :: OS Independent",
|
|
20
20
|
"Programming Language :: Python :: 3",
|
|
21
21
|
"Programming Language :: Python :: 3 :: Only",
|
|
22
|
+
"Programming Language :: Python :: 3.6",
|
|
23
|
+
"Programming Language :: Python :: 3.7",
|
|
24
|
+
"Programming Language :: Python :: 3.8",
|
|
25
|
+
"Programming Language :: Python :: 3.9",
|
|
26
|
+
"Programming Language :: Python :: 3.10",
|
|
22
27
|
"Programming Language :: Python :: 3.11",
|
|
23
28
|
"Programming Language :: Python :: 3.12",
|
|
29
|
+
"Programming Language :: Python :: 3.13",
|
|
30
|
+
"Programming Language :: Python :: 3.14",
|
|
24
31
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
25
32
|
"Framework :: FastAPI",
|
|
26
33
|
"Typing :: Typed",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Imperal Cloud SDK — build extensions for the Imperal platform."""
|
|
2
2
|
from typing import TYPE_CHECKING
|
|
3
3
|
|
|
4
|
-
__version__ = "6.0.
|
|
4
|
+
__version__ = "6.0.2"
|
|
5
5
|
|
|
6
6
|
# 5.2.2 (2026-06-11): the package root resolves its public surface lazily
|
|
7
7
|
# (PEP 562). The eager imports pulled the HTTP transport (Context / client
|
|
@@ -48,6 +48,19 @@ _LAZY_ATTRS = {
|
|
|
48
48
|
# hand-roll a token_refresh.py; four divergent copies are how an expired
|
|
49
49
|
# Google Analytics token turned into "please reconnect" (2026-08-21).
|
|
50
50
|
"fresh_token": "imperal_sdk.oauth_tokens",
|
|
51
|
+
# GNC Marathon Resilience & Tenant Vault Working RAM (ICNLI V17)
|
|
52
|
+
"TenantVaultRAM": "imperal_sdk.vault_ram_client",
|
|
53
|
+
"TargetEntity": "imperal_sdk.vault_ram_client",
|
|
54
|
+
"WorkingRAMSnapshot": "imperal_sdk.vault_ram_client",
|
|
55
|
+
"GNCLyapunovGuard": "imperal_sdk.gnc_guard",
|
|
56
|
+
"GNCEnergyState": "imperal_sdk.gnc_guard",
|
|
57
|
+
"BOMExtractor": "imperal_sdk.bom_extractor",
|
|
58
|
+
"BOMEntity": "imperal_sdk.bom_extractor",
|
|
59
|
+
"BOMReport": "imperal_sdk.bom_extractor",
|
|
60
|
+
"AdversarialOracle": "imperal_sdk.adversarial_oracle",
|
|
61
|
+
"OracleAuditResult": "imperal_sdk.adversarial_oracle",
|
|
62
|
+
"CrossSurfaceLiveBus": "imperal_sdk.cross_surface_bus",
|
|
63
|
+
"MarathonLiveEvent": "imperal_sdk.cross_surface_bus",
|
|
51
64
|
"with_fresh_token": "imperal_sdk.oauth_tokens",
|
|
52
65
|
"needs_refresh": "imperal_sdk.oauth_tokens",
|
|
53
66
|
"TokenRefreshError": "imperal_sdk.oauth_tokens",
|
|
@@ -156,6 +169,15 @@ if TYPE_CHECKING: # pragma: no cover — IDE / type-checker surface only
|
|
|
156
169
|
)
|
|
157
170
|
|
|
158
171
|
|
|
172
|
+
|
|
173
|
+
import sys as _sys
|
|
174
|
+
if _sys.version_info < (3, 7):
|
|
175
|
+
class _PEP562Module(_sys.modules[__name__].__class__):
|
|
176
|
+
def __getattr__(self, name):
|
|
177
|
+
return __getattr__(name)
|
|
178
|
+
|
|
179
|
+
_sys.modules[__name__].__class__ = _PEP562Module
|
|
180
|
+
|
|
159
181
|
def __getattr__(name: str):
|
|
160
182
|
import importlib
|
|
161
183
|
|