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.
Files changed (242) hide show
  1. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/.gitignore +2 -0
  2. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/PKG-INFO +1 -1
  3. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/_version.py +2 -2
  4. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/namespace.py +161 -0
  5. stackgen_sdk-0.2.0/src/stackgen/aiden/resources.py +250 -0
  6. stackgen_sdk-0.2.0/src/stackgen/aiden/subscribe.py +87 -0
  7. stackgen_sdk-0.2.0/src/stackgen/generated/.openapi-generator/FILES +603 -0
  8. stackgen_sdk-0.2.0/src/stackgen/generated/__init__.py +439 -0
  9. stackgen_sdk-0.2.0/src/stackgen/generated/api/aiden_api.py +21040 -0
  10. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/api/sre_api.py +11 -16
  11. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/api_client.py +2 -2
  12. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/configuration.py +3 -31
  13. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/exceptions.py +2 -2
  14. stackgen_sdk-0.2.0/src/stackgen/generated/models/__init__.py +211 -0
  15. stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_app_mcp_binding.py +89 -0
  16. stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_health_check.py +92 -0
  17. stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_health_response.py +99 -0
  18. stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_info.py +381 -0
  19. stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_lifecycle_status.py +38 -0
  20. stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_model_config.py +95 -0
  21. stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_schedule.py +123 -0
  22. stackgen_sdk-0.2.0/src/stackgen/generated/models/agent_status.py +93 -0
  23. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_analysis_status.py +3 -3
  24. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_attention.py +3 -3
  25. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_categorization_summary.py +2 -2
  26. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_role.py +3 -3
  27. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_sort_by.py +2 -2
  28. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_status.py +2 -2
  29. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_summary.py +2 -2
  30. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_sync_run_status.py +2 -2
  31. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/alert_v1.py +6 -6
  32. stackgen_sdk-0.2.0/src/stackgen/generated/models/approval_item.py +158 -0
  33. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/artifact_info.py +2 -2
  34. stackgen_sdk-0.2.0/src/stackgen/generated/models/ask_execution_mode.py +37 -0
  35. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/ask_guild_request.py +16 -19
  36. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/ask_guild_start_response.py +11 -11
  37. stackgen_sdk-0.2.0/src/stackgen/generated/models/attach_policy_request.py +93 -0
  38. stackgen_sdk-0.2.0/src/stackgen/generated/models/audit_event.py +134 -0
  39. 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
  40. stackgen_sdk-0.2.0/src/stackgen/generated/models/audit_facets.py +93 -0
  41. stackgen_sdk-0.2.0/src/stackgen/generated/models/auto_approve_tool_rule.py +89 -0
  42. stackgen_sdk-0.2.0/src/stackgen/generated/models/autonomy_budget_config.py +97 -0
  43. stackgen_sdk-0.2.0/src/stackgen/generated/models/autonomy_budget_snapshot.py +107 -0
  44. stackgen_sdk-0.2.0/src/stackgen/generated/models/autonomy_budget_tier.py +38 -0
  45. stackgen_sdk-0.2.0/src/stackgen/generated/models/autonomy_budget_tier_reason.py +40 -0
  46. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/candidate_type.py +3 -3
  47. stackgen_sdk-0.2.0/src/stackgen/generated/models/container_image.py +89 -0
  48. stackgen_sdk-0.2.0/src/stackgen/generated/models/cost_band.py +93 -0
  49. stackgen_sdk-0.2.0/src/stackgen/generated/models/create_document_request.py +104 -0
  50. stackgen_sdk-0.2.0/src/stackgen/generated/models/create_knowledge_base_request.py +97 -0
  51. stackgen_sdk-0.2.0/src/stackgen/generated/models/create_policy_request.py +98 -0
  52. stackgen_sdk-0.2.0/src/stackgen/generated/models/create_remote_runner_request.py +100 -0
  53. stackgen_sdk-0.2.0/src/stackgen/generated/models/create_remote_runner_response.py +89 -0
  54. stackgen_sdk-0.2.0/src/stackgen/generated/models/create_schedule_request.py +119 -0
  55. stackgen_sdk-0.2.0/src/stackgen/generated/models/create_skill_companion_file.py +98 -0
  56. stackgen_sdk-0.2.0/src/stackgen/generated/models/create_skill_request.py +98 -0
  57. stackgen_sdk-0.2.0/src/stackgen/generated/models/create_webhook_request.py +112 -0
  58. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/dag_edge.py +6 -6
  59. stackgen_sdk-0.2.0/src/stackgen/generated/models/dag_node.py +128 -0
  60. stackgen_sdk-0.2.0/src/stackgen/generated/models/diary_compression.py +38 -0
  61. stackgen_sdk-0.2.0/src/stackgen/generated/models/diary_config.py +105 -0
  62. stackgen_sdk-0.2.0/src/stackgen/generated/models/discovered_tool.py +93 -0
  63. stackgen_sdk-0.2.0/src/stackgen/generated/models/document_ingest_status.py +109 -0
  64. stackgen_sdk-0.2.0/src/stackgen/generated/models/document_ingest_workflow_status.py +39 -0
  65. stackgen_sdk-0.2.0/src/stackgen/generated/models/document_processing_status.py +39 -0
  66. stackgen_sdk-0.2.0/src/stackgen/generated/models/duration_band.py +93 -0
  67. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/entity_ref.py +4 -4
  68. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/error_response.py +2 -2
  69. stackgen_sdk-0.2.0/src/stackgen/generated/models/eval_config.py +108 -0
  70. stackgen_sdk-0.2.0/src/stackgen/generated/models/evaluate_policy_request.py +96 -0
  71. stackgen_sdk-0.2.0/src/stackgen/generated/models/evaluate_policy_response.py +98 -0
  72. stackgen_sdk-0.2.0/src/stackgen/generated/models/execution_list_item.py +118 -0
  73. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/execution_meta.py +21 -11
  74. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/execution_structured_output.py +8 -8
  75. stackgen_sdk-0.2.0/src/stackgen/generated/models/execution_tool_call.py +99 -0
  76. stackgen_sdk-0.2.0/src/stackgen/generated/models/execution_tool_call_list.py +95 -0
  77. stackgen_sdk-0.2.0/src/stackgen/generated/models/fork_session_request.py +89 -0
  78. stackgen_sdk-0.2.0/src/stackgen/generated/models/git_config.py +93 -0
  79. stackgen_sdk-0.2.0/src/stackgen/generated/models/guild_integration.py +152 -0
  80. 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
  81. stackgen_sdk-0.2.0/src/stackgen/generated/models/guild_platform_config.py +101 -0
  82. stackgen_sdk-0.2.0/src/stackgen/generated/models/hal_guard_config.py +92 -0
  83. stackgen_sdk-0.2.0/src/stackgen/generated/models/health_check_status.py +38 -0
  84. 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
  85. stackgen_sdk-0.2.0/src/stackgen/generated/models/ingested_document.py +145 -0
  86. stackgen_sdk-0.2.0/src/stackgen/generated/models/ingested_document1.py +145 -0
  87. stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_mcp_auth_promotion.py +91 -0
  88. stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_remote_runner.py +95 -0
  89. stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_scope.py +38 -0
  90. stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_sidecar_launch.py +97 -0
  91. stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_test_result.py +101 -0
  92. stackgen_sdk-0.2.0/src/stackgen/generated/models/integration_type_info.py +125 -0
  93. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigate_alert_request.py +7 -4
  94. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigate_response.py +2 -2
  95. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation.py +2 -2
  96. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_evidence.py +3 -3
  97. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_evidence_kind.py +2 -2
  98. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_evidence_source.py +2 -2
  99. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_hypothesis.py +2 -2
  100. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_plain_summary.py +2 -2
  101. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_prior_incident.py +2 -2
  102. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_recommended_next_step.py +2 -2
  103. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_ref.py +5 -5
  104. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_status.py +3 -3
  105. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_structured_hypothesis_entry.py +2 -2
  106. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_structured_limitation_entry.py +2 -2
  107. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_structured_rca.py +2 -2
  108. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/investigation_triage_metadata.py +2 -2
  109. stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_base.py +131 -0
  110. stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_config.py +87 -0
  111. stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_item.py +151 -0
  112. stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_item_backend.py +37 -0
  113. stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_item_operation.py +39 -0
  114. stackgen_sdk-0.2.0/src/stackgen/generated/models/knowledge_type.py +37 -0
  115. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/list_alerts_response.py +6 -4
  116. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/list_investigations_response.py +2 -2
  117. stackgen_sdk-0.2.0/src/stackgen/generated/models/list_remote_runner_tasks_response.py +97 -0
  118. stackgen_sdk-0.2.0/src/stackgen/generated/models/list_remote_runners_response.py +95 -0
  119. stackgen_sdk-0.2.0/src/stackgen/generated/models/llm_provider_type.py +44 -0
  120. stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config.py +145 -0
  121. stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_circuit_breaker.py +93 -0
  122. stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_concurrency.py +89 -0
  123. stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_context_mode.py +110 -0
  124. stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_context_mode_per_tool_value.py +95 -0
  125. 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
  126. stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_rate_limit.py +91 -0
  127. stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_retry.py +89 -0
  128. 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
  129. stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_timeout.py +89 -0
  130. 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
  131. stackgen_sdk-0.2.0/src/stackgen/generated/models/middleware_config_validation.py +87 -0
  132. 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
  133. stackgen_sdk-0.2.0/src/stackgen/generated/models/model_provider_config.py +96 -0
  134. stackgen_sdk-0.2.0/src/stackgen/generated/models/navigation_mode.py +37 -0
  135. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/pagination.py +2 -2
  136. 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
  137. stackgen_sdk-0.2.0/src/stackgen/generated/models/pii_redaction_config.py +112 -0
  138. stackgen_sdk-0.2.0/src/stackgen/generated/models/pii_regex_rule.py +90 -0
  139. stackgen_sdk-0.2.0/src/stackgen/generated/models/policy.py +115 -0
  140. stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input.py +140 -0
  141. stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_agent.py +91 -0
  142. stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_approver.py +101 -0
  143. stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_environment.py +93 -0
  144. 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
  145. stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_project_membership.py +91 -0
  146. stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_requester.py +89 -0
  147. stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_input_tool.py +91 -0
  148. stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_evaluation_outcome.py +39 -0
  149. stackgen_sdk-0.2.0/src/stackgen/generated/models/policy_type.py +41 -0
  150. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/qualified_candidate.py +6 -6
  151. stackgen_sdk-0.2.0/src/stackgen/generated/models/rca_config.py +99 -0
  152. stackgen_sdk-0.2.0/src/stackgen/generated/models/reasoning_effort_setting.py +43 -0
  153. stackgen_sdk-0.2.0/src/stackgen/generated/models/register_agent_request.py +244 -0
  154. stackgen_sdk-0.2.0/src/stackgen/generated/models/registered_model.py +127 -0
  155. stackgen_sdk-0.2.0/src/stackgen/generated/models/remote_runner_info.py +125 -0
  156. stackgen_sdk-0.2.0/src/stackgen/generated/models/remote_runner_task_info.py +124 -0
  157. stackgen_sdk-0.2.0/src/stackgen/generated/models/resolve_approval_request.py +105 -0
  158. stackgen_sdk-0.2.0/src/stackgen/generated/models/run_workflow_request.py +104 -0
  159. stackgen_sdk-0.2.0/src/stackgen/generated/models/run_workflow_response.py +103 -0
  160. stackgen_sdk-0.2.0/src/stackgen/generated/models/runbook_config.py +95 -0
  161. stackgen_sdk-0.2.0/src/stackgen/generated/models/runner_capability.py +91 -0
  162. stackgen_sdk-0.2.0/src/stackgen/generated/models/runner_status.py +39 -0
  163. stackgen_sdk-0.2.0/src/stackgen/generated/models/scan_finding.py +102 -0
  164. stackgen_sdk-0.2.0/src/stackgen/generated/models/schedule_history.py +112 -0
  165. stackgen_sdk-0.2.0/src/stackgen/generated/models/schedule_run_list_response.py +97 -0
  166. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/schedule_run_status.py +2 -2
  167. stackgen_sdk-0.2.0/src/stackgen/generated/models/schedule_source.py +38 -0
  168. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/schedule_target_type.py +2 -2
  169. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session.py +2 -2
  170. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_export.py +7 -7
  171. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_export_part.py +5 -5
  172. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_export_part_kind.py +3 -3
  173. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_list_response.py +3 -3
  174. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_responder_kind.py +2 -2
  175. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/session_summary.py +26 -20
  176. stackgen_sdk-0.2.0/src/stackgen/generated/models/sidecar_health_probes.py +89 -0
  177. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/signal_severity.py +2 -2
  178. stackgen_sdk-0.2.0/src/stackgen/generated/models/skill.py +132 -0
  179. 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
  180. stackgen_sdk-0.2.0/src/stackgen/generated/models/skill_summary.py +120 -0
  181. stackgen_sdk-0.2.0/src/stackgen/generated/models/stage_binding.py +130 -0
  182. stackgen_sdk-0.2.0/src/stackgen/generated/models/stage_expectation.py +95 -0
  183. stackgen_sdk-0.2.0/src/stackgen/generated/models/start_chat_json_body.py +93 -0
  184. stackgen_sdk-0.2.0/src/stackgen/generated/models/start_chat_response.py +91 -0
  185. stackgen_sdk-0.2.0/src/stackgen/generated/models/subagent_spawn_contract.py +109 -0
  186. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/sync_response.py +2 -2
  187. stackgen_sdk-0.2.0/src/stackgen/generated/models/task_error_category.py +41 -0
  188. stackgen_sdk-0.2.0/src/stackgen/generated/models/task_status.py +42 -0
  189. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/terminate_session_response.py +6 -6
  190. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/trace_dag_response.py +7 -7
  191. stackgen_sdk-0.2.0/src/stackgen/generated/models/trigger_schedule202_response.py +89 -0
  192. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/trigger_webhook202_response.py +4 -8
  193. stackgen_sdk-0.2.0/src/stackgen/generated/models/update_agent_request.py +238 -0
  194. stackgen_sdk-0.2.0/src/stackgen/generated/models/upsert_integration_request.py +123 -0
  195. stackgen_sdk-0.2.0/src/stackgen/generated/models/version_status.py +39 -0
  196. stackgen_sdk-0.2.0/src/stackgen/generated/models/webhook.py +117 -0
  197. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/webhook_run.py +2 -2
  198. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/webhook_run_detail.py +2 -2
  199. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/models/webhook_run_list_response.py +2 -2
  200. stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow.py +209 -0
  201. stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_metadata.py +97 -0
  202. stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_output_contract.py +97 -0
  203. stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_run_expectations.py +135 -0
  204. stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_stage.py +93 -0
  205. stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_tool_middleware.py +97 -0
  206. stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_tool_middleware_circuit_breaker.py +91 -0
  207. stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_tool_middleware_concurrency.py +91 -0
  208. stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_trigger.py +94 -0
  209. stackgen_sdk-0.2.0/src/stackgen/generated/models/workflow_trigger_type.py +37 -0
  210. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/rest.py +2 -2
  211. stackgen_sdk-0.1.8/src/stackgen/generated/.openapi-generator/FILES +0 -219
  212. stackgen_sdk-0.1.8/src/stackgen/generated/__init__.py +0 -183
  213. stackgen_sdk-0.1.8/src/stackgen/generated/api/aiden_api.py +0 -6054
  214. stackgen_sdk-0.1.8/src/stackgen/generated/models/__init__.py +0 -83
  215. stackgen_sdk-0.1.8/src/stackgen/generated/models/workflow.py +0 -117
  216. stackgen_sdk-0.1.8/src/stackgen/generated/models/workflow_write.py +0 -129
  217. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/README.md +0 -0
  218. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/pyproject.toml +0 -0
  219. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/__init__.py +0 -0
  220. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/_http.py +0 -0
  221. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/__init__.py +0 -0
  222. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/ask.py +0 -0
  223. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/models.py +0 -0
  224. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/run_status.py +0 -0
  225. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/runs.py +0 -0
  226. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/sessions.py +0 -0
  227. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/webhook.py +0 -0
  228. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/webhook_ops.py +0 -0
  229. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/workflow_builder.py +0 -0
  230. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/aiden/workflow_publish.py +0 -0
  231. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/cli.py +0 -0
  232. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/client.py +0 -0
  233. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/config.py +0 -0
  234. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/errors.py +0 -0
  235. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/.openapi-generator/VERSION +0 -0
  236. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/.openapi-generator-ignore +0 -0
  237. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/api/__init__.py +0 -0
  238. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/generated/api_response.py +0 -0
  239. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/sre/__init__.py +0 -0
  240. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/sre/namespace.py +0 -0
  241. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.0}/src/stackgen/vault/__init__.py +0 -0
  242. {stackgen_sdk-0.1.8 → stackgen_sdk-0.2.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.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.1.8'
22
- __version_tuple__ = version_tuple = (0, 1, 8)
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
+ )