talkops-opscloud 0.3.0b1__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 (395) hide show
  1. talkops_opscloud-0.3.0b1/.dockerignore +87 -0
  2. talkops_opscloud-0.3.0b1/.env.example +0 -0
  3. talkops_opscloud-0.3.0b1/.github/workflows/ci.yml +157 -0
  4. talkops_opscloud-0.3.0b1/.github/workflows/release-pypi.yml +311 -0
  5. talkops_opscloud-0.3.0b1/.gitignore +54 -0
  6. talkops_opscloud-0.3.0b1/.python-version +1 -0
  7. talkops_opscloud-0.3.0b1/LICENSE +175 -0
  8. talkops_opscloud-0.3.0b1/PKG-INFO +449 -0
  9. talkops_opscloud-0.3.0b1/README.md +367 -0
  10. talkops_opscloud-0.3.0b1/docs/opscloud-docs/Configuration.md +199 -0
  11. talkops_opscloud-0.3.0b1/docs/opscloud-docs/approval-mode.md +145 -0
  12. talkops_opscloud-0.3.0b1/docs/opscloud-docs/cli-reference.md +215 -0
  13. talkops_opscloud-0.3.0b1/docs/opscloud-docs/config.toml.md +243 -0
  14. talkops_opscloud-0.3.0b1/docs/opscloud-docs/credentials.md +124 -0
  15. talkops_opscloud-0.3.0b1/docs/opscloud-docs/goal-and-rubrics.md +179 -0
  16. talkops_opscloud-0.3.0b1/docs/opscloud-docs/hooks.md +152 -0
  17. talkops_opscloud-0.3.0b1/docs/opscloud-docs/mcp-tools.md +122 -0
  18. talkops_opscloud-0.3.0b1/docs/opscloud-docs/memory-and-skills.md +154 -0
  19. talkops_opscloud-0.3.0b1/docs/opscloud-docs/model-providers.md +118 -0
  20. talkops_opscloud-0.3.0b1/docs/opscloud-docs/overview.md +154 -0
  21. talkops_opscloud-0.3.0b1/docs/opscloud-docs/plugins.md +138 -0
  22. talkops_opscloud-0.3.0b1/docs/opscloud-docs/quickstart.md +198 -0
  23. talkops_opscloud-0.3.0b1/docs/opscloud-docs/remote-sandboxes.md +114 -0
  24. talkops_opscloud-0.3.0b1/docs/opscloud-docs/subagents.md +124 -0
  25. talkops_opscloud-0.3.0b1/pyproject.toml +128 -0
  26. talkops_opscloud-0.3.0b1/scripts/install.sh +922 -0
  27. talkops_opscloud-0.3.0b1/src/opscloud/__init__.py +5 -0
  28. talkops_opscloud-0.3.0b1/src/opscloud/__main__.py +6 -0
  29. talkops_opscloud-0.3.0b1/src/opscloud/_constants.py +53 -0
  30. talkops_opscloud-0.3.0b1/src/opscloud/_debug.py +145 -0
  31. talkops_opscloud-0.3.0b1/src/opscloud/_debug_buffer.py +250 -0
  32. talkops_opscloud-0.3.0b1/src/opscloud/_textual_patches.py +367 -0
  33. talkops_opscloud-0.3.0b1/src/opscloud/_version.py +15 -0
  34. talkops_opscloud-0.3.0b1/src/opscloud/agent/__init__.py +27 -0
  35. talkops_opscloud-0.3.0b1/src/opscloud/agent/config.py +168 -0
  36. talkops_opscloud-0.3.0b1/src/opscloud/agent/factory.py +1103 -0
  37. talkops_opscloud-0.3.0b1/src/opscloud/approval_mode.py +44 -0
  38. talkops_opscloud-0.3.0b1/src/opscloud/backend/__init__.py +49 -0
  39. talkops_opscloud-0.3.0b1/src/opscloud/backend/composite.py +89 -0
  40. talkops_opscloud-0.3.0b1/src/opscloud/backend/local.py +183 -0
  41. talkops_opscloud-0.3.0b1/src/opscloud/backend/registry.py +79 -0
  42. talkops_opscloud-0.3.0b1/src/opscloud/backend/sandbox_config.py +107 -0
  43. talkops_opscloud-0.3.0b1/src/opscloud/backend/sandbox_factory.py +432 -0
  44. talkops_opscloud-0.3.0b1/src/opscloud/built_in_skills/remember/SKILL.md +124 -0
  45. talkops_opscloud-0.3.0b1/src/opscloud/built_in_skills/skill-creator/SKILL.md +348 -0
  46. talkops_opscloud-0.3.0b1/src/opscloud/built_in_skills/skill-creator/scripts/init_skill.py +371 -0
  47. talkops_opscloud-0.3.0b1/src/opscloud/built_in_skills/skill-creator/scripts/quick_validate.py +165 -0
  48. talkops_opscloud-0.3.0b1/src/opscloud/cli/__init__.py +1 -0
  49. talkops_opscloud-0.3.0b1/src/opscloud/cli/commands/__init__.py +15 -0
  50. talkops_opscloud-0.3.0b1/src/opscloud/cli/commands/auth.py +45 -0
  51. talkops_opscloud-0.3.0b1/src/opscloud/cli/commands/doctor.py +100 -0
  52. talkops_opscloud-0.3.0b1/src/opscloud/cli/commands/mcp.py +137 -0
  53. talkops_opscloud-0.3.0b1/src/opscloud/cli/commands/threads.py +51 -0
  54. talkops_opscloud-0.3.0b1/src/opscloud/cli/interactive.py +154 -0
  55. talkops_opscloud-0.3.0b1/src/opscloud/cli/main.py +903 -0
  56. talkops_opscloud-0.3.0b1/src/opscloud/cli/non_interactive.py +425 -0
  57. talkops_opscloud-0.3.0b1/src/opscloud/cli/server_manager.py +58 -0
  58. talkops_opscloud-0.3.0b1/src/opscloud/commands/__init__.py +19 -0
  59. talkops_opscloud-0.3.0b1/src/opscloud/commands/_base.py +110 -0
  60. talkops_opscloud-0.3.0b1/src/opscloud/commands/_guards.py +52 -0
  61. talkops_opscloud-0.3.0b1/src/opscloud/commands/_router.py +146 -0
  62. talkops_opscloud-0.3.0b1/src/opscloud/commands/_types.py +36 -0
  63. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/__init__.py +47 -0
  64. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/auth.py +94 -0
  65. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/bug.py +46 -0
  66. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/clear.py +106 -0
  67. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/cloud.py +185 -0
  68. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/compact.py +128 -0
  69. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/config_cmd.py +120 -0
  70. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/context.py +220 -0
  71. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/cost.py +44 -0
  72. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/doctor.py +535 -0
  73. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/effort.py +108 -0
  74. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/exit_cmd.py +41 -0
  75. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/fast.py +148 -0
  76. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/help_cmd.py +94 -0
  77. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/mcp.py +134 -0
  78. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/model.py +109 -0
  79. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/permissions.py +196 -0
  80. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/plugins.py +92 -0
  81. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/pool.py +108 -0
  82. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/resume.py +97 -0
  83. talkops_opscloud-0.3.0b1/src/opscloud/commands/core/skills.py +178 -0
  84. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/__init__.py +51 -0
  85. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/agents.py +98 -0
  86. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/btw.py +85 -0
  87. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/copy.py +97 -0
  88. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/goal.py +548 -0
  89. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/loop.py +295 -0
  90. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/memory.py +287 -0
  91. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/review.py +152 -0
  92. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/rubric.py +287 -0
  93. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/runtime.py +321 -0
  94. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/skill_creator.py +70 -0
  95. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/skill_invoke.py +165 -0
  96. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/tasks.py +209 -0
  97. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/trace.py +117 -0
  98. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/ui_toggles.py +135 -0
  99. talkops_opscloud-0.3.0b1/src/opscloud/commands/power/version.py +52 -0
  100. talkops_opscloud-0.3.0b1/src/opscloud/commands/registry.py +176 -0
  101. talkops_opscloud-0.3.0b1/src/opscloud/config/__init__.py +114 -0
  102. talkops_opscloud-0.3.0b1/src/opscloud/config/adapters/__init__.py +5 -0
  103. talkops_opscloud-0.3.0b1/src/opscloud/config/adapters/postgres.py +776 -0
  104. talkops_opscloud-0.3.0b1/src/opscloud/config/adapters/sqlite.py +769 -0
  105. talkops_opscloud-0.3.0b1/src/opscloud/config/aws.py +248 -0
  106. talkops_opscloud-0.3.0b1/src/opscloud/config/cloud_profiles.py +437 -0
  107. talkops_opscloud-0.3.0b1/src/opscloud/config/env_vars.py +81 -0
  108. talkops_opscloud-0.3.0b1/src/opscloud/config/langsmith.py +319 -0
  109. talkops_opscloud-0.3.0b1/src/opscloud/config/manifest.py +817 -0
  110. talkops_opscloud-0.3.0b1/src/opscloud/config/metadata.py +205 -0
  111. talkops_opscloud-0.3.0b1/src/opscloud/config/paths.py +604 -0
  112. talkops_opscloud-0.3.0b1/src/opscloud/config/plugins.py +130 -0
  113. talkops_opscloud-0.3.0b1/src/opscloud/config/settings.py +834 -0
  114. talkops_opscloud-0.3.0b1/src/opscloud/config/store.py +453 -0
  115. talkops_opscloud-0.3.0b1/src/opscloud/config/store_factory.py +97 -0
  116. talkops_opscloud-0.3.0b1/src/opscloud/config/toml_config.py +562 -0
  117. talkops_opscloud-0.3.0b1/src/opscloud/editor.py +173 -0
  118. talkops_opscloud-0.3.0b1/src/opscloud/exceptions.py +65 -0
  119. talkops_opscloud-0.3.0b1/src/opscloud/file_ops.py +217 -0
  120. talkops_opscloud-0.3.0b1/src/opscloud/hooks/__init__.py +139 -0
  121. talkops_opscloud-0.3.0b1/src/opscloud/hooks/env.py +44 -0
  122. talkops_opscloud-0.3.0b1/src/opscloud/hooks/interrupt.py +121 -0
  123. talkops_opscloud-0.3.0b1/src/opscloud/hooks/models/__init__.py +109 -0
  124. talkops_opscloud-0.3.0b1/src/opscloud/hooks/models/adapters.py +19 -0
  125. talkops_opscloud-0.3.0b1/src/opscloud/hooks/models/config.py +79 -0
  126. talkops_opscloud-0.3.0b1/src/opscloud/hooks/models/domain.py +434 -0
  127. talkops_opscloud-0.3.0b1/src/opscloud/hooks/models/transport.py +37 -0
  128. talkops_opscloud-0.3.0b1/src/opscloud/hooks/tools.py +231 -0
  129. talkops_opscloud-0.3.0b1/src/opscloud/input.py +48 -0
  130. talkops_opscloud-0.3.0b1/src/opscloud/integrations/__init__.py +80 -0
  131. talkops_opscloud-0.3.0b1/src/opscloud/integrations/base.py +153 -0
  132. talkops_opscloud-0.3.0b1/src/opscloud/integrations/content_filter.py +119 -0
  133. talkops_opscloud-0.3.0b1/src/opscloud/integrations/event_bus.py +480 -0
  134. talkops_opscloud-0.3.0b1/src/opscloud/integrations/hooks.py +238 -0
  135. talkops_opscloud-0.3.0b1/src/opscloud/integrations/identity.py +181 -0
  136. talkops_opscloud-0.3.0b1/src/opscloud/integrations/notifications.py +134 -0
  137. talkops_opscloud-0.3.0b1/src/opscloud/integrations/stream_bridge.py +397 -0
  138. talkops_opscloud-0.3.0b1/src/opscloud/integrations/thread_store.py +81 -0
  139. talkops_opscloud-0.3.0b1/src/opscloud/json_types.py +20 -0
  140. talkops_opscloud-0.3.0b1/src/opscloud/mcp/__init__.py +57 -0
  141. talkops_opscloud-0.3.0b1/src/opscloud/mcp/config.py +203 -0
  142. talkops_opscloud-0.3.0b1/src/opscloud/mcp/discovery.py +229 -0
  143. talkops_opscloud-0.3.0b1/src/opscloud/mcp/mcp_info.py +109 -0
  144. talkops_opscloud-0.3.0b1/src/opscloud/mcp/middleware.py +102 -0
  145. talkops_opscloud-0.3.0b1/src/opscloud/mcp/preload.py +505 -0
  146. talkops_opscloud-0.3.0b1/src/opscloud/mcp/raw_config.py +149 -0
  147. talkops_opscloud-0.3.0b1/src/opscloud/mcp/semantic_profiler.py +305 -0
  148. talkops_opscloud-0.3.0b1/src/opscloud/mcp/session_manager.py +727 -0
  149. talkops_opscloud-0.3.0b1/src/opscloud/mcp/trust.py +105 -0
  150. talkops_opscloud-0.3.0b1/src/opscloud/memory/__init__.py +27 -0
  151. talkops_opscloud-0.3.0b1/src/opscloud/memory/branch.py +61 -0
  152. talkops_opscloud-0.3.0b1/src/opscloud/memory/guard.py +19 -0
  153. talkops_opscloud-0.3.0b1/src/opscloud/memory/onboarding.py +120 -0
  154. talkops_opscloud-0.3.0b1/src/opscloud/memory/registry.py +134 -0
  155. talkops_opscloud-0.3.0b1/src/opscloud/memory/store.py +223 -0
  156. talkops_opscloud-0.3.0b1/src/opscloud/middleware/__init__.py +106 -0
  157. talkops_opscloud-0.3.0b1/src/opscloud/middleware/_repository_bounds.py +459 -0
  158. talkops_opscloud-0.3.0b1/src/opscloud/middleware/ask_user.py +152 -0
  159. talkops_opscloud-0.3.0b1/src/opscloud/middleware/auto_mode.py +60 -0
  160. talkops_opscloud-0.3.0b1/src/opscloud/middleware/auto_mode_hitl.py +2434 -0
  161. talkops_opscloud-0.3.0b1/src/opscloud/middleware/compaction.py +566 -0
  162. talkops_opscloud-0.3.0b1/src/opscloud/middleware/configurable_model.py +233 -0
  163. talkops_opscloud-0.3.0b1/src/opscloud/middleware/cost_tracking.py +1021 -0
  164. talkops_opscloud-0.3.0b1/src/opscloud/middleware/glm_stall_recovery.py +109 -0
  165. talkops_opscloud-0.3.0b1/src/opscloud/middleware/goal_criteria.py +1234 -0
  166. talkops_opscloud-0.3.0b1/src/opscloud/middleware/goal_state_notice.py +712 -0
  167. talkops_opscloud-0.3.0b1/src/opscloud/middleware/goal_tools.py +407 -0
  168. talkops_opscloud-0.3.0b1/src/opscloud/middleware/headless_mcp_guard.py +88 -0
  169. talkops_opscloud-0.3.0b1/src/opscloud/middleware/jev_model_router.py +1018 -0
  170. talkops_opscloud-0.3.0b1/src/opscloud/middleware/local_context.py +460 -0
  171. talkops_opscloud-0.3.0b1/src/opscloud/middleware/mcp_context.py +151 -0
  172. talkops_opscloud-0.3.0b1/src/opscloud/middleware/mcp_middleware.py +146 -0
  173. talkops_opscloud-0.3.0b1/src/opscloud/middleware/memory_guard.py +393 -0
  174. talkops_opscloud-0.3.0b1/src/opscloud/middleware/model_retry.py +205 -0
  175. talkops_opscloud-0.3.0b1/src/opscloud/middleware/registry.py +137 -0
  176. talkops_opscloud-0.3.0b1/src/opscloud/middleware/reliable_rubric.py +709 -0
  177. talkops_opscloud-0.3.0b1/src/opscloud/middleware/resume_state.py +91 -0
  178. talkops_opscloud-0.3.0b1/src/opscloud/middleware/server_hooks.py +1189 -0
  179. talkops_opscloud-0.3.0b1/src/opscloud/middleware/shell_allow_list.py +90 -0
  180. talkops_opscloud-0.3.0b1/src/opscloud/middleware/skills.py +382 -0
  181. talkops_opscloud-0.3.0b1/src/opscloud/middleware/subagent_artifacts.py +84 -0
  182. talkops_opscloud-0.3.0b1/src/opscloud/middleware/subagent_telemetry.py +261 -0
  183. talkops_opscloud-0.3.0b1/src/opscloud/middleware/subagents.py +243 -0
  184. talkops_opscloud-0.3.0b1/src/opscloud/middleware/tool_filter.py +384 -0
  185. talkops_opscloud-0.3.0b1/src/opscloud/middleware/unified_system_message.py +62 -0
  186. talkops_opscloud-0.3.0b1/src/opscloud/model/__init__.py +37 -0
  187. talkops_opscloud-0.3.0b1/src/opscloud/model/config.py +2992 -0
  188. talkops_opscloud-0.3.0b1/src/opscloud/model/factory.py +477 -0
  189. talkops_opscloud-0.3.0b1/src/opscloud/model/pool.py +459 -0
  190. talkops_opscloud-0.3.0b1/src/opscloud/model/reasoning.py +282 -0
  191. talkops_opscloud-0.3.0b1/src/opscloud/offload.py +173 -0
  192. talkops_opscloud-0.3.0b1/src/opscloud/output.py +64 -0
  193. talkops_opscloud-0.3.0b1/src/opscloud/plugins/__init__.py +189 -0
  194. talkops_opscloud-0.3.0b1/src/opscloud/plugins/_json.py +22 -0
  195. talkops_opscloud-0.3.0b1/src/opscloud/plugins/adapters/__init__.py +13 -0
  196. talkops_opscloud-0.3.0b1/src/opscloud/plugins/adapters/agents.py +112 -0
  197. talkops_opscloud-0.3.0b1/src/opscloud/plugins/adapters/commands.py +190 -0
  198. talkops_opscloud-0.3.0b1/src/opscloud/plugins/adapters/mcp.py +363 -0
  199. talkops_opscloud-0.3.0b1/src/opscloud/plugins/adapters/skills.py +132 -0
  200. talkops_opscloud-0.3.0b1/src/opscloud/plugins/commands_cli.py +541 -0
  201. talkops_opscloud-0.3.0b1/src/opscloud/plugins/discovery.py +512 -0
  202. talkops_opscloud-0.3.0b1/src/opscloud/plugins/manifest.py +335 -0
  203. talkops_opscloud-0.3.0b1/src/opscloud/plugins/marketplace.py +893 -0
  204. talkops_opscloud-0.3.0b1/src/opscloud/plugins/models.py +334 -0
  205. talkops_opscloud-0.3.0b1/src/opscloud/plugins/project_plugins.py +317 -0
  206. talkops_opscloud-0.3.0b1/src/opscloud/plugins/protocol.py +31 -0
  207. talkops_opscloud-0.3.0b1/src/opscloud/plugins/store.py +905 -0
  208. talkops_opscloud-0.3.0b1/src/opscloud/plugins/substitution.py +122 -0
  209. talkops_opscloud-0.3.0b1/src/opscloud/project_utils.py +145 -0
  210. talkops_opscloud-0.3.0b1/src/opscloud/prompts/__init__.py +37 -0
  211. talkops_opscloud-0.3.0b1/src/opscloud/prompts/system.py +483 -0
  212. talkops_opscloud-0.3.0b1/src/opscloud/prompts/templates/system_prompt.md +166 -0
  213. talkops_opscloud-0.3.0b1/src/opscloud/prompts/types.py +54 -0
  214. talkops_opscloud-0.3.0b1/src/opscloud/rubrics/__init__.py +42 -0
  215. talkops_opscloud-0.3.0b1/src/opscloud/rubrics/evaluator.py +404 -0
  216. talkops_opscloud-0.3.0b1/src/opscloud/rubrics/evidence_extractor.py +229 -0
  217. talkops_opscloud-0.3.0b1/src/opscloud/rubrics/generator.py +239 -0
  218. talkops_opscloud-0.3.0b1/src/opscloud/rubrics/jev_compiler.py +175 -0
  219. talkops_opscloud-0.3.0b1/src/opscloud/rubrics/jev_grader.py +297 -0
  220. talkops_opscloud-0.3.0b1/src/opscloud/rubrics/middleware.py +8 -0
  221. talkops_opscloud-0.3.0b1/src/opscloud/schema/__init__.py +107 -0
  222. talkops_opscloud-0.3.0b1/src/opscloud/schema/interrupts.py +981 -0
  223. talkops_opscloud-0.3.0b1/src/opscloud/security/__init__.py +91 -0
  224. talkops_opscloud-0.3.0b1/src/opscloud/security/approval_mode.py +528 -0
  225. talkops_opscloud-0.3.0b1/src/opscloud/security/approval_mode_source.py +230 -0
  226. talkops_opscloud-0.3.0b1/src/opscloud/security/cli_ast_evaluator.py +552 -0
  227. talkops_opscloud-0.3.0b1/src/opscloud/security/jev_classifier.py +651 -0
  228. talkops_opscloud-0.3.0b1/src/opscloud/security/shell_safety.py +340 -0
  229. talkops_opscloud-0.3.0b1/src/opscloud/security/unicode_security.py +439 -0
  230. talkops_opscloud-0.3.0b1/src/opscloud/security/url_validation.py +160 -0
  231. talkops_opscloud-0.3.0b1/src/opscloud/server/__init__.py +13 -0
  232. talkops_opscloud-0.3.0b1/src/opscloud/server/_server_config.py +158 -0
  233. talkops_opscloud-0.3.0b1/src/opscloud/server/server.py +242 -0
  234. talkops_opscloud-0.3.0b1/src/opscloud/server/server_graph.py +93 -0
  235. talkops_opscloud-0.3.0b1/src/opscloud/skills/__init__.py +91 -0
  236. talkops_opscloud-0.3.0b1/src/opscloud/skills/commands.py +1099 -0
  237. talkops_opscloud-0.3.0b1/src/opscloud/skills/invocation.py +200 -0
  238. talkops_opscloud-0.3.0b1/src/opscloud/skills/load.py +388 -0
  239. talkops_opscloud-0.3.0b1/src/opscloud/skills/loader.py +23 -0
  240. talkops_opscloud-0.3.0b1/src/opscloud/skills/merge.py +65 -0
  241. talkops_opscloud-0.3.0b1/src/opscloud/skills/registry.py +263 -0
  242. talkops_opscloud-0.3.0b1/src/opscloud/skills/sources.py +174 -0
  243. talkops_opscloud-0.3.0b1/src/opscloud/skills/trust.py +417 -0
  244. talkops_opscloud-0.3.0b1/src/opscloud/state/__init__.py +142 -0
  245. talkops_opscloud-0.3.0b1/src/opscloud/state/base.py +154 -0
  246. talkops_opscloud-0.3.0b1/src/opscloud/state/cloud_context.py +262 -0
  247. talkops_opscloud-0.3.0b1/src/opscloud/state/goal_channels.py +124 -0
  248. talkops_opscloud-0.3.0b1/src/opscloud/state/goal_state_limits.py +175 -0
  249. talkops_opscloud-0.3.0b1/src/opscloud/state/resume_state.py +58 -0
  250. talkops_opscloud-0.3.0b1/src/opscloud/state/service_context.py +281 -0
  251. talkops_opscloud-0.3.0b1/src/opscloud/state/session.py +957 -0
  252. talkops_opscloud-0.3.0b1/src/opscloud/state/state_migration.py +86 -0
  253. talkops_opscloud-0.3.0b1/src/opscloud/subagents/__init__.py +30 -0
  254. talkops_opscloud-0.3.0b1/src/opscloud/subagents/loader.py +331 -0
  255. talkops_opscloud-0.3.0b1/src/opscloud/subagents/subagents_parser.py +117 -0
  256. talkops_opscloud-0.3.0b1/src/opscloud/subagents/types.py +25 -0
  257. talkops_opscloud-0.3.0b1/src/opscloud/tools/__init__.py +36 -0
  258. talkops_opscloud-0.3.0b1/src/opscloud/tools/catalog.py +37 -0
  259. talkops_opscloud-0.3.0b1/src/opscloud/tools/display.py +24 -0
  260. talkops_opscloud-0.3.0b1/src/opscloud/tools/fetch_url.py +176 -0
  261. talkops_opscloud-0.3.0b1/src/opscloud/tools/goal_tools.py +423 -0
  262. talkops_opscloud-0.3.0b1/src/opscloud/tools/registry.py +105 -0
  263. talkops_opscloud-0.3.0b1/src/opscloud/tools/thread.py +32 -0
  264. talkops_opscloud-0.3.0b1/src/opscloud/tools/web_search.py +215 -0
  265. talkops_opscloud-0.3.0b1/src/opscloud/ui/__init__.py +119 -0
  266. talkops_opscloud-0.3.0b1/src/opscloud/ui/app.py +5400 -0
  267. talkops_opscloud-0.3.0b1/src/opscloud/ui/app.tcss +479 -0
  268. talkops_opscloud-0.3.0b1/src/opscloud/ui/clipboard.py +147 -0
  269. talkops_opscloud-0.3.0b1/src/opscloud/ui/command_registry.py +482 -0
  270. talkops_opscloud-0.3.0b1/src/opscloud/ui/message_store.py +152 -0
  271. talkops_opscloud-0.3.0b1/src/opscloud/ui/permission_store.py +360 -0
  272. talkops_opscloud-0.3.0b1/src/opscloud/ui/preferences.py +113 -0
  273. talkops_opscloud-0.3.0b1/src/opscloud/ui/prompt_manager.py +96 -0
  274. talkops_opscloud-0.3.0b1/src/opscloud/ui/remote_client.py +505 -0
  275. talkops_opscloud-0.3.0b1/src/opscloud/ui/textual_adapter.py +1269 -0
  276. talkops_opscloud-0.3.0b1/src/opscloud/ui/theme.py +728 -0
  277. talkops_opscloud-0.3.0b1/src/opscloud/ui/ui_help.py +415 -0
  278. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/__init__.py +383 -0
  279. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_ask_user_types.py +81 -0
  280. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_copy_spans.py +52 -0
  281. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_inline_prompt.py +290 -0
  282. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_js_eval_display.py +139 -0
  283. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_links.py +175 -0
  284. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_tool_stream.py +308 -0
  285. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/agent_selector.py +297 -0
  286. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/approval.py +741 -0
  287. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/ask_user.py +539 -0
  288. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/auth.py +695 -0
  289. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/auth_manager.py +214 -0
  290. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/auto_mode_notice.py +146 -0
  291. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/autocomplete.py +709 -0
  292. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/chat_input.py +805 -0
  293. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/cloud_selector.py +528 -0
  294. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/config_manager.py +652 -0
  295. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/debug_console.py +1269 -0
  296. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/devops_renderers.py +184 -0
  297. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/diff.py +237 -0
  298. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/effort_selector.py +166 -0
  299. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/goal_review.py +612 -0
  300. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/goal_status.py +57 -0
  301. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/infra_panel.py +141 -0
  302. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/install_confirm.py +114 -0
  303. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/loading.py +170 -0
  304. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/mcp_viewer.py +1204 -0
  305. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/messages.py +4461 -0
  306. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/model_selector.py +863 -0
  307. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/notification_center.py +108 -0
  308. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/notification_settings.py +119 -0
  309. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/operation_card.py +106 -0
  310. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/permissions_manager.py +667 -0
  311. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/plugin_manager.py +1212 -0
  312. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/pool_selector.py +376 -0
  313. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/preamble.py +53 -0
  314. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/skills_viewer.py +432 -0
  315. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/status.py +1037 -0
  316. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/subagent_panel.py +927 -0
  317. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/theme_selector.py +232 -0
  318. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/thread_selector.py +358 -0
  319. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/toast.py +31 -0
  320. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/tool_display.py +325 -0
  321. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/tool_renderers.py +234 -0
  322. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/tool_widgets.py +278 -0
  323. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/welcome.py +421 -0
  324. talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/welcome_popup.py +102 -0
  325. talkops_opscloud-0.3.0b1/src/opscloud/utils/__init__.py +24 -0
  326. talkops_opscloud-0.3.0b1/src/opscloud/utils/cost_estimation.py +169 -0
  327. talkops_opscloud-0.3.0b1/src/opscloud/utils/git.py +390 -0
  328. talkops_opscloud-0.3.0b1/src/opscloud/utils/logger.py +571 -0
  329. talkops_opscloud-0.3.0b1/src/opscloud/utils/session_stats.py +115 -0
  330. talkops_opscloud-0.3.0b1/src/opscloud/utils/startup_error.py +37 -0
  331. talkops_opscloud-0.3.0b1/tests/__init__.py +1 -0
  332. talkops_opscloud-0.3.0b1/tests/conftest.py +55 -0
  333. talkops_opscloud-0.3.0b1/tests/evals/__init__.py +1 -0
  334. talkops_opscloud-0.3.0b1/tests/evals/datasets/aws_cloud_ops.yaml +22 -0
  335. talkops_opscloud-0.3.0b1/tests/evals/evaluators/__init__.py +1 -0
  336. talkops_opscloud-0.3.0b1/tests/evals/evaluators/output_evaluator.py +32 -0
  337. talkops_opscloud-0.3.0b1/tests/evals/evaluators/trajectory_evaluator.py +36 -0
  338. talkops_opscloud-0.3.0b1/tests/evals/runners/test_eval_runner.py +32 -0
  339. talkops_opscloud-0.3.0b1/tests/integration_tests/test_agent_lifecycle.py +16 -0
  340. talkops_opscloud-0.3.0b1/tests/integration_tests/test_server_lifecycle.py +23 -0
  341. talkops_opscloud-0.3.0b1/tests/unit_tests/test_agent_factory.py +51 -0
  342. talkops_opscloud-0.3.0b1/tests/unit_tests/test_approval_widget.py +115 -0
  343. talkops_opscloud-0.3.0b1/tests/unit_tests/test_ask_user.py +160 -0
  344. talkops_opscloud-0.3.0b1/tests/unit_tests/test_ast_evaluator.py +86 -0
  345. talkops_opscloud-0.3.0b1/tests/unit_tests/test_backend.py +323 -0
  346. talkops_opscloud-0.3.0b1/tests/unit_tests/test_checkpointer.py +87 -0
  347. talkops_opscloud-0.3.0b1/tests/unit_tests/test_cli_enhancements.py +489 -0
  348. talkops_opscloud-0.3.0b1/tests/unit_tests/test_cli_rubric.py +92 -0
  349. talkops_opscloud-0.3.0b1/tests/unit_tests/test_cloud_command.py +469 -0
  350. talkops_opscloud-0.3.0b1/tests/unit_tests/test_commands.py +496 -0
  351. talkops_opscloud-0.3.0b1/tests/unit_tests/test_config.py +511 -0
  352. talkops_opscloud-0.3.0b1/tests/unit_tests/test_cost_tracking.py +295 -0
  353. talkops_opscloud-0.3.0b1/tests/unit_tests/test_default_marketplace.py +432 -0
  354. talkops_opscloud-0.3.0b1/tests/unit_tests/test_goal_criteria.py +151 -0
  355. talkops_opscloud-0.3.0b1/tests/unit_tests/test_goal_state_limits.py +75 -0
  356. talkops_opscloud-0.3.0b1/tests/unit_tests/test_goal_state_notice.py +156 -0
  357. talkops_opscloud-0.3.0b1/tests/unit_tests/test_grader_tools.py +49 -0
  358. talkops_opscloud-0.3.0b1/tests/unit_tests/test_hitl.py +887 -0
  359. talkops_opscloud-0.3.0b1/tests/unit_tests/test_integrations_and_hooks.py +528 -0
  360. talkops_opscloud-0.3.0b1/tests/unit_tests/test_interrupt_schemas.py +308 -0
  361. talkops_opscloud-0.3.0b1/tests/unit_tests/test_jev_model_router.py +784 -0
  362. talkops_opscloud-0.3.0b1/tests/unit_tests/test_jev_rubrics.py +621 -0
  363. talkops_opscloud-0.3.0b1/tests/unit_tests/test_local_context.py +179 -0
  364. talkops_opscloud-0.3.0b1/tests/unit_tests/test_logging.py +307 -0
  365. talkops_opscloud-0.3.0b1/tests/unit_tests/test_mcp.py +648 -0
  366. talkops_opscloud-0.3.0b1/tests/unit_tests/test_mcp_middleware.py +165 -0
  367. talkops_opscloud-0.3.0b1/tests/unit_tests/test_mcp_viewer_and_command.py +341 -0
  368. talkops_opscloud-0.3.0b1/tests/unit_tests/test_memory.py +230 -0
  369. talkops_opscloud-0.3.0b1/tests/unit_tests/test_memory_enhancements.py +183 -0
  370. talkops_opscloud-0.3.0b1/tests/unit_tests/test_middleware_stack.py +82 -0
  371. talkops_opscloud-0.3.0b1/tests/unit_tests/test_model_providers.py +516 -0
  372. talkops_opscloud-0.3.0b1/tests/unit_tests/test_model_retry.py +165 -0
  373. talkops_opscloud-0.3.0b1/tests/unit_tests/test_plugin_agent_skill_mcp_scoping.py +228 -0
  374. talkops_opscloud-0.3.0b1/tests/unit_tests/test_plugin_manager_search.py +177 -0
  375. talkops_opscloud-0.3.0b1/tests/unit_tests/test_plugins.py +672 -0
  376. talkops_opscloud-0.3.0b1/tests/unit_tests/test_project_plugins.py +264 -0
  377. talkops_opscloud-0.3.0b1/tests/unit_tests/test_prompts_and_schema.py +266 -0
  378. talkops_opscloud-0.3.0b1/tests/unit_tests/test_reliable_rubric.py +91 -0
  379. talkops_opscloud-0.3.0b1/tests/unit_tests/test_reload_restart.py +348 -0
  380. talkops_opscloud-0.3.0b1/tests/unit_tests/test_resume_state.py +67 -0
  381. talkops_opscloud-0.3.0b1/tests/unit_tests/test_resumed_thread_latency_fix.py +107 -0
  382. talkops_opscloud-0.3.0b1/tests/unit_tests/test_rubrics.py +55 -0
  383. talkops_opscloud-0.3.0b1/tests/unit_tests/test_security.py +368 -0
  384. talkops_opscloud-0.3.0b1/tests/unit_tests/test_server.py +157 -0
  385. talkops_opscloud-0.3.0b1/tests/unit_tests/test_server_hooks.py +499 -0
  386. talkops_opscloud-0.3.0b1/tests/unit_tests/test_skill_creator.py +229 -0
  387. talkops_opscloud-0.3.0b1/tests/unit_tests/test_skills.py +470 -0
  388. talkops_opscloud-0.3.0b1/tests/unit_tests/test_state.py +315 -0
  389. talkops_opscloud-0.3.0b1/tests/unit_tests/test_subagents.py +791 -0
  390. talkops_opscloud-0.3.0b1/tests/unit_tests/test_tool_filter.py +174 -0
  391. talkops_opscloud-0.3.0b1/tests/unit_tests/test_tools.py +129 -0
  392. talkops_opscloud-0.3.0b1/tests/unit_tests/test_tui_app.py +355 -0
  393. talkops_opscloud-0.3.0b1/tests/unit_tests/test_utils.py +55 -0
  394. talkops_opscloud-0.3.0b1/uv-requirements.txt +4 -0
  395. talkops_opscloud-0.3.0b1/uv.lock +6001 -0
