stackgen-sdk 0.4.0rc13__tar.gz → 0.4.0rc15__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 (279) hide show
  1. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/.gitignore +3 -0
  2. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/PKG-INFO +1 -1
  3. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/_version.py +2 -2
  4. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/ask.py +8 -1
  5. stackgen_sdk-0.4.0rc15/src/stackgen/aiden/integration_secrets.py +316 -0
  6. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/namespace.py +79 -4
  7. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/resources.py +28 -3
  8. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/config.py +2 -2
  9. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/.openapi-generator/FILES +39 -0
  10. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/__init__.py +26 -0
  11. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/api/__init__.py +1 -0
  12. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/api/aiden_api.py +284 -0
  13. stackgen_sdk-0.4.0rc15/src/stackgen/generated/api/vault_api.py +1747 -0
  14. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/__init__.py +12 -0
  15. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/external_secret_reference.py +95 -0
  16. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/key_definition_type.py +40 -0
  17. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/metadata.py +102 -0
  18. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/o_auth_support.py +95 -0
  19. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/owner_type.py +41 -0
  20. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/runtime_approval_binding.py +110 -0
  21. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/runtime_approval_item.py +164 -0
  22. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/secret.py +149 -0
  23. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/secret_sub_category.py +110 -0
  24. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/supported_formats.py +115 -0
  25. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/supported_formats_keys_inner.py +102 -0
  26. stackgen_sdk-0.4.0rc15/src/stackgen/generated/models/update_secret_by_id_request.py +113 -0
  27. stackgen_sdk-0.4.0rc15/src/stackgen/vault/__init__.py +17 -0
  28. stackgen_sdk-0.4.0rc15/src/stackgen/vault/metadata.py +152 -0
  29. stackgen_sdk-0.4.0rc15/src/stackgen/vault/namespace.py +227 -0
  30. stackgen_sdk-0.4.0rc13/src/stackgen/vault/__init__.py +0 -5
  31. stackgen_sdk-0.4.0rc13/src/stackgen/vault/namespace.py +0 -17
  32. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/README.md +0 -0
  33. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/pyproject.toml +0 -0
  34. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/__init__.py +0 -0
  35. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/_http.py +0 -0
  36. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/__init__.py +0 -0
  37. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/audit.py +0 -0
  38. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/models.py +0 -0
  39. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/run_status.py +0 -0
  40. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/runs.py +0 -0
  41. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/sessions.py +0 -0
  42. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/steer.py +0 -0
  43. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/subscribe.py +0 -0
  44. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/subscribe_frames.py +0 -0
  45. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/transient.py +0 -0
  46. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/webhook.py +0 -0
  47. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/webhook_ops.py +0 -0
  48. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/workflow_builder.py +0 -0
  49. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/aiden/workflow_publish.py +0 -0
  50. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/cli.py +0 -0
  51. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/client.py +0 -0
  52. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/errors.py +0 -0
  53. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/.openapi-generator/VERSION +0 -0
  54. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/.openapi-generator-ignore +0 -0
  55. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/api/sre_api.py +0 -0
  56. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/api_client.py +0 -0
  57. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/api_response.py +0 -0
  58. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/configuration.py +0 -0
  59. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/exceptions.py +0 -0
  60. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/activate_break_glass_request.py +0 -0
  61. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/agent_app_mcp_binding.py +0 -0
  62. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/agent_health_check.py +0 -0
  63. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/agent_health_response.py +0 -0
  64. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/agent_info.py +0 -0
  65. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/agent_lifecycle_status.py +0 -0
  66. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/agent_model_config.py +0 -0
  67. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/agent_schedule.py +0 -0
  68. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/agent_status.py +0 -0
  69. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/alert_analysis_status.py +0 -0
  70. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/alert_attention.py +0 -0
  71. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/alert_categorization_summary.py +0 -0
  72. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/alert_role.py +0 -0
  73. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/alert_sort_by.py +0 -0
  74. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/alert_status.py +0 -0
  75. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/alert_summary.py +0 -0
  76. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/alert_sync_run_status.py +0 -0
  77. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/alert_v1.py +0 -0
  78. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/approval_item.py +0 -0
  79. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/artifact_info.py +0 -0
  80. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/ask_execution_mode.py +0 -0
  81. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/ask_guild_request.py +0 -0
  82. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/ask_guild_route_decision.py +0 -0
  83. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/ask_guild_route_response.py +0 -0
  84. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/ask_guild_start_response.py +0 -0
  85. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/attach_policy_request.py +0 -0
  86. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/audit_event.py +0 -0
  87. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/audit_event_list_response.py +0 -0
  88. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/audit_facets.py +0 -0
  89. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/auto_approve_tool_rule.py +0 -0
  90. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/autonomy_budget_config.py +0 -0
  91. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/autonomy_budget_snapshot.py +0 -0
  92. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/autonomy_budget_tier.py +0 -0
  93. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/autonomy_budget_tier_reason.py +0 -0
  94. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/break_glass_state.py +0 -0
  95. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/candidate_type.py +0 -0
  96. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/chat_channel_selector.py +0 -0
  97. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/chat_subscription.py +0 -0
  98. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/chat_subscription_list_response.py +0 -0
  99. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/chat_subscription_target_type.py +0 -0
  100. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/chat_subscription_trigger_type.py +0 -0
  101. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/combining_algorithm.py +0 -0
  102. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/combining_algorithm_request.py +0 -0
  103. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/container_image.py +0 -0
  104. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/cost_band.py +0 -0
  105. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/create_chat_subscription_request.py +0 -0
  106. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/create_document_request.py +0 -0
  107. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/create_knowledge_base_request.py +0 -0
  108. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/create_policy_request.py +0 -0
  109. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/create_remote_runner_request.py +0 -0
  110. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/create_remote_runner_response.py +0 -0
  111. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/create_schedule_request.py +0 -0
  112. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/create_skill_companion_file.py +0 -0
  113. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/create_skill_request.py +0 -0
  114. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/create_webhook_request.py +0 -0
  115. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/dag_edge.py +0 -0
  116. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/dag_node.py +0 -0
  117. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/diary_compression.py +0 -0
  118. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/diary_config.py +0 -0
  119. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/discovered_tool.py +0 -0
  120. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/document_ingest_status.py +0 -0
  121. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/document_ingest_workflow_status.py +0 -0
  122. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/document_processing_status.py +0 -0
  123. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/duration_band.py +0 -0
  124. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/entity_ref.py +0 -0
  125. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/error_response.py +0 -0
  126. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/eval_config.py +0 -0
  127. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/evaluate_policy_request.py +0 -0
  128. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/evaluate_policy_response.py +0 -0
  129. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/execution_list_item.py +0 -0
  130. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/execution_meta.py +0 -0
  131. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/execution_structured_output.py +0 -0
  132. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/execution_tool_call.py +0 -0
  133. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/execution_tool_call_list.py +0 -0
  134. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/fork_session_request.py +0 -0
  135. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/git_config.py +0 -0
  136. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/guild_integration.py +0 -0
  137. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/guild_json_error.py +0 -0
  138. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/guild_platform_config.py +0 -0
  139. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/hal_guard_config.py +0 -0
  140. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/health_check_status.py +0 -0
  141. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/hitl_config.py +0 -0
  142. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/ingested_document.py +0 -0
  143. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/ingested_document1.py +0 -0
  144. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/integration_availability_reason.py +0 -0
  145. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/integration_availability_status.py +0 -0
  146. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/integration_mcp_auth_promotion.py +0 -0
  147. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/integration_remote_runner.py +0 -0
  148. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/integration_scope.py +0 -0
  149. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/integration_sidecar_launch.py +0 -0
  150. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/integration_test_result.py +0 -0
  151. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/integration_type_info.py +0 -0
  152. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigate_alert_request.py +0 -0
  153. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigate_response.py +0 -0
  154. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation.py +0 -0
  155. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_evidence.py +0 -0
  156. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_evidence_kind.py +0 -0
  157. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_evidence_source.py +0 -0
  158. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_hypothesis.py +0 -0
  159. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_plain_summary.py +0 -0
  160. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_prior_incident.py +0 -0
  161. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_recommended_next_step.py +0 -0
  162. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_ref.py +0 -0
  163. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_status.py +0 -0
  164. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_structured_hypothesis_entry.py +0 -0
  165. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_structured_limitation_entry.py +0 -0
  166. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_structured_rca.py +0 -0
  167. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/investigation_triage_metadata.py +0 -0
  168. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/judge_execution_request.py +0 -0
  169. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/knowledge_base.py +0 -0
  170. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/knowledge_config.py +0 -0
  171. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/knowledge_item.py +0 -0
  172. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/knowledge_item_backend.py +0 -0
  173. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/knowledge_item_operation.py +0 -0
  174. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/knowledge_type.py +0 -0
  175. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/list_alerts_response.py +0 -0
  176. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/list_investigations_response.py +0 -0
  177. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/list_remote_runner_tasks_response.py +0 -0
  178. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/list_remote_runners_response.py +0 -0
  179. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/llm_provider_type.py +0 -0
  180. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config.py +0 -0
  181. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_circuit_breaker.py +0 -0
  182. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_concurrency.py +0 -0
  183. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_context_mode.py +0 -0
  184. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_context_mode_per_tool_value.py +0 -0
  185. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_metrics.py +0 -0
  186. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_rate_limit.py +0 -0
  187. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_retry.py +0 -0
  188. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_sanitize.py +0 -0
  189. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_timeout.py +0 -0
  190. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_tracing.py +0 -0
  191. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/middleware_config_validation.py +0 -0
  192. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/model_pricing.py +0 -0
  193. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/model_provider_config.py +0 -0
  194. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/navigation_mode.py +0 -0
  195. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/pagination.py +0 -0
  196. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/persona_variant_config.py +0 -0
  197. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/pii_redaction_config.py +0 -0
  198. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/pii_regex_rule.py +0 -0
  199. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy.py +0 -0
  200. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy_evaluation_input.py +0 -0
  201. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy_evaluation_input_agent.py +0 -0
  202. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy_evaluation_input_approver.py +0 -0
  203. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy_evaluation_input_environment.py +0 -0
  204. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy_evaluation_input_principal.py +0 -0
  205. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy_evaluation_input_project_membership.py +0 -0
  206. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy_evaluation_input_requester.py +0 -0
  207. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy_evaluation_input_tool.py +0 -0
  208. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy_evaluation_outcome.py +0 -0
  209. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/policy_type.py +0 -0
  210. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/qualified_candidate.py +0 -0
  211. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/rca_config.py +0 -0
  212. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/reasoning_effort_setting.py +0 -0
  213. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/register_agent_request.py +0 -0
  214. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/registered_model.py +0 -0
  215. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/remote_runner_info.py +0 -0
  216. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/remote_runner_task_info.py +0 -0
  217. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/resolve_approval_request.py +0 -0
  218. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/run_workflow_request.py +0 -0
  219. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/run_workflow_response.py +0 -0
  220. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/runbook_config.py +0 -0
  221. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/runner_capability.py +0 -0
  222. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/runner_status.py +0 -0
  223. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/scan_finding.py +0 -0
  224. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/schedule_history.py +0 -0
  225. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/schedule_run_list_response.py +0 -0
  226. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/schedule_run_status.py +0 -0
  227. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/schedule_source.py +0 -0
  228. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/schedule_target_type.py +0 -0
  229. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/session.py +0 -0
  230. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/session_activity_status.py +0 -0
  231. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/session_export.py +0 -0
  232. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/session_export_part.py +0 -0
  233. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/session_export_part_kind.py +0 -0
  234. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/session_list_response.py +0 -0
  235. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/session_responder_kind.py +0 -0
  236. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/session_summary.py +0 -0
  237. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/sidecar_health_probes.py +0 -0
  238. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/signal_severity.py +0 -0
  239. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/skill.py +0 -0
  240. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/skill_file.py +0 -0
  241. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/skill_summary.py +0 -0
  242. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/stage_binding.py +0 -0
  243. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/stage_expectation.py +0 -0
  244. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/start_ask_guild200_response.py +0 -0
  245. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/start_chat_json_body.py +0 -0
  246. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/start_chat_response.py +0 -0
  247. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/subagent_spawn_contract.py +0 -0
  248. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/sync_response.py +0 -0
  249. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/task_error_category.py +0 -0
  250. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/task_status.py +0 -0
  251. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/terminate_session_response.py +0 -0
  252. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/toggle_chat_subscription_request.py +0 -0
  253. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/trace_dag_response.py +0 -0
  254. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/trigger_schedule202_response.py +0 -0
  255. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/trigger_webhook202_response.py +0 -0
  256. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/update_agent_request.py +0 -0
  257. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/update_chat_subscription_request.py +0 -0
  258. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/upsert_integration_request.py +0 -0
  259. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/version_status.py +0 -0
  260. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/webhook.py +0 -0
  261. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/webhook_run.py +0 -0
  262. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/webhook_run_detail.py +0 -0
  263. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/webhook_run_list_response.py +0 -0
  264. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/workflow.py +0 -0
  265. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/workflow_metadata.py +0 -0
  266. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/workflow_output_contract.py +0 -0
  267. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/workflow_run_expectations.py +0 -0
  268. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/workflow_stage.py +0 -0
  269. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/workflow_tool_middleware.py +0 -0
  270. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/workflow_tool_middleware_circuit_breaker.py +0 -0
  271. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/workflow_tool_middleware_concurrency.py +0 -0
  272. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/workflow_trigger.py +0 -0
  273. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/models/workflow_trigger_type.py +0 -0
  274. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/generated/rest.py +0 -0
  275. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/logging.py +0 -0
  276. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/orgs/__init__.py +0 -0
  277. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/orgs/namespace.py +0 -0
  278. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/sre/__init__.py +0 -0
  279. {stackgen_sdk-0.4.0rc13 → stackgen_sdk-0.4.0rc15}/src/stackgen/sre/namespace.py +0 -0
