talkops-opscloud 0.3.0b4__tar.gz → 0.3.0b6__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 (401) hide show
  1. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/.github/workflows/release-pypi.yml +6 -128
  2. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/PKG-INFO +11 -8
  3. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/README.md +4 -7
  4. talkops_opscloud-0.3.0b6/assets/opscloud-banner.gif +0 -0
  5. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/pyproject.toml +7 -1
  6. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/cli/interactive.py +16 -0
  7. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/cli/server_manager.py +12 -3
  8. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/pool.py +38 -3
  9. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/runtime.py +6 -9
  10. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/manifest.py +12 -0
  11. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/paths.py +22 -0
  12. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/settings.py +137 -16
  13. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/jev_model_router.py +4 -2
  14. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/model/config.py +48 -8
  15. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/model/factory.py +146 -11
  16. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/model/pool.py +66 -27
  17. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/model/reasoning.py +16 -20
  18. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/server/server.py +182 -27
  19. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/server/server_graph.py +62 -24
  20. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/state/session.py +11 -0
  21. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/app.py +134 -15
  22. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/autocomplete.py +41 -2
  23. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/chat_input.py +210 -42
  24. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/cloud_selector.py +277 -51
  25. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/model_selector.py +301 -142
  26. talkops_opscloud-0.3.0b6/src/opscloud/ui/widgets/pool_selector.py +546 -0
  27. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/conftest.py +28 -2
  28. talkops_opscloud-0.3.0b6/tests/unit_tests/test_chat_input_responsiveness.py +143 -0
  29. talkops_opscloud-0.3.0b6/tests/unit_tests/test_checkpointer.py +115 -0
  30. talkops_opscloud-0.3.0b6/tests/unit_tests/test_claude_opus_reasoning.py +201 -0
  31. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_cloud_command.py +87 -0
  32. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_commands.py +144 -0
  33. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_config.py +247 -1
  34. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_jev_model_router.py +76 -0
  35. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_model_providers.py +83 -6
  36. talkops_opscloud-0.3.0b6/tests/unit_tests/test_pool_persistence.py +173 -0
  37. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_reload_restart.py +82 -0
  38. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_server.py +38 -0
  39. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/uv.lock +517 -4
  40. talkops_opscloud-0.3.0b4/src/opscloud/ui/widgets/pool_selector.py +0 -376
  41. talkops_opscloud-0.3.0b4/tests/unit_tests/test_checkpointer.py +0 -87
  42. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/.dockerignore +0 -0
  43. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/.env.example +0 -0
  44. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/.github/workflows/ci.yml +0 -0
  45. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/.gitignore +0 -0
  46. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/.python-version +0 -0
  47. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/LICENSE +0 -0
  48. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/Configuration.md +0 -0
  49. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/approval-mode.md +0 -0
  50. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/cli-reference.md +0 -0
  51. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/config.toml.md +0 -0
  52. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/credentials.md +0 -0
  53. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/goal-and-rubrics.md +0 -0
  54. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/hooks.md +0 -0
  55. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/mcp-tools.md +0 -0
  56. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/memory-and-skills.md +0 -0
  57. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/model-providers.md +0 -0
  58. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/overview.md +0 -0
  59. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/plugins.md +0 -0
  60. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/quickstart.md +0 -0
  61. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/remote-sandboxes.md +0 -0
  62. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/docs/opscloud-docs/subagents.md +0 -0
  63. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/scripts/install.sh +0 -0
  64. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/__init__.py +0 -0
  65. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/__main__.py +0 -0
  66. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/_constants.py +0 -0
  67. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/_debug.py +0 -0
  68. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/_debug_buffer.py +0 -0
  69. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/_textual_patches.py +0 -0
  70. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/_version.py +0 -0
  71. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/agent/__init__.py +0 -0
  72. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/agent/config.py +0 -0
  73. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/agent/factory.py +0 -0
  74. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/approval_mode.py +0 -0
  75. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/backend/__init__.py +0 -0
  76. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/backend/composite.py +0 -0
  77. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/backend/local.py +0 -0
  78. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/backend/registry.py +0 -0
  79. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/backend/sandbox_config.py +0 -0
  80. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/backend/sandbox_factory.py +0 -0
  81. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/built_in_skills/remember/SKILL.md +0 -0
  82. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/built_in_skills/skill-creator/SKILL.md +0 -0
  83. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  84. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  85. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/cli/__init__.py +0 -0
  86. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/cli/commands/__init__.py +0 -0
  87. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/cli/commands/auth.py +0 -0
  88. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/cli/commands/doctor.py +0 -0
  89. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/cli/commands/mcp.py +0 -0
  90. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/cli/commands/threads.py +0 -0
  91. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/cli/main.py +0 -0
  92. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/cli/non_interactive.py +0 -0
  93. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/__init__.py +0 -0
  94. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/_base.py +0 -0
  95. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/_guards.py +0 -0
  96. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/_router.py +0 -0
  97. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/_types.py +0 -0
  98. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/__init__.py +0 -0
  99. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/auth.py +0 -0
  100. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/bug.py +0 -0
  101. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/clear.py +0 -0
  102. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/cloud.py +0 -0
  103. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/compact.py +0 -0
  104. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/config_cmd.py +0 -0
  105. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/context.py +0 -0
  106. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/cost.py +0 -0
  107. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/doctor.py +0 -0
  108. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/effort.py +0 -0
  109. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/exit_cmd.py +0 -0
  110. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/fast.py +0 -0
  111. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/help_cmd.py +0 -0
  112. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/mcp.py +0 -0
  113. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/model.py +0 -0
  114. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/permissions.py +0 -0
  115. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/plugins.py +0 -0
  116. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/resume.py +0 -0
  117. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/core/skills.py +0 -0
  118. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/__init__.py +0 -0
  119. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/agents.py +0 -0
  120. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/btw.py +0 -0
  121. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/copy.py +0 -0
  122. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/goal.py +0 -0
  123. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/loop.py +0 -0
  124. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/memory.py +0 -0
  125. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/review.py +0 -0
  126. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/rubric.py +0 -0
  127. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/skill_creator.py +0 -0
  128. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/skill_invoke.py +0 -0
  129. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/tasks.py +0 -0
  130. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/trace.py +0 -0
  131. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/ui_toggles.py +0 -0
  132. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/power/version.py +0 -0
  133. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/commands/registry.py +0 -0
  134. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/__init__.py +0 -0
  135. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/adapters/__init__.py +0 -0
  136. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/adapters/postgres.py +0 -0
  137. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/adapters/sqlite.py +0 -0
  138. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/aws.py +0 -0
  139. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/cloud_profiles.py +0 -0
  140. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/env_vars.py +0 -0
  141. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/langsmith.py +0 -0
  142. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/metadata.py +0 -0
  143. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/plugins.py +0 -0
  144. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/store.py +0 -0
  145. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/store_factory.py +0 -0
  146. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/config/toml_config.py +0 -0
  147. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/editor.py +0 -0
  148. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/exceptions.py +0 -0
  149. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/file_ops.py +0 -0
  150. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/hooks/__init__.py +0 -0
  151. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/hooks/env.py +0 -0
  152. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/hooks/interrupt.py +0 -0
  153. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/hooks/models/__init__.py +0 -0
  154. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/hooks/models/adapters.py +0 -0
  155. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/hooks/models/config.py +0 -0
  156. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/hooks/models/domain.py +0 -0
  157. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/hooks/models/transport.py +0 -0
  158. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/hooks/tools.py +0 -0
  159. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/input.py +0 -0
  160. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/integrations/__init__.py +0 -0
  161. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/integrations/base.py +0 -0
  162. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/integrations/content_filter.py +0 -0
  163. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/integrations/event_bus.py +0 -0
  164. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/integrations/hooks.py +0 -0
  165. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/integrations/identity.py +0 -0
  166. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/integrations/notifications.py +0 -0
  167. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/integrations/stream_bridge.py +0 -0
  168. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/integrations/thread_store.py +0 -0
  169. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/json_types.py +0 -0
  170. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/mcp/__init__.py +0 -0
  171. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/mcp/config.py +0 -0
  172. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/mcp/discovery.py +0 -0
  173. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/mcp/mcp_info.py +0 -0
  174. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/mcp/middleware.py +0 -0
  175. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/mcp/preload.py +0 -0
  176. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/mcp/raw_config.py +0 -0
  177. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/mcp/semantic_profiler.py +0 -0
  178. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/mcp/session_manager.py +0 -0
  179. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/mcp/trust.py +0 -0
  180. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/memory/__init__.py +0 -0
  181. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/memory/branch.py +0 -0
  182. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/memory/guard.py +0 -0
  183. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/memory/onboarding.py +0 -0
  184. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/memory/registry.py +0 -0
  185. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/memory/store.py +0 -0
  186. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/__init__.py +0 -0
  187. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/_repository_bounds.py +0 -0
  188. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/ask_user.py +0 -0
  189. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/auto_mode.py +0 -0
  190. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/auto_mode_hitl.py +0 -0
  191. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/compaction.py +0 -0
  192. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/configurable_model.py +0 -0
  193. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/cost_tracking.py +0 -0
  194. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/glm_stall_recovery.py +0 -0
  195. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/goal_criteria.py +0 -0
  196. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/goal_state_notice.py +0 -0
  197. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/goal_tools.py +0 -0
  198. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/headless_mcp_guard.py +0 -0
  199. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/local_context.py +0 -0
  200. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/mcp_context.py +0 -0
  201. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/mcp_middleware.py +0 -0
  202. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/memory_guard.py +0 -0
  203. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/model_retry.py +0 -0
  204. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/registry.py +0 -0
  205. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/reliable_rubric.py +0 -0
  206. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/resume_state.py +0 -0
  207. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/server_hooks.py +0 -0
  208. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/shell_allow_list.py +0 -0
  209. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/skills.py +0 -0
  210. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/subagent_artifacts.py +0 -0
  211. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/subagent_telemetry.py +0 -0
  212. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/subagents.py +0 -0
  213. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/tool_filter.py +0 -0
  214. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/middleware/unified_system_message.py +0 -0
  215. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/model/__init__.py +0 -0
  216. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/offload.py +0 -0
  217. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/output.py +0 -0
  218. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/__init__.py +0 -0
  219. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/_json.py +0 -0
  220. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/adapters/__init__.py +0 -0
  221. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/adapters/agents.py +0 -0
  222. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/adapters/commands.py +0 -0
  223. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/adapters/mcp.py +0 -0
  224. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/adapters/skills.py +0 -0
  225. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/commands_cli.py +0 -0
  226. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/discovery.py +0 -0
  227. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/manifest.py +0 -0
  228. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/marketplace.py +0 -0
  229. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/models.py +0 -0
  230. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/project_plugins.py +0 -0
  231. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/protocol.py +0 -0
  232. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/store.py +0 -0
  233. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/plugins/substitution.py +0 -0
  234. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/project_utils.py +0 -0
  235. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/prompts/__init__.py +0 -0
  236. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/prompts/system.py +0 -0
  237. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/prompts/templates/system_prompt.md +0 -0
  238. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/prompts/types.py +0 -0
  239. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/rubrics/__init__.py +0 -0
  240. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/rubrics/evaluator.py +0 -0
  241. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/rubrics/evidence_extractor.py +0 -0
  242. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/rubrics/generator.py +0 -0
  243. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/rubrics/jev_compiler.py +0 -0
  244. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/rubrics/jev_grader.py +0 -0
  245. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/rubrics/middleware.py +0 -0
  246. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/schema/__init__.py +0 -0
  247. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/schema/interrupts.py +0 -0
  248. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/security/__init__.py +0 -0
  249. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/security/approval_mode.py +0 -0
  250. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/security/approval_mode_source.py +0 -0
  251. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/security/cli_ast_evaluator.py +0 -0
  252. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/security/jev_classifier.py +0 -0
  253. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/security/shell_safety.py +0 -0
  254. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/security/unicode_security.py +0 -0
  255. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/security/url_validation.py +0 -0
  256. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/server/__init__.py +0 -0
  257. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/server/_server_config.py +0 -0
  258. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/skills/__init__.py +0 -0
  259. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/skills/commands.py +0 -0
  260. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/skills/invocation.py +0 -0
  261. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/skills/load.py +0 -0
  262. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/skills/loader.py +0 -0
  263. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/skills/merge.py +0 -0
  264. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/skills/registry.py +0 -0
  265. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/skills/sources.py +0 -0
  266. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/skills/trust.py +0 -0
  267. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/state/__init__.py +0 -0
  268. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/state/base.py +0 -0
  269. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/state/cloud_context.py +0 -0
  270. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/state/goal_channels.py +0 -0
  271. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/state/goal_state_limits.py +0 -0
  272. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/state/resume_state.py +0 -0
  273. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/state/service_context.py +0 -0
  274. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/state/state_migration.py +0 -0
  275. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/subagents/__init__.py +0 -0
  276. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/subagents/loader.py +0 -0
  277. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/subagents/subagents_parser.py +0 -0
  278. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/subagents/types.py +0 -0
  279. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/tools/__init__.py +0 -0
  280. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/tools/catalog.py +0 -0
  281. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/tools/display.py +0 -0
  282. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/tools/fetch_url.py +0 -0
  283. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/tools/goal_tools.py +0 -0
  284. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/tools/registry.py +0 -0
  285. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/tools/thread.py +0 -0
  286. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/tools/web_search.py +0 -0
  287. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/__init__.py +0 -0
  288. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/app.tcss +0 -0
  289. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/clipboard.py +0 -0
  290. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/command_registry.py +0 -0
  291. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/message_store.py +0 -0
  292. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/permission_store.py +0 -0
  293. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/preferences.py +0 -0
  294. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/prompt_manager.py +0 -0
  295. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/remote_client.py +0 -0
  296. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/textual_adapter.py +0 -0
  297. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/theme.py +0 -0
  298. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/ui_help.py +0 -0
  299. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/__init__.py +0 -0
  300. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/_ask_user_types.py +0 -0
  301. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/_copy_spans.py +0 -0
  302. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/_inline_prompt.py +0 -0
  303. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/_js_eval_display.py +0 -0
  304. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/_links.py +0 -0
  305. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/_tool_stream.py +0 -0
  306. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/agent_selector.py +0 -0
  307. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/approval.py +0 -0
  308. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/ask_user.py +0 -0
  309. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/auth.py +0 -0
  310. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/auth_manager.py +0 -0
  311. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/auto_mode_notice.py +0 -0
  312. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/config_manager.py +0 -0
  313. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/debug_console.py +0 -0
  314. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/devops_renderers.py +0 -0
  315. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/diff.py +0 -0
  316. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/effort_selector.py +0 -0
  317. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/goal_review.py +0 -0
  318. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/goal_status.py +0 -0
  319. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/infra_panel.py +0 -0
  320. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/install_confirm.py +0 -0
  321. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/loading.py +0 -0
  322. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/mcp_viewer.py +0 -0
  323. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/messages.py +0 -0
  324. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/notification_center.py +0 -0
  325. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/notification_settings.py +0 -0
  326. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/operation_card.py +0 -0
  327. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/permissions_manager.py +0 -0
  328. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/plugin_manager.py +0 -0
  329. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/preamble.py +0 -0
  330. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/skills_viewer.py +0 -0
  331. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/status.py +0 -0
  332. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/subagent_panel.py +0 -0
  333. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/theme_selector.py +0 -0
  334. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/thread_selector.py +0 -0
  335. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/toast.py +0 -0
  336. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/tool_display.py +0 -0
  337. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/tool_renderers.py +0 -0
  338. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/tool_widgets.py +0 -0
  339. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/welcome.py +0 -0
  340. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/ui/widgets/welcome_popup.py +0 -0
  341. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/utils/__init__.py +0 -0
  342. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/utils/cost_estimation.py +0 -0
  343. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/utils/git.py +0 -0
  344. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/utils/logger.py +0 -0
  345. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/utils/session_stats.py +0 -0
  346. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/src/opscloud/utils/startup_error.py +0 -0
  347. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/__init__.py +0 -0
  348. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/evals/__init__.py +0 -0
  349. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/evals/datasets/aws_cloud_ops.yaml +0 -0
  350. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/evals/evaluators/__init__.py +0 -0
  351. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/evals/evaluators/output_evaluator.py +0 -0
  352. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/evals/evaluators/trajectory_evaluator.py +0 -0
  353. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/evals/runners/test_eval_runner.py +0 -0
  354. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/integration_tests/test_agent_lifecycle.py +0 -0
  355. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/integration_tests/test_server_lifecycle.py +0 -0
  356. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_agent_factory.py +0 -0
  357. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_approval_widget.py +0 -0
  358. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_ask_user.py +0 -0
  359. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_ast_evaluator.py +0 -0
  360. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_backend.py +0 -0
  361. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_cli_enhancements.py +0 -0
  362. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_cli_rubric.py +0 -0
  363. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_cost_tracking.py +0 -0
  364. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_default_marketplace.py +0 -0
  365. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_goal_criteria.py +0 -0
  366. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_goal_state_limits.py +0 -0
  367. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_goal_state_notice.py +0 -0
  368. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_grader_tools.py +0 -0
  369. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_hitl.py +0 -0
  370. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_integrations_and_hooks.py +0 -0
  371. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_interrupt_schemas.py +0 -0
  372. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_jev_rubrics.py +0 -0
  373. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_local_context.py +0 -0
  374. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_logging.py +0 -0
  375. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_mcp.py +0 -0
  376. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_mcp_middleware.py +0 -0
  377. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_mcp_viewer_and_command.py +0 -0
  378. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_memory.py +0 -0
  379. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_memory_enhancements.py +0 -0
  380. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_middleware_stack.py +0 -0
  381. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_model_retry.py +0 -0
  382. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_plugin_agent_skill_mcp_scoping.py +0 -0
  383. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_plugin_manager_search.py +0 -0
  384. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_plugins.py +0 -0
  385. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_project_plugins.py +0 -0
  386. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_prompts_and_schema.py +0 -0
  387. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_reliable_rubric.py +0 -0
  388. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_resume_state.py +0 -0
  389. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_resumed_thread_latency_fix.py +0 -0
  390. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_rubrics.py +0 -0
  391. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_security.py +0 -0
  392. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_server_hooks.py +0 -0
  393. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_skill_creator.py +0 -0
  394. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_skills.py +0 -0
  395. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_state.py +0 -0
  396. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_subagents.py +0 -0
  397. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_tool_filter.py +0 -0
  398. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_tools.py +0 -0
  399. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_tui_app.py +0 -0
  400. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/tests/unit_tests/test_utils.py +0 -0
  401. {talkops_opscloud-0.3.0b4 → talkops_opscloud-0.3.0b6}/uv-requirements.txt +0 -0
