stackgen-sdk 0.1.8__tar.gz → 0.3.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.
Files changed (258) hide show
  1. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/.gitignore +2 -0
  2. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/PKG-INFO +1 -1
  3. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/__init__.py +2 -0
  4. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/_version.py +2 -2
  5. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/__init__.py +2 -0
  6. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/namespace.py +183 -0
  7. stackgen_sdk-0.3.0/src/stackgen/aiden/resources.py +291 -0
  8. stackgen_sdk-0.3.0/src/stackgen/aiden/steer.py +19 -0
  9. stackgen_sdk-0.3.0/src/stackgen/aiden/subscribe.py +87 -0
  10. stackgen_sdk-0.3.0/src/stackgen/generated/.openapi-generator/FILES +645 -0
  11. stackgen_sdk-0.3.0/src/stackgen/generated/__init__.py +467 -0
  12. stackgen_sdk-0.3.0/src/stackgen/generated/api/aiden_api.py +22846 -0
  13. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/api/sre_api.py +11 -16
  14. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/api_client.py +2 -2
  15. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/configuration.py +3 -31
  16. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/exceptions.py +2 -2
  17. stackgen_sdk-0.3.0/src/stackgen/generated/models/__init__.py +225 -0
  18. stackgen_sdk-0.3.0/src/stackgen/generated/models/agent_app_mcp_binding.py +89 -0
  19. stackgen_sdk-0.3.0/src/stackgen/generated/models/agent_health_check.py +92 -0
  20. stackgen_sdk-0.3.0/src/stackgen/generated/models/agent_health_response.py +99 -0
  21. stackgen_sdk-0.3.0/src/stackgen/generated/models/agent_info.py +381 -0
  22. stackgen_sdk-0.3.0/src/stackgen/generated/models/agent_lifecycle_status.py +38 -0
  23. stackgen_sdk-0.3.0/src/stackgen/generated/models/agent_model_config.py +95 -0
  24. stackgen_sdk-0.3.0/src/stackgen/generated/models/agent_schedule.py +123 -0
  25. stackgen_sdk-0.3.0/src/stackgen/generated/models/agent_status.py +93 -0
  26. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/alert_analysis_status.py +3 -3
  27. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/alert_attention.py +3 -3
  28. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/alert_categorization_summary.py +2 -2
  29. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/alert_role.py +3 -3
  30. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/alert_sort_by.py +2 -2
  31. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/alert_status.py +2 -2
  32. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/alert_summary.py +2 -2
  33. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/alert_sync_run_status.py +2 -2
  34. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/alert_v1.py +6 -6
  35. stackgen_sdk-0.3.0/src/stackgen/generated/models/approval_item.py +158 -0
  36. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/artifact_info.py +2 -2
  37. stackgen_sdk-0.3.0/src/stackgen/generated/models/ask_execution_mode.py +37 -0
  38. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/ask_guild_request.py +16 -19
  39. stackgen_sdk-0.3.0/src/stackgen/generated/models/ask_guild_route_decision.py +123 -0
  40. stackgen_sdk-0.3.0/src/stackgen/generated/models/ask_guild_route_response.py +93 -0
  41. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/ask_guild_start_response.py +11 -11
  42. stackgen_sdk-0.3.0/src/stackgen/generated/models/attach_policy_request.py +93 -0
  43. stackgen_sdk-0.3.0/src/stackgen/generated/models/audit_event.py +134 -0
  44. stackgen_sdk-0.1.8/src/stackgen/generated/models/prior_session_policy.py → stackgen_sdk-0.3.0/src/stackgen/generated/models/audit_event_list_response.py +21 -28
  45. stackgen_sdk-0.3.0/src/stackgen/generated/models/audit_facets.py +93 -0
  46. stackgen_sdk-0.3.0/src/stackgen/generated/models/auto_approve_tool_rule.py +89 -0
  47. stackgen_sdk-0.3.0/src/stackgen/generated/models/autonomy_budget_config.py +97 -0
  48. stackgen_sdk-0.3.0/src/stackgen/generated/models/autonomy_budget_snapshot.py +107 -0
  49. stackgen_sdk-0.3.0/src/stackgen/generated/models/autonomy_budget_tier.py +38 -0
  50. stackgen_sdk-0.3.0/src/stackgen/generated/models/autonomy_budget_tier_reason.py +40 -0
  51. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/candidate_type.py +3 -3
  52. stackgen_sdk-0.3.0/src/stackgen/generated/models/chat_channel_selector.py +89 -0
  53. stackgen_sdk-0.3.0/src/stackgen/generated/models/chat_subscription.py +124 -0
  54. stackgen_sdk-0.3.0/src/stackgen/generated/models/chat_subscription_list_response.py +95 -0
  55. stackgen_sdk-0.3.0/src/stackgen/generated/models/chat_subscription_target_type.py +37 -0
  56. stackgen_sdk-0.3.0/src/stackgen/generated/models/chat_subscription_trigger_type.py +38 -0
  57. stackgen_sdk-0.3.0/src/stackgen/generated/models/container_image.py +89 -0
  58. stackgen_sdk-0.3.0/src/stackgen/generated/models/cost_band.py +93 -0
  59. stackgen_sdk-0.3.0/src/stackgen/generated/models/create_chat_subscription_request.py +123 -0
  60. stackgen_sdk-0.3.0/src/stackgen/generated/models/create_document_request.py +104 -0
  61. stackgen_sdk-0.3.0/src/stackgen/generated/models/create_knowledge_base_request.py +97 -0
  62. stackgen_sdk-0.3.0/src/stackgen/generated/models/create_policy_request.py +98 -0
  63. stackgen_sdk-0.3.0/src/stackgen/generated/models/create_remote_runner_request.py +100 -0
  64. stackgen_sdk-0.3.0/src/stackgen/generated/models/create_remote_runner_response.py +89 -0
  65. stackgen_sdk-0.3.0/src/stackgen/generated/models/create_schedule_request.py +119 -0
  66. stackgen_sdk-0.3.0/src/stackgen/generated/models/create_skill_companion_file.py +98 -0
  67. stackgen_sdk-0.3.0/src/stackgen/generated/models/create_skill_request.py +98 -0
  68. stackgen_sdk-0.3.0/src/stackgen/generated/models/create_webhook_request.py +112 -0
  69. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/dag_edge.py +6 -6
  70. stackgen_sdk-0.3.0/src/stackgen/generated/models/dag_node.py +128 -0
  71. stackgen_sdk-0.3.0/src/stackgen/generated/models/diary_compression.py +38 -0
  72. stackgen_sdk-0.3.0/src/stackgen/generated/models/diary_config.py +105 -0
  73. stackgen_sdk-0.3.0/src/stackgen/generated/models/discovered_tool.py +93 -0
  74. stackgen_sdk-0.3.0/src/stackgen/generated/models/document_ingest_status.py +109 -0
  75. stackgen_sdk-0.3.0/src/stackgen/generated/models/document_ingest_workflow_status.py +39 -0
  76. stackgen_sdk-0.3.0/src/stackgen/generated/models/document_processing_status.py +39 -0
  77. stackgen_sdk-0.3.0/src/stackgen/generated/models/duration_band.py +93 -0
  78. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/entity_ref.py +4 -4
  79. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/error_response.py +2 -2
  80. stackgen_sdk-0.3.0/src/stackgen/generated/models/eval_config.py +108 -0
  81. stackgen_sdk-0.3.0/src/stackgen/generated/models/evaluate_policy_request.py +96 -0
  82. stackgen_sdk-0.3.0/src/stackgen/generated/models/evaluate_policy_response.py +98 -0
  83. stackgen_sdk-0.3.0/src/stackgen/generated/models/execution_list_item.py +118 -0
  84. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/execution_meta.py +21 -11
  85. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/execution_structured_output.py +8 -8
  86. stackgen_sdk-0.3.0/src/stackgen/generated/models/execution_tool_call.py +99 -0
  87. stackgen_sdk-0.3.0/src/stackgen/generated/models/execution_tool_call_list.py +95 -0
  88. stackgen_sdk-0.3.0/src/stackgen/generated/models/fork_session_request.py +89 -0
  89. stackgen_sdk-0.3.0/src/stackgen/generated/models/git_config.py +93 -0
  90. stackgen_sdk-0.3.0/src/stackgen/generated/models/guild_integration.py +184 -0
  91. stackgen_sdk-0.1.8/src/stackgen/generated/models/json_error.py → stackgen_sdk-0.3.0/src/stackgen/generated/models/guild_json_error.py +6 -6
  92. stackgen_sdk-0.3.0/src/stackgen/generated/models/guild_platform_config.py +101 -0
  93. stackgen_sdk-0.3.0/src/stackgen/generated/models/hal_guard_config.py +92 -0
  94. stackgen_sdk-0.3.0/src/stackgen/generated/models/health_check_status.py +38 -0
  95. stackgen_sdk-0.1.8/src/stackgen/generated/models/stage_binding_write.py → stackgen_sdk-0.3.0/src/stackgen/generated/models/hitl_config.py +12 -18
  96. stackgen_sdk-0.3.0/src/stackgen/generated/models/ingested_document.py +145 -0
  97. stackgen_sdk-0.3.0/src/stackgen/generated/models/ingested_document1.py +145 -0
  98. stackgen_sdk-0.3.0/src/stackgen/generated/models/integration_availability_reason.py +36 -0
  99. stackgen_sdk-0.3.0/src/stackgen/generated/models/integration_availability_status.py +38 -0
  100. stackgen_sdk-0.3.0/src/stackgen/generated/models/integration_mcp_auth_promotion.py +91 -0
  101. stackgen_sdk-0.3.0/src/stackgen/generated/models/integration_remote_runner.py +95 -0
  102. stackgen_sdk-0.3.0/src/stackgen/generated/models/integration_scope.py +38 -0
  103. stackgen_sdk-0.3.0/src/stackgen/generated/models/integration_sidecar_launch.py +97 -0
  104. stackgen_sdk-0.3.0/src/stackgen/generated/models/integration_test_result.py +101 -0
  105. stackgen_sdk-0.3.0/src/stackgen/generated/models/integration_type_info.py +125 -0
  106. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigate_alert_request.py +7 -4
  107. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigate_response.py +2 -2
  108. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation.py +2 -2
  109. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_evidence.py +3 -3
  110. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_evidence_kind.py +2 -2
  111. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_evidence_source.py +2 -2
  112. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_hypothesis.py +2 -2
  113. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_plain_summary.py +2 -2
  114. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_prior_incident.py +2 -2
  115. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_recommended_next_step.py +2 -2
  116. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_ref.py +5 -5
  117. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_status.py +3 -3
  118. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_structured_hypothesis_entry.py +2 -2
  119. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_structured_limitation_entry.py +2 -2
  120. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_structured_rca.py +2 -2
  121. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/investigation_triage_metadata.py +2 -2
  122. stackgen_sdk-0.3.0/src/stackgen/generated/models/knowledge_base.py +131 -0
  123. stackgen_sdk-0.3.0/src/stackgen/generated/models/knowledge_config.py +87 -0
  124. stackgen_sdk-0.3.0/src/stackgen/generated/models/knowledge_item.py +151 -0
  125. stackgen_sdk-0.3.0/src/stackgen/generated/models/knowledge_item_backend.py +37 -0
  126. stackgen_sdk-0.3.0/src/stackgen/generated/models/knowledge_item_operation.py +39 -0
  127. stackgen_sdk-0.3.0/src/stackgen/generated/models/knowledge_type.py +37 -0
  128. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/list_alerts_response.py +6 -4
  129. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/list_investigations_response.py +2 -2
  130. stackgen_sdk-0.3.0/src/stackgen/generated/models/list_remote_runner_tasks_response.py +97 -0
  131. stackgen_sdk-0.3.0/src/stackgen/generated/models/list_remote_runners_response.py +95 -0
  132. stackgen_sdk-0.3.0/src/stackgen/generated/models/llm_provider_type.py +44 -0
  133. stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config.py +145 -0
  134. stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_circuit_breaker.py +93 -0
  135. stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_concurrency.py +89 -0
  136. stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_context_mode.py +110 -0
  137. stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_context_mode_per_tool_value.py +95 -0
  138. stackgen_sdk-0.1.8/src/stackgen/generated/models/register_agent_request_hitl.py → stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_metrics.py +10 -10
  139. stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_rate_limit.py +91 -0
  140. stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_retry.py +89 -0
  141. stackgen_sdk-0.1.8/src/stackgen/generated/models/workflow_stage_write.py → stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_sanitize.py +10 -16
  142. stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_timeout.py +89 -0
  143. stackgen_sdk-0.1.8/src/stackgen/generated/models/register_agent_request_auto_approve_tools_inner.py → stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_tracing.py +11 -11
  144. stackgen_sdk-0.3.0/src/stackgen/generated/models/middleware_config_validation.py +87 -0
  145. stackgen_sdk-0.1.8/src/stackgen/generated/models/execution_list_item.py → stackgen_sdk-0.3.0/src/stackgen/generated/models/model_pricing.py +31 -35
  146. stackgen_sdk-0.3.0/src/stackgen/generated/models/model_provider_config.py +96 -0
  147. stackgen_sdk-0.3.0/src/stackgen/generated/models/navigation_mode.py +37 -0
  148. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/pagination.py +2 -2
  149. stackgen_sdk-0.1.8/src/stackgen/generated/models/register_agent_request.py → stackgen_sdk-0.3.0/src/stackgen/generated/models/persona_variant_config.py +19 -21
  150. stackgen_sdk-0.3.0/src/stackgen/generated/models/pii_redaction_config.py +112 -0
  151. stackgen_sdk-0.3.0/src/stackgen/generated/models/pii_regex_rule.py +90 -0
  152. stackgen_sdk-0.3.0/src/stackgen/generated/models/policy.py +115 -0
  153. stackgen_sdk-0.3.0/src/stackgen/generated/models/policy_evaluation_input.py +140 -0
  154. stackgen_sdk-0.3.0/src/stackgen/generated/models/policy_evaluation_input_agent.py +91 -0
  155. stackgen_sdk-0.3.0/src/stackgen/generated/models/policy_evaluation_input_approver.py +101 -0
  156. stackgen_sdk-0.3.0/src/stackgen/generated/models/policy_evaluation_input_environment.py +93 -0
  157. stackgen_sdk-0.1.8/src/stackgen/generated/models/agent_status.py → stackgen_sdk-0.3.0/src/stackgen/generated/models/policy_evaluation_input_principal.py +10 -10
  158. stackgen_sdk-0.3.0/src/stackgen/generated/models/policy_evaluation_input_project_membership.py +91 -0
  159. stackgen_sdk-0.3.0/src/stackgen/generated/models/policy_evaluation_input_requester.py +89 -0
  160. stackgen_sdk-0.3.0/src/stackgen/generated/models/policy_evaluation_input_tool.py +91 -0
  161. stackgen_sdk-0.3.0/src/stackgen/generated/models/policy_evaluation_outcome.py +39 -0
  162. stackgen_sdk-0.3.0/src/stackgen/generated/models/policy_type.py +41 -0
  163. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/qualified_candidate.py +6 -6
  164. stackgen_sdk-0.3.0/src/stackgen/generated/models/rca_config.py +99 -0
  165. stackgen_sdk-0.3.0/src/stackgen/generated/models/reasoning_effort_setting.py +43 -0
  166. stackgen_sdk-0.3.0/src/stackgen/generated/models/register_agent_request.py +244 -0
  167. stackgen_sdk-0.3.0/src/stackgen/generated/models/registered_model.py +127 -0
  168. stackgen_sdk-0.3.0/src/stackgen/generated/models/remote_runner_info.py +125 -0
  169. stackgen_sdk-0.3.0/src/stackgen/generated/models/remote_runner_task_info.py +124 -0
  170. stackgen_sdk-0.3.0/src/stackgen/generated/models/resolve_approval_request.py +105 -0
  171. stackgen_sdk-0.3.0/src/stackgen/generated/models/run_workflow_request.py +104 -0
  172. stackgen_sdk-0.3.0/src/stackgen/generated/models/run_workflow_response.py +103 -0
  173. stackgen_sdk-0.3.0/src/stackgen/generated/models/runbook_config.py +95 -0
  174. stackgen_sdk-0.3.0/src/stackgen/generated/models/runner_capability.py +91 -0
  175. stackgen_sdk-0.3.0/src/stackgen/generated/models/runner_status.py +39 -0
  176. stackgen_sdk-0.3.0/src/stackgen/generated/models/scan_finding.py +102 -0
  177. stackgen_sdk-0.3.0/src/stackgen/generated/models/schedule_history.py +112 -0
  178. stackgen_sdk-0.3.0/src/stackgen/generated/models/schedule_run_list_response.py +97 -0
  179. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/schedule_run_status.py +2 -2
  180. stackgen_sdk-0.3.0/src/stackgen/generated/models/schedule_source.py +38 -0
  181. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/schedule_target_type.py +2 -2
  182. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/session.py +11 -4
  183. stackgen_sdk-0.3.0/src/stackgen/generated/models/session_activity_status.py +40 -0
  184. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/session_export.py +7 -7
  185. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/session_export_part.py +5 -5
  186. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/session_export_part_kind.py +3 -3
  187. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/session_list_response.py +3 -3
  188. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/session_responder_kind.py +2 -2
  189. stackgen_sdk-0.3.0/src/stackgen/generated/models/session_summary.py +136 -0
  190. stackgen_sdk-0.3.0/src/stackgen/generated/models/sidecar_health_probes.py +89 -0
  191. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/signal_severity.py +2 -2
  192. stackgen_sdk-0.3.0/src/stackgen/generated/models/skill.py +132 -0
  193. stackgen_sdk-0.1.8/src/stackgen/generated/models/dag_node.py → stackgen_sdk-0.3.0/src/stackgen/generated/models/skill_file.py +19 -24
  194. stackgen_sdk-0.3.0/src/stackgen/generated/models/skill_summary.py +120 -0
  195. stackgen_sdk-0.3.0/src/stackgen/generated/models/stage_binding.py +130 -0
  196. stackgen_sdk-0.3.0/src/stackgen/generated/models/stage_expectation.py +95 -0
  197. stackgen_sdk-0.3.0/src/stackgen/generated/models/start_ask_guild200_response.py +137 -0
  198. stackgen_sdk-0.3.0/src/stackgen/generated/models/start_chat_json_body.py +93 -0
  199. stackgen_sdk-0.3.0/src/stackgen/generated/models/start_chat_response.py +91 -0
  200. stackgen_sdk-0.3.0/src/stackgen/generated/models/subagent_spawn_contract.py +109 -0
  201. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/sync_response.py +2 -2
  202. stackgen_sdk-0.3.0/src/stackgen/generated/models/task_error_category.py +41 -0
  203. stackgen_sdk-0.3.0/src/stackgen/generated/models/task_status.py +42 -0
  204. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/terminate_session_response.py +6 -6
  205. stackgen_sdk-0.3.0/src/stackgen/generated/models/toggle_chat_subscription_request.py +92 -0
  206. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/trace_dag_response.py +7 -7
  207. stackgen_sdk-0.3.0/src/stackgen/generated/models/trigger_schedule202_response.py +89 -0
  208. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/trigger_webhook202_response.py +4 -8
  209. stackgen_sdk-0.3.0/src/stackgen/generated/models/update_agent_request.py +238 -0
  210. stackgen_sdk-0.3.0/src/stackgen/generated/models/update_chat_subscription_request.py +138 -0
  211. stackgen_sdk-0.3.0/src/stackgen/generated/models/upsert_integration_request.py +123 -0
  212. stackgen_sdk-0.3.0/src/stackgen/generated/models/version_status.py +39 -0
  213. stackgen_sdk-0.3.0/src/stackgen/generated/models/webhook.py +117 -0
  214. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/webhook_run.py +2 -2
  215. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/webhook_run_detail.py +2 -2
  216. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/models/webhook_run_list_response.py +2 -2
  217. stackgen_sdk-0.3.0/src/stackgen/generated/models/workflow.py +209 -0
  218. stackgen_sdk-0.3.0/src/stackgen/generated/models/workflow_metadata.py +97 -0
  219. stackgen_sdk-0.3.0/src/stackgen/generated/models/workflow_output_contract.py +97 -0
  220. stackgen_sdk-0.3.0/src/stackgen/generated/models/workflow_run_expectations.py +135 -0
  221. stackgen_sdk-0.3.0/src/stackgen/generated/models/workflow_stage.py +93 -0
  222. stackgen_sdk-0.3.0/src/stackgen/generated/models/workflow_tool_middleware.py +97 -0
  223. stackgen_sdk-0.3.0/src/stackgen/generated/models/workflow_tool_middleware_circuit_breaker.py +91 -0
  224. stackgen_sdk-0.3.0/src/stackgen/generated/models/workflow_tool_middleware_concurrency.py +91 -0
  225. stackgen_sdk-0.3.0/src/stackgen/generated/models/workflow_trigger.py +94 -0
  226. stackgen_sdk-0.3.0/src/stackgen/generated/models/workflow_trigger_type.py +37 -0
  227. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/rest.py +2 -2
  228. stackgen_sdk-0.1.8/src/stackgen/generated/.openapi-generator/FILES +0 -219
  229. stackgen_sdk-0.1.8/src/stackgen/generated/__init__.py +0 -183
  230. stackgen_sdk-0.1.8/src/stackgen/generated/api/aiden_api.py +0 -6054
  231. stackgen_sdk-0.1.8/src/stackgen/generated/models/__init__.py +0 -83
  232. stackgen_sdk-0.1.8/src/stackgen/generated/models/session_summary.py +0 -119
  233. stackgen_sdk-0.1.8/src/stackgen/generated/models/workflow.py +0 -117
  234. stackgen_sdk-0.1.8/src/stackgen/generated/models/workflow_write.py +0 -129
  235. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/README.md +0 -0
  236. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/pyproject.toml +0 -0
  237. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/_http.py +0 -0
  238. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/ask.py +0 -0
  239. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/models.py +0 -0
  240. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/run_status.py +0 -0
  241. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/runs.py +0 -0
  242. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/sessions.py +0 -0
  243. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/webhook.py +0 -0
  244. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/webhook_ops.py +0 -0
  245. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/workflow_builder.py +0 -0
  246. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/aiden/workflow_publish.py +0 -0
  247. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/cli.py +0 -0
  248. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/client.py +0 -0
  249. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/config.py +0 -0
  250. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/errors.py +0 -0
  251. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/.openapi-generator/VERSION +0 -0
  252. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/.openapi-generator-ignore +0 -0
  253. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/api/__init__.py +0 -0
  254. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/generated/api_response.py +0 -0
  255. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/sre/__init__.py +0 -0
  256. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/sre/namespace.py +0 -0
  257. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/vault/__init__.py +0 -0
  258. {stackgen_sdk-0.1.8 → stackgen_sdk-0.3.0}/src/stackgen/vault/namespace.py +0 -0