@@ -42,6 +42,9 @@ session-artifacts/
42
42
  .env
43
43
  .env.*
44
44
 
45
+ # Generated before Jekyll by docs/prepare-doc-samples.py (CI and Docker).
46
+ docs/_data/doc_samples.yml
47
+
45
48
  # Jekyll (only if native Ruby was used by mistake)
46
49
  docs/_site/
47
50
  docs/.jekyll-cache/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: stackgen-sdk
3
- Version: 0.4.0rc13
3
+ Version: 0.4.0rc15
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.4.0rc13'
22
- __version_tuple__ = version_tuple = (0, 4, 0, 'rc13')
21
+ __version__ = version = '0.4.0rc15'
22
+ __version_tuple__ = version_tuple = (0, 4, 0, 'rc15')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -6,7 +6,7 @@ import json
6
6
  import time
7
7
  from dataclasses import dataclass
8
8
  from pathlib import Path
9
- from typing import Any
9
+ from typing import Any, Literal
10
10
 
11
11
  from stackgen import _http
12
12
  from stackgen.aiden import sessions as session_helpers
@@ -14,6 +14,8 @@ from stackgen.aiden.run_status import ExecutionStatus
14
14
  from stackgen.config import StackgenConfig
15
15
  from stackgen.errors import HttpError, StackgenError, TimeoutError