@@ -1,11 +1,11 @@
1
1
  # ─────────────────────────────────────────────────────────────────────────────
2
- # OpsCloud — PyPI & GitHub Release Pipeline
2
+ # OpsCloud — PyPI Release Pipeline
3
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
4
+ # Trigger: Push a tag like `v0.3.0b5` or manual workflow_dispatch
5
+ # Result: Test ➔ Build ➔ Asset Verification ➔ Publish to PyPI
6
6
  # ─────────────────────────────────────────────────────────────────────────────
7
7
 
8
- name: "📦 Release to PyPI & GitHub"
8
+ name: "📦 Release to PyPI"
9
9
 
10
10
  on:
11
11
  push:
@@ -14,7 +14,7 @@ on:
14
14
  workflow_dispatch:
15
15
  inputs:
16
16
  tag_name:
17
- description: "Release tag (e.g., v0.1.0)"
17
+ description: "Release tag (e.g., v0.3.0b5)"
18
18
  required: true
19
19
  type: string
20
20
 
@@ -23,7 +23,7 @@ concurrency:
23
23
  cancel-in-progress: true
24
24
 
25
25
  permissions:
26
- contents: write # GitHub Releases
26
+ contents: read
27
27
  id-token: write # PyPI Trusted Publishing (OIDC)