@@ -0,0 +1,87 @@
1
+ # Git
2
+ .git
3
+ .gitignore
4
+
5
+ # Python
6
+ __pycache__
7
+ *.pyc
8
+ *.pyo
9
+ *.pyd
10
+ .Python
11
+ env
12
+ pip-log.txt
13
+ pip-delete-this-directory.txt
14
+ .tox
15
+ .coverage
16
+ .coverage.*
17
+ .cache
18
+ nosetests.xml
19
+ coverage.xml
20
+ *.cover
21
+ *.log
22
+ .git
23
+ .mypy_cache
24
+ .pytest_cache
25
+ .hypothesis
26
+
27
+ # Virtual environments
28
+ .env
29
+ .venv
30
+ env/
31
+ venv/
32
+ ENV/
33
+ env.bak/
34
+ venv.bak/
35
+
36
+ # IDEs
37
+ .vscode/
38
+ .idea/
39
+ *.swp
40
+ *.swo
41
+ *~
42
+
43
+ # OS
44
+ .DS_Store
45
+ .DS_Store?
46
+ ._*
47
+ .Spotlight-V100
48
+ .Trashes
49
+ ehthumbs.db
50
+ Thumbs.db
51
+
52
+ # Documentation
53
+ docs/
54
+ *.md
55
+ !README.md
56
+
57
+ # Tests
58
+ tests/
59
+ test_*
60
+ *_test.py
61
+
62
+ # Development files
63
+ .pre-commit-config.yaml
64
+ .ruff.toml
65
+ .mypy.ini
66
+ pyproject.toml.bak
67
+
68
+ # Build artifacts
69
+ build/
70
+ dist/
71
+ *.egg-info/
72
+
73
+ # Reference files
74
+ reference/
75
+
76
+ # Docker
77
+ Dockerfile*
78
+ docker-compose*.yml
79
+ .dockerignore
80
+
81
+ # Logs
82
+ *.log
83
+ logs/
84
+
85
+ # Temporary files
86
+ tmp/
87
+ temp/
File without changes
@@ -0,0 +1,157 @@
1
+ # ─────────────────────────────────────────────────────────────────────────────
2
+ # OpsCloud — Continuous Integration (CI) Pipeline
3
+ # ─────────────────────────────────────────────────────────────────────────────
4
+ # Runs on: Pull Requests & pushes to main
5
+ # Validates: Unit tests, Python 3.12/3.13 matrix, build integrity & wheel assets
6
+ # ─────────────────────────────────────────────────────────────────────────────
7
+
8
+ name: "🔍 CI"
9
+
10
+ on:
11
+ push:
12
+ branches: [main]
13
+ paths:
14
+ - "src/**"
15
+ - "tests/**"
16
+ - "scripts/**"
17
+ - "pyproject.toml"
18
+ - ".github/workflows/ci.yml"
19
+ pull_request:
20
+ branches: [main]
21
+ paths:
22
+ - "src/**"
23
+ - "tests/**"
24
+ - "scripts/**"
25
+ - "pyproject.toml"
26
+ - ".github/workflows/ci.yml"
27
+
28
+ concurrency:
29
+ group: ci-${{ github.ref }}
30
+ cancel-in-progress: true
31
+
32
+ permissions:
33
+ contents: read
34
+
35
+ jobs:
36
+ # ── Step 1: Code Quality & Installer Shell Syntax ──────────────────────────
37
+ lint:
38
+ name: "🧹 Lint & Shell Check"
39
+ runs-on: ubuntu-latest
40
+ steps:
41
+ - uses: actions/checkout@v4
42
+
43
+ - name: Validate install script shell syntax
44
+ run: |
45
+ echo "Checking scripts/install.sh syntax..."
46
+ bash -n scripts/install.sh
47
+ echo "✅ Shell script syntax valid"
48
+
49
+ - name: Install uv
50
+ uses: astral-sh/setup-uv@v6
51
+ with:
52
+ version: "latest"
53
+
54
+ - name: Set up Python
55
+ uses: actions/setup-python@v5
56
+ with:
57
+ python-version: "3.12"
58
+
59
+ - name: Install dependencies
60
+ run: uv sync --all-extras --dev
61
+
62
+ - name: Type checking (pyright)
63
+ run: |
64
+ if uv run pyright --version 2>/dev/null; then
65
+ uv run pyright src/
66
+ else
67
+ echo "⚠️ pyright not installed in dev dependencies — skipping"
68
+ fi
69
+ continue-on-error: true
70
+
71
+ # ── Step 2: Test Matrix (Python 3.12 & 3.13) ────────────────────────────────
72
+ test:
73
+ name: "🧪 Tests (Python ${{ matrix.python-version }})"
74
+ runs-on: ubuntu-latest
75
+ strategy:
76
+ fail-fast: false
77
+ matrix:
78
+ python-version: ["3.12", "3.13"]
79
+ steps:
80
+ - uses: actions/checkout@v4
81
+
82
+ - name: Install uv
83
+ uses: astral-sh/setup-uv@v6
84
+ with:
85
+ version: "latest"
86
+
87
+ - name: Set up Python ${{ matrix.python-version }}
88
+ uses: actions/setup-python@v5
89
+ with:
90
+ python-version: ${{ matrix.python-version }}
91
+
92
+ - name: Install dependencies
93
+ run: uv sync --all-extras --dev
94
+
95
+ - name: Run unit test suite
96
+ run: |
97
+ uv run pytest tests/ -m unit -v --tb=short
98
+
99
+ # ── Step 3: Build & Package Asset Verification ─────────────────────────────
100
+ build-verify:
101
+ name: "📦 Build & Wheel Verification"
102
+ runs-on: ubuntu-latest
103
+ steps:
104
+ - uses: actions/checkout@v4
105
+
106
+ - name: Install uv
107
+ uses: astral-sh/setup-uv@v6
108
+ with:
109
+ version: "latest"
110
+
111
+ - name: Set up Python
112
+ uses: actions/setup-python@v5
113
+ with:
114
+ python-version: "3.12"
115
+
116
+ - name: Build sdist and wheel
117
+ run: |
118
+ uv build
119
+ echo "📦 Build artifacts created:"
120
+ ls -lh dist/
121
+
122
+ - name: Verify embedded skills, templates, and entry points inside wheel
123
+ run: |
124
+ WHEEL=$(ls dist/*.whl | head -1)
125
+ echo "Inspecting wheel: $WHEEL"
126
+
127
+ # 1. Verify Entry Point Binary Script
128
+ if ! unzip -l "$WHEEL" | grep -q "opscloud/cli/main.py"; then
129
+ echo "❌ Critical Error: Missing opscloud/cli/main.py in wheel!"
130
+ exit 1
131
+ fi
132
+ echo "✅ CLI entry point verified in wheel."
133
+
134
+ # 2. Verify Root Global Skills
135
+ for skill in remember skill-creator; do
136
+ if ! unzip -l "$WHEEL" | grep -q "opscloud/built_in_skills/${skill}/SKILL.md"; then
137
+ echo "❌ Critical Error: Missing root skill '${skill}' in wheel!"
138
+ exit 1
139
+ fi
140
+ done
141
+ echo "✅ Built-in skills verified in wheel."
142
+
143
+ # 3. Verify Prompt Templates and TUI Stylesheet
144
+ for asset in "opscloud/prompts/templates/system_prompt.md" "opscloud/ui/app.tcss"; do
145
+ if ! unzip -l "$WHEEL" | grep -q "$asset"; then
146
+ echo "❌ Critical Error: Missing core asset '${asset}' in wheel!"
147
+ exit 1
148
+ fi
149
+ done
150
+ echo "✅ Core prompt templates and TUI stylesheet verified in wheel."
151
+
152
+ # 4. Verify Entry Point Registration in wheel metadata
153
+ if ! unzip -p "$WHEEL" "*.dist-info/entry_points.txt" | grep -q "opscloud = opscloud.cli.main:cli_main"; then
154
+ echo "❌ Critical Error: 'opscloud' console script entry point not registered in wheel metadata!"
155
+ exit 1
156
+ fi
157
+ echo "✅ 'opscloud' console script registration verified in entry_points.txt."
@@ -0,0 +1,311 @@
1
+ # ─────────────────────────────────────────────────────────────────────────────
2
+ # OpsCloud — PyPI & GitHub Release Pipeline
3
+ # ─────────────────────────────────────────────────────────────────────────────
4
+ # Trigger: Push a tag like `v0.1.0` or manual workflow_dispatch
5
+ # Result: Test ➔ Build ➔ Asset Verification ➔ Publish to PyPI ➔ GitHub Release
6
+ # ─────────────────────────────────────────────────────────────────────────────
7
+
8
+ name: "📦 Release to PyPI & GitHub"
9
+
10
+ on:
11
+ push:
12
+ tags:
13
+ - "v*"
14
+ workflow_dispatch:
15
+ inputs:
16
+ tag_name:
17
+ description: "Release tag (e.g., v0.1.0)"
18
+ required: true
19
+ type: string
20
+
21
+ concurrency:
22
+ group: release-${{ github.ref }}
23
+ cancel-in-progress: true
24
+
25
+ permissions:
26
+ contents: write # GitHub Releases
27
+ id-token: write # PyPI Trusted Publishing (OIDC)
28
+
29
+ jobs:
30
+ # ── Step 1: Validate Version & Metadata ─────────────────────────────────────
31
+ meta:
32
+ name: "🏷️ Validate Release Tag"
33
+ runs-on: ubuntu-latest
34
+ outputs:
35
+ version: ${{ steps.parse.outputs.version }}
36
+ tag: ${{ steps.parse.outputs.tag }}
37
+ pypi_name: ${{ steps.parse.outputs.pypi_name }}
38
+ steps:
39
+ - uses: actions/checkout@v4
40
+
41
+ - name: Parse tag and metadata
42
+ id: parse
43
+ run: |
44
+ if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
45
+ TAG="${{ inputs.tag_name }}"
46
+ else
47
+ TAG="${GITHUB_REF#refs/tags/}"
48
+ fi
49
+ # Strip leading 'v' if present (e.g. v0.1.0 -> 0.1.0)
50
+ VERSION="${TAG#v}"
51
+
52
+ PKG_NAME=$(grep '^name' pyproject.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
53
+ [ -z "$PKG_NAME" ] && PKG_NAME="opscloud"
54
+
55
+ echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
56
+ echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
57
+ echo "pypi_name=${PKG_NAME}" >> "$GITHUB_OUTPUT"
58
+
59
+ echo "🏷️ Release Tag: ${TAG}"
60
+ echo "📦 Version: ${VERSION}"
61
+ echo "🐍 PyPI Package: ${PKG_NAME}"
62
+
63
+ - name: Validate version matches pyproject.toml
64
+ run: |
65
+ TOML_VERSION=$(grep '^version' pyproject.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
66
+ TAG_VERSION="${{ steps.parse.outputs.version }}"
67
+ if [ "$TOML_VERSION" != "$TAG_VERSION" ]; then
68
+ echo "❌ Version mismatch! pyproject.toml=${TOML_VERSION} tag=${TAG_VERSION}"
69
+ exit 1
70
+ fi
71
+ echo "✅ Version match: ${TAG_VERSION}"
72
+
73
+ # ── Step 2: Run Unit Tests ──────────────────────────────────────────────────
74
+ test:
75
+ name: "🧪 Run Tests"
76
+ needs: meta
77
+ runs-on: ubuntu-latest
78
+ steps:
79
+ - uses: actions/checkout@v4
80
+
81
+ - name: Install uv
82
+ uses: astral-sh/setup-uv@v6
83
+ with:
84
+ version: "latest"
85
+
86
+ - name: Set up Python
87
+ uses: actions/setup-python@v5
88
+ with:
89
+ python-version: "3.12"
90
+
91
+ - name: Install dependencies
92
+ run: uv sync --all-extras --dev
93
+
94
+ - name: Run unit tests
95
+ run: uv run pytest tests/ -m unit -v --tb=short
96
+
97
+ # ── Step 3: Build & Package Verification ────────────────────────────────────
98
+ build:
99
+ name: "🔨 Build Package"
100
+ needs: [meta, test]
101
+ runs-on: ubuntu-latest
102
+ steps:
103
+ - uses: actions/checkout@v4
104
+
105
+ - name: Install uv
106
+ uses: astral-sh/setup-uv@v6
107
+ with:
108
+ version: "latest"
109
+
110
+ - name: Set up Python
111
+ uses: actions/setup-python@v5
112
+ with:
113
+ python-version: "3.12"
114
+
115
+ - name: Build sdist and wheel
116
+ run: uv build
117
+
118
+ - name: Verify built artifacts
119
+ run: |
120
+ echo "📦 Built artifacts:"
121
+ ls -lh dist/
122
+
123
+ VERSION="${{ needs.meta.outputs.version }}"
124
+ if ! ls dist/*${VERSION}* 1>/dev/null 2>&1; then
125
+ echo "❌ No artifacts found with version ${VERSION}"
126
+ exit 1
127
+ fi
128
+
129
+ WHEEL=$(ls dist/*.whl | head -1)
130
+
131
+ # 1. Verify Entry Point Binary Script
132
+ if ! unzip -l "$WHEEL" | grep -q "opscloud/cli/main.py"; then
133
+ echo "❌ Critical Error: Missing opscloud/cli/main.py in wheel!"
134
+ exit 1
135
+ fi
136
+
137
+ # 2. Verify Built-in Skills
138
+ for skill in remember skill-creator; do
139
+ if ! unzip -l "$WHEEL" | grep -q "opscloud/built_in_skills/${skill}/SKILL.md"; then
140
+ echo "❌ Critical Error: Missing skill '${skill}' in wheel!"
141
+ exit 1
142
+ fi
143
+ done
144
+
145
+ # 3. Verify Prompt Templates and TUI Stylesheet
146
+ for asset in "opscloud/prompts/templates/system_prompt.md" "opscloud/ui/app.tcss"; do
147
+ if ! unzip -l "$WHEEL" | grep -q "$asset"; then
148
+ echo "❌ Critical Error: Missing asset '${asset}' in wheel!"
149
+ exit 1
150
+ fi
151
+ done
152
+
153
+ # 4. Verify Entry Point in wheel metadata
154
+ if ! unzip -p "$WHEEL" "*.dist-info/entry_points.txt" | grep -q "opscloud = opscloud.cli.main:cli_main"; then
155
+ echo "❌ Critical Error: 'opscloud' console script entry point not registered in wheel metadata!"
156
+ exit 1
157
+ fi
158
+
159
+ echo "✅ OpsCloud package integrity verified."
160
+
161
+ - name: Upload build artifacts
162
+ uses: actions/upload-artifact@v4
163
+ with:
164
+ name: dist-opscloud
165
+ path: dist/
166
+ retention-days: 7
167
+
168
+ # ── Step 4: Publish to PyPI ─────────────────────────────────────────────────
169
+ publish-pypi:
170
+ name: "🚀 Publish to PyPI"
171
+ needs: [meta, build]
172
+ runs-on: ubuntu-latest
173
+ environment:
174
+ name: pypi
175
+ url: https://pypi.org/project/${{ needs.meta.outputs.pypi_name }}/${{ needs.meta.outputs.version }}/
176
+ steps:
177
+ - name: Download build artifacts
178
+ uses: actions/download-artifact@v4
179
+ with:
180
+ name: dist-opscloud
181
+ path: dist/
182
+
183
+ - name: Publish to PyPI
184
+ uses: pypa/gh-action-pypi-publish@release/v1
185
+ with:
186
+ packages-dir: dist/
187
+ verbose: true
188
+ print-hash: true
189
+
190
+ # ── Step 5: Create GitHub Release ───────────────────────────────────────────
191
+ github-release:
192
+ name: "📋 Create GitHub Release"
193
+ needs: [meta, build, publish-pypi]
194
+ runs-on: ubuntu-latest
195
+ steps:
196
+ - uses: actions/checkout@v4
197
+ with:
198
+ fetch-depth: 0
199
+
200
+ - name: Download build artifacts
201
+ uses: actions/download-artifact@v4
202
+ with:
203
+ name: dist-opscloud
204
+ path: dist/
205
+
206
+ - name: Generate release notes
207
+ id: notes
208
+ env:
209
+ PYPI_NAME: ${{ needs.meta.outputs.pypi_name }}
210
+ VERSION: ${{ needs.meta.outputs.version }}
211
+ TAG: ${{ needs.meta.outputs.tag }}
212
+ run: |
213
+ set -euo pipefail
214
+
215
+ TOML="pyproject.toml"
216
+ DESCRIPTION=$(grep '^description' "$TOML" | head -1 | sed 's/.*"\(.*\)".*/\1/')
217
+ PYTHON_REQ=$(grep 'requires-python' "$TOML" | head -1 | sed 's/.*"\(.*\)".*/\1/' || echo ">=3.12")
218
+
219
+ # Generate artifact checksums
220
+ CHECKSUMS=""
221
+ for f in dist/*; do
222
+ HASH=$(sha256sum "$f" | cut -d' ' -f1)
223
+ FNAME=$(basename "$f")
224
+ CHECKSUMS="${CHECKSUMS}\n| \`${FNAME}\` | \`${HASH:0:20}…\` |"
225
+ done
226
+
227
+ # Changelog since previous tag
228
+ PREV_TAG=$(git tag --list "v*" --sort=-version:refname | grep -v "^${TAG}$" | head -1 || true)
229
+ CHANGELOG=""
230
+ if [ -n "$PREV_TAG" ]; then
231
+ COMMITS=$(git log --oneline "${PREV_TAG}..HEAD" 2>/dev/null | head -20 || true)
232
+ if [ -n "$COMMITS" ]; then
233
+ CHANGELOG="### 📝 Changes since \`${PREV_TAG}\`\n\n"
234
+ while IFS= read -r commit; do
235
+ [ -z "$commit" ] && continue
236
+ CHANGELOG="${CHANGELOG}- ${commit}\n"
237
+ done <<< "$COMMITS"
238
+ fi
239
+ fi
240
+
241
+ cat > /tmp/release_body.md << RELEASE_EOF
242
+ ## ⚡ OpsCloud ${TAG}
243
+
244
+ > ${DESCRIPTION}
245
+
246
+ ---
247
+
248
+ ### ⚡ Installation & Quickstart
249
+
250
+ \`\`\`bash
251
+ # Direct one-line installer
252
+ curl -LsSf https://raw.githubusercontent.com/talkops-ai/opscloud/main/scripts/install.sh | bash
253
+ \`\`\`
254
+
255
+ ---
256
+
257
+ ### 🚀 Launch OpsCloud
258
+
259
+ \`\`\`bash
260
+ # Interactive Terminal UI
261
+ opscloud
262
+
263
+ # System & Cloud Health Check
264
+ opscloud doctor
265
+
266
+ # Configure API credentials
267
+ opscloud /auth
268
+ \`\`\`
269
+
270
+ ---
271
+
272
+ $(echo -e "${CHANGELOG}")
273
+
274
+ ### 📋 Package Details
275
+
276
+ | Property | Value |
277
+ |---|---|
278
+ | **PyPI Package** | [\`${PYPI_NAME}\`](https://pypi.org/project/${PYPI_NAME}/${VERSION}/) |
279
+ | **Version** | \`${VERSION}\` |
280
+ | **Python Requirement** | \`${PYTHON_REQ}\` |
281
+ | **License** | Apache 2.0 |
282
+ | **CLI Binary** | \`opscloud\` |
283
+
284
+ <details>
285
+ <summary>🔒 Artifact Checksums (SHA-256)</summary>
286
+
287
+ | Artifact | SHA-256 |
288
+ |---|---|$(echo -e "${CHECKSUMS}")
289
+
290
+ </details>
291
+
292
+ ---
293
+
294
+ ### 🔗 Links & Resources
295
+ - 📖 [Technical Documentation](https://github.com/talkops-ai/opscloud)
296
+ - 📦 [PyPI Release](https://pypi.org/project/${PYPI_NAME}/${VERSION}/)
297
+ - 🐛 [Report an Issue](https://github.com/talkops-ai/opscloud/issues/new)
298
+ RELEASE_EOF
299
+
300
+ sed -i 's/^ //' /tmp/release_body.md
301
+
302
+ - name: Publish GitHub Release
303
+ uses: softprops/action-gh-release@v2
304
+ with:
305
+ tag_name: ${{ needs.meta.outputs.tag }}
306
+ name: "OpsCloud ${{ needs.meta.outputs.tag }}"
307
+ body_path: /tmp/release_body.md
308
+ files: dist/*
309
+ draft: false
310
+ prerelease: ${{ contains(needs.meta.outputs.version, 'b') || contains(needs.meta.outputs.version, 'a') || contains(needs.meta.outputs.version, 'rc') }}
311
+ generate_release_notes: false
@@ -0,0 +1,54 @@
1
+ .cursor
2
+ .vscode
3
+ .opscode
4
+ .opscloud
5
+ .venv
6
+ .taskmaster/
7
+ .claude/
8
+ aws_orchestrator_agent/examples/
9
+ # Logs
10
+ logs
11
+ *.log
12
+ npm-debug.log*
13
+ yarn-debug.log*
14
+ yarn-error.log*
15
+ dev-debug.log
16
+ # Dependency directories
17
+ node_modules/
18
+ reference/
19
+ perplexity/
20
+ .taskmaster/
21
+ # Environment variables
22
+ .env
23
+ # Editor directories and files
24
+ .idea
25
+ *.suo
26
+ *.ntvs*
27
+ *.njsproj
28
+ *.sln
29
+ *.sw?
30
+ # OS specific
31
+ .DS_Store
32
+
33
+ CLAUDE.md
34
+
35
+ # Task files
36
+ # tasks.json
37
+ # tasks/
38
+
39
+ ### Python ###
40
+ # Byte-compiled / optimized / DLL files
41
+ __pycache__/
42
+ *.py[cod]
43
+ *$py.class
44
+
45
+ ### Pythod build ###
46
+ build/
47
+ dist/
48
+ *.egg-info/
49
+
50
+ ### Python tests ###
51
+ .pytest_cache/
52
+ .hypothesis/
53
+ .mypy_cache/
54
+ .ruff_cache/
@@ -0,0 +1 @@
1
+ 3.12