16
16
 
17
+ AskMode = Literal["plan", "simple"]
18
+
17
19
 
18
20
  @dataclass(frozen=True)
19
21
  class AskArtifactResult:
@@ -48,6 +50,7 @@ class AskArtifactJourney:
48
50
  session_id: str | None = None,
49
51
  source_app: str | None = None,
50
52
  source_metadata: dict[str, str] | None = None,
53
+ mode: AskMode | None = None,
51
54
  ) -> AskArtifactResult:
52
55
  cfg = self._config
53
56
  artifact = artifact_name or cfg.artifact_name
@@ -60,6 +63,7 @@ class AskArtifactJourney:
60
63
  session_id=session_id,
61
64
  source_app=source_app,
62
65
  source_metadata=source_metadata,
66
+ mode=mode,
63
67
  )
64
68
  trace_id = _http.text(start.get("trace_id"))
65
69
  if not trace_id:
@@ -106,6 +110,7 @@ class AskArtifactJourney:
106
110
  session_id: str | None = None,
107
111
  source_app: str | None = None,
108
112
  source_metadata: dict[str, str] | None = None,
113
+ mode: AskMode | None = None,
109
114
  ) -> dict[str, Any]:
110
115
  """POST /guild/api/v1/guild/ask/start."""
111
116
  body: dict[str, Any] = {"message": message}