28
28
 
29
29
  jobs:
@@ -187,125 +187,3 @@ jobs:
187
187
  verbose: true
188
188
  print-hash: true
189
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: talkops-opscloud
3
- Version: 0.3.0b4
3
+ Version: 0.3.0b6
4
4
  Summary: Extensible Terminal Multi-Agent Framework for Cloud Operations & DevOps Coding
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -17,6 +17,7 @@ Requires-Dist: genai-prices>=0.1.0
17
17
  Requires-Dist: httpx>=0.28.1
18
18
  Requires-Dist: langchain-anthropic>=1.5.3
19
19
  Requires-Dist: langchain-aws>=0.2.14
20
+ Requires-Dist: langchain-baseten>=0.2.4
20
21
  Requires-Dist: langchain-cohere>=0.6.0
21
22
  Requires-Dist: langchain-core>=1.5.3
22
23
  Requires-Dist: langchain-deepseek>=1.1.1
@@ -25,7 +26,10 @@ Requires-Dist: langchain-google-genai>=4.3.2
25
26
  Requires-Dist: langchain-google-vertexai>=3.2.4
26
27
  Requires-Dist: langchain-groq>=1.1.3
27
28
  Requires-Dist: langchain-huggingface>=1.2.2
29
+ Requires-Dist: langchain-ibm>=1.1.2
30
+ Requires-Dist: langchain-litellm>=0.11.0
28
31
  Requires-Dist: langchain-mcp-adapters>=0.3.0
