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.
- talkops_opscloud-0.3.0b1/.dockerignore +87 -0
- talkops_opscloud-0.3.0b1/.env.example +0 -0
- talkops_opscloud-0.3.0b1/.github/workflows/ci.yml +157 -0
- talkops_opscloud-0.3.0b1/.github/workflows/release-pypi.yml +311 -0
- talkops_opscloud-0.3.0b1/.gitignore +54 -0
- talkops_opscloud-0.3.0b1/.python-version +1 -0
- talkops_opscloud-0.3.0b1/LICENSE +175 -0
- talkops_opscloud-0.3.0b1/PKG-INFO +449 -0
- talkops_opscloud-0.3.0b1/README.md +367 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/Configuration.md +199 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/approval-mode.md +145 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/cli-reference.md +215 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/config.toml.md +243 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/credentials.md +124 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/goal-and-rubrics.md +179 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/hooks.md +152 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/mcp-tools.md +122 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/memory-and-skills.md +154 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/model-providers.md +118 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/overview.md +154 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/plugins.md +138 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/quickstart.md +198 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/remote-sandboxes.md +114 -0
- talkops_opscloud-0.3.0b1/docs/opscloud-docs/subagents.md +124 -0
- talkops_opscloud-0.3.0b1/pyproject.toml +128 -0
- talkops_opscloud-0.3.0b1/scripts/install.sh +922 -0
- talkops_opscloud-0.3.0b1/src/opscloud/__init__.py +5 -0
- talkops_opscloud-0.3.0b1/src/opscloud/__main__.py +6 -0
- talkops_opscloud-0.3.0b1/src/opscloud/_constants.py +53 -0
- talkops_opscloud-0.3.0b1/src/opscloud/_debug.py +145 -0
- talkops_opscloud-0.3.0b1/src/opscloud/_debug_buffer.py +250 -0
- talkops_opscloud-0.3.0b1/src/opscloud/_textual_patches.py +367 -0
- talkops_opscloud-0.3.0b1/src/opscloud/_version.py +15 -0
- talkops_opscloud-0.3.0b1/src/opscloud/agent/__init__.py +27 -0
- talkops_opscloud-0.3.0b1/src/opscloud/agent/config.py +168 -0
- talkops_opscloud-0.3.0b1/src/opscloud/agent/factory.py +1103 -0
- talkops_opscloud-0.3.0b1/src/opscloud/approval_mode.py +44 -0
- talkops_opscloud-0.3.0b1/src/opscloud/backend/__init__.py +49 -0
- talkops_opscloud-0.3.0b1/src/opscloud/backend/composite.py +89 -0
- talkops_opscloud-0.3.0b1/src/opscloud/backend/local.py +183 -0
- talkops_opscloud-0.3.0b1/src/opscloud/backend/registry.py +79 -0
- talkops_opscloud-0.3.0b1/src/opscloud/backend/sandbox_config.py +107 -0
- talkops_opscloud-0.3.0b1/src/opscloud/backend/sandbox_factory.py +432 -0
- talkops_opscloud-0.3.0b1/src/opscloud/built_in_skills/remember/SKILL.md +124 -0
- talkops_opscloud-0.3.0b1/src/opscloud/built_in_skills/skill-creator/SKILL.md +348 -0
- talkops_opscloud-0.3.0b1/src/opscloud/built_in_skills/skill-creator/scripts/init_skill.py +371 -0
- talkops_opscloud-0.3.0b1/src/opscloud/built_in_skills/skill-creator/scripts/quick_validate.py +165 -0
- talkops_opscloud-0.3.0b1/src/opscloud/cli/__init__.py +1 -0
- talkops_opscloud-0.3.0b1/src/opscloud/cli/commands/__init__.py +15 -0
- talkops_opscloud-0.3.0b1/src/opscloud/cli/commands/auth.py +45 -0
- talkops_opscloud-0.3.0b1/src/opscloud/cli/commands/doctor.py +100 -0
- talkops_opscloud-0.3.0b1/src/opscloud/cli/commands/mcp.py +137 -0
- talkops_opscloud-0.3.0b1/src/opscloud/cli/commands/threads.py +51 -0
- talkops_opscloud-0.3.0b1/src/opscloud/cli/interactive.py +154 -0
- talkops_opscloud-0.3.0b1/src/opscloud/cli/main.py +903 -0
- talkops_opscloud-0.3.0b1/src/opscloud/cli/non_interactive.py +425 -0
- talkops_opscloud-0.3.0b1/src/opscloud/cli/server_manager.py +58 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/__init__.py +19 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/_base.py +110 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/_guards.py +52 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/_router.py +146 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/_types.py +36 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/__init__.py +47 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/auth.py +94 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/bug.py +46 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/clear.py +106 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/cloud.py +185 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/compact.py +128 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/config_cmd.py +120 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/context.py +220 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/cost.py +44 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/doctor.py +535 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/effort.py +108 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/exit_cmd.py +41 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/fast.py +148 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/help_cmd.py +94 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/mcp.py +134 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/model.py +109 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/permissions.py +196 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/plugins.py +92 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/pool.py +108 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/resume.py +97 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/core/skills.py +178 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/__init__.py +51 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/agents.py +98 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/btw.py +85 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/copy.py +97 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/goal.py +548 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/loop.py +295 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/memory.py +287 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/review.py +152 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/rubric.py +287 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/runtime.py +321 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/skill_creator.py +70 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/skill_invoke.py +165 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/tasks.py +209 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/trace.py +117 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/ui_toggles.py +135 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/power/version.py +52 -0
- talkops_opscloud-0.3.0b1/src/opscloud/commands/registry.py +176 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/__init__.py +114 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/adapters/__init__.py +5 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/adapters/postgres.py +776 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/adapters/sqlite.py +769 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/aws.py +248 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/cloud_profiles.py +437 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/env_vars.py +81 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/langsmith.py +319 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/manifest.py +817 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/metadata.py +205 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/paths.py +604 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/plugins.py +130 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/settings.py +834 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/store.py +453 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/store_factory.py +97 -0
- talkops_opscloud-0.3.0b1/src/opscloud/config/toml_config.py +562 -0
- talkops_opscloud-0.3.0b1/src/opscloud/editor.py +173 -0
- talkops_opscloud-0.3.0b1/src/opscloud/exceptions.py +65 -0
- talkops_opscloud-0.3.0b1/src/opscloud/file_ops.py +217 -0
- talkops_opscloud-0.3.0b1/src/opscloud/hooks/__init__.py +139 -0
- talkops_opscloud-0.3.0b1/src/opscloud/hooks/env.py +44 -0
- talkops_opscloud-0.3.0b1/src/opscloud/hooks/interrupt.py +121 -0
- talkops_opscloud-0.3.0b1/src/opscloud/hooks/models/__init__.py +109 -0
- talkops_opscloud-0.3.0b1/src/opscloud/hooks/models/adapters.py +19 -0
- talkops_opscloud-0.3.0b1/src/opscloud/hooks/models/config.py +79 -0
- talkops_opscloud-0.3.0b1/src/opscloud/hooks/models/domain.py +434 -0
- talkops_opscloud-0.3.0b1/src/opscloud/hooks/models/transport.py +37 -0
- talkops_opscloud-0.3.0b1/src/opscloud/hooks/tools.py +231 -0
- talkops_opscloud-0.3.0b1/src/opscloud/input.py +48 -0
- talkops_opscloud-0.3.0b1/src/opscloud/integrations/__init__.py +80 -0
- talkops_opscloud-0.3.0b1/src/opscloud/integrations/base.py +153 -0
- talkops_opscloud-0.3.0b1/src/opscloud/integrations/content_filter.py +119 -0
- talkops_opscloud-0.3.0b1/src/opscloud/integrations/event_bus.py +480 -0
- talkops_opscloud-0.3.0b1/src/opscloud/integrations/hooks.py +238 -0
- talkops_opscloud-0.3.0b1/src/opscloud/integrations/identity.py +181 -0
- talkops_opscloud-0.3.0b1/src/opscloud/integrations/notifications.py +134 -0
- talkops_opscloud-0.3.0b1/src/opscloud/integrations/stream_bridge.py +397 -0
- talkops_opscloud-0.3.0b1/src/opscloud/integrations/thread_store.py +81 -0
- talkops_opscloud-0.3.0b1/src/opscloud/json_types.py +20 -0
- talkops_opscloud-0.3.0b1/src/opscloud/mcp/__init__.py +57 -0
- talkops_opscloud-0.3.0b1/src/opscloud/mcp/config.py +203 -0
- talkops_opscloud-0.3.0b1/src/opscloud/mcp/discovery.py +229 -0
- talkops_opscloud-0.3.0b1/src/opscloud/mcp/mcp_info.py +109 -0
- talkops_opscloud-0.3.0b1/src/opscloud/mcp/middleware.py +102 -0
- talkops_opscloud-0.3.0b1/src/opscloud/mcp/preload.py +505 -0
- talkops_opscloud-0.3.0b1/src/opscloud/mcp/raw_config.py +149 -0
- talkops_opscloud-0.3.0b1/src/opscloud/mcp/semantic_profiler.py +305 -0
- talkops_opscloud-0.3.0b1/src/opscloud/mcp/session_manager.py +727 -0
- talkops_opscloud-0.3.0b1/src/opscloud/mcp/trust.py +105 -0
- talkops_opscloud-0.3.0b1/src/opscloud/memory/__init__.py +27 -0
- talkops_opscloud-0.3.0b1/src/opscloud/memory/branch.py +61 -0
- talkops_opscloud-0.3.0b1/src/opscloud/memory/guard.py +19 -0
- talkops_opscloud-0.3.0b1/src/opscloud/memory/onboarding.py +120 -0
- talkops_opscloud-0.3.0b1/src/opscloud/memory/registry.py +134 -0
- talkops_opscloud-0.3.0b1/src/opscloud/memory/store.py +223 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/__init__.py +106 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/_repository_bounds.py +459 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/ask_user.py +152 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/auto_mode.py +60 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/auto_mode_hitl.py +2434 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/compaction.py +566 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/configurable_model.py +233 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/cost_tracking.py +1021 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/glm_stall_recovery.py +109 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/goal_criteria.py +1234 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/goal_state_notice.py +712 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/goal_tools.py +407 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/headless_mcp_guard.py +88 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/jev_model_router.py +1018 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/local_context.py +460 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/mcp_context.py +151 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/mcp_middleware.py +146 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/memory_guard.py +393 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/model_retry.py +205 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/registry.py +137 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/reliable_rubric.py +709 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/resume_state.py +91 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/server_hooks.py +1189 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/shell_allow_list.py +90 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/skills.py +382 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/subagent_artifacts.py +84 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/subagent_telemetry.py +261 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/subagents.py +243 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/tool_filter.py +384 -0
- talkops_opscloud-0.3.0b1/src/opscloud/middleware/unified_system_message.py +62 -0
- talkops_opscloud-0.3.0b1/src/opscloud/model/__init__.py +37 -0
- talkops_opscloud-0.3.0b1/src/opscloud/model/config.py +2992 -0
- talkops_opscloud-0.3.0b1/src/opscloud/model/factory.py +477 -0
- talkops_opscloud-0.3.0b1/src/opscloud/model/pool.py +459 -0
- talkops_opscloud-0.3.0b1/src/opscloud/model/reasoning.py +282 -0
- talkops_opscloud-0.3.0b1/src/opscloud/offload.py +173 -0
- talkops_opscloud-0.3.0b1/src/opscloud/output.py +64 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/__init__.py +189 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/_json.py +22 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/adapters/__init__.py +13 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/adapters/agents.py +112 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/adapters/commands.py +190 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/adapters/mcp.py +363 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/adapters/skills.py +132 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/commands_cli.py +541 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/discovery.py +512 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/manifest.py +335 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/marketplace.py +893 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/models.py +334 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/project_plugins.py +317 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/protocol.py +31 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/store.py +905 -0
- talkops_opscloud-0.3.0b1/src/opscloud/plugins/substitution.py +122 -0
- talkops_opscloud-0.3.0b1/src/opscloud/project_utils.py +145 -0
- talkops_opscloud-0.3.0b1/src/opscloud/prompts/__init__.py +37 -0
- talkops_opscloud-0.3.0b1/src/opscloud/prompts/system.py +483 -0
- talkops_opscloud-0.3.0b1/src/opscloud/prompts/templates/system_prompt.md +166 -0
- talkops_opscloud-0.3.0b1/src/opscloud/prompts/types.py +54 -0
- talkops_opscloud-0.3.0b1/src/opscloud/rubrics/__init__.py +42 -0
- talkops_opscloud-0.3.0b1/src/opscloud/rubrics/evaluator.py +404 -0
- talkops_opscloud-0.3.0b1/src/opscloud/rubrics/evidence_extractor.py +229 -0
- talkops_opscloud-0.3.0b1/src/opscloud/rubrics/generator.py +239 -0
- talkops_opscloud-0.3.0b1/src/opscloud/rubrics/jev_compiler.py +175 -0
- talkops_opscloud-0.3.0b1/src/opscloud/rubrics/jev_grader.py +297 -0
- talkops_opscloud-0.3.0b1/src/opscloud/rubrics/middleware.py +8 -0
- talkops_opscloud-0.3.0b1/src/opscloud/schema/__init__.py +107 -0
- talkops_opscloud-0.3.0b1/src/opscloud/schema/interrupts.py +981 -0
- talkops_opscloud-0.3.0b1/src/opscloud/security/__init__.py +91 -0
- talkops_opscloud-0.3.0b1/src/opscloud/security/approval_mode.py +528 -0
- talkops_opscloud-0.3.0b1/src/opscloud/security/approval_mode_source.py +230 -0
- talkops_opscloud-0.3.0b1/src/opscloud/security/cli_ast_evaluator.py +552 -0
- talkops_opscloud-0.3.0b1/src/opscloud/security/jev_classifier.py +651 -0
- talkops_opscloud-0.3.0b1/src/opscloud/security/shell_safety.py +340 -0
- talkops_opscloud-0.3.0b1/src/opscloud/security/unicode_security.py +439 -0
- talkops_opscloud-0.3.0b1/src/opscloud/security/url_validation.py +160 -0
- talkops_opscloud-0.3.0b1/src/opscloud/server/__init__.py +13 -0
- talkops_opscloud-0.3.0b1/src/opscloud/server/_server_config.py +158 -0
- talkops_opscloud-0.3.0b1/src/opscloud/server/server.py +242 -0
- talkops_opscloud-0.3.0b1/src/opscloud/server/server_graph.py +93 -0
- talkops_opscloud-0.3.0b1/src/opscloud/skills/__init__.py +91 -0
- talkops_opscloud-0.3.0b1/src/opscloud/skills/commands.py +1099 -0
- talkops_opscloud-0.3.0b1/src/opscloud/skills/invocation.py +200 -0
- talkops_opscloud-0.3.0b1/src/opscloud/skills/load.py +388 -0
- talkops_opscloud-0.3.0b1/src/opscloud/skills/loader.py +23 -0
- talkops_opscloud-0.3.0b1/src/opscloud/skills/merge.py +65 -0
- talkops_opscloud-0.3.0b1/src/opscloud/skills/registry.py +263 -0
- talkops_opscloud-0.3.0b1/src/opscloud/skills/sources.py +174 -0
- talkops_opscloud-0.3.0b1/src/opscloud/skills/trust.py +417 -0
- talkops_opscloud-0.3.0b1/src/opscloud/state/__init__.py +142 -0
- talkops_opscloud-0.3.0b1/src/opscloud/state/base.py +154 -0
- talkops_opscloud-0.3.0b1/src/opscloud/state/cloud_context.py +262 -0
- talkops_opscloud-0.3.0b1/src/opscloud/state/goal_channels.py +124 -0
- talkops_opscloud-0.3.0b1/src/opscloud/state/goal_state_limits.py +175 -0
- talkops_opscloud-0.3.0b1/src/opscloud/state/resume_state.py +58 -0
- talkops_opscloud-0.3.0b1/src/opscloud/state/service_context.py +281 -0
- talkops_opscloud-0.3.0b1/src/opscloud/state/session.py +957 -0
- talkops_opscloud-0.3.0b1/src/opscloud/state/state_migration.py +86 -0
- talkops_opscloud-0.3.0b1/src/opscloud/subagents/__init__.py +30 -0
- talkops_opscloud-0.3.0b1/src/opscloud/subagents/loader.py +331 -0
- talkops_opscloud-0.3.0b1/src/opscloud/subagents/subagents_parser.py +117 -0
- talkops_opscloud-0.3.0b1/src/opscloud/subagents/types.py +25 -0
- talkops_opscloud-0.3.0b1/src/opscloud/tools/__init__.py +36 -0
- talkops_opscloud-0.3.0b1/src/opscloud/tools/catalog.py +37 -0
- talkops_opscloud-0.3.0b1/src/opscloud/tools/display.py +24 -0
- talkops_opscloud-0.3.0b1/src/opscloud/tools/fetch_url.py +176 -0
- talkops_opscloud-0.3.0b1/src/opscloud/tools/goal_tools.py +423 -0
- talkops_opscloud-0.3.0b1/src/opscloud/tools/registry.py +105 -0
- talkops_opscloud-0.3.0b1/src/opscloud/tools/thread.py +32 -0
- talkops_opscloud-0.3.0b1/src/opscloud/tools/web_search.py +215 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/__init__.py +119 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/app.py +5400 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/app.tcss +479 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/clipboard.py +147 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/command_registry.py +482 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/message_store.py +152 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/permission_store.py +360 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/preferences.py +113 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/prompt_manager.py +96 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/remote_client.py +505 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/textual_adapter.py +1269 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/theme.py +728 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/ui_help.py +415 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/__init__.py +383 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_ask_user_types.py +81 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_copy_spans.py +52 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_inline_prompt.py +290 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_js_eval_display.py +139 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_links.py +175 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/_tool_stream.py +308 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/agent_selector.py +297 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/approval.py +741 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/ask_user.py +539 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/auth.py +695 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/auth_manager.py +214 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/auto_mode_notice.py +146 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/autocomplete.py +709 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/chat_input.py +805 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/cloud_selector.py +528 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/config_manager.py +652 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/debug_console.py +1269 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/devops_renderers.py +184 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/diff.py +237 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/effort_selector.py +166 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/goal_review.py +612 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/goal_status.py +57 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/infra_panel.py +141 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/install_confirm.py +114 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/loading.py +170 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/mcp_viewer.py +1204 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/messages.py +4461 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/model_selector.py +863 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/notification_center.py +108 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/notification_settings.py +119 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/operation_card.py +106 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/permissions_manager.py +667 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/plugin_manager.py +1212 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/pool_selector.py +376 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/preamble.py +53 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/skills_viewer.py +432 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/status.py +1037 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/subagent_panel.py +927 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/theme_selector.py +232 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/thread_selector.py +358 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/toast.py +31 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/tool_display.py +325 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/tool_renderers.py +234 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/tool_widgets.py +278 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/welcome.py +421 -0
- talkops_opscloud-0.3.0b1/src/opscloud/ui/widgets/welcome_popup.py +102 -0
- talkops_opscloud-0.3.0b1/src/opscloud/utils/__init__.py +24 -0
- talkops_opscloud-0.3.0b1/src/opscloud/utils/cost_estimation.py +169 -0
- talkops_opscloud-0.3.0b1/src/opscloud/utils/git.py +390 -0
- talkops_opscloud-0.3.0b1/src/opscloud/utils/logger.py +571 -0
- talkops_opscloud-0.3.0b1/src/opscloud/utils/session_stats.py +115 -0
- talkops_opscloud-0.3.0b1/src/opscloud/utils/startup_error.py +37 -0
- talkops_opscloud-0.3.0b1/tests/__init__.py +1 -0
- talkops_opscloud-0.3.0b1/tests/conftest.py +55 -0
- talkops_opscloud-0.3.0b1/tests/evals/__init__.py +1 -0
- talkops_opscloud-0.3.0b1/tests/evals/datasets/aws_cloud_ops.yaml +22 -0
- talkops_opscloud-0.3.0b1/tests/evals/evaluators/__init__.py +1 -0
- talkops_opscloud-0.3.0b1/tests/evals/evaluators/output_evaluator.py +32 -0
- talkops_opscloud-0.3.0b1/tests/evals/evaluators/trajectory_evaluator.py +36 -0
- talkops_opscloud-0.3.0b1/tests/evals/runners/test_eval_runner.py +32 -0
- talkops_opscloud-0.3.0b1/tests/integration_tests/test_agent_lifecycle.py +16 -0
- talkops_opscloud-0.3.0b1/tests/integration_tests/test_server_lifecycle.py +23 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_agent_factory.py +51 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_approval_widget.py +115 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_ask_user.py +160 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_ast_evaluator.py +86 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_backend.py +323 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_checkpointer.py +87 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_cli_enhancements.py +489 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_cli_rubric.py +92 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_cloud_command.py +469 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_commands.py +496 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_config.py +511 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_cost_tracking.py +295 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_default_marketplace.py +432 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_goal_criteria.py +151 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_goal_state_limits.py +75 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_goal_state_notice.py +156 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_grader_tools.py +49 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_hitl.py +887 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_integrations_and_hooks.py +528 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_interrupt_schemas.py +308 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_jev_model_router.py +784 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_jev_rubrics.py +621 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_local_context.py +179 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_logging.py +307 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_mcp.py +648 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_mcp_middleware.py +165 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_mcp_viewer_and_command.py +341 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_memory.py +230 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_memory_enhancements.py +183 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_middleware_stack.py +82 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_model_providers.py +516 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_model_retry.py +165 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_plugin_agent_skill_mcp_scoping.py +228 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_plugin_manager_search.py +177 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_plugins.py +672 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_project_plugins.py +264 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_prompts_and_schema.py +266 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_reliable_rubric.py +91 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_reload_restart.py +348 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_resume_state.py +67 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_resumed_thread_latency_fix.py +107 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_rubrics.py +55 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_security.py +368 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_server.py +157 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_server_hooks.py +499 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_skill_creator.py +229 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_skills.py +470 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_state.py +315 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_subagents.py +791 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_tool_filter.py +174 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_tools.py +129 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_tui_app.py +355 -0
- talkops_opscloud-0.3.0b1/tests/unit_tests/test_utils.py +55 -0
- talkops_opscloud-0.3.0b1/uv-requirements.txt +4 -0
- 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
|