@@ -119,6 +124,8 @@ class AskArtifactJourney:
119
124
  body["source_app"] = source_app
120
125
  if source_metadata:
121
126
  body["source_metadata"] = source_metadata
127
+ if mode:
128
+ body["mode"] = mode
122
129
 
123
130
  url = (
124
131
  f"{self._config.aiden_url()}/api/v1/guild/ask/start"
@@ -0,0 +1,316 @@
1
+ """Compose Vault secret store + integration upsert for operators.
2
+
3
+ Resolves Vault category / subcategory / required keys from Aiden's
4
+ integration catalog and Vault ``GET /support/metadata``, so callers pass a
5
+ plain ``secrets`` map instead of hand-building ``[{key, value}]`` metadata.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import re
11
+ from typing import Any, Literal
12
+
13
+ from stackgen.aiden.resources import AidenResources
14
+ from stackgen.config import StackgenConfig
15
+ from stackgen.errors import StackgenError
16
+ from stackgen.vault.metadata import VaultMetadataKey, find_supported_format
17
+ from stackgen.vault.namespace import VaultNamespace
18
+
19
+ # Deprecated: metadata discovery replaces kind. Kept for call-site / type compat.
20
+ IntegrationSecretKind = Literal["github", "grafana", "kafka", "generic"]
21
+
22
+
23
+ def _as_str(value: Any) -> str:
24
+ return value.strip() if isinstance(value, str) else ""
25
+
26
+
27
+ def _norm(value: str) -> str:
28
+ return value.strip().lower()
29
+
30
+
31
+ def _snake_to_camel(key: str) -> str:
32
+ parts = key.split("_")
33
+ if len(parts) < 2:
34
+ return key
35
+ return parts[0] + "".join(p[:1].upper() + p[1:] for p in parts[1:] if p)
36
+
37
+
38
+ def _camel_to_snake(key: str) -> str:
39
+ return re.sub(r"([a-z0-9])([A-Z])", r"\1_\2", key).lower()
40
+
41
+
42
+ def _pick(secrets: dict[str, str], *keys: str) -> str:
43
+ for key in keys:
44
+ found = _as_str(secrets.get(key))
45
+ if found:
46
+ return found
47
+ camel = _snake_to_camel(key)
48
+ if camel != key:
49
+ found = _as_str(secrets.get(camel))
50
+ if found:
51
+ return found
52
+ snake = _camel_to_snake(key)
53
+ if snake != key:
54
+ found = _as_str(secrets.get(snake))
55
+ if found:
56
+ return found
57
+ return ""
58
+
59
+
60
+ def _find_integration_type(
61
+ catalog: list[dict[str, Any]], type_name: str
62
+ ) -> dict[str, Any] | None:
63
+ want = _norm(type_name)
64
+ for row in catalog:
65
+ if _norm(_as_str(row.get("type"))) == want:
66
+ return row
67
+ return None
68
+
69
+
70
+ def _build_value_entries(
71
+ secrets: dict[str, str],
72
+ key_defs: tuple[VaultMetadataKey, ...] | list[VaultMetadataKey],
73
+ ) -> list[dict[str, str]]:
74
+ """Map a plain secrets dict onto Vault metadata keys (with defaults)."""
75
+ entries: list[dict[str, str]] = []
76
+ missing: list[str] = []
77
+ seen: set[str] = set()
78
+
79
+ for key_def in key_defs:
80
+ key = key_def.key
81
+ if not key:
82
+ continue
83
+ seen.add(key)
84
+ value = _pick(secrets, key)
85
+ if not value and key_def.default:
86
+ value = key_def.default
87
+ if not value:
88
+ if key_def.required:
89
+ missing.append(key)
90
+ continue
91
+ entries.append({"key": key, "value": value})
92
+
93
+ if missing:
94
+ raise StackgenError(
95
+ "upsert_integration_with_secrets missing required Vault keys: "
96
+ + ", ".join(missing)
97
+ )
98
+
99
+ # Preserve extra caller keys not listed in metadata (optional extras).
100
+ for raw_key, raw_val in secrets.items():
101
+ key = _as_str(raw_key)
102
+ val = _as_str(raw_val)
103
+ if not key or not val:
104
+ continue
105
+ snake = _camel_to_snake(key)
106
+ if key in seen or snake in seen:
107
+ continue
108
+ entries.append({"key": snake if snake != key else key, "value": val})
109
+
110
+ if not entries:
111
+ raise StackgenError("upsert_integration_with_secrets requires secrets")
112
+ return entries
113
+
114
+
115
+ class IntegrationSecretsJourney:
116
+ """Store Vault credentials, bind ``secret_ref_ids``, upsert an integration."""
117
+
118
+ def __init__(self, config: StackgenConfig) -> None:
119
+ self._config = config
120
+ self._vault = VaultNamespace(config)
121
+ self._resources = AidenResources(config)
122
+
123
+ def upsert(
124
+ self,
125
+ name: str,
126
+ *,
127
+ type: str,
128
+ secrets: dict[str, str],
129
+ description: str | None = None,
130
+ secret_name: str | None = None,
131
+ scope: str = "TENANT",
132
+ enabled: bool = True,
133
+ env: dict[str, str] | None = None,
134
+ runner_id: str | None = None,
135
+ skip_connectivity_check: bool | None = None,
136
+ vault_category: str | None = None,
137
+ vault_subcategory: str | None = None,
138
+ integration: dict[str, Any] | None = None,
139
+ # Deprecated: ignored when metadata resolves; kept for call-site compat.
140
+ kind: str | None = None,
141
+ ) -> dict[str, Any]:
142
+ """Happy path: Vault store → bind ``secret_ref_ids`` → PUT integration.
143
+
144
+ ``secrets`` is a plain key/value map. The SDK resolves Vault
145
+ category/subcategory and required keys from Aiden's integration catalog
146
+ and Vault ``GET /support/metadata``. Pass ``vault_category`` /
147
+ ``vault_subcategory`` to override discovery.
148
+
149
+ Returns ``{"integration", "secret_ids", "secrets"}``.
150
+ """
151
+ del kind # metadata-driven; kept only for backward-compatible kwargs
152
+ clean_name = _as_str(name)
153
+ clean_type = _as_str(type)
154
+ if not clean_name:
155
+ raise StackgenError("upsert_integration_with_secrets requires name")
156
+ if not clean_type:
157
+ raise StackgenError("upsert_integration_with_secrets requires type")
158
+ if not isinstance(secrets, dict) or not secrets:
159
+ raise StackgenError("upsert_integration_with_secrets requires secrets")
160
+
161
+ vault_name = _as_str(secret_name) or f"{clean_name}-creds"
162
+ vault_desc = _as_str(description) or f"{clean_type} integration credentials"
163
+
164
+ category, subcategory, value = self._resolve_secret_payload(
165
+ clean_type,
166
+ secrets,
167
+ vault_category=_as_str(vault_category) or None,
168
+ vault_subcategory=_as_str(vault_subcategory) or None,
169
+ )
170
+
171
+ skip = skip_connectivity_check
172
+ if skip is None:
173
+ # Connectivity checks often fail for runner-bound / synthetic secrets.
174
+ skip = True
175
+
176
+ shared_with = [self._config.org_id] if self._config.org_id else []
177
+ stored = self._vault.store_secret(
178
+ {
179
+ "name": vault_name,
180
+ "description": vault_desc,
181
+ "category": category,
182
+ "subcategory": subcategory,
183
+ "value": value,
184
+ "sharedWith": shared_with,
185
+ "skip_connectivity_check": skip,
186
+ }
187
+ )
188
+
189
+ secret_id = _as_str(stored.get("id"))
190
+ if not secret_id:
191
+ raise StackgenError(
192
+ "upsert_integration_with_secrets: Vault store did not return id"
193
+ )
194
+
195
+ body: dict[str, Any] = {
196
+ "type": clean_type,
197
+ "description": _as_str(description) or f"{clean_type} integration",
198
+ "scope": scope,
199
+ "enabled": enabled,
200
+ "secret_ref_ids": [secret_id],
201
+ }
202
+ if env is not None:
203
+ body["env"] = env
204
+ if runner_id is not None:
205
+ body["runner_id"] = runner_id
206
+ if integration:
207
+ body.update(integration)
208
+ # Owned credential binding wins over accidental overrides in integration{}
209
+ body["secret_ref_ids"] = [secret_id]
210
+ body["type"] = clean_type
211
+
212
+ integration_row = self._resources.upsert_integration(clean_name, body)
213
+ return {
214
+ "integration": integration_row,
215
+ "secret_ids": [secret_id],
216
+ "secrets": [stored],
217
+ }
218
+
219
+ def _resolve_secret_payload(
220
+ self,
221
+ type_name: str,
222
+ secrets: dict[str, str],
223
+ *,
224
+ vault_category: str | None,
225
+ vault_subcategory: str | None,
226
+ ) -> tuple[str, str, list[dict[str, str]]]:
227
+ subcategory = vault_subcategory
228
+ if not subcategory:
229
+ types = self._resources.list_integration_types()
230
+ type_row = _find_integration_type(types, type_name)
231
+ if type_row:
232
+ linked = _as_str(type_row.get("linked_vault_subcategory"))
233
+ subcategory = linked or _as_str(type_row.get("type")) or type_name
234
+ else:
235
+ subcategory = type_name
236
+
237
+ metadata = self._vault.get_supported_metadata()
238
+ row = find_supported_format(metadata, subcategory)
239
+
240
+ if row:
241
+ category = vault_category or row.category
242
+ if not category:
243
+ raise StackgenError(
244
+ f"Vault metadata for subcategory={subcategory!r} has no category"
245
+ )
246
+ subcategory = row.subcategory or subcategory
247
+ value = _build_value_entries(secrets, row.keys)
248
+ return category, subcategory, value
249
+
250
+ if vault_category and vault_subcategory:
251
+ # Explicit overrides without a catalog row: trust the caller.
252
+ value = [
253
+ {"key": _camel_to_snake(k) if k else k, "value": v}
254
+ for k, v in secrets.items()
255
+ if _as_str(k) and _as_str(v)
256
+ ]
257
+ if not value:
258
+ raise StackgenError("upsert_integration_with_secrets requires secrets")
259
+ return vault_category, vault_subcategory, value
260
+
261
+ # Fallback for common types when metadata is unavailable (preserves
262
+ # github / grafana / kafka behavior from earlier SDK releases).
263
+ fallback = self._legacy_fallback(type_name, secrets)
264
+ if fallback:
265
+ return fallback
266
+
267
+ raise StackgenError(
268
+ "upsert_integration_with_secrets could not resolve Vault metadata "
269
+ f"for type={type_name!r} subcategory={subcategory!r}. "
270
+ "Pass vault_category and vault_subcategory, or ensure Vault "
271
+ "GET /support/metadata lists that subcategory."
272
+ )
273
+
274
+ def _legacy_fallback(
275
+ self, type_name: str, secrets: dict[str, str]
276
+ ) -> tuple[str, str, list[dict[str, str]]] | None:
277
+ kind = _norm(type_name)
278
+ if kind == "github":
279
+ token = _pick(secrets, "token")
280
+ if not token:
281
+ raise StackgenError("github secrets require token")
282
+ return "scm", "github", [{"key": "token", "value": token}]
283
+ if kind == "grafana":
284
+ base_url = _pick(secrets, "base_url", "baseUrl")
285
+ api_token = _pick(secrets, "api_token", "apiToken")
286
+ if not base_url or not api_token:
287
+ raise StackgenError(
288
+ "grafana secrets require base_url (or baseUrl) and "
289
+ "api_token (or apiToken)"
290
+ )
291
+ return (
292
+ "Observability",
293
+ "grafana",
294
+ [
295
+ {"key": "base_url", "value": base_url},
296
+ {"key": "api_token", "value": api_token},
297
+ ],
298
+ )
299
+ if kind == "kafka":
300
+ bootstrap = _pick(secrets, "bootstrap_servers", "bootstrapServers")
301
+ if not bootstrap:
302
+ raise StackgenError(
303
+ "kafka secrets require bootstrap_servers (or bootstrapServers)"
304
+ )
305
+ value = [{"key": "bootstrap_servers", "value": bootstrap}]
306
+ for wire, *aliases in (
307
+ ("security_protocol", "securityProtocol"),
308
+ ("sasl_mechanism", "saslMechanism"),
309
+ ("sasl_username", "saslUsername"),
310
+ ("sasl_password", "saslPassword"),
311
+ ):
312
+ found = _pick(secrets, wire, *aliases)
313
+ if found:
314
+ value.append({"key": wire, "value": found})
315
+ return "Messaging", "kafka", value
316
+ return None
@@ -3,10 +3,14 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from pathlib import Path
6
- from typing import Any, Iterator
6
+ from typing import Any, Iterator, Literal
7
7
 
8
8
  from stackgen.aiden.ask import AskArtifactJourney, AskArtifactResult
9
9
  from stackgen.aiden.audit import AuditExportJourney, AuditExportResult
10
+ from stackgen.aiden.integration_secrets import (
11
+ IntegrationSecretKind,
12
+ IntegrationSecretsJourney,
13
+ )
10
14
  from stackgen.aiden.models import ModelRegistry
11
15
  from stackgen.aiden.resources import AidenResources, PolicyConflictRule
12
16
  from stackgen.aiden.run_status import RunStatus, build_run_status, require_run_ids
@@ -29,6 +33,7 @@ class AidenNamespace:
29
33
  self._workflows = WorkflowPublishJourney(config)
30
34
  self._webhook_ops = WebhookOps(config)
31
35
  self._resources = AidenResources(config)
36
+ self._integration_secrets = IntegrationSecretsJourney(config)
32
37
  self._subscribe = ExecutionSubscribe(config)
33
38
  self._audit = AuditExportJourney(config)
34
39
  self.models = ModelRegistry(config)
@@ -160,6 +165,7 @@ class AidenNamespace:
160
165
  session_id: str | None = None,
161
166
  source_app: str | None = None,
162
167
  source_metadata: dict[str, str] | None = None,
168
+ mode: Literal["plan", "simple"] | None = None,
163
169
  ) -> AskArtifactResult:
164
170
  """Start Ask Guild, poll execution, wait for artifact, download it."""
165
171
  return self._ask.run(
@@ -171,6 +177,7 @@ class AidenNamespace:
171
177
  session_id=session_id,
172
178
  source_app=source_app,
173
179
  source_metadata=source_metadata,
180
+ mode=mode,
174
181
  )
175
182
 
176
183
  def start_ask(
@@ -182,12 +189,14 @@ class AidenNamespace:
182
189
  session_id: str | None = None,
183
190
  source_app: str | None = None,
184
191
  source_metadata: dict[str, str] | None = None,
192
+ mode: Literal["plan", "simple"] | None = None,
185
193
  ) -> dict[str, Any]:
186
194
  """POST /guild/api/v1/guild/ask/start (fire-and-forget).
187
195
 
188
196
  Returns ``session_id`` / ``trace_id`` immediately. Persist those ids and
189
197
  call :meth:`get_run_status` from a separate scheduler — this method does
190
- not wait for completion.
198
+ not wait for completion. Pass ``mode="plan"`` or ``"simple"`` to pin
199
+ Genie execution for the session.
191
200
  """
192
201
  return self._ask.start_ask(
193
202
  message,
@@ -196,6 +205,7 @@ class AidenNamespace:
196
205
  session_id=session_id,
197
206
  source_app=source_app,
198
207
  source_metadata=source_metadata,
208
+ mode=mode,
199
209
  )
200
210
 
201
211
  def start_workflow_run(
@@ -286,6 +296,14 @@ class AidenNamespace:
286
296
  return self._workflows.publish(workflow, agents=agents, approve=approve)
287
297
 
288
298
  # Expanded allowlisted surface (thin REST) — delegated to AidenResources.
299
+ def register_agent(self, body: dict[str, Any]) -> dict[str, Any]:
300
+ """POST /agents — register with integrations, HITL, runners, and related fields."""
301
+ return self._resources.register_agent(body)
302
+
303
+ def update_agent(self, name: str, body: dict[str, Any]) -> dict[str, Any]:
304
+ """PUT /agents/{name} — update mutable fields (full-list semantics when provided)."""
305
+ return self._resources.update_agent(name, body)
306
+
289
307
  def get_agent(self, name: str) -> dict[str, Any]:
290
308
  return self._resources.get_agent(name)
291
309
 
@@ -326,12 +344,65 @@ class AidenNamespace:
326
344
  def list_integration_types(self) -> list[dict[str, Any]]:
327
345
  return self._resources.list_integration_types()
328
346
 
329
- def get_integration(self, name: str) -> dict[str, Any]:
330
- return self._resources.get_integration(name)
347
+ def get_integration(
348
+ self,
349
+ name: str,
350
+ *,
351
+ include_tools: bool = True,
352
+ ) -> dict[str, Any]:
353
+ """GET integration; defaults to include_tools so discovered_tools populate."""
354
+ return self._resources.get_integration(name, include_tools=include_tools)
331
355
 
332
356
  def upsert_integration(self, name: str, body: dict[str, Any]) -> dict[str, Any]:
333
357
  return self._resources.upsert_integration(name, body)
334
358
 
359
+ def upsert_integration_with_secrets(
360
+ self,
361
+ name: str,
362
+ *,
363
+ type: str,
364
+ secrets: dict[str, str],
365
+ kind: IntegrationSecretKind | None = None,
366
+ description: str | None = None,
367
+ secret_name: str | None = None,
368
+ scope: str = "TENANT",
369
+ enabled: bool = True,
370
+ env: dict[str, str] | None = None,
371
+ runner_id: str | None = None,
372
+ skip_connectivity_check: bool | None = None,
373
+ vault_category: str | None = None,
374
+ vault_subcategory: str | None = None,
375
+ integration: dict[str, Any] | None = None,
376
+ ) -> dict[str, Any]:
377
+ """Store Vault credentials, bind ``secret_ref_ids``, and upsert an integration.
378
+
379
+ Pass a plain ``secrets`` map; the SDK resolves Vault category,
380
+ subcategory, and required keys from Aiden's catalog and Vault
381
+ ``GET /support/metadata``. Override with ``vault_category`` /
382
+ ``vault_subcategory`` when discovery is wrong or unavailable.
383
+
384
+ Advanced callers can still ``vault.store_*_secret`` then
385
+ ``upsert_integration(..., secret_ref_ids=[...])`` themselves.
386
+
387
+ Returns ``{"integration", "secret_ids", "secrets"}``.
388
+ """
389
+ return self._integration_secrets.upsert(
390
+ name,
391
+ type=type,
392
+ secrets=secrets,
393
+ kind=kind,
394
+ description=description,
395
+ secret_name=secret_name,
396
+ scope=scope,
397
+ enabled=enabled,
398
+ env=env,
399
+ runner_id=runner_id,
400
+ skip_connectivity_check=skip_connectivity_check,
401
+ vault_category=vault_category,
402
+ vault_subcategory=vault_subcategory,
403
+ integration=integration,
404
+ )
405
+
335
406
  def delete_integration(self, name: str) -> dict[str, Any]:
336
407
  return self._resources.delete_integration(name)
337
408
 
@@ -344,6 +415,10 @@ class AidenNamespace:
344
415
  def list_approvals(self, **params: Any) -> list[dict[str, Any]]:
345
416
  return self._resources.list_approvals(**params)
346
417
 
418
+ def get_approval(self, approval_id: str) -> dict[str, Any]:
419
+ """GET /approvals/{id}."""
420
+ return self._resources.get_approval(approval_id)
421
+
347
422
  def resolve_approval(self, approval_id: str, body: dict[str, Any]) -> dict[str, Any]:
348
423
  return self._resources.resolve_approval(approval_id, body)
349
424
 
@@ -31,7 +31,11 @@ def _with_org(config: StackgenConfig, params: dict[str, Any] | None = None) -> d
31
31
 
32
32
 
33
33
  def _query_string(params: dict[str, Any]) -> str:
34
- cleaned = {k: v for k, v in params.items() if v is not None and v != ""}
34
+ cleaned: dict[str, Any] = {}
35
+ for k, v in params.items():
36
+ if v is None or v == "":
37
+ continue
38
+ cleaned[k] = "true" if v is True else "false" if v is False else v
35
39
  if not cleaned:
36
40
  return ""
37
41
  return "?" + urllib.parse.urlencode(cleaned)
@@ -69,6 +73,14 @@ class AidenResources:
69
73
  kwargs["content_type"] = "application/json"
70
74
  return _http.request(self._url(path, params), self._config.api_token, **kwargs)
71
75
 
76
+ def register_agent(self, body: dict[str, Any]) -> dict[str, Any]:
77
+ """POST /agents — register with full config (integrations, HITL, runners, …)."""
78
+ return _as_object(self._send("/agents", "POST", body), "registerAgent")
79
+
80
+ def update_agent(self, name: str, body: dict[str, Any]) -> dict[str, Any]:
81
+ """PUT /agents/{name} — update mutable fields (full-list when provided)."""
82
+ return _as_object(self._send(f"/agents/{name}", "PUT", body), "updateAgent")
83
+
72
84
  def get_agent(self, name: str) -> dict[str, Any]:
73
85
  return _as_object(self._get(f"/agents/{name}"), "getAgent")
74
86
 
@@ -116,8 +128,17 @@ class AidenResources:
116
128
  def list_integration_types(self) -> list[dict[str, Any]]:
117
129
  return _http.as_list(self._get("/integrations/types"))
118
130
 
119
- def get_integration(self, name: str) -> dict[str, Any]:
120
- return _as_object(self._get(f"/integrations/{name}"), "getIntegration")
131
+ def get_integration(
132
+ self,
133
+ name: str,
134
+ *,
135
+ include_tools: bool = True,
136
+ ) -> dict[str, Any]:
137
+ """GET /integrations/{name}. Defaults to include_tools so discovered_tools populate."""
138
+ return _as_object(
139
+ self._get(f"/integrations/{name}", {"include_tools": include_tools}),
140
+ "getIntegration",
141
+ )
121
142
 
122
143
  def upsert_integration(self, name: str, body: dict[str, Any]) -> dict[str, Any]:
123
144
  return _as_object(
@@ -144,6 +165,10 @@ class AidenResources:
144
165
  def list_approvals(self, **params: Any) -> list[dict[str, Any]]:
145
166
  return _http.as_list(self._get("/approvals", params))
146
167
 
168
+ def get_approval(self, approval_id: str) -> dict[str, Any]:
169
+ """GET /approvals/{id} — one pending or historical HITL approval."""
170
+ return _as_object(self._get(f"/approvals/{approval_id}"), "getApproval")
171
+
147
172
  def resolve_approval(self, approval_id: str, body: dict[str, Any]) -> dict[str, Any]:
148
173
  return _as_object(
149
174
  self._send(f"/approvals/{approval_id}", "POST", body), "resolveApproval"
@@ -52,8 +52,8 @@ class StackgenConfig:
52
52
  return self.mothership() + "/app/sre"
53
53
 
54
54
  def vault_url(self) -> str:
55
- """HTTP prefix for Vault on the mothership edge."""
56
- return self.mothership() + "/vault/v1"
55
+ """HTTP prefix for Vault on the mothership edge (``/api/vault/v1``)."""
56
+ return self.mothership() + "/api/vault/v1"
57
57
 
58
58
  def appcd_url(self) -> str:
59
59
  """HTTP prefix for organization (project) management."""