stackgen-sdk 0.1.8__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/.gitignore +2 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/PKG-INFO +1 -1
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/_version.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/namespace.py +161 -0
- stackgen_sdk-0.2.0/src/stackgen/aiden/resources.py +250 -0
- stackgen_sdk-0.2.0/src/stackgen/aiden/subscribe.py +87 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/.openapi-generator/FILES +603 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/__init__.py +439 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/api/aiden_api.py +21040 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/api/sre_api.py +11 -16
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/api_client.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/configuration.py +3 -31
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/exceptions.py +2 -2
- stackgen_sdk-0.2.0/src/stackgen/generated/models/__init__.py +211 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_app_mcp_binding.py +89 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_health_check.py +92 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_health_response.py +99 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_info.py +381 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_lifecycle_status.py +38 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_model_config.py +95 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_schedule.py +123 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_status.py +93 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_analysis_status.py +3 -3
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_attention.py +3 -3
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_categorization_summary.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_role.py +3 -3
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_sort_by.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_status.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_summary.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_sync_run_status.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_v1.py +6 -6
- stackgen_sdk-0.2.0/src/stackgen/generated/models/approval_item.py +158 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/artifact_info.py +2 -2
- stackgen_sdk-0.2.0/src/stackgen/generated/models/ask_execution_mode.py +37 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/ask_guild_request.py +16 -19
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/ask_guild_start_response.py +11 -11
- stackgen_sdk-0.2.0/src/stackgen/generated/models/attach_policy_request.py +93 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/audit_event.py +134 -0
- stackgen_sdk-0.1.8/src/stackgen/generated/models/prior_session_policy.py → stackgen_sdk-0.2.0/src/stackgen/generated/models/audit_event_list_response.py +21 -28
- stackgen_sdk-0.2.0/src/stackgen/generated/models/audit_facets.py +93 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/auto_approve_tool_rule.py +89 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/autonomy_budget_config.py +97 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/autonomy_budget_snapshot.py +107 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/autonomy_budget_tier.py +38 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/autonomy_budget_tier_reason.py +40 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/candidate_type.py +3 -3
- stackgen_sdk-0.2.0/src/stackgen/generated/models/container_image.py +89 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/cost_band.py +93 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/create_document_request.py +104 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/create_knowledge_base_request.py +97 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/create_policy_request.py +98 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/create_remote_runner_request.py +100 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/create_remote_runner_response.py +89 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/create_schedule_request.py +119 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/create_skill_companion_file.py +98 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/create_skill_request.py +98 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/create_webhook_request.py +112 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/dag_edge.py +6 -6
- stackgen_sdk-0.2.0/src/stackgen/generated/models/dag_node.py +128 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/diary_compression.py +38 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/diary_config.py +105 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/discovered_tool.py +93 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/document_ingest_status.py +109 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/document_ingest_workflow_status.py +39 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/document_processing_status.py +39 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/duration_band.py +93 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/entity_ref.py +4 -4
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/error_response.py +2 -2
- stackgen_sdk-0.2.0/src/stackgen/generated/models/eval_config.py +108 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/evaluate_policy_request.py +96 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/evaluate_policy_response.py +98 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/execution_list_item.py +118 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/execution_meta.py +21 -11
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/execution_structured_output.py +8 -8
- stackgen_sdk-0.2.0/src/stackgen/generated/models/execution_tool_call.py +99 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/execution_tool_call_list.py +95 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/fork_session_request.py +89 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/git_config.py +93 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/guild_integration.py +152 -0
- stackgen_sdk-0.1.8/src/stackgen/generated/models/json_error.py → stackgen_sdk-0.2.0/src/stackgen/generated/models/guild_json_error.py +6 -6
- stackgen_sdk-0.2.0/src/stackgen/generated/models/guild_platform_config.py +101 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/hal_guard_config.py +92 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/health_check_status.py +38 -0
- stackgen_sdk-0.1.8/src/stackgen/generated/models/stage_binding_write.py → stackgen_sdk-0.2.0/src/stackgen/generated/models/hitl_config.py +12 -18
- stackgen_sdk-0.2.0/src/stackgen/generated/models/ingested_document.py +145 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/ingested_document1.py +145 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_mcp_auth_promotion.py +91 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_remote_runner.py +95 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_scope.py +38 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_sidecar_launch.py +97 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_test_result.py +101 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_type_info.py +125 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigate_alert_request.py +7 -4
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigate_response.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_evidence.py +3 -3
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_evidence_kind.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_evidence_source.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_hypothesis.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_plain_summary.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_prior_incident.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_recommended_next_step.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_ref.py +5 -5
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_status.py +3 -3
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_structured_hypothesis_entry.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_structured_limitation_entry.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_structured_rca.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_triage_metadata.py +2 -2
- stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_base.py +131 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_config.py +87 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_item.py +151 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_item_backend.py +37 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_item_operation.py +39 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_type.py +37 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/list_alerts_response.py +6 -4
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/list_investigations_response.py +2 -2
- stackgen_sdk-0.2.0/src/stackgen/generated/models/list_remote_runner_tasks_response.py +97 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/list_remote_runners_response.py +95 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/llm_provider_type.py +44 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config.py +145 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_circuit_breaker.py +93 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_concurrency.py +89 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_context_mode.py +110 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_context_mode_per_tool_value.py +95 -0
- stackgen_sdk-0.1.8/src/stackgen/generated/models/register_agent_request_hitl.py → stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_metrics.py +10 -10
- stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_rate_limit.py +91 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_retry.py +89 -0
- stackgen_sdk-0.1.8/src/stackgen/generated/models/workflow_stage_write.py → stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_sanitize.py +10 -16
- stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_timeout.py +89 -0
- stackgen_sdk-0.1.8/src/stackgen/generated/models/register_agent_request_auto_approve_tools_inner.py → stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_tracing.py +11 -11
- stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_validation.py +87 -0
- stackgen_sdk-0.1.8/src/stackgen/generated/models/execution_list_item.py → stackgen_sdk-0.2.0/src/stackgen/generated/models/model_pricing.py +31 -35
- stackgen_sdk-0.2.0/src/stackgen/generated/models/model_provider_config.py +96 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/navigation_mode.py +37 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/pagination.py +2 -2
- stackgen_sdk-0.1.8/src/stackgen/generated/models/register_agent_request.py → stackgen_sdk-0.2.0/src/stackgen/generated/models/persona_variant_config.py +19 -21
- stackgen_sdk-0.2.0/src/stackgen/generated/models/pii_redaction_config.py +112 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/pii_regex_rule.py +90 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/policy.py +115 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input.py +140 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_agent.py +91 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_approver.py +101 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_environment.py +93 -0
- stackgen_sdk-0.1.8/src/stackgen/generated/models/agent_status.py → stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_principal.py +10 -10
- stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_project_membership.py +91 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_requester.py +89 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_tool.py +91 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_outcome.py +39 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_type.py +41 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/qualified_candidate.py +6 -6
- stackgen_sdk-0.2.0/src/stackgen/generated/models/rca_config.py +99 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/reasoning_effort_setting.py +43 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/register_agent_request.py +244 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/registered_model.py +127 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/remote_runner_info.py +125 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/remote_runner_task_info.py +124 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/resolve_approval_request.py +105 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/run_workflow_request.py +104 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/run_workflow_response.py +103 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/runbook_config.py +95 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/runner_capability.py +91 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/runner_status.py +39 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/scan_finding.py +102 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/schedule_history.py +112 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/schedule_run_list_response.py +97 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/schedule_run_status.py +2 -2
- stackgen_sdk-0.2.0/src/stackgen/generated/models/schedule_source.py +38 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/schedule_target_type.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_export.py +7 -7
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_export_part.py +5 -5
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_export_part_kind.py +3 -3
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_list_response.py +3 -3
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_responder_kind.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_summary.py +26 -20
- stackgen_sdk-0.2.0/src/stackgen/generated/models/sidecar_health_probes.py +89 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/signal_severity.py +2 -2
- stackgen_sdk-0.2.0/src/stackgen/generated/models/skill.py +132 -0
- stackgen_sdk-0.1.8/src/stackgen/generated/models/dag_node.py → stackgen_sdk-0.2.0/src/stackgen/generated/models/skill_file.py +19 -24
- stackgen_sdk-0.2.0/src/stackgen/generated/models/skill_summary.py +120 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/stage_binding.py +130 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/stage_expectation.py +95 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/start_chat_json_body.py +93 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/start_chat_response.py +91 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/subagent_spawn_contract.py +109 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/sync_response.py +2 -2
- stackgen_sdk-0.2.0/src/stackgen/generated/models/task_error_category.py +41 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/task_status.py +42 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/terminate_session_response.py +6 -6
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/trace_dag_response.py +7 -7
- stackgen_sdk-0.2.0/src/stackgen/generated/models/trigger_schedule202_response.py +89 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/trigger_webhook202_response.py +4 -8
- stackgen_sdk-0.2.0/src/stackgen/generated/models/update_agent_request.py +238 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/upsert_integration_request.py +123 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/version_status.py +39 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/webhook.py +117 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/webhook_run.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/webhook_run_detail.py +2 -2
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/webhook_run_list_response.py +2 -2
- stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow.py +209 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_metadata.py +97 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_output_contract.py +97 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_run_expectations.py +135 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_stage.py +93 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_tool_middleware.py +97 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_tool_middleware_circuit_breaker.py +91 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_tool_middleware_concurrency.py +91 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_trigger.py +94 -0
- stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_trigger_type.py +37 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/rest.py +2 -2
- stackgen_sdk-0.1.8/src/stackgen/generated/.openapi-generator/FILES +0 -219
- stackgen_sdk-0.1.8/src/stackgen/generated/__init__.py +0 -183
- stackgen_sdk-0.1.8/src/stackgen/generated/api/aiden_api.py +0 -6054
- stackgen_sdk-0.1.8/src/stackgen/generated/models/__init__.py +0 -83
- stackgen_sdk-0.1.8/src/stackgen/generated/models/workflow.py +0 -117
- stackgen_sdk-0.1.8/src/stackgen/generated/models/workflow_write.py +0 -129
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/README.md +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/pyproject.toml +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/__init__.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/_http.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/__init__.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/ask.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/models.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/run_status.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/runs.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/sessions.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/webhook.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/webhook_ops.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/workflow_builder.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/workflow_publish.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/cli.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/client.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/config.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/errors.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/.openapi-generator/VERSION +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/.openapi-generator-ignore +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/api/__init__.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/api_response.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/sre/__init__.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/sre/namespace.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/vault/__init__.py +0 -0
- {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/vault/namespace.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: stackgen-sdk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: StackGen SDK — Aiden, SRE, and Vault from one client
|
|
5
5
|
Project-URL: Homepage, https://appcd-dev.github.io/stackgen-sdk/
|
|
6
6
|
Project-URL: Documentation, https://appcd-dev.github.io/stackgen-sdk/
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.
|
|
22
|
-
__version_tuple__ = version_tuple = (0,
|
|
21
|
+
__version__ = version = '0.2.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 2, 0)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -7,7 +7,9 @@ from typing import Any
|
|
|
7
7
|
|
|
8
8
|
from stackgen.aiden.ask import AskArtifactJourney, AskArtifactResult
|
|
9
9
|
from stackgen.aiden.models import ModelRegistry
|
|
10
|
+
from stackgen.aiden.resources import AidenResources
|
|
10
11
|
from stackgen.aiden.run_status import RunStatus, build_run_status, require_run_ids
|
|
12
|
+
from stackgen.aiden.subscribe import ExecutionSubscribe, SubscribeCompleteResult
|
|
11
13
|
from stackgen.aiden.webhook import WebhookReportJourney, WebhookReportResult
|
|
12
14
|
from stackgen.aiden.webhook_ops import WebhookOps
|
|
13
15
|
from stackgen.aiden.workflow_builder import AgentDefinition, WorkflowDefinition
|
|
@@ -25,6 +27,8 @@ class AidenNamespace:
|
|
|
25
27
|
self._ask = AskArtifactJourney(config)
|
|
26
28
|
self._workflows = WorkflowPublishJourney(config)
|
|
27
29
|
self._webhook_ops = WebhookOps(config)
|
|
30
|
+
self._resources = AidenResources(config)
|
|
31
|
+
self._subscribe = ExecutionSubscribe(config)
|
|
28
32
|
self.models = ModelRegistry(config)
|
|
29
33
|
|
|
30
34
|
def run_webhook_and_download_report(
|
|
@@ -229,6 +233,12 @@ class AidenNamespace:
|
|
|
229
233
|
"""
|
|
230
234
|
return self._ask.wait_for_execution(trace_id)
|
|
231
235
|
|
|
236
|
+
def wait_for_subscribe_complete(
|
|
237
|
+
self, trace_id: str, *, timeout_ms: int = 10 * 60 * 1000
|
|
238
|
+
) -> SubscribeCompleteResult:
|
|
239
|
+
"""GET SSE /guild/api/v1/executions/{traceId}/subscribe until complete."""
|
|
240
|
+
return self._subscribe.wait_for_complete(trace_id, timeout_ms=timeout_ms)
|
|
241
|
+
|
|
232
242
|
def publish_workflow(
|
|
233
243
|
self,
|
|
234
244
|
workflow: WorkflowDefinition,
|
|
@@ -241,3 +251,154 @@ class AidenNamespace:
|
|
|
241
251
|
Pass a committed builder from ``create_workflow(...).then(...).commit()``.
|
|
242
252
|
"""
|
|
243
253
|
return self._workflows.publish(workflow, agents=agents, approve=approve)
|
|
254
|
+
|
|
255
|
+
# Expanded allowlisted surface (thin REST) — delegated to AidenResources.
|
|
256
|
+
def get_agent(self, name: str) -> dict[str, Any]:
|
|
257
|
+
return self._resources.get_agent(name)
|
|
258
|
+
|
|
259
|
+
def deregister_agent(self, name: str) -> dict[str, Any]:
|
|
260
|
+
return self._resources.deregister_agent(name)
|
|
261
|
+
|
|
262
|
+
def get_agent_health(self, name: str) -> dict[str, Any]:
|
|
263
|
+
return self._resources.get_agent_health(name)
|
|
264
|
+
|
|
265
|
+
def create_webhook(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
266
|
+
return self._resources.create_webhook(body)
|
|
267
|
+
|
|
268
|
+
def get_webhook(self, webhook_id: str) -> dict[str, Any]:
|
|
269
|
+
return self._resources.get_webhook(webhook_id)
|
|
270
|
+
|
|
271
|
+
def delete_webhook(self, webhook_id: str) -> dict[str, Any]:
|
|
272
|
+
return self._resources.delete_webhook(webhook_id)
|
|
273
|
+
|
|
274
|
+
def create_schedule(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
275
|
+
return self._resources.create_schedule(body)
|
|
276
|
+
|
|
277
|
+
def trigger_schedule(self, schedule_id: str) -> dict[str, Any]:
|
|
278
|
+
return self._resources.trigger_schedule(schedule_id)
|
|
279
|
+
|
|
280
|
+
def list_schedule_runs(self, schedule_id: str) -> list[dict[str, Any]]:
|
|
281
|
+
return self._resources.list_schedule_runs(schedule_id)
|
|
282
|
+
|
|
283
|
+
def delete_schedule(self, schedule_id: str) -> dict[str, Any]:
|
|
284
|
+
return self._resources.delete_schedule(schedule_id)
|
|
285
|
+
|
|
286
|
+
def list_integrations(self) -> list[dict[str, Any]]:
|
|
287
|
+
return self._resources.list_integrations()
|
|
288
|
+
|
|
289
|
+
def list_integration_types(self) -> list[dict[str, Any]]:
|
|
290
|
+
return self._resources.list_integration_types()
|
|
291
|
+
|
|
292
|
+
def get_integration(self, name: str) -> dict[str, Any]:
|
|
293
|
+
return self._resources.get_integration(name)
|
|
294
|
+
|
|
295
|
+
def upsert_integration(self, name: str, body: dict[str, Any]) -> dict[str, Any]:
|
|
296
|
+
return self._resources.upsert_integration(name, body)
|
|
297
|
+
|
|
298
|
+
def delete_integration(self, name: str) -> dict[str, Any]:
|
|
299
|
+
return self._resources.delete_integration(name)
|
|
300
|
+
|
|
301
|
+
def test_integration_connection(self, name: str) -> dict[str, Any]:
|
|
302
|
+
return self._resources.test_integration_connection(name)
|
|
303
|
+
|
|
304
|
+
def refresh_integration_tools(self, name: str) -> dict[str, Any]:
|
|
305
|
+
return self._resources.refresh_integration_tools(name)
|
|
306
|
+
|
|
307
|
+
def list_approvals(self, **params: Any) -> list[dict[str, Any]]:
|
|
308
|
+
return self._resources.list_approvals(**params)
|
|
309
|
+
|
|
310
|
+
def resolve_approval(self, approval_id: str, body: dict[str, Any]) -> dict[str, Any]:
|
|
311
|
+
return self._resources.resolve_approval(approval_id, body)
|
|
312
|
+
|
|
313
|
+
def create_policy(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
314
|
+
return self._resources.create_policy(body)
|
|
315
|
+
|
|
316
|
+
def attach_policy(self, agent_name: str, body: dict[str, Any]) -> dict[str, Any]:
|
|
317
|
+
return self._resources.attach_policy(agent_name, body)
|
|
318
|
+
|
|
319
|
+
def detach_policy(self, agent_name: str, policy_id: str) -> dict[str, Any]:
|
|
320
|
+
return self._resources.detach_policy(agent_name, policy_id)
|
|
321
|
+
|
|
322
|
+
def delete_policy(self, policy_id: str) -> dict[str, Any]:
|
|
323
|
+
return self._resources.delete_policy(policy_id)
|
|
324
|
+
|
|
325
|
+
def evaluate_policy(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
326
|
+
return self._resources.evaluate_policy(body)
|
|
327
|
+
|
|
328
|
+
def list_audit_events(self, **params: Any) -> list[dict[str, Any]]:
|
|
329
|
+
return self._resources.list_audit_events(**params)
|
|
330
|
+
|
|
331
|
+
def get_audit_event(self, event_id: str) -> dict[str, Any]:
|
|
332
|
+
return self._resources.get_audit_event(event_id)
|
|
333
|
+
|
|
334
|
+
def list_audit_facets(self, **params: Any) -> dict[str, Any]:
|
|
335
|
+
return self._resources.list_audit_facets(**params)
|
|
336
|
+
|
|
337
|
+
def list_models(self) -> list[dict[str, Any]]:
|
|
338
|
+
return self._resources.list_models()
|
|
339
|
+
|
|
340
|
+
def list_tools(self, **params: Any) -> list[dict[str, Any]]:
|
|
341
|
+
return self._resources.list_tools(**params)
|
|
342
|
+
|
|
343
|
+
def start_agent_chat(self, agent_name: str, body: dict[str, Any]) -> dict[str, Any]:
|
|
344
|
+
return self._resources.start_agent_chat(agent_name, body)
|
|
345
|
+
|
|
346
|
+
def fork_session(
|
|
347
|
+
self, session_id: str, body: dict[str, Any] | None = None
|
|
348
|
+
) -> dict[str, Any]:
|
|
349
|
+
return self._resources.fork_session(session_id, body)
|
|
350
|
+
|
|
351
|
+
def list_execution_tool_calls(
|
|
352
|
+
self, trace_id: str, **params: Any
|
|
353
|
+
) -> list[dict[str, Any]]:
|
|
354
|
+
return self._resources.list_execution_tool_calls(trace_id, **params)
|
|
355
|
+
|
|
356
|
+
def delete_workflow(self, name: str) -> dict[str, Any]:
|
|
357
|
+
return self._resources.delete_workflow(name)
|
|
358
|
+
|
|
359
|
+
def run_workflow(
|
|
360
|
+
self, name: str, body: dict[str, Any] | None = None
|
|
361
|
+
) -> dict[str, Any]:
|
|
362
|
+
return self._resources.run_workflow(name, body)
|
|
363
|
+
|
|
364
|
+
def create_knowledge_base(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
365
|
+
return self._resources.create_knowledge_base(body)
|
|
366
|
+
|
|
367
|
+
def delete_knowledge_base(self, knowledge_base_id: str) -> dict[str, Any]:
|
|
368
|
+
return self._resources.delete_knowledge_base(knowledge_base_id)
|
|
369
|
+
|
|
370
|
+
def create_knowledge_document(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
371
|
+
return self._resources.create_knowledge_document(body)
|
|
372
|
+
|
|
373
|
+
def get_knowledge_document(self, document_id: str) -> dict[str, Any]:
|
|
374
|
+
return self._resources.get_knowledge_document(document_id)
|
|
375
|
+
|
|
376
|
+
def list_knowledge_documents(self, **params: Any) -> list[dict[str, Any]]:
|
|
377
|
+
return self._resources.list_knowledge_documents(**params)
|
|
378
|
+
|
|
379
|
+
def delete_knowledge_document(self, document_id: str) -> dict[str, Any]:
|
|
380
|
+
return self._resources.delete_knowledge_document(document_id)
|
|
381
|
+
|
|
382
|
+
def list_knowledge_items(self, **params: Any) -> list[dict[str, Any]]:
|
|
383
|
+
return self._resources.list_knowledge_items(**params)
|
|
384
|
+
|
|
385
|
+
def create_skill(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
386
|
+
return self._resources.create_skill(body)
|
|
387
|
+
|
|
388
|
+
def delete_skill(self, skill_id: str) -> dict[str, Any]:
|
|
389
|
+
return self._resources.delete_skill(skill_id)
|
|
390
|
+
|
|
391
|
+
def create_remote_runner(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
392
|
+
return self._resources.create_remote_runner(body)
|
|
393
|
+
|
|
394
|
+
def get_remote_runner(self, runner_id: str) -> dict[str, Any]:
|
|
395
|
+
return self._resources.get_remote_runner(runner_id)
|
|
396
|
+
|
|
397
|
+
def list_remote_runners(self, **params: Any) -> list[dict[str, Any]]:
|
|
398
|
+
return self._resources.list_remote_runners(**params)
|
|
399
|
+
|
|
400
|
+
def list_remote_runner_tasks(self, runner_id: str) -> list[dict[str, Any]]:
|
|
401
|
+
return self._resources.list_remote_runner_tasks(runner_id)
|
|
402
|
+
|
|
403
|
+
def revoke_remote_runner(self, runner_id: str) -> dict[str, Any]:
|
|
404
|
+
return self._resources.revoke_remote_runner(runner_id)
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"""Thin allowlisted Aiden REST helpers beyond webhook/Ask journeys."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import urllib.parse
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from stackgen import _http
|
|
10
|
+
from stackgen.config import StackgenConfig
|
|
11
|
+
from stackgen.errors import StackgenError
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _with_org(config: StackgenConfig, params: dict[str, Any] | None = None) -> dict[str, Any]:
|
|
15
|
+
query = dict(params or {})
|
|
16
|
+
if config.org_id and "orgId" not in query:
|
|
17
|
+
query["orgId"] = config.org_id
|
|
18
|
+
return query
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _query_string(params: dict[str, Any]) -> str:
|
|
22
|
+
cleaned = {k: v for k, v in params.items() if v is not None and v != ""}
|
|
23
|
+
if not cleaned:
|
|
24
|
+
return ""
|
|
25
|
+
return "?" + urllib.parse.urlencode(cleaned)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _as_object(data: Any, label: str) -> dict[str, Any]:
|
|
29
|
+
if not isinstance(data, dict):
|
|
30
|
+
raise StackgenError(f"unexpected {label}: {data!r}")
|
|
31
|
+
return data
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class AidenResources:
|
|
35
|
+
def __init__(self, config: StackgenConfig) -> None:
|
|
36
|
+
self._config = config
|
|
37
|
+
|
|
38
|
+
def _url(self, path: str, params: dict[str, Any] | None = None) -> str:
|
|
39
|
+
return (
|
|
40
|
+
f"{self._config.aiden_url()}/api/v1{path}"
|
|
41
|
+
+ _query_string(_with_org(self._config, params))
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
def _get(self, path: str, params: dict[str, Any] | None = None) -> Any:
|
|
45
|
+
return _http.request(self._url(path, params), self._config.api_token)
|
|
46
|
+
|
|
47
|
+
def _send(
|
|
48
|
+
self,
|
|
49
|
+
path: str,
|
|
50
|
+
method: str,
|
|
51
|
+
body: Any | None = None,
|
|
52
|
+
params: dict[str, Any] | None = None,
|
|
53
|
+
) -> Any:
|
|
54
|
+
kwargs: dict[str, Any] = {"method": method}
|
|
55
|
+
if body is not None:
|
|
56
|
+
kwargs["body"] = json.dumps(body).encode("utf-8")
|
|
57
|
+
kwargs["content_type"] = "application/json"
|
|
58
|
+
return _http.request(self._url(path, params), self._config.api_token, **kwargs)
|
|
59
|
+
|
|
60
|
+
def get_agent(self, name: str) -> dict[str, Any]:
|
|
61
|
+
return _as_object(self._get(f"/agents/{name}"), "getAgent")
|
|
62
|
+
|
|
63
|
+
def deregister_agent(self, name: str) -> dict[str, Any]:
|
|
64
|
+
return _as_object(self._send(f"/agents/{name}", "DELETE"), "deregisterAgent")
|
|
65
|
+
|
|
66
|
+
def get_agent_health(self, name: str) -> dict[str, Any]:
|
|
67
|
+
return _as_object(self._get(f"/agents/{name}/health"), "getAgentHealth")
|
|
68
|
+
|
|
69
|
+
def create_webhook(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
70
|
+
return _as_object(self._send("/webhooks", "POST", body), "createWebhook")
|
|
71
|
+
|
|
72
|
+
def get_webhook(self, webhook_id: str) -> dict[str, Any]:
|
|
73
|
+
return _as_object(self._get(f"/webhooks/{webhook_id}"), "getWebhook")
|
|
74
|
+
|
|
75
|
+
def delete_webhook(self, webhook_id: str) -> dict[str, Any]:
|
|
76
|
+
return _as_object(self._send(f"/webhooks/{webhook_id}", "DELETE"), "deleteWebhook")
|
|
77
|
+
|
|
78
|
+
def create_schedule(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
79
|
+
return _as_object(self._send("/schedules", "POST", body), "createSchedule")
|
|
80
|
+
|
|
81
|
+
def trigger_schedule(self, schedule_id: str) -> dict[str, Any]:
|
|
82
|
+
return _as_object(
|
|
83
|
+
self._send(f"/schedules/{schedule_id}/trigger", "POST", {}),
|
|
84
|
+
"triggerSchedule",
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
def list_schedule_runs(self, schedule_id: str) -> list[dict[str, Any]]:
|
|
88
|
+
return _http.as_list(self._get(f"/schedules/{schedule_id}/runs"))
|
|
89
|
+
|
|
90
|
+
def delete_schedule(self, schedule_id: str) -> dict[str, Any]:
|
|
91
|
+
return _as_object(
|
|
92
|
+
self._send(f"/schedules/{schedule_id}", "DELETE"), "deleteSchedule"
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
def list_integrations(self) -> list[dict[str, Any]]:
|
|
96
|
+
return _http.as_list(self._get("/integrations"))
|
|
97
|
+
|
|
98
|
+
def list_integration_types(self) -> list[dict[str, Any]]:
|
|
99
|
+
return _http.as_list(self._get("/integrations/types"))
|
|
100
|
+
|
|
101
|
+
def get_integration(self, name: str) -> dict[str, Any]:
|
|
102
|
+
return _as_object(self._get(f"/integrations/{name}"), "getIntegration")
|
|
103
|
+
|
|
104
|
+
def upsert_integration(self, name: str, body: dict[str, Any]) -> dict[str, Any]:
|
|
105
|
+
return _as_object(
|
|
106
|
+
self._send(f"/integrations/{name}", "PUT", body), "upsertIntegration"
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
def delete_integration(self, name: str) -> dict[str, Any]:
|
|
110
|
+
return _as_object(
|
|
111
|
+
self._send(f"/integrations/{name}", "DELETE"), "deleteIntegration"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
def test_integration_connection(self, name: str) -> dict[str, Any]:
|
|
115
|
+
return _as_object(
|
|
116
|
+
self._send(f"/integrations/{name}/test", "POST", {}),
|
|
117
|
+
"testIntegrationConnection",
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
def refresh_integration_tools(self, name: str) -> dict[str, Any]:
|
|
121
|
+
return _as_object(
|
|
122
|
+
self._send(f"/integrations/{name}/refresh-tools", "POST", {}),
|
|
123
|
+
"refreshIntegrationTools",
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
def list_approvals(self, **params: Any) -> list[dict[str, Any]]:
|
|
127
|
+
return _http.as_list(self._get("/approvals", params))
|
|
128
|
+
|
|
129
|
+
def resolve_approval(self, approval_id: str, body: dict[str, Any]) -> dict[str, Any]:
|
|
130
|
+
return _as_object(
|
|
131
|
+
self._send(f"/approvals/{approval_id}", "POST", body), "resolveApproval"
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
def create_policy(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
135
|
+
return _as_object(self._send("/policies", "POST", body), "createPolicy")
|
|
136
|
+
|
|
137
|
+
def attach_policy(self, agent_name: str, body: dict[str, Any]) -> dict[str, Any]:
|
|
138
|
+
return _as_object(
|
|
139
|
+
self._send(f"/agents/{agent_name}/policies", "POST", body), "attachPolicy"
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
def detach_policy(self, agent_name: str, policy_id: str) -> dict[str, Any]:
|
|
143
|
+
return _as_object(
|
|
144
|
+
self._send(f"/agents/{agent_name}/policies/{policy_id}", "DELETE"),
|
|
145
|
+
"detachPolicy",
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
def delete_policy(self, policy_id: str) -> dict[str, Any]:
|
|
149
|
+
return _as_object(self._send(f"/policies/{policy_id}", "DELETE"), "deletePolicy")
|
|
150
|
+
|
|
151
|
+
def evaluate_policy(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
152
|
+
return _as_object(self._send("/policies/evaluate", "POST", body), "evaluatePolicy")
|
|
153
|
+
|
|
154
|
+
def list_audit_events(self, **params: Any) -> list[dict[str, Any]]:
|
|
155
|
+
return _http.as_list(self._get("/audit/events", params))
|
|
156
|
+
|
|
157
|
+
def get_audit_event(self, event_id: str) -> dict[str, Any]:
|
|
158
|
+
return _as_object(self._get(f"/audit/events/{event_id}"), "getAuditEvent")
|
|
159
|
+
|
|
160
|
+
def list_audit_facets(self, **params: Any) -> dict[str, Any]:
|
|
161
|
+
return _as_object(self._get("/audit/facets", params), "listAuditFacets")
|
|
162
|
+
|
|
163
|
+
def list_models(self) -> list[dict[str, Any]]:
|
|
164
|
+
return _http.as_list(self._get("/models"))
|
|
165
|
+
|
|
166
|
+
def list_tools(self, **params: Any) -> list[dict[str, Any]]:
|
|
167
|
+
return _http.as_list(self._get("/tools", params))
|
|
168
|
+
|
|
169
|
+
def start_agent_chat(self, agent_name: str, body: dict[str, Any]) -> dict[str, Any]:
|
|
170
|
+
return _as_object(
|
|
171
|
+
self._send(f"/agents/{agent_name}/chat/start", "POST", body),
|
|
172
|
+
"startAgentChat",
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
def fork_session(self, session_id: str, body: dict[str, Any] | None = None) -> dict[str, Any]:
|
|
176
|
+
return _as_object(
|
|
177
|
+
self._send(f"/sessions/{session_id}/fork", "POST", body or {}),
|
|
178
|
+
"forkSession",
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
def list_execution_tool_calls(
|
|
182
|
+
self, trace_id: str, **params: Any
|
|
183
|
+
) -> list[dict[str, Any]]:
|
|
184
|
+
return _http.as_list(self._get(f"/executions/{trace_id}/tool-calls", params))
|
|
185
|
+
|
|
186
|
+
def delete_workflow(self, name: str) -> dict[str, Any]:
|
|
187
|
+
return _as_object(self._send(f"/workflows/{name}", "DELETE"), "deleteWorkflow")
|
|
188
|
+
|
|
189
|
+
def run_workflow(self, name: str, body: dict[str, Any] | None = None) -> dict[str, Any]:
|
|
190
|
+
return _as_object(
|
|
191
|
+
self._send(f"/workflows/{name}/run", "POST", body or {}), "runWorkflow"
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
def create_knowledge_base(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
195
|
+
return _as_object(
|
|
196
|
+
self._send("/knowledge/bases", "POST", body), "createKnowledgeBase"
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
def delete_knowledge_base(self, knowledge_base_id: str) -> dict[str, Any]:
|
|
200
|
+
return _as_object(
|
|
201
|
+
self._send(f"/knowledge/bases/{knowledge_base_id}", "DELETE"),
|
|
202
|
+
"deleteKnowledgeBase",
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
def create_knowledge_document(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
206
|
+
return _as_object(
|
|
207
|
+
self._send("/knowledge/documents", "POST", body), "createKnowledgeDocument"
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
def get_knowledge_document(self, document_id: str) -> dict[str, Any]:
|
|
211
|
+
return _as_object(
|
|
212
|
+
self._get(f"/knowledge/documents/{document_id}"), "getKnowledgeDocument"
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
def list_knowledge_documents(self, **params: Any) -> list[dict[str, Any]]:
|
|
216
|
+
return _http.as_list(self._get("/knowledge/documents", params))
|
|
217
|
+
|
|
218
|
+
def delete_knowledge_document(self, document_id: str) -> dict[str, Any]:
|
|
219
|
+
return _as_object(
|
|
220
|
+
self._send(f"/knowledge/documents/{document_id}", "DELETE"),
|
|
221
|
+
"deleteKnowledgeDocument",
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
def list_knowledge_items(self, **params: Any) -> list[dict[str, Any]]:
|
|
225
|
+
return _http.as_list(self._get("/knowledge/items", params))
|
|
226
|
+
|
|
227
|
+
def create_skill(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
228
|
+
return _as_object(self._send("/skills", "POST", body), "createSkill")
|
|
229
|
+
|
|
230
|
+
def delete_skill(self, skill_id: str) -> dict[str, Any]:
|
|
231
|
+
return _as_object(self._send(f"/skills/{skill_id}", "DELETE"), "deleteSkill")
|
|
232
|
+
|
|
233
|
+
def create_remote_runner(self, body: dict[str, Any]) -> dict[str, Any]:
|
|
234
|
+
return _as_object(
|
|
235
|
+
self._send("/remote-runners", "POST", body), "createRemoteRunner"
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
def get_remote_runner(self, runner_id: str) -> dict[str, Any]:
|
|
239
|
+
return _as_object(self._get(f"/remote-runners/{runner_id}"), "getRemoteRunner")
|
|
240
|
+
|
|
241
|
+
def list_remote_runners(self, **params: Any) -> list[dict[str, Any]]:
|
|
242
|
+
return _http.as_list(self._get("/remote-runners", params))
|
|
243
|
+
|
|
244
|
+
def list_remote_runner_tasks(self, runner_id: str) -> list[dict[str, Any]]:
|
|
245
|
+
return _http.as_list(self._get(f"/remote-runners/{runner_id}/tasks"))
|
|
246
|
+
|
|
247
|
+
def revoke_remote_runner(self, runner_id: str) -> dict[str, Any]:
|
|
248
|
+
return _as_object(
|
|
249
|
+
self._send(f"/remote-runners/{runner_id}", "DELETE"), "revokeRemoteRunner"
|
|
250
|
+
)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""SSE subscribeExecution helper."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from urllib.error import HTTPError, URLError
|
|
7
|
+
from urllib.request import Request, urlopen
|
|
8
|
+
|
|
9
|
+
from stackgen import _http
|
|
10
|
+
from stackgen.config import StackgenConfig
|
|
11
|
+
from stackgen.errors import HttpError, TimeoutError as SdkTimeoutError
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class SubscribeCompleteResult:
|
|
16
|
+
ok: bool
|
|
17
|
+
event_count: int
|
|
18
|
+
raw_snippet: str
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ExecutionSubscribe:
|
|
22
|
+
def __init__(self, config: StackgenConfig) -> None:
|
|
23
|
+
self._config = config
|
|
24
|
+
|
|
25
|
+
def wait_for_complete(
|
|
26
|
+
self, trace_id: str, *, timeout_ms: int = 10 * 60 * 1000
|
|
27
|
+
) -> SubscribeCompleteResult:
|
|
28
|
+
url = (
|
|
29
|
+
f"{self._config.aiden_url()}/api/v1/executions/{trace_id}/subscribe"
|
|
30
|
+
+ _http.query(self._config.org_id)
|
|
31
|
+
)
|
|
32
|
+
req = Request(
|
|
33
|
+
url,
|
|
34
|
+
headers={
|
|
35
|
+
"Authorization": f"Bearer {self._config.api_token}",
|
|
36
|
+
"Accept": "text/event-stream",
|
|
37
|
+
},
|
|
38
|
+
method="GET",
|
|
39
|
+
)
|
|
40
|
+
chunks: list[str] = []
|
|
41
|
+
event_count = 0
|
|
42
|
+
ok = False
|
|
43
|
+
try:
|
|
44
|
+
with urlopen(req, timeout=timeout_ms / 1000) as resp: # noqa: S310
|
|
45
|
+
buffer = ""
|
|
46
|
+
while True:
|
|
47
|
+
line = resp.readline()
|
|
48
|
+
if not line:
|
|
49
|
+
break
|
|
50
|
+
buffer += line.decode("utf-8", errors="replace")
|
|
51
|
+
if "\n\n" not in buffer:
|
|
52
|
+
continue
|
|
53
|
+
frames = buffer.split("\n\n")
|
|
54
|
+
buffer = frames.pop()
|
|
55
|
+
for frame in frames:
|
|
56
|
+
if not frame.strip():
|
|
57
|
+
continue
|
|
58
|
+
event_count += 1
|
|
59
|
+
chunks.append(frame[:500])
|
|
60
|
+
lower = frame.lower()
|
|
61
|
+
if "execution_complete" in lower:
|
|
62
|
+
ok = True
|
|
63
|
+
return SubscribeCompleteResult(
|
|
64
|
+
ok=True,
|
|
65
|
+
event_count=event_count,
|
|
66
|
+
raw_snippet="\n---\n".join(chunks[-5:]),
|
|
67
|
+
)
|
|
68
|
+
if "subscribe_end" in lower and "error" not in lower:
|
|
69
|
+
ok = True
|
|
70
|
+
except SdkTimeoutError:
|
|
71
|
+
raise
|
|
72
|
+
except TimeoutError as err:
|
|
73
|
+
raise SdkTimeoutError("subscribeExecution", int(timeout_ms / 1000)) from err
|
|
74
|
+
except HTTPError as err:
|
|
75
|
+
detail = err.read().decode("utf-8", errors="replace") if err.fp else ""
|
|
76
|
+
raise HttpError(
|
|
77
|
+
f"subscribeExecution -> HTTP {err.code}: {detail}",
|
|
78
|
+
status_code=err.code,
|
|
79
|
+
) from err
|
|
80
|
+
except URLError as err:
|
|
81
|
+
raise HttpError(f"subscribeExecution -> {err}") from err
|
|
82
|
+
|
|
83
|
+
return SubscribeCompleteResult(
|
|
84
|
+
ok=ok,
|
|
85
|
+
event_count=event_count,
|
|
86
|
+
raw_snippet="\n---\n".join(chunks[-5:]),
|
|
87
|
+
)
|