32
+ Requires-Dist: langchain-meta>=0.5.0
29
33
  Requires-Dist: langchain-mistralai>=1.1.6
30
34
  Requires-Dist: langchain-nvidia-ai-endpoints>=1.4.3
31
35
  Requires-Dist: langchain-ollama>=1.1.0
@@ -41,6 +45,7 @@ Requires-Dist: langgraph-cli[inmem]>=0.4.31
41
45
  Requires-Dist: langgraph-sdk>=0.4.2
42
46
  Requires-Dist: langgraph>=1.2.10
43
47
  Requires-Dist: langsmith>=0.10.6
48
+ Requires-Dist: litellm>=1.103.3
44
49
  Requires-Dist: loguru>=0.7.3
45
50
  Requires-Dist: markdown-it-py>=4.2.0
46
51
  Requires-Dist: markdownify>=1.2.3
@@ -60,6 +65,7 @@ Requires-Dist: tavily-python>=0.7.26
60
65
  Requires-Dist: textual>=8.2.8
61
66
  Requires-Dist: tomli-w>=1.2.0
62
67
  Requires-Dist: tomli>=1.1.0
68
+ Requires-Dist: transformers>=5.19.0
63
69
  Requires-Dist: typing-extensions>=4.16.0
64
70
  Requires-Dist: urllib3>=2.7.0
