client: regenerate from hanzo-inc/[email protected] (8.5.164)

The served document moved past the one this projection was generated
from, so the client lane's check failed every release. uv.lock follows
hanzo-tools-browser onto zapd.
This commit is contained in:
2026-09-30 07:13:42 -07:00
parent ad606c7611
commit 2b672025db
104 changed files with 3821 additions and 18100 deletions
+9 -52
View File
@@ -172,11 +172,13 @@ pkg/hanzoai/cloud/models/agent_agent_detail.py
pkg/hanzoai/cloud/models/agent_agent_list.py
pkg/hanzoai/cloud/models/agent_agent_run_view.py
pkg/hanzoai/cloud/models/agent_agent_view.py
pkg/hanzoai/cloud/models/agent_artifact.py
pkg/hanzoai/cloud/models/agent_build_list.py
pkg/hanzoai/cloud/models/agent_build_summary.py
pkg/hanzoai/cloud/models/agent_build_turn.py
pkg/hanzoai/cloud/models/agent_build_view.py
pkg/hanzoai/cloud/models/agent_claim_key_out.py
pkg/hanzoai/cloud/models/agent_coding_artifacts.py
pkg/hanzoai/cloud/models/agent_coding_blob.py
pkg/hanzoai/cloud/models/agent_coding_changes.py
pkg/hanzoai/cloud/models/agent_coding_commit.py
@@ -232,6 +234,7 @@ pkg/hanzoai/cloud/models/ai_anthropic_request.py
pkg/hanzoai/cloud/models/ai_anthropic_response.py
pkg/hanzoai/cloud/models/ai_anthropic_tool.py
pkg/hanzoai/cloud/models/ai_anthropic_usage.py
pkg/hanzoai/cloud/models/ai_cache_writes.py
pkg/hanzoai/cloud/models/ai_cost_stats.py
pkg/hanzoai/cloud/models/ai_decision_sides.py
pkg/hanzoai/cloud/models/ai_decision_sides_false.py
@@ -576,7 +579,6 @@ pkg/hanzoai/cloud/models/code_tree_entry.py
pkg/hanzoai/cloud/models/company_advance_in.py
pkg/hanzoai/cloud/models/company_begin_in.py
pkg/hanzoai/cloud/models/company_charge.py
pkg/hanzoai/cloud/models/company_decision_in.py
pkg/hanzoai/cloud/models/company_ein.py
pkg/hanzoai/cloud/models/company_ein_in.py
pkg/hanzoai/cloud/models/company_esign_complete_in.py
@@ -726,13 +728,13 @@ pkg/hanzoai/cloud/models/dataset_risk_dataset_spec.py
pkg/hanzoai/cloud/models/dataset_risk_dataset_versions.py
pkg/hanzoai/cloud/models/dataset_risk_lineage.py
pkg/hanzoai/cloud/models/dataset_risk_split_counts.py
pkg/hanzoai/cloud/models/decision.py
pkg/hanzoai/cloud/models/deck_out.py
pkg/hanzoai/cloud/models/declaration.py
pkg/hanzoai/cloud/models/declare_env.py
pkg/hanzoai/cloud/models/declare_req.py
pkg/hanzoai/cloud/models/declare_resp.py
pkg/hanzoai/cloud/models/declare_result.py
pkg/hanzoai/cloud/models/deploy_applied_resource.py
pkg/hanzoai/cloud/models/deploy_argo_app.py
pkg/hanzoai/cloud/models/deploy_argo_app_list.py
pkg/hanzoai/cloud/models/deploy_argo_cluster.py
@@ -759,20 +761,9 @@ pkg/hanzoai/cloud/models/deploy_argo_summary.py
pkg/hanzoai/cloud/models/deploy_argo_sync_status.py
pkg/hanzoai/cloud/models/deploy_argo_sync_windows.py
pkg/hanzoai/cloud/models/deploy_argo_tree.py
pkg/hanzoai/cloud/models/deploy_console_settings.py
pkg/hanzoai/cloud/models/deploy_console_settings_dex_config.py
pkg/hanzoai/cloud/models/deploy_console_settings_google_analytics.py
pkg/hanzoai/cloud/models/deploy_console_settings_help.py
pkg/hanzoai/cloud/models/deploy_deploy_health.py
pkg/hanzoai/cloud/models/deploy_git_ops_app.py
pkg/hanzoai/cloud/models/deploy_git_ops_deploy.py
pkg/hanzoai/cloud/models/deploy_git_ops_operation.py
pkg/hanzoai/cloud/models/deploy_git_ops_plane.py
pkg/hanzoai/cloud/models/deploy_reconcile_report.py
pkg/hanzoai/cloud/models/deploy_reconcile_source.py
pkg/hanzoai/cloud/models/deploy_session_ended.py
pkg/hanzoai/cloud/models/deploy_session_user.py
pkg/hanzoai/cloud/models/deploy_version_message.py
pkg/hanzoai/cloud/models/deployment_detail.py
pkg/hanzoai/cloud/models/destination_destination_disconnected.py
pkg/hanzoai/cloud/models/destination_destination_field.py
@@ -794,8 +785,6 @@ pkg/hanzoai/cloud/models/domain_registrant.py
pkg/hanzoai/cloud/models/domain_renew_req.py
pkg/hanzoai/cloud/models/domain_renew_result.py
pkg/hanzoai/cloud/models/domain_transfer_req.py
pkg/hanzoai/cloud/models/engine_engine_replica.py
pkg/hanzoai/cloud/models/engine_engine_replica_update.py
pkg/hanzoai/cloud/models/engine_engine_status.py
pkg/hanzoai/cloud/models/entitlement_entitlements_view.py
pkg/hanzoai/cloud/models/entitlement_mutate_req.py
@@ -1041,6 +1030,7 @@ pkg/hanzoai/cloud/models/git_workflow_list.py
pkg/hanzoai/cloud/models/git_workflow_run.py
pkg/hanzoai/cloud/models/git_workflow_runs.py
pkg/hanzoai/cloud/models/git_workflow_view.py
pkg/hanzoai/cloud/models/grants.py
pkg/hanzoai/cloud/models/graph.py
pkg/hanzoai/cloud/models/graph_graph_answer_in.py
pkg/hanzoai/cloud/models/graph_graph_answer_out.py
@@ -1081,11 +1071,6 @@ pkg/hanzoai/cloud/models/graph_wire_fact.py
pkg/hanzoai/cloud/models/guide_action_record.py
pkg/hanzoai/cloud/models/guide_actions_view.py
pkg/hanzoai/cloud/models/guide_analytics_view.py
pkg/hanzoai/cloud/models/guide_blog.py
pkg/hanzoai/cloud/models/guide_blueprint.py
pkg/hanzoai/cloud/models/guide_blueprint_counts.py
pkg/hanzoai/cloud/models/guide_blueprint_versions_view.py
pkg/hanzoai/cloud/models/guide_blueprint_view.py
pkg/hanzoai/cloud/models/guide_chat_request.py
pkg/hanzoai/cloud/models/guide_chat_response.py
pkg/hanzoai/cloud/models/guide_corpus_view.py
@@ -1094,18 +1079,13 @@ pkg/hanzoai/cloud/models/guide_curriculum_view.py
pkg/hanzoai/cloud/models/guide_funnel.py
pkg/hanzoai/cloud/models/guide_journey_step.py
pkg/hanzoai/cloud/models/guide_overview_view.py
pkg/hanzoai/cloud/models/guide_page.py
pkg/hanzoai/cloud/models/guide_principle.py
pkg/hanzoai/cloud/models/guide_profile_metrics.py
pkg/hanzoai/cloud/models/guide_profile_response.py
pkg/hanzoai/cloud/models/guide_progress_view.py
pkg/hanzoai/cloud/models/guide_section.py
pkg/hanzoai/cloud/models/guide_step_view.py
pkg/hanzoai/cloud/models/guide_strategy.py
pkg/hanzoai/cloud/models/guide_strategy_view.py
pkg/hanzoai/cloud/models/guide_suggest_response.py
pkg/hanzoai/cloud/models/guide_suggestion.py
pkg/hanzoai/cloud/models/guide_version_meta.py
pkg/hanzoai/cloud/models/help_help_article.py
pkg/hanzoai/cloud/models/help_help_article_card.py
pkg/hanzoai/cloud/models/help_help_article_list.py
@@ -1124,7 +1104,6 @@ pkg/hanzoai/cloud/models/iam_address.py
pkg/hanzoai/cloud/models/iam_answer.py
pkg/hanzoai/cloud/models/iam_application.py
pkg/hanzoai/cloud/models/iam_application_list_result.py
pkg/hanzoai/cloud/models/iam_assume_body.py
pkg/hanzoai/cloud/models/iam_audit_log.py
pkg/hanzoai/cloud/models/iam_auditlogs_delete_output.py
pkg/hanzoai/cloud/models/iam_auditlogs_input.py
@@ -1333,9 +1312,6 @@ pkg/hanzoai/cloud/models/licensing_pubkey_view.py
pkg/hanzoai/cloud/models/licensing_release.py
pkg/hanzoai/cloud/models/licensing_release_asset.py
pkg/hanzoai/cloud/models/licensing_release_list.py
pkg/hanzoai/cloud/models/licensing_revocation_entry.py
pkg/hanzoai/cloud/models/licensing_revoke_request.py
pkg/hanzoai/cloud/models/licensing_revoke_response.py
pkg/hanzoai/cloud/models/licensing_verify_request.py
pkg/hanzoai/cloud/models/licensing_verify_response.py
pkg/hanzoai/cloud/models/line_item.py
@@ -1444,7 +1420,6 @@ pkg/hanzoai/cloud/models/marketplace_price.py
pkg/hanzoai/cloud/models/marketplace_publish_req.py
pkg/hanzoai/cloud/models/marketplace_received.py
pkg/hanzoai/cloud/models/marketplace_reputation.py
pkg/hanzoai/cloud/models/marketplace_resolve_in.py
pkg/hanzoai/cloud/models/marketplace_seller.py
pkg/hanzoai/cloud/models/marketplace_shop.py
pkg/hanzoai/cloud/models/marketplace_shop_listing.py
@@ -1523,9 +1498,6 @@ pkg/hanzoai/cloud/models/o11y_associated_component.py
pkg/hanzoai/cloud/models/o11y_attribute_key.py
pkg/hanzoai/cloud/models/o11y_attributes_component_entry.py
pkg/hanzoai/cloud/models/o11y_authorization.py
pkg/hanzoai/cloud/models/o11y_availability_point.py
pkg/hanzoai/cloud/models/o11y_availability_response.py
pkg/hanzoai/cloud/models/o11y_availability_response_range.py
pkg/hanzoai/cloud/models/o11y_aws_account_config.py
pkg/hanzoai/cloud/models/o11y_aws_cloud_watch_logs_subscription.py
pkg/hanzoai/cloud/models/o11y_aws_cloud_watch_metric_stream_filter.py
@@ -2177,7 +2149,6 @@ pkg/hanzoai/cloud/models/o11y_service_assets.py
pkg/hanzoai/cloud/models/o11y_service_config.py
pkg/hanzoai/cloud/models/o11y_service_dashboard.py
pkg/hanzoai/cloud/models/o11y_service_metadata.py
pkg/hanzoai/cloud/models/o11y_service_up.py
pkg/hanzoai/cloud/models/o11y_sig_v4_config.py
pkg/hanzoai/cloud/models/o11y_signal_connection_status.py
pkg/hanzoai/cloud/models/o11y_slack_action.py
@@ -2336,7 +2307,6 @@ pkg/hanzoai/cloud/models/plan_plan_tier_list.py
pkg/hanzoai/cloud/models/plan_plan_tool_list.py
pkg/hanzoai/cloud/models/plan_plan_vocab.py
pkg/hanzoai/cloud/models/platform_add_domain_req.py
pkg/hanzoai/cloud/models/platform_app_cd.py
pkg/hanzoai/cloud/models/platform_app_move.py
pkg/hanzoai/cloud/models/platform_app_out.py
pkg/hanzoai/cloud/models/platform_app_view.py
@@ -2344,8 +2314,6 @@ pkg/hanzoai/cloud/models/platform_binary_spec.py
pkg/hanzoai/cloud/models/platform_build_board.py
pkg/hanzoai/cloud/models/platform_build_row.py
pkg/hanzoai/cloud/models/platform_cd_app.py
pkg/hanzoai/cloud/models/platform_cd_diff.py
pkg/hanzoai/cloud/models/platform_cd_resource.py
pkg/hanzoai/cloud/models/platform_cd_resp.py
pkg/hanzoai/cloud/models/platform_create_app_req.py
pkg/hanzoai/cloud/models/platform_decl_ref.py
@@ -2386,8 +2354,6 @@ pkg/hanzoai/cloud/models/platform_record.py
pkg/hanzoai/cloud/models/platform_relabel.py
pkg/hanzoai/cloud/models/platform_release_board.py
pkg/hanzoai/cloud/models/platform_release_row.py
pkg/hanzoai/cloud/models/platform_restart_ref.py
pkg/hanzoai/cloud/models/platform_restarted.py
pkg/hanzoai/cloud/models/platform_rollback_req.py
pkg/hanzoai/cloud/models/platform_run_req.py
pkg/hanzoai/cloud/models/platform_run_view.py
@@ -2444,7 +2410,6 @@ pkg/hanzoai/cloud/models/pricing_pricing_plan_list.py
pkg/hanzoai/cloud/models/pricing_pricing_preset_list.py
pkg/hanzoai/cloud/models/pricing_pricing_provider_list.py
pkg/hanzoai/cloud/models/pricing_pricing_region_list.py
pkg/hanzoai/cloud/models/pricing_pricing_sync_out.py
pkg/hanzoai/cloud/models/pricing_pricing_tier_list.py
pkg/hanzoai/cloud/models/pricing_pricing_tool_list.py
pkg/hanzoai/cloud/models/pricing_rate.py
@@ -2455,7 +2420,6 @@ pkg/hanzoai/cloud/models/principal_attestation.py
pkg/hanzoai/cloud/models/principal_clear_in.py
pkg/hanzoai/cloud/models/principal_clearance.py
pkg/hanzoai/cloud/models/principal_clearance_list.py
pkg/hanzoai/cloud/models/principal_decide_in.py
pkg/hanzoai/cloud/models/principal_decided.py
pkg/hanzoai/cloud/models/principal_entity.py
pkg/hanzoai/cloud/models/principal_fact.py
@@ -2467,7 +2431,6 @@ pkg/hanzoai/cloud/models/principal_jwk.py
pkg/hanzoai/cloud/models/principal_jwks.py
pkg/hanzoai/cloud/models/principal_list.py
pkg/hanzoai/cloud/models/principal_match.py
pkg/hanzoai/cloud/models/principal_match_list.py
pkg/hanzoai/cloud/models/principal_method.py
pkg/hanzoai/cloud/models/principal_obligation.py
pkg/hanzoai/cloud/models/principal_rule.py
@@ -2536,8 +2499,6 @@ pkg/hanzoai/cloud/models/provider_github_backfill_in.py
pkg/hanzoai/cloud/models/provider_github_backfill_result.py
pkg/hanzoai/cloud/models/provider_github_branch.py
pkg/hanzoai/cloud/models/provider_github_branches_out.py
pkg/hanzoai/cloud/models/provider_github_claim_in.py
pkg/hanzoai/cloud/models/provider_github_claim_out.py
pkg/hanzoai/cloud/models/provider_github_fork_out.py
pkg/hanzoai/cloud/models/provider_github_fork_req.py
pkg/hanzoai/cloud/models/provider_github_import_in.py
@@ -2611,14 +2572,10 @@ pkg/hanzoai/cloud/models/reference_reference_answer.py
pkg/hanzoai/cloud/models/reference_reference_out.py
pkg/hanzoai/cloud/models/reference_reference_override.py
pkg/hanzoai/cloud/models/reference_reference_override_in.py
pkg/hanzoai/cloud/models/reference_reference_receipt.py
pkg/hanzoai/cloud/models/reference_reference_set.py
pkg/hanzoai/cloud/models/reference_reference_sets_out.py
pkg/hanzoai/cloud/models/reference_reference_source.py
pkg/hanzoai/cloud/models/reference_reference_taken.py
pkg/hanzoai/cloud/models/reference_reference_version.py
pkg/hanzoai/cloud/models/reference_refresh_reference_in.py
pkg/hanzoai/cloud/models/reference_refresh_reference_out.py
pkg/hanzoai/cloud/models/reference_resolve_reference_in.py
pkg/hanzoai/cloud/models/reference_resolve_reference_out.py
pkg/hanzoai/cloud/models/reference_set_reference_in.py
@@ -2702,6 +2659,10 @@ pkg/hanzoai/cloud/models/sandbox_exec_result.py
pkg/hanzoai/cloud/models/sandbox_lease_in.py
pkg/hanzoai/cloud/models/sandbox_leased.py
pkg/hanzoai/cloud/models/sandbox_path_in.py
pkg/hanzoai/cloud/models/sandbox_port.py
pkg/hanzoai/cloud/models/sandbox_ports.py
pkg/hanzoai/cloud/models/sandbox_preview_grant.py
pkg/hanzoai/cloud/models/sandbox_preview_in.py
pkg/hanzoai/cloud/models/sandbox_ran.py
pkg/hanzoai/cloud/models/sandbox_run_in.py
pkg/hanzoai/cloud/models/sandbox_sandbox.py
@@ -2713,8 +2674,6 @@ pkg/hanzoai/cloud/models/sandbox_ticket_grant.py
pkg/hanzoai/cloud/models/sandbox_write_in.py
pkg/hanzoai/cloud/models/sandbox_wrote.py
pkg/hanzoai/cloud/models/sbom_sbom_health.py
pkg/hanzoai/cloud/models/sbom_sbom_ingest.py
pkg/hanzoai/cloud/models/sbom_sbom_ingested.py
pkg/hanzoai/cloud/models/scale.py
pkg/hanzoai/cloud/models/scan_draft.py
pkg/hanzoai/cloud/models/search_backend_status.py
@@ -2911,9 +2870,7 @@ pkg/hanzoai/cloud/models/tool_authored_skill_list.py
pkg/hanzoai/cloud/models/tool_build_out.py
pkg/hanzoai/cloud/models/tool_build_request.py
pkg/hanzoai/cloud/models/tool_create_server_req.py
pkg/hanzoai/cloud/models/tool_curate_req.py
pkg/hanzoai/cloud/models/tool_mcp_catalog.py
pkg/hanzoai/cloud/models/tool_mcp_catalog_sync.py
pkg/hanzoai/cloud/models/tool_mcp_listing.py
pkg/hanzoai/cloud/models/tool_mcp_package.py
pkg/hanzoai/cloud/models/tool_mcp_remote.py
+2 -2
View File
@@ -1,4 +1,4 @@
ref=2774987ccc2b22f2fb2714b10e66ace5abc8825a
sha256=783f66a300ab38b292048c1bfccdb5655ba8d0e91cea43c55c2cd83fc12af3e9
ref=v8.5.458
sha256=4eb778747980d907495714713a949614966de79529efd58be7cc6b2c767bee45
repo=hanzo-inc/cloud
path=openapi.yaml
+18 -104
View File
@@ -194,11 +194,13 @@ __all__ = [
"AgentAgentList",
"AgentAgentRunView",
"AgentAgentView",
"AgentArtifact",
"AgentBuildList",
"AgentBuildSummary",
"AgentBuildTurn",
"AgentBuildView",
"AgentClaimKeyOut",
"AgentCodingArtifacts",
"AgentCodingBlob",
"AgentCodingChanges",
"AgentCodingCommit",
@@ -254,6 +256,7 @@ __all__ = [
"AiAnthropicResponse",
"AiAnthropicTool",
"AiAnthropicUsage",
"AiCacheWrites",
"AiCostStats",
"AiDecisionSides",
"AiDecisionSidesFalse",
@@ -598,7 +601,6 @@ __all__ = [
"CompanyAdvanceIn",
"CompanyBeginIn",
"CompanyCharge",
"CompanyDecisionIn",
"CompanyEIN",
"CompanyEinIn",
"CompanyEsignCompleteIn",
@@ -748,13 +750,13 @@ __all__ = [
"DatasetRiskDatasetVersions",
"DatasetRiskLineage",
"DatasetRiskSplitCounts",
"Decision",
"DeckOut",
"Declaration",
"DeclareEnv",
"DeclareReq",
"DeclareResp",
"DeclareResult",
"DeployAppliedResource",
"DeployArgoApp",
"DeployArgoAppList",
"DeployArgoCluster",
@@ -781,20 +783,9 @@ __all__ = [
"DeployArgoSyncStatus",
"DeployArgoSyncWindows",
"DeployArgoTree",
"DeployConsoleSettings",
"DeployConsoleSettingsDexConfig",
"DeployConsoleSettingsGoogleAnalytics",
"DeployConsoleSettingsHelp",
"DeployDeployHealth",
"DeployGitOpsApp",
"DeployGitOpsDeploy",
"DeployGitOpsOperation",
"DeployGitOpsPlane",
"DeployReconcileReport",
"DeployReconcileSource",
"DeploySessionEnded",
"DeploySessionUser",
"DeployVersionMessage",
"DeploymentDetail",
"DestinationDestinationDisconnected",
"DestinationDestinationField",
@@ -816,8 +807,6 @@ __all__ = [
"DomainRenewReq",
"DomainRenewResult",
"DomainTransferReq",
"EngineEngineReplica",
"EngineEngineReplicaUpdate",
"EngineEngineStatus",
"EntitlementEntitlementsView",
"EntitlementMutateReq",
@@ -1063,6 +1052,7 @@ __all__ = [
"GitWorkflowRun",
"GitWorkflowRuns",
"GitWorkflowView",
"Grants",
"Graph",
"GraphGraphAnswerIn",
"GraphGraphAnswerOut",
@@ -1103,11 +1093,6 @@ __all__ = [
"GuideActionRecord",
"GuideActionsView",
"GuideAnalyticsView",
"GuideBlog",
"GuideBlueprint",
"GuideBlueprintCounts",
"GuideBlueprintVersionsView",
"GuideBlueprintView",
"GuideChatRequest",
"GuideChatResponse",
"GuideCorpusView",
@@ -1116,18 +1101,13 @@ __all__ = [
"GuideFunnel",
"GuideJourneyStep",
"GuideOverviewView",
"GuidePage",
"GuidePrinciple",
"GuideProfileMetrics",
"GuideProfileResponse",
"GuideProgressView",
"GuideSection",
"GuideStepView",
"GuideStrategy",
"GuideStrategyView",
"GuideSuggestResponse",
"GuideSuggestion",
"GuideVersionMeta",
"HelpHelpArticle",
"HelpHelpArticleCard",
"HelpHelpArticleList",
@@ -1146,7 +1126,6 @@ __all__ = [
"IamAnswer",
"IamApplication",
"IamApplicationListResult",
"IamAssumeBody",
"IamAuditLog",
"IamAuditlogsDeleteOutput",
"IamAuditlogsInput",
@@ -1355,9 +1334,6 @@ __all__ = [
"LicensingRelease",
"LicensingReleaseAsset",
"LicensingReleaseList",
"LicensingRevocationEntry",
"LicensingRevokeRequest",
"LicensingRevokeResponse",
"LicensingVerifyRequest",
"LicensingVerifyResponse",
"LineItem",
@@ -1469,7 +1445,6 @@ __all__ = [
"MarketplacePublishReq",
"MarketplaceReceived",
"MarketplaceReputation",
"MarketplaceResolveIn",
"MarketplaceSeller",
"MarketplaceShop",
"MarketplaceShopListing",
@@ -1557,9 +1532,6 @@ __all__ = [
"O11yAttributeKey",
"O11yAttributesComponentEntry",
"O11yAuthorization",
"O11yAvailabilityPoint",
"O11yAvailabilityResponse",
"O11yAvailabilityResponseRange",
"O11yAzureAccountConfig",
"O11yAzureConnectionArtifact",
"O11yAzureIntegrationConfig",
@@ -2200,7 +2172,6 @@ __all__ = [
"O11yServiceConfig",
"O11yServiceDashboard",
"O11yServiceMetadata",
"O11yServiceUp",
"O11ySigV4Config",
"O11ySignalConnectionStatus",
"O11ySlackAction",
@@ -2358,7 +2329,6 @@ __all__ = [
"PlanPlanToolList",
"PlanPlanVocab",
"PlatformAddDomainReq",
"PlatformAppCD",
"PlatformAppMove",
"PlatformAppOut",
"PlatformAppView",
@@ -2366,8 +2336,6 @@ __all__ = [
"PlatformBuildBoard",
"PlatformBuildRow",
"PlatformCDApp",
"PlatformCDResource",
"PlatformCdDiff",
"PlatformCdResp",
"PlatformCreateAppReq",
"PlatformDeclRef",
@@ -2408,8 +2376,6 @@ __all__ = [
"PlatformRelabel",
"PlatformReleaseBoard",
"PlatformReleaseRow",
"PlatformRestartRef",
"PlatformRestarted",
"PlatformRollbackReq",
"PlatformRunReq",
"PlatformRunView",
@@ -2466,7 +2432,6 @@ __all__ = [
"PricingPricingPresetList",
"PricingPricingProviderList",
"PricingPricingRegionList",
"PricingPricingSyncOut",
"PricingPricingTierList",
"PricingPricingToolList",
"PricingRate",
@@ -2477,7 +2442,6 @@ __all__ = [
"PrincipalClearIn",
"PrincipalClearance",
"PrincipalClearanceList",
"PrincipalDecideIn",
"PrincipalDecided",
"PrincipalEntity",
"PrincipalFact",
@@ -2489,7 +2453,6 @@ __all__ = [
"PrincipalJWKS",
"PrincipalList",
"PrincipalMatch",
"PrincipalMatchList",
"PrincipalMethod",
"PrincipalObligation",
"PrincipalRule",
@@ -2558,8 +2521,6 @@ __all__ = [
"ProviderGithubBackfillResult",
"ProviderGithubBranch",
"ProviderGithubBranchesOut",
"ProviderGithubClaimIn",
"ProviderGithubClaimOut",
"ProviderGithubForkOut",
"ProviderGithubForkReq",
"ProviderGithubImportIn",
@@ -2633,14 +2594,10 @@ __all__ = [
"ReferenceReferenceOut",
"ReferenceReferenceOverride",
"ReferenceReferenceOverrideIn",
"ReferenceReferenceReceipt",
"ReferenceReferenceSet",
"ReferenceReferenceSetsOut",
"ReferenceReferenceSource",
"ReferenceReferenceTaken",
"ReferenceReferenceVersion",
"ReferenceRefreshReferenceIn",
"ReferenceRefreshReferenceOut",
"ReferenceResolveReferenceIn",
"ReferenceResolveReferenceOut",
"ReferenceSetReferenceIn",
@@ -2724,6 +2681,10 @@ __all__ = [
"SandboxLeaseIn",
"SandboxLeased",
"SandboxPathIn",
"SandboxPort",
"SandboxPorts",
"SandboxPreviewGrant",
"SandboxPreviewIn",
"SandboxRan",
"SandboxRunIn",
"SandboxSandbox",
@@ -2735,8 +2696,6 @@ __all__ = [
"SandboxWriteIn",
"SandboxWrote",
"SbomSbomHealth",
"SbomSbomIngest",
"SbomSbomIngested",
"Scale",
"ScanDraft",
"SearchBackendStatus",
@@ -2933,13 +2892,11 @@ __all__ = [
"ToolBuildOut",
"ToolBuildRequest",
"ToolCreateServerReq",
"ToolCurateReq",
"ToolMCPListing",
"ToolMCPPackage",
"ToolMCPRemote",
"ToolMCPServer",
"ToolMcpCatalog",
"ToolMcpCatalogSync",
"ToolMcpServerList",
"ToolPluginDeleted",
"ToolPluginMount",
@@ -3238,11 +3195,13 @@ from hanzoai.cloud.models.agent_agent_detail import AgentAgentDetail as AgentAge
from hanzoai.cloud.models.agent_agent_list import AgentAgentList as AgentAgentList
from hanzoai.cloud.models.agent_agent_run_view import AgentAgentRunView as AgentAgentRunView
from hanzoai.cloud.models.agent_agent_view import AgentAgentView as AgentAgentView
from hanzoai.cloud.models.agent_artifact import AgentArtifact as AgentArtifact
from hanzoai.cloud.models.agent_build_list import AgentBuildList as AgentBuildList
from hanzoai.cloud.models.agent_build_summary import AgentBuildSummary as AgentBuildSummary
from hanzoai.cloud.models.agent_build_turn import AgentBuildTurn as AgentBuildTurn
from hanzoai.cloud.models.agent_build_view import AgentBuildView as AgentBuildView
from hanzoai.cloud.models.agent_claim_key_out import AgentClaimKeyOut as AgentClaimKeyOut
from hanzoai.cloud.models.agent_coding_artifacts import AgentCodingArtifacts as AgentCodingArtifacts
from hanzoai.cloud.models.agent_coding_blob import AgentCodingBlob as AgentCodingBlob
from hanzoai.cloud.models.agent_coding_changes import AgentCodingChanges as AgentCodingChanges
from hanzoai.cloud.models.agent_coding_commit import AgentCodingCommit as AgentCodingCommit
@@ -3298,6 +3257,7 @@ from hanzoai.cloud.models.ai_anthropic_request import AiAnthropicRequest as AiAn
from hanzoai.cloud.models.ai_anthropic_response import AiAnthropicResponse as AiAnthropicResponse
from hanzoai.cloud.models.ai_anthropic_tool import AiAnthropicTool as AiAnthropicTool
from hanzoai.cloud.models.ai_anthropic_usage import AiAnthropicUsage as AiAnthropicUsage
from hanzoai.cloud.models.ai_cache_writes import AiCacheWrites as AiCacheWrites
from hanzoai.cloud.models.ai_cost_stats import AiCostStats as AiCostStats
from hanzoai.cloud.models.ai_decision_sides import AiDecisionSides as AiDecisionSides
from hanzoai.cloud.models.ai_decision_sides_false import AiDecisionSidesFalse as AiDecisionSidesFalse
@@ -3642,7 +3602,6 @@ from hanzoai.cloud.models.code_tree_entry import CodeTreeEntry as CodeTreeEntry
from hanzoai.cloud.models.company_advance_in import CompanyAdvanceIn as CompanyAdvanceIn
from hanzoai.cloud.models.company_begin_in import CompanyBeginIn as CompanyBeginIn
from hanzoai.cloud.models.company_charge import CompanyCharge as CompanyCharge
from hanzoai.cloud.models.company_decision_in import CompanyDecisionIn as CompanyDecisionIn
from hanzoai.cloud.models.company_ein import CompanyEIN as CompanyEIN
from hanzoai.cloud.models.company_ein_in import CompanyEinIn as CompanyEinIn
from hanzoai.cloud.models.company_esign_complete_in import CompanyEsignCompleteIn as CompanyEsignCompleteIn
@@ -3792,13 +3751,13 @@ from hanzoai.cloud.models.dataset_risk_dataset_spec import DatasetRiskDatasetSpe
from hanzoai.cloud.models.dataset_risk_dataset_versions import DatasetRiskDatasetVersions as DatasetRiskDatasetVersions
from hanzoai.cloud.models.dataset_risk_lineage import DatasetRiskLineage as DatasetRiskLineage
from hanzoai.cloud.models.dataset_risk_split_counts import DatasetRiskSplitCounts as DatasetRiskSplitCounts
from hanzoai.cloud.models.decision import Decision as Decision
from hanzoai.cloud.models.deck_out import DeckOut as DeckOut
from hanzoai.cloud.models.declaration import Declaration as Declaration
from hanzoai.cloud.models.declare_env import DeclareEnv as DeclareEnv
from hanzoai.cloud.models.declare_req import DeclareReq as DeclareReq
from hanzoai.cloud.models.declare_resp import DeclareResp as DeclareResp
from hanzoai.cloud.models.declare_result import DeclareResult as DeclareResult
from hanzoai.cloud.models.deploy_applied_resource import DeployAppliedResource as DeployAppliedResource
from hanzoai.cloud.models.deploy_argo_app import DeployArgoApp as DeployArgoApp
from hanzoai.cloud.models.deploy_argo_app_list import DeployArgoAppList as DeployArgoAppList
from hanzoai.cloud.models.deploy_argo_cluster import DeployArgoCluster as DeployArgoCluster
@@ -3825,20 +3784,9 @@ from hanzoai.cloud.models.deploy_argo_summary import DeployArgoSummary as Deploy
from hanzoai.cloud.models.deploy_argo_sync_status import DeployArgoSyncStatus as DeployArgoSyncStatus
from hanzoai.cloud.models.deploy_argo_sync_windows import DeployArgoSyncWindows as DeployArgoSyncWindows
from hanzoai.cloud.models.deploy_argo_tree import DeployArgoTree as DeployArgoTree
from hanzoai.cloud.models.deploy_console_settings import DeployConsoleSettings as DeployConsoleSettings
from hanzoai.cloud.models.deploy_console_settings_dex_config import DeployConsoleSettingsDexConfig as DeployConsoleSettingsDexConfig
from hanzoai.cloud.models.deploy_console_settings_google_analytics import DeployConsoleSettingsGoogleAnalytics as DeployConsoleSettingsGoogleAnalytics
from hanzoai.cloud.models.deploy_console_settings_help import DeployConsoleSettingsHelp as DeployConsoleSettingsHelp
from hanzoai.cloud.models.deploy_deploy_health import DeployDeployHealth as DeployDeployHealth
from hanzoai.cloud.models.deploy_git_ops_app import DeployGitOpsApp as DeployGitOpsApp
from hanzoai.cloud.models.deploy_git_ops_deploy import DeployGitOpsDeploy as DeployGitOpsDeploy
from hanzoai.cloud.models.deploy_git_ops_operation import DeployGitOpsOperation as DeployGitOpsOperation
from hanzoai.cloud.models.deploy_git_ops_plane import DeployGitOpsPlane as DeployGitOpsPlane
from hanzoai.cloud.models.deploy_reconcile_report import DeployReconcileReport as DeployReconcileReport
from hanzoai.cloud.models.deploy_reconcile_source import DeployReconcileSource as DeployReconcileSource
from hanzoai.cloud.models.deploy_session_ended import DeploySessionEnded as DeploySessionEnded
from hanzoai.cloud.models.deploy_session_user import DeploySessionUser as DeploySessionUser
from hanzoai.cloud.models.deploy_version_message import DeployVersionMessage as DeployVersionMessage
from hanzoai.cloud.models.deployment_detail import DeploymentDetail as DeploymentDetail
from hanzoai.cloud.models.destination_destination_disconnected import DestinationDestinationDisconnected as DestinationDestinationDisconnected
from hanzoai.cloud.models.destination_destination_field import DestinationDestinationField as DestinationDestinationField
@@ -3860,8 +3808,6 @@ from hanzoai.cloud.models.domain_registrant import DomainRegistrant as DomainReg
from hanzoai.cloud.models.domain_renew_req import DomainRenewReq as DomainRenewReq
from hanzoai.cloud.models.domain_renew_result import DomainRenewResult as DomainRenewResult
from hanzoai.cloud.models.domain_transfer_req import DomainTransferReq as DomainTransferReq
from hanzoai.cloud.models.engine_engine_replica import EngineEngineReplica as EngineEngineReplica
from hanzoai.cloud.models.engine_engine_replica_update import EngineEngineReplicaUpdate as EngineEngineReplicaUpdate
from hanzoai.cloud.models.engine_engine_status import EngineEngineStatus as EngineEngineStatus
from hanzoai.cloud.models.entitlement_entitlements_view import EntitlementEntitlementsView as EntitlementEntitlementsView
from hanzoai.cloud.models.entitlement_mutate_req import EntitlementMutateReq as EntitlementMutateReq
@@ -4107,6 +4053,7 @@ from hanzoai.cloud.models.git_workflow_list import GitWorkflowList as GitWorkflo
from hanzoai.cloud.models.git_workflow_run import GitWorkflowRun as GitWorkflowRun
from hanzoai.cloud.models.git_workflow_runs import GitWorkflowRuns as GitWorkflowRuns
from hanzoai.cloud.models.git_workflow_view import GitWorkflowView as GitWorkflowView
from hanzoai.cloud.models.grants import Grants as Grants
from hanzoai.cloud.models.graph import Graph as Graph
from hanzoai.cloud.models.graph_graph_answer_in import GraphGraphAnswerIn as GraphGraphAnswerIn
from hanzoai.cloud.models.graph_graph_answer_out import GraphGraphAnswerOut as GraphGraphAnswerOut
@@ -4147,11 +4094,6 @@ from hanzoai.cloud.models.graph_wire_fact import GraphWireFact as GraphWireFact
from hanzoai.cloud.models.guide_action_record import GuideActionRecord as GuideActionRecord
from hanzoai.cloud.models.guide_actions_view import GuideActionsView as GuideActionsView
from hanzoai.cloud.models.guide_analytics_view import GuideAnalyticsView as GuideAnalyticsView
from hanzoai.cloud.models.guide_blog import GuideBlog as GuideBlog
from hanzoai.cloud.models.guide_blueprint import GuideBlueprint as GuideBlueprint
from hanzoai.cloud.models.guide_blueprint_counts import GuideBlueprintCounts as GuideBlueprintCounts
from hanzoai.cloud.models.guide_blueprint_versions_view import GuideBlueprintVersionsView as GuideBlueprintVersionsView
from hanzoai.cloud.models.guide_blueprint_view import GuideBlueprintView as GuideBlueprintView
from hanzoai.cloud.models.guide_chat_request import GuideChatRequest as GuideChatRequest
from hanzoai.cloud.models.guide_chat_response import GuideChatResponse as GuideChatResponse
from hanzoai.cloud.models.guide_corpus_view import GuideCorpusView as GuideCorpusView
@@ -4160,18 +4102,13 @@ from hanzoai.cloud.models.guide_curriculum_view import GuideCurriculumView as Gu
from hanzoai.cloud.models.guide_funnel import GuideFunnel as GuideFunnel
from hanzoai.cloud.models.guide_journey_step import GuideJourneyStep as GuideJourneyStep
from hanzoai.cloud.models.guide_overview_view import GuideOverviewView as GuideOverviewView
from hanzoai.cloud.models.guide_page import GuidePage as GuidePage
from hanzoai.cloud.models.guide_principle import GuidePrinciple as GuidePrinciple
from hanzoai.cloud.models.guide_profile_metrics import GuideProfileMetrics as GuideProfileMetrics
from hanzoai.cloud.models.guide_profile_response import GuideProfileResponse as GuideProfileResponse
from hanzoai.cloud.models.guide_progress_view import GuideProgressView as GuideProgressView
from hanzoai.cloud.models.guide_section import GuideSection as GuideSection
from hanzoai.cloud.models.guide_step_view import GuideStepView as GuideStepView
from hanzoai.cloud.models.guide_strategy import GuideStrategy as GuideStrategy
from hanzoai.cloud.models.guide_strategy_view import GuideStrategyView as GuideStrategyView
from hanzoai.cloud.models.guide_suggest_response import GuideSuggestResponse as GuideSuggestResponse
from hanzoai.cloud.models.guide_suggestion import GuideSuggestion as GuideSuggestion
from hanzoai.cloud.models.guide_version_meta import GuideVersionMeta as GuideVersionMeta
from hanzoai.cloud.models.help_help_article import HelpHelpArticle as HelpHelpArticle
from hanzoai.cloud.models.help_help_article_card import HelpHelpArticleCard as HelpHelpArticleCard
from hanzoai.cloud.models.help_help_article_list import HelpHelpArticleList as HelpHelpArticleList
@@ -4190,7 +4127,6 @@ from hanzoai.cloud.models.iam_address import IamAddress as IamAddress
from hanzoai.cloud.models.iam_answer import IamAnswer as IamAnswer
from hanzoai.cloud.models.iam_application import IamApplication as IamApplication
from hanzoai.cloud.models.iam_application_list_result import IamApplicationListResult as IamApplicationListResult
from hanzoai.cloud.models.iam_assume_body import IamAssumeBody as IamAssumeBody
from hanzoai.cloud.models.iam_audit_log import IamAuditLog as IamAuditLog
from hanzoai.cloud.models.iam_auditlogs_delete_output import IamAuditlogsDeleteOutput as IamAuditlogsDeleteOutput
from hanzoai.cloud.models.iam_auditlogs_input import IamAuditlogsInput as IamAuditlogsInput
@@ -4399,9 +4335,6 @@ from hanzoai.cloud.models.licensing_pubkey_view import LicensingPubkeyView as Li
from hanzoai.cloud.models.licensing_release import LicensingRelease as LicensingRelease
from hanzoai.cloud.models.licensing_release_asset import LicensingReleaseAsset as LicensingReleaseAsset
from hanzoai.cloud.models.licensing_release_list import LicensingReleaseList as LicensingReleaseList
from hanzoai.cloud.models.licensing_revocation_entry import LicensingRevocationEntry as LicensingRevocationEntry
from hanzoai.cloud.models.licensing_revoke_request import LicensingRevokeRequest as LicensingRevokeRequest
from hanzoai.cloud.models.licensing_revoke_response import LicensingRevokeResponse as LicensingRevokeResponse
from hanzoai.cloud.models.licensing_verify_request import LicensingVerifyRequest as LicensingVerifyRequest
from hanzoai.cloud.models.licensing_verify_response import LicensingVerifyResponse as LicensingVerifyResponse
from hanzoai.cloud.models.line_item import LineItem as LineItem
@@ -4513,7 +4446,6 @@ from hanzoai.cloud.models.marketplace_price import MarketplacePrice as Marketpla
from hanzoai.cloud.models.marketplace_publish_req import MarketplacePublishReq as MarketplacePublishReq
from hanzoai.cloud.models.marketplace_received import MarketplaceReceived as MarketplaceReceived
from hanzoai.cloud.models.marketplace_reputation import MarketplaceReputation as MarketplaceReputation
from hanzoai.cloud.models.marketplace_resolve_in import MarketplaceResolveIn as MarketplaceResolveIn
from hanzoai.cloud.models.marketplace_seller import MarketplaceSeller as MarketplaceSeller
from hanzoai.cloud.models.marketplace_shop import MarketplaceShop as MarketplaceShop
from hanzoai.cloud.models.marketplace_shop_listing import MarketplaceShopListing as MarketplaceShopListing
@@ -4601,9 +4533,6 @@ from hanzoai.cloud.models.o11y_associated_component import O11yAssociatedCompone
from hanzoai.cloud.models.o11y_attribute_key import O11yAttributeKey as O11yAttributeKey
from hanzoai.cloud.models.o11y_attributes_component_entry import O11yAttributesComponentEntry as O11yAttributesComponentEntry
from hanzoai.cloud.models.o11y_authorization import O11yAuthorization as O11yAuthorization
from hanzoai.cloud.models.o11y_availability_point import O11yAvailabilityPoint as O11yAvailabilityPoint
from hanzoai.cloud.models.o11y_availability_response import O11yAvailabilityResponse as O11yAvailabilityResponse
from hanzoai.cloud.models.o11y_availability_response_range import O11yAvailabilityResponseRange as O11yAvailabilityResponseRange
from hanzoai.cloud.models.o11y_azure_account_config import O11yAzureAccountConfig as O11yAzureAccountConfig
from hanzoai.cloud.models.o11y_azure_connection_artifact import O11yAzureConnectionArtifact as O11yAzureConnectionArtifact
from hanzoai.cloud.models.o11y_azure_integration_config import O11yAzureIntegrationConfig as O11yAzureIntegrationConfig
@@ -5244,7 +5173,6 @@ from hanzoai.cloud.models.o11y_service_assets import O11yServiceAssets as O11ySe
from hanzoai.cloud.models.o11y_service_config import O11yServiceConfig as O11yServiceConfig
from hanzoai.cloud.models.o11y_service_dashboard import O11yServiceDashboard as O11yServiceDashboard
from hanzoai.cloud.models.o11y_service_metadata import O11yServiceMetadata as O11yServiceMetadata
from hanzoai.cloud.models.o11y_service_up import O11yServiceUp as O11yServiceUp
from hanzoai.cloud.models.o11y_sig_v4_config import O11ySigV4Config as O11ySigV4Config
from hanzoai.cloud.models.o11y_signal_connection_status import O11ySignalConnectionStatus as O11ySignalConnectionStatus
from hanzoai.cloud.models.o11y_slack_action import O11ySlackAction as O11ySlackAction
@@ -5402,7 +5330,6 @@ from hanzoai.cloud.models.plan_plan_tier_list import PlanPlanTierList as PlanPla
from hanzoai.cloud.models.plan_plan_tool_list import PlanPlanToolList as PlanPlanToolList
from hanzoai.cloud.models.plan_plan_vocab import PlanPlanVocab as PlanPlanVocab
from hanzoai.cloud.models.platform_add_domain_req import PlatformAddDomainReq as PlatformAddDomainReq
from hanzoai.cloud.models.platform_app_cd import PlatformAppCD as PlatformAppCD
from hanzoai.cloud.models.platform_app_move import PlatformAppMove as PlatformAppMove
from hanzoai.cloud.models.platform_app_out import PlatformAppOut as PlatformAppOut
from hanzoai.cloud.models.platform_app_view import PlatformAppView as PlatformAppView
@@ -5410,8 +5337,6 @@ from hanzoai.cloud.models.platform_binary_spec import PlatformBinarySpec as Plat
from hanzoai.cloud.models.platform_build_board import PlatformBuildBoard as PlatformBuildBoard
from hanzoai.cloud.models.platform_build_row import PlatformBuildRow as PlatformBuildRow
from hanzoai.cloud.models.platform_cd_app import PlatformCDApp as PlatformCDApp
from hanzoai.cloud.models.platform_cd_resource import PlatformCDResource as PlatformCDResource
from hanzoai.cloud.models.platform_cd_diff import PlatformCdDiff as PlatformCdDiff
from hanzoai.cloud.models.platform_cd_resp import PlatformCdResp as PlatformCdResp
from hanzoai.cloud.models.platform_create_app_req import PlatformCreateAppReq as PlatformCreateAppReq
from hanzoai.cloud.models.platform_decl_ref import PlatformDeclRef as PlatformDeclRef
@@ -5452,8 +5377,6 @@ from hanzoai.cloud.models.platform_record import PlatformRecord as PlatformRecor
from hanzoai.cloud.models.platform_relabel import PlatformRelabel as PlatformRelabel
from hanzoai.cloud.models.platform_release_board import PlatformReleaseBoard as PlatformReleaseBoard
from hanzoai.cloud.models.platform_release_row import PlatformReleaseRow as PlatformReleaseRow
from hanzoai.cloud.models.platform_restart_ref import PlatformRestartRef as PlatformRestartRef
from hanzoai.cloud.models.platform_restarted import PlatformRestarted as PlatformRestarted
from hanzoai.cloud.models.platform_rollback_req import PlatformRollbackReq as PlatformRollbackReq
from hanzoai.cloud.models.platform_run_req import PlatformRunReq as PlatformRunReq
from hanzoai.cloud.models.platform_run_view import PlatformRunView as PlatformRunView
@@ -5510,7 +5433,6 @@ from hanzoai.cloud.models.pricing_pricing_plan_list import PricingPricingPlanLis
from hanzoai.cloud.models.pricing_pricing_preset_list import PricingPricingPresetList as PricingPricingPresetList
from hanzoai.cloud.models.pricing_pricing_provider_list import PricingPricingProviderList as PricingPricingProviderList
from hanzoai.cloud.models.pricing_pricing_region_list import PricingPricingRegionList as PricingPricingRegionList
from hanzoai.cloud.models.pricing_pricing_sync_out import PricingPricingSyncOut as PricingPricingSyncOut
from hanzoai.cloud.models.pricing_pricing_tier_list import PricingPricingTierList as PricingPricingTierList
from hanzoai.cloud.models.pricing_pricing_tool_list import PricingPricingToolList as PricingPricingToolList
from hanzoai.cloud.models.pricing_rate import PricingRate as PricingRate
@@ -5521,7 +5443,6 @@ from hanzoai.cloud.models.principal_attestation import PrincipalAttestation as P
from hanzoai.cloud.models.principal_clear_in import PrincipalClearIn as PrincipalClearIn
from hanzoai.cloud.models.principal_clearance import PrincipalClearance as PrincipalClearance
from hanzoai.cloud.models.principal_clearance_list import PrincipalClearanceList as PrincipalClearanceList
from hanzoai.cloud.models.principal_decide_in import PrincipalDecideIn as PrincipalDecideIn
from hanzoai.cloud.models.principal_decided import PrincipalDecided as PrincipalDecided
from hanzoai.cloud.models.principal_entity import PrincipalEntity as PrincipalEntity
from hanzoai.cloud.models.principal_fact import PrincipalFact as PrincipalFact
@@ -5533,7 +5454,6 @@ from hanzoai.cloud.models.principal_jwk import PrincipalJWK as PrincipalJWK
from hanzoai.cloud.models.principal_jwks import PrincipalJWKS as PrincipalJWKS
from hanzoai.cloud.models.principal_list import PrincipalList as PrincipalList
from hanzoai.cloud.models.principal_match import PrincipalMatch as PrincipalMatch
from hanzoai.cloud.models.principal_match_list import PrincipalMatchList as PrincipalMatchList
from hanzoai.cloud.models.principal_method import PrincipalMethod as PrincipalMethod
from hanzoai.cloud.models.principal_obligation import PrincipalObligation as PrincipalObligation
from hanzoai.cloud.models.principal_rule import PrincipalRule as PrincipalRule
@@ -5602,8 +5522,6 @@ from hanzoai.cloud.models.provider_github_backfill_in import ProviderGithubBackf
from hanzoai.cloud.models.provider_github_backfill_result import ProviderGithubBackfillResult as ProviderGithubBackfillResult
from hanzoai.cloud.models.provider_github_branch import ProviderGithubBranch as ProviderGithubBranch
from hanzoai.cloud.models.provider_github_branches_out import ProviderGithubBranchesOut as ProviderGithubBranchesOut
from hanzoai.cloud.models.provider_github_claim_in import ProviderGithubClaimIn as ProviderGithubClaimIn
from hanzoai.cloud.models.provider_github_claim_out import ProviderGithubClaimOut as ProviderGithubClaimOut
from hanzoai.cloud.models.provider_github_fork_out import ProviderGithubForkOut as ProviderGithubForkOut
from hanzoai.cloud.models.provider_github_fork_req import ProviderGithubForkReq as ProviderGithubForkReq
from hanzoai.cloud.models.provider_github_import_in import ProviderGithubImportIn as ProviderGithubImportIn
@@ -5677,14 +5595,10 @@ from hanzoai.cloud.models.reference_reference_answer import ReferenceReferenceAn
from hanzoai.cloud.models.reference_reference_out import ReferenceReferenceOut as ReferenceReferenceOut
from hanzoai.cloud.models.reference_reference_override import ReferenceReferenceOverride as ReferenceReferenceOverride
from hanzoai.cloud.models.reference_reference_override_in import ReferenceReferenceOverrideIn as ReferenceReferenceOverrideIn
from hanzoai.cloud.models.reference_reference_receipt import ReferenceReferenceReceipt as ReferenceReferenceReceipt
from hanzoai.cloud.models.reference_reference_set import ReferenceReferenceSet as ReferenceReferenceSet
from hanzoai.cloud.models.reference_reference_sets_out import ReferenceReferenceSetsOut as ReferenceReferenceSetsOut
from hanzoai.cloud.models.reference_reference_source import ReferenceReferenceSource as ReferenceReferenceSource
from hanzoai.cloud.models.reference_reference_taken import ReferenceReferenceTaken as ReferenceReferenceTaken
from hanzoai.cloud.models.reference_reference_version import ReferenceReferenceVersion as ReferenceReferenceVersion
from hanzoai.cloud.models.reference_refresh_reference_in import ReferenceRefreshReferenceIn as ReferenceRefreshReferenceIn
from hanzoai.cloud.models.reference_refresh_reference_out import ReferenceRefreshReferenceOut as ReferenceRefreshReferenceOut
from hanzoai.cloud.models.reference_resolve_reference_in import ReferenceResolveReferenceIn as ReferenceResolveReferenceIn
from hanzoai.cloud.models.reference_resolve_reference_out import ReferenceResolveReferenceOut as ReferenceResolveReferenceOut
from hanzoai.cloud.models.reference_set_reference_in import ReferenceSetReferenceIn as ReferenceSetReferenceIn
@@ -5768,6 +5682,10 @@ from hanzoai.cloud.models.sandbox_exec_result import SandboxExecResult as Sandbo
from hanzoai.cloud.models.sandbox_lease_in import SandboxLeaseIn as SandboxLeaseIn
from hanzoai.cloud.models.sandbox_leased import SandboxLeased as SandboxLeased
from hanzoai.cloud.models.sandbox_path_in import SandboxPathIn as SandboxPathIn
from hanzoai.cloud.models.sandbox_port import SandboxPort as SandboxPort
from hanzoai.cloud.models.sandbox_ports import SandboxPorts as SandboxPorts
from hanzoai.cloud.models.sandbox_preview_grant import SandboxPreviewGrant as SandboxPreviewGrant
from hanzoai.cloud.models.sandbox_preview_in import SandboxPreviewIn as SandboxPreviewIn
from hanzoai.cloud.models.sandbox_ran import SandboxRan as SandboxRan
from hanzoai.cloud.models.sandbox_run_in import SandboxRunIn as SandboxRunIn
from hanzoai.cloud.models.sandbox_sandbox import SandboxSandbox as SandboxSandbox
@@ -5779,8 +5697,6 @@ from hanzoai.cloud.models.sandbox_ticket_grant import SandboxTicketGrant as Sand
from hanzoai.cloud.models.sandbox_write_in import SandboxWriteIn as SandboxWriteIn
from hanzoai.cloud.models.sandbox_wrote import SandboxWrote as SandboxWrote
from hanzoai.cloud.models.sbom_sbom_health import SbomSbomHealth as SbomSbomHealth
from hanzoai.cloud.models.sbom_sbom_ingest import SbomSbomIngest as SbomSbomIngest
from hanzoai.cloud.models.sbom_sbom_ingested import SbomSbomIngested as SbomSbomIngested
from hanzoai.cloud.models.scale import Scale as Scale
from hanzoai.cloud.models.scan_draft import ScanDraft as ScanDraft
from hanzoai.cloud.models.search_backend_status import SearchBackendStatus as SearchBackendStatus
@@ -5977,13 +5893,11 @@ from hanzoai.cloud.models.tool_authored_skill_list import ToolAuthoredSkillList
from hanzoai.cloud.models.tool_build_out import ToolBuildOut as ToolBuildOut
from hanzoai.cloud.models.tool_build_request import ToolBuildRequest as ToolBuildRequest
from hanzoai.cloud.models.tool_create_server_req import ToolCreateServerReq as ToolCreateServerReq
from hanzoai.cloud.models.tool_curate_req import ToolCurateReq as ToolCurateReq
from hanzoai.cloud.models.tool_mcp_listing import ToolMCPListing as ToolMCPListing
from hanzoai.cloud.models.tool_mcp_package import ToolMCPPackage as ToolMCPPackage
from hanzoai.cloud.models.tool_mcp_remote import ToolMCPRemote as ToolMCPRemote
from hanzoai.cloud.models.tool_mcp_server import ToolMCPServer as ToolMCPServer
from hanzoai.cloud.models.tool_mcp_catalog import ToolMcpCatalog as ToolMcpCatalog
from hanzoai.cloud.models.tool_mcp_catalog_sync import ToolMcpCatalogSync as ToolMcpCatalogSync
from hanzoai.cloud.models.tool_mcp_server_list import ToolMcpServerList as ToolMcpServerList
from hanzoai.cloud.models.tool_plugin_deleted import ToolPluginDeleted as ToolPluginDeleted
from hanzoai.cloud.models.tool_plugin_mount import ToolPluginMount as ToolPluginMount
File diff suppressed because it is too large Load Diff
+108 -108
View File
@@ -3958,7 +3958,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4023,7 +4023,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4088,7 +4088,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4210,7 +4210,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4275,7 +4275,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -4340,7 +4340,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5308,7 +5308,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5373,7 +5373,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5438,7 +5438,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5809,7 +5809,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5874,7 +5874,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -5939,7 +5939,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6061,7 +6061,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6126,7 +6126,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6191,7 +6191,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6313,7 +6313,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6378,7 +6378,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6443,7 +6443,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6565,7 +6565,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6630,7 +6630,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -6695,7 +6695,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -22846,7 +22846,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -22911,7 +22911,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -22976,7 +22976,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -23098,7 +23098,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -23163,7 +23163,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -23228,7 +23228,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -26203,7 +26203,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -26268,7 +26268,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -26333,7 +26333,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -26704,7 +26704,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -26769,7 +26769,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -26834,7 +26834,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -27460,7 +27460,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -27525,7 +27525,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -27590,7 +27590,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -27712,7 +27712,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -27777,7 +27777,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -27842,7 +27842,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -27964,7 +27964,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -28029,7 +28029,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -28094,7 +28094,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -38563,7 +38563,7 @@ class AiApi:
) -> AiModelList:
"""Returns the list of available models from the routing table.
Returns the list of available models from the routing table. PUBLIC BY DESIGN, AND IT DOES NOT AUTHENTICATE — that is the whole contract, so it is stated here rather than left to be inferred. The catalogue is the same for everyone (listAvailableModels takes no principal), docs.hanzo.ai fetches it from the browser, and every policy layer around it already says so out loud: the authz filter lists \"models\" as public, filter_balance refuses to gate it (a 402 here was a console-wide outage), the rate limiter excludes it, and cloud's spend.Reachable carries /v1/models/ as \"the model catalog the shell reads for discovery\". SO THE Authorization HEADER IS NOT AN ADMISSION CHECK HERE. It is read for ONE thing — annotating gated SKUs with the caller's own access standing — and annotation degrades to nothing when there is no verified principal. It used to hold a \"require authentication\" gate that authenticated nobody: it rejected an ABSENT credential and a MALFORMED one, then accepted any string that merely looked like a key. `Bearer sk-` followed by 36 zeroes returned 200 in production; so did a JWT three days expired. It was a shape check wearing an auth check's clothes, and its cost was diagnostic: /v1/models is the natural \"is my auth working?\" probe, and answering 200 to a dead credential sent people debugging the wrong system. A public endpoint must not appear to validate. Either check the credential or ignore it — this one ignores it, deliberately and visibly. Removing that gate discloses nothing new: the catalogue was already reachable by anyone willing to type three characters, so there is no confidentiality delta, only an honesty one.
Returns the list of available models from the routing table. PUBLIC BY DESIGN, AND IT DOES NOT AUTHENTICATE — that is the whole contract, so it is stated here rather than left to be inferred. The catalogue is the same for everyone (listAvailableModels takes no principal), docs.hanzo.ai fetches it from the browser, and every policy layer around it says so: the authz filter lists \"models\" as public, filter_balance does not gate it, the rate limiter excludes it, and cloud's spend.Reachable carries /v1/models/ as \"the model catalog the shell reads for discovery\". SO THE Authorization HEADER IS NOT AN ADMISSION CHECK HERE. It is read for ONE thing — annotating gated SKUs with the caller's own access standing — and annotation degrades to nothing when there is no verified principal. A credential that is presented is verified, never merely shape-checked: a caller using /v1/models to ask \"is my key working?\" gets an honest answer, because a key that does not verify annotates nothing rather than reading as accepted.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -38628,7 +38628,7 @@ class AiApi:
) -> ApiResponse[AiModelList]:
"""Returns the list of available models from the routing table.
Returns the list of available models from the routing table. PUBLIC BY DESIGN, AND IT DOES NOT AUTHENTICATE — that is the whole contract, so it is stated here rather than left to be inferred. The catalogue is the same for everyone (listAvailableModels takes no principal), docs.hanzo.ai fetches it from the browser, and every policy layer around it already says so out loud: the authz filter lists \"models\" as public, filter_balance refuses to gate it (a 402 here was a console-wide outage), the rate limiter excludes it, and cloud's spend.Reachable carries /v1/models/ as \"the model catalog the shell reads for discovery\". SO THE Authorization HEADER IS NOT AN ADMISSION CHECK HERE. It is read for ONE thing — annotating gated SKUs with the caller's own access standing — and annotation degrades to nothing when there is no verified principal. It used to hold a \"require authentication\" gate that authenticated nobody: it rejected an ABSENT credential and a MALFORMED one, then accepted any string that merely looked like a key. `Bearer sk-` followed by 36 zeroes returned 200 in production; so did a JWT three days expired. It was a shape check wearing an auth check's clothes, and its cost was diagnostic: /v1/models is the natural \"is my auth working?\" probe, and answering 200 to a dead credential sent people debugging the wrong system. A public endpoint must not appear to validate. Either check the credential or ignore it — this one ignores it, deliberately and visibly. Removing that gate discloses nothing new: the catalogue was already reachable by anyone willing to type three characters, so there is no confidentiality delta, only an honesty one.
Returns the list of available models from the routing table. PUBLIC BY DESIGN, AND IT DOES NOT AUTHENTICATE — that is the whole contract, so it is stated here rather than left to be inferred. The catalogue is the same for everyone (listAvailableModels takes no principal), docs.hanzo.ai fetches it from the browser, and every policy layer around it says so: the authz filter lists \"models\" as public, filter_balance does not gate it, the rate limiter excludes it, and cloud's spend.Reachable carries /v1/models/ as \"the model catalog the shell reads for discovery\". SO THE Authorization HEADER IS NOT AN ADMISSION CHECK HERE. It is read for ONE thing — annotating gated SKUs with the caller's own access standing — and annotation degrades to nothing when there is no verified principal. A credential that is presented is verified, never merely shape-checked: a caller using /v1/models to ask \"is my key working?\" gets an honest answer, because a key that does not verify annotates nothing rather than reading as accepted.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -38693,7 +38693,7 @@ class AiApi:
) -> RESTResponseType:
"""Returns the list of available models from the routing table.
Returns the list of available models from the routing table. PUBLIC BY DESIGN, AND IT DOES NOT AUTHENTICATE — that is the whole contract, so it is stated here rather than left to be inferred. The catalogue is the same for everyone (listAvailableModels takes no principal), docs.hanzo.ai fetches it from the browser, and every policy layer around it already says so out loud: the authz filter lists \"models\" as public, filter_balance refuses to gate it (a 402 here was a console-wide outage), the rate limiter excludes it, and cloud's spend.Reachable carries /v1/models/ as \"the model catalog the shell reads for discovery\". SO THE Authorization HEADER IS NOT AN ADMISSION CHECK HERE. It is read for ONE thing — annotating gated SKUs with the caller's own access standing — and annotation degrades to nothing when there is no verified principal. It used to hold a \"require authentication\" gate that authenticated nobody: it rejected an ABSENT credential and a MALFORMED one, then accepted any string that merely looked like a key. `Bearer sk-` followed by 36 zeroes returned 200 in production; so did a JWT three days expired. It was a shape check wearing an auth check's clothes, and its cost was diagnostic: /v1/models is the natural \"is my auth working?\" probe, and answering 200 to a dead credential sent people debugging the wrong system. A public endpoint must not appear to validate. Either check the credential or ignore it — this one ignores it, deliberately and visibly. Removing that gate discloses nothing new: the catalogue was already reachable by anyone willing to type three characters, so there is no confidentiality delta, only an honesty one.
Returns the list of available models from the routing table. PUBLIC BY DESIGN, AND IT DOES NOT AUTHENTICATE — that is the whole contract, so it is stated here rather than left to be inferred. The catalogue is the same for everyone (listAvailableModels takes no principal), docs.hanzo.ai fetches it from the browser, and every policy layer around it says so: the authz filter lists \"models\" as public, filter_balance does not gate it, the rate limiter excludes it, and cloud's spend.Reachable carries /v1/models/ as \"the model catalog the shell reads for discovery\". SO THE Authorization HEADER IS NOT AN ADMISSION CHECK HERE. It is read for ONE thing — annotating gated SKUs with the caller's own access standing — and annotation degrades to nothing when there is no verified principal. A credential that is presented is verified, never merely shape-checked: a caller using /v1/models to ask \"is my key working?\" gets an honest answer, because a key that does not verify annotates nothing rather than reading as accepted.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -42642,7 +42642,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -42707,7 +42707,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -42772,7 +42772,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -42894,7 +42894,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -42959,7 +42959,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -43024,7 +43024,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -44353,7 +44353,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -44418,7 +44418,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -44483,7 +44483,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -44605,7 +44605,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -44670,7 +44670,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -44735,7 +44735,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -44857,7 +44857,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -44922,7 +44922,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -44987,7 +44987,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -45109,7 +45109,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -45174,7 +45174,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -45239,7 +45239,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -45361,7 +45361,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -45426,7 +45426,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -45491,7 +45491,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -56705,7 +56705,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -56770,7 +56770,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -56835,7 +56835,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -56957,7 +56957,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -57022,7 +57022,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -57087,7 +57087,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61031,7 +61031,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61096,7 +61096,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61161,7 +61161,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61283,7 +61283,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61348,7 +61348,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61413,7 +61413,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61535,7 +61535,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61600,7 +61600,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61665,7 +61665,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61787,7 +61787,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61852,7 +61852,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -61917,7 +61917,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -62039,7 +62039,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -62104,7 +62104,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -62169,7 +62169,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -74617,7 +74617,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -74682,7 +74682,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -74747,7 +74747,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -74869,7 +74869,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -74934,7 +74934,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -74999,7 +74999,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -76328,7 +76328,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -76393,7 +76393,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -76458,7 +76458,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -76580,7 +76580,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -76645,7 +76645,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -76710,7 +76710,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -76832,7 +76832,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -76897,7 +76897,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -76962,7 +76962,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -77084,7 +77084,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -77149,7 +77149,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -77214,7 +77214,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -77336,7 +77336,7 @@ class AiApi:
) -> AiResponse:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -77401,7 +77401,7 @@ class AiApi:
) -> ApiResponse[AiResponse]:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -77466,7 +77466,7 @@ class AiApi:
) -> RESTResponseType:
"""The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]).
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: every other migrated route (get-records, get-connections, …) carries BOTH a controller method and a ZAP handler — the exact dual-impl drift that silently NULLed customer router settings (the update-router-policy data-wipe). Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
The HTTP transport binding for the RESTful router-config nouns (/v1/ai/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/ai/org/settings[/list]). It dispatches IN-PROCESS through dispatchGateway — the SAME canonical ZAP gateway registry (zap_registry.go) that the MsgType 200 handler serves over the gateway transport. The native ZAP handler is the ONE and ONLY implementation of these routes; this is purely the api.hanzo.ai HTTP binding, so there is NO controller twin to drift from and the split-brain the router refactor removed stays removed. Why a bridge and not a twin controller method: one handler serves both transports, so the HTTP route and the ZAP message read and write router settings through the same code and cannot come to disagree about them. Routing these nouns through the ZAP handler over one adapter keeps a single source of truth. Identity is the request's own Bearer credential (Authorization header), which the native handlers resolve exactly as the gateway does — every caller (console, chat, app) already sends it. The dispatched handler returns a ZAP message whose status is field 0 and body is field 4 (BuildCloudResponse / BuildGatewayResponse layout); both are relayed verbatim. The route is mapped \"*\" (any verb) because the native handler is method-aware: /v1/ai/router/policy splits GET (read) vs PUT (write), /v1/ai/org/settings GET/PUT/DELETE, and returns 405 for a verb it does not own.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
+38 -21
View File
@@ -305,6 +305,7 @@ class BenchmarkApi:
provider: Annotated[Optional[StrictStr], Field(description="Provider filters to one lab or leaderboard — the way to read what a single source claims across every model it covers.")] = None,
source: Annotated[Optional[StrictStr], Field(description="Source filters to one citation, which is the finest grain there is: a source is what makes two claims about one model independent rather than a restatement of each other.")] = None,
protocol: Annotated[Optional[StrictStr], Field(description="Protocol filters by HOW a claim was scored, so provider cards can be read apart from third parties running their own harness.")] = None,
org: Annotated[Optional[StrictStr], Field(description="Org filters to the claims one org made; \"admin\" reads the platform's own. It narrows what the caller may already read and never widens it.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -318,9 +319,9 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> BenchmarkClaimsOut:
"""Lists the effective published claims: what the leaderboard will use for each (benchmark, model) after the seed, the import and any stored correction are layered.
"""Lists the effective claims the caller may read, each labelled with the org that made it and the user who recorded it.
Lists the effective published claims: what the leaderboard will use for each (benchmark, model) after the seed, the import and any stored correction are layered. It answers the operator's question — what does this arena currently believe someone else reported, and did we ship that or fix it. Effective values only. The history of a key lives in the append-only file and is not what this op is for; a list that returned every superseded row would make the common question the hard one.
Lists the effective claims the caller may read, each labelled with the org that made it and the user who recorded it. Anyone reads the public claims. A signed-in caller also reads its own org's private ones. No caller reads another org's private claims — a SuperAdmin acting in that org included, since acting in an org is not membership of it. Rows under org \"admin\" are the platform's own curated readings: the compiled seed and any correction a SuperAdmin wrote. Effective values only. The history of a key lives in the append-only file and is not what this op is for; a list that returned every superseded row would make the common question the hard one.
:param benchmark: Benchmark filters to one benchmark id. Empty returns every benchmark.
:type benchmark: str
@@ -332,6 +333,8 @@ class BenchmarkApi:
:type source: str
:param protocol: Protocol filters by HOW a claim was scored, so provider cards can be read apart from third parties running their own harness.
:type protocol: str
:param org: Org filters to the claims one org made; \"admin\" reads the platform's own. It narrows what the caller may already read and never widens it.
:type org: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -360,6 +363,7 @@ class BenchmarkApi:
provider=provider,
source=source,
protocol=protocol,
org=org,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -388,6 +392,7 @@ class BenchmarkApi:
provider: Annotated[Optional[StrictStr], Field(description="Provider filters to one lab or leaderboard — the way to read what a single source claims across every model it covers.")] = None,
source: Annotated[Optional[StrictStr], Field(description="Source filters to one citation, which is the finest grain there is: a source is what makes two claims about one model independent rather than a restatement of each other.")] = None,
protocol: Annotated[Optional[StrictStr], Field(description="Protocol filters by HOW a claim was scored, so provider cards can be read apart from third parties running their own harness.")] = None,
org: Annotated[Optional[StrictStr], Field(description="Org filters to the claims one org made; \"admin\" reads the platform's own. It narrows what the caller may already read and never widens it.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -401,9 +406,9 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[BenchmarkClaimsOut]:
"""Lists the effective published claims: what the leaderboard will use for each (benchmark, model) after the seed, the import and any stored correction are layered.
"""Lists the effective claims the caller may read, each labelled with the org that made it and the user who recorded it.
Lists the effective published claims: what the leaderboard will use for each (benchmark, model) after the seed, the import and any stored correction are layered. It answers the operator's question — what does this arena currently believe someone else reported, and did we ship that or fix it. Effective values only. The history of a key lives in the append-only file and is not what this op is for; a list that returned every superseded row would make the common question the hard one.
Lists the effective claims the caller may read, each labelled with the org that made it and the user who recorded it. Anyone reads the public claims. A signed-in caller also reads its own org's private ones. No caller reads another org's private claims — a SuperAdmin acting in that org included, since acting in an org is not membership of it. Rows under org \"admin\" are the platform's own curated readings: the compiled seed and any correction a SuperAdmin wrote. Effective values only. The history of a key lives in the append-only file and is not what this op is for; a list that returned every superseded row would make the common question the hard one.
:param benchmark: Benchmark filters to one benchmark id. Empty returns every benchmark.
:type benchmark: str
@@ -415,6 +420,8 @@ class BenchmarkApi:
:type source: str
:param protocol: Protocol filters by HOW a claim was scored, so provider cards can be read apart from third parties running their own harness.
:type protocol: str
:param org: Org filters to the claims one org made; \"admin\" reads the platform's own. It narrows what the caller may already read and never widens it.
:type org: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -443,6 +450,7 @@ class BenchmarkApi:
provider=provider,
source=source,
protocol=protocol,
org=org,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -471,6 +479,7 @@ class BenchmarkApi:
provider: Annotated[Optional[StrictStr], Field(description="Provider filters to one lab or leaderboard — the way to read what a single source claims across every model it covers.")] = None,
source: Annotated[Optional[StrictStr], Field(description="Source filters to one citation, which is the finest grain there is: a source is what makes two claims about one model independent rather than a restatement of each other.")] = None,
protocol: Annotated[Optional[StrictStr], Field(description="Protocol filters by HOW a claim was scored, so provider cards can be read apart from third parties running their own harness.")] = None,
org: Annotated[Optional[StrictStr], Field(description="Org filters to the claims one org made; \"admin\" reads the platform's own. It narrows what the caller may already read and never widens it.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -484,9 +493,9 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Lists the effective published claims: what the leaderboard will use for each (benchmark, model) after the seed, the import and any stored correction are layered.
"""Lists the effective claims the caller may read, each labelled with the org that made it and the user who recorded it.
Lists the effective published claims: what the leaderboard will use for each (benchmark, model) after the seed, the import and any stored correction are layered. It answers the operator's question — what does this arena currently believe someone else reported, and did we ship that or fix it. Effective values only. The history of a key lives in the append-only file and is not what this op is for; a list that returned every superseded row would make the common question the hard one.
Lists the effective claims the caller may read, each labelled with the org that made it and the user who recorded it. Anyone reads the public claims. A signed-in caller also reads its own org's private ones. No caller reads another org's private claims — a SuperAdmin acting in that org included, since acting in an org is not membership of it. Rows under org \"admin\" are the platform's own curated readings: the compiled seed and any correction a SuperAdmin wrote. Effective values only. The history of a key lives in the append-only file and is not what this op is for; a list that returned every superseded row would make the common question the hard one.
:param benchmark: Benchmark filters to one benchmark id. Empty returns every benchmark.
:type benchmark: str
@@ -498,6 +507,8 @@ class BenchmarkApi:
:type source: str
:param protocol: Protocol filters by HOW a claim was scored, so provider cards can be read apart from third parties running their own harness.
:type protocol: str
:param org: Org filters to the claims one org made; \"admin\" reads the platform's own. It narrows what the caller may already read and never widens it.
:type org: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
@@ -526,6 +537,7 @@ class BenchmarkApi:
provider=provider,
source=source,
protocol=protocol,
org=org,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
@@ -549,6 +561,7 @@ class BenchmarkApi:
provider,
source,
protocol,
org,
_request_auth,
_content_type,
_headers,
@@ -591,6 +604,10 @@ class BenchmarkApi:
_query_params.append(('Protocol', protocol))
if org is not None:
_query_params.append(('Org', org))
# process the header parameters
# process the form parameters
# process the body parameter
@@ -1227,7 +1244,7 @@ class BenchmarkApi:
) -> BenchmarkLeaderboard:
"""Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them.
Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows published null, a model with only a claim shows measured null, and gap exists only where both do. n is coverage and is not decoration: two measured numbers taken over different item counts are not comparable, so read the row's n before reading its accuracy.
Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows published null, a model with only a claim shows measured null, and gap exists only where both do. Published, Claims, Spread and Mean read the platform's own public claims (org \"admin\") and nothing else, whoever asks. Other orgs' claims are at /v1/benchmark/claims, labelled, and never on this board. n is coverage and is not decoration: two measured numbers taken over different item counts are not comparable, so read the row's n before reading its accuracy.
:param benchmark: Benchmark is the catalog id to read, defaulting to gpqa_diamond.
:type benchmark: str
@@ -1294,7 +1311,7 @@ class BenchmarkApi:
) -> ApiResponse[BenchmarkLeaderboard]:
"""Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them.
Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows published null, a model with only a claim shows measured null, and gap exists only where both do. n is coverage and is not decoration: two measured numbers taken over different item counts are not comparable, so read the row's n before reading its accuracy.
Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows published null, a model with only a claim shows measured null, and gap exists only where both do. Published, Claims, Spread and Mean read the platform's own public claims (org \"admin\") and nothing else, whoever asks. Other orgs' claims are at /v1/benchmark/claims, labelled, and never on this board. n is coverage and is not decoration: two measured numbers taken over different item counts are not comparable, so read the row's n before reading its accuracy.
:param benchmark: Benchmark is the catalog id to read, defaulting to gpqa_diamond.
:type benchmark: str
@@ -1361,7 +1378,7 @@ class BenchmarkApi:
) -> RESTResponseType:
"""Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them.
Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows published null, a model with only a claim shows measured null, and gap exists only where both do. n is coverage and is not decoration: two measured numbers taken over different item counts are not comparable, so read the row's n before reading its accuracy.
Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them. The gap is the point of the arena; provider-reported claims have run materially hot against one standardized harness. The two planes are NEVER blended, and that is the rule to read the rows by: a model we have measured but no vendor has claimed for shows published null, a model with only a claim shows measured null, and gap exists only where both do. Published, Claims, Spread and Mean read the platform's own public claims (org \"admin\") and nothing else, whoever asks. Other orgs' claims are at /v1/benchmark/claims, labelled, and never on this board. n is coverage and is not decoration: two measured numbers taken over different item counts are not comparable, so read the row's n before reading its accuracy.
:param benchmark: Benchmark is the catalog id to read, defaulting to gpqa_diamond.
:type benchmark: str
@@ -1736,9 +1753,9 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> BenchmarkPutClaimsOut:
"""Records published claims: one to correct a number, many to import a leaderboard.
"""Records claims for the caller's org: one to correct a number, many to import a leaderboard.
Records published claims: one to correct a number, many to import a leaderboard. Every row must carry a Source, because a claim without its citation is a number nobody can check — and an unattributed number in the published plane is indistinguishable from a measurement, which is the one confusion this whole surface is built to prevent. Writes are append-only, so this never destroys the value it replaces. A vendor restating a score leaves both rows on disk, which is how the restating itself becomes visible.
Records claims for the caller's org: one to correct a number, many to import a leaderboard. Any signed-in caller may write; a caller with no verified principal is refused 401. The org and the author are the verified caller's. Nothing in the body names either, and a body that tries is not read. Claims are private to that org unless visibility is \"public\". Writing as org \"admin\" curates the leaderboard, so it takes a SuperAdmin; anyone else acting there is refused 403, and the refusal is audited. Every row must carry a Source, because a claim without its citation is a number nobody can check, and a benchmark id from /catalog, because an unknown id would sit in the store invisible to every read. A row names its benchmark, model, provider and protocol in at most 128 characters each, cites a source of at most 2048 bytes, and scores a percentage from 0 to 100; a row outside that is rejected by number. A request carries at most 500 rows in at most 1 MiB (413 past either), and an org writes at most 2000 rows per UTC day (429 past that, and nothing from the request is written). The trail takes the call's intent, naming every row, BEFORE the first row lands; a trail that cannot take it answers 503 and nothing is written. A second record then names which rows were stored and which failed. Writes are append-only, so this never destroys the value it replaces. A vendor restating a score leaves both rows on disk, which is how the restating itself becomes visible.
:param benchmark_put_claims_in: (required)
:type benchmark_put_claims_in: BenchmarkPutClaimsIn
@@ -1803,9 +1820,9 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[BenchmarkPutClaimsOut]:
"""Records published claims: one to correct a number, many to import a leaderboard.
"""Records claims for the caller's org: one to correct a number, many to import a leaderboard.
Records published claims: one to correct a number, many to import a leaderboard. Every row must carry a Source, because a claim without its citation is a number nobody can check — and an unattributed number in the published plane is indistinguishable from a measurement, which is the one confusion this whole surface is built to prevent. Writes are append-only, so this never destroys the value it replaces. A vendor restating a score leaves both rows on disk, which is how the restating itself becomes visible.
Records claims for the caller's org: one to correct a number, many to import a leaderboard. Any signed-in caller may write; a caller with no verified principal is refused 401. The org and the author are the verified caller's. Nothing in the body names either, and a body that tries is not read. Claims are private to that org unless visibility is \"public\". Writing as org \"admin\" curates the leaderboard, so it takes a SuperAdmin; anyone else acting there is refused 403, and the refusal is audited. Every row must carry a Source, because a claim without its citation is a number nobody can check, and a benchmark id from /catalog, because an unknown id would sit in the store invisible to every read. A row names its benchmark, model, provider and protocol in at most 128 characters each, cites a source of at most 2048 bytes, and scores a percentage from 0 to 100; a row outside that is rejected by number. A request carries at most 500 rows in at most 1 MiB (413 past either), and an org writes at most 2000 rows per UTC day (429 past that, and nothing from the request is written). The trail takes the call's intent, naming every row, BEFORE the first row lands; a trail that cannot take it answers 503 and nothing is written. A second record then names which rows were stored and which failed. Writes are append-only, so this never destroys the value it replaces. A vendor restating a score leaves both rows on disk, which is how the restating itself becomes visible.
:param benchmark_put_claims_in: (required)
:type benchmark_put_claims_in: BenchmarkPutClaimsIn
@@ -1870,9 +1887,9 @@ class BenchmarkApi:
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Records published claims: one to correct a number, many to import a leaderboard.
"""Records claims for the caller's org: one to correct a number, many to import a leaderboard.
Records published claims: one to correct a number, many to import a leaderboard. Every row must carry a Source, because a claim without its citation is a number nobody can check — and an unattributed number in the published plane is indistinguishable from a measurement, which is the one confusion this whole surface is built to prevent. Writes are append-only, so this never destroys the value it replaces. A vendor restating a score leaves both rows on disk, which is how the restating itself becomes visible.
Records claims for the caller's org: one to correct a number, many to import a leaderboard. Any signed-in caller may write; a caller with no verified principal is refused 401. The org and the author are the verified caller's. Nothing in the body names either, and a body that tries is not read. Claims are private to that org unless visibility is \"public\". Writing as org \"admin\" curates the leaderboard, so it takes a SuperAdmin; anyone else acting there is refused 403, and the refusal is audited. Every row must carry a Source, because a claim without its citation is a number nobody can check, and a benchmark id from /catalog, because an unknown id would sit in the store invisible to every read. A row names its benchmark, model, provider and protocol in at most 128 characters each, cites a source of at most 2048 bytes, and scores a percentage from 0 to 100; a row outside that is rejected by number. A request carries at most 500 rows in at most 1 MiB (413 past either), and an org writes at most 2000 rows per UTC day (429 past that, and nothing from the request is written). The trail takes the call's intent, naming every row, BEFORE the first row lands; a trail that cannot take it answers 503 and nothing is written. A second record then names which rows were stored and which failed. Writes are append-only, so this never destroys the value it replaces. A vendor restating a score leaves both rows on disk, which is how the restating itself becomes visible.
:param benchmark_put_claims_in: (required)
:type benchmark_put_claims_in: BenchmarkPutClaimsIn
@@ -2013,7 +2030,7 @@ class BenchmarkApi:
) -> BenchmarkPresetAccepted:
"""Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as.
Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Defaults fill the shape rather than refusing it: an omitted rank becomes the arms in declared order and a panel below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Any signed-in caller may compose; a caller with no verified principal is refused 401. Owner is the caller's verified org whatever the body says, so a blend is never checked or echoed as another org's. Defaults fill the shape rather than refusing it: an omitted rank becomes the arms in declared order and a panel below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
:param benchmark_preset: (required)
:type benchmark_preset: BenchmarkPreset
@@ -2080,7 +2097,7 @@ class BenchmarkApi:
) -> ApiResponse[BenchmarkPresetAccepted]:
"""Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as.
Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Defaults fill the shape rather than refusing it: an omitted rank becomes the arms in declared order and a panel below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Any signed-in caller may compose; a caller with no verified principal is refused 401. Owner is the caller's verified org whatever the body says, so a blend is never checked or echoed as another org's. Defaults fill the shape rather than refusing it: an omitted rank becomes the arms in declared order and a panel below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
:param benchmark_preset: (required)
:type benchmark_preset: BenchmarkPreset
@@ -2147,7 +2164,7 @@ class BenchmarkApi:
) -> RESTResponseType:
"""Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as.
Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Defaults fill the shape rather than refusing it: an omitted rank becomes the arms in declared order and a panel below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as. It VALIDATES AND ECHOES: the definition is not persisted yet, so a preset accepted here is not one the model layer will resolve. Treat the response as a check on the blend, not a promise to serve it. Any signed-in caller may compose; a caller with no verified principal is refused 401. Owner is the caller's verified org whatever the body says, so a blend is never checked or echoed as another org's. Defaults fill the shape rather than refusing it: an omitted rank becomes the arms in declared order and a panel below 1 becomes 1. The one real invariant is that rank may only name arms the blend declares — the same rule the model catalog enforces — and a rank naming anything else is a 422 listing exactly which entries were undeclared. A blend with no name or no arms is a 400.
:param benchmark_preset: (required)
:type benchmark_preset: BenchmarkPreset
@@ -2288,7 +2305,7 @@ class BenchmarkApi:
) -> BenchmarkAdmission:
"""Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt.
Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt. It is an ADMISSION, not a result: the work is done by the harness afterwards and the numbers appear on the leaderboard as it completes them. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither model nor endpoint is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt. It is an ADMISSION, not a result: the work is done by the harness afterwards and the numbers appear on the leaderboard as it completes them. Any signed-in caller may ask; a caller with no verified principal is refused 401. The receipt names the caller's verified org and user — nothing in the body names either — and stores nothing. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither model nor endpoint is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
:param benchmark_suite: (required)
:type benchmark_suite: BenchmarkSuite
@@ -2355,7 +2372,7 @@ class BenchmarkApi:
) -> ApiResponse[BenchmarkAdmission]:
"""Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt.
Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt. It is an ADMISSION, not a result: the work is done by the harness afterwards and the numbers appear on the leaderboard as it completes them. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither model nor endpoint is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt. It is an ADMISSION, not a result: the work is done by the harness afterwards and the numbers appear on the leaderboard as it completes them. Any signed-in caller may ask; a caller with no verified principal is refused 401. The receipt names the caller's verified org and user — nothing in the body names either — and stores nothing. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither model nor endpoint is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
:param benchmark_suite: (required)
:type benchmark_suite: BenchmarkSuite
@@ -2422,7 +2439,7 @@ class BenchmarkApi:
) -> RESTResponseType:
"""Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt.
Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt. It is an ADMISSION, not a result: the work is done by the harness afterwards and the numbers appear on the leaderboard as it completes them. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither model nor endpoint is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt. It is an ADMISSION, not a result: the work is done by the harness afterwards and the numbers appear on the leaderboard as it completes them. Any signed-in caller may ask; a caller with no verified principal is refused 401. The receipt names the caller's verified org and user — nothing in the body names either — and stores nothing. Cost is bounded by the store rather than by a quota: attempts are append-only and keyed by (benchmark, item, model), so an (item, model) pair already attempted is skipped instead of re-spent, and re-queuing the same run is close to free. Validation is up front and total — a request with neither model nor endpoint is a 400, one with no benchmarks is a 400, and any benchmark id outside the catalog is a 422 naming exactly which ids were unknown, so a typo never silently queues a partial run.
:param benchmark_suite: (required)
:type benchmark_suite: BenchmarkSuite
+3 -3
View File
@@ -2501,7 +2501,7 @@ class BillingApi:
) -> None:
"""Prepaid credit the caller's org can still spend
Answers the spendable prepaid balance of the wallet this caller bills from — the same wallet the AI prepaid gate reads before admitting a paid request, the edge meter debits, and a top-up credits. The wallet is an ADDRESS, not an org: `account` echoes the key resolved within the ledger — the org's shared pool for a tenant org, a personal account for a member of the shared signup org. The echo is the point. A browser could only GUESS its own payer by decoding its own token, and a guess that disagrees with the server is how money lands in an account the gate never reads. `balance`, `holds` and `available` are whole USD cents, ROUNDED from the ledger's exact 18-decimal value. On the co-resident ledger `holds` is 0 and `available` equals `balance`: the gate's reservations live in its own pod and are never posted, so the settled balance IS the spendable one. The ledger is the caller's own org, taken from the VALIDATED IAM owner claim and never from a client header. No validated principal is 401. A balance that cannot be READ is 502, never 0: unknown is not broke.
Answers the spendable prepaid balance of the wallet this caller bills from — the same wallet the AI prepaid gate reads before admitting a paid request, the edge meter debits, and a top-up credits. The wallet is an ADDRESS, not an org: `account` echoes the key resolved within the ledger — the org's shared pool for a tenant org, a personal account for a member of the shared signup org. The echo is the point. A browser could only GUESS its own payer by decoding its own token, and a guess that disagrees with the server is how money lands in an account the gate never reads. `balance`, `holds` and `available` are whole USD cents, ROUNDED from the ledger's exact 18-decimal value. On the co-resident ledger `holds` is 0 and `available` equals `balance`: the gate's reservations live in its own pod and are never posted, so the settled balance IS the spendable one. `cash` and `credit` say where `available` came from, and add up to it. `cash` is money the customer paid — a settled card payment or a recorded wire — and it is the only money that buys paid-model work. `credit` is money Hanzo minted: signup and promotional credit, admin grants. Every debit draws cash first. The ledger is the caller's own org, taken from the VALIDATED IAM owner claim and never from a client header. No validated principal is 401. A balance that cannot be READ is 502, never 0: unknown is not broke.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2563,7 +2563,7 @@ class BillingApi:
) -> ApiResponse[None]:
"""Prepaid credit the caller's org can still spend
Answers the spendable prepaid balance of the wallet this caller bills from — the same wallet the AI prepaid gate reads before admitting a paid request, the edge meter debits, and a top-up credits. The wallet is an ADDRESS, not an org: `account` echoes the key resolved within the ledger — the org's shared pool for a tenant org, a personal account for a member of the shared signup org. The echo is the point. A browser could only GUESS its own payer by decoding its own token, and a guess that disagrees with the server is how money lands in an account the gate never reads. `balance`, `holds` and `available` are whole USD cents, ROUNDED from the ledger's exact 18-decimal value. On the co-resident ledger `holds` is 0 and `available` equals `balance`: the gate's reservations live in its own pod and are never posted, so the settled balance IS the spendable one. The ledger is the caller's own org, taken from the VALIDATED IAM owner claim and never from a client header. No validated principal is 401. A balance that cannot be READ is 502, never 0: unknown is not broke.
Answers the spendable prepaid balance of the wallet this caller bills from — the same wallet the AI prepaid gate reads before admitting a paid request, the edge meter debits, and a top-up credits. The wallet is an ADDRESS, not an org: `account` echoes the key resolved within the ledger — the org's shared pool for a tenant org, a personal account for a member of the shared signup org. The echo is the point. A browser could only GUESS its own payer by decoding its own token, and a guess that disagrees with the server is how money lands in an account the gate never reads. `balance`, `holds` and `available` are whole USD cents, ROUNDED from the ledger's exact 18-decimal value. On the co-resident ledger `holds` is 0 and `available` equals `balance`: the gate's reservations live in its own pod and are never posted, so the settled balance IS the spendable one. `cash` and `credit` say where `available` came from, and add up to it. `cash` is money the customer paid — a settled card payment or a recorded wire — and it is the only money that buys paid-model work. `credit` is money Hanzo minted: signup and promotional credit, admin grants. Every debit draws cash first. The ledger is the caller's own org, taken from the VALIDATED IAM owner claim and never from a client header. No validated principal is 401. A balance that cannot be READ is 502, never 0: unknown is not broke.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -2625,7 +2625,7 @@ class BillingApi:
) -> RESTResponseType:
"""Prepaid credit the caller's org can still spend
Answers the spendable prepaid balance of the wallet this caller bills from — the same wallet the AI prepaid gate reads before admitting a paid request, the edge meter debits, and a top-up credits. The wallet is an ADDRESS, not an org: `account` echoes the key resolved within the ledger — the org's shared pool for a tenant org, a personal account for a member of the shared signup org. The echo is the point. A browser could only GUESS its own payer by decoding its own token, and a guess that disagrees with the server is how money lands in an account the gate never reads. `balance`, `holds` and `available` are whole USD cents, ROUNDED from the ledger's exact 18-decimal value. On the co-resident ledger `holds` is 0 and `available` equals `balance`: the gate's reservations live in its own pod and are never posted, so the settled balance IS the spendable one. The ledger is the caller's own org, taken from the VALIDATED IAM owner claim and never from a client header. No validated principal is 401. A balance that cannot be READ is 502, never 0: unknown is not broke.
Answers the spendable prepaid balance of the wallet this caller bills from — the same wallet the AI prepaid gate reads before admitting a paid request, the edge meter debits, and a top-up credits. The wallet is an ADDRESS, not an org: `account` echoes the key resolved within the ledger — the org's shared pool for a tenant org, a personal account for a member of the shared signup org. The echo is the point. A browser could only GUESS its own payer by decoding its own token, and a guess that disagrees with the server is how money lands in an account the gate never reads. `balance`, `holds` and `available` are whole USD cents, ROUNDED from the ledger's exact 18-decimal value. On the co-resident ledger `holds` is 0 and `available` equals `balance`: the gate's reservations live in its own pod and are never posted, so the settled balance IS the spendable one. `cash` and `credit` say where `available` came from, and add up to it. `cash` is money the customer paid — a settled card payment or a recorded wire — and it is the only money that buys paid-model work. `credit` is money Hanzo minted: signup and promotional credit, admin grants. Every debit draws cash first. The ledger is the caller's own org, taken from the VALIDATED IAM owner claim and never from a client header. No validated principal is 401. A balance that cannot be READ is 502, never 0: unknown is not broke.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
File diff suppressed because it is too large Load Diff
-276
View File
@@ -21,7 +21,6 @@ from typing import Optional, Tuple, Union
from typing_extensions import Annotated
from hanzoai.cloud.models.company_advance_in import CompanyAdvanceIn
from hanzoai.cloud.models.company_begin_in import CompanyBeginIn
from hanzoai.cloud.models.company_decision_in import CompanyDecisionIn
from hanzoai.cloud.models.company_ein import CompanyEIN
from hanzoai.cloud.models.company_ein_in import CompanyEinIn
from hanzoai.cloud.models.company_esign_complete_in import CompanyEsignCompleteIn
@@ -4882,281 +4881,6 @@ class CompanyApi:
@validate_call
def post_company_kyc_decision(
self,
company_decision_in: CompanyDecisionIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> CompanyFormationView:
"""DecideKYC records a privileged reviewer's MANUAL decision on a founder's KYC — the human-in-the-loop path, and the ONLY route to a pass when no real provider is wired.
DecideKYC records a privileged reviewer's MANUAL decision on a founder's KYC — the human-in-the-loop path, and the ONLY route to a pass when no real provider is wired. It produces a DISTINCT reviewer_confirmed, never a provider \"verified\". Because Hanzo forms the entity and carries the formation KYC/AML obligation, the reviewer is a HANZO platform reviewer (SuperAdmin), and the decision is ATTRIBUTED to them.
:param company_decision_in: (required)
:type company_decision_in: CompanyDecisionIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_company_kyc_decision_serialize(
company_decision_in=company_decision_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "CompanyFormationView",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_company_kyc_decision_with_http_info(
self,
company_decision_in: CompanyDecisionIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[CompanyFormationView]:
"""DecideKYC records a privileged reviewer's MANUAL decision on a founder's KYC — the human-in-the-loop path, and the ONLY route to a pass when no real provider is wired.
DecideKYC records a privileged reviewer's MANUAL decision on a founder's KYC — the human-in-the-loop path, and the ONLY route to a pass when no real provider is wired. It produces a DISTINCT reviewer_confirmed, never a provider \"verified\". Because Hanzo forms the entity and carries the formation KYC/AML obligation, the reviewer is a HANZO platform reviewer (SuperAdmin), and the decision is ATTRIBUTED to them.
:param company_decision_in: (required)
:type company_decision_in: CompanyDecisionIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_company_kyc_decision_serialize(
company_decision_in=company_decision_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "CompanyFormationView",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_company_kyc_decision_without_preload_content(
self,
company_decision_in: CompanyDecisionIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""DecideKYC records a privileged reviewer's MANUAL decision on a founder's KYC — the human-in-the-loop path, and the ONLY route to a pass when no real provider is wired.
DecideKYC records a privileged reviewer's MANUAL decision on a founder's KYC — the human-in-the-loop path, and the ONLY route to a pass when no real provider is wired. It produces a DISTINCT reviewer_confirmed, never a provider \"verified\". Because Hanzo forms the entity and carries the formation KYC/AML obligation, the reviewer is a HANZO platform reviewer (SuperAdmin), and the decision is ATTRIBUTED to them.
:param company_decision_in: (required)
:type company_decision_in: CompanyDecisionIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_company_kyc_decision_serialize(
company_decision_in=company_decision_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "CompanyFormationView",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_company_kyc_decision_serialize(
self,
company_decision_in,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if company_decision_in is not None:
_body_params = company_decision_in
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/company/kyc/decision',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_company_kyc_refresh(
self,
File diff suppressed because it is too large Load Diff
+18 -18
View File
@@ -46,7 +46,7 @@ class DestinationApi:
@validate_call
def delete_destination_by_platform(
self,
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics.")],
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -64,7 +64,7 @@ class DestinationApi:
Forgets a destination for the caller's org: every credential held in KMS, then the stored config. Idempotent, and it requires org admin.
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics. (required)
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights. (required)
:type platform: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -113,7 +113,7 @@ class DestinationApi:
@validate_call
def delete_destination_by_platform_with_http_info(
self,
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics.")],
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -131,7 +131,7 @@ class DestinationApi:
Forgets a destination for the caller's org: every credential held in KMS, then the stored config. Idempotent, and it requires org admin.
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics. (required)
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights. (required)
:type platform: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -180,7 +180,7 @@ class DestinationApi:
@validate_call
def delete_destination_by_platform_without_preload_content(
self,
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics.")],
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -198,7 +198,7 @@ class DestinationApi:
Forgets a destination for the caller's org: every credential held in KMS, then the stored config. Idempotent, and it requires org admin.
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics. (required)
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights. (required)
:type platform: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -555,7 +555,7 @@ class DestinationApi:
@validate_call
def get_destination_by_platform(
self,
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics.")],
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -573,7 +573,7 @@ class DestinationApi:
Reports one destination's card for the caller's org — its config fields, its connection state, and whether a credential resolves right now. A platform this deployment does not carry is not found.
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics. (required)
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights. (required)
:type platform: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -622,7 +622,7 @@ class DestinationApi:
@validate_call
def get_destination_by_platform_with_http_info(
self,
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics.")],
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -640,7 +640,7 @@ class DestinationApi:
Reports one destination's card for the caller's org — its config fields, its connection state, and whether a credential resolves right now. A platform this deployment does not carry is not found.
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics. (required)
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights. (required)
:type platform: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -689,7 +689,7 @@ class DestinationApi:
@validate_call
def get_destination_by_platform_without_preload_content(
self,
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics.")],
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -707,7 +707,7 @@ class DestinationApi:
Reports one destination's card for the caller's org — its config fields, its connection state, and whether a credential resolves right now. A platform this deployment does not carry is not found.
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics. (required)
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights. (required)
:type platform: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1106,7 +1106,7 @@ class DestinationApi:
@validate_call
def post_destination_by_platform_test(
self,
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics.")],
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1124,7 +1124,7 @@ class DestinationApi:
Sends ONE synthetic conversion through the connected destination end to end and reports what the platform said. Where the platform can check one without recording it, it is a lead and nothing is kept: GA4 answers from its validation server, Google Ads validates without importing, and Meta files it under the connection's Test Event Code (and is refused without one). Anywhere else it is a page view. A send the platform refuses is reported as data — {\"ok\": false, \"error\": …} at 200 — so the console shows the platform's own words rather than an error about Hanzo. It requires org admin.
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics. (required)
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights. (required)
:type platform: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1173,7 +1173,7 @@ class DestinationApi:
@validate_call
def post_destination_by_platform_test_with_http_info(
self,
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics.")],
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1191,7 +1191,7 @@ class DestinationApi:
Sends ONE synthetic conversion through the connected destination end to end and reports what the platform said. Where the platform can check one without recording it, it is a lead and nothing is kept: GA4 answers from its validation server, Google Ads validates without importing, and Meta files it under the connection's Test Event Code (and is refused without one). Anywhere else it is a page view. A send the platform refuses is reported as data — {\"ok\": false, \"error\": …} at 200 — so the console shows the platform's own words rather than an error about Hanzo. It requires org admin.
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics. (required)
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights. (required)
:type platform: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1240,7 +1240,7 @@ class DestinationApi:
@validate_call
def post_destination_by_platform_test_without_preload_content(
self,
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics.")],
platform: Annotated[StrictStr, Field(description="Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
@@ -1258,7 +1258,7 @@ class DestinationApi:
Sends ONE synthetic conversion through the connected destination end to end and reports what the platform said. Where the platform can check one without recording it, it is a lead and nothing is kept: GA4 answers from its validation server, Google Ads validates without importing, and Meta files it under the connection's Test Event Code (and is refused without one). Anywhere else it is a page view. A send the platform refuses is reported as data — {\"ok\": false, \"error\": …} at 200 — so the console shows the platform's own words rather than an error about Hanzo. It requires org admin.
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights | analytics. (required)
:param platform: Platform is the destination to act on, from the path: ga4 | meta | tiktok | linkedin | x | reddit | insights. (required)
:type platform: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
+1 -525
View File
@@ -17,10 +17,8 @@ from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated
from pydantic import Field, StrictStr
from typing import Any, Dict, List, Optional
from typing import Any, Optional
from typing_extensions import Annotated
from hanzoai.cloud.models.engine_engine_replica import EngineEngineReplica
from hanzoai.cloud.models.engine_engine_replica_update import EngineEngineReplicaUpdate
from hanzoai.cloud.models.engine_engine_status import EngineEngineStatus
from hanzoai.cloud.api_client import ApiClient, RequestSerialized
@@ -552,253 +550,6 @@ class EngineApi:
@validate_call
def engine_replicas(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> Dict[str, List[EngineEngineReplica]]:
"""Read shared AI worker placement and health (SuperAdmin)
Reads the private native router's configured model pools, worker health, concurrency, role preferences and observed time to first byte. This shared infrastructure inventory is restricted to platform SuperAdmins.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._engine_replicas_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Dict[str, List[EngineEngineReplica]]",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def engine_replicas_with_http_info(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[Dict[str, List[EngineEngineReplica]]]:
"""Read shared AI worker placement and health (SuperAdmin)
Reads the private native router's configured model pools, worker health, concurrency, role preferences and observed time to first byte. This shared infrastructure inventory is restricted to platform SuperAdmins.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._engine_replicas_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Dict[str, List[EngineEngineReplica]]",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def engine_replicas_without_preload_content(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Read shared AI worker placement and health (SuperAdmin)
Reads the private native router's configured model pools, worker health, concurrency, role preferences and observed time to first byte. This shared infrastructure inventory is restricted to platform SuperAdmins.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._engine_replicas_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Dict[str, List[EngineEngineReplica]]",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _engine_replicas_serialize(
self,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='GET',
resource_path='/v1/engine/replicas',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def engine_status(
self,
@@ -1291,278 +1042,3 @@ class EngineApi:
)
@validate_call
def engine_update_replica(
self,
engine_engine_replica_update: EngineEngineReplicaUpdate,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> Dict[str, List[EngineEngineReplica]]:
"""Save shared AI worker capacity and role preferences (SuperAdmin)
Saves capacity, weight and preferred agent roles in the native router's pool file and applies them without dropping running streams or pins. Only platform SuperAdmins can retune shared workers. The Rust runtime owns validation, durable storage and activation; cloud only carries the operation.
:param engine_engine_replica_update: (required)
:type engine_engine_replica_update: EngineEngineReplicaUpdate
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._engine_update_replica_serialize(
engine_engine_replica_update=engine_engine_replica_update,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Dict[str, List[EngineEngineReplica]]",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def engine_update_replica_with_http_info(
self,
engine_engine_replica_update: EngineEngineReplicaUpdate,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[Dict[str, List[EngineEngineReplica]]]:
"""Save shared AI worker capacity and role preferences (SuperAdmin)
Saves capacity, weight and preferred agent roles in the native router's pool file and applies them without dropping running streams or pins. Only platform SuperAdmins can retune shared workers. The Rust runtime owns validation, durable storage and activation; cloud only carries the operation.
:param engine_engine_replica_update: (required)
:type engine_engine_replica_update: EngineEngineReplicaUpdate
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._engine_update_replica_serialize(
engine_engine_replica_update=engine_engine_replica_update,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Dict[str, List[EngineEngineReplica]]",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def engine_update_replica_without_preload_content(
self,
engine_engine_replica_update: EngineEngineReplicaUpdate,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Save shared AI worker capacity and role preferences (SuperAdmin)
Saves capacity, weight and preferred agent roles in the native router's pool file and applies them without dropping running streams or pins. Only platform SuperAdmins can retune shared workers. The Rust runtime owns validation, durable storage and activation; cloud only carries the operation.
:param engine_engine_replica_update: (required)
:type engine_engine_replica_update: EngineEngineReplicaUpdate
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._engine_update_replica_serialize(
engine_engine_replica_update=engine_engine_replica_update,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "Dict[str, List[EngineEngineReplica]]",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _engine_update_replica_serialize(
self,
engine_engine_replica_update,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if engine_engine_replica_update is not None:
_body_params = engine_engine_replica_update
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='PUT',
resource_path='/v1/engine/replicas',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
+3 -3
View File
@@ -57,7 +57,7 @@ class EntitlementApi:
) -> EntitlementProjectionView:
"""Reports which console apps the CALLER's org may open, and the plan slug that decides it.
Reports which console apps the CALLER's org may open, and the plan slug that decides it. It is the READ side of the unified paywall: the org's plan tier resolved from commerce, which is a different authority from the enablement store behind GET /v1/entitlement/orgs/{org} (that one is the org's own on/off intent). It fails SAFE-TO-LOCKED, never 500: an unvalidated principal is a 403, but a commerce outage reports every app locked at 200 rather than breaking the shell. The ENFORCEMENT path still fails open, so functionality survives the same outage even while the UI conservatively shows locked.
Reports which console apps the CALLER's org may open, and the plan slug that decides it. It is the READ side of the unified paywall: the org's plan tier resolved from commerce, which is a different authority from the enablement store behind GET /v1/entitlement/orgs/{org} (that one is the org's own on/off intent). It never answers 500: an unvalidated principal is a 403, and an app whose plan cannot be confirmed is reported locked at 200, so the shell always renders. The paywall applies the same rule when it enforces: access follows a confirmed standing.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -120,7 +120,7 @@ class EntitlementApi:
) -> ApiResponse[EntitlementProjectionView]:
"""Reports which console apps the CALLER's org may open, and the plan slug that decides it.
Reports which console apps the CALLER's org may open, and the plan slug that decides it. It is the READ side of the unified paywall: the org's plan tier resolved from commerce, which is a different authority from the enablement store behind GET /v1/entitlement/orgs/{org} (that one is the org's own on/off intent). It fails SAFE-TO-LOCKED, never 500: an unvalidated principal is a 403, but a commerce outage reports every app locked at 200 rather than breaking the shell. The ENFORCEMENT path still fails open, so functionality survives the same outage even while the UI conservatively shows locked.
Reports which console apps the CALLER's org may open, and the plan slug that decides it. It is the READ side of the unified paywall: the org's plan tier resolved from commerce, which is a different authority from the enablement store behind GET /v1/entitlement/orgs/{org} (that one is the org's own on/off intent). It never answers 500: an unvalidated principal is a 403, and an app whose plan cannot be confirmed is reported locked at 200, so the shell always renders. The paywall applies the same rule when it enforces: access follows a confirmed standing.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -183,7 +183,7 @@ class EntitlementApi:
) -> RESTResponseType:
"""Reports which console apps the CALLER's org may open, and the plan slug that decides it.
Reports which console apps the CALLER's org may open, and the plan slug that decides it. It is the READ side of the unified paywall: the org's plan tier resolved from commerce, which is a different authority from the enablement store behind GET /v1/entitlement/orgs/{org} (that one is the org's own on/off intent). It fails SAFE-TO-LOCKED, never 500: an unvalidated principal is a 403, but a commerce outage reports every app locked at 200 rather than breaking the shell. The ENFORCEMENT path still fails open, so functionality survives the same outage even while the UI conservatively shows locked.
Reports which console apps the CALLER's org may open, and the plan slug that decides it. It is the READ side of the unified paywall: the org's plan tier resolved from commerce, which is a different authority from the enablement store behind GET /v1/entitlement/orgs/{org} (that one is the org's own on/off intent). It never answers 500: an unvalidated principal is a 403, and an app whose plan cannot be confirmed is reported locked at 200, so the shell always renders. The paywall applies the same rule when it enforces: access follows a confirmed standing.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
+264 -577
View File
@@ -665,7 +665,7 @@ class EventApi:
) -> EventHealthReport:
"""Reports whether the event plane can take a write and the warehouse can answer a read.
Reports whether the event plane can take a write and the warehouse can answer a read. It reports the analytics subsystem's own liveness in BOTH directions: plane is the event plane it WRITES (the bus and the JetStream stream every accepted event is published to, both named in the report), and datastore is the warehouse it READS, with each read lens's table reported as it is provisioned (the LLM usage ledger and the product-event table). EITHER ONE DOWN IS A 503, and the report says WHICH — they are probed independently and never collapse into a single bit. This endpoint used to report the read half only, and answered 200/ok while every POST /v1/event failed on a stream that could not bind: a total ingest outage behind a green probe. A readiness gate here now gates on the write path too. plane.ready IS A REAL PROBE and walks the ingest path itself — the same connection and the same stream a publish uses — so it cannot answer ready while a publish would 503. plane.reason carries the plane's own error text when it is false. datastore IS NOT PROBED WITH A QUERY. It is the state of the process's own shared client — established, and not since closed — so a warehouse accepting connections and failing reads still reports true. Degraded CARRIES the report (status, the failing half, reason) as its body rather than an error envelope, so a gate reads the cause off the same object it got at 200. A MISSING LENS TABLE IS NOT A FAILURE and never moves the status: a lens reported available:false answers honest-empty rather than erroring, so a fresh deployment whose collector has not emitted yet is legitimately 200 with the product-event lens unavailable. The lens block is reported whenever the warehouse is REACHABLE — including on a report degraded by the plane, where the tables genuinely were probed — and is absent only when the warehouse is not, having nothing to say about tables it could not reach. Unauthenticated on purpose — liveness has to be probe-able — and it reads NO tenant data: table existence and stream presence only, never a row and never an event.
Reports whether the event plane can take a write and the warehouse can answer a read. It reports the analytics subsystem's own liveness in BOTH directions: plane is the event plane it WRITES (the bus and the JetStream stream every accepted event is published to, both named in the report), and datastore is the warehouse it READS, with each read lens's table reported as it is provisioned (the LLM usage ledger and the product-event table). EITHER ONE DOWN IS A 503, and the report says WHICH — they are probed independently and never collapse into a single bit. A readiness gate on this endpoint therefore gates on the write path as well as the read path: it answers ready only when POST /v1/event can publish. plane.ready IS A REAL PROBE and walks the ingest path itself — the same connection and the same stream a publish uses — so it cannot answer ready while a publish would 503. plane.reason carries the plane's own error text when it is false. datastore IS NOT PROBED WITH A QUERY. It is the state of the process's own shared client — established, and not since closed — so a warehouse accepting connections and failing reads still reports true. Degraded CARRIES the report (status, the failing half, reason) as its body rather than an error envelope, so a gate reads the cause off the same object it got at 200. A MISSING LENS TABLE IS NOT A FAILURE and never moves the status: a lens reported available:false answers honest-empty rather than erroring, so a fresh deployment whose collector has not emitted yet is legitimately 200 with the product-event lens unavailable. The lens block is reported whenever the warehouse is REACHABLE — including on a report degraded by the plane, where the tables genuinely were probed — and is absent only when the warehouse is not, having nothing to say about tables it could not reach. Unauthenticated on purpose — liveness has to be probe-able — and it reads NO tenant data: table existence and stream presence only, never a row and never an event.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -729,7 +729,7 @@ class EventApi:
) -> ApiResponse[EventHealthReport]:
"""Reports whether the event plane can take a write and the warehouse can answer a read.
Reports whether the event plane can take a write and the warehouse can answer a read. It reports the analytics subsystem's own liveness in BOTH directions: plane is the event plane it WRITES (the bus and the JetStream stream every accepted event is published to, both named in the report), and datastore is the warehouse it READS, with each read lens's table reported as it is provisioned (the LLM usage ledger and the product-event table). EITHER ONE DOWN IS A 503, and the report says WHICH — they are probed independently and never collapse into a single bit. This endpoint used to report the read half only, and answered 200/ok while every POST /v1/event failed on a stream that could not bind: a total ingest outage behind a green probe. A readiness gate here now gates on the write path too. plane.ready IS A REAL PROBE and walks the ingest path itself — the same connection and the same stream a publish uses — so it cannot answer ready while a publish would 503. plane.reason carries the plane's own error text when it is false. datastore IS NOT PROBED WITH A QUERY. It is the state of the process's own shared client — established, and not since closed — so a warehouse accepting connections and failing reads still reports true. Degraded CARRIES the report (status, the failing half, reason) as its body rather than an error envelope, so a gate reads the cause off the same object it got at 200. A MISSING LENS TABLE IS NOT A FAILURE and never moves the status: a lens reported available:false answers honest-empty rather than erroring, so a fresh deployment whose collector has not emitted yet is legitimately 200 with the product-event lens unavailable. The lens block is reported whenever the warehouse is REACHABLE — including on a report degraded by the plane, where the tables genuinely were probed — and is absent only when the warehouse is not, having nothing to say about tables it could not reach. Unauthenticated on purpose — liveness has to be probe-able — and it reads NO tenant data: table existence and stream presence only, never a row and never an event.
Reports whether the event plane can take a write and the warehouse can answer a read. It reports the analytics subsystem's own liveness in BOTH directions: plane is the event plane it WRITES (the bus and the JetStream stream every accepted event is published to, both named in the report), and datastore is the warehouse it READS, with each read lens's table reported as it is provisioned (the LLM usage ledger and the product-event table). EITHER ONE DOWN IS A 503, and the report says WHICH — they are probed independently and never collapse into a single bit. A readiness gate on this endpoint therefore gates on the write path as well as the read path: it answers ready only when POST /v1/event can publish. plane.ready IS A REAL PROBE and walks the ingest path itself — the same connection and the same stream a publish uses — so it cannot answer ready while a publish would 503. plane.reason carries the plane's own error text when it is false. datastore IS NOT PROBED WITH A QUERY. It is the state of the process's own shared client — established, and not since closed — so a warehouse accepting connections and failing reads still reports true. Degraded CARRIES the report (status, the failing half, reason) as its body rather than an error envelope, so a gate reads the cause off the same object it got at 200. A MISSING LENS TABLE IS NOT A FAILURE and never moves the status: a lens reported available:false answers honest-empty rather than erroring, so a fresh deployment whose collector has not emitted yet is legitimately 200 with the product-event lens unavailable. The lens block is reported whenever the warehouse is REACHABLE — including on a report degraded by the plane, where the tables genuinely were probed — and is absent only when the warehouse is not, having nothing to say about tables it could not reach. Unauthenticated on purpose — liveness has to be probe-able — and it reads NO tenant data: table existence and stream presence only, never a row and never an event.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -793,7 +793,7 @@ class EventApi:
) -> RESTResponseType:
"""Reports whether the event plane can take a write and the warehouse can answer a read.
Reports whether the event plane can take a write and the warehouse can answer a read. It reports the analytics subsystem's own liveness in BOTH directions: plane is the event plane it WRITES (the bus and the JetStream stream every accepted event is published to, both named in the report), and datastore is the warehouse it READS, with each read lens's table reported as it is provisioned (the LLM usage ledger and the product-event table). EITHER ONE DOWN IS A 503, and the report says WHICH — they are probed independently and never collapse into a single bit. This endpoint used to report the read half only, and answered 200/ok while every POST /v1/event failed on a stream that could not bind: a total ingest outage behind a green probe. A readiness gate here now gates on the write path too. plane.ready IS A REAL PROBE and walks the ingest path itself — the same connection and the same stream a publish uses — so it cannot answer ready while a publish would 503. plane.reason carries the plane's own error text when it is false. datastore IS NOT PROBED WITH A QUERY. It is the state of the process's own shared client — established, and not since closed — so a warehouse accepting connections and failing reads still reports true. Degraded CARRIES the report (status, the failing half, reason) as its body rather than an error envelope, so a gate reads the cause off the same object it got at 200. A MISSING LENS TABLE IS NOT A FAILURE and never moves the status: a lens reported available:false answers honest-empty rather than erroring, so a fresh deployment whose collector has not emitted yet is legitimately 200 with the product-event lens unavailable. The lens block is reported whenever the warehouse is REACHABLE — including on a report degraded by the plane, where the tables genuinely were probed — and is absent only when the warehouse is not, having nothing to say about tables it could not reach. Unauthenticated on purpose — liveness has to be probe-able — and it reads NO tenant data: table existence and stream presence only, never a row and never an event.
Reports whether the event plane can take a write and the warehouse can answer a read. It reports the analytics subsystem's own liveness in BOTH directions: plane is the event plane it WRITES (the bus and the JetStream stream every accepted event is published to, both named in the report), and datastore is the warehouse it READS, with each read lens's table reported as it is provisioned (the LLM usage ledger and the product-event table). EITHER ONE DOWN IS A 503, and the report says WHICH — they are probed independently and never collapse into a single bit. A readiness gate on this endpoint therefore gates on the write path as well as the read path: it answers ready only when POST /v1/event can publish. plane.ready IS A REAL PROBE and walks the ingest path itself — the same connection and the same stream a publish uses — so it cannot answer ready while a publish would 503. plane.reason carries the plane's own error text when it is false. datastore IS NOT PROBED WITH A QUERY. It is the state of the process's own shared client — established, and not since closed — so a warehouse accepting connections and failing reads still reports true. Degraded CARRIES the report (status, the failing half, reason) as its body rather than an error envelope, so a gate reads the cause off the same object it got at 200. A MISSING LENS TABLE IS NOT A FAILURE and never moves the status: a lens reported available:false answers honest-empty rather than erroring, so a fresh deployment whose collector has not emitted yet is legitimately 200 with the product-event lens unavailable. The lens block is reported whenever the warehouse is REACHABLE — including on a report degraded by the plane, where the tables genuinely were probed — and is absent only when the warehouse is not, having nothing to say about tables it could not reach. Unauthenticated on purpose — liveness has to be probe-able — and it reads NO tenant data: table existence and stream presence only, never a row and never an event.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1706,6 +1706,267 @@ class EventApi:
@validate_call
def get_event_pixel_by_key(
self,
key: StrictStr,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> bytearray:
"""A site's default pixel — a page view from an image, for a page that runs no script
Answers a transparent 1x1 GIF and records one page view for the project whose publishable key names the address: <img src=\"https://api.hanzo.ai/v1/event/pixel/pk-….gif\" alt=\"\" width=\"1\" height=\"1\"> The page is `?u=` when given, else the Referer. The visitor is stamped from the request like every event, is one visitor for a day, and carries no cookie. Do-not-track and a developer's own machine record nothing. The image is answered whatever happened to the view, with no-store.
:param key: (required)
:type key: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_event_pixel_by_key_serialize(
key=key,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'2XX': "bytearray",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def get_event_pixel_by_key_with_http_info(
self,
key: StrictStr,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[bytearray]:
"""A site's default pixel — a page view from an image, for a page that runs no script
Answers a transparent 1x1 GIF and records one page view for the project whose publishable key names the address: <img src=\"https://api.hanzo.ai/v1/event/pixel/pk-….gif\" alt=\"\" width=\"1\" height=\"1\"> The page is `?u=` when given, else the Referer. The visitor is stamped from the request like every event, is one visitor for a day, and carries no cookie. Do-not-track and a developer's own machine record nothing. The image is answered whatever happened to the view, with no-store.
:param key: (required)
:type key: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_event_pixel_by_key_serialize(
key=key,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'2XX': "bytearray",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def get_event_pixel_by_key_without_preload_content(
self,
key: StrictStr,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""A site's default pixel — a page view from an image, for a page that runs no script
Answers a transparent 1x1 GIF and records one page view for the project whose publishable key names the address: <img src=\"https://api.hanzo.ai/v1/event/pixel/pk-….gif\" alt=\"\" width=\"1\" height=\"1\"> The page is `?u=` when given, else the Referer. The visitor is stamped from the request like every event, is one visitor for a day, and carries no cookie. Do-not-track and a developer's own machine record nothing. The image is answered whatever happened to the view, with no-store.
:param key: (required)
:type key: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_event_pixel_by_key_serialize(
key=key,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'2XX': "bytearray",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _get_event_pixel_by_key_serialize(
self,
key,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if key is not None:
_path_params['key'] = key
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'image/gif'
]
)
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='GET',
resource_path='/v1/event/pixel/{key}',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def get_event_tag_js(
self,
@@ -2839,580 +3100,6 @@ class EventApi:
@validate_call
def post_event_by_project_envelope(
self,
project: StrictStr,
body: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Sentry SDK envelope ingest — errors and traces from an unmodified Sentry client
Accepts the CURRENT Sentry wire — the framed envelope a modern SDK posts, carrying its items in one request — so an application already instrumented with Sentry reports into Hanzo's error tracking by pointing its DSN here and changing nothing else. CLOUD ROUTES IT AND READS NONE OF IT. The body is relayed byte-for-byte to the observability plane, which parses the wire, verifies the credential and answers; this endpoint declares no response shape because it does not know one. A deployment with no observability plane mounted answers 503. THE CREDENTIAL IS A SENTRY DSN KEY, NOT A HANZO PRINCIPAL. This is one of the few writes on the platform that carries no bearer and no org header by design — a Sentry SDK has neither — and it is exempt from the principal gate for that reason. The observability plane verifies the DSN key itself, fail-closed: a request without a valid one is refused there, never admitted here. Presenting a Hanzo bearer instead does nothing. `project` IS THE DSN'S PROJECT ID — the identifier in the DSN the SDK was configured with, and what the tenant is derived from. It is NOT a Hanzo IAM project and NOT a todo project key. Only these two ingest paths map through: no observability READ API is reachable by any other suffix under this prefix.
:param project: (required)
:type project: str
:param body:
:type body: bytearray
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_event_by_project_envelope_serialize(
project=project,
body=body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_event_by_project_envelope_with_http_info(
self,
project: StrictStr,
body: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Sentry SDK envelope ingest — errors and traces from an unmodified Sentry client
Accepts the CURRENT Sentry wire — the framed envelope a modern SDK posts, carrying its items in one request — so an application already instrumented with Sentry reports into Hanzo's error tracking by pointing its DSN here and changing nothing else. CLOUD ROUTES IT AND READS NONE OF IT. The body is relayed byte-for-byte to the observability plane, which parses the wire, verifies the credential and answers; this endpoint declares no response shape because it does not know one. A deployment with no observability plane mounted answers 503. THE CREDENTIAL IS A SENTRY DSN KEY, NOT A HANZO PRINCIPAL. This is one of the few writes on the platform that carries no bearer and no org header by design — a Sentry SDK has neither — and it is exempt from the principal gate for that reason. The observability plane verifies the DSN key itself, fail-closed: a request without a valid one is refused there, never admitted here. Presenting a Hanzo bearer instead does nothing. `project` IS THE DSN'S PROJECT ID — the identifier in the DSN the SDK was configured with, and what the tenant is derived from. It is NOT a Hanzo IAM project and NOT a todo project key. Only these two ingest paths map through: no observability READ API is reachable by any other suffix under this prefix.
:param project: (required)
:type project: str
:param body:
:type body: bytearray
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_event_by_project_envelope_serialize(
project=project,
body=body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_event_by_project_envelope_without_preload_content(
self,
project: StrictStr,
body: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Sentry SDK envelope ingest — errors and traces from an unmodified Sentry client
Accepts the CURRENT Sentry wire — the framed envelope a modern SDK posts, carrying its items in one request — so an application already instrumented with Sentry reports into Hanzo's error tracking by pointing its DSN here and changing nothing else. CLOUD ROUTES IT AND READS NONE OF IT. The body is relayed byte-for-byte to the observability plane, which parses the wire, verifies the credential and answers; this endpoint declares no response shape because it does not know one. A deployment with no observability plane mounted answers 503. THE CREDENTIAL IS A SENTRY DSN KEY, NOT A HANZO PRINCIPAL. This is one of the few writes on the platform that carries no bearer and no org header by design — a Sentry SDK has neither — and it is exempt from the principal gate for that reason. The observability plane verifies the DSN key itself, fail-closed: a request without a valid one is refused there, never admitted here. Presenting a Hanzo bearer instead does nothing. `project` IS THE DSN'S PROJECT ID — the identifier in the DSN the SDK was configured with, and what the tenant is derived from. It is NOT a Hanzo IAM project and NOT a todo project key. Only these two ingest paths map through: no observability READ API is reachable by any other suffix under this prefix.
:param project: (required)
:type project: str
:param body:
:type body: bytearray
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_event_by_project_envelope_serialize(
project=project,
body=body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_event_by_project_envelope_serialize(
self,
project,
body,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if project is not None:
_path_params['project'] = project
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if body is not None:
# convert to byte array if the input is a file name (str)
if isinstance(body, str):
with open(body, "rb") as _fp:
_body_params = _fp.read()
elif isinstance(body, tuple):
# drop the filename from the tuple
_body_params = body[1]
else:
_body_params = body
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/octet-stream'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/event/{project}/envelope',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_event_by_project_store(
self,
project: StrictStr,
body: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> None:
"""Sentry SDK store ingest — the legacy single-event wire
Accepts the LEGACY Sentry wire: one event per request, what an SDK predating envelopes sends. Same handler, same credential, same destination as the envelope endpoint — kept open so an old client reports without being upgraded first. New instrumentation has no reason to choose it. CLOUD ROUTES IT AND READS NONE OF IT. The body is relayed byte-for-byte to the observability plane, which parses the wire, verifies the credential and answers; this endpoint declares no response shape because it does not know one. A deployment with no observability plane mounted answers 503. THE CREDENTIAL IS A SENTRY DSN KEY, NOT A HANZO PRINCIPAL. This is one of the few writes on the platform that carries no bearer and no org header by design — a Sentry SDK has neither — and it is exempt from the principal gate for that reason. The observability plane verifies the DSN key itself, fail-closed: a request without a valid one is refused there, never admitted here. Presenting a Hanzo bearer instead does nothing. `project` IS THE DSN'S PROJECT ID — the identifier in the DSN the SDK was configured with, and what the tenant is derived from. It is NOT a Hanzo IAM project and NOT a todo project key. Only these two ingest paths map through: no observability READ API is reachable by any other suffix under this prefix.
:param project: (required)
:type project: str
:param body:
:type body: bytearray
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_event_by_project_store_serialize(
project=project,
body=body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_event_by_project_store_with_http_info(
self,
project: StrictStr,
body: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[None]:
"""Sentry SDK store ingest — the legacy single-event wire
Accepts the LEGACY Sentry wire: one event per request, what an SDK predating envelopes sends. Same handler, same credential, same destination as the envelope endpoint — kept open so an old client reports without being upgraded first. New instrumentation has no reason to choose it. CLOUD ROUTES IT AND READS NONE OF IT. The body is relayed byte-for-byte to the observability plane, which parses the wire, verifies the credential and answers; this endpoint declares no response shape because it does not know one. A deployment with no observability plane mounted answers 503. THE CREDENTIAL IS A SENTRY DSN KEY, NOT A HANZO PRINCIPAL. This is one of the few writes on the platform that carries no bearer and no org header by design — a Sentry SDK has neither — and it is exempt from the principal gate for that reason. The observability plane verifies the DSN key itself, fail-closed: a request without a valid one is refused there, never admitted here. Presenting a Hanzo bearer instead does nothing. `project` IS THE DSN'S PROJECT ID — the identifier in the DSN the SDK was configured with, and what the tenant is derived from. It is NOT a Hanzo IAM project and NOT a todo project key. Only these two ingest paths map through: no observability READ API is reachable by any other suffix under this prefix.
:param project: (required)
:type project: str
:param body:
:type body: bytearray
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_event_by_project_store_serialize(
project=project,
body=body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_event_by_project_store_without_preload_content(
self,
project: StrictStr,
body: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Sentry SDK store ingest — the legacy single-event wire
Accepts the LEGACY Sentry wire: one event per request, what an SDK predating envelopes sends. Same handler, same credential, same destination as the envelope endpoint — kept open so an old client reports without being upgraded first. New instrumentation has no reason to choose it. CLOUD ROUTES IT AND READS NONE OF IT. The body is relayed byte-for-byte to the observability plane, which parses the wire, verifies the credential and answers; this endpoint declares no response shape because it does not know one. A deployment with no observability plane mounted answers 503. THE CREDENTIAL IS A SENTRY DSN KEY, NOT A HANZO PRINCIPAL. This is one of the few writes on the platform that carries no bearer and no org header by design — a Sentry SDK has neither — and it is exempt from the principal gate for that reason. The observability plane verifies the DSN key itself, fail-closed: a request without a valid one is refused there, never admitted here. Presenting a Hanzo bearer instead does nothing. `project` IS THE DSN'S PROJECT ID — the identifier in the DSN the SDK was configured with, and what the tenant is derived from. It is NOT a Hanzo IAM project and NOT a todo project key. Only these two ingest paths map through: no observability READ API is reachable by any other suffix under this prefix.
:param project: (required)
:type project: str
:param body:
:type body: bytearray
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_event_by_project_store_serialize(
project=project,
body=body,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_event_by_project_store_serialize(
self,
project,
body,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if project is not None:
_path_params['project'] = project
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if body is not None:
# convert to byte array if the input is a file name (str)
if isinstance(body, str):
with open(body, "rb") as _fp:
_body_params = _fp.read()
elif isinstance(body, tuple):
# drop the filename from the tuple
_body_params = body[1]
else:
_body_params = body
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/octet-stream'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/event/{project}/store',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_event_economic_dispute(
self,
+3 -3
View File
@@ -60,7 +60,7 @@ class ExecApi:
) -> List[ExecListing]:
"""Lists the files in an execution session.
Lists the files in an execution session. Everything the session's sandbox holds — the uploads a run can read and the artifacts it produced — each then fetched from GET /v1/exec/download. The answer is a BARE JSON ARRAY of {name, lastModified}, where `name` is the same {session_id}/{fileId} identifier download takes, because that is what the client matches on. The obvious typed shape, `{files: […]}`, would have been a silent wire change: the request still succeeds and `response.data.find(...)` finds nothing, which reads as a session holding no files. The NAME of this handler is what the published summary is cut from, and it used to leak: the comment opened \"Files lists …\", which is not this function's identifier, so zipdoc's exact-match strip left it and every SDK, tool list and CLI help line opened with a Go symbol no caller can see. An openapi.Describe stated a better summary beside the route and was DISCARDED — Fold replaces a structural operation with the typed one — so the declaration read as landed and rendered nowhere. The comment is the one home for this sentence. One recursive `find`, the same traversal the artifact sweep makes. It used to be `ls -1A` — top level only — while the sweep collected with `find`, so a run that wrote a nested artifact reported it in its reply and then omitted it here, and the client's prefix match read the file as expired. Two traversals of one directory is two answers about what a session holds; there is one now.
Lists the files in an execution session. Everything the session's sandbox holds — the uploads a run can read and the artifacts it produced — each then fetched from GET /v1/exec/download. The answer is a BARE JSON ARRAY of {name, lastModified}, where `name` is the same {session_id}/{fileId} identifier download takes, because that is what the client matches on. The obvious typed shape, `{files: […]}`, would have been a silent wire change: the request still succeeds and `response.data.find(...)` finds nothing, which reads as a session holding no files. It lists with one recursive `find`, the same traversal the artifact sweep makes, so a nested artifact a run reports in its reply is listed here too: one traversal of the directory, one answer about what a session holds.
:param sid: SID is the session identifier — the sandbox this listing is of. The URL is the addressing authority: a path segment binds after the body and after the query, so the address decides which session is read whatever else is sent. (required)
:type sid: str
@@ -127,7 +127,7 @@ class ExecApi:
) -> ApiResponse[List[ExecListing]]:
"""Lists the files in an execution session.
Lists the files in an execution session. Everything the session's sandbox holds — the uploads a run can read and the artifacts it produced — each then fetched from GET /v1/exec/download. The answer is a BARE JSON ARRAY of {name, lastModified}, where `name` is the same {session_id}/{fileId} identifier download takes, because that is what the client matches on. The obvious typed shape, `{files: […]}`, would have been a silent wire change: the request still succeeds and `response.data.find(...)` finds nothing, which reads as a session holding no files. The NAME of this handler is what the published summary is cut from, and it used to leak: the comment opened \"Files lists …\", which is not this function's identifier, so zipdoc's exact-match strip left it and every SDK, tool list and CLI help line opened with a Go symbol no caller can see. An openapi.Describe stated a better summary beside the route and was DISCARDED — Fold replaces a structural operation with the typed one — so the declaration read as landed and rendered nowhere. The comment is the one home for this sentence. One recursive `find`, the same traversal the artifact sweep makes. It used to be `ls -1A` — top level only — while the sweep collected with `find`, so a run that wrote a nested artifact reported it in its reply and then omitted it here, and the client's prefix match read the file as expired. Two traversals of one directory is two answers about what a session holds; there is one now.
Lists the files in an execution session. Everything the session's sandbox holds — the uploads a run can read and the artifacts it produced — each then fetched from GET /v1/exec/download. The answer is a BARE JSON ARRAY of {name, lastModified}, where `name` is the same {session_id}/{fileId} identifier download takes, because that is what the client matches on. The obvious typed shape, `{files: […]}`, would have been a silent wire change: the request still succeeds and `response.data.find(...)` finds nothing, which reads as a session holding no files. It lists with one recursive `find`, the same traversal the artifact sweep makes, so a nested artifact a run reports in its reply is listed here too: one traversal of the directory, one answer about what a session holds.
:param sid: SID is the session identifier — the sandbox this listing is of. The URL is the addressing authority: a path segment binds after the body and after the query, so the address decides which session is read whatever else is sent. (required)
:type sid: str
@@ -194,7 +194,7 @@ class ExecApi:
) -> RESTResponseType:
"""Lists the files in an execution session.
Lists the files in an execution session. Everything the session's sandbox holds — the uploads a run can read and the artifacts it produced — each then fetched from GET /v1/exec/download. The answer is a BARE JSON ARRAY of {name, lastModified}, where `name` is the same {session_id}/{fileId} identifier download takes, because that is what the client matches on. The obvious typed shape, `{files: […]}`, would have been a silent wire change: the request still succeeds and `response.data.find(...)` finds nothing, which reads as a session holding no files. The NAME of this handler is what the published summary is cut from, and it used to leak: the comment opened \"Files lists …\", which is not this function's identifier, so zipdoc's exact-match strip left it and every SDK, tool list and CLI help line opened with a Go symbol no caller can see. An openapi.Describe stated a better summary beside the route and was DISCARDED — Fold replaces a structural operation with the typed one — so the declaration read as landed and rendered nowhere. The comment is the one home for this sentence. One recursive `find`, the same traversal the artifact sweep makes. It used to be `ls -1A` — top level only — while the sweep collected with `find`, so a run that wrote a nested artifact reported it in its reply and then omitted it here, and the client's prefix match read the file as expired. Two traversals of one directory is two answers about what a session holds; there is one now.
Lists the files in an execution session. Everything the session's sandbox holds — the uploads a run can read and the artifacts it produced — each then fetched from GET /v1/exec/download. The answer is a BARE JSON ARRAY of {name, lastModified}, where `name` is the same {session_id}/{fileId} identifier download takes, because that is what the client matches on. The obvious typed shape, `{files: […]}`, would have been a silent wire change: the request still succeeds and `response.data.find(...)` finds nothing, which reads as a session holding no files. It lists with one recursive `find`, the same traversal the artifact sweep makes, so a nested artifact a run reports in its reply is listed here too: one traversal of the directory, one answer about what a session holds.
:param sid: SID is the session identifier — the sandbox this listing is of. The URL is the addressing authority: a path segment binds after the body and after the query, so the address decides which session is read whatever else is sent. (required)
:type sid: str
File diff suppressed because it is too large Load Diff
-629
View File
@@ -24,7 +24,6 @@ from hanzoai.cloud.models.iam_account_body import IamAccountBody
from hanzoai.cloud.models.iam_answer import IamAnswer
from hanzoai.cloud.models.iam_application import IamApplication
from hanzoai.cloud.models.iam_application_list_result import IamApplicationListResult
from hanzoai.cloud.models.iam_assume_body import IamAssumeBody
from hanzoai.cloud.models.iam_audit_log import IamAuditLog
from hanzoai.cloud.models.iam_auditlogs_delete_output import IamAuditlogsDeleteOutput
from hanzoai.cloud.models.iam_auditlogs_input import IamAuditlogsInput
@@ -24099,323 +24098,6 @@ class IamApi:
@validate_call
def post_iam_assume(
self,
iam_assume_body: IamAssumeBody,
authorization: Optional[StrictStr] = None,
x_forwarded_for: Optional[StrictStr] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> IamAnswer:
"""Steps a platform operator into an organization: it returns their own access token re-scoped to that tenant, so they see what the tenant sees.
Steps a platform operator into an organization: it returns their own access token re-scoped to that tenant, so they see what the tenant sees. The token still names the operator — stepping in is not becoming somebody else — and records the organization it was scoped to, so everything done with it is attributed to the person who did it. Only a platform operator may, and the attempt is recorded whether or not it succeeds.
:param iam_assume_body: (required)
:type iam_assume_body: IamAssumeBody
:param authorization:
:type authorization: str
:param x_forwarded_for:
:type x_forwarded_for: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_iam_assume_serialize(
iam_assume_body=iam_assume_body,
authorization=authorization,
x_forwarded_for=x_forwarded_for,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "IamAnswer",
'400': "IamAnswer",
'401': "IamAnswer",
'403': "IamAnswer",
'404': "IamAnswer",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_iam_assume_with_http_info(
self,
iam_assume_body: IamAssumeBody,
authorization: Optional[StrictStr] = None,
x_forwarded_for: Optional[StrictStr] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[IamAnswer]:
"""Steps a platform operator into an organization: it returns their own access token re-scoped to that tenant, so they see what the tenant sees.
Steps a platform operator into an organization: it returns their own access token re-scoped to that tenant, so they see what the tenant sees. The token still names the operator — stepping in is not becoming somebody else — and records the organization it was scoped to, so everything done with it is attributed to the person who did it. Only a platform operator may, and the attempt is recorded whether or not it succeeds.
:param iam_assume_body: (required)
:type iam_assume_body: IamAssumeBody
:param authorization:
:type authorization: str
:param x_forwarded_for:
:type x_forwarded_for: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_iam_assume_serialize(
iam_assume_body=iam_assume_body,
authorization=authorization,
x_forwarded_for=x_forwarded_for,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "IamAnswer",
'400': "IamAnswer",
'401': "IamAnswer",
'403': "IamAnswer",
'404': "IamAnswer",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_iam_assume_without_preload_content(
self,
iam_assume_body: IamAssumeBody,
authorization: Optional[StrictStr] = None,
x_forwarded_for: Optional[StrictStr] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Steps a platform operator into an organization: it returns their own access token re-scoped to that tenant, so they see what the tenant sees.
Steps a platform operator into an organization: it returns their own access token re-scoped to that tenant, so they see what the tenant sees. The token still names the operator — stepping in is not becoming somebody else — and records the organization it was scoped to, so everything done with it is attributed to the person who did it. Only a platform operator may, and the attempt is recorded whether or not it succeeds.
:param iam_assume_body: (required)
:type iam_assume_body: IamAssumeBody
:param authorization:
:type authorization: str
:param x_forwarded_for:
:type x_forwarded_for: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_iam_assume_serialize(
iam_assume_body=iam_assume_body,
authorization=authorization,
x_forwarded_for=x_forwarded_for,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "IamAnswer",
'400': "IamAnswer",
'401': "IamAnswer",
'403': "IamAnswer",
'404': "IamAnswer",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_iam_assume_serialize(
self,
iam_assume_body,
authorization,
x_forwarded_for,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
if authorization is not None:
_header_params['Authorization'] = authorization
if x_forwarded_for is not None:
_header_params['X-Forwarded-For'] = x_forwarded_for
# process the form parameters
# process the body parameter
if iam_assume_body is not None:
_body_params = iam_assume_body
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/iam/assume',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_iam_audit_logs(
self,
@@ -31449,317 +31131,6 @@ class IamApi:
@validate_call
def post_iam_release(
self,
iam_assume_body: IamAssumeBody,
authorization: Optional[StrictStr] = None,
x_forwarded_for: Optional[StrictStr] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> IamAnswer:
"""Steps a platform operator back out: it returns their own access token with no organization assumed, which is the credential they had before they stepped in.
Steps a platform operator back out: it returns their own access token with no organization assumed, which is the credential they had before they stepped in. Recorded like the step in.
:param iam_assume_body: (required)
:type iam_assume_body: IamAssumeBody
:param authorization:
:type authorization: str
:param x_forwarded_for:
:type x_forwarded_for: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_iam_release_serialize(
iam_assume_body=iam_assume_body,
authorization=authorization,
x_forwarded_for=x_forwarded_for,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "IamAnswer",
'400': "IamAnswer",
'401': "IamAnswer",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_iam_release_with_http_info(
self,
iam_assume_body: IamAssumeBody,
authorization: Optional[StrictStr] = None,
x_forwarded_for: Optional[StrictStr] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[IamAnswer]:
"""Steps a platform operator back out: it returns their own access token with no organization assumed, which is the credential they had before they stepped in.
Steps a platform operator back out: it returns their own access token with no organization assumed, which is the credential they had before they stepped in. Recorded like the step in.
:param iam_assume_body: (required)
:type iam_assume_body: IamAssumeBody
:param authorization:
:type authorization: str
:param x_forwarded_for:
:type x_forwarded_for: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_iam_release_serialize(
iam_assume_body=iam_assume_body,
authorization=authorization,
x_forwarded_for=x_forwarded_for,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "IamAnswer",
'400': "IamAnswer",
'401': "IamAnswer",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_iam_release_without_preload_content(
self,
iam_assume_body: IamAssumeBody,
authorization: Optional[StrictStr] = None,
x_forwarded_for: Optional[StrictStr] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Steps a platform operator back out: it returns their own access token with no organization assumed, which is the credential they had before they stepped in.
Steps a platform operator back out: it returns their own access token with no organization assumed, which is the credential they had before they stepped in. Recorded like the step in.
:param iam_assume_body: (required)
:type iam_assume_body: IamAssumeBody
:param authorization:
:type authorization: str
:param x_forwarded_for:
:type x_forwarded_for: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_iam_release_serialize(
iam_assume_body=iam_assume_body,
authorization=authorization,
x_forwarded_for=x_forwarded_for,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "IamAnswer",
'400': "IamAnswer",
'401': "IamAnswer",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_iam_release_serialize(
self,
iam_assume_body,
authorization,
x_forwarded_for,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
if authorization is not None:
_header_params['Authorization'] = authorization
if x_forwarded_for is not None:
_header_params['X-Forwarded-For'] = x_forwarded_for
# process the form parameters
# process the body parameter
if iam_assume_body is not None:
_body_params = iam_assume_body
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/iam/release',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_iam_roles(
self,
+12 -564
View File
@@ -27,8 +27,6 @@ from hanzoai.cloud.models.licensing_pubkey_view import LicensingPubkeyView
from hanzoai.cloud.models.licensing_release import LicensingRelease
from hanzoai.cloud.models.licensing_release_asset import LicensingReleaseAsset
from hanzoai.cloud.models.licensing_release_list import LicensingReleaseList
from hanzoai.cloud.models.licensing_revoke_request import LicensingRevokeRequest
from hanzoai.cloud.models.licensing_revoke_response import LicensingRevokeResponse
from hanzoai.cloud.models.licensing_verify_request import LicensingVerifyRequest
from hanzoai.cloud.models.licensing_verify_response import LicensingVerifyResponse
@@ -362,7 +360,7 @@ class LicensingApi:
) -> LicensingHealthView:
"""Health reports which signer this deployment mints with, and in which env.
Health reports which signer this deployment mints with, and in which env. It answers 200 whenever the process is up: there is nothing downstream to probe, since the KMS is reached only when a token is actually minted. Its value is the `signer` field — `\"signer\":\"local\"` on a production host says that deployment is signing licenses with a development key, which is a misconfiguration worth paging on rather than a healthy 200.
Health reports which signer this deployment mints with, and in which env. It answers 200 whenever the process is up: there is nothing downstream to probe, since KMS is read only when a token is actually minted. Its value is the `signer` field — `\"signer\":\"local\"` on a production host says that deployment is signing licenses with a development key, which is a misconfiguration worth paging on rather than a healthy 200.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -425,7 +423,7 @@ class LicensingApi:
) -> ApiResponse[LicensingHealthView]:
"""Health reports which signer this deployment mints with, and in which env.
Health reports which signer this deployment mints with, and in which env. It answers 200 whenever the process is up: there is nothing downstream to probe, since the KMS is reached only when a token is actually minted. Its value is the `signer` field — `\"signer\":\"local\"` on a production host says that deployment is signing licenses with a development key, which is a misconfiguration worth paging on rather than a healthy 200.
Health reports which signer this deployment mints with, and in which env. It answers 200 whenever the process is up: there is nothing downstream to probe, since KMS is read only when a token is actually minted. Its value is the `signer` field — `\"signer\":\"local\"` on a production host says that deployment is signing licenses with a development key, which is a misconfiguration worth paging on rather than a healthy 200.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -488,7 +486,7 @@ class LicensingApi:
) -> RESTResponseType:
"""Health reports which signer this deployment mints with, and in which env.
Health reports which signer this deployment mints with, and in which env. It answers 200 whenever the process is up: there is nothing downstream to probe, since the KMS is reached only when a token is actually minted. Its value is the `signer` field — `\"signer\":\"local\"` on a production host says that deployment is signing licenses with a development key, which is a misconfiguration worth paging on rather than a healthy 200.
Health reports which signer this deployment mints with, and in which env. It answers 200 whenever the process is up: there is nothing downstream to probe, since KMS is read only when a token is actually minted. Its value is the `signer` field — `\"signer\":\"local\"` on a production host says that deployment is signing licenses with a development key, which is a misconfiguration worth paging on rather than a healthy 200.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -609,7 +607,7 @@ class LicensingApi:
) -> LicensingPubkeyView:
"""Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half never enters this process — it lives in the KMS — so nothing served here is a secret. `provider` names the KMS holding that half; `\"local\"` means a development key, and a token signed by one is not a production credential.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half lives in KMS, so nothing served here is a secret. `provider` names where that half lives: `\"kms\"` is the production key every engine embeds; `\"local\"` is a development key, and a token signed by one is not a production credential.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -672,7 +670,7 @@ class LicensingApi:
) -> ApiResponse[LicensingPubkeyView]:
"""Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half never enters this process — it lives in the KMS — so nothing served here is a secret. `provider` names the KMS holding that half; `\"local\"` means a development key, and a token signed by one is not a production credential.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half lives in KMS, so nothing served here is a secret. `provider` names where that half lives: `\"kms\"` is the production key every engine embeds; `\"local\"` is a development key, and a token signed by one is not a production credential.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -735,7 +733,7 @@ class LicensingApi:
) -> RESTResponseType:
"""Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half never enters this process — it lives in the KMS — so nothing served here is a secret. `provider` names the KMS holding that half; `\"local\"` means a development key, and a token signed by one is not a production credential.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half lives in KMS, so nothing served here is a secret. `provider` names where that half lives: `\"kms\"` is the production key every engine embeds; `\"local\"` is a development key, and a token signed by one is not a production credential.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -856,7 +854,7 @@ class LicensingApi:
) -> LicensingPubkeyView:
"""Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half never enters this process — it lives in the KMS — so nothing served here is a secret. `provider` names the KMS holding that half; `\"local\"` means a development key, and a token signed by one is not a production credential.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half lives in KMS, so nothing served here is a secret. `provider` names where that half lives: `\"kms\"` is the production key every engine embeds; `\"local\"` is a development key, and a token signed by one is not a production credential.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -919,7 +917,7 @@ class LicensingApi:
) -> ApiResponse[LicensingPubkeyView]:
"""Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half never enters this process — it lives in the KMS — so nothing served here is a secret. `provider` names the KMS holding that half; `\"local\"` means a development key, and a token signed by one is not a production credential.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half lives in KMS, so nothing served here is a secret. `provider` names where that half lives: `\"kms\"` is the production key every engine embeds; `\"local\"` is a development key, and a token signed by one is not a production credential.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -982,7 +980,7 @@ class LicensingApi:
) -> RESTResponseType:
"""Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half never enters this process — it lives in the KMS — so nothing served here is a secret. `provider` names the KMS holding that half; `\"local\"` means a development key, and a token signed by one is not a production credential.
Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks. This is the only public-safe surface here and the reason the whole scheme works offline: the engine embeds or fetches this key once and then verifies every license itself, with no call home per launch. The private half lives in KMS, so nothing served here is a secret. `provider` names where that half lives: `\"kms\"` is the production key every engine embeds; `\"local\"` is a development key, and a token signed by one is not a production credential.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
@@ -1888,7 +1886,7 @@ class LicensingApi:
) -> LicensingIssueResponse:
"""Issue mints a signed license token for a product the caller's org already pays for.
Issue mints a signed license token for a product the caller's org already pays for. The order is the whole security argument: the caller is an IAM-validated principal, commerce is then asked whether that principal's ORG holds an ACTIVE entitlement for the product, and only then is a token signed — by the KMS, never by key material in this process. A product the org does not own answers 403 and no token. The signed features are the plan's features verbatim, so the engine enforces exactly what was bought, and the expiry is clamped to the entitlement's so a token cannot outlive the subscription that paid for it. The token is the credential the engine runs on. Treat it as a secret.
Issue mints a signed license token for a product the caller's org already pays for. The order is the whole security argument: the caller is an IAM-validated principal, commerce is then asked whether that principal's ORG holds an ACTIVE entitlement for the product, and only then is a token signed, with the production key KMS holds. A product the org does not own answers 403 and no token. The signed features are the plan's features verbatim, so the engine enforces exactly what was bought, and the expiry is clamped to the entitlement's so a token cannot outlive the subscription that paid for it. The token is the credential the engine runs on. Treat it as a secret.
:param licensing_issue_request: (required)
:type licensing_issue_request: LicensingIssueRequest
@@ -1955,7 +1953,7 @@ class LicensingApi:
) -> ApiResponse[LicensingIssueResponse]:
"""Issue mints a signed license token for a product the caller's org already pays for.
Issue mints a signed license token for a product the caller's org already pays for. The order is the whole security argument: the caller is an IAM-validated principal, commerce is then asked whether that principal's ORG holds an ACTIVE entitlement for the product, and only then is a token signed — by the KMS, never by key material in this process. A product the org does not own answers 403 and no token. The signed features are the plan's features verbatim, so the engine enforces exactly what was bought, and the expiry is clamped to the entitlement's so a token cannot outlive the subscription that paid for it. The token is the credential the engine runs on. Treat it as a secret.
Issue mints a signed license token for a product the caller's org already pays for. The order is the whole security argument: the caller is an IAM-validated principal, commerce is then asked whether that principal's ORG holds an ACTIVE entitlement for the product, and only then is a token signed, with the production key KMS holds. A product the org does not own answers 403 and no token. The signed features are the plan's features verbatim, so the engine enforces exactly what was bought, and the expiry is clamped to the entitlement's so a token cannot outlive the subscription that paid for it. The token is the credential the engine runs on. Treat it as a secret.
:param licensing_issue_request: (required)
:type licensing_issue_request: LicensingIssueRequest
@@ -2022,7 +2020,7 @@ class LicensingApi:
) -> RESTResponseType:
"""Issue mints a signed license token for a product the caller's org already pays for.
Issue mints a signed license token for a product the caller's org already pays for. The order is the whole security argument: the caller is an IAM-validated principal, commerce is then asked whether that principal's ORG holds an ACTIVE entitlement for the product, and only then is a token signed — by the KMS, never by key material in this process. A product the org does not own answers 403 and no token. The signed features are the plan's features verbatim, so the engine enforces exactly what was bought, and the expiry is clamped to the entitlement's so a token cannot outlive the subscription that paid for it. The token is the credential the engine runs on. Treat it as a secret.
Issue mints a signed license token for a product the caller's org already pays for. The order is the whole security argument: the caller is an IAM-validated principal, commerce is then asked whether that principal's ORG holds an ACTIVE entitlement for the product, and only then is a token signed, with the production key KMS holds. A product the org does not own answers 403 and no token. The signed features are the plan's features verbatim, so the engine enforces exactly what was bought, and the expiry is clamped to the entitlement's so a token cannot outlive the subscription that paid for it. The token is the credential the engine runs on. Treat it as a secret.
:param licensing_issue_request: (required)
:type licensing_issue_request: LicensingIssueRequest
@@ -2144,556 +2142,6 @@ class LicensingApi:
@validate_call
def post_licensing_releases(
self,
licensing_release: LicensingRelease,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> LicensingRelease:
"""Publishes a signed binary release, answering 201 Created.
Publishes a signed binary release, answering 201 Created. Outside dev a release MUST carry its cosign signature: this is how a binary becomes downloadable, so accepting an unsigned one would let an unverifiable artifact into the distribution path. Org-admin only — publishing is an operator action, not something a licensee does.
:param licensing_release: (required)
:type licensing_release: LicensingRelease
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_licensing_releases_serialize(
licensing_release=licensing_release,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "LicensingRelease",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_licensing_releases_with_http_info(
self,
licensing_release: LicensingRelease,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[LicensingRelease]:
"""Publishes a signed binary release, answering 201 Created.
Publishes a signed binary release, answering 201 Created. Outside dev a release MUST carry its cosign signature: this is how a binary becomes downloadable, so accepting an unsigned one would let an unverifiable artifact into the distribution path. Org-admin only — publishing is an operator action, not something a licensee does.
:param licensing_release: (required)
:type licensing_release: LicensingRelease
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_licensing_releases_serialize(
licensing_release=licensing_release,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "LicensingRelease",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_licensing_releases_without_preload_content(
self,
licensing_release: LicensingRelease,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Publishes a signed binary release, answering 201 Created.
Publishes a signed binary release, answering 201 Created. Outside dev a release MUST carry its cosign signature: this is how a binary becomes downloadable, so accepting an unsigned one would let an unverifiable artifact into the distribution path. Org-admin only — publishing is an operator action, not something a licensee does.
:param licensing_release: (required)
:type licensing_release: LicensingRelease
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_licensing_releases_serialize(
licensing_release=licensing_release,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "LicensingRelease",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_licensing_releases_serialize(
self,
licensing_release,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if licensing_release is not None:
_body_params = licensing_release
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/licensing/releases',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_licensing_revoke(
self,
licensing_revoke_request: LicensingRevokeRequest,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> LicensingRevokeResponse:
"""Revoke turns off tokens that have already been issued.
Revoke turns off tokens that have already been issued. A signed token cannot be un-signed, so revocation is the only way to withdraw one: this appends an entry that verify and the license-gated download both consult. It is a POST rather than a DELETE because it APPENDS a durable, attributed record — the entry names the admin who recorded it and when — rather than removing one. Org-admin only. Scope it as narrowly as the incident allows: \"nonce\" for one leaked token, \"holder\" for one compromised account, \"fingerprint\" for one stolen machine, \"release\" when a whole build is bad.
:param licensing_revoke_request: (required)
:type licensing_revoke_request: LicensingRevokeRequest
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_licensing_revoke_serialize(
licensing_revoke_request=licensing_revoke_request,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "LicensingRevokeResponse",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_licensing_revoke_with_http_info(
self,
licensing_revoke_request: LicensingRevokeRequest,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[LicensingRevokeResponse]:
"""Revoke turns off tokens that have already been issued.
Revoke turns off tokens that have already been issued. A signed token cannot be un-signed, so revocation is the only way to withdraw one: this appends an entry that verify and the license-gated download both consult. It is a POST rather than a DELETE because it APPENDS a durable, attributed record — the entry names the admin who recorded it and when — rather than removing one. Org-admin only. Scope it as narrowly as the incident allows: \"nonce\" for one leaked token, \"holder\" for one compromised account, \"fingerprint\" for one stolen machine, \"release\" when a whole build is bad.
:param licensing_revoke_request: (required)
:type licensing_revoke_request: LicensingRevokeRequest
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_licensing_revoke_serialize(
licensing_revoke_request=licensing_revoke_request,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "LicensingRevokeResponse",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_licensing_revoke_without_preload_content(
self,
licensing_revoke_request: LicensingRevokeRequest,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Revoke turns off tokens that have already been issued.
Revoke turns off tokens that have already been issued. A signed token cannot be un-signed, so revocation is the only way to withdraw one: this appends an entry that verify and the license-gated download both consult. It is a POST rather than a DELETE because it APPENDS a durable, attributed record — the entry names the admin who recorded it and when — rather than removing one. Org-admin only. Scope it as narrowly as the incident allows: \"nonce\" for one leaked token, \"holder\" for one compromised account, \"fingerprint\" for one stolen machine, \"release\" when a whole build is bad.
:param licensing_revoke_request: (required)
:type licensing_revoke_request: LicensingRevokeRequest
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_licensing_revoke_serialize(
licensing_revoke_request=licensing_revoke_request,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "LicensingRevokeResponse",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_licensing_revoke_serialize(
self,
licensing_revoke_request,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if licensing_revoke_request is not None:
_body_params = licensing_revoke_request
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/licensing/revoke',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_licensing_verify(
self,
-291
View File
@@ -38,7 +38,6 @@ from hanzoai.cloud.models.marketplace_payout import MarketplacePayout
from hanzoai.cloud.models.marketplace_payout_challenge import MarketplacePayoutChallenge
from hanzoai.cloud.models.marketplace_payout_in import MarketplacePayoutIn
from hanzoai.cloud.models.marketplace_publish_req import MarketplacePublishReq
from hanzoai.cloud.models.marketplace_resolve_in import MarketplaceResolveIn
from hanzoai.cloud.models.marketplace_shop import MarketplaceShop
from hanzoai.cloud.models.marketplace_shop_listing import MarketplaceShopListing
from hanzoai.cloud.models.marketplace_verify_in import MarketplaceVerifyIn
@@ -5314,296 +5313,6 @@ class MarketplaceApi:
@validate_call
def post_marketplace_jobs_by_id_resolve(
self,
id: Annotated[StrictStr, Field(description="ID is the job, from the path.")],
marketplace_resolve_in: MarketplaceResolveIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> MarketplaceJob:
"""Rules on a disputed job, as the platform's arbiter: release pays the seller the whole amount from the buyer's held authorization, if the payment still clears; refund ends it with nothing paid, and the amount set aside returns to the buyer's wallet.
Rules on a disputed job, as the platform's arbiter: release pays the seller the whole amount from the buyer's held authorization, if the payment still clears; refund ends it with nothing paid, and the amount set aside returns to the buyer's wallet. A platform SuperAdmin only.
:param id: ID is the job, from the path. (required)
:type id: str
:param marketplace_resolve_in: (required)
:type marketplace_resolve_in: MarketplaceResolveIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_marketplace_jobs_by_id_resolve_serialize(
id=id,
marketplace_resolve_in=marketplace_resolve_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "MarketplaceJob",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_marketplace_jobs_by_id_resolve_with_http_info(
self,
id: Annotated[StrictStr, Field(description="ID is the job, from the path.")],
marketplace_resolve_in: MarketplaceResolveIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[MarketplaceJob]:
"""Rules on a disputed job, as the platform's arbiter: release pays the seller the whole amount from the buyer's held authorization, if the payment still clears; refund ends it with nothing paid, and the amount set aside returns to the buyer's wallet.
Rules on a disputed job, as the platform's arbiter: release pays the seller the whole amount from the buyer's held authorization, if the payment still clears; refund ends it with nothing paid, and the amount set aside returns to the buyer's wallet. A platform SuperAdmin only.
:param id: ID is the job, from the path. (required)
:type id: str
:param marketplace_resolve_in: (required)
:type marketplace_resolve_in: MarketplaceResolveIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_marketplace_jobs_by_id_resolve_serialize(
id=id,
marketplace_resolve_in=marketplace_resolve_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "MarketplaceJob",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_marketplace_jobs_by_id_resolve_without_preload_content(
self,
id: Annotated[StrictStr, Field(description="ID is the job, from the path.")],
marketplace_resolve_in: MarketplaceResolveIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Rules on a disputed job, as the platform's arbiter: release pays the seller the whole amount from the buyer's held authorization, if the payment still clears; refund ends it with nothing paid, and the amount set aside returns to the buyer's wallet.
Rules on a disputed job, as the platform's arbiter: release pays the seller the whole amount from the buyer's held authorization, if the payment still clears; refund ends it with nothing paid, and the amount set aside returns to the buyer's wallet. A platform SuperAdmin only.
:param id: ID is the job, from the path. (required)
:type id: str
:param marketplace_resolve_in: (required)
:type marketplace_resolve_in: MarketplaceResolveIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_marketplace_jobs_by_id_resolve_serialize(
id=id,
marketplace_resolve_in=marketplace_resolve_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "MarketplaceJob",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_marketplace_jobs_by_id_resolve_serialize(
self,
id,
marketplace_resolve_in,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if id is not None:
_path_params['id'] = id
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if marketplace_resolve_in is not None:
_body_params = marketplace_resolve_in
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/marketplace/jobs/{id}/resolve',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_marketplace_listings(
self,
File diff suppressed because it is too large Load Diff
-863
View File
@@ -22,13 +22,11 @@ from typing_extensions import Annotated
from hanzoai.cloud.models.declare_req import DeclareReq
from hanzoai.cloud.models.declare_resp import DeclareResp
from hanzoai.cloud.models.platform_add_domain_req import PlatformAddDomainReq
from hanzoai.cloud.models.platform_app_cd import PlatformAppCD
from hanzoai.cloud.models.platform_app_move import PlatformAppMove
from hanzoai.cloud.models.platform_app_out import PlatformAppOut
from hanzoai.cloud.models.platform_app_view import PlatformAppView
from hanzoai.cloud.models.platform_build_board import PlatformBuildBoard
from hanzoai.cloud.models.platform_cd_app import PlatformCDApp
from hanzoai.cloud.models.platform_cd_diff import PlatformCdDiff
from hanzoai.cloud.models.platform_cd_resp import PlatformCdResp
from hanzoai.cloud.models.platform_create_app_req import PlatformCreateAppReq
from hanzoai.cloud.models.platform_declaration import PlatformDeclaration
@@ -50,8 +48,6 @@ from hanzoai.cloud.models.platform_project_write import PlatformProjectWrite
from hanzoai.cloud.models.platform_promote_req import PlatformPromoteReq
from hanzoai.cloud.models.platform_readiness import PlatformReadiness
from hanzoai.cloud.models.platform_release_board import PlatformReleaseBoard
from hanzoai.cloud.models.platform_restart_ref import PlatformRestartRef
from hanzoai.cloud.models.platform_restarted import PlatformRestarted
from hanzoai.cloud.models.platform_rollback_req import PlatformRollbackReq
from hanzoai.cloud.models.platform_run_req import PlatformRunReq
from hanzoai.cloud.models.platform_run_view import PlatformRunView
@@ -2041,285 +2037,6 @@ class PlatformApi:
@validate_call
def get_platform_apps_by_app_diff(
self,
app: Annotated[StrictStr, Field(description="App is the declaration's name, from the path.")],
org: Annotated[Optional[StrictStr], Field(description="Org is the values directory the declaration lives in, defaulting to the caller's own org.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> PlatformCdDiff:
"""Answers what syncing one app would change.
Answers what syncing one app would change. It reads the CD Application the declaration renders as: the commit CD compared the cluster against, the commit it last applied, and every object it manages with CD's verdict on each — the ones that differ from git are what a sync applies. Object-level, as CD reports it; the field-level diff stays on cd.hanzo.ai. SuperAdmin only, the same predicate CD's own RBAC applies to viewing an Application. 404 when CD holds no Application for the declaration.
:param app: App is the declaration's name, from the path. (required)
:type app: str
:param org: Org is the values directory the declaration lives in, defaulting to the caller's own org.
:type org: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_platform_apps_by_app_diff_serialize(
app=app,
org=org,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PlatformCdDiff",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def get_platform_apps_by_app_diff_with_http_info(
self,
app: Annotated[StrictStr, Field(description="App is the declaration's name, from the path.")],
org: Annotated[Optional[StrictStr], Field(description="Org is the values directory the declaration lives in, defaulting to the caller's own org.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[PlatformCdDiff]:
"""Answers what syncing one app would change.
Answers what syncing one app would change. It reads the CD Application the declaration renders as: the commit CD compared the cluster against, the commit it last applied, and every object it manages with CD's verdict on each — the ones that differ from git are what a sync applies. Object-level, as CD reports it; the field-level diff stays on cd.hanzo.ai. SuperAdmin only, the same predicate CD's own RBAC applies to viewing an Application. 404 when CD holds no Application for the declaration.
:param app: App is the declaration's name, from the path. (required)
:type app: str
:param org: Org is the values directory the declaration lives in, defaulting to the caller's own org.
:type org: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_platform_apps_by_app_diff_serialize(
app=app,
org=org,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PlatformCdDiff",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def get_platform_apps_by_app_diff_without_preload_content(
self,
app: Annotated[StrictStr, Field(description="App is the declaration's name, from the path.")],
org: Annotated[Optional[StrictStr], Field(description="Org is the values directory the declaration lives in, defaulting to the caller's own org.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Answers what syncing one app would change.
Answers what syncing one app would change. It reads the CD Application the declaration renders as: the commit CD compared the cluster against, the commit it last applied, and every object it manages with CD's verdict on each — the ones that differ from git are what a sync applies. Object-level, as CD reports it; the field-level diff stays on cd.hanzo.ai. SuperAdmin only, the same predicate CD's own RBAC applies to viewing an Application. 404 when CD holds no Application for the declaration.
:param app: App is the declaration's name, from the path. (required)
:type app: str
:param org: Org is the values directory the declaration lives in, defaulting to the caller's own org.
:type org: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_platform_apps_by_app_diff_serialize(
app=app,
org=org,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PlatformCdDiff",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _get_platform_apps_by_app_diff_serialize(
self,
app,
org,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if app is not None:
_path_params['app'] = app
# process the query parameters
if org is not None:
_query_params.append(('org', org))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='GET',
resource_path='/v1/platform/apps/{app}/diff',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def get_platform_builds(
self,
@@ -7168,586 +6885,6 @@ class PlatformApi:
@validate_call
def post_platform_apps_by_app_sync(
self,
app: Annotated[StrictStr, Field(description="App is the declaration's name, from the path.")],
platform_app_cd: PlatformAppCD,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> PlatformCdDiff:
"""Syncs one app now: CD applies the commit it compared, to this one Application.
Syncs one app now: CD applies the commit it compared, to this one Application. Every Application is manual — its AppProject admits only a manual sync — so this is the deploy step, requested the way cd.hanzo.ai requests one: an operation on the Application, initiated by the caller, applying the compared commit with the Application's own sync options and no pruning. It answers the Application with the operation queued; poll the app's cd read for how it ends. SuperAdmin only, the predicate CD's own RBAC holds sync to, and recorded in the audit trail like every mutation. 409 while another operation is queued, running or terminating, before CD has compared the Application with git, and when the Application changes between the read and the request.
:param app: App is the declaration's name, from the path. (required)
:type app: str
:param platform_app_cd: (required)
:type platform_app_cd: PlatformAppCD
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_platform_apps_by_app_sync_serialize(
app=app,
platform_app_cd=platform_app_cd,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "PlatformCdDiff",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_platform_apps_by_app_sync_with_http_info(
self,
app: Annotated[StrictStr, Field(description="App is the declaration's name, from the path.")],
platform_app_cd: PlatformAppCD,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[PlatformCdDiff]:
"""Syncs one app now: CD applies the commit it compared, to this one Application.
Syncs one app now: CD applies the commit it compared, to this one Application. Every Application is manual — its AppProject admits only a manual sync — so this is the deploy step, requested the way cd.hanzo.ai requests one: an operation on the Application, initiated by the caller, applying the compared commit with the Application's own sync options and no pruning. It answers the Application with the operation queued; poll the app's cd read for how it ends. SuperAdmin only, the predicate CD's own RBAC holds sync to, and recorded in the audit trail like every mutation. 409 while another operation is queued, running or terminating, before CD has compared the Application with git, and when the Application changes between the read and the request.
:param app: App is the declaration's name, from the path. (required)
:type app: str
:param platform_app_cd: (required)
:type platform_app_cd: PlatformAppCD
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_platform_apps_by_app_sync_serialize(
app=app,
platform_app_cd=platform_app_cd,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "PlatformCdDiff",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_platform_apps_by_app_sync_without_preload_content(
self,
app: Annotated[StrictStr, Field(description="App is the declaration's name, from the path.")],
platform_app_cd: PlatformAppCD,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Syncs one app now: CD applies the commit it compared, to this one Application.
Syncs one app now: CD applies the commit it compared, to this one Application. Every Application is manual — its AppProject admits only a manual sync — so this is the deploy step, requested the way cd.hanzo.ai requests one: an operation on the Application, initiated by the caller, applying the compared commit with the Application's own sync options and no pruning. It answers the Application with the operation queued; poll the app's cd read for how it ends. SuperAdmin only, the predicate CD's own RBAC holds sync to, and recorded in the audit trail like every mutation. 409 while another operation is queued, running or terminating, before CD has compared the Application with git, and when the Application changes between the read and the request.
:param app: App is the declaration's name, from the path. (required)
:type app: str
:param platform_app_cd: (required)
:type platform_app_cd: PlatformAppCD
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_platform_apps_by_app_sync_serialize(
app=app,
platform_app_cd=platform_app_cd,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "PlatformCdDiff",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_platform_apps_by_app_sync_serialize(
self,
app,
platform_app_cd,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if app is not None:
_path_params['app'] = app
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if platform_app_cd is not None:
_body_params = platform_app_cd
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/platform/apps/{app}/sync',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_platform_fleet_by_app_deploy(
self,
app: Annotated[StrictStr, Field(description="App is the service's CR name, from the path. It must be a DNS-1123 label.")],
platform_restart_ref: PlatformRestartRef,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> PlatformRestarted:
"""Rolls a platform service's pods, in a named environment.
Rolls a platform service's pods, in a named environment. It triggers a rolling restart of one platform service's Deployment by stamping a fresh restart annotation, and answers 202 with the app, the namespace, the environment and the timestamp. It restarts pods; it does NOT change the image — a version change is the release path, not this. SuperAdmin ONLY, and deliberately narrower than the read gate beside it. The only namespaces this board touches are the platform's own tier, so a restart here recycles a SHARED service every tenant depends on. A brand-org admin is a customer-org admin, not a platform operator: observing the board is bounded and audited, and restarting production identity is not. `?env=main|test|dev` is REQUIRED — a bare call does not default to production, which is what closes the fat-finger and confused-deputy hazard — and any other value is 400. A service with no Deployment to restart in that environment is 404.
:param app: App is the service's CR name, from the path. It must be a DNS-1123 label. (required)
:type app: str
:param platform_restart_ref: (required)
:type platform_restart_ref: PlatformRestartRef
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_platform_fleet_by_app_deploy_serialize(
app=app,
platform_restart_ref=platform_restart_ref,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "PlatformRestarted",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_platform_fleet_by_app_deploy_with_http_info(
self,
app: Annotated[StrictStr, Field(description="App is the service's CR name, from the path. It must be a DNS-1123 label.")],
platform_restart_ref: PlatformRestartRef,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[PlatformRestarted]:
"""Rolls a platform service's pods, in a named environment.
Rolls a platform service's pods, in a named environment. It triggers a rolling restart of one platform service's Deployment by stamping a fresh restart annotation, and answers 202 with the app, the namespace, the environment and the timestamp. It restarts pods; it does NOT change the image — a version change is the release path, not this. SuperAdmin ONLY, and deliberately narrower than the read gate beside it. The only namespaces this board touches are the platform's own tier, so a restart here recycles a SHARED service every tenant depends on. A brand-org admin is a customer-org admin, not a platform operator: observing the board is bounded and audited, and restarting production identity is not. `?env=main|test|dev` is REQUIRED — a bare call does not default to production, which is what closes the fat-finger and confused-deputy hazard — and any other value is 400. A service with no Deployment to restart in that environment is 404.
:param app: App is the service's CR name, from the path. It must be a DNS-1123 label. (required)
:type app: str
:param platform_restart_ref: (required)
:type platform_restart_ref: PlatformRestartRef
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_platform_fleet_by_app_deploy_serialize(
app=app,
platform_restart_ref=platform_restart_ref,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "PlatformRestarted",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_platform_fleet_by_app_deploy_without_preload_content(
self,
app: Annotated[StrictStr, Field(description="App is the service's CR name, from the path. It must be a DNS-1123 label.")],
platform_restart_ref: PlatformRestartRef,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Rolls a platform service's pods, in a named environment.
Rolls a platform service's pods, in a named environment. It triggers a rolling restart of one platform service's Deployment by stamping a fresh restart annotation, and answers 202 with the app, the namespace, the environment and the timestamp. It restarts pods; it does NOT change the image — a version change is the release path, not this. SuperAdmin ONLY, and deliberately narrower than the read gate beside it. The only namespaces this board touches are the platform's own tier, so a restart here recycles a SHARED service every tenant depends on. A brand-org admin is a customer-org admin, not a platform operator: observing the board is bounded and audited, and restarting production identity is not. `?env=main|test|dev` is REQUIRED — a bare call does not default to production, which is what closes the fat-finger and confused-deputy hazard — and any other value is 400. A service with no Deployment to restart in that environment is 404.
:param app: App is the service's CR name, from the path. It must be a DNS-1123 label. (required)
:type app: str
:param platform_restart_ref: (required)
:type platform_restart_ref: PlatformRestartRef
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_platform_fleet_by_app_deploy_serialize(
app=app,
platform_restart_ref=platform_restart_ref,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'202': "PlatformRestarted",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_platform_fleet_by_app_deploy_serialize(
self,
app,
platform_restart_ref,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if app is not None:
_path_params['app'] = app
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if platform_restart_ref is not None:
_body_params = platform_restart_ref
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/platform/fleet/{app}/deploy',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_platform_projects(
self,
-248
View File
@@ -28,7 +28,6 @@ from hanzoai.cloud.models.pricing_pricing_plan_list import PricingPricingPlanLis
from hanzoai.cloud.models.pricing_pricing_preset_list import PricingPricingPresetList
from hanzoai.cloud.models.pricing_pricing_provider_list import PricingPricingProviderList
from hanzoai.cloud.models.pricing_pricing_region_list import PricingPricingRegionList
from hanzoai.cloud.models.pricing_pricing_sync_out import PricingPricingSyncOut
from hanzoai.cloud.models.pricing_pricing_tier_list import PricingPricingTierList
from hanzoai.cloud.models.pricing_pricing_tool_list import PricingPricingToolList
from hanzoai.cloud.models.pricing_user_enablement_item import PricingUserEnablementItem
@@ -7036,250 +7035,3 @@ class PricingApi:
)
@validate_call
def post_pricing_sync(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> PricingPricingSyncOut:
"""Refreshes the third-party section of the catalog from its upstream listings and returns the time the refreshed catalog was stamped with.
Refreshes the third-party section of the catalog from its upstream listings and returns the time the refreshed catalog was stamped with. The fetch runs in Go and the markup transform in the pricing bundle. SuperAdmin only; every other caller is refused.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_pricing_sync_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PricingPricingSyncOut",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_pricing_sync_with_http_info(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[PricingPricingSyncOut]:
"""Refreshes the third-party section of the catalog from its upstream listings and returns the time the refreshed catalog was stamped with.
Refreshes the third-party section of the catalog from its upstream listings and returns the time the refreshed catalog was stamped with. The fetch runs in Go and the markup transform in the pricing bundle. SuperAdmin only; every other caller is refused.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_pricing_sync_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PricingPricingSyncOut",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_pricing_sync_without_preload_content(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Refreshes the third-party section of the catalog from its upstream listings and returns the time the refreshed catalog was stamped with.
Refreshes the third-party section of the catalog from its upstream listings and returns the time the refreshed catalog was stamped with. The fetch runs in Go and the markup transform in the pricing bundle. SuperAdmin only; every other caller is refused.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_pricing_sync_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PricingPricingSyncOut",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_pricing_sync_serialize(
self,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/pricing/sync',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
-804
View File
@@ -23,10 +23,7 @@ from hanzoai.cloud.models.principal_attestation import PrincipalAttestation
from hanzoai.cloud.models.principal_clear_in import PrincipalClearIn
from hanzoai.cloud.models.principal_clearance import PrincipalClearance
from hanzoai.cloud.models.principal_clearance_list import PrincipalClearanceList
from hanzoai.cloud.models.principal_decide_in import PrincipalDecideIn
from hanzoai.cloud.models.principal_jwks import PrincipalJWKS
from hanzoai.cloud.models.principal_match import PrincipalMatch
from hanzoai.cloud.models.principal_match_list import PrincipalMatchList
from hanzoai.cloud.models.principal_statement import PrincipalStatement
from hanzoai.cloud.models.principal_view import PrincipalView
@@ -1329,270 +1326,6 @@ class PrincipalApi:
@validate_call
def get_principal_matches(
self,
status: Annotated[Optional[StrictStr], Field(description="Status is open, cleared or confirmed; open when omitted. \"all\" lists every match.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> PrincipalMatchList:
"""Lists sanctions matches across every org, oldest first — the platform's review queue.
Lists sanctions matches across every org, oldest first — the platform's review queue. SuperAdmin only: a match names an org the platform screened, and the org it names is not the one to decide it. A match is one org against one designation or embargoed jurisdiction, with every name, address or country of the org that brought them close. Open matches are the ones no payment to or from their org clears past until a reviewer decides them; a match is recorded when a payment to or from its org is cleared.
:param status: Status is open, cleared or confirmed; open when omitted. \"all\" lists every match.
:type status: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_principal_matches_serialize(
status=status,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PrincipalMatchList",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def get_principal_matches_with_http_info(
self,
status: Annotated[Optional[StrictStr], Field(description="Status is open, cleared or confirmed; open when omitted. \"all\" lists every match.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[PrincipalMatchList]:
"""Lists sanctions matches across every org, oldest first — the platform's review queue.
Lists sanctions matches across every org, oldest first — the platform's review queue. SuperAdmin only: a match names an org the platform screened, and the org it names is not the one to decide it. A match is one org against one designation or embargoed jurisdiction, with every name, address or country of the org that brought them close. Open matches are the ones no payment to or from their org clears past until a reviewer decides them; a match is recorded when a payment to or from its org is cleared.
:param status: Status is open, cleared or confirmed; open when omitted. \"all\" lists every match.
:type status: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_principal_matches_serialize(
status=status,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PrincipalMatchList",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def get_principal_matches_without_preload_content(
self,
status: Annotated[Optional[StrictStr], Field(description="Status is open, cleared or confirmed; open when omitted. \"all\" lists every match.")] = None,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Lists sanctions matches across every org, oldest first — the platform's review queue.
Lists sanctions matches across every org, oldest first — the platform's review queue. SuperAdmin only: a match names an org the platform screened, and the org it names is not the one to decide it. A match is one org against one designation or embargoed jurisdiction, with every name, address or country of the org that brought them close. Open matches are the ones no payment to or from their org clears past until a reviewer decides them; a match is recorded when a payment to or from its org is cleared.
:param status: Status is open, cleared or confirmed; open when omitted. \"all\" lists every match.
:type status: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_principal_matches_serialize(
status=status,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PrincipalMatchList",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _get_principal_matches_serialize(
self,
status,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
if status is not None:
_query_params.append(('status', status))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='GET',
resource_path='/v1/principal/matches',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def get_principal_statements_by_id(
self,
@@ -2127,540 +1860,3 @@ class PrincipalApi:
)
@validate_call
def post_principal_keys(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> PrincipalJWKS:
"""Rotates the attestation signing key: a new Ed25519 key is generated, sealed in KMS beside the others, and signs every statement from now on; every earlier key is retired — still published, its private half destroyed.
Rotates the attestation signing key: a new Ed25519 key is generated, sealed in KMS beside the others, and signs every statement from now on; every earlier key is retired — still published, its private half destroyed. SuperAdmin only, on the audit trail before the new set is written, and followed on the trail by a correction if the write does not take. One rotation runs at a time, and one that finds the set rotated under it since it read it is refused (409). The first call provisions the deployment's first key.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_principal_keys_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "PrincipalJWKS",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_principal_keys_with_http_info(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[PrincipalJWKS]:
"""Rotates the attestation signing key: a new Ed25519 key is generated, sealed in KMS beside the others, and signs every statement from now on; every earlier key is retired — still published, its private half destroyed.
Rotates the attestation signing key: a new Ed25519 key is generated, sealed in KMS beside the others, and signs every statement from now on; every earlier key is retired — still published, its private half destroyed. SuperAdmin only, on the audit trail before the new set is written, and followed on the trail by a correction if the write does not take. One rotation runs at a time, and one that finds the set rotated under it since it read it is refused (409). The first call provisions the deployment's first key.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_principal_keys_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "PrincipalJWKS",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_principal_keys_without_preload_content(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Rotates the attestation signing key: a new Ed25519 key is generated, sealed in KMS beside the others, and signs every statement from now on; every earlier key is retired — still published, its private half destroyed.
Rotates the attestation signing key: a new Ed25519 key is generated, sealed in KMS beside the others, and signs every statement from now on; every earlier key is retired — still published, its private half destroyed. SuperAdmin only, on the audit trail before the new set is written, and followed on the trail by a correction if the write does not take. One rotation runs at a time, and one that finds the set rotated under it since it read it is refused (409). The first call provisions the deployment's first key.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_principal_keys_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "PrincipalJWKS",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_principal_keys_serialize(
self,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/principal/keys',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_principal_matches_by_id(
self,
id: Annotated[StrictStr, Field(description="ID is the match, from the path.")],
principal_decide_in: PrincipalDecideIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> PrincipalMatch:
"""Decides one sanctions match, as a Hanzo platform reviewer.
Decides one sanctions match, as a Hanzo platform reviewer. SuperAdmin only — an admin of the org the match names is refused, because that would be the org deciding its own case — and the decision is written and put on the audit trail in one transaction: a decision the trail does not take is not made. cleared records a namesake: the org's names resemble a designated person's and the other identifiers show a different one. It covers the hits the reviewer read, and a later name close to the same person reopens it. confirmed records the designated person itself, and blocks every payment to or from the org whatever it is later called. A decision may be changed only by another decision, with its own note.
:param id: ID is the match, from the path. (required)
:type id: str
:param principal_decide_in: (required)
:type principal_decide_in: PrincipalDecideIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_principal_matches_by_id_serialize(
id=id,
principal_decide_in=principal_decide_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PrincipalMatch",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_principal_matches_by_id_with_http_info(
self,
id: Annotated[StrictStr, Field(description="ID is the match, from the path.")],
principal_decide_in: PrincipalDecideIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[PrincipalMatch]:
"""Decides one sanctions match, as a Hanzo platform reviewer.
Decides one sanctions match, as a Hanzo platform reviewer. SuperAdmin only — an admin of the org the match names is refused, because that would be the org deciding its own case — and the decision is written and put on the audit trail in one transaction: a decision the trail does not take is not made. cleared records a namesake: the org's names resemble a designated person's and the other identifiers show a different one. It covers the hits the reviewer read, and a later name close to the same person reopens it. confirmed records the designated person itself, and blocks every payment to or from the org whatever it is later called. A decision may be changed only by another decision, with its own note.
:param id: ID is the match, from the path. (required)
:type id: str
:param principal_decide_in: (required)
:type principal_decide_in: PrincipalDecideIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_principal_matches_by_id_serialize(
id=id,
principal_decide_in=principal_decide_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PrincipalMatch",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_principal_matches_by_id_without_preload_content(
self,
id: Annotated[StrictStr, Field(description="ID is the match, from the path.")],
principal_decide_in: PrincipalDecideIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Decides one sanctions match, as a Hanzo platform reviewer.
Decides one sanctions match, as a Hanzo platform reviewer. SuperAdmin only — an admin of the org the match names is refused, because that would be the org deciding its own case — and the decision is written and put on the audit trail in one transaction: a decision the trail does not take is not made. cleared records a namesake: the org's names resemble a designated person's and the other identifiers show a different one. It covers the hits the reviewer read, and a later name close to the same person reopens it. confirmed records the designated person itself, and blocks every payment to or from the org whatever it is later called. A decision may be changed only by another decision, with its own note.
:param id: ID is the match, from the path. (required)
:type id: str
:param principal_decide_in: (required)
:type principal_decide_in: PrincipalDecideIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_principal_matches_by_id_serialize(
id=id,
principal_decide_in=principal_decide_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "PrincipalMatch",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_principal_matches_by_id_serialize(
self,
id,
principal_decide_in,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if id is not None:
_path_params['id'] = id
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if principal_decide_in is not None:
_body_params = principal_decide_in
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/principal/matches/{id}',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
+6 -6
View File
@@ -340,7 +340,7 @@ class ProjectApi:
) -> None:
"""Gives a custom hostname back, so the name is free to reuse.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so an add-only surface was not ownership but a leak: a customer who mistyped a domain, or claimed one they later moved elsewhere, could neither reuse it nor let anyone else. This is the third writer that closes it. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so ownership includes giving a name back: a customer who mistyped a domain, or moved one elsewhere, releases it here and the name is free for them or anyone else. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
:param slug: Slug is the project the host is attached to, from the path. (required)
:type slug: str
@@ -411,7 +411,7 @@ class ProjectApi:
) -> ApiResponse[None]:
"""Gives a custom hostname back, so the name is free to reuse.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so an add-only surface was not ownership but a leak: a customer who mistyped a domain, or claimed one they later moved elsewhere, could neither reuse it nor let anyone else. This is the third writer that closes it. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so ownership includes giving a name back: a customer who mistyped a domain, or moved one elsewhere, releases it here and the name is free for them or anyone else. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
:param slug: Slug is the project the host is attached to, from the path. (required)
:type slug: str
@@ -482,7 +482,7 @@ class ProjectApi:
) -> RESTResponseType:
"""Gives a custom hostname back, so the name is free to reuse.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so an add-only surface was not ownership but a leak: a customer who mistyped a domain, or claimed one they later moved elsewhere, could neither reuse it nor let anyone else. This is the third writer that closes it. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so ownership includes giving a name back: a customer who mistyped a domain, or moved one elsewhere, releases it here and the name is free for them or anyone else. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
:param slug: Slug is the project the host is attached to, from the path. (required)
:type slug: str
@@ -1139,7 +1139,7 @@ class ProjectApi:
) -> None:
"""Gives a custom hostname back, so the name is free to reuse.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so an add-only surface was not ownership but a leak: a customer who mistyped a domain, or claimed one they later moved elsewhere, could neither reuse it nor let anyone else. This is the third writer that closes it. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so ownership includes giving a name back: a customer who mistyped a domain, or moved one elsewhere, releases it here and the name is free for them or anyone else. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
:param slug: Slug is the project the host is attached to, from the path. (required)
:type slug: str
@@ -1210,7 +1210,7 @@ class ProjectApi:
) -> ApiResponse[None]:
"""Gives a custom hostname back, so the name is free to reuse.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so an add-only surface was not ownership but a leak: a customer who mistyped a domain, or claimed one they later moved elsewhere, could neither reuse it nor let anyone else. This is the third writer that closes it. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so ownership includes giving a name back: a customer who mistyped a domain, or moved one elsewhere, releases it here and the name is free for them or anyone else. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
:param slug: Slug is the project the host is attached to, from the path. (required)
:type slug: str
@@ -1281,7 +1281,7 @@ class ProjectApi:
) -> RESTResponseType:
"""Gives a custom hostname back, so the name is free to reuse.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so an add-only surface was not ownership but a leak: a customer who mistyped a domain, or claimed one they later moved elsewhere, could neither reuse it nor let anyone else. This is the third writer that closes it. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
Gives a custom hostname back, so the name is free to reuse. A claim is FIRST-COME and global, so ownership includes giving a name back: a customer who mistyped a domain, or moved one elsewhere, releases it here and the name is free for them or anyone else. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here. Scope: a validated principal is required (401 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
:param slug: Slug is the project the host is attached to, from the path. (required)
:type slug: str
-277
View File
@@ -34,8 +34,6 @@ from hanzoai.cloud.models.provider_disconnect_out import ProviderDisconnectOut
from hanzoai.cloud.models.provider_github_backfill_in import ProviderGithubBackfillIn
from hanzoai.cloud.models.provider_github_backfill_result import ProviderGithubBackfillResult
from hanzoai.cloud.models.provider_github_branches_out import ProviderGithubBranchesOut
from hanzoai.cloud.models.provider_github_claim_in import ProviderGithubClaimIn
from hanzoai.cloud.models.provider_github_claim_out import ProviderGithubClaimOut
from hanzoai.cloud.models.provider_github_fork_out import ProviderGithubForkOut
from hanzoai.cloud.models.provider_github_fork_req import ProviderGithubForkReq
from hanzoai.cloud.models.provider_github_import_in import ProviderGithubImportIn
@@ -11457,281 +11455,6 @@ class ProviderApi:
@validate_call
def post_provider_github_claim(
self,
provider_github_claim_in: ProviderGithubClaimIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ProviderGithubClaimOut:
"""Binds installations the App ALREADY holds to the org the caller is acting in — the reconciliation for a grant that happened outside our connect flow.
Binds installations the App ALREADY holds to the org the caller is acting in — the reconciliation for a grant that happened outside our connect flow. An installation IS the grant: GitHub recorded the consent when the App was installed, and our connection row is bookkeeping that never got written because nobody came through our callback. This writes that row from the App's own view, so 23 accounts granted straight from GitHub stop reading as nothing. The org is taken from the VALIDATED PRINCIPAL and never from the body, because it is the one part GitHub cannot tell us. An installation carries an account login, a type and a repository selection — nothing that names a Hanzo org. So the binding cannot be DERIVED, only asserted, and the only unforgeable assertion available is the org the caller is already acting in. Inferring one from the account name would be a guess the store cannot catch: its key is (org,provider,owner), so a wrong org is a valid row, and a valid row is a mirror pointed at the wrong tenant. SUPER ADMIN only, for that same reason. A tenant's proof that an account is theirs is GitHub's own consent screen — the connect flow — and without it any org could claim any account the App holds. Platform sudo is already the scope that reads the whole install list, so it is the scope that may bind from it; giving a tenant this verb would hand it every other tenant's repositories. Idempotent: the row is keyed (org,provider,owner) and connected_at survives an upsert, so claiming twice rebinds the same account to the same org and reports it under `already`. Re-claiming also REFRESHES the installation id, so an account reinstalled on GitHub — new id, same login — self-heals instead of minting tokens against a dead installation. Claiming an account another org holds ADDS this org's row and leaves theirs standing, so no org loses an integration it is using.
:param provider_github_claim_in: (required)
:type provider_github_claim_in: ProviderGithubClaimIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_provider_github_claim_serialize(
provider_github_claim_in=provider_github_claim_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ProviderGithubClaimOut",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_provider_github_claim_with_http_info(
self,
provider_github_claim_in: ProviderGithubClaimIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[ProviderGithubClaimOut]:
"""Binds installations the App ALREADY holds to the org the caller is acting in — the reconciliation for a grant that happened outside our connect flow.
Binds installations the App ALREADY holds to the org the caller is acting in — the reconciliation for a grant that happened outside our connect flow. An installation IS the grant: GitHub recorded the consent when the App was installed, and our connection row is bookkeeping that never got written because nobody came through our callback. This writes that row from the App's own view, so 23 accounts granted straight from GitHub stop reading as nothing. The org is taken from the VALIDATED PRINCIPAL and never from the body, because it is the one part GitHub cannot tell us. An installation carries an account login, a type and a repository selection — nothing that names a Hanzo org. So the binding cannot be DERIVED, only asserted, and the only unforgeable assertion available is the org the caller is already acting in. Inferring one from the account name would be a guess the store cannot catch: its key is (org,provider,owner), so a wrong org is a valid row, and a valid row is a mirror pointed at the wrong tenant. SUPER ADMIN only, for that same reason. A tenant's proof that an account is theirs is GitHub's own consent screen — the connect flow — and without it any org could claim any account the App holds. Platform sudo is already the scope that reads the whole install list, so it is the scope that may bind from it; giving a tenant this verb would hand it every other tenant's repositories. Idempotent: the row is keyed (org,provider,owner) and connected_at survives an upsert, so claiming twice rebinds the same account to the same org and reports it under `already`. Re-claiming also REFRESHES the installation id, so an account reinstalled on GitHub — new id, same login — self-heals instead of minting tokens against a dead installation. Claiming an account another org holds ADDS this org's row and leaves theirs standing, so no org loses an integration it is using.
:param provider_github_claim_in: (required)
:type provider_github_claim_in: ProviderGithubClaimIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_provider_github_claim_serialize(
provider_github_claim_in=provider_github_claim_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ProviderGithubClaimOut",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_provider_github_claim_without_preload_content(
self,
provider_github_claim_in: ProviderGithubClaimIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Binds installations the App ALREADY holds to the org the caller is acting in — the reconciliation for a grant that happened outside our connect flow.
Binds installations the App ALREADY holds to the org the caller is acting in — the reconciliation for a grant that happened outside our connect flow. An installation IS the grant: GitHub recorded the consent when the App was installed, and our connection row is bookkeeping that never got written because nobody came through our callback. This writes that row from the App's own view, so 23 accounts granted straight from GitHub stop reading as nothing. The org is taken from the VALIDATED PRINCIPAL and never from the body, because it is the one part GitHub cannot tell us. An installation carries an account login, a type and a repository selection — nothing that names a Hanzo org. So the binding cannot be DERIVED, only asserted, and the only unforgeable assertion available is the org the caller is already acting in. Inferring one from the account name would be a guess the store cannot catch: its key is (org,provider,owner), so a wrong org is a valid row, and a valid row is a mirror pointed at the wrong tenant. SUPER ADMIN only, for that same reason. A tenant's proof that an account is theirs is GitHub's own consent screen — the connect flow — and without it any org could claim any account the App holds. Platform sudo is already the scope that reads the whole install list, so it is the scope that may bind from it; giving a tenant this verb would hand it every other tenant's repositories. Idempotent: the row is keyed (org,provider,owner) and connected_at survives an upsert, so claiming twice rebinds the same account to the same org and reports it under `already`. Re-claiming also REFRESHES the installation id, so an account reinstalled on GitHub — new id, same login — self-heals instead of minting tokens against a dead installation. Claiming an account another org holds ADDS this org's row and leaves theirs standing, so no org loses an integration it is using.
:param provider_github_claim_in: (required)
:type provider_github_claim_in: ProviderGithubClaimIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_provider_github_claim_serialize(
provider_github_claim_in=provider_github_claim_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ProviderGithubClaimOut",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_provider_github_claim_serialize(
self,
provider_github_claim_in,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if provider_github_claim_in is not None:
_body_params = provider_github_claim_in
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/provider/github/claim',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_provider_github_fork(
self,
-277
View File
@@ -22,8 +22,6 @@ from typing_extensions import Annotated
from hanzoai.cloud.models.reference_clear_reference_out import ReferenceClearReferenceOut
from hanzoai.cloud.models.reference_reference_out import ReferenceReferenceOut
from hanzoai.cloud.models.reference_reference_sets_out import ReferenceReferenceSetsOut
from hanzoai.cloud.models.reference_refresh_reference_in import ReferenceRefreshReferenceIn
from hanzoai.cloud.models.reference_refresh_reference_out import ReferenceRefreshReferenceOut
from hanzoai.cloud.models.reference_resolve_reference_in import ReferenceResolveReferenceIn
from hanzoai.cloud.models.reference_resolve_reference_out import ReferenceResolveReferenceOut
from hanzoai.cloud.models.reference_set_reference_in import ReferenceSetReferenceIn
@@ -869,281 +867,6 @@ class ReferenceApi:
@validate_call
def risk_refresh_reference(
self,
reference_refresh_reference_in: ReferenceRefreshReferenceIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ReferenceRefreshReferenceOut:
"""Takes a new version of one set.
Takes a new version of one set. SuperAdmin only. It is platform work, not tenant work: it writes the shared baseline every organisation reads, so it is gated to the platform's own identity. Nothing here can write an organisation's overrides, and nothing an organisation sends can reach this route. Idempotent. A version is the content digest of what was taken, so refreshing an unchanged publisher writes no rows and reports unchanged. Resumable: a run that died half-way is continued from where it stopped rather than restarted. A set whose source needs a licence we do not hold is refused with the reason, rather than being quietly skipped.
:param reference_refresh_reference_in: (required)
:type reference_refresh_reference_in: ReferenceRefreshReferenceIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._risk_refresh_reference_serialize(
reference_refresh_reference_in=reference_refresh_reference_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ReferenceRefreshReferenceOut",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def risk_refresh_reference_with_http_info(
self,
reference_refresh_reference_in: ReferenceRefreshReferenceIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[ReferenceRefreshReferenceOut]:
"""Takes a new version of one set.
Takes a new version of one set. SuperAdmin only. It is platform work, not tenant work: it writes the shared baseline every organisation reads, so it is gated to the platform's own identity. Nothing here can write an organisation's overrides, and nothing an organisation sends can reach this route. Idempotent. A version is the content digest of what was taken, so refreshing an unchanged publisher writes no rows and reports unchanged. Resumable: a run that died half-way is continued from where it stopped rather than restarted. A set whose source needs a licence we do not hold is refused with the reason, rather than being quietly skipped.
:param reference_refresh_reference_in: (required)
:type reference_refresh_reference_in: ReferenceRefreshReferenceIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._risk_refresh_reference_serialize(
reference_refresh_reference_in=reference_refresh_reference_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ReferenceRefreshReferenceOut",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def risk_refresh_reference_without_preload_content(
self,
reference_refresh_reference_in: ReferenceRefreshReferenceIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Takes a new version of one set.
Takes a new version of one set. SuperAdmin only. It is platform work, not tenant work: it writes the shared baseline every organisation reads, so it is gated to the platform's own identity. Nothing here can write an organisation's overrides, and nothing an organisation sends can reach this route. Idempotent. A version is the content digest of what was taken, so refreshing an unchanged publisher writes no rows and reports unchanged. Resumable: a run that died half-way is continued from where it stopped rather than restarted. A set whose source needs a licence we do not hold is refused with the reason, rather than being quietly skipped.
:param reference_refresh_reference_in: (required)
:type reference_refresh_reference_in: ReferenceRefreshReferenceIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._risk_refresh_reference_serialize(
reference_refresh_reference_in=reference_refresh_reference_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ReferenceRefreshReferenceOut",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _risk_refresh_reference_serialize(
self,
reference_refresh_reference_in,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if reference_refresh_reference_in is not None:
_body_params = reference_refresh_reference_in
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/reference/refresh',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def risk_resolve_reference(
self,
+555
View File
@@ -26,6 +26,9 @@ from hanzoai.cloud.models.sandbox_exec_result import SandboxExecResult
from hanzoai.cloud.models.sandbox_lease_in import SandboxLeaseIn
from hanzoai.cloud.models.sandbox_leased import SandboxLeased
from hanzoai.cloud.models.sandbox_path_in import SandboxPathIn
from hanzoai.cloud.models.sandbox_ports import SandboxPorts
from hanzoai.cloud.models.sandbox_preview_grant import SandboxPreviewGrant
from hanzoai.cloud.models.sandbox_preview_in import SandboxPreviewIn
from hanzoai.cloud.models.sandbox_ran import SandboxRan
from hanzoai.cloud.models.sandbox_run_in import SandboxRunIn
from hanzoai.cloud.models.sandbox_sandbox import SandboxSandbox
@@ -1401,6 +1404,268 @@ class SandboxApi:
@validate_call
def get_sandbox_by_id_ports(
self,
id: Annotated[StrictStr, Field(description="ID is the sandbox, from the path.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> SandboxPorts:
"""Lists the TCP ports something listens on in a sandbox the caller holds, each with the preview host that serves it — what the sandbox's Browser can open.
Lists the TCP ports something listens on in a sandbox the caller holds, each with the preview host that serves it — what the sandbox's Browser can open. A dev server started in the sandbox appears here once it listens.
:param id: ID is the sandbox, from the path. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_sandbox_by_id_ports_serialize(
id=id,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "SandboxPorts",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def get_sandbox_by_id_ports_with_http_info(
self,
id: Annotated[StrictStr, Field(description="ID is the sandbox, from the path.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[SandboxPorts]:
"""Lists the TCP ports something listens on in a sandbox the caller holds, each with the preview host that serves it — what the sandbox's Browser can open.
Lists the TCP ports something listens on in a sandbox the caller holds, each with the preview host that serves it — what the sandbox's Browser can open. A dev server started in the sandbox appears here once it listens.
:param id: ID is the sandbox, from the path. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_sandbox_by_id_ports_serialize(
id=id,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "SandboxPorts",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def get_sandbox_by_id_ports_without_preload_content(
self,
id: Annotated[StrictStr, Field(description="ID is the sandbox, from the path.")],
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Lists the TCP ports something listens on in a sandbox the caller holds, each with the preview host that serves it — what the sandbox's Browser can open.
Lists the TCP ports something listens on in a sandbox the caller holds, each with the preview host that serves it — what the sandbox's Browser can open. A dev server started in the sandbox appears here once it listens.
:param id: ID is the sandbox, from the path. (required)
:type id: str
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_sandbox_by_id_ports_serialize(
id=id,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "SandboxPorts",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _get_sandbox_by_id_ports_serialize(
self,
id,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if id is not None:
_path_params['id'] = id
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='GET',
resource_path='/v1/sandbox/{id}/ports',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def get_sandbox_by_id_screen(
self,
@@ -3758,6 +4023,296 @@ class SandboxApi:
@validate_call
def post_sandbox_by_id_preview(
self,
id: Annotated[StrictStr, Field(description="ID is the sandbox, from the path.")],
sandbox_preview_in: SandboxPreviewIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> SandboxPreviewGrant:
"""Opens a port of a sandbox the caller holds in a browser.
Opens a port of a sandbox the caller holds in a browser. It answers a URL at an origin of the preview's own — https://sandbox-<id>-preview-<port>.<apex>/ — carrying a single-use ticket. Opening it sets a cookie on that origin and lands on its root, and from then on every request there is carried to the port inside the sandbox: pages, assets, APIs and WebSockets, as the app serves them on localhost. The preview stays open for twelve hours or until the sandbox stops running; a preview answering 401 is opened again by asking for another URL. A sandbox that is not running is 409.
:param id: ID is the sandbox, from the path. (required)
:type id: str
:param sandbox_preview_in: (required)
:type sandbox_preview_in: SandboxPreviewIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_sandbox_by_id_preview_serialize(
id=id,
sandbox_preview_in=sandbox_preview_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "SandboxPreviewGrant",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_sandbox_by_id_preview_with_http_info(
self,
id: Annotated[StrictStr, Field(description="ID is the sandbox, from the path.")],
sandbox_preview_in: SandboxPreviewIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[SandboxPreviewGrant]:
"""Opens a port of a sandbox the caller holds in a browser.
Opens a port of a sandbox the caller holds in a browser. It answers a URL at an origin of the preview's own — https://sandbox-<id>-preview-<port>.<apex>/ — carrying a single-use ticket. Opening it sets a cookie on that origin and lands on its root, and from then on every request there is carried to the port inside the sandbox: pages, assets, APIs and WebSockets, as the app serves them on localhost. The preview stays open for twelve hours or until the sandbox stops running; a preview answering 401 is opened again by asking for another URL. A sandbox that is not running is 409.
:param id: ID is the sandbox, from the path. (required)
:type id: str
:param sandbox_preview_in: (required)
:type sandbox_preview_in: SandboxPreviewIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_sandbox_by_id_preview_serialize(
id=id,
sandbox_preview_in=sandbox_preview_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "SandboxPreviewGrant",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_sandbox_by_id_preview_without_preload_content(
self,
id: Annotated[StrictStr, Field(description="ID is the sandbox, from the path.")],
sandbox_preview_in: SandboxPreviewIn,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Opens a port of a sandbox the caller holds in a browser.
Opens a port of a sandbox the caller holds in a browser. It answers a URL at an origin of the preview's own — https://sandbox-<id>-preview-<port>.<apex>/ — carrying a single-use ticket. Opening it sets a cookie on that origin and lands on its root, and from then on every request there is carried to the port inside the sandbox: pages, assets, APIs and WebSockets, as the app serves them on localhost. The preview stays open for twelve hours or until the sandbox stops running; a preview answering 401 is opened again by asking for another URL. A sandbox that is not running is 409.
:param id: ID is the sandbox, from the path. (required)
:type id: str
:param sandbox_preview_in: (required)
:type sandbox_preview_in: SandboxPreviewIn
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_sandbox_by_id_preview_serialize(
id=id,
sandbox_preview_in=sandbox_preview_in,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "SandboxPreviewGrant",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_sandbox_by_id_preview_serialize(
self,
id,
sandbox_preview_in,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if id is not None:
_path_params['id'] = id
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if sandbox_preview_in is not None:
_body_params = sandbox_preview_in
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/sandbox/{id}/preview',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_sandbox_by_id_resume(
self,
-277
View File
@@ -17,8 +17,6 @@ from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated
from hanzoai.cloud.models.sbom_sbom_health import SbomSbomHealth
from hanzoai.cloud.models.sbom_sbom_ingest import SbomSbomIngest
from hanzoai.cloud.models.sbom_sbom_ingested import SbomSbomIngested
from hanzoai.cloud.api_client import ApiClient, RequestSerialized
from hanzoai.cloud.api_response import ApiResponse
@@ -283,278 +281,3 @@ class SbomApi:
)
@validate_call
def post_sbom(
self,
sbom_sbom_ingest: SbomSbomIngest,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> SbomSbomIngested:
"""Persists a CycloneDX SBOM's components keyed by image digest.
Persists a CycloneDX SBOM's components keyed by image digest. Gated to a validated SuperAdmin (owner == AdminOrg) — the canonical cloud super-admin check, which the build fleet / CI carries. Re-ingest is idempotent: rows share the (digest, name, version, purl) ORDER BY, so ReplacingMergeTree keeps the latest by ingested_at (and resolve reads FINAL).
:param sbom_sbom_ingest: (required)
:type sbom_sbom_ingest: SbomSbomIngest
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_sbom_serialize(
sbom_sbom_ingest=sbom_sbom_ingest,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "SbomSbomIngested",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_sbom_with_http_info(
self,
sbom_sbom_ingest: SbomSbomIngest,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[SbomSbomIngested]:
"""Persists a CycloneDX SBOM's components keyed by image digest.
Persists a CycloneDX SBOM's components keyed by image digest. Gated to a validated SuperAdmin (owner == AdminOrg) — the canonical cloud super-admin check, which the build fleet / CI carries. Re-ingest is idempotent: rows share the (digest, name, version, purl) ORDER BY, so ReplacingMergeTree keeps the latest by ingested_at (and resolve reads FINAL).
:param sbom_sbom_ingest: (required)
:type sbom_sbom_ingest: SbomSbomIngest
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_sbom_serialize(
sbom_sbom_ingest=sbom_sbom_ingest,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "SbomSbomIngested",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_sbom_without_preload_content(
self,
sbom_sbom_ingest: SbomSbomIngest,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Persists a CycloneDX SBOM's components keyed by image digest.
Persists a CycloneDX SBOM's components keyed by image digest. Gated to a validated SuperAdmin (owner == AdminOrg) — the canonical cloud super-admin check, which the build fleet / CI carries. Re-ingest is idempotent: rows share the (digest, name, version, purl) ORDER BY, so ReplacingMergeTree keeps the latest by ingested_at (and resolve reads FINAL).
:param sbom_sbom_ingest: (required)
:type sbom_sbom_ingest: SbomSbomIngest
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_sbom_serialize(
sbom_sbom_ingest=sbom_sbom_ingest,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'201': "SbomSbomIngested",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_sbom_serialize(
self,
sbom_sbom_ingest,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if sbom_sbom_ingest is not None:
_body_params = sbom_sbom_ingest
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/sbom',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
-539
View File
@@ -26,11 +26,9 @@ from hanzoai.cloud.models.tool_authored_skill_list import ToolAuthoredSkillList
from hanzoai.cloud.models.tool_build_out import ToolBuildOut
from hanzoai.cloud.models.tool_build_request import ToolBuildRequest
from hanzoai.cloud.models.tool_create_server_req import ToolCreateServerReq
from hanzoai.cloud.models.tool_curate_req import ToolCurateReq
from hanzoai.cloud.models.tool_mcp_listing import ToolMCPListing
from hanzoai.cloud.models.tool_mcp_server import ToolMCPServer
from hanzoai.cloud.models.tool_mcp_catalog import ToolMcpCatalog
from hanzoai.cloud.models.tool_mcp_catalog_sync import ToolMcpCatalogSync
from hanzoai.cloud.models.tool_mcp_server_list import ToolMcpServerList
from hanzoai.cloud.models.tool_plugin_deleted import ToolPluginDeleted
from hanzoai.cloud.models.tool_plugin_mount_list import ToolPluginMountList
@@ -3234,296 +3232,6 @@ class ToolApi:
@validate_call
def patch_tool_catalog_by_id(
self,
id: Annotated[StrictStr, Field(description="ID is the listing to curate, from the path.")],
tool_curate_req: ToolCurateReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ToolMCPListing:
"""Sets what WE say about one catalog entry — hidden, featured, official, logo — and answers with the stored listing.
Sets what WE say about one catalog entry — hidden, featured, official, logo — and answers with the stored listing. SuperAdmin only; every other caller is refused. Curation is the half of a catalog row a sync cannot write, and this is the only thing that writes it. The upstream half is never editable here: a description that disagreed with the publisher's would be a fork of their listing, and the next sync would silently undo it.
:param id: ID is the listing to curate, from the path. (required)
:type id: str
:param tool_curate_req: (required)
:type tool_curate_req: ToolCurateReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._patch_tool_catalog_by_id_serialize(
id=id,
tool_curate_req=tool_curate_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ToolMCPListing",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def patch_tool_catalog_by_id_with_http_info(
self,
id: Annotated[StrictStr, Field(description="ID is the listing to curate, from the path.")],
tool_curate_req: ToolCurateReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[ToolMCPListing]:
"""Sets what WE say about one catalog entry — hidden, featured, official, logo — and answers with the stored listing.
Sets what WE say about one catalog entry — hidden, featured, official, logo — and answers with the stored listing. SuperAdmin only; every other caller is refused. Curation is the half of a catalog row a sync cannot write, and this is the only thing that writes it. The upstream half is never editable here: a description that disagreed with the publisher's would be a fork of their listing, and the next sync would silently undo it.
:param id: ID is the listing to curate, from the path. (required)
:type id: str
:param tool_curate_req: (required)
:type tool_curate_req: ToolCurateReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._patch_tool_catalog_by_id_serialize(
id=id,
tool_curate_req=tool_curate_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ToolMCPListing",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def patch_tool_catalog_by_id_without_preload_content(
self,
id: Annotated[StrictStr, Field(description="ID is the listing to curate, from the path.")],
tool_curate_req: ToolCurateReq,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Sets what WE say about one catalog entry — hidden, featured, official, logo — and answers with the stored listing.
Sets what WE say about one catalog entry — hidden, featured, official, logo — and answers with the stored listing. SuperAdmin only; every other caller is refused. Curation is the half of a catalog row a sync cannot write, and this is the only thing that writes it. The upstream half is never editable here: a description that disagreed with the publisher's would be a fork of their listing, and the next sync would silently undo it.
:param id: ID is the listing to curate, from the path. (required)
:type id: str
:param tool_curate_req: (required)
:type tool_curate_req: ToolCurateReq
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._patch_tool_catalog_by_id_serialize(
id=id,
tool_curate_req=tool_curate_req,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ToolMCPListing",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _patch_tool_catalog_by_id_serialize(
self,
id,
tool_curate_req,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if id is not None:
_path_params['id'] = id
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
if tool_curate_req is not None:
_body_params = tool_curate_req
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# set the HTTP header `Content-Type`
if _content_type:
_header_params['Content-Type'] = _content_type
else:
_default_content_type = (
self.api_client.select_header_content_type(
[
'application/json'
]
)
)
if _default_content_type is not None:
_header_params['Content-Type'] = _default_content_type
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='PATCH',
resource_path='/v1/tool/catalog/{id}',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_tool_call(
self,
@@ -3799,253 +3507,6 @@ class ToolApi:
@validate_call
def post_tool_catalog_sync(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ToolMcpCatalogSync:
"""Pulls the public MCP registry into our canonical copy and reports what changed.
Pulls the public MCP registry into our canonical copy and reports what changed. SuperAdmin only; every other caller is refused. It is IDEMPOTENT: a listing is keyed by the publisher's own reverse-DNS name, so a second pass over an unchanged registry rewrites the same rows and reports added=0, updated=0. It never deletes — a listing that vanishes upstream may be one an org has already enabled, and dropping its description would not drop its server. And it never touches CURATION: hidden, featured, an admin-set official and a logo survive every sync, because the write does not name those columns.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_tool_catalog_sync_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ToolMcpCatalogSync",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def post_tool_catalog_sync_with_http_info(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[ToolMcpCatalogSync]:
"""Pulls the public MCP registry into our canonical copy and reports what changed.
Pulls the public MCP registry into our canonical copy and reports what changed. SuperAdmin only; every other caller is refused. It is IDEMPOTENT: a listing is keyed by the publisher's own reverse-DNS name, so a second pass over an unchanged registry rewrites the same rows and reports added=0, updated=0. It never deletes — a listing that vanishes upstream may be one an org has already enabled, and dropping its description would not drop its server. And it never touches CURATION: hidden, featured, an admin-set official and a logo survive every sync, because the write does not name those columns.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_tool_catalog_sync_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ToolMcpCatalogSync",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def post_tool_catalog_sync_without_preload_content(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Pulls the public MCP registry into our canonical copy and reports what changed.
Pulls the public MCP registry into our canonical copy and reports what changed. SuperAdmin only; every other caller is refused. It is IDEMPOTENT: a listing is keyed by the publisher's own reverse-DNS name, so a second pass over an unchanged registry rewrites the same rows and reports added=0, updated=0. It never deletes — a listing that vanishes upstream may be one an org has already enabled, and dropping its description would not drop its server. And it never touches CURATION: hidden, featured, an admin-set official and a logo survive every sync, because the write does not name those columns.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._post_tool_catalog_sync_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ToolMcpCatalogSync",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _post_tool_catalog_sync_serialize(
self,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='POST',
resource_path='/v1/tool/catalog/sync',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def post_tool_mcp_servers(
self,
+9 -52
View File
@@ -57,11 +57,13 @@ from hanzoai.cloud.models.agent_agent_detail import AgentAgentDetail
from hanzoai.cloud.models.agent_agent_list import AgentAgentList
from hanzoai.cloud.models.agent_agent_run_view import AgentAgentRunView
from hanzoai.cloud.models.agent_agent_view import AgentAgentView
from hanzoai.cloud.models.agent_artifact import AgentArtifact
from hanzoai.cloud.models.agent_build_list import AgentBuildList
from hanzoai.cloud.models.agent_build_summary import AgentBuildSummary
from hanzoai.cloud.models.agent_build_turn import AgentBuildTurn
from hanzoai.cloud.models.agent_build_view import AgentBuildView
from hanzoai.cloud.models.agent_claim_key_out import AgentClaimKeyOut
from hanzoai.cloud.models.agent_coding_artifacts import AgentCodingArtifacts
from hanzoai.cloud.models.agent_coding_blob import AgentCodingBlob
from hanzoai.cloud.models.agent_coding_changes import AgentCodingChanges
from hanzoai.cloud.models.agent_coding_commit import AgentCodingCommit
@@ -117,6 +119,7 @@ from hanzoai.cloud.models.ai_anthropic_request import AiAnthropicRequest
from hanzoai.cloud.models.ai_anthropic_response import AiAnthropicResponse
from hanzoai.cloud.models.ai_anthropic_tool import AiAnthropicTool
from hanzoai.cloud.models.ai_anthropic_usage import AiAnthropicUsage
from hanzoai.cloud.models.ai_cache_writes import AiCacheWrites
from hanzoai.cloud.models.ai_cost_stats import AiCostStats
from hanzoai.cloud.models.ai_decision_sides import AiDecisionSides
from hanzoai.cloud.models.ai_decision_sides_false import AiDecisionSidesFalse
@@ -461,7 +464,6 @@ from hanzoai.cloud.models.code_tree_entry import CodeTreeEntry
from hanzoai.cloud.models.company_advance_in import CompanyAdvanceIn
from hanzoai.cloud.models.company_begin_in import CompanyBeginIn
from hanzoai.cloud.models.company_charge import CompanyCharge
from hanzoai.cloud.models.company_decision_in import CompanyDecisionIn
from hanzoai.cloud.models.company_ein import CompanyEIN
from hanzoai.cloud.models.company_ein_in import CompanyEinIn
from hanzoai.cloud.models.company_esign_complete_in import CompanyEsignCompleteIn
@@ -611,13 +613,13 @@ from hanzoai.cloud.models.dataset_risk_dataset_spec import DatasetRiskDatasetSpe
from hanzoai.cloud.models.dataset_risk_dataset_versions import DatasetRiskDatasetVersions
from hanzoai.cloud.models.dataset_risk_lineage import DatasetRiskLineage
from hanzoai.cloud.models.dataset_risk_split_counts import DatasetRiskSplitCounts
from hanzoai.cloud.models.decision import Decision
from hanzoai.cloud.models.deck_out import DeckOut
from hanzoai.cloud.models.declaration import Declaration
from hanzoai.cloud.models.declare_env import DeclareEnv
from hanzoai.cloud.models.declare_req import DeclareReq
from hanzoai.cloud.models.declare_resp import DeclareResp
from hanzoai.cloud.models.declare_result import DeclareResult
from hanzoai.cloud.models.deploy_applied_resource import DeployAppliedResource
from hanzoai.cloud.models.deploy_argo_app import DeployArgoApp
from hanzoai.cloud.models.deploy_argo_app_list import DeployArgoAppList
from hanzoai.cloud.models.deploy_argo_cluster import DeployArgoCluster
@@ -644,20 +646,9 @@ from hanzoai.cloud.models.deploy_argo_summary import DeployArgoSummary
from hanzoai.cloud.models.deploy_argo_sync_status import DeployArgoSyncStatus
from hanzoai.cloud.models.deploy_argo_sync_windows import DeployArgoSyncWindows
from hanzoai.cloud.models.deploy_argo_tree import DeployArgoTree
from hanzoai.cloud.models.deploy_console_settings import DeployConsoleSettings
from hanzoai.cloud.models.deploy_console_settings_dex_config import DeployConsoleSettingsDexConfig
from hanzoai.cloud.models.deploy_console_settings_google_analytics import DeployConsoleSettingsGoogleAnalytics
from hanzoai.cloud.models.deploy_console_settings_help import DeployConsoleSettingsHelp
from hanzoai.cloud.models.deploy_deploy_health import DeployDeployHealth
from hanzoai.cloud.models.deploy_git_ops_app import DeployGitOpsApp
from hanzoai.cloud.models.deploy_git_ops_deploy import DeployGitOpsDeploy
from hanzoai.cloud.models.deploy_git_ops_operation import DeployGitOpsOperation
from hanzoai.cloud.models.deploy_git_ops_plane import DeployGitOpsPlane
from hanzoai.cloud.models.deploy_reconcile_report import DeployReconcileReport
from hanzoai.cloud.models.deploy_reconcile_source import DeployReconcileSource
from hanzoai.cloud.models.deploy_session_ended import DeploySessionEnded
from hanzoai.cloud.models.deploy_session_user import DeploySessionUser
from hanzoai.cloud.models.deploy_version_message import DeployVersionMessage
from hanzoai.cloud.models.deployment_detail import DeploymentDetail
from hanzoai.cloud.models.destination_destination_disconnected import DestinationDestinationDisconnected
from hanzoai.cloud.models.destination_destination_field import DestinationDestinationField
@@ -679,8 +670,6 @@ from hanzoai.cloud.models.domain_registrant import DomainRegistrant
from hanzoai.cloud.models.domain_renew_req import DomainRenewReq
from hanzoai.cloud.models.domain_renew_result import DomainRenewResult
from hanzoai.cloud.models.domain_transfer_req import DomainTransferReq
from hanzoai.cloud.models.engine_engine_replica import EngineEngineReplica
from hanzoai.cloud.models.engine_engine_replica_update import EngineEngineReplicaUpdate
from hanzoai.cloud.models.engine_engine_status import EngineEngineStatus
from hanzoai.cloud.models.entitlement_entitlements_view import EntitlementEntitlementsView
from hanzoai.cloud.models.entitlement_mutate_req import EntitlementMutateReq
@@ -926,6 +915,7 @@ from hanzoai.cloud.models.git_workflow_list import GitWorkflowList
from hanzoai.cloud.models.git_workflow_run import GitWorkflowRun
from hanzoai.cloud.models.git_workflow_runs import GitWorkflowRuns
from hanzoai.cloud.models.git_workflow_view import GitWorkflowView
from hanzoai.cloud.models.grants import Grants
from hanzoai.cloud.models.graph import Graph
from hanzoai.cloud.models.graph_graph_answer_in import GraphGraphAnswerIn
from hanzoai.cloud.models.graph_graph_answer_out import GraphGraphAnswerOut
@@ -966,11 +956,6 @@ from hanzoai.cloud.models.graph_wire_fact import GraphWireFact
from hanzoai.cloud.models.guide_action_record import GuideActionRecord
from hanzoai.cloud.models.guide_actions_view import GuideActionsView
from hanzoai.cloud.models.guide_analytics_view import GuideAnalyticsView
from hanzoai.cloud.models.guide_blog import GuideBlog
from hanzoai.cloud.models.guide_blueprint import GuideBlueprint
from hanzoai.cloud.models.guide_blueprint_counts import GuideBlueprintCounts
from hanzoai.cloud.models.guide_blueprint_versions_view import GuideBlueprintVersionsView
from hanzoai.cloud.models.guide_blueprint_view import GuideBlueprintView
from hanzoai.cloud.models.guide_chat_request import GuideChatRequest
from hanzoai.cloud.models.guide_chat_response import GuideChatResponse
from hanzoai.cloud.models.guide_corpus_view import GuideCorpusView
@@ -979,18 +964,13 @@ from hanzoai.cloud.models.guide_curriculum_view import GuideCurriculumView
from hanzoai.cloud.models.guide_funnel import GuideFunnel
from hanzoai.cloud.models.guide_journey_step import GuideJourneyStep
from hanzoai.cloud.models.guide_overview_view import GuideOverviewView
from hanzoai.cloud.models.guide_page import GuidePage
from hanzoai.cloud.models.guide_principle import GuidePrinciple
from hanzoai.cloud.models.guide_profile_metrics import GuideProfileMetrics
from hanzoai.cloud.models.guide_profile_response import GuideProfileResponse
from hanzoai.cloud.models.guide_progress_view import GuideProgressView
from hanzoai.cloud.models.guide_section import GuideSection
from hanzoai.cloud.models.guide_step_view import GuideStepView
from hanzoai.cloud.models.guide_strategy import GuideStrategy
from hanzoai.cloud.models.guide_strategy_view import GuideStrategyView
from hanzoai.cloud.models.guide_suggest_response import GuideSuggestResponse
from hanzoai.cloud.models.guide_suggestion import GuideSuggestion
from hanzoai.cloud.models.guide_version_meta import GuideVersionMeta
from hanzoai.cloud.models.help_help_article import HelpHelpArticle
from hanzoai.cloud.models.help_help_article_card import HelpHelpArticleCard
from hanzoai.cloud.models.help_help_article_list import HelpHelpArticleList
@@ -1009,7 +989,6 @@ from hanzoai.cloud.models.iam_address import IamAddress
from hanzoai.cloud.models.iam_answer import IamAnswer
from hanzoai.cloud.models.iam_application import IamApplication
from hanzoai.cloud.models.iam_application_list_result import IamApplicationListResult
from hanzoai.cloud.models.iam_assume_body import IamAssumeBody
from hanzoai.cloud.models.iam_audit_log import IamAuditLog
from hanzoai.cloud.models.iam_auditlogs_delete_output import IamAuditlogsDeleteOutput
from hanzoai.cloud.models.iam_auditlogs_input import IamAuditlogsInput
@@ -1218,9 +1197,6 @@ from hanzoai.cloud.models.licensing_pubkey_view import LicensingPubkeyView
from hanzoai.cloud.models.licensing_release import LicensingRelease
from hanzoai.cloud.models.licensing_release_asset import LicensingReleaseAsset
from hanzoai.cloud.models.licensing_release_list import LicensingReleaseList
from hanzoai.cloud.models.licensing_revocation_entry import LicensingRevocationEntry
from hanzoai.cloud.models.licensing_revoke_request import LicensingRevokeRequest
from hanzoai.cloud.models.licensing_revoke_response import LicensingRevokeResponse
from hanzoai.cloud.models.licensing_verify_request import LicensingVerifyRequest
from hanzoai.cloud.models.licensing_verify_response import LicensingVerifyResponse
from hanzoai.cloud.models.line_item import LineItem
@@ -1332,7 +1308,6 @@ from hanzoai.cloud.models.marketplace_price import MarketplacePrice
from hanzoai.cloud.models.marketplace_publish_req import MarketplacePublishReq
from hanzoai.cloud.models.marketplace_received import MarketplaceReceived
from hanzoai.cloud.models.marketplace_reputation import MarketplaceReputation
from hanzoai.cloud.models.marketplace_resolve_in import MarketplaceResolveIn
from hanzoai.cloud.models.marketplace_seller import MarketplaceSeller
from hanzoai.cloud.models.marketplace_shop import MarketplaceShop
from hanzoai.cloud.models.marketplace_shop_listing import MarketplaceShopListing
@@ -1420,9 +1395,6 @@ from hanzoai.cloud.models.o11y_associated_component import O11yAssociatedCompone
from hanzoai.cloud.models.o11y_attribute_key import O11yAttributeKey
from hanzoai.cloud.models.o11y_attributes_component_entry import O11yAttributesComponentEntry
from hanzoai.cloud.models.o11y_authorization import O11yAuthorization
from hanzoai.cloud.models.o11y_availability_point import O11yAvailabilityPoint
from hanzoai.cloud.models.o11y_availability_response import O11yAvailabilityResponse
from hanzoai.cloud.models.o11y_availability_response_range import O11yAvailabilityResponseRange
from hanzoai.cloud.models.o11y_azure_account_config import O11yAzureAccountConfig
from hanzoai.cloud.models.o11y_azure_connection_artifact import O11yAzureConnectionArtifact
from hanzoai.cloud.models.o11y_azure_integration_config import O11yAzureIntegrationConfig
@@ -2063,7 +2035,6 @@ from hanzoai.cloud.models.o11y_service_assets import O11yServiceAssets
from hanzoai.cloud.models.o11y_service_config import O11yServiceConfig
from hanzoai.cloud.models.o11y_service_dashboard import O11yServiceDashboard
from hanzoai.cloud.models.o11y_service_metadata import O11yServiceMetadata
from hanzoai.cloud.models.o11y_service_up import O11yServiceUp
from hanzoai.cloud.models.o11y_sig_v4_config import O11ySigV4Config
from hanzoai.cloud.models.o11y_signal_connection_status import O11ySignalConnectionStatus
from hanzoai.cloud.models.o11y_slack_action import O11ySlackAction
@@ -2221,7 +2192,6 @@ from hanzoai.cloud.models.plan_plan_tier_list import PlanPlanTierList
from hanzoai.cloud.models.plan_plan_tool_list import PlanPlanToolList
from hanzoai.cloud.models.plan_plan_vocab import PlanPlanVocab
from hanzoai.cloud.models.platform_add_domain_req import PlatformAddDomainReq
from hanzoai.cloud.models.platform_app_cd import PlatformAppCD
from hanzoai.cloud.models.platform_app_move import PlatformAppMove
from hanzoai.cloud.models.platform_app_out import PlatformAppOut
from hanzoai.cloud.models.platform_app_view import PlatformAppView
@@ -2229,8 +2199,6 @@ from hanzoai.cloud.models.platform_binary_spec import PlatformBinarySpec
from hanzoai.cloud.models.platform_build_board import PlatformBuildBoard
from hanzoai.cloud.models.platform_build_row import PlatformBuildRow
from hanzoai.cloud.models.platform_cd_app import PlatformCDApp
from hanzoai.cloud.models.platform_cd_resource import PlatformCDResource
from hanzoai.cloud.models.platform_cd_diff import PlatformCdDiff
from hanzoai.cloud.models.platform_cd_resp import PlatformCdResp
from hanzoai.cloud.models.platform_create_app_req import PlatformCreateAppReq
from hanzoai.cloud.models.platform_decl_ref import PlatformDeclRef
@@ -2271,8 +2239,6 @@ from hanzoai.cloud.models.platform_record import PlatformRecord
from hanzoai.cloud.models.platform_relabel import PlatformRelabel
from hanzoai.cloud.models.platform_release_board import PlatformReleaseBoard
from hanzoai.cloud.models.platform_release_row import PlatformReleaseRow
from hanzoai.cloud.models.platform_restart_ref import PlatformRestartRef
from hanzoai.cloud.models.platform_restarted import PlatformRestarted
from hanzoai.cloud.models.platform_rollback_req import PlatformRollbackReq
from hanzoai.cloud.models.platform_run_req import PlatformRunReq
from hanzoai.cloud.models.platform_run_view import PlatformRunView
@@ -2329,7 +2295,6 @@ from hanzoai.cloud.models.pricing_pricing_plan_list import PricingPricingPlanLis
from hanzoai.cloud.models.pricing_pricing_preset_list import PricingPricingPresetList
from hanzoai.cloud.models.pricing_pricing_provider_list import PricingPricingProviderList
from hanzoai.cloud.models.pricing_pricing_region_list import PricingPricingRegionList
from hanzoai.cloud.models.pricing_pricing_sync_out import PricingPricingSyncOut
from hanzoai.cloud.models.pricing_pricing_tier_list import PricingPricingTierList
from hanzoai.cloud.models.pricing_pricing_tool_list import PricingPricingToolList
from hanzoai.cloud.models.pricing_rate import PricingRate
@@ -2340,7 +2305,6 @@ from hanzoai.cloud.models.principal_attestation import PrincipalAttestation
from hanzoai.cloud.models.principal_clear_in import PrincipalClearIn
from hanzoai.cloud.models.principal_clearance import PrincipalClearance
from hanzoai.cloud.models.principal_clearance_list import PrincipalClearanceList
from hanzoai.cloud.models.principal_decide_in import PrincipalDecideIn
from hanzoai.cloud.models.principal_decided import PrincipalDecided
from hanzoai.cloud.models.principal_entity import PrincipalEntity
from hanzoai.cloud.models.principal_fact import PrincipalFact
@@ -2352,7 +2316,6 @@ from hanzoai.cloud.models.principal_jwk import PrincipalJWK
from hanzoai.cloud.models.principal_jwks import PrincipalJWKS
from hanzoai.cloud.models.principal_list import PrincipalList
from hanzoai.cloud.models.principal_match import PrincipalMatch
from hanzoai.cloud.models.principal_match_list import PrincipalMatchList
from hanzoai.cloud.models.principal_method import PrincipalMethod
from hanzoai.cloud.models.principal_obligation import PrincipalObligation
from hanzoai.cloud.models.principal_rule import PrincipalRule
@@ -2421,8 +2384,6 @@ from hanzoai.cloud.models.provider_github_backfill_in import ProviderGithubBackf
from hanzoai.cloud.models.provider_github_backfill_result import ProviderGithubBackfillResult
from hanzoai.cloud.models.provider_github_branch import ProviderGithubBranch
from hanzoai.cloud.models.provider_github_branches_out import ProviderGithubBranchesOut
from hanzoai.cloud.models.provider_github_claim_in import ProviderGithubClaimIn
from hanzoai.cloud.models.provider_github_claim_out import ProviderGithubClaimOut
from hanzoai.cloud.models.provider_github_fork_out import ProviderGithubForkOut
from hanzoai.cloud.models.provider_github_fork_req import ProviderGithubForkReq
from hanzoai.cloud.models.provider_github_import_in import ProviderGithubImportIn
@@ -2496,14 +2457,10 @@ from hanzoai.cloud.models.reference_reference_answer import ReferenceReferenceAn
from hanzoai.cloud.models.reference_reference_out import ReferenceReferenceOut
from hanzoai.cloud.models.reference_reference_override import ReferenceReferenceOverride
from hanzoai.cloud.models.reference_reference_override_in import ReferenceReferenceOverrideIn
from hanzoai.cloud.models.reference_reference_receipt import ReferenceReferenceReceipt
from hanzoai.cloud.models.reference_reference_set import ReferenceReferenceSet
from hanzoai.cloud.models.reference_reference_sets_out import ReferenceReferenceSetsOut
from hanzoai.cloud.models.reference_reference_source import ReferenceReferenceSource
from hanzoai.cloud.models.reference_reference_taken import ReferenceReferenceTaken
from hanzoai.cloud.models.reference_reference_version import ReferenceReferenceVersion
from hanzoai.cloud.models.reference_refresh_reference_in import ReferenceRefreshReferenceIn
from hanzoai.cloud.models.reference_refresh_reference_out import ReferenceRefreshReferenceOut
from hanzoai.cloud.models.reference_resolve_reference_in import ReferenceResolveReferenceIn
from hanzoai.cloud.models.reference_resolve_reference_out import ReferenceResolveReferenceOut
from hanzoai.cloud.models.reference_set_reference_in import ReferenceSetReferenceIn
@@ -2587,6 +2544,10 @@ from hanzoai.cloud.models.sandbox_exec_result import SandboxExecResult
from hanzoai.cloud.models.sandbox_lease_in import SandboxLeaseIn
from hanzoai.cloud.models.sandbox_leased import SandboxLeased
from hanzoai.cloud.models.sandbox_path_in import SandboxPathIn
from hanzoai.cloud.models.sandbox_port import SandboxPort
from hanzoai.cloud.models.sandbox_ports import SandboxPorts
from hanzoai.cloud.models.sandbox_preview_grant import SandboxPreviewGrant
from hanzoai.cloud.models.sandbox_preview_in import SandboxPreviewIn
from hanzoai.cloud.models.sandbox_ran import SandboxRan
from hanzoai.cloud.models.sandbox_run_in import SandboxRunIn
from hanzoai.cloud.models.sandbox_sandbox import SandboxSandbox
@@ -2598,8 +2559,6 @@ from hanzoai.cloud.models.sandbox_ticket_grant import SandboxTicketGrant
from hanzoai.cloud.models.sandbox_write_in import SandboxWriteIn
from hanzoai.cloud.models.sandbox_wrote import SandboxWrote
from hanzoai.cloud.models.sbom_sbom_health import SbomSbomHealth
from hanzoai.cloud.models.sbom_sbom_ingest import SbomSbomIngest
from hanzoai.cloud.models.sbom_sbom_ingested import SbomSbomIngested
from hanzoai.cloud.models.scale import Scale
from hanzoai.cloud.models.scan_draft import ScanDraft
from hanzoai.cloud.models.search_backend_status import SearchBackendStatus
@@ -2796,13 +2755,11 @@ from hanzoai.cloud.models.tool_authored_skill_list import ToolAuthoredSkillList
from hanzoai.cloud.models.tool_build_out import ToolBuildOut
from hanzoai.cloud.models.tool_build_request import ToolBuildRequest
from hanzoai.cloud.models.tool_create_server_req import ToolCreateServerReq
from hanzoai.cloud.models.tool_curate_req import ToolCurateReq
from hanzoai.cloud.models.tool_mcp_listing import ToolMCPListing
from hanzoai.cloud.models.tool_mcp_package import ToolMCPPackage
from hanzoai.cloud.models.tool_mcp_remote import ToolMCPRemote
from hanzoai.cloud.models.tool_mcp_server import ToolMCPServer
from hanzoai.cloud.models.tool_mcp_catalog import ToolMcpCatalog
from hanzoai.cloud.models.tool_mcp_catalog_sync import ToolMcpCatalogSync
from hanzoai.cloud.models.tool_mcp_server_list import ToolMcpServerList
from hanzoai.cloud.models.tool_plugin_deleted import ToolPluginDeleted
from hanzoai.cloud.models.tool_plugin_mount import ToolPluginMount
@@ -17,23 +17,23 @@ import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class PlatformCDResource(BaseModel):
class AgentArtifact(BaseModel):
"""
PlatformCDResource
AgentArtifact
""" # noqa: E501
group: Optional[StrictStr] = Field(default=None, description="Group is the object's API group, \"\" for the core group.")
health: Optional[StrictStr] = Field(default=None, description="Health is the object's health, \"\" for a kind CD holds no health for.")
kind: Optional[StrictStr] = Field(default=None, description="Kind is the object's kind.")
name: Optional[StrictStr] = Field(default=None, description="Name is the object's name.")
namespace: Optional[StrictStr] = Field(default=None, description="Namespace is the object's namespace, \"\" for a cluster-scoped one.")
prune: Optional[StrictBool] = Field(default=None, description="Prune is true for a live object git no longer declares. A platform sync never prunes, so a sync leaves it running.")
status: Optional[StrictStr] = Field(default=None, description="Status is CD's verdict on the object: Synced or OutOfSync.")
__properties: ClassVar[List[str]] = ["group", "health", "kind", "name", "namespace", "prune", "status"]
kind: Optional[StrictStr] = Field(default=None, description="Kind is file, patch, preview, pull or deploy. A file or a patch is stored, and its bytes are read at GET /v1/agent/coding/{session}/artifacts/{name}.")
name: Optional[StrictStr] = Field(default=None, description="Name is the artifact's handle: a changed file's path in the workspace, or `changes.patch` for the whole change; for a link, its kind and what it names.")
port: Optional[StrictInt] = Field(default=None, description="Port is a preview's port in the run's sandbox, which POST /v1/sandbox/{id}/preview opens while the sandbox is kept.")
sandbox: Optional[StrictStr] = Field(default=None, description="Sandbox is the sandbox a preview is served from.")
sha256: Optional[StrictStr] = Field(default=None, description="SHA256 is a stored artifact's digest, hex.")
size: Optional[StrictInt] = Field(default=None, description="Size is a stored artifact's length in bytes.")
url: Optional[StrictStr] = Field(default=None, description="URL is where a link points: a preview's host, a pull request, a deployment.")
__properties: ClassVar[List[str]] = ["kind", "name", "port", "sandbox", "sha256", "size", "url"]
model_config = ConfigDict(
populate_by_name=True,
@@ -53,7 +53,7 @@ class PlatformCDResource(BaseModel):
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PlatformCDResource from a JSON string"""
"""Create an instance of AgentArtifact from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
@@ -78,7 +78,7 @@ class PlatformCDResource(BaseModel):
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PlatformCDResource from a dict"""
"""Create an instance of AgentArtifact from a dict"""
if obj is None:
return None
@@ -86,13 +86,13 @@ class PlatformCDResource(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"group": obj.get("group"),
"health": obj.get("health"),
"kind": obj.get("kind"),
"name": obj.get("name"),
"namespace": obj.get("namespace"),
"prune": obj.get("prune"),
"status": obj.get("status")
"port": obj.get("port"),
"sandbox": obj.get("sandbox"),
"sha256": obj.get("sha256"),
"size": obj.get("size"),
"url": obj.get("url")
})
return _obj
@@ -19,17 +19,18 @@ import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.guide_version_meta import GuideVersionMeta
from hanzoai.cloud.models.agent_artifact import AgentArtifact
from typing import Optional, Set
from typing_extensions import Self
class GuideBlueprintVersionsView(BaseModel):
class AgentCodingArtifacts(BaseModel):
"""
GuideBlueprintVersionsView
AgentCodingArtifacts
""" # noqa: E501
brand: Optional[StrictStr] = Field(default=None, description="Brand is the blueprint key the history belongs to — this deployment's brand, or \"\" (the base blueprint) when the brand has no row of its own.")
versions: Optional[List[GuideVersionMeta]] = Field(default=None, description="Versions are the stored versions, newest first: metadata only, never the documents.")
__properties: ClassVar[List[str]] = ["brand", "versions"]
artifacts: Optional[List[AgentArtifact]] = Field(default=None, description="Artifacts are the run's artifacts, stored files first. Never null.")
saved: Optional[StrictStr] = Field(default=None, description="Saved is when the artifacts were saved, RFC 3339 in UTC; empty while the run has saved none.")
session: Optional[StrictStr] = Field(default=None, description="Session is the run's handle.")
__properties: ClassVar[List[str]] = ["artifacts", "saved", "session"]
model_config = ConfigDict(
populate_by_name=True,
@@ -49,7 +50,7 @@ class GuideBlueprintVersionsView(BaseModel):
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of GuideBlueprintVersionsView from a JSON string"""
"""Create an instance of AgentCodingArtifacts from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
@@ -70,18 +71,18 @@ class GuideBlueprintVersionsView(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in versions (list)
# override the default output from pydantic by calling `to_dict()` of each item in artifacts (list)
_items = []
if self.versions:
for _item_versions in self.versions:
if _item_versions:
_items.append(_item_versions.to_dict())
_dict['versions'] = _items
if self.artifacts:
for _item_artifacts in self.artifacts:
if _item_artifacts:
_items.append(_item_artifacts.to_dict())
_dict['artifacts'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of GuideBlueprintVersionsView from a dict"""
"""Create an instance of AgentCodingArtifacts from a dict"""
if obj is None:
return None
@@ -89,8 +90,9 @@ class GuideBlueprintVersionsView(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"brand": obj.get("brand"),
"versions": [GuideVersionMeta.from_dict(_item) for _item in obj["versions"]] if obj.get("versions") is not None else None
"artifacts": [AgentArtifact.from_dict(_item) for _item in obj["artifacts"]] if obj.get("artifacts") is not None else None,
"saved": obj.get("saved"),
"session": obj.get("session")
})
return _obj
@@ -27,7 +27,7 @@ class AgentCodingStartIn(BaseModel):
"""
AgentCodingStartIn
""" # noqa: E501
after: Optional[StrictStr] = Field(default=None, description="After names a previous run's session, and starts this one from where that one stopped instead of from the repository's default. It is how a follow-up instruction — \"now add tests for it\" — builds on work already done rather than beginning again on a fresh clone. It sets the base and nothing else, so this run still writes its OWN branch. One run, one branch: a run that wrote back onto an earlier run's branch would break the rule the forge's ref policy is built on, and would leave two turns of work with one name to review. A caller who already knows the branch may pass Base directly; this exists because the branch is derived from a session id and nobody should have to know how. Base wins if both are given.")
after: Optional[StrictStr] = Field(default=None, description="After names a previous run's session, and starts this one from where that one stopped instead of from the repository's default. It is how a follow-up instruction — \"now add tests for it\" — builds on work already done rather than beginning again on a fresh clone: the follow-up resumes the earlier run's sandbox and works in its tree, files, installs and all, while that sandbox is kept; one reaped by then is cloned again from the earlier branch. It sets the base and nothing else, so this run still writes its OWN branch. One run, one branch: a run that wrote back onto an earlier run's branch would break the rule the forge's ref policy is built on, and would leave two turns of work with one name to review. A caller who already knows the branch may pass Base directly; this exists because the branch is derived from a session id and nobody should have to know how. Base wins if both are given.")
agent_ref: Optional[StrictStr] = Field(default=None, description="AgentRef names a configured agent to run as, which is how an org pins a harness, a model and a prompt to a name. Empty runs the default agent.", alias="agentRef")
base: Optional[StrictStr] = Field(default=None, description="Base is the branch to start from. Empty takes the repository's default. The run never writes here — it writes the agent branch it answers with.")
desktop: Optional[StrictBool] = Field(default=None, description="Desktop asks for a run with a SCREEN — an image carrying an X server — for a task that has to drive a browser or another windowed program. False, the default, is a headless checkout, which is what writing code needs.")
@@ -38,7 +38,7 @@ class AgentCodingStartIn(BaseModel):
project: Optional[StrictStr] = Field(default=None, description="Project scopes the run to one board's work when the org keeps more than one. Empty is the org's default.")
prompt: Optional[StrictStr] = Field(default=None, description="Prompt is the task, in the words you would use with a colleague who has the checkout open. It is the whole instruction: there is no second field for context, and a prompt that names files and the outcome it wants gets a run that does not have to guess either.")
reply: Optional[AgentReply] = Field(default=None, description="Reply is WHERE THE RUN NARRATES ITSELF, when the surface that started it has somewhere for it to talk. Empty means nobody is listening and the run simply does not narrate — which is the app surface's case, because /v1/agent/coding hands back a session id and the session stream is a better progress feed than any message could be. IT IS NOT A FIELD A MODEL FILLS IN. A run asked for in a conversation is dispatched with the address that conversation is happening at, written over whatever arrived here (apps/agents/replyto.go). A model naming a channel is a model naming a room it was not spoken to in, so the value it chose is discarded rather than argued with — which is the same rule that left the org and the subject off this type entirely.")
repo: Optional[StrictStr] = Field(default=None, description="Repo is what to work on: a repository's name, `owner/name` in the caller's own org, or the site a repository serves (`hanzo.ai`), as the person said it. The engine resolves it against the org's own repositories — a name that matches none is refused with the nearest ones — and finds the clone URL and the push credential from the org itself, so this says WHICH repository and never how to reach it. A repository on GitHub is named by GitHub's address, `github.com/owner/name` — or `owner/name` when the owner is not the org's own — and runs there directly: it is admitted when the caller's own connected GitHub may push to it, or when the caller administers the org and the org's installation holds it, and refused otherwise. Empty starts something new: the run makes a project named from the prompt, under a slug the org does not already hold, and works in a repository of the same name.")
repo: Optional[StrictStr] = Field(default=None, description="Repo is what to work on: a repository's name, `owner/name` in the caller's own org, or the site a repository serves (`hanzo.ai`), as the person said it. The engine resolves it against the org's own repositories — a name that matches none is refused with the nearest ones — and finds the clone URL and the push credential from the org itself, so this says WHICH repository and never how to reach it. A repository on GitHub is named by GitHub's address, `github.com/owner/name` — or `owner/name` when the owner is not the org's own — and runs there directly: it is admitted when the caller's own connected GitHub may push to it, or when the caller administers the org and the org's installation holds it, and refused otherwise. A repository the caller can read and not push to — a public repository, or one their GitHub reads — is cloned read-only: the run works, commits in its workspace, and pushes nothing; its change is kept as the run's artifacts. Empty runs in an empty workspace: a fresh git repository in the sandbox, with nothing cloned and nothing pushed.")
target_id: Optional[StrictStr] = Field(default=None, description="TargetID routes the run to a registered machine the org has claimed instead of to a sandbox in our cluster. Empty runs it here, which is the usual case.", alias="targetId")
task: Optional[StrictStr] = Field(default=None, description="Task is Prompt under the name a caller asking for work tends to reach for. The two are one field: Prompt wins when both are given.")
timeout_seconds: Optional[StrictInt] = Field(default=None, description="TimeoutSeconds bounds the whole run. Unset takes the default budget; a run that hits the bound is stopped and reports what it had done by then.", alias="timeoutSeconds")
@@ -27,12 +27,11 @@ class AgentCodingStarted(BaseModel):
AgentCodingStarted
""" # noqa: E501
branch: Optional[StrictStr] = Field(default=None, description="Branch is the ref the run will push its work to, and the ONLY ref it is permitted to write. It exists before the work does, so it is safe to tell somebody where to look while the run is still going.")
project: Optional[StrictStr] = Field(default=None, description="Project is the slug of the project a run with no repo made for itself, the handle /v1/project/{slug} answers to. Empty when the run was given a repo.")
repo: Optional[StrictStr] = Field(default=None, description="Repo is the repository the run was admitted against, echoed back as the engine resolved it.")
routed: Optional[StrictBool] = Field(default=None, description="Routed says the run went to one of the org's own registered machines rather than to a sandbox in our cluster. False is the ordinary case.")
session_id: Optional[StrictStr] = Field(default=None, description="SessionID is the run's handle: its durable record, and the root its live progress streams under at /v1/agent/sessions/stream?root=<sessionId>. Every later question about this run is asked with it.", alias="sessionId")
target_id: Optional[StrictStr] = Field(default=None, description="TargetID names that machine when Routed is true, and is empty otherwise.", alias="targetId")
__properties: ClassVar[List[str]] = ["branch", "project", "repo", "routed", "sessionId", "targetId"]
__properties: ClassVar[List[str]] = ["branch", "repo", "routed", "sessionId", "targetId"]
model_config = ConfigDict(
populate_by_name=True,
@@ -86,7 +85,6 @@ class AgentCodingStarted(BaseModel):
_obj = cls.model_validate({
"branch": obj.get("branch"),
"project": obj.get("project"),
"repo": obj.get("repo"),
"routed": obj.get("routed"),
"sessionId": obj.get("sessionId"),
+22 -1
View File
@@ -19,6 +19,7 @@ import json
from pydantic import BaseModel, ConfigDict, StrictInt
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.ai_cache_writes import AiCacheWrites
from typing import Optional, Set
from typing_extensions import Self
@@ -26,9 +27,13 @@ class AiAnthropicUsage(BaseModel):
"""
AiAnthropicUsage
""" # noqa: E501
cache_creation: Optional[AiCacheWrites] = None
cache_creation_input_tokens: Optional[StrictInt] = None
cache_read_input_tokens: Optional[StrictInt] = None
input_tokens: Optional[StrictInt] = None
iterations: Optional[List[AiAnthropicUsage]] = None
output_tokens: Optional[StrictInt] = None
__properties: ClassVar[List[str]] = ["input_tokens", "output_tokens"]
__properties: ClassVar[List[str]] = ["cache_creation", "cache_creation_input_tokens", "cache_read_input_tokens", "input_tokens", "iterations", "output_tokens"]
model_config = ConfigDict(
populate_by_name=True,
@@ -69,6 +74,16 @@ class AiAnthropicUsage(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of cache_creation
if self.cache_creation:
_dict['cache_creation'] = self.cache_creation.to_dict()
# override the default output from pydantic by calling `to_dict()` of each item in iterations (list)
_items = []
if self.iterations:
for _item_iterations in self.iterations:
if _item_iterations:
_items.append(_item_iterations.to_dict())
_dict['iterations'] = _items
return _dict
@classmethod
@@ -81,9 +96,15 @@ class AiAnthropicUsage(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"cache_creation": AiCacheWrites.from_dict(obj["cache_creation"]) if obj.get("cache_creation") is not None else None,
"cache_creation_input_tokens": obj.get("cache_creation_input_tokens"),
"cache_read_input_tokens": obj.get("cache_read_input_tokens"),
"input_tokens": obj.get("input_tokens"),
"iterations": [AiAnthropicUsage.from_dict(_item) for _item in obj["iterations"]] if obj.get("iterations") is not None else None,
"output_tokens": obj.get("output_tokens")
})
return _obj
# TODO: Rewrite to not use raise_errors
AiAnthropicUsage.model_rebuild(raise_errors=False)
@@ -17,17 +17,18 @@ import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict
from pydantic import BaseModel, ConfigDict, StrictInt
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class DeployConsoleSettingsDexConfig(BaseModel):
class AiCacheWrites(BaseModel):
"""
DexConfig carries no connectors. This console does not run Dex; its sign-in is GET /v1/deploy/login, which is an IAM authorization-code round trip.
AiCacheWrites
""" # noqa: E501
connectors: Optional[List[Dict[str, Any]]] = None
__properties: ClassVar[List[str]] = ["connectors"]
ephemeral_1h_input_tokens: Optional[StrictInt] = None
ephemeral_5m_input_tokens: Optional[StrictInt] = None
__properties: ClassVar[List[str]] = ["ephemeral_1h_input_tokens", "ephemeral_5m_input_tokens"]
model_config = ConfigDict(
populate_by_name=True,
@@ -47,7 +48,7 @@ class DeployConsoleSettingsDexConfig(BaseModel):
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployConsoleSettingsDexConfig from a JSON string"""
"""Create an instance of AiCacheWrites from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
@@ -72,7 +73,7 @@ class DeployConsoleSettingsDexConfig(BaseModel):
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployConsoleSettingsDexConfig from a dict"""
"""Create an instance of AiCacheWrites from a dict"""
if obj is None:
return None
@@ -80,7 +81,8 @@ class DeployConsoleSettingsDexConfig(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"connectors": obj.get("connectors")
"ephemeral_1h_input_tokens": obj.get("ephemeral_1h_input_tokens"),
"ephemeral_5m_input_tokens": obj.get("ephemeral_5m_input_tokens")
})
return _obj
@@ -27,11 +27,13 @@ class BenchmarkAdmission(BaseModel):
BenchmarkAdmission
""" # noqa: E501
benchmarks: Optional[List[StrictStr]] = Field(default=None, description="Benchmarks are the catalog ids admitted.")
by: Optional[StrictStr] = Field(default=None, description="By is the verified user who asked for it.")
endpoint: Optional[StrictStr] = Field(default=None, description="Endpoint is the caller's own endpoint the run targets.")
model: Optional[StrictStr] = Field(default=None, description="Model is the catalog model the run targets.")
note: Optional[StrictStr] = Field(default=None, description="Note explains what admission does and does not promise.")
org: Optional[StrictStr] = Field(default=None, description="Org is the org the run is admitted for: the caller's verified org.")
status: Optional[StrictStr] = Field(default=None, description="Status is \"queued\": the run is admitted, not finished.")
__properties: ClassVar[List[str]] = ["benchmarks", "endpoint", "model", "note", "status"]
__properties: ClassVar[List[str]] = ["benchmarks", "by", "endpoint", "model", "note", "org", "status"]
model_config = ConfigDict(
populate_by_name=True,
@@ -85,9 +87,11 @@ class BenchmarkAdmission(BaseModel):
_obj = cls.model_validate({
"benchmarks": obj.get("benchmarks"),
"by": obj.get("by"),
"endpoint": obj.get("endpoint"),
"model": obj.get("model"),
"note": obj.get("note"),
"org": obj.get("org"),
"status": obj.get("status")
})
return _obj
@@ -29,14 +29,16 @@ class BenchmarkClaimRow(BaseModel):
""" # noqa: E501
at: Optional[datetime] = Field(default=None, description="At is when a stored row was recorded. Zero for a seed row.")
benchmark: Optional[StrictStr] = Field(default=None, description="Benchmark is the canonical test id the claim is about, from /catalog.")
by: Optional[StrictStr] = Field(default=None, description="By is who recorded it, when the caller said.")
by: Optional[StrictStr] = Field(default=None, description="By is the verified user who recorded a stored row. Empty for a seed row.")
model: Optional[StrictStr] = Field(default=None, description="Model is the system the score is claimed for.")
origin: Optional[StrictStr] = Field(default=None, description="Origin is \"seed\" for a compiled row and \"stored\" for one written through this surface. It is the difference between what we shipped and what an operator has since corrected.")
org: Optional[StrictStr] = Field(default=None, description="Org is the org that made the claim. \"admin\" is the platform's own curated reading; any other org is that org's claim, not the platform's. Empty on an unattributed row.")
origin: Optional[StrictStr] = Field(default=None, description="Origin is \"seed\" for a compiled row, \"stored\" for one a verified caller wrote through this surface, and \"unattributed\" for a stored row no verified caller vouches for, which never reaches the leaderboard.")
protocol: Optional[StrictStr] = Field(default=None, description="Protocol records HOW it was scored — provider-reported, agentic, third-party-leaderboard — so a provider card is never read as a measurement.")
provider: Optional[StrictStr] = Field(default=None, description="Provider is who the claim belongs to — the lab or leaderboard whose number this is.")
score: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Score is the reported aggregate, as a percentage.")
source: Optional[StrictStr] = Field(default=None, description="Source is the citation the row was read from.")
__properties: ClassVar[List[str]] = ["at", "benchmark", "by", "model", "origin", "protocol", "provider", "score", "source"]
visibility: Optional[StrictStr] = Field(default=None, description="Visibility is \"public\", readable by anyone, or \"private\", readable by Org's own members only. Only the curator's public claims reach the leaderboard.")
__properties: ClassVar[List[str]] = ["at", "benchmark", "by", "model", "org", "origin", "protocol", "provider", "score", "source", "visibility"]
model_config = ConfigDict(
populate_by_name=True,
@@ -93,11 +95,13 @@ class BenchmarkClaimRow(BaseModel):
"benchmark": obj.get("benchmark"),
"by": obj.get("by"),
"model": obj.get("model"),
"org": obj.get("org"),
"origin": obj.get("origin"),
"protocol": obj.get("protocol"),
"provider": obj.get("provider"),
"score": obj.get("score"),
"source": obj.get("source")
"source": obj.get("source"),
"visibility": obj.get("visibility")
})
return _obj
@@ -27,7 +27,7 @@ class BenchmarkClaimsOut(BaseModel):
"""
BenchmarkClaimsOut
""" # noqa: E501
data: Optional[List[BenchmarkClaimRow]] = Field(default=None, description="Data is one row per (benchmark, model, SOURCE) — every independent claim, not one per model. Effective values only: the row that wins after layering for each source, never the superseded readings behind it.")
data: Optional[List[BenchmarkClaimRow]] = Field(default=None, description="Data is one row per (org, benchmark, model, SOURCE) — every independent claim, not one per model. Effective values only: the row that wins after layering for each key, never the superseded readings behind it.")
total: Optional[StrictInt] = Field(default=None, description="Total is how many rows Data holds.")
__properties: ClassVar[List[str]] = ["data", "total"]
@@ -29,7 +29,7 @@ class BenchmarkLeaderRow(BaseModel):
""" # noqa: E501
ci_high: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="CIHigh is the upper bound of that interval. Wilson rather than the normal approximation because the normal one produces bounds past 100 exactly where benchmark scores live — at 194/198 that is the top of the board, not a corner case.", alias="ciHigh")
ci_low: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="CILow and CIHigh are the 95% Wilson interval on Measured, in percent. They are what makes the score comparable: at n=198 a 98% carries roughly ±2 points, so most differences at the top of a board are not distinguishable and a bare number implies a precision it does not have. Absent when there is no measurement.", alias="ciLow")
claims: Optional[StrictInt] = Field(default=None, description="Claims is how many independent claims exist for this model on this benchmark. More than one means several sources reported it.")
claims: Optional[StrictInt] = Field(default=None, description="Claims is how many independent claims the platform holds for this model on this benchmark. More than one means several sources reported it.")
gap: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="published − measured (the arena signal)")
mean: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Mean is the unweighted average of every claim, which answers a different question from Published: what the field says on average, rather than what the vendor says about itself. With one claim the two are equal.")
measured: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="hanzo-measured accuracy % (nil if unrun)")
@@ -37,7 +37,7 @@ class BenchmarkLeaderRow(BaseModel):
model: Optional[StrictStr] = Field(default=None, description="the model this row scores")
n: Optional[StrictInt] = Field(default=None, description="coverage — NEVER compare across different n")
protocol: Optional[StrictStr] = Field(default=None, description="how the vendor scored their claim: single-attempt, pass@k or agentic")
published: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="provider-claimed % (nil if none)")
published: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="the platform's selected claim % (nil if none)")
run: Optional[StrictStr] = Field(default=None, description="Run names the measurement Measured came from, and MeasuredAt is when it ran. A score with no date is not a fact about a model, it is a fact about a model on a day — and models change, so the date is what makes the number checkable rather than merely quoted.")
spread: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Spread is the distance between the highest and lowest of them, nil when there is only one. It is the disagreement AMONG sources, which a single Published number cannot show — signal in the same way the published-minus-measured gap is.")
__properties: ClassVar[List[str]] = ["ciHigh", "ciLow", "claims", "gap", "mean", "measured", "measuredAt", "model", "n", "protocol", "published", "run", "spread"]
+1 -1
View File
@@ -29,7 +29,7 @@ class BenchmarkPreset(BaseModel):
arms: Optional[List[StrictStr]] = Field(default=None, description="the blend — model ids from the arena")
name: Optional[StrictStr] = Field(default=None, description="served as enso-<name>")
note: Optional[StrictStr] = Field(default=None, description="why this blend (audit)")
owner: Optional[StrictStr] = Field(default=None, description="scoping org (never cross-tenant)")
owner: Optional[StrictStr] = Field(default=None, description="the org the blend belongs to: the writer's verified org, never a value sent")
panel: Optional[StrictInt] = Field(default=None, description="fan-out width (>=1)")
rank: Optional[List[StrictStr]] = Field(default=None, description="escalation order over arms")
__properties: ClassVar[List[str]] = ["arms", "name", "note", "owner", "panel", "rank"]
@@ -27,11 +27,12 @@ class BenchmarkPresetAccepted(BaseModel):
"""
BenchmarkPresetAccepted
""" # noqa: E501
by: Optional[StrictStr] = Field(default=None, description="By is the verified user who composed it.")
note: Optional[StrictStr] = Field(default=None, description="Note explains what acceptance does and does not promise.")
preset: Optional[BenchmarkPreset] = Field(default=None, description="Preset is the blend with its defaults filled in.")
preset: Optional[BenchmarkPreset] = Field(default=None, description="Preset is the blend with its defaults filled in and Owner set to the caller's verified org.")
served_as: Optional[StrictStr] = Field(default=None, description="ServedAs is the model id the serving layer would resolve this blend under.")
status: Optional[StrictStr] = Field(default=None, description="Status is \"accepted\": the blend is well-formed, not that it is now served.")
__properties: ClassVar[List[str]] = ["note", "preset", "served_as", "status"]
__properties: ClassVar[List[str]] = ["by", "note", "preset", "served_as", "status"]
model_config = ConfigDict(
populate_by_name=True,
@@ -87,6 +88,7 @@ class BenchmarkPresetAccepted(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"by": obj.get("by"),
"note": obj.get("note"),
"preset": BenchmarkPreset.from_dict(obj["preset"]) if obj.get("preset") is not None else None,
"served_as": obj.get("served_as"),
@@ -27,9 +27,9 @@ class BenchmarkPutClaimsIn(BaseModel):
"""
BenchmarkPutClaimsIn
""" # noqa: E501
by: Optional[StrictStr] = Field(default=None, description="By is who is recording them — a person, or the importer's name.")
data: Optional[List[BenchmarkPublishedClaim]] = Field(default=None, description="Data is the claims to record. One row is a correction; many is an import. There is no separate bulk endpoint because there is no separate operation: importing a leaderboard and fixing one number are the same write.")
__properties: ClassVar[List[str]] = ["by", "data"]
visibility: Optional[StrictStr] = Field(default=None, description="Visibility is who may read every row in Data: \"private\", the default, keeps them to the caller's org; \"public\" shows them to anyone. Restating a claim with the other value moves it.")
__properties: ClassVar[List[str]] = ["data", "visibility"]
model_config = ConfigDict(
populate_by_name=True,
@@ -89,8 +89,8 @@ class BenchmarkPutClaimsIn(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"by": obj.get("by"),
"data": [BenchmarkPublishedClaim.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None
"data": [BenchmarkPublishedClaim.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None,
"visibility": obj.get("visibility")
})
return _obj
@@ -26,9 +26,11 @@ class BenchmarkPutClaimsOut(BaseModel):
"""
BenchmarkPutClaimsOut
""" # noqa: E501
org: Optional[StrictStr] = Field(default=None, description="Org is the org the rows were recorded under: the caller's own.")
recorded: Optional[StrictInt] = Field(default=None, description="Recorded is how many rows were written.")
rejected: Optional[List[StrictStr]] = Field(default=None, description="Rejected names the rows that were not, and why.")
__properties: ClassVar[List[str]] = ["recorded", "rejected"]
visibility: Optional[StrictStr] = Field(default=None, description="Visibility is who may read them.")
__properties: ClassVar[List[str]] = ["org", "recorded", "rejected", "visibility"]
model_config = ConfigDict(
populate_by_name=True,
@@ -81,8 +83,10 @@ class BenchmarkPutClaimsOut(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"org": obj.get("org"),
"recorded": obj.get("recorded"),
"rejected": obj.get("rejected")
"rejected": obj.get("rejected"),
"visibility": obj.get("visibility")
})
return _obj
+3 -1
View File
@@ -26,10 +26,11 @@ class BrowserTagOut(BaseModel):
"""
BrowserTagOut
""" # noqa: E501
events: Optional[Dict[str, StrictStr]] = None
id: Optional[StrictStr] = None
platform: Optional[StrictStr] = None
type: Optional[StrictStr] = None
__properties: ClassVar[List[str]] = ["id", "platform", "type"]
__properties: ClassVar[List[str]] = ["events", "id", "platform", "type"]
model_config = ConfigDict(
populate_by_name=True,
@@ -82,6 +83,7 @@ class BrowserTagOut(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"events": obj.get("events"),
"id": obj.get("id"),
"platform": obj.get("platform"),
"type": obj.get("type")
@@ -1,89 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class CompanyDecisionIn(BaseModel):
"""
CompanyDecisionIn
""" # noqa: E501
email: Optional[StrictStr] = Field(default=None, description="Email identifies the founder on the formation.")
status: Optional[StrictStr] = Field(default=None, description="Status is the decision: reviewer_confirmed or failed. Nothing else is accepted.")
__properties: ClassVar[List[str]] = ["email", "status"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of CompanyDecisionIn from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of CompanyDecisionIn from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"email": obj.get("email"),
"status": obj.get("status")
})
return _obj
@@ -17,19 +17,23 @@ import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool
from pydantic import BaseModel, ConfigDict, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.licensing_revocation_entry import LicensingRevocationEntry
from hanzoai.cloud.models.grants import Grants
from typing import Optional, Set
from typing_extensions import Self
class LicensingRevokeResponse(BaseModel):
class Decision(BaseModel):
"""
LicensingRevokeResponse
Decision
""" # noqa: E501
entry: Optional[LicensingRevocationEntry] = Field(default=None, description="Entry is the stored revocation, including who recorded it and when.")
revoked: Optional[StrictBool] = Field(default=None, description="Revoked is always true — a failure is an error status, not a false here.")
__properties: ClassVar[List[str]] = ["entry", "revoked"]
defaults: Optional[Grants] = None
gpc: Optional[StrictBool] = None
mode: Optional[StrictStr] = None
notice: Optional[StrictStr] = None
region: Optional[StrictStr] = None
version: Optional[StrictInt] = None
__properties: ClassVar[List[str]] = ["defaults", "gpc", "mode", "notice", "region", "version"]
model_config = ConfigDict(
populate_by_name=True,
@@ -49,7 +53,7 @@ class LicensingRevokeResponse(BaseModel):
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of LicensingRevokeResponse from a JSON string"""
"""Create an instance of Decision from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
@@ -70,14 +74,14 @@ class LicensingRevokeResponse(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of entry
if self.entry:
_dict['entry'] = self.entry.to_dict()
# override the default output from pydantic by calling `to_dict()` of defaults
if self.defaults:
_dict['defaults'] = self.defaults.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of LicensingRevokeResponse from a dict"""
"""Create an instance of Decision from a dict"""
if obj is None:
return None
@@ -85,8 +89,12 @@ class LicensingRevokeResponse(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"entry": LicensingRevocationEntry.from_dict(obj["entry"]) if obj.get("entry") is not None else None,
"revoked": obj.get("revoked")
"defaults": Grants.from_dict(obj["defaults"]) if obj.get("defaults") is not None else None,
"gpc": obj.get("gpc"),
"mode": obj.get("mode"),
"notice": obj.get("notice"),
"region": obj.get("region"),
"version": obj.get("version")
})
return _obj
@@ -1,91 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class DeployAppliedResource(BaseModel):
"""
DeployAppliedResource
""" # noqa: E501
message: Optional[StrictStr] = Field(default=None, description="Message is the engine's own sentence about this object — the apiserver's refusal on a failure, and typically empty on success. It is for a human reading a failed run, not a value to branch on.")
resource: Optional[StrictStr] = Field(default=None, description="Resource identifies the object as group/version/kind/namespace/name, the engine's own key. It is stable across runs, so two reports can be diffed on it.")
status: Optional[StrictStr] = Field(default=None, description="Status is what happened to this object, from the engine's closed vocabulary: `Synced` (applied), `Pruned` (deleted because the source no longer declares it), `SyncFailed` (refused — read Message) and `PruneSkipped` (deletion was declined). It is the per-object detail behind the report's counts.")
__properties: ClassVar[List[str]] = ["message", "resource", "status"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployAppliedResource from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployAppliedResource from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"message": obj.get("message"),
"resource": obj.get("resource"),
"status": obj.get("status")
})
return _obj
@@ -1,129 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.deploy_console_settings_dex_config import DeployConsoleSettingsDexConfig
from hanzoai.cloud.models.deploy_console_settings_google_analytics import DeployConsoleSettingsGoogleAnalytics
from hanzoai.cloud.models.deploy_console_settings_help import DeployConsoleSettingsHelp
from typing import Optional, Set
from typing_extensions import Self
class DeployConsoleSettings(BaseModel):
"""
DeployConsoleSettings
""" # noqa: E501
apps_in_any_namespace_enabled: Optional[StrictBool] = Field(default=None, description="AppsInAnyNamespaceEnabled is false: applications are projected from operator App CRs in the platform namespaces, never declared in an arbitrary one.", alias="appsInAnyNamespaceEnabled")
dex_config: Optional[DeployConsoleSettingsDexConfig] = Field(default=None, alias="dexConfig")
exec_enabled: Optional[StrictBool] = Field(default=None, description="ExecEnabled is false: this plane serves no container terminal.", alias="execEnabled")
google_analytics: Optional[DeployConsoleSettingsGoogleAnalytics] = Field(default=None, alias="googleAnalytics")
help: Optional[DeployConsoleSettingsHelp] = None
hydrator_enabled: Optional[StrictBool] = Field(default=None, description="HydratorEnabled is false: there is no manifest hydrator on this plane.", alias="hydratorEnabled")
kustomize_versions: Optional[List[StrictStr]] = Field(default=None, description="KustomizeVersions is always empty: an App CR is an image pin, not a kustomize build.", alias="kustomizeVersions")
oidc_config: Optional[Dict[str, Any]] = Field(default=None, alias="oidcConfig")
plugins: Optional[List[Dict[str, Any]]] = Field(default=None, description="Plugins is always empty: this plane loads no argocd config-management plugins.")
status_badge_enabled: Optional[StrictBool] = Field(default=None, description="StatusBadgeEnabled is false: no badge endpoint is served.", alias="statusBadgeEnabled")
status_badge_root_url: Optional[StrictStr] = Field(default=None, description="StatusBadgeRootUrl is always empty, for the same reason.", alias="statusBadgeRootUrl")
sync_with_replace_allowed: Optional[StrictBool] = Field(default=None, description="SyncWithReplaceAllowed is false: a sync here asks the operator to reconcile an App CR, and never replaces an object.", alias="syncWithReplaceAllowed")
ui_banner_content: Optional[StrictStr] = Field(default=None, description="UiBannerContent is always empty: this console shows no banner.", alias="uiBannerContent")
ui_css_url: Optional[StrictStr] = Field(default=None, description="UiCssURL is always empty: no stylesheet is injected.", alias="uiCssURL")
url: Optional[StrictStr] = Field(default=None, description="Url is the console's public origin, https://cd.hanzo.ai.")
user_logins_disabled: Optional[StrictBool] = Field(default=None, description="UserLoginsDisabled is true: the SPA must not render its own username/password form. Signing in goes through IAM, at GET /v1/deploy/login.", alias="userLoginsDisabled")
__properties: ClassVar[List[str]] = ["appsInAnyNamespaceEnabled", "dexConfig", "execEnabled", "googleAnalytics", "help", "hydratorEnabled", "kustomizeVersions", "oidcConfig", "plugins", "statusBadgeEnabled", "statusBadgeRootUrl", "syncWithReplaceAllowed", "uiBannerContent", "uiCssURL", "url", "userLoginsDisabled"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployConsoleSettings from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of dex_config
if self.dex_config:
_dict['dexConfig'] = self.dex_config.to_dict()
# override the default output from pydantic by calling `to_dict()` of google_analytics
if self.google_analytics:
_dict['googleAnalytics'] = self.google_analytics.to_dict()
# override the default output from pydantic by calling `to_dict()` of help
if self.help:
_dict['help'] = self.help.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployConsoleSettings from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"appsInAnyNamespaceEnabled": obj.get("appsInAnyNamespaceEnabled"),
"dexConfig": DeployConsoleSettingsDexConfig.from_dict(obj["dexConfig"]) if obj.get("dexConfig") is not None else None,
"execEnabled": obj.get("execEnabled"),
"googleAnalytics": DeployConsoleSettingsGoogleAnalytics.from_dict(obj["googleAnalytics"]) if obj.get("googleAnalytics") is not None else None,
"help": DeployConsoleSettingsHelp.from_dict(obj["help"]) if obj.get("help") is not None else None,
"hydratorEnabled": obj.get("hydratorEnabled"),
"kustomizeVersions": obj.get("kustomizeVersions"),
"oidcConfig": obj.get("oidcConfig"),
"plugins": obj.get("plugins"),
"statusBadgeEnabled": obj.get("statusBadgeEnabled"),
"statusBadgeRootUrl": obj.get("statusBadgeRootUrl"),
"syncWithReplaceAllowed": obj.get("syncWithReplaceAllowed"),
"uiBannerContent": obj.get("uiBannerContent"),
"uiCssURL": obj.get("uiCssURL"),
"url": obj.get("url"),
"userLoginsDisabled": obj.get("userLoginsDisabled")
})
return _obj
@@ -1,89 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class DeployConsoleSettingsGoogleAnalytics(BaseModel):
"""
GoogleAnalytics carries no tracking id and anonymizes users — this console reports no analytics.
""" # noqa: E501
anonymize_users: Optional[StrictBool] = Field(default=None, alias="anonymizeUsers")
tracking_id: Optional[StrictStr] = Field(default=None, alias="trackingID")
__properties: ClassVar[List[str]] = ["anonymizeUsers", "trackingID"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployConsoleSettingsGoogleAnalytics from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployConsoleSettingsGoogleAnalytics from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"anonymizeUsers": obj.get("anonymizeUsers"),
"trackingID": obj.get("trackingID")
})
return _obj
@@ -1,91 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class DeployConsoleSettingsHelp(BaseModel):
"""
Help carries no chat link and no binary download URLs.
""" # noqa: E501
binary_urls: Optional[Dict[str, StrictStr]] = Field(default=None, alias="binaryUrls")
chat_text: Optional[StrictStr] = Field(default=None, alias="chatText")
chat_url: Optional[StrictStr] = Field(default=None, alias="chatUrl")
__properties: ClassVar[List[str]] = ["binaryUrls", "chatText", "chatUrl"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployConsoleSettingsHelp from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployConsoleSettingsHelp from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"binaryUrls": obj.get("binaryUrls"),
"chatText": obj.get("chatText"),
"chatUrl": obj.get("chatUrl")
})
return _obj
@@ -1,127 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.deploy_git_ops_deploy import DeployGitOpsDeploy
from hanzoai.cloud.models.deploy_git_ops_operation import DeployGitOpsOperation
from typing import Optional, Set
from typing_extensions import Self
class DeployGitOpsApp(BaseModel):
"""
DeployGitOpsApp
""" # noqa: E501
automated: Optional[StrictBool] = Field(default=None, description="Automated is whether CD applies new commits without being asked. It reads the PRESENCE of spec.syncPolicy.automated, which is a block rather than a boolean; false means drift is reported and nothing moves.")
health: Optional[StrictStr] = Field(default=None, description="Health is CD's verdict on the objects it manages, verbatim: Healthy, Progressing, Degraded, Suspended, Missing or Unknown.")
history: Optional[List[DeployGitOpsDeploy]] = Field(default=None, description="History is the recent deploy log, NEWEST FIRST and capped at ten. CD appends oldest-first and bounds the list itself; the reversal happens here so a caller never has to know the storage order to show what shipped last. Empty (never null) for an Application that has deployed nothing.")
name: Optional[StrictStr] = Field(default=None, description="Name is what CD calls this tracked source, not the workload it deploys — the Application CR's own metadata.name. The fleet ApplicationSet mints these as <namespace>-<app>.")
namespace: Optional[StrictStr] = Field(default=None, description="Namespace is where the Application OBJECT lives: CD's own controller namespace, which is the same one for every row here. It is NOT the destination the workloads land in — this endpoint lists cluster-wide and never reads spec.destination.")
operation: Optional[DeployGitOpsOperation] = Field(default=None, description="Operation is the last sync attempt and how it ended. Absent when CD has run none, which is the honest gap between \"never tried\" and \"tried and failed\".")
path: Optional[StrictStr] = Field(default=None, description="Path is the directory inside that repository CD renders, relative to its root.")
project: Optional[StrictStr] = Field(default=None, description="Project is the AppProject fence the sync is admitted under: which repos this Application may pull from and which destinations it may write to. Empty when the CR declares none.")
reconciled_at: Optional[StrictStr] = Field(default=None, description="ReconciledAt is when CD last COMPARED this Application against git, RFC 3339. It moves on every comparison, including ones that applied nothing.", alias="reconciledAt")
repo_url: Optional[StrictStr] = Field(default=None, description="RepoURL is the git repository CD polls for this Application's desired state.", alias="repoURL")
resources: Optional[StrictInt] = Field(default=None, description="Resources is how MANY objects CD manages for this Application (len(status.resources)) — a count, not the objects. Zero for an Application CD has not reconciled.")
revision: Optional[StrictStr] = Field(default=None, description="Revision is the commit CD last APPLIED (status.sync.revision). Empty means it has applied none — never read that as the head of TargetRevision.")
self_heal: Optional[StrictBool] = Field(default=None, description="SelfHeal is whether CD also reverts changes made directly in the cluster (syncPolicy.automated.selfHeal). Meaningless unless Automated.", alias="selfHeal")
sync: Optional[StrictStr] = Field(default=None, description="Sync is CD's verdict on git versus cluster, verbatim: Synced, OutOfSync or Unknown. It is about the applied REVISION, so an Application can be Synced to a commit that is several behind the branch it tracks.")
target_revision: Optional[StrictStr] = Field(default=None, description="TargetRevision is the git ref CD TRACKS — usually a branch such as \"main\". It is what CD aims at; Revision is what it has reached.", alias="targetRevision")
__properties: ClassVar[List[str]] = ["automated", "health", "history", "name", "namespace", "operation", "path", "project", "reconciledAt", "repoURL", "resources", "revision", "selfHeal", "sync", "targetRevision"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployGitOpsApp from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in history (list)
_items = []
if self.history:
for _item_history in self.history:
if _item_history:
_items.append(_item_history.to_dict())
_dict['history'] = _items
# override the default output from pydantic by calling `to_dict()` of operation
if self.operation:
_dict['operation'] = self.operation.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployGitOpsApp from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"automated": obj.get("automated"),
"health": obj.get("health"),
"history": [DeployGitOpsDeploy.from_dict(_item) for _item in obj["history"]] if obj.get("history") is not None else None,
"name": obj.get("name"),
"namespace": obj.get("namespace"),
"operation": DeployGitOpsOperation.from_dict(obj["operation"]) if obj.get("operation") is not None else None,
"path": obj.get("path"),
"project": obj.get("project"),
"reconciledAt": obj.get("reconciledAt"),
"repoURL": obj.get("repoURL"),
"resources": obj.get("resources"),
"revision": obj.get("revision"),
"selfHeal": obj.get("selfHeal"),
"sync": obj.get("sync"),
"targetRevision": obj.get("targetRevision")
})
return _obj
@@ -1,95 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class DeployGitOpsDeploy(BaseModel):
"""
DeployGitOpsDeploy
""" # noqa: E501
automated: Optional[StrictBool] = Field(default=None, description="Automated is whether CD started this deploy itself, from its own polling of the tracked git ref (initiatedBy.automated), rather than someone asking for it.")
deployed_at: Optional[StrictStr] = Field(default=None, description="DeployedAt is when the apply finished, RFC 3339. Absent when CD recorded none.", alias="deployedAt")
id: Optional[StrictInt] = Field(default=None, description="ID is CD's own sequence number for this deploy (status.history[].id). It increases with every applied revision, so the largest id in `history` is the most recent deploy — which is the first entry, since the list is reversed.")
revision: Optional[StrictStr] = Field(default=None, description="Revision is the git commit this deploy applied, as CD recorded it.")
started_at: Optional[StrictStr] = Field(default=None, description="StartedAt is when CD began applying the revision (deployStartedAt), RFC 3339. Absent when CD recorded none.", alias="startedAt")
__properties: ClassVar[List[str]] = ["automated", "deployedAt", "id", "revision", "startedAt"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployGitOpsDeploy from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployGitOpsDeploy from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"automated": obj.get("automated"),
"deployedAt": obj.get("deployedAt"),
"id": obj.get("id"),
"revision": obj.get("revision"),
"startedAt": obj.get("startedAt")
})
return _obj
@@ -1,95 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class DeployGitOpsOperation(BaseModel):
"""
DeployGitOpsOperation
""" # noqa: E501
finished_at: Optional[StrictStr] = Field(default=None, description="FinishedAt is when it ended, RFC 3339. Absent while the phase is Running.", alias="finishedAt")
message: Optional[StrictStr] = Field(default=None, description="Message is CD's account of the phase — \"successfully synced (all tasks run)\" for a Succeeded operation, the reason it stopped for a Failed one.")
phase: Optional[StrictStr] = Field(default=None, description="Phase is how the last sync operation ended, in CD's own vocabulary: Running, Succeeded or Failed. It is never empty — an Application whose phase is empty has no operation at all and omits this whole object.")
revision: Optional[StrictStr] = Field(default=None, description="Revision is the commit this operation ATTEMPTED (operationState.syncResult). It differs from the Application's own revision exactly when the attempt did not land: revision is the last commit CD got applied, this is the last one it tried.")
started_at: Optional[StrictStr] = Field(default=None, description="StartedAt is when the operation began, RFC 3339.", alias="startedAt")
__properties: ClassVar[List[str]] = ["finishedAt", "message", "phase", "revision", "startedAt"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployGitOpsOperation from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployGitOpsOperation from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"finishedAt": obj.get("finishedAt"),
"message": obj.get("message"),
"phase": obj.get("phase"),
"revision": obj.get("revision"),
"startedAt": obj.get("startedAt")
})
return _obj
@@ -1,99 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.deploy_git_ops_app import DeployGitOpsApp
from typing import Optional, Set
from typing_extensions import Self
class DeployGitOpsPlane(BaseModel):
"""
DeployGitOpsPlane
""" # noqa: E501
applications: Optional[List[DeployGitOpsApp]] = Field(default=None, description="Applications is every CD Application in the cluster, ordered by namespace then name. Empty (never null) when the plane is not installed, and equally empty when it is installed and tracks nothing — Installed is what separates those two.")
installed: Optional[StrictBool] = Field(default=None, description="Installed is whether this cluster serves the CD Application CRD at all. False is a fact about the cluster, not a failure of the request: the caller says \"no CD plane here\" rather than rendering an error it cannot act on.")
reason: Optional[StrictStr] = Field(default=None, description="Reason says why the plane is absent, in words a caller can show. Empty when Installed.")
__properties: ClassVar[List[str]] = ["applications", "installed", "reason"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployGitOpsPlane from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in applications (list)
_items = []
if self.applications:
for _item_applications in self.applications:
if _item_applications:
_items.append(_item_applications.to_dict())
_dict['applications'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployGitOpsPlane from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"applications": [DeployGitOpsApp.from_dict(_item) for _item in obj["applications"]] if obj.get("applications") is not None else None,
"installed": obj.get("installed"),
"reason": obj.get("reason")
})
return _obj
@@ -1,115 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.deploy_applied_resource import DeployAppliedResource
from hanzoai.cloud.models.deploy_reconcile_source import DeployReconcileSource
from typing import Optional, Set
from typing_extensions import Self
class DeployReconcileReport(BaseModel):
"""
DeployReconcileReport
""" # noqa: E501
declared: Optional[StrictInt] = Field(default=None, description="Declared is how many objects the rendered source declares — the denominator the three outcome counts below are read against. Zero means the render produced nothing, which trips the prune fuse rather than sweeping the fleet.")
failed: Optional[StrictInt] = Field(default=None, description="Failed is how many objects the apply could not reconcile. Non-zero is a PARTIAL run reported at 200: the engine applied what it could and each failure names itself in Results, so a caller reads this number rather than the status code to learn whether the fleet matches the source.")
instance: Optional[StrictStr] = Field(default=None, description="Instance is the tracking id this run stamps on everything it manages, so a later run can tell the objects it owns from objects another instance declares. DEPLOY_ENGINE_INSTANCE names it; the default is `universe`.")
prune: Optional[StrictBool] = Field(default=None, description="Prune reports whether DELETION was enabled for this run. False means an object the source no longer declares was left alone rather than removed, so a zero Pruned below means \"nothing to delete\" only when this is true.")
pruned: Optional[StrictInt] = Field(default=None, description="Pruned is how many live objects this run DELETED because the source no longer declares them. Always 0 when Prune is false.")
results: Optional[List[DeployAppliedResource]] = Field(default=None, description="Results is one entry per object the run acted on, in the order the engine applied them. Empty (never null) when the run reconciled nothing.")
revision: Optional[StrictStr] = Field(default=None, description="Revision is the source commit this run applied, as the source resolved it — a git commit SHA, not an image tag. It is what an operator cites when asking what the cluster was last made to match.")
source: Optional[DeployReconcileSource] = Field(default=None, description="Source is the git coordinate the run rendered. It is this deployment's own configuration echoed back, never a request parameter, and it is reported so a reader of the answer knows WHICH tree the revision names.")
synced: Optional[StrictInt] = Field(default=None, description="Synced is how many objects the run applied successfully.")
__properties: ClassVar[List[str]] = ["declared", "failed", "instance", "prune", "pruned", "results", "revision", "source", "synced"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployReconcileReport from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in results (list)
_items = []
if self.results:
for _item_results in self.results:
if _item_results:
_items.append(_item_results.to_dict())
_dict['results'] = _items
# override the default output from pydantic by calling `to_dict()` of source
if self.source:
_dict['source'] = self.source.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployReconcileReport from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"declared": obj.get("declared"),
"failed": obj.get("failed"),
"instance": obj.get("instance"),
"prune": obj.get("prune"),
"pruned": obj.get("pruned"),
"results": [DeployAppliedResource.from_dict(_item) for _item in obj["results"]] if obj.get("results") is not None else None,
"revision": obj.get("revision"),
"source": DeployReconcileSource.from_dict(obj["source"]) if obj.get("source") is not None else None,
"synced": obj.get("synced")
})
return _obj
@@ -1,91 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class DeployReconcileSource(BaseModel):
"""
DeployReconcileSource
""" # noqa: E501
path: Optional[StrictStr] = Field(default=None, description="Path is the directory WITHIN the repository that is rendered — everything outside it is not this plane's desired state and is never applied.")
ref: Optional[StrictStr] = Field(default=None, description="Ref is the branch or tag the revision was resolved from.")
repo: Optional[StrictStr] = Field(default=None, description="Repo is the clone URL of the repository holding the desired state.")
__properties: ClassVar[List[str]] = ["path", "ref", "repo"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployReconcileSource from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployReconcileSource from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"path": obj.get("path"),
"ref": obj.get("ref"),
"repo": obj.get("repo")
})
return _obj
@@ -1,95 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class DeployVersionMessage(BaseModel):
"""
DeployVersionMessage
""" # noqa: E501
build_date: Optional[StrictStr] = Field(default=None, description="BuildDate is the time THIS RESPONSE was generated, in RFC 3339 — not a build timestamp. There is no argocd build here to report one for.", alias="BuildDate")
compiler: Optional[StrictStr] = Field(default=None, description="Compiler is the constant \"gc\" the SPA expects; it is not read from this process.", alias="Compiler")
go_version: Optional[StrictStr] = Field(default=None, description="GoVersion is always empty.", alias="GoVersion")
platform: Optional[StrictStr] = Field(default=None, description="Platform is the constant \"linux/amd64\" the SPA expects; it is not this process's own GOOS/GOARCH.", alias="Platform")
version: Optional[StrictStr] = Field(default=None, description="Version names the projection, \"hanzo-cd (projection)\".", alias="Version")
__properties: ClassVar[List[str]] = ["BuildDate", "Compiler", "GoVersion", "Platform", "Version"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of DeployVersionMessage from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DeployVersionMessage from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"BuildDate": obj.get("BuildDate"),
"Compiler": obj.get("Compiler"),
"GoVersion": obj.get("GoVersion"),
"Platform": obj.get("Platform"),
"Version": obj.get("Version")
})
return _obj
@@ -1,103 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, StrictBool, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class EngineEngineReplica(BaseModel):
"""
EngineEngineReplica
""" # noqa: E501
capacity: Optional[StrictInt] = None
healthy: Optional[StrictBool] = None
id: Optional[StrictStr] = None
inflight: Optional[StrictInt] = None
roles: Optional[List[StrictStr]] = None
ttft_ewma_ms: Optional[Union[StrictFloat, StrictInt]] = None
upstream_model: Optional[StrictStr] = None
url: Optional[StrictStr] = None
weight: Optional[StrictInt] = None
__properties: ClassVar[List[str]] = ["capacity", "healthy", "id", "inflight", "roles", "ttft_ewma_ms", "upstream_model", "url", "weight"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of EngineEngineReplica from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of EngineEngineReplica from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"capacity": obj.get("capacity"),
"healthy": obj.get("healthy"),
"id": obj.get("id"),
"inflight": obj.get("inflight"),
"roles": obj.get("roles"),
"ttft_ewma_ms": obj.get("ttft_ewma_ms"),
"upstream_model": obj.get("upstream_model"),
"url": obj.get("url"),
"weight": obj.get("weight")
})
return _obj
@@ -1,95 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class EngineEngineReplicaUpdate(BaseModel):
"""
EngineEngineReplicaUpdate
""" # noqa: E501
capacity: Optional[StrictInt] = None
id: Optional[StrictStr] = None
model: Optional[StrictStr] = None
roles: Optional[List[StrictStr]] = None
weight: Optional[StrictInt] = None
__properties: ClassVar[List[str]] = ["capacity", "id", "model", "roles", "weight"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of EngineEngineReplicaUpdate from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of EngineEngineReplicaUpdate from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"capacity": obj.get("capacity"),
"id": obj.get("id"),
"model": obj.get("model"),
"roles": obj.get("roles"),
"weight": obj.get("weight")
})
return _obj
@@ -32,7 +32,7 @@ class EventHealthReport(BaseModel):
datastore: Optional[StrictBool] = Field(default=None, description="Datastore reports whether the shared warehouse client has a live connection. It is load-bearing for the READ path: false is one of the two ways this answers 503.")
lenses: Optional[EventHealthLenses] = Field(default=None, description="Lenses is per-lens table availability, probed only when connected — so it is absent from a degraded report, which has nothing to say about tables it could not reach.")
lost: Optional[EventLoss] = Field(default=None, description="Lost is the count of facts the sink irrecoverably dropped since boot (warehouse.go). It is reported on the DEGRADED report too, and deliberately: a warehouse that is unreachable is exactly when facts start failing their deliveries, so suppressing the number here would hide it precisely when it moves. ANY NON-ZERO VALUE IS AN ALARM — it counts data the endpoint already answered 200 for.")
plane: Optional[EventHealthPlane] = Field(default=None, description="Plane reports the event plane — the bus and the stream every accepted event is published to BEFORE any of it reaches the warehouse. It is load-bearing for the WRITE path, and it is here because its absence was a real outage: this endpoint answered 200/ok on warehouse connectivity alone while every POST /v1/event 503'd on a stream that could not bind, so 100% ingest loss was invisible to monitoring. A probe that cannot see the write path cannot report the write path.")
plane: Optional[EventHealthPlane] = Field(default=None, description="Plane reports the event plane — the bus and the stream every accepted event is published to BEFORE any of it reaches the warehouse. It is load-bearing for the WRITE path: warehouse connectivity alone says nothing about whether a publish can land, so the probe reports the write path from the write path itself.")
reason: Optional[StrictStr] = Field(default=None, description="Reason is the human-readable cause, present only on a degraded report.")
service: Optional[StrictStr] = Field(default=None, description="Service names the subsystem answering, so a probe aggregating several health endpoints can attribute a degraded one.")
status: Optional[StrictStr] = Field(default=None, description="Status is ok or degraded. Degraded is the 503 and means EITHER load-bearing dependency is down — the warehouse this subsystem reads, or the event plane it writes. It is not moved by a missing lens table, which is honest-empty.")
@@ -17,17 +17,19 @@ import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, StrictStr
from pydantic import BaseModel, ConfigDict, StrictBool
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class IamAssumeBody(BaseModel):
class Grants(BaseModel):
"""
IamAssumeBody
Grants
""" # noqa: E501
org: Optional[StrictStr] = None
__properties: ClassVar[List[str]] = ["org"]
ads: Optional[StrictBool] = None
analytics: Optional[StrictBool] = None
marketing: Optional[StrictBool] = None
__properties: ClassVar[List[str]] = ["ads", "analytics", "marketing"]
model_config = ConfigDict(
populate_by_name=True,
@@ -47,7 +49,7 @@ class IamAssumeBody(BaseModel):
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of IamAssumeBody from a JSON string"""
"""Create an instance of Grants from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
@@ -72,7 +74,7 @@ class IamAssumeBody(BaseModel):
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of IamAssumeBody from a dict"""
"""Create an instance of Grants from a dict"""
if obj is None:
return None
@@ -80,7 +82,9 @@ class IamAssumeBody(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"org": obj.get("org")
"ads": obj.get("ads"),
"analytics": obj.get("analytics"),
"marketing": obj.get("marketing")
})
return _obj
-95
View File
@@ -1,95 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class GuideBlog(BaseModel):
"""
GuideBlog
""" # noqa: E501
case_study: Optional[StrictStr] = Field(default=None, description="CaseStudy is one worked instance — somebody who ran it, and what happened.", alias="caseStudy")
how: Optional[StrictStr] = Field(default=None, description="How is the run book: the steps to execute the tactic.")
slug: Optional[StrictStr] = Field(default=None, description="Slug is the post's address — the last path segment it is published at.")
title: Optional[StrictStr] = Field(default=None, description="Title is the post's headline.")
why: Optional[StrictStr] = Field(default=None, description="Why is the mechanism: the reason the tactic works, stated as a principle rather than as instructions.")
__properties: ClassVar[List[str]] = ["caseStudy", "how", "slug", "title", "why"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of GuideBlog from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of GuideBlog from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"caseStudy": obj.get("caseStudy"),
"how": obj.get("how"),
"slug": obj.get("slug"),
"title": obj.get("title"),
"why": obj.get("why")
})
return _obj
-143
View File
@@ -1,143 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.guide_journey_step import GuideJourneyStep
from hanzoai.cloud.models.guide_page import GuidePage
from hanzoai.cloud.models.guide_principle import GuidePrinciple
from hanzoai.cloud.models.guide_section import GuideSection
from hanzoai.cloud.models.guide_strategy import GuideStrategy
from typing import Optional, Set
from typing_extensions import Self
class GuideBlueprint(BaseModel):
"""
GuideBlueprint
""" # noqa: E501
brand: Optional[StrictStr] = Field(default=None, description="Brand is the white-label key this playbook serves. Empty is the shared default every unbranded deployment falls back to.")
enabled: Optional[StrictBool] = Field(default=None, description="Enabled is the whole-playbook lever. Absent reads as ON; an explicit false makes resolution skip this playbook entirely and fall through to the next tier, rather than serving an empty journey.")
principles: Optional[List[GuidePrinciple]] = Field(default=None, description="Principles are the fixed 64-archetype spine a tactic files under. It is authored data an operator organises the corpus by; nothing in the checklist engine reads it.")
sections: Optional[List[GuideSection]] = Field(default=None, description="Sections are the journey's ordered phases.")
steps: Optional[List[GuideJourneyStep]] = Field(default=None, description="Steps are every checklist item, disabled ones included — this is the authored document, not the projection an org runs.")
strategies: Optional[List[GuideStrategy]] = Field(default=None, description="Strategies are the tactics corpus the recommendation reads narrow.")
templates: Optional[List[GuidePage]] = Field(default=None, description="Templates are the reusable prompts and snippets steps reference by id.")
title: Optional[StrictStr] = Field(default=None, description="Title is the playbook's name as a person reads it.")
version: Optional[StrictStr] = Field(default=None, description="Version is the playbook's own name for this edition of its content, chosen by whoever authored it. It travels onto every journey projected from it. The store's numeric revision is a separate value and lives beside it.")
__properties: ClassVar[List[str]] = ["brand", "enabled", "principles", "sections", "steps", "strategies", "templates", "title", "version"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of GuideBlueprint from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in principles (list)
_items = []
if self.principles:
for _item_principles in self.principles:
if _item_principles:
_items.append(_item_principles.to_dict())
_dict['principles'] = _items
# override the default output from pydantic by calling `to_dict()` of each item in sections (list)
_items = []
if self.sections:
for _item_sections in self.sections:
if _item_sections:
_items.append(_item_sections.to_dict())
_dict['sections'] = _items
# override the default output from pydantic by calling `to_dict()` of each item in steps (list)
_items = []
if self.steps:
for _item_steps in self.steps:
if _item_steps:
_items.append(_item_steps.to_dict())
_dict['steps'] = _items
# override the default output from pydantic by calling `to_dict()` of each item in strategies (list)
_items = []
if self.strategies:
for _item_strategies in self.strategies:
if _item_strategies:
_items.append(_item_strategies.to_dict())
_dict['strategies'] = _items
# override the default output from pydantic by calling `to_dict()` of each item in templates (list)
_items = []
if self.templates:
for _item_templates in self.templates:
if _item_templates:
_items.append(_item_templates.to_dict())
_dict['templates'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of GuideBlueprint from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"brand": obj.get("brand"),
"enabled": obj.get("enabled"),
"principles": [GuidePrinciple.from_dict(_item) for _item in obj["principles"]] if obj.get("principles") is not None else None,
"sections": [GuideSection.from_dict(_item) for _item in obj["sections"]] if obj.get("sections") is not None else None,
"steps": [GuideJourneyStep.from_dict(_item) for _item in obj["steps"]] if obj.get("steps") is not None else None,
"strategies": [GuideStrategy.from_dict(_item) for _item in obj["strategies"]] if obj.get("strategies") is not None else None,
"templates": [GuidePage.from_dict(_item) for _item in obj["templates"]] if obj.get("templates") is not None else None,
"title": obj.get("title"),
"version": obj.get("version")
})
return _obj
@@ -1,95 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class GuideBlueprintCounts(BaseModel):
"""
GuideBlueprintCounts
""" # noqa: E501
principles: Optional[StrictInt] = Field(default=None, description="Principles is how many spine archetypes the playbook carries (64 in the shipped corpus).")
sections: Optional[StrictInt] = Field(default=None, description="Sections is how many phases the journey has.")
steps: Optional[StrictInt] = Field(default=None, description="Steps is how many checklist items the playbook holds, DISABLED ONES INCLUDED — this counts the authored document, not the journey an org runs, so it is normally larger than the `total` on a progress view.")
strategies: Optional[StrictInt] = Field(default=None, description="Strategies is how many tactics the corpus holds, again counting disabled ones.")
templates: Optional[StrictInt] = Field(default=None, description="Templates is how many reusable prompts the playbook carries.")
__properties: ClassVar[List[str]] = ["principles", "sections", "steps", "strategies", "templates"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of GuideBlueprintCounts from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of GuideBlueprintCounts from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"principles": obj.get("principles"),
"sections": obj.get("sections"),
"steps": obj.get("steps"),
"strategies": obj.get("strategies"),
"templates": obj.get("templates")
})
return _obj
@@ -1,101 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.guide_blueprint import GuideBlueprint
from hanzoai.cloud.models.guide_blueprint_counts import GuideBlueprintCounts
from typing import Optional, Set
from typing_extensions import Self
class GuideBlueprintView(BaseModel):
"""
GuideBlueprintView
""" # noqa: E501
blueprint: Optional[GuideBlueprint] = Field(default=None, description="Blueprint is the whole authored document, including items disabled for the org-facing reads, with every enabled flag written out explicitly.")
brand: Optional[StrictStr] = Field(default=None, description="Brand is the key this blueprint is stored under — the deployment's brand, or \"\" for the shared base blueprint it falls back to.")
counts: Optional[GuideBlueprintCounts] = Field(default=None, description="Counts summarises how many items each collection holds.")
version: Optional[StrictInt] = Field(default=None, description="Version is the active stored version number (1 is the seed). Each edit appends a new one; nothing is ever overwritten.")
__properties: ClassVar[List[str]] = ["blueprint", "brand", "counts", "version"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of GuideBlueprintView from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of blueprint
if self.blueprint:
_dict['blueprint'] = self.blueprint.to_dict()
# override the default output from pydantic by calling `to_dict()` of counts
if self.counts:
_dict['counts'] = self.counts.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of GuideBlueprintView from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"blueprint": GuideBlueprint.from_dict(obj["blueprint"]) if obj.get("blueprint") is not None else None,
"brand": obj.get("brand"),
"counts": GuideBlueprintCounts.from_dict(obj["counts"]) if obj.get("counts") is not None else None,
"version": obj.get("version")
})
return _obj
-93
View File
@@ -1,93 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class GuidePage(BaseModel):
"""
GuidePage
""" # noqa: E501
body: Optional[StrictStr] = Field(default=None, description="Body is the reusable prompt or snippet itself. It may carry {placeholder} tokens for the client-specific bits — {client_name}, {domain}, {product} — which are substituted where the template is used, not here.")
enabled: Optional[StrictBool] = Field(default=None, description="Enabled is the admin lever. Absent reads as ON; an explicit false withdraws the template from org-facing reads.")
id: Optional[StrictStr] = Field(default=None, description="ID is the slug a step references to pull this template in.")
title: Optional[StrictStr] = Field(default=None, description="Title names the template in the authoring plane and in a picker.")
__properties: ClassVar[List[str]] = ["body", "enabled", "id", "title"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of GuidePage from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of GuidePage from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"body": obj.get("body"),
"enabled": obj.get("enabled"),
"id": obj.get("id"),
"title": obj.get("title")
})
return _obj
-101
View File
@@ -1,101 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class GuidePrinciple(BaseModel):
"""
GuidePrinciple
""" # noqa: E501
change: Optional[StrictStr] = Field(default=None, description="the Book of Changes reading")
domain: Optional[StrictStr] = Field(default=None, description="the growth / go-to-market domain it governs")
hexagram: Optional[StrictStr] = Field(default=None, description="the I-Ching hexagram (pinyin + gloss)")
n: Optional[StrictInt] = Field(default=None, description="1..64, the hexagram number + canonical order")
name: Optional[StrictStr] = Field(default=None, description="the principle's short name")
principle: Optional[StrictStr] = Field(default=None, description="the actionable growth law")
slug: Optional[StrictStr] = Field(default=None, description="stable identifier a tactic files under")
sun_tzu: Optional[StrictStr] = Field(default=None, description="the Art of War teaching", alias="sunTzu")
__properties: ClassVar[List[str]] = ["change", "domain", "hexagram", "n", "name", "principle", "slug", "sunTzu"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of GuidePrinciple from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of GuidePrinciple from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"change": obj.get("change"),
"domain": obj.get("domain"),
"hexagram": obj.get("hexagram"),
"n": obj.get("n"),
"name": obj.get("name"),
"principle": obj.get("principle"),
"slug": obj.get("slug"),
"sunTzu": obj.get("sunTzu")
})
return _obj
-95
View File
@@ -1,95 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class GuideSection(BaseModel):
"""
GuideSection
""" # noqa: E501
detail: Optional[StrictStr] = Field(default=None, description="Detail is what this phase of the journey is for, in prose.")
enabled: Optional[StrictBool] = Field(default=None, description="Enabled is the admin lever. Absent reads as ON, so only an explicit false turns a phase off — and it takes every step filed under it out of the journey, not just the heading.")
id: Optional[StrictStr] = Field(default=None, description="ID is the slug a step's `section` names to file itself under this phase.")
order: Optional[StrictInt] = Field(default=None, description="Order places the phase in the journey, ascending. Ties fall back to authoring order, and an omitted order sorts as 0 — ahead of everything.")
title: Optional[StrictStr] = Field(default=None, description="Title is the phase heading a person reads above its steps.")
__properties: ClassVar[List[str]] = ["detail", "enabled", "id", "order", "title"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of GuideSection from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of GuideSection from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"detail": obj.get("detail"),
"enabled": obj.get("enabled"),
"id": obj.get("id"),
"order": obj.get("order"),
"title": obj.get("title")
})
return _obj
-109
View File
@@ -1,109 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.guide_blog import GuideBlog
from typing import Optional, Set
from typing_extensions import Self
class GuideStrategy(BaseModel):
"""
GuideStrategy
""" # noqa: E501
action: Optional[StrictStr] = Field(default=None, description="Action is the tactic itself: the thing to go and do, stated imperatively.")
blog: Optional[GuideBlog] = Field(default=None, description="Blog is the tactic's long-form explainer; absent for tactics that have none.")
category: Optional[StrictStr] = Field(default=None, description="Category is the growth discipline the tactic belongs to — the axis `?category=` narrows the corpus on, and one of the facets a caller browses by.")
enabled: Optional[StrictBool] = Field(default=None, description="Enabled is the admin lever. Absent reads as ON; an explicit false drops the tactic from every org-facing corpus read while leaving it in the document.")
era: Optional[StrictStr] = Field(default=None, description="Era separates an AI-era tactic (`modern`) from a classical one (`heritage`).")
id: Optional[StrictStr] = Field(default=None, description="ID is the tactic's stable slug, unique across the corpus.")
principle: Optional[StrictStr] = Field(default=None, description="Principle is the spine slug this tactic files under (a Principle.Slug).")
source: Optional[StrictStr] = Field(default=None, description="Source is where the tactic came from — the attribution a reader is owed.")
tags: Optional[List[StrictStr]] = Field(default=None, description="Tags are PRECONDITIONS, not labels — every one must be satisfied by the org's observed profile before the tactic surfaces, so an untagged tactic is universally applicable. Two vocabularies: `stage:<research|formed|launched| activated|scaling>` reads the org's growth stage, `has:<capability>` reads an observed signal.")
workload: Optional[StrictStr] = Field(default=None, description="Workload is how much effort running the tactic costs, so a corpus can be narrowed to what an org has the hands for right now.")
__properties: ClassVar[List[str]] = ["action", "blog", "category", "enabled", "era", "id", "principle", "source", "tags", "workload"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of GuideStrategy from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of blog
if self.blog:
_dict['blog'] = self.blog.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of GuideStrategy from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"action": obj.get("action"),
"blog": GuideBlog.from_dict(obj["blog"]) if obj.get("blog") is not None else None,
"category": obj.get("category"),
"enabled": obj.get("enabled"),
"era": obj.get("era"),
"id": obj.get("id"),
"principle": obj.get("principle"),
"source": obj.get("source"),
"tags": obj.get("tags"),
"workload": obj.get("workload")
})
return _obj
@@ -1,91 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class GuideVersionMeta(BaseModel):
"""
GuideVersionMeta
""" # noqa: E501
brand: Optional[StrictStr] = Field(default=None, description="Brand is the white-label key this revision was authored under; empty is the shared base playbook. Revisions of two brands never share a number line.")
updated_at: Optional[StrictInt] = Field(default=None, description="UpdatedAt is when this revision was written, as Unix seconds — the \"who changed the playbook, and when\" half of the audit trail.", alias="updatedAt")
version: Optional[StrictInt] = Field(default=None, description="Version is the store's own revision counter for that brand, starting at 1 for the seeded playbook and incrementing on every edit. Nothing is overwritten, so the highest number is the live one and every lower number is still readable. It is not the playbook's authored `version` string.")
__properties: ClassVar[List[str]] = ["brand", "updatedAt", "version"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of GuideVersionMeta from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of GuideVersionMeta from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"brand": obj.get("brand"),
"updatedAt": obj.get("updatedAt"),
"version": obj.get("version")
})
return _obj
@@ -28,7 +28,7 @@ class LicensingHealthView(BaseModel):
""" # noqa: E501
env: Optional[StrictStr] = Field(default=None, description="Env is the deployment environment (\"dev\" | \"staging\" | \"prod\").")
service: Optional[StrictStr] = Field(default=None, description="Service is always \"licensing\".")
signer: Optional[StrictStr] = Field(default=None, description="Signer names the KMS provider signing licenses here. \"local\" means a development key: tokens it mints are not production credentials.")
signer: Optional[StrictStr] = Field(default=None, description="Signer names where the signing key lives: \"kms\" or \"local\". \"local\" means a development key: tokens it mints are not production credentials.")
status: Optional[StrictStr] = Field(default=None, description="Status is \"ok\" whenever the process is up — this is not a dependency probe.")
__properties: ClassVar[List[str]] = ["env", "service", "signer", "status"]
@@ -29,7 +29,7 @@ class LicensingPubkeyView(BaseModel):
""" # noqa: E501
alg: Optional[StrictStr] = Field(default=None, description="Alg is always \"Ed25519\".")
keys: Optional[List[LicensingJWK]] = Field(default=None, description="Keys is the same key as a single-entry JWKS (OKP/Ed25519), for JWKS-shaped consumers.")
provider: Optional[StrictStr] = Field(default=None, description="Provider names the KMS holding the private half (\"local\" | \"aws\" | ...). \"local\" means a development key — never trust it in production.")
provider: Optional[StrictStr] = Field(default=None, description="Provider names where the private half lives: \"kms\" (production) or \"local\" (a development key — never trust it in production).")
public_key: Optional[StrictStr] = Field(default=None, description="PublicKey is the 32-byte Ed25519 public key, standard base64. This is the form the engine embeds for offline verification.")
var_schema: Optional[StrictInt] = Field(default=None, description="Schema is the license payload schema version this key signs.", alias="schema")
token_format: Optional[StrictStr] = Field(default=None, description="TokenFormat states the wire layout so an implementer can verify a token without this service's source.")
@@ -1,95 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class LicensingRevocationEntry(BaseModel):
"""
LicensingRevocationEntry
""" # noqa: E501
at: Optional[StrictInt] = None
by: Optional[StrictStr] = None
reason: Optional[StrictStr] = None
scope: Optional[StrictStr] = None
value: Optional[StrictStr] = None
__properties: ClassVar[List[str]] = ["at", "by", "reason", "scope", "value"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of LicensingRevocationEntry from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of LicensingRevocationEntry from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"at": obj.get("at"),
"by": obj.get("by"),
"reason": obj.get("reason"),
"scope": obj.get("scope"),
"value": obj.get("value")
})
return _obj
@@ -1,91 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class LicensingRevokeRequest(BaseModel):
"""
LicensingRevokeRequest
""" # noqa: E501
reason: Optional[StrictStr] = Field(default=None, description="Reason is the operator's note, echoed back by verify so a support agent can explain the refusal.")
scope: StrictStr = Field(description="Scope is what the revocation matches on: \"nonce\" kills one token, \"holder\" every token issued to one bearer, \"fingerprint\" every token bound to one device, and \"release\" every token scoped to one binary release.")
value: StrictStr = Field(description="Value is the concrete nonce, holder, fingerprint or release id to revoke.")
__properties: ClassVar[List[str]] = ["reason", "scope", "value"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of LicensingRevokeRequest from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of LicensingRevokeRequest from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"reason": obj.get("reason"),
"scope": obj.get("scope"),
"value": obj.get("value")
})
return _obj
@@ -1,115 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.o11y_availability_point import O11yAvailabilityPoint
from hanzoai.cloud.models.o11y_availability_response_range import O11yAvailabilityResponseRange
from hanzoai.cloud.models.o11y_service_up import O11yServiceUp
from typing import Optional, Set
from typing_extensions import Self
class O11yAvailabilityResponse(BaseModel):
"""
O11yAvailabilityResponse
""" # noqa: E501
range: Optional[O11yAvailabilityResponseRange] = None
series: Optional[List[O11yAvailabilityPoint]] = Field(default=None, description="Series is the trend, oldest bucket first.")
services: Optional[List[O11yServiceUp]] = Field(default=None, description="Services is the current inventory, sorted by name so two reads of an unchanged fleet are byte-identical.")
total: Optional[StrictInt] = Field(default=None, description="Total is how many services the prober currently watches.")
up: Optional[StrictInt] = Field(default=None, description="Up is how many services are up right now.")
__properties: ClassVar[List[str]] = ["range", "series", "services", "total", "up"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of O11yAvailabilityResponse from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of range
if self.range:
_dict['range'] = self.range.to_dict()
# override the default output from pydantic by calling `to_dict()` of each item in series (list)
_items = []
if self.series:
for _item_series in self.series:
if _item_series:
_items.append(_item_series.to_dict())
_dict['series'] = _items
# override the default output from pydantic by calling `to_dict()` of each item in services (list)
_items = []
if self.services:
for _item_services in self.services:
if _item_services:
_items.append(_item_services.to_dict())
_dict['services'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of O11yAvailabilityResponse from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"range": O11yAvailabilityResponseRange.from_dict(obj["range"]) if obj.get("range") is not None else None,
"series": [O11yAvailabilityPoint.from_dict(_item) for _item in obj["series"]] if obj.get("series") is not None else None,
"services": [O11yServiceUp.from_dict(_item) for _item in obj["services"]] if obj.get("services") is not None else None,
"total": obj.get("total"),
"up": obj.get("up")
})
return _obj
@@ -1,89 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class O11yAvailabilityResponseRange(BaseModel):
"""
Range is the window and bucket width actually used, after clamping — not what was asked for, which is why a caller reads it back rather than assuming.
""" # noqa: E501
since_sec: Optional[StrictInt] = Field(default=None, alias="sinceSec")
step_sec: Optional[StrictInt] = Field(default=None, alias="stepSec")
__properties: ClassVar[List[str]] = ["sinceSec", "stepSec"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of O11yAvailabilityResponseRange from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of O11yAvailabilityResponseRange from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"sinceSec": obj.get("sinceSec"),
"stepSec": obj.get("stepSec")
})
return _obj
@@ -28,14 +28,13 @@ class O11yO11ySentryProject(BaseModel):
O11yO11ySentryProject
""" # noqa: E501
created_at: Optional[datetime] = Field(default=None, description="CreatedAt is when the project was created.", alias="createdAt")
dsn: Optional[StrictStr] = Field(default=None, description="DSN is the project's freshly-derived ingest DSN.")
id: Optional[StrictStr] = Field(default=None, description="ID is the project id.")
name: Optional[StrictStr] = Field(default=None, description="Name is the project's display name.")
platform: Optional[StrictStr] = Field(default=None, description="Platform is the reporting runtime, e.g. go, python, javascript.")
slug: Optional[StrictStr] = Field(default=None, description="Slug is the project's short name.")
status: Optional[StrictStr] = Field(default=None, description="Status is the project's lifecycle state: active or disabled.")
updated_at: Optional[datetime] = Field(default=None, description="UpdatedAt is when the project last changed.", alias="updatedAt")
__properties: ClassVar[List[str]] = ["createdAt", "dsn", "id", "name", "platform", "slug", "status", "updatedAt"]
__properties: ClassVar[List[str]] = ["createdAt", "id", "name", "platform", "slug", "status", "updatedAt"]
model_config = ConfigDict(
populate_by_name=True,
@@ -89,7 +88,6 @@ class O11yO11ySentryProject(BaseModel):
_obj = cls.model_validate({
"createdAt": obj.get("createdAt"),
"dsn": obj.get("dsn"),
"id": obj.get("id"),
"name": obj.get("name"),
"platform": obj.get("platform"),
@@ -1,89 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class O11yServiceUp(BaseModel):
"""
O11yServiceUp
""" # noqa: E501
name: Optional[StrictStr] = Field(default=None, description="Name is the service as the fleet prober knows it (probes.go's target name, which is the `service` label on hanzo_service_up).")
up: Optional[StrictBool] = Field(default=None, description="Up is true when the service answered its own health URL on the last cycle.")
__properties: ClassVar[List[str]] = ["name", "up"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of O11yServiceUp from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of O11yServiceUp from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"name": obj.get("name"),
"up": obj.get("up")
})
return _obj
@@ -1,114 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.platform_cd_resource import PlatformCDResource
from typing import Optional, Set
from typing_extensions import Self
class PlatformCdDiff(BaseModel):
"""
PlatformCdDiff
""" # noqa: E501
application: Optional[StrictStr] = Field(default=None, description="Application is the CD Application the declaration renders as.")
applied: Optional[StrictStr] = Field(default=None, description="Applied is the universe commit CD last synced, \"\" before its first sync.")
compared: Optional[StrictStr] = Field(default=None, description="Compared is the universe commit CD compared the cluster against — the one a sync applies.")
operation: Optional[StrictStr] = Field(default=None, description="Operation is the phase of a sync in flight or last run, \"\" when none ran.")
pending: Optional[List[PlatformCDResource]] = Field(default=None, description="Pending are the objects that differ from git: what a sync would apply.")
resources: Optional[List[PlatformCDResource]] = Field(default=None, description="Resources is every object the Application manages.")
sync: Optional[StrictStr] = Field(default=None, description="Sync is CD's verdict: Synced or OutOfSync.")
__properties: ClassVar[List[str]] = ["application", "applied", "compared", "operation", "pending", "resources", "sync"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PlatformCdDiff from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in pending (list)
_items = []
if self.pending:
for _item_pending in self.pending:
if _item_pending:
_items.append(_item_pending.to_dict())
_dict['pending'] = _items
# override the default output from pydantic by calling `to_dict()` of each item in resources (list)
_items = []
if self.resources:
for _item_resources in self.resources:
if _item_resources:
_items.append(_item_resources.to_dict())
_dict['resources'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PlatformCdDiff from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"application": obj.get("application"),
"applied": obj.get("applied"),
"compared": obj.get("compared"),
"operation": obj.get("operation"),
"pending": [PlatformCDResource.from_dict(_item) for _item in obj["pending"]] if obj.get("pending") is not None else None,
"resources": [PlatformCDResource.from_dict(_item) for _item in obj["resources"]] if obj.get("resources") is not None else None,
"sync": obj.get("sync")
})
return _obj
@@ -27,7 +27,7 @@ class PlatformDeclareEnv(BaseModel):
PlatformDeclareEnv
""" # noqa: E501
name: Optional[StrictStr] = None
public: Optional[StrictBool] = Field(default=None, description="Public marks a value that may be WRITTEN INTO GIT. Absent, it is false, and the value is sealed into KMS and referenced. ★ THE DEFAULT IS SECRET, AND THE POLARITY IS THE WHOLE DESIGN. This lane's output is a commit in a repository replicated to every clone, so a misclassification is not a bug to fix later — it is a credential published forever. A heuristic classifier fails in both directions; what decides is which direction it fails IN. Seal-by-default makes the failure mode \"an operator cannot read back a config value\", which is a support ticket. Classify-by-shape made it \"a password is in git history\", which is an incident with no rollback. It is also the only rule that needs no list. PGPASSWORD, *_PW, a symbol-rich password, a KUBECONFIG, a base32 MFA seed — every one of them slipped a shape classifier, and each miss was a different reason. There is no reason left when the default is to seal.")
public: Optional[StrictBool] = Field(default=None, description="Public marks a value that may be WRITTEN INTO GIT. Absent, it is false, and the value is sealed into KMS and referenced. ★ THE DEFAULT IS SECRET, AND THE POLARITY IS THE WHOLE DESIGN. This lane's output is a commit in a repository replicated to every clone, so a value written there stays there. Sealing by default means the worst outcome of a wrong guess is a config value an operator reads back from KMS rather than from git, and nothing sensitive ever depends on recognising its shape. It is also the only rule that needs no list: a password, a kubeconfig or an MFA seed is sealed whatever it looks like, because only an explicit public mark writes a value into git.")
value: Optional[StrictStr] = None
__properties: ClassVar[List[str]] = ["name", "public", "value"]
@@ -1,89 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class PlatformRestartRef(BaseModel):
"""
PlatformRestartRef
""" # noqa: E501
app: Optional[StrictStr] = Field(default=None, description="App is the service's CR name, from the path. It must be a DNS-1123 label.")
env: Optional[StrictStr] = Field(default=None, description="Env is REQUIRED and must be main, test or dev. A bare call does not default to production, which is what closes the fat-finger and confused-deputy hazard. It carries no `validate:\"required\"`: the handler already refuses an empty env with the sentence that names the three values, and a validator tag would replace that sentence with a generic one. The requirement is stated here and enforced there, once.")
__properties: ClassVar[List[str]] = ["app", "env"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PlatformRestartRef from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PlatformRestartRef from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"app": obj.get("app"),
"env": obj.get("env")
})
return _obj
@@ -1,95 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class PlatformRestarted(BaseModel):
"""
PlatformRestarted
""" # noqa: E501
app: Optional[StrictStr] = Field(default=None, description="App is the service that was restarted.")
env: Optional[StrictStr] = Field(default=None, description="Env is that namespace's lifecycle env.")
namespace: Optional[StrictStr] = Field(default=None, description="Namespace is the namespace its Deployment was patched in.")
ok: Optional[StrictBool] = Field(default=None, description="OK is always true — a failure is an error, not a false here.")
restarted_at: Optional[StrictStr] = Field(default=None, description="RestartedAt is the timestamp stamped onto the pod template, RFC3339 UTC.", alias="restartedAt")
__properties: ClassVar[List[str]] = ["app", "env", "namespace", "ok", "restartedAt"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PlatformRestarted from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PlatformRestarted from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"app": obj.get("app"),
"env": obj.get("env"),
"namespace": obj.get("namespace"),
"ok": obj.get("ok"),
"restartedAt": obj.get("restartedAt")
})
return _obj
@@ -1,89 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class PricingPricingSyncOut(BaseModel):
"""
PricingPricingSyncOut
""" # noqa: E501
status: Optional[StrictStr] = Field(default=None, description="Status is \"ok\" when the sync completed.")
updated: Optional[StrictStr] = Field(default=None, description="Updated is the RFC 3339 time the refreshed catalog was stamped with.")
__properties: ClassVar[List[str]] = ["status", "updated"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PricingPricingSyncOut from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PricingPricingSyncOut from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"status": obj.get("status"),
"updated": obj.get("updated")
})
return _obj
@@ -1,91 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class PrincipalDecideIn(BaseModel):
"""
PrincipalDecideIn
""" # noqa: E501
decision: Optional[StrictStr] = Field(default=None, description="Decision is cleared (a namesake: the identifiers show a different person) or confirmed (the designated person).")
id: Optional[StrictStr] = Field(default=None, description="ID is the match, from the path.")
note: Optional[StrictStr] = Field(default=None, description="Note is the reviewer's reason — which identifiers decided it. Required.")
__properties: ClassVar[List[str]] = ["decision", "id", "note"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PrincipalDecideIn from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PrincipalDecideIn from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"decision": obj.get("decision"),
"id": obj.get("id"),
"note": obj.get("note")
})
return _obj
@@ -33,6 +33,7 @@ class ProjectProjectsProject(BaseModel):
created_at: Optional[StrictInt] = Field(default=None, description="CreatedAt is when the project was created, as Unix seconds.", alias="createdAt")
current_deployment_id: Optional[StrictStr] = Field(default=None, description="CurrentDeploymentID names the deployment currently serving, so a caller can ask what is live without scanning the history.", alias="currentDeploymentId")
description: Optional[StrictStr] = Field(default=None, description="Description is the one-line summary, which is copied onto forks of this project and shown on a gallery card.")
drop_local: Optional[StrictBool] = Field(default=None, description="DropLocal is whether events a developer's own machine sends (localhost, 127.0.0.1, *.local) are dropped at ingest. ON by default.", alias="dropLocal")
forked_from: Optional[StrictStr] = Field(default=None, description="ForkedFrom is the parent this project was forked from (\"<org>/<slug>\" of a published project, or a catalog template slug) — the attribution edge a gallery credits.", alias="forkedFrom")
framework: Optional[StrictStr] = Field(default=None, description="Framework is a BUILD HINT from a closed set, defaulting to static. It tells CI how to build a linked repo and never gates a deploy, so a wrong value costs a build rather than access.")
hidden: Optional[StrictBool] = Field(default=None, description="Hidden is PLATFORM MODERATION, and it is a different axis from visibility: it pulls a public project out of the catalogue without editing the publisher's own choice, so un-hiding restores exactly what they asked for. A project is listed only when it is public AND not hidden. Always present, never omitted, for the same reason as visibility.")
@@ -53,7 +54,7 @@ class ProjectProjectsProject(BaseModel):
updated_at: Optional[StrictInt] = Field(default=None, description="UpdatedAt is when the project's own record last changed, as Unix seconds. A deploy is not an edit of the project, so this does not move on every publish.", alias="updatedAt")
upstream: Optional[StrictStr] = Field(default=None, description="Upstream credits the third-party work this project was published from — a free-text line, because the honest answer is a name and a title that no enum could hold. Absent means NOBODY HAS SAID, not that there is nothing to say.")
visibility: Optional[StrictStr] = Field(default=None, description="Visibility is \"public\" or \"private\", and Hidden reports platform moderation. Both are always present (never omitempty) so a consumer can tell a real answer from \"this API is too old to say\" — and so a console never renders a project as public because a field was missing. Authorship is deliberately absent: it is Org, above.")
__properties: ClassVar[List[str]] = ["analytics", "bucket", "cacheControl", "createdAt", "currentDeploymentId", "description", "forkedFrom", "framework", "hidden", "hiddenReason", "id", "key", "lastPurgeAt", "license", "liveUrl", "name", "org", "repo", "slug", "space", "starred", "status", "tags", "updatedAt", "upstream", "visibility"]
__properties: ClassVar[List[str]] = ["analytics", "bucket", "cacheControl", "createdAt", "currentDeploymentId", "description", "dropLocal", "forkedFrom", "framework", "hidden", "hiddenReason", "id", "key", "lastPurgeAt", "license", "liveUrl", "name", "org", "repo", "slug", "space", "starred", "status", "tags", "updatedAt", "upstream", "visibility"]
model_config = ConfigDict(
populate_by_name=True,
@@ -115,6 +116,7 @@ class ProjectProjectsProject(BaseModel):
"createdAt": obj.get("createdAt"),
"currentDeploymentId": obj.get("currentDeploymentId"),
"description": obj.get("description"),
"dropLocal": obj.get("dropLocal"),
"forkedFrom": obj.get("forkedFrom"),
"framework": obj.get("framework"),
"hidden": obj.get("hidden"),
@@ -29,6 +29,7 @@ class ProjectProjectsUpdate(BaseModel):
""" # noqa: E501
cache_control: Optional[StrictStr] = Field(default=None, description="CacheControl replaces the Cache-Control policy the edge serves this site's HTML under. Absent leaves it.", alias="cacheControl")
description: Optional[StrictStr] = Field(default=None, description="Description replaces the one-line summary. Absent leaves it.")
drop_local: Optional[StrictBool] = Field(default=None, description="DropLocal turns the drop of localhost events at ingest on or off. Absent leaves it.", alias="dropLocal")
framework: Optional[StrictStr] = Field(default=None, description="Framework replaces the build hint. It affects the NEXT build only — nothing already deployed is rebuilt.")
hidden: Optional[StrictBool] = Field(default=None, description="Hidden is MODERATION, and the only admin-gated field on this body: it pulls a public project out of the catalogue from admin.hanzo.ai without editing the publisher's own visibility choice, so un-hiding restores exactly what they asked for. A tenant sending it is ignored.")
hidden_reason: Optional[StrictStr] = Field(default=None, description="HiddenReason records WHY moderation hid it, so the action can be explained and reviewed later. Admin-gated like hidden itself.", alias="hiddenReason")
@@ -39,7 +40,7 @@ class ProjectProjectsUpdate(BaseModel):
tags: Optional[Dict[str, StrictStr]] = Field(default=None, description="Tags sets the site's browser tag config: platform slug → non-secret pixel id (e.g. {\"ga4\":\"G-…\",\"meta\":\"…\"}). track.js injects these first-party and the server CAPI reads them, per site. Absent LEAVES them; a present object REPLACES the set (send {} to clear). The ids are public — they ship in the page — so this is not the SECRET path (a CAPI token is sealed via POST /v1/destination).")
upstream: Optional[StrictStr] = Field(default=None, description="Upstream credits the third-party work this project was published from, and is settable after the fact because the live demos are the ones that most need crediting. An explicit empty string CLEARS the credit; absent leaves it.")
visibility: Optional[StrictStr] = Field(default=None, description="Visibility flips an existing project between \"public\" and \"private\". Same ONE rule as at create: public is free, private needs a paid plan.")
__properties: ClassVar[List[str]] = ["cacheControl", "description", "framework", "hidden", "hiddenReason", "license", "name", "repo", "slug", "tags", "upstream", "visibility"]
__properties: ClassVar[List[str]] = ["cacheControl", "description", "dropLocal", "framework", "hidden", "hiddenReason", "license", "name", "repo", "slug", "tags", "upstream", "visibility"]
model_config = ConfigDict(
populate_by_name=True,
@@ -97,6 +98,7 @@ class ProjectProjectsUpdate(BaseModel):
_obj = cls.model_validate({
"cacheControl": obj.get("cacheControl"),
"description": obj.get("description"),
"dropLocal": obj.get("dropLocal"),
"framework": obj.get("framework"),
"hidden": obj.get("hidden"),
"hiddenReason": obj.get("hiddenReason"),
@@ -1,89 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class ProviderGithubClaimIn(BaseModel):
"""
ProviderGithubClaimIn
""" # noqa: E501
accounts: Optional[List[StrictStr]] = Field(default=None, description="Accounts names GitHub logins the App is installed on (\"hanzoai\"). Matched case-insensitively, since GitHub logins are. Ignored when all is true.")
all: Optional[StrictBool] = Field(default=None, description="All binds every account the App holds, instead of naming them.")
__properties: ClassVar[List[str]] = ["accounts", "all"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ProviderGithubClaimIn from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ProviderGithubClaimIn from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"accounts": obj.get("accounts"),
"all": obj.get("all")
})
return _obj
@@ -1,89 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class ProviderGithubClaimOut(BaseModel):
"""
ProviderGithubClaimOut
""" # noqa: E501
already: Optional[List[StrictStr]] = Field(default=None, description="Already were bound before the call and are unchanged by it.")
claimed: Optional[List[StrictStr]] = Field(default=None, description="Claimed are the accounts this call bound. Never null; [] when none.")
__properties: ClassVar[List[str]] = ["already", "claimed"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ProviderGithubClaimOut from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ProviderGithubClaimOut from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"already": obj.get("already"),
"claimed": obj.get("claimed")
})
return _obj
@@ -1,95 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class ReferenceReferenceReceipt(BaseModel):
"""
ReferenceReferenceReceipt
""" # noqa: E501
as_of: Optional[StrictStr] = Field(default=None, description="AsOf is when the load happened, RFC 3339. Absent is dated on arrival, which can only make the list look older than it is.", alias="asOf")
keys: Optional[StrictInt] = Field(default=None, description="Keys is how many designations that load carried. Zero from a publisher who designates somebody is a failed load wearing a successful one's clothes, and belongs in Refusal instead.")
refusal: Optional[StrictStr] = Field(default=None, description="Refusal is why the load failed, when it did.")
source: Optional[StrictStr] = Field(default=None, description="Source is the publisher this receipt is for.")
version: Optional[StrictStr] = Field(default=None, description="Version is the digest of what that publisher supplied, so a refresh that changed nothing can be told from a refresh that did not run.")
__properties: ClassVar[List[str]] = ["asOf", "keys", "refusal", "source", "version"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ReferenceReferenceReceipt from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ReferenceReferenceReceipt from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"asOf": obj.get("asOf"),
"keys": obj.get("keys"),
"refusal": obj.get("refusal"),
"source": obj.get("source"),
"version": obj.get("version")
})
return _obj
@@ -1,99 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class ReferenceReferenceTaken(BaseModel):
"""
ReferenceReferenceTaken
""" # noqa: E501
keys: Optional[StrictInt] = Field(default=None, description="Keys is how many members it carries.")
refusal: Optional[StrictStr] = Field(default=None, description="Refusal is why this publisher contributed nothing, if it did not. The set keeps its previous version of this source rather than shrinking.")
resumed: Optional[StrictBool] = Field(default=None, description="Resumed is true when this run continued a version a previous run left half-landed.")
source: Optional[StrictStr] = Field(default=None, description="Source is the publisher.")
unchanged: Optional[StrictBool] = Field(default=None, description="Unchanged is true when the publisher's data was byte-for-byte the set we already held.")
version: Optional[StrictStr] = Field(default=None, description="Version is the content digest that landed.")
wrote: Optional[StrictInt] = Field(default=None, description="Wrote is how many rows this run actually wrote. Zero with Unchanged means the publisher served the same set again.")
__properties: ClassVar[List[str]] = ["keys", "refusal", "resumed", "source", "unchanged", "version", "wrote"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ReferenceReferenceTaken from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ReferenceReferenceTaken from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"keys": obj.get("keys"),
"refusal": obj.get("refusal"),
"resumed": obj.get("resumed"),
"source": obj.get("source"),
"unchanged": obj.get("unchanged"),
"version": obj.get("version"),
"wrote": obj.get("wrote")
})
return _obj
@@ -1,99 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.reference_reference_receipt import ReferenceReferenceReceipt
from typing import Optional, Set
from typing_extensions import Self
class ReferenceRefreshReferenceIn(BaseModel):
"""
ReferenceRefreshReferenceIn
""" # noqa: E501
force: Optional[StrictBool] = Field(default=None, description="Force accepts a take whose size moved past the change bound. A publisher serving a tenth or ten times its previous list is refused by default and the previous version is left standing; this is the operator saying the change is real. It cannot make an empty, truncated or unparseable take land — those are errors, not magnitudes.")
receipts: Optional[List[ReferenceReferenceReceipt]] = Field(default=None, description="Receipts are supplied by the component that holds the membership, for a set of kind attest. They are refused on any other kind, and a set of kind attest is refused without them: this plane never invents a freshness it did not observe.")
set: Optional[StrictStr] = Field(default=None, description="Set is the set to refresh.")
__properties: ClassVar[List[str]] = ["force", "receipts", "set"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ReferenceRefreshReferenceIn from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in receipts (list)
_items = []
if self.receipts:
for _item_receipts in self.receipts:
if _item_receipts:
_items.append(_item_receipts.to_dict())
_dict['receipts'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ReferenceRefreshReferenceIn from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"force": obj.get("force"),
"receipts": [ReferenceReferenceReceipt.from_dict(_item) for _item in obj["receipts"]] if obj.get("receipts") is not None else None,
"set": obj.get("set")
})
return _obj
@@ -1,101 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.reference_reference_taken import ReferenceReferenceTaken
from typing import Optional, Set
from typing_extensions import Self
class ReferenceRefreshReferenceOut(BaseModel):
"""
ReferenceRefreshReferenceOut
""" # noqa: E501
set: Optional[StrictStr] = Field(default=None, description="Set is the set refreshed.")
stale: Optional[StrictBool] = Field(default=None, description="Stale is whether it is STILL past its freshness bound after the refresh, which is what a publisher that has stopped answering looks like.")
took: Optional[List[ReferenceReferenceTaken]] = Field(default=None, description="Took is what each publisher contributed.")
version: Optional[StrictStr] = Field(default=None, description="Version is the set's new composed version.")
__properties: ClassVar[List[str]] = ["set", "stale", "took", "version"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ReferenceRefreshReferenceOut from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in took (list)
_items = []
if self.took:
for _item_took in self.took:
if _item_took:
_items.append(_item_took.to_dict())
_dict['took'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ReferenceRefreshReferenceOut from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"set": obj.get("set"),
"stale": obj.get("stale"),
"took": [ReferenceReferenceTaken.from_dict(_item) for _item in obj["took"]] if obj.get("took") is not None else None,
"version": obj.get("version")
})
return _obj
@@ -17,18 +17,18 @@ import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class PlatformAppCD(BaseModel):
class SandboxPort(BaseModel):
"""
PlatformAppCD
SandboxPort
""" # noqa: E501
app: Optional[StrictStr] = Field(default=None, description="App is the declaration's name, from the path.")
org: Optional[StrictStr] = Field(default=None, description="Org is the values directory the declaration lives in, defaulting to the caller's own org.")
__properties: ClassVar[List[str]] = ["app", "org"]
host: Optional[StrictStr] = Field(default=None, description="Host is the preview host that serves it, the same for as long as the sandbox lives, parked or running.")
port: Optional[StrictInt] = Field(default=None, description="Port is the TCP port.")
__properties: ClassVar[List[str]] = ["host", "port"]
model_config = ConfigDict(
populate_by_name=True,
@@ -48,7 +48,7 @@ class PlatformAppCD(BaseModel):
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PlatformAppCD from a JSON string"""
"""Create an instance of SandboxPort from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
@@ -73,7 +73,7 @@ class PlatformAppCD(BaseModel):
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PlatformAppCD from a dict"""
"""Create an instance of SandboxPort from a dict"""
if obj is None:
return None
@@ -81,8 +81,8 @@ class PlatformAppCD(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"app": obj.get("app"),
"org": obj.get("org")
"host": obj.get("host"),
"port": obj.get("port")
})
return _obj
@@ -17,18 +17,18 @@ import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict
from pydantic import BaseModel, ConfigDict, Field
from typing import Any, ClassVar, Dict, List, Optional
from hanzoai.cloud.models.principal_match import PrincipalMatch
from hanzoai.cloud.models.sandbox_port import SandboxPort
from typing import Optional, Set
from typing_extensions import Self
class PrincipalMatchList(BaseModel):
class SandboxPorts(BaseModel):
"""
PrincipalMatchList
SandboxPorts
""" # noqa: E501
matches: Optional[List[PrincipalMatch]] = None
__properties: ClassVar[List[str]] = ["matches"]
ports: Optional[List[SandboxPort]] = Field(default=None, description="Ports are the listening ports, ascending. Never null.")
__properties: ClassVar[List[str]] = ["ports"]
model_config = ConfigDict(
populate_by_name=True,
@@ -48,7 +48,7 @@ class PrincipalMatchList(BaseModel):
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of PrincipalMatchList from a JSON string"""
"""Create an instance of SandboxPorts from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
@@ -69,18 +69,18 @@ class PrincipalMatchList(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in matches (list)
# override the default output from pydantic by calling `to_dict()` of each item in ports (list)
_items = []
if self.matches:
for _item_matches in self.matches:
if _item_matches:
_items.append(_item_matches.to_dict())
_dict['matches'] = _items
if self.ports:
for _item_ports in self.ports:
if _item_ports:
_items.append(_item_ports.to_dict())
_dict['ports'] = _items
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of PrincipalMatchList from a dict"""
"""Create an instance of SandboxPorts from a dict"""
if obj is None:
return None
@@ -88,7 +88,7 @@ class PrincipalMatchList(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"matches": [PrincipalMatch.from_dict(_item) for _item in obj["matches"]] if obj.get("matches") is not None else None
"ports": [SandboxPort.from_dict(_item) for _item in obj["ports"]] if obj.get("ports") is not None else None
})
return _obj
@@ -22,14 +22,15 @@ from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class O11yAvailabilityPoint(BaseModel):
class SandboxPreviewGrant(BaseModel):
"""
O11yAvailabilityPoint
SandboxPreviewGrant
""" # noqa: E501
t: Optional[StrictStr] = Field(default=None, description="T is the bucket start, RFC3339 in UTC.")
total: Optional[StrictInt] = Field(default=None, description="Total is how many services reported at all inside the bucket. It can be lower than the current total: a target added last week reported nothing the week before, and saying so is the point.")
up: Optional[StrictInt] = Field(default=None, description="Up is how many services were up at the end of the bucket.")
__properties: ClassVar[List[str]] = ["t", "total", "up"]
expires_in: Optional[StrictInt] = Field(default=None, description="ExpiresIn is how long the ticket in URL is good for, in seconds.", alias="expiresIn")
host: Optional[StrictStr] = Field(default=None, description="Host is the preview's origin host, the same for every ticket for this port of this sandbox, before and after the sandbox is parked and resumed.")
port: Optional[StrictInt] = Field(default=None, description="Port is the port the preview serves.")
url: Optional[StrictStr] = Field(default=None, description="URL opens the preview: its own origin, with a single-use ticket that sets the preview's cookie and redirects to its root. Open it in a frame or a tab within ExpiresIn seconds, and mint another to reopen.")
__properties: ClassVar[List[str]] = ["expiresIn", "host", "port", "url"]
model_config = ConfigDict(
populate_by_name=True,
@@ -49,7 +50,7 @@ class O11yAvailabilityPoint(BaseModel):
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of O11yAvailabilityPoint from a JSON string"""
"""Create an instance of SandboxPreviewGrant from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
@@ -74,7 +75,7 @@ class O11yAvailabilityPoint(BaseModel):
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of O11yAvailabilityPoint from a dict"""
"""Create an instance of SandboxPreviewGrant from a dict"""
if obj is None:
return None
@@ -82,9 +83,10 @@ class O11yAvailabilityPoint(BaseModel):
return cls.model_validate(obj)
_obj = cls.model_validate({
"t": obj.get("t"),
"total": obj.get("total"),
"up": obj.get("up")
"expiresIn": obj.get("expiresIn"),
"host": obj.get("host"),
"port": obj.get("port"),
"url": obj.get("url")
})
return _obj
@@ -17,18 +17,18 @@ import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class MarketplaceResolveIn(BaseModel):
class SandboxPreviewIn(BaseModel):
"""
MarketplaceResolveIn
SandboxPreviewIn
""" # noqa: E501
id: Optional[StrictStr] = Field(default=None, description="ID is the job, from the path.")
outcome: Optional[StrictStr] = Field(default=None, description="Outcome is release — the seller is paid the whole amount — or refund.")
__properties: ClassVar[List[str]] = ["id", "outcome"]
id: Optional[StrictStr] = Field(default=None, description="ID is the sandbox, from the path.")
port: Optional[StrictInt] = Field(default=None, description="Port is the TCP port inside the sandbox to open, 1 to 65535. Whatever listens on it on localhost is what the address serves.")
__properties: ClassVar[List[str]] = ["id", "port"]
model_config = ConfigDict(
populate_by_name=True,
@@ -48,7 +48,7 @@ class MarketplaceResolveIn(BaseModel):
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of MarketplaceResolveIn from a JSON string"""
"""Create an instance of SandboxPreviewIn from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
@@ -73,7 +73,7 @@ class MarketplaceResolveIn(BaseModel):
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of MarketplaceResolveIn from a dict"""
"""Create an instance of SandboxPreviewIn from a dict"""
if obj is None:
return None
@@ -82,7 +82,7 @@ class MarketplaceResolveIn(BaseModel):
_obj = cls.model_validate({
"id": obj.get("id"),
"outcome": obj.get("outcome")
"port": obj.get("port")
})
return _obj
+4 -2
View File
@@ -17,7 +17,7 @@ import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
@@ -30,11 +30,12 @@ class SandboxRunIn(BaseModel):
blind: Optional[List[StrictStr]] = Field(default=None, description="Blind is the set of secrets this command must never publish. It exists because output is redacted where it is PRODUCED or not at all. A caller that scrubbed the returned result would still have streamed the unredacted bytes into the session as they were written — to a durable event store, an SSE feed and a chat thread — because the narration leaves the sandbox by a different path from the result. Nothing downstream can take a secret back out of a message that has already been delivered. The sandbox holds these only for the life of the one command, applies them to every stream leaving it, and never logs or stores them.")
command: Optional[StrictStr] = Field(default=None, description="Command is a shell line, run by `sh -c`. Use it when a pipeline or a redirection is the point, and Argv when it is not.")
dir: Optional[StrictStr] = Field(default=None, description="Dir runs the command somewhere other than the sandbox's working directory, which Leased.Workdir names.")
events: Optional[StrictBool] = Field(default=None, description="Events says the command writes JSON lines to stdout, one event each, as an agent harness's --json does: each is appended to Session as one `event`, in the shape the command wrote it, and stderr is narrated as output.")
id: Optional[StrictStr] = Field(default=None, description="ID is the sandbox to run in, from an earlier lease.")
session: Optional[StrictStr] = Field(default=None, description="Session is the live agent session this command narrates into: its output is appended there AS IT IS PRODUCED, so every surface watching that session watches the command work instead of a blank pause. A long run is otherwise a silence with a verdict at the end. It names a SESSION and never a tenant. The org is the one the caller already proved, so a session belonging to somebody else is simply absent from the org this call acts for and the append is refused there. Empty means nothing is watching, and then nothing is sent.")
stdin: Optional[StrictStr] = Field(default=None, description="Stdin is fed to the program on standard input. This is how bytes reach a file without being quoted into a shell line: `cat > path` with the contents here writes them exactly.")
timeout_sec: Optional[StrictInt] = Field(default=None, description="TimeoutSec bounds this ONE command, so a wedged program holds the caller for its own timeout rather than for the whole lease.", alias="timeoutSec")
__properties: ClassVar[List[str]] = ["argv", "blind", "command", "dir", "id", "session", "stdin", "timeoutSec"]
__properties: ClassVar[List[str]] = ["argv", "blind", "command", "dir", "events", "id", "session", "stdin", "timeoutSec"]
model_config = ConfigDict(
populate_by_name=True,
@@ -91,6 +92,7 @@ class SandboxRunIn(BaseModel):
"blind": obj.get("blind"),
"command": obj.get("command"),
"dir": obj.get("dir"),
"events": obj.get("events"),
"id": obj.get("id"),
"session": obj.get("session"),
"stdin": obj.get("stdin"),
@@ -1,102 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class SbomSbomIngest(BaseModel):
"""
SbomSbomIngest
""" # noqa: E501
document: Optional[Any] = None
format: Optional[StrictStr] = Field(default=None, description="Format names the document format; \"cyclonedx\" is the only one parsed.")
git_sha: Optional[StrictStr] = Field(default=None, description="GitSha is the commit the image was built from.", alias="gitSha")
image_digest: Optional[StrictStr] = Field(default=None, description="ImageDigest is the content-addressed digest (sha256:…) the components are keyed under. Required — it, not a tenant, is what an SBOM belongs to.", alias="imageDigest")
image_ref: Optional[StrictStr] = Field(default=None, description="ImageRef is the human-readable image reference the digest was published as. A resolve matches on either this or the digest.", alias="imageRef")
source_repo: Optional[StrictStr] = Field(default=None, description="SourceRepo is the repository the image was built from.", alias="sourceRepo")
__properties: ClassVar[List[str]] = ["document", "format", "gitSha", "imageDigest", "imageRef", "sourceRepo"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of SbomSbomIngest from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# set to None if document (nullable) is None
# and model_fields_set contains the field
if self.document is None and "document" in self.model_fields_set:
_dict['document'] = None
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of SbomSbomIngest from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"document": obj.get("document"),
"format": obj.get("format"),
"gitSha": obj.get("gitSha"),
"imageDigest": obj.get("imageDigest"),
"imageRef": obj.get("imageRef"),
"sourceRepo": obj.get("sourceRepo")
})
return _obj
@@ -1,89 +0,0 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class SbomSbomIngested(BaseModel):
"""
SbomSbomIngested
""" # noqa: E501
component_count: Optional[StrictInt] = Field(default=None, description="ComponentCount is how many components the CycloneDX document yielded and this call persisted.", alias="componentCount")
image_digest: Optional[StrictStr] = Field(default=None, description="ImageDigest is the content-addressed digest the components were keyed under.", alias="imageDigest")
__properties: ClassVar[List[str]] = ["componentCount", "imageDigest"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of SbomSbomIngested from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of SbomSbomIngested from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"componentCount": obj.get("componentCount"),
"imageDigest": obj.get("imageDigest")
})
return _obj

Some files were not shown because too many files have changed in this diff Show More