@@ -6,6 +6,7 @@ __pycache__/
6
6
  dist/
7
7
  build/
8
8
  .venv/
9
+ .venv-sync/
9
10
  venv/
10
11
  .venv/**
11
12
  .pytest_cache/
@@ -40,3 +41,4 @@ docs/vendor/
40
41
 
41
42
  # hatch-vcs generated version module (written at build time)
42
43
  clients/python/src/stackgen/_version.py
44
+ .venv-sync/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: stackgen-sdk
3
- Version: 0.1.8
3
+ Version: 0.3.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,6 +18,7 @@ from __future__ import annotations
18
18
  from stackgen.client import StackgenClient
19
19
  from stackgen.config import StackgenConfig
20
20
  from stackgen.errors import HttpError, NotAllowlistedError, StackgenError, TimeoutError
21
+ from stackgen.aiden.steer import is_steer_response
21
22
  from stackgen.aiden.workflow_builder import (
22
23
  AgentDefinition,
23
24
  StageDefinition,
@@ -44,6 +45,7 @@ __all__ = [
44
45
  "create_agent",
45
46
  "create_stage",
46
47
  "create_workflow",
48
+ "is_steer_response",
47
49
  ]
48
50
 
49
51
 
@@ -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.1.8'
22
- __version_tuple__ = version_tuple = (0, 1, 8)
21
+ __version__ = version = '0.3.0'
22
+ __version_tuple__ = version_tuple = (0, 3, 0)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -3,6 +3,7 @@
3
3
  from stackgen.aiden.ask import AskArtifactResult
4
4
  from stackgen.aiden.namespace import AidenNamespace
5
5
  from stackgen.aiden.run_status import ExecutionStatus, RunPhase, RunStatus
6
+ from stackgen.aiden.steer import is_steer_response
6
7
  from stackgen.aiden.webhook import WebhookReportResult
7
8
  from stackgen.aiden.workflow_builder import (
8
9
  AgentDefinition,
@@ -30,4 +31,5 @@ __all__ = [
30
31
  "create_agent",
31
32
  "create_stage",
32
33
  "create_workflow",
34
+ "is_steer_response",
33
35
  ]
@@ -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,176 @@ 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 list_chat_subscriptions(self, **params: Any) -> list[dict[str, Any]]:
347
+ return self._resources.list_chat_subscriptions(**params)
348
+
349
+ def create_chat_subscription(self, body: dict[str, Any]) -> dict[str, Any]:
350
+ return self._resources.create_chat_subscription(body)
351
+
352
+ def get_chat_subscription(self, subscription_id: str) -> dict[str, Any]:
353
+ return self._resources.get_chat_subscription(subscription_id)
354
+
355
+ def update_chat_subscription(
356
+ self, subscription_id: str, body: dict[str, Any]
357
+ ) -> dict[str, Any]:
358
+ return self._resources.update_chat_subscription(subscription_id, body)
359
+
360
+ def delete_chat_subscription(self, subscription_id: str) -> dict[str, Any]:
361
+ return self._resources.delete_chat_subscription(subscription_id)
362
+
363
+ def toggle_chat_subscription(
364
+ self, subscription_id: str, body: dict[str, Any]
365
+ ) -> dict[str, Any]:
366
+ return self._resources.toggle_chat_subscription(subscription_id, body)
367
+
368
+ def fork_session(
369
+ self, session_id: str, body: dict[str, Any] | None = None
370
+ ) -> dict[str, Any]:
371
+ return self._resources.fork_session(session_id, body)
372
+
373
+ def list_execution_tool_calls(
374
+ self, trace_id: str, **params: Any
375
+ ) -> list[dict[str, Any]]:
376
+ return self._resources.list_execution_tool_calls(trace_id, **params)
377
+
378
+ def delete_workflow(self, name: str) -> dict[str, Any]:
379
+ return self._resources.delete_workflow(name)
380
+
381
+ def run_workflow(
382
+ self, name: str, body: dict[str, Any] | None = None
383
+ ) -> dict[str, Any]:
384
+ return self._resources.run_workflow(name, body)
385
+
386
+ def create_knowledge_base(self, body: dict[str, Any]) -> dict[str, Any]:
387
+ return self._resources.create_knowledge_base(body)
388
+
389
+ def delete_knowledge_base(self, knowledge_base_id: str) -> dict[str, Any]:
390
+ return self._resources.delete_knowledge_base(knowledge_base_id)
391
+
392
+ def create_knowledge_document(self, body: dict[str, Any]) -> dict[str, Any]:
393
+ return self._resources.create_knowledge_document(body)
394
+
395
+ def get_knowledge_document(self, document_id: str) -> dict[str, Any]:
396
+ return self._resources.get_knowledge_document(document_id)
397
+
398
+ def list_knowledge_documents(self, **params: Any) -> list[dict[str, Any]]:
399
+ return self._resources.list_knowledge_documents(**params)
400
+
401
+ def delete_knowledge_document(self, document_id: str) -> dict[str, Any]:
402
+ return self._resources.delete_knowledge_document(document_id)
403
+
404
+ def list_knowledge_items(self, **params: Any) -> list[dict[str, Any]]:
405
+ return self._resources.list_knowledge_items(**params)
406
+
407
+ def create_skill(self, body: dict[str, Any]) -> dict[str, Any]:
408
+ return self._resources.create_skill(body)
409
+
410
+ def delete_skill(self, skill_id: str) -> dict[str, Any]:
411
+ return self._resources.delete_skill(skill_id)
412
+
413
+ def create_remote_runner(self, body: dict[str, Any]) -> dict[str, Any]:
414
+ return self._resources.create_remote_runner(body)
415
+
416
+ def get_remote_runner(self, runner_id: str) -> dict[str, Any]:
417
+ return self._resources.get_remote_runner(runner_id)
418
+
419
+ def list_remote_runners(self, **params: Any) -> list[dict[str, Any]]:
420
+ return self._resources.list_remote_runners(**params)
421
+
422
+ def list_remote_runner_tasks(self, runner_id: str) -> list[dict[str, Any]]:
423
+ return self._resources.list_remote_runner_tasks(runner_id)
424
+
425
+ def revoke_remote_runner(self, runner_id: str) -> dict[str, Any]:
426
+ return self._resources.revoke_remote_runner(runner_id)
@@ -0,0 +1,291 @@
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 list_chat_subscriptions(self, **params: Any) -> list[dict[str, Any]]:
176
+ return _http.as_list(self._get("/platforms/chat/subscriptions", params))
177
+
178
+ def create_chat_subscription(self, body: dict[str, Any]) -> dict[str, Any]:
179
+ return _as_object(
180
+ self._send("/platforms/chat/subscriptions", "POST", body),
181
+ "createChatSubscription",
182
+ )
183
+
184
+ def get_chat_subscription(self, subscription_id: str) -> dict[str, Any]:
185
+ return _as_object(
186
+ self._get(f"/platforms/chat/subscriptions/{subscription_id}"),
187
+ "getChatSubscription",
188
+ )
189
+
190
+ def update_chat_subscription(
191
+ self, subscription_id: str, body: dict[str, Any]
192
+ ) -> dict[str, Any]:
193
+ return _as_object(
194
+ self._send(f"/platforms/chat/subscriptions/{subscription_id}", "PUT", body),
195
+ "updateChatSubscription",
196
+ )
197
+
198
+ def delete_chat_subscription(self, subscription_id: str) -> dict[str, Any]:
199
+ return _as_object(
200
+ self._send(f"/platforms/chat/subscriptions/{subscription_id}", "DELETE"),
201
+ "deleteChatSubscription",
202
+ )
203
+
204
+ def toggle_chat_subscription(
205
+ self, subscription_id: str, body: dict[str, Any]
206
+ ) -> dict[str, Any]:
207
+ return _as_object(
208
+ self._send(
209
+ f"/platforms/chat/subscriptions/{subscription_id}/toggle",
210
+ "POST",
211
+ body,
212
+ ),
213
+ "toggleChatSubscription",
214
+ )
215
+
216
+ def fork_session(self, session_id: str, body: dict[str, Any] | None = None) -> dict[str, Any]:
217
+ return _as_object(
218
+ self._send(f"/sessions/{session_id}/fork", "POST", body or {}),
219
+ "forkSession",
220
+ )
221
+
222
+ def list_execution_tool_calls(
223
+ self, trace_id: str, **params: Any
224
+ ) -> list[dict[str, Any]]:
225
+ return _http.as_list(self._get(f"/executions/{trace_id}/tool-calls", params))
226
+
227
+ def delete_workflow(self, name: str) -> dict[str, Any]:
228
+ return _as_object(self._send(f"/workflows/{name}", "DELETE"), "deleteWorkflow")
229
+
230
+ def run_workflow(self, name: str, body: dict[str, Any] | None = None) -> dict[str, Any]:
231
+ return _as_object(
232
+ self._send(f"/workflows/{name}/run", "POST", body or {}), "runWorkflow"
233
+ )
234
+
235
+ def create_knowledge_base(self, body: dict[str, Any]) -> dict[str, Any]:
236
+ return _as_object(
237
+ self._send("/knowledge/bases", "POST", body), "createKnowledgeBase"
238
+ )
239
+
240
+ def delete_knowledge_base(self, knowledge_base_id: str) -> dict[str, Any]:
241
+ return _as_object(
242
+ self._send(f"/knowledge/bases/{knowledge_base_id}", "DELETE"),
243
+ "deleteKnowledgeBase",
244
+ )
245
+
246
+ def create_knowledge_document(self, body: dict[str, Any]) -> dict[str, Any]:
247
+ return _as_object(
248
+ self._send("/knowledge/documents", "POST", body), "createKnowledgeDocument"
249
+ )
250
+
251
+ def get_knowledge_document(self, document_id: str) -> dict[str, Any]:
252
+ return _as_object(
253
+ self._get(f"/knowledge/documents/{document_id}"), "getKnowledgeDocument"
254
+ )
255
+
256
+ def list_knowledge_documents(self, **params: Any) -> list[dict[str, Any]]:
257
+ return _http.as_list(self._get("/knowledge/documents", params))
258
+
259
+ def delete_knowledge_document(self, document_id: str) -> dict[str, Any]:
260
+ return _as_object(
261
+ self._send(f"/knowledge/documents/{document_id}", "DELETE"),
262
+ "deleteKnowledgeDocument",
263
+ )
264
+
265
+ def list_knowledge_items(self, **params: Any) -> list[dict[str, Any]]:
266
+ return _http.as_list(self._get("/knowledge/items", params))
267
+
268
+ def create_skill(self, body: dict[str, Any]) -> dict[str, Any]:
269
+ return _as_object(self._send("/skills", "POST", body), "createSkill")
270
+
271
+ def delete_skill(self, skill_id: str) -> dict[str, Any]:
272
+ return _as_object(self._send(f"/skills/{skill_id}", "DELETE"), "deleteSkill")
273
+
274
+ def create_remote_runner(self, body: dict[str, Any]) -> dict[str, Any]:
275
+ return _as_object(
276
+ self._send("/remote-runners", "POST", body), "createRemoteRunner"
277
+ )
278
+
279
+ def get_remote_runner(self, runner_id: str) -> dict[str, Any]:
280
+ return _as_object(self._get(f"/remote-runners/{runner_id}"), "getRemoteRunner")
281
+
282
+ def list_remote_runners(self, **params: Any) -> list[dict[str, Any]]:
283
+ return _http.as_list(self._get("/remote-runners", params))
284
+
285
+ def list_remote_runner_tasks(self, runner_id: str) -> list[dict[str, Any]]:
286
+ return _http.as_list(self._get(f"/remote-runners/{runner_id}/tasks"))
287
+
288
+ def revoke_remote_runner(self, runner_id: str) -> dict[str, Any]:
289
+ return _as_object(
290
+ self._send(f"/remote-runners/{runner_id}", "DELETE"), "revokeRemoteRunner"
291
+ )
@@ -0,0 +1,19 @@
1
+ """Helpers for mid-turn Ask Guild steering responses."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ from stackgen import _http
8
+
9
+
10
+ def is_steer_response(body: Any) -> bool:
11
+ """True when Ask Guild reports a running turn absorbed the message.
12
+
13
+ Check this on the dict returned by ``client.aiden.start_ask(...)`` after a
14
+ mid-session follow-up. When true, ``trace_id`` names the running turn and no
15
+ new turn was started.
16
+ """
17
+ if not isinstance(body, dict):
18
+ return False
19
+ return _http.text(body.get("action")).lower() == "steer"
@@ -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
+ )