65
71
  Requires-Dist: uuid-utils>=0.17.0
@@ -82,13 +88,10 @@ Description-Content-Type: text/markdown
82
88
 
83
89
  <div align="center">
84
90
 
85
- ```text
86
- ___ ____ ____ ____ _ ___ _ _ ____
87
- / _ \| _ \/ ___| / ___| | / _ \| | | | _ \
88
- | | | | |_) \___ \| | | | | | | | | | | | | |
89
- | |_| | __/ ___) | |___| |__| |_| | |_| | |_| |
90
- \___/|_| |____/ \____|_____\___/ \___/|____/
91
- ```
91
+ <a href="https://github.com/talkops-ai/opscloud">
92
+ <img src="assets/opscloud-banner.gif" alt="OpsCloud" width="800" />
93
+ </a>
94
+
92
95
  ### Extensible Terminal Multi-Agent Framework for Cloud Operations & DevOps Coding
93
96
 
94
97
  [![Python 3.12+](https://img.shields.io/badge/python-3.12+-3776AB.svg?style=flat-square&logo=python&logoColor=white)](https://www.python.org/)
@@ -1,12 +1,9 @@
1
1
  <div align="center">
2
2
 
3
- ```text
4
- ___ ____ ____ ____ _ ___ _ _ ____
5
- / _ \| _ \/ ___| / ___| | / _ \| | | | _ \
6
- | | | | |_) \___ \| | | | | | | | | | | | | |
7
- | |_| | __/ ___) | |___| |__| |_| | |_| | |_| |
8
- \___/|_| |____/ \____|_____\___/ \___/|____/
9
- ```
3
+ <a href="https://github.com/talkops-ai/opscloud">
4
+ <img src="assets/opscloud-banner.gif" alt="OpsCloud" width="800" />
5
+ </a>
6
+
10
7
  ### Extensible Terminal Multi-Agent Framework for Cloud Operations & DevOps Coding
11
8
 
12
9
  [![Python 3.12+](https://img.shields.io/badge/python-3.12+-3776AB.svg?style=flat-square&logo=python&logoColor=white)](https://www.python.org/)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "talkops-opscloud"
3
- version = "0.3.0b4"
3
+ version = "0.3.0b6"
4
4
  description = "Extensible Terminal Multi-Agent Framework for Cloud Operations & DevOps Coding"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -64,6 +64,12 @@ dependencies = [
64
64
  "langchain-perplexity>=1.4.1",
65
65
  "langchain-nvidia-ai-endpoints>=1.4.3",
66
66
  "langchain-huggingface>=1.2.2",
67
+ "langchain-baseten>=0.2.4",
68
+ "langchain-ibm>=1.1.2",
69
+ "transformers>=5.19.0",
70
+ "langchain-litellm>=0.11.0",
71
+ "langchain-meta>=0.5.0",
72
+ "litellm>=1.103.3",
67
73
  ]
68
74
 
69
75
  [project.optional-dependencies]
@@ -120,6 +120,21 @@ def run_interactive(
120
120
  "trust_project_mcp": trust_project_mcp,
121
121
  }
122
122
 
123
+ server_kwargs: dict[str, Any] = {
124
+ "assistant_id": "opscloud",
125
+ "model_name": resolved_model,
126
+ "interactive": True,
127
+ "auto_approve": (approval_mode == ApprovalMode.AUTO or approval_mode == "auto"),
128
+ "cwd": resolved_cwd,
129
+ "read_only": read_only,
130
+ "aws_profile": aws_profile,
131
+ "aws_region": aws_region,
132
+ "shell_allow_list": tuple(shell_allow_list) if shell_allow_list else None,
133
+ "mcp_config_path": mcp_config_path,
134
+ "no_mcp": no_mcp,
135
+ "trust_project_mcp": trust_project_mcp,
136
+ }
137
+
123
138
  try:
124
139
  app = OpsCloudApp(
125
140
  server_url=url,
@@ -129,6 +144,7 @@ def run_interactive(
129
144
  model=resolved_model,
130
145
  approval_mode=approval_mode,
131
146
  defer_server_start=defer_server_start,
147
+ server_kwargs=server_kwargs,
132
148
  goal=goal,
133
149
  cwd=resolved_cwd,
134
150
  mcp_preload_kwargs=mcp_preload_kwargs,
@@ -36,7 +36,7 @@ async def start_server_and_get_agent(
36
36
  port: int = 0,
37
37
  **kwargs: Any,
38
38
  ) -> tuple[RemoteAgent, ServerProcess]:
39
- """Start a LangGraph dev server and return a RemoteAgent client."""
39
+ """Start a LangGraph dev server asynchronously and return a RemoteAgent client."""
40
40
  from opscloud.project_utils import ProjectContext
41
41
 
42
42
  project_context = (
@@ -44,15 +44,24 @@ async def start_server_and_get_agent(
44
44
  if cwd is not None
45
45
  else ProjectContext.from_user_cwd(Path.cwd())
46
46
  )
47
+ resolved_model = model_name or kwargs.pop("model", None)
48
+ if not resolved_model:
49
+ try:
50
+ from opscloud.model.factory import _get_default_model_spec
51
+
52
+ resolved_model = _get_default_model_spec()
53
+ except Exception:
54
+ resolved_model = None
55
+
47
56
  config = ServerConfig.from_cli_args(
48
57
  project_context=project_context,
49
58
  assistant_id=assistant_id,
50
- model=model_name or "anthropic:claude-3-5-sonnet-latest",
59
+ model=resolved_model,
51
60
  interactive=interactive,
52
61
  approval_mode="never" if auto_approve else "auto",
53
62
  **kwargs,
54
63
  )
55
64
  server = ServerProcess(config, host=host, port=port)
56
- url = server.start()
65
+ url = await server.astart()
57
66
  agent = RemoteAgent(url=url, graph_name="agent")
58
67
  return agent, server
@@ -41,6 +41,9 @@ class PoolHandler(BaseCommandHandler):
41
41
  # 1. Clear pool configuration
42
42
  if args in ("--clear", "clear"):
43
43
  clear_agent_pool()
44
+ pool_mgr = get_model_pool_manager()
45
+ with pool_mgr._lock:
46
+ pool_mgr._instances.clear()
44
47
  return CommandResult(
45
48
  success=True,
46
49
  message="**Agent Model Pool Cleared:** Reverted to automatic dynamic discovery from provider capabilities.",
@@ -53,7 +56,12 @@ class PoolHandler(BaseCommandHandler):
53
56
  tiers = pool_mgr.discover_tiers()
54
57
 
55
58
  is_custom = user_pool is not None
56
- source_label = "Custom (`config.toml [agent_pool]`)" if is_custom else "Automatic Dynamic Discovery"
59
+ if is_custom:
60
+ provs = {t[0].split(":", 1)[0] for t in tiers.values() if ":" in t[0]}
61
+ multi_badge = " [Multi-Provider]" if len(provs) > 1 else f" [{next(iter(provs))}]"
62
+ source_label = f"Custom (`config.toml [agent_pool]`){multi_badge}"
63
+ else:
64
+ source_label = "Automatic Dynamic Discovery"
57
65
 
58
66
  msg = (
59
67
  f"**Agent Model Pool Status** ({source_label}):\n"
@@ -78,10 +86,37 @@ class PoolHandler(BaseCommandHandler):
78
86
  if updates:
79
87
  current = load_agent_pool() or {}
80
88
  merged = {**current, **updates}
81
- save_agent_pool(merged)
89
+
90
+ from opscloud.model.config import detect_provider, apply_stored_credentials
91
+ provs = set()
92
+ for v in merged.values():
93
+ if ":" in v:
94
+ provs.add(v.split(":", 1)[0])
95
+ else:
96
+ inferred = detect_provider(v)
97
+ if inferred:
98
+ provs.add(inferred)
99
+
100
+ provider_to_save = next(iter(provs)) if len(provs) == 1 else ("multi" if len(provs) > 1 else None)
101
+ save_agent_pool(merged, provider=provider_to_save)
102
+
103
+ pool_mgr = get_model_pool_manager()
104
+ with pool_mgr._lock:
105
+ pool_mgr._instances.clear()
106
+
107
+ for p in provs:
108
+ apply_stored_credentials(p)
109
+
110
+ from opscloud.model.config import has_provider_credentials
111
+ warnings = []
112
+ for p in provs:
113
+ if has_provider_credentials(p) is False:
114
+ warnings.append(f"⚠️ Notice: Credentials for provider '{p}' are not configured.")
115
+ warn_msg = ("\n\n" + "\n".join(warnings)) if warnings else ""
116
+
82
117
  return CommandResult(
83
118
  success=True,
84
- message=f"**Agent Model Pool Updated:** `{merged}` saved to `config.toml [agent_pool]`.",
119
+ message=f"**Agent Model Pool Updated:** `{merged}` saved to `config.toml [agent_pool]`.{warn_msg}",
85
120
  )
86
121
  return CommandResult(
87
122
  success=False,
@@ -269,16 +269,13 @@ class AutoUpdateHandler(BaseCommandHandler):
269
269
 
270
270
 
271
271
  def _reload_dotenv() -> None:
272
- """Re-read .env files into os.environ."""
272
+ """Re-read .env files into os.environ using unified settings loader."""
273
273
  try:
274
- from dotenv import load_dotenv
275
-
276
- load_dotenv(override=True)
277
- project_env = Path.cwd() / ".env"
278
- if project_env.is_file():
279
- load_dotenv(project_env, override=True)
280
- except ImportError:
281
- pass
274
+ from opscloud.config.settings import _load_dotenv
275
+
276
+ _load_dotenv(refresh_loaded=True)
277
+ except Exception as exc:
278
+ logger.debug("Failed to reload dotenv: %s", exc)
282
279
 
283
280
 
284
281
  def _check_pypi_version(*, prerelease: bool = False) -> str | None:
@@ -505,6 +505,18 @@ _STATIC_OPTIONS: tuple[ConfigOption, ...] = (
505
505
  settings_field="model_context_limit",
506
506
  default=128_000,
507
507
  ),
508
+ # ── Startup & Environment ─────────────────────────────
509
+ ConfigOption(
510
+ key="startup.read_project_dotenv",
511
+ group="Startup",
512
+ summary="Read nearest project .env file during directory walk-up",
513
+ kind=OptionKind.BOOL,
514
+ db_key="READ_PROJECT_DOTENV",
515
+ env_var="READ_PROJECT_DOTENV",
516
+ toml_keys=("startup", "read_project_dotenv"),
517
+ settings_field="read_project_dotenv",
518
+ default=True,
519
+ ),
508
520
  # ── Security & Approvals ──────────────────────────────
509
521
  ConfigOption(
510
522
  key="security.approval_mode",
@@ -166,6 +166,27 @@ DOTENV_DENIED_ENV_KEYS: Final[frozenset[str]] = frozenset(
166
166
  }
167
167
  )
168
168
 
169
+ PROJECT_DOTENV_DENIED_ENV_KEYS: Final[frozenset[str]] = frozenset(
170
+ {
171
+ "OPSCLOUD_APPROVAL_MODE",
172
+ "APPROVAL_MODE",
173
+ "OPSCLOUD_SHELL_ALLOW_LIST",
174
+ "SHELL_ALLOW_LIST",
175
+ "OPSCLOUD_READ_ONLY",
176
+ "READ_ONLY",
177
+ "OPSCLOUD_CONFIG_DIR",
178
+ "CONFIG_DIR",
179
+ "OPSCLOUD_READ_PROJECT_DOTENV",
180
+ "READ_PROJECT_DOTENV",
181
+ "OPSCLOUD_SERVER_DB_PATH",
182
+ "OPSCODE_APPROVAL_MODE",
183
+ "OPSCODE_SHELL_ALLOW_LIST",
184
+ "OPSCODE_READ_ONLY",
185
+ "OPSCODE_CONFIG_DIR",
186
+ "TERM_PROGRAM",
187
+ }
188
+ )
189
+
169
190
  RELOADABLE_FIELDS: Final[frozenset[str]] = frozenset(
170
191
  {
171
192
  "model_name",
@@ -176,6 +197,7 @@ RELOADABLE_FIELDS: Final[frozenset[str]] = frozenset(
176
197
  "aws_profile",
177
198
  "shell_allow_list",
178
199
  "theme",
200
+ "read_project_dotenv",
179
201
  }
180
202
  )
181
203