stackops 8.104__tar.gz → 26.6__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.
- {stackops-8.104/src/stackops.egg-info → stackops-26.6}/PKG-INFO +1 -1
- {stackops-8.104 → stackops-26.6}/pyproject.toml +1 -1
- stackops-26.6/src/manual/test_agents_skill_impl.py +44 -0
- {stackops-8.104 → stackops-26.6}/src/manual/test_cli_config_secrets.py +133 -2
- stackops-26.6/src/manual/test_cli_self_clone.py +58 -0
- stackops-26.6/src/manual/test_cli_short_options.py +156 -0
- stackops-26.6/src/manual/test_offline_installer_paths.py +104 -0
- stackops-26.6/src/manual/test_stackops_skill_refs.py +74 -0
- stackops-26.6/src/manual/test_stackops_versioning.py +42 -0
- stackops-26.6/src/stackops/cluster/sessions_managers/helpers/__init__.py +1 -0
- stackops-26.6/src/stackops/cluster/sessions_managers/tmux/tmux_utils/__init__.py +1 -0
- stackops-26.6/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/__init__.py +1 -0
- stackops-26.6/src/stackops/cluster/sessions_managers/zellij/zellij_utils/__init__.py +1 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/checks/security_cli.py +3 -2
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts_dynamic/download_stackops_offline_installer.py +27 -6
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/agents_parallel_commands.py +3 -3
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/cloud.py +1 -1
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph.json +1032 -509
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/cli_graph_app.py +13 -16
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/cli_graph_typer_app.py +6 -6
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/helpers_navigator/devops_navigator.py +1 -1
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_skill_impl.py +17 -5
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_dotfile_mapper.py +3 -3
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_secrets.py +14 -5
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_secrets_actions.py +86 -54
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_secrets_candidates.py +18 -32
- stackops-26.6/src/stackops/scripts/python/helpers/helpers_devops/cli_config_secrets_interactive.py +115 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_terminal.py +0 -3
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_tmux.py +1 -4
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_device.py +1 -1
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_nw.py +4 -4
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_repos.py +25 -27
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self.py +186 -12
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_assets.py +23 -1
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_share_file.py +2 -2
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_share_server.py +1 -1
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_ssh.py +1 -1
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_vault.py +8 -8
- stackops-26.6/src/stackops/scripts/python/helpers/helpers_devops/stackops_skill_refs.py +248 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_env/env_manager_tui.py +1 -1
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_env/path_manager_tui.py +1 -1
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_preview/preview_impl.py +7 -5
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/cloud_repo_sync.py +3 -3
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/grource.py +13 -13
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/download.py +1 -1
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/file_utils_app.py +10 -10
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/pyproject_utils_app.py +2 -3
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/python.py +2 -2
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/terminal.py +13 -13
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/linux/interactive.sh +8 -8
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/windows/interactive.ps1 +9 -9
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/cli_utils/hierarchy.py +16 -25
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/cli_utils/hierarchy_types.py +17 -28
- stackops-26.6/src/stackops/utils/cloud/__init__.py +1 -0
- stackops-26.6/src/stackops/utils/files/__init__.py +1 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_offline_constants.py +2 -2
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_offline_publish.py +7 -1
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/options_utils/textual_options_form_types.py +4 -2
- stackops-26.6/src/stackops/utils/schemas/fire_agents/__init__.py +1 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/installer/installer_data.json +68 -4
- stackops-26.6/src/stackops/utils/ssh_utils/__init__.py +1 -0
- stackops-26.6/src/stackops/utils/ssh_utils/abc.py +5 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/ssh_utils/copy_to_here.py +6 -6
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/ssh_utils/utils.py +2 -2
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/upgrade_packages.py +115 -9
- {stackops-8.104 → stackops-26.6/src/stackops.egg-info}/PKG-INFO +1 -1
- {stackops-8.104 → stackops-26.6}/src/stackops.egg-info/SOURCES.txt +16 -0
- stackops-8.104/src/stackops/utils/ssh_utils/abc.py +0 -5
- {stackops-8.104 → stackops-26.6}/MANIFEST.in +0 -0
- {stackops-8.104 → stackops-26.6}/README.md +0 -0
- {stackops-8.104 → stackops-26.6}/setup.cfg +0 -0
- {stackops-8.104 → stackops-26.6}/src/manual/test_cli_self_docker.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/manual/test_herdr_backend.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/manual/test_path_references.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/manual/test_secrets_schema.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/remote/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/remote/cloud_manager.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/remote/data_transfer.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/remote/distribute.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/remote/execution_script.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/remote/file_manager.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/remote/job_params.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/remote/models.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/remote/notification.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/remote/remote_machine.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/helpers/enhanced_command_runner.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/helpers/load_balancer_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/session_conflict.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/session_exit_mode.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/tmux/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/tmux/tmux_local.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/tmux/tmux_local_manager.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/tmux/tmux_utils/tmux_common.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/tmux/tmux_utils/tmux_execution.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/tmux/tmux_utils/tmux_layout.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/tmux/tmux_utils/tmux_status.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/utils/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/utils/load_balancer.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/utils/maker.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_local.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_local_manager.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_remote.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_remote_manager.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/examples/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/examples/wt_local_manager_demo.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/layout_generator.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/local_monitoring.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/manager_persistence.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/monitoring_helpers.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/process_monitor.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/remote_executor.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/session_manager.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/status_reporter.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/status_reporting.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/wt_helpers.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_local.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_local_manager.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_remote.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_remote_manager.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/example_usage.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/layout_generator.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/monitoring_types.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/process_monitor.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/remote_executor.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/session_manager.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/status_reporter.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/zellij_local_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/zellij_local_helper_restart.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/zellij_local_helper_with_panes.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/zellij_local_manager_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/agents/mcps/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/agents/mcps/mcp.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/agents/mcps/mcp.schema.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/checks/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/checks/check_installations.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/checks/install_utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/checks/report_utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/checks/security_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/checks/vt_utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/brave.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/cloudflare_warp_cli.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/edge.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/network.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/ngrok.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/oz.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/q.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/redis.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/sysabc_macos.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/sysabc_ubuntu.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/vscode.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/linux_scripts/wezterm.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/macos_scripts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/package_groups.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/powershell_scripts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/powershell_scripts/nerdfonts.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/powershell_scripts/sysabc.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/powershell_scripts/texlive.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/alacritty.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/boxes.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/brave.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/bypass_paywall.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/cloudflare_warp_cli.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/code.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/cursor.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/docker.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/dubdb_adbc.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/espanso.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/goes.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/hx.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/lvim.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/main_protocol.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/nerdfont.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/orca.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/poppler.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/redis.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/rmpc.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/sysabc.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/termusic.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/wezterm.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/winget.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/yazi.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/youtube_tui.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/python_scripts/ytui_music.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/installer/todo.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts/bash_scripts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts/bash_scripts/hollywood.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts/bash_scripts/lid.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts/bash_scripts/weather +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts/powershell_scripts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts/powershell_scripts/cmatrix.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts/powershell_scripts/weather.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts_dynamic/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts_dynamic/download_stackops_offline_installer.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/jobs/scripts_dynamic/system_compute_analyzer.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/logger.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/profile/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/profile/create_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/profile/create_links.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/profile/create_links_export.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/profile/create_shell_profile.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/profile/dotfiles_mapper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/linux/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/linux/wrap_stackops +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/nu/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/nu/wrap_stackops.nu +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/agents.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/agents_browser.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/agents_parallel.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/agents_parallel_run_command.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/initai.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/command_runner.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/command_runner.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/dashboard.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/lint_and_type_check.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/models.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/models_config.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/models_diagnostics.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/models_json.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/models_reports.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/scripts/paths.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/antigravity/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/antigravity/antigravity.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/auggie/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/auggie/auggie.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/claude/claude.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/cline/cline.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/codex/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/codex/codex.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/codex/config.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/agents/Thinking-Beast-Mode.agent.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/agents/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/agents/deepResearch.agent.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/github_copilot.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/instructions/archive/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/instructions/archive/watch_exec.prompt.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/instructions/python/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/prompts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/copilot/prompts/research-report-skeleton.prompt.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/crush/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/crush/crush.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/crush/crush.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/crush/privacy.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/cursor/cursors.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/droid/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/droid/droid.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/forge/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/forge/forge.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/kilocode/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/kilocode/kilocode.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/kilocode/privacy.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/opencode/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/opencode/opencode.jsonc +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/opencode/opencode.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/oz/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/oz/oz.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/pi/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/pi/pi.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/q/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/q/amazon_q.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/qwen_code/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/qwen_code/qwen_code.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/warp/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/solutions/warp/warp.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/utils/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/utils/generate_files.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/utils/generic.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/utils/shared.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ai/utils/vscode_tasks.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/devops.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/enums.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/fire_jobs.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/ftpx.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_apps.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_eval.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_node_utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_nodes.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_registration.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_resolver.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_shared.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_signature.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_targets.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_tree.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/cli_graph_values.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/generate_cli_graph.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/cli_graph_search.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/dot_export.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/graph_data.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/graph_paths.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/helpers_navigator/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/helpers_navigator/cli_graph_loader.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/helpers_navigator/command_builder.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/helpers_navigator/command_detail.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/helpers_navigator/command_tree.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/helpers_navigator/data_models.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/helpers_navigator/main_app.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/helpers_navigator/search_bar.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/plotly_browser.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/plotly_views.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/graph/visualize/rich_tree.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agent_impl_interactive/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agent_impl_interactive/common.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agent_impl_interactive/create_options.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agent_impl_interactive/main.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_codex.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_copilot.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_cursor_agents.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_pi.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_qwen.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_ask_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_browser_constants.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_browser_guides.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_browser_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_browser_resolution.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_create_artifacts.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_create_inputs.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_mcp_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_parallel_add_entry.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_parallel_run_config.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_parallel_run_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_parallel_run_yaml.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_parallel_yaml_defaults.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_rich_output.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_run_context.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_run_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_shell.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/agents_yaml_schemas.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/agent-browser.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/chrome-devtools-mcp-browser-url.mcp.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/chrome-devtools-mcp.mcp.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/chrome-devtools-mcp.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp-cdp.mcp.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp-extension.mcp.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp-storage-state.mcp.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp-user-data-dir.mcp.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp.mcp.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/fire_agents_help_launch.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/fire_agents_help_search.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/fire_agents_helper_types.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/fire_agents_load_balancer.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/mcp_catalog.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/mcp_install.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/mcp_types.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/aichat/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/auggie/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/auggie/auggie_privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/chatgpt/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/chatgpt/chatgpt_privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/cline/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/cline/cline_privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/codex/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/codex/codex_privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/common/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/common/privacy_orchestrator.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/copilot/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/crush/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/cursor/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/cursor/cursor_privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/droid/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/droid/droid_privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/kilocode/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/kilocode/kilocode_privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/mods/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/mods/mods_privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/opencode/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/q/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/q/q_privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/qwen/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/qwen/qwen_privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/privacy/privacy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/reasoning_capabilities.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/templates/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/templates/prompt.txt +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/templates/template.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_agents/templates/template.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_cloud/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_cloud/cloud_copy.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_cloud/cloud_helpers.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_cloud/cloud_mount.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_cloud/cloud_mount_tmux.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_cloud/cloud_mount_zellij.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_cloud/cloud_path_resolver.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_cloud/cloud_sync.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/backup_config.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_config.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_dotfile_transfer.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_mount.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_secrets_support.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_data.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_nw_vscode_share.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/app.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/update_docs.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/update_installer.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/update_logic.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/update_test.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/workflow_capture.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/workflows_yaml.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_docker.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_docs.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_share_temp.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/cli_share_terminal.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/devops_status.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/devops_status_checks.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/devops_status_display.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/devops_update_repos.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/interactive.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/commands.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/device_entry.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/devices.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/linux.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/macos.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/selection.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/windows.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/register_interactive.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/run_script.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/themes/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/themes/choose_pwsh_theme.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/themes/choose_wezterm_theme.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/themes/choose_windows_terminal_theme.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_devops/vault.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_env/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_env/path_manager_backend.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_fire_command/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_fire_command/cloud_manager.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_fire_command/f.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_fire_command/file_wrangler.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_fire_command/fire_jobs_args_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_fire_command/fire_jobs_route_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/address.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/address_switch.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ftpx_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/onetimeshare.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_add_key_windows.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_add_ssh_key.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_cloud_init.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_darwin.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_darwin_utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_linux.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_linux_utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_windows.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_windows_utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_deploy_key_remote.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn_platforms/common.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn_platforms/darwin.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn_platforms/linux.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn_platforms/unsupported.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn_platforms/windows.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_preview/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_preview/pomodoro.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_preview/preview_read.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_preview/scheduler.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_preview/start_slidev.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_preview/viewer.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_preview/viewer_template.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/action.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/action_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/clone.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/cloud_repo_sync_conflicts.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/record.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/repo_analyzer_1.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/repo_analyzer_2.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/spec_store.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/sync.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_repos/update.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_search/ast_search.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_search/qr_code.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_search/repo_rag.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_search/script_help.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_search/semantic_search.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_seek/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_seek/scripts_linux/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_seek/scripts_linux/fzfg +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_seek/scripts_linux/search_with_context.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_seek/scripts_macos/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_seek/scripts_macos/fzfg +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_seek/scripts_windows/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_seek/scripts_windows/fzfg.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_seek/seek_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_herdr_backend.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_tmux_backend.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_tmux_backend_options.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_tmux_backend_preview.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_tmux_backend_processes.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend_focus.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend_layout.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend_metadata.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend_options.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend_preview.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/attach_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/kill_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/session_trace_tmux.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/session_trace_zellij.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_aoe_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_cli_common.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_cli_run.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_cli_run_all.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_cli_run_aoe.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_dynamic.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_dynamic_display.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_dynamic_tmux.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_dynamic_zellij.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_impl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_layout_source.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_multiprocess.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_test_layouts.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_trace.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_sessions/utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/machine_utils_app.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/path_reference_validation.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/pdf.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/read_db_cli_tui.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/read_db_cli_tui_backend.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/scrape.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/specs.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/surya.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/test_runtime.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/helpers/helpers_utils/type_fix.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/preview.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/seek.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/stackops_entry.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/python/utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/linux/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/linux/apps_desktop.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/linux/live_from_github.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/linux/uv.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/macos/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/macos/uv.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/windows/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/windows/live_from_github.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/windows/quick_init.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/setup/windows/uv.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/windows/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/scripts/windows/wrap_stackops.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/secrets.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/atuin/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/atuin/config.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/atuin/themes/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/atuin/themes/catppuccin-mocha-mauve.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/broot/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/broot/br.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/broot/brootcd.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/broot/conf.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/glow/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/glow/glow.yml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/gromit-mpx/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/gromit-mpx/gromit-mpx.cfg +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/helix/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/helix/config.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/helix/languages.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/helix/yazi-picker.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/keras/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/keras/keras.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/keyboard/espanso/config/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/keyboard/espanso/config/default.yml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/keyboard/espanso/match/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/keyboard/espanso/match/base.yml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/keyboard/kanata/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/keyboard/kanata/kanata.kbd +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/autocall/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/autocall/delete.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/autocall/on-cd.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/autocall/on-quit.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/autocall/open.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/autocall/paste.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/autocall/pre-cd.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/autocall/rename.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/colors +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/exe/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/exe/cleaner.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/exe/leftpane_previewer.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/exe/lfcd.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/exe/previewer.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/exe/previewer_archive.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/icons +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/linux/lfrc +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/autocall/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/autocall/delete.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/autocall/on-cd.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/autocall/on-quit.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/autocall/open.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/autocall/paste.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/autocall/pre-cd.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/autocall/rename.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/cd_tere.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/cd_zoxide.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/cd_zoxide2.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/colors +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/icons +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/leftpane_previewer.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/lfcd.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/lfrc +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/mkdir.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/mkfile.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lf/windows/previewer.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/linters/.flake8 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/linters/.mypy.ini +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/linters/.pylintrc +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/linters/.ruff.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/linters/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/linters/pyrefly.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/linters/ty.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lvim/linux/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lvim/linux/config.lua +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lvim/windows/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lvim/windows/archive/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lvim/windows/archive/config_additional.lua +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lvim/windows/config.lua +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lvim/windows/lua/user/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/lvim/windows/lua/user/custom_config.lua +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/marimo/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/marimo/marimo.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/marimo/snippets/globalize.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/mprocs/windows/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/mprocs/windows/mprocs.yaml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/mprocs/windows/other +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/ollama/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/ollama/server.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/pistol/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/pistol/pistol.conf +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/presenterm/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/presenterm/config.yaml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/procs/.procs.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/psmux/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/psmux/description.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/psmux/install-ppm.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/psmux/psmux.bindings.conf +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/psmux/psmux.conf +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/psmux/psmux.local.conf +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/psmux/psmux.plugins.conf +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/psmux/psmux.powerline.conf +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/psmux/psmux.theme.conf +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/pudb/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/pudb/pudb.cfg +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/rofi/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/rofi/config.rasi +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/rofi/config_default.rasi +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/alacritty/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/alacritty/alacritty.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/alacritty/alacritty.yml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/bash/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/bash/init.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/ghostty/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/ghostty/config +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/hyper/.hyper.js +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/ipy/profiles/default/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/ipy/profiles/default/startup/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/ipy/profiles/default/startup/playext.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/kitty/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/kitty/kitty.conf +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/nushell/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/nushell/config.nu +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/nushell/env.nu +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/nushell/init.nu +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/pwsh/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/pwsh/init.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/pwsh/search_pwsh_history.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/starship/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/starship/starship.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/vtm/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/vtm/settings.xml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/wezterm/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/wezterm/wezterm.lua +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/wt/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/wt/settings.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/zsh/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/shells/zsh/init.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/streamlit/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/streamlit/config.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/svim/linux/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/svim/linux/init.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/svim/windows/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/svim/windows/init.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/alias.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/apt-packages.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/aws-buckets.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/aws-instances.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/bash-history.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/brew-packages.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/channels.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/dirs.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/diskutil.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/distrobox-list.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/docker-images.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/dotfiles.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/downloads.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/env.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/figlet-fonts.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/files.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/fish-history.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/fonts.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/git-branch.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/git-diff.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/git-files.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/git-log.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/git-reflog.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/git-repos.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/git-tags.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/git-worktrees.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/guix.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/images.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/just-recipes.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/k8s-deployments.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/k8s-pods.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/k8s-services.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/linux-disks.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/man-pages.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/mounts.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/npm-packages.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/nu-history.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/path.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/ports.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/procs.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/python-venvs.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/recent-files.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/sesh.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/text.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/tldr.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/tmux-sessions.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/tmux-windows.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/todo-comments.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/trash.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/unicode.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/wifi.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/zoxide.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_unix/zsh-history.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/alias.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/dirs.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/docker-images.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/dotfiles.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/env.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/files.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/git-branch.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/git-diff.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/git-log.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/git-reflog.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/git-repos.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/nu-history.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/pwsh-history.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/television/cable_windows/text.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/tere/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/tere/terecd.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/tere/terecd.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/tmux/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/tmux/tmux.conf.local +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/tv/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/tv/config.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/tv/themes/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/tv/themes/catppuccin-mocha-sky.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/wsl/.wslconfig +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/wt/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/wt/set_wt_settings.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/init.lua +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/keymap_darwin.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/keymap_linux.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/keymap_windows.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/scripts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/scripts/compress_selected.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/scripts/copy_file_content.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/scripts/fullscreen_preview.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/scripts/interactive_view.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/scripts/open_db_readonly.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/scripts/open_default_app.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/scripts/serve_browser_file.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/shell/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/shell/yazi_cd.ps1 +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/shell/yazi_cd.sh +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/theme.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/yazi_darwin.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/yazi_linux.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/yazi/yazi_windows.toml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zed/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zed/settings.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/commands/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/commands/monitor +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/commands/standard_panes +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/config.kdl +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/layouts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/layouts/hist +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/layouts/panes.kdl +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/layouts/st.kdl +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/layouts/st2.kdl +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/settings/zellij/layouts/stacked_panes.kdl +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/accessories.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/ai/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/cli_utils/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/cloud/onedrive/README.md +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/cloud/onedrive/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/cloud/onedrive/auth.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/cloud/onedrive/file_ops.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/cloud/onedrive/setup_oauth.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/cloud_defaults.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/code.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/encryption.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/art/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/art/fat_croco.txt +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/art/halfwit_croco.txt +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/art/happy_croco.txt +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/art/water_croco.txt +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/ascii_art.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/dbms.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/f.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/headers.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/notebook.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/ouch/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/ouch/decompress.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/files/read.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/github_release_bulk.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/github_release_scraper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/install_from_url.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/install_request_logic.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_class.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_cli.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_explore.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_locator_utils.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_offline.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_offline_models.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_offline_render.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_offline_scripts.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_offline_steps.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_offline_uv.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_runner.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/installer_utils/installer_summary.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/io.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/links.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/meta.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/notifications.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/options.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/options_utils/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/options_utils/options_tv_linux.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/options_utils/options_tv_windows.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/options_utils/textual_options_form.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/options_utils/tv_options.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/path_compression.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/path_core.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/path_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/path_reference.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/procs.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/python_env.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/rclone.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/rclone_wrapper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/repo_stackops.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/scheduler.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/agents/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/agents/parallel.schema.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/agents/prompts.schema.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/config/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/config/config.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/config/config.schema.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/config/config_types.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/fire_agents/fire_agents_input.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/installer/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/installer/installer_type.schema.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/installer/installer_types.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/layouts/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/layouts/layout.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/layouts/layout.schema.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/layouts/layout_types.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/mapper/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/mapper/data.schema.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/mapper/data.yaml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/mapper/dotfiles.schema.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/mapper/dotfiles.yaml +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/repos/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/repos/repos_schema.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/repos/repos_types.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/secrets/__init__.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/secrets/secrets.example.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/secrets/secrets.schema.json +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/secrets/secrets_loader.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/schemas/secrets/secrets_types.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/source_of_truth.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/ssh.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/ssh_utils/copy_from_here.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/ssh_utils/wsl.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/ssh_utils/wsl_helper.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/terminal.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops/utils/yaml_schema.py +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops.egg-info/dependency_links.txt +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops.egg-info/entry_points.txt +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops.egg-info/requires.txt +0 -0
- {stackops-8.104 → stackops-26.6}/src/stackops.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from stackops.scripts.python.helpers.helpers_agents.agents_skill_impl import (
|
|
6
|
+
build_agent_skill_install_commands,
|
|
7
|
+
is_supported_agent_skill_name,
|
|
8
|
+
parse_requested_skill_agent_targets,
|
|
9
|
+
render_agent_skill_install_script,
|
|
10
|
+
supported_agent_skill_names,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_stackops_skill_is_supported() -> None:
|
|
15
|
+
assert is_supported_agent_skill_name(skill_name="stackops")
|
|
16
|
+
assert "stackops" in supported_agent_skill_names()
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def test_stackops_skill_install_command_selects_repo_skill() -> None:
|
|
20
|
+
assert build_agent_skill_install_commands(skill_names=("stackops",), agent_targets=(), scope="local") == (
|
|
21
|
+
("bunx", "skills@latest", "add", "https://github.com/thisismygitrepo/stackops", "--skill", "stackops", "--yes"),
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_existing_skill_install_command_shape_is_preserved() -> None:
|
|
26
|
+
assert build_agent_skill_install_commands(skill_names=("caveman",), agent_targets=("codex",), scope="global") == (
|
|
27
|
+
("bunx", "skills@latest", "add", "JuliusBrussee/caveman", "--yes", "--global", "--agent", "codex"),
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_agent_targets_are_comma_separated_without_empty_entries() -> None:
|
|
32
|
+
assert parse_requested_skill_agent_targets(raw_value="codex,github-copilot") == ("codex", "github-copilot")
|
|
33
|
+
with pytest.raises(ValueError, match="without empty entries"):
|
|
34
|
+
parse_requested_skill_agent_targets(raw_value="codex,")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def test_render_install_script_quotes_install_root() -> None:
|
|
38
|
+
script = render_agent_skill_install_script(
|
|
39
|
+
install_root=Path("/tmp/StackOps Skills"),
|
|
40
|
+
commands=build_agent_skill_install_commands(skill_names=("stackops",), agent_targets=("codex",), scope="local"),
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
assert script.startswith("cd '/tmp/StackOps Skills'\n")
|
|
44
|
+
assert "bunx skills@latest add https://github.com/thisismygitrepo/stackops --skill stackops --yes --agent codex" in script
|
|
@@ -7,6 +7,7 @@ import pytest
|
|
|
7
7
|
from typer.testing import CliRunner
|
|
8
8
|
|
|
9
9
|
from stackops.scripts.python.helpers.helpers_devops import cli_config, cli_config_secrets
|
|
10
|
+
from stackops.scripts.python.helpers.helpers_devops.cli_config_secrets_interactive import InteractivePickerOption
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def test_config_secrets_is_nested_typer_app() -> None:
|
|
@@ -75,6 +76,7 @@ def test_secrets_add_and_edit_have_short_aliases() -> None:
|
|
|
75
76
|
assert "-p" in _option_param_decls(subset_parameters["secrets_path"])
|
|
76
77
|
assert "-s" in _option_param_decls(subset_parameters["secrets_source"])
|
|
77
78
|
assert "-f" in _option_param_decls(subset_parameters["overwrite"])
|
|
79
|
+
assert "-P" in _option_param_decls(subset_parameters["preview_secrets"])
|
|
78
80
|
assert "-p" in _option_param_decls(add_parameters["secrets_path"])
|
|
79
81
|
assert "-s" in _option_param_decls(add_parameters["secrets_source"])
|
|
80
82
|
assert "-p" in _option_param_decls(edit_parameters["secrets_path"])
|
|
@@ -199,7 +201,11 @@ def test_secrets_subset_writes_selected_entries_without_printing_secret_values(t
|
|
|
199
201
|
),
|
|
200
202
|
encoding="utf-8",
|
|
201
203
|
)
|
|
202
|
-
monkeypatch.setattr(
|
|
204
|
+
monkeypatch.setattr(
|
|
205
|
+
cli_config_secrets.secret_actions,
|
|
206
|
+
"_choose_subset_login_indices",
|
|
207
|
+
lambda *, secrets_file, source_path, preview_secrets: [1],
|
|
208
|
+
)
|
|
203
209
|
runner = CliRunner()
|
|
204
210
|
|
|
205
211
|
result = runner.invoke(
|
|
@@ -239,7 +245,11 @@ def test_secrets_subset_refuses_to_overwrite_by_default(tmp_path: Path, monkeypa
|
|
|
239
245
|
encoding="utf-8",
|
|
240
246
|
)
|
|
241
247
|
output_path.write_text("existing\n", encoding="utf-8")
|
|
242
|
-
monkeypatch.setattr(
|
|
248
|
+
monkeypatch.setattr(
|
|
249
|
+
cli_config_secrets.secret_actions,
|
|
250
|
+
"_choose_subset_login_indices",
|
|
251
|
+
lambda *, secrets_file, source_path, preview_secrets: [0],
|
|
252
|
+
)
|
|
243
253
|
runner = CliRunner()
|
|
244
254
|
|
|
245
255
|
result = runner.invoke(
|
|
@@ -251,6 +261,127 @@ def test_secrets_subset_refuses_to_overwrite_by_default(tmp_path: Path, monkeypa
|
|
|
251
261
|
assert output_path.read_text(encoding="utf-8") == "existing\n"
|
|
252
262
|
|
|
253
263
|
|
|
264
|
+
def test_secrets_subset_preview_matches_search_style_without_secret_values(tmp_path: Path) -> None:
|
|
265
|
+
source_path = tmp_path / "source-secrets.json"
|
|
266
|
+
output_path = tmp_path / "subset-secrets.json"
|
|
267
|
+
source_path.write_text(
|
|
268
|
+
json.dumps(
|
|
269
|
+
{
|
|
270
|
+
"version": "0.5",
|
|
271
|
+
"entries": [
|
|
272
|
+
{
|
|
273
|
+
"name": "shared-login",
|
|
274
|
+
"tags": ["team-a"],
|
|
275
|
+
"secrets": [
|
|
276
|
+
{
|
|
277
|
+
"name": "first-token",
|
|
278
|
+
"tags": ["api"],
|
|
279
|
+
"scopes": ["dev"],
|
|
280
|
+
"keyValues": {"FIRST_TOKEN": "first-secret-value"},
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"name": "second-token",
|
|
284
|
+
"tags": ["ops"],
|
|
285
|
+
"scopes": ["prod"],
|
|
286
|
+
"keyValues": {"SECOND_TOKEN": "second-secret-value"},
|
|
287
|
+
},
|
|
288
|
+
],
|
|
289
|
+
}
|
|
290
|
+
],
|
|
291
|
+
}
|
|
292
|
+
),
|
|
293
|
+
encoding="utf-8",
|
|
294
|
+
)
|
|
295
|
+
captured_picker_options: list[InteractivePickerOption[int]] = []
|
|
296
|
+
|
|
297
|
+
def capture_picker_options(
|
|
298
|
+
options: list[InteractivePickerOption[int]],
|
|
299
|
+
*,
|
|
300
|
+
missing_tool_message: str,
|
|
301
|
+
missing_selection_message: str,
|
|
302
|
+
) -> list[int]:
|
|
303
|
+
assert missing_tool_message == "Interactive subset selection requires `tv` on PATH."
|
|
304
|
+
assert missing_selection_message == "Interactive selection did not map to a secrets entry"
|
|
305
|
+
captured_picker_options.extend(options)
|
|
306
|
+
return [0]
|
|
307
|
+
|
|
308
|
+
monkeypatch = pytest.MonkeyPatch()
|
|
309
|
+
monkeypatch.setattr(cli_config_secrets.secret_actions, "choose_interactive_options", capture_picker_options)
|
|
310
|
+
try:
|
|
311
|
+
result = CliRunner().invoke(
|
|
312
|
+
cli_config_secrets.get_app(),
|
|
313
|
+
["subset", "--path", str(source_path), "--source", "local", "--output", str(output_path)],
|
|
314
|
+
)
|
|
315
|
+
finally:
|
|
316
|
+
monkeypatch.undo()
|
|
317
|
+
|
|
318
|
+
assert result.exit_code == 0
|
|
319
|
+
assert len(captured_picker_options) == 1
|
|
320
|
+
assert captured_picker_options[0].label == "shared-login -> FIRST_TOKEN, SECOND_TOKEN"
|
|
321
|
+
assert "# shared-login -> FIRST_TOKEN, SECOND_TOKEN" in captured_picker_options[0].preview
|
|
322
|
+
assert f"- File: `{source_path}`" in captured_picker_options[0].preview
|
|
323
|
+
assert "- Login: `shared-login`" in captured_picker_options[0].preview
|
|
324
|
+
assert "- Env vars: `FIRST_TOKEN, SECOND_TOKEN`" in captured_picker_options[0].preview
|
|
325
|
+
assert "### first-token" in captured_picker_options[0].preview
|
|
326
|
+
assert "### second-token" in captured_picker_options[0].preview
|
|
327
|
+
assert "first-secret-value" not in captured_picker_options[0].preview
|
|
328
|
+
assert "second-secret-value" not in captured_picker_options[0].preview
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
def test_secrets_subset_preview_secrets_includes_login_entry_json(tmp_path: Path) -> None:
|
|
332
|
+
source_path = tmp_path / "source-secrets.json"
|
|
333
|
+
output_path = tmp_path / "subset-secrets.json"
|
|
334
|
+
source_path.write_text(
|
|
335
|
+
json.dumps(
|
|
336
|
+
{
|
|
337
|
+
"version": "0.5",
|
|
338
|
+
"entries": [
|
|
339
|
+
{
|
|
340
|
+
"name": "shared-login",
|
|
341
|
+
"tags": ["team-a"],
|
|
342
|
+
"secrets": [
|
|
343
|
+
{
|
|
344
|
+
"name": "first-token",
|
|
345
|
+
"tags": ["api"],
|
|
346
|
+
"scopes": ["dev"],
|
|
347
|
+
"keyValues": {"FIRST_TOKEN": "first-secret-value"},
|
|
348
|
+
}
|
|
349
|
+
],
|
|
350
|
+
}
|
|
351
|
+
],
|
|
352
|
+
}
|
|
353
|
+
),
|
|
354
|
+
encoding="utf-8",
|
|
355
|
+
)
|
|
356
|
+
captured_picker_options: list[InteractivePickerOption[int]] = []
|
|
357
|
+
|
|
358
|
+
def capture_picker_options(
|
|
359
|
+
options: list[InteractivePickerOption[int]],
|
|
360
|
+
*,
|
|
361
|
+
missing_tool_message: str,
|
|
362
|
+
missing_selection_message: str,
|
|
363
|
+
) -> list[int]:
|
|
364
|
+
assert missing_tool_message == "Interactive subset selection requires `tv` on PATH."
|
|
365
|
+
assert missing_selection_message == "Interactive selection did not map to a secrets entry"
|
|
366
|
+
captured_picker_options.extend(options)
|
|
367
|
+
return [0]
|
|
368
|
+
|
|
369
|
+
monkeypatch = pytest.MonkeyPatch()
|
|
370
|
+
monkeypatch.setattr(cli_config_secrets.secret_actions, "choose_interactive_options", capture_picker_options)
|
|
371
|
+
try:
|
|
372
|
+
result = CliRunner().invoke(
|
|
373
|
+
cli_config_secrets.get_app(),
|
|
374
|
+
["subset", "--path", str(source_path), "--source", "local", "--output", str(output_path), "--preview-secrets"],
|
|
375
|
+
)
|
|
376
|
+
finally:
|
|
377
|
+
monkeypatch.undo()
|
|
378
|
+
|
|
379
|
+
assert result.exit_code == 0
|
|
380
|
+
assert len(captured_picker_options) == 1
|
|
381
|
+
assert "## Login entry" in captured_picker_options[0].preview
|
|
382
|
+
assert '"FIRST_TOKEN": "first-secret-value"' in captured_picker_options[0].preview
|
|
383
|
+
|
|
384
|
+
|
|
254
385
|
def _option_param_decls(parameter: Parameter) -> tuple[str, ...]:
|
|
255
386
|
for metadata in get_args(parameter.annotation)[1:]:
|
|
256
387
|
param_decls = getattr(metadata, "param_decls", ())
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from inspect import Parameter, signature
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import get_args
|
|
4
|
+
|
|
5
|
+
from typer.testing import CliRunner
|
|
6
|
+
|
|
7
|
+
from stackops.scripts.python.helpers.helpers_devops import cli_self
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_self_clone_command_is_registered() -> None:
|
|
11
|
+
runner = CliRunner()
|
|
12
|
+
|
|
13
|
+
help_result = runner.invoke(cli_self.get_app(), ["--help"])
|
|
14
|
+
alias_result = runner.invoke(cli_self.get_app(), ["c", "--help"])
|
|
15
|
+
|
|
16
|
+
assert help_result.exit_code == 0
|
|
17
|
+
assert "clone" in help_result.stdout
|
|
18
|
+
assert "<c>" in help_result.stdout
|
|
19
|
+
assert alias_result.exit_code == 0
|
|
20
|
+
assert "--remote" in alias_result.stdout
|
|
21
|
+
assert "--dry-run" in alias_result.stdout
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_self_clone_options_have_nice_aliases() -> None:
|
|
25
|
+
parameters = signature(cli_self.clone).parameters
|
|
26
|
+
expected_aliases = {
|
|
27
|
+
"remote": "-r",
|
|
28
|
+
"branch": "-b",
|
|
29
|
+
"depth": "-d",
|
|
30
|
+
"pull": "-p",
|
|
31
|
+
"install_editable": "-i",
|
|
32
|
+
"dry_run": "-n",
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
for parameter_name, alias in expected_aliases.items():
|
|
36
|
+
assert alias in _option_param_decls(parameters[parameter_name])
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_self_clone_defaults_to_current_directory(tmp_path: Path, monkeypatch) -> None:
|
|
40
|
+
monkeypatch.chdir(tmp_path)
|
|
41
|
+
|
|
42
|
+
result = CliRunner().invoke(
|
|
43
|
+
cli_self.get_app(),
|
|
44
|
+
["clone", "--dry-run", "--ssh", "--branch", "main", "--depth", "1"],
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
assert result.exit_code == 0
|
|
48
|
+
assert f"git clone --branch main --depth 1 git@github.com:thisismygitrepo/stackops.git {tmp_path}" in result.stdout
|
|
49
|
+
assert "Dry run only" in result.stdout
|
|
50
|
+
assert not tmp_path.joinpath(".git").exists()
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _option_param_decls(parameter: Parameter) -> tuple[str, ...]:
|
|
54
|
+
for metadata in get_args(parameter.annotation)[1:]:
|
|
55
|
+
param_decls = getattr(metadata, "param_decls", ())
|
|
56
|
+
if param_decls:
|
|
57
|
+
return tuple(param_decls)
|
|
58
|
+
raise AssertionError(f"Parameter has no Typer option metadata: {parameter.name}")
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import ast
|
|
4
|
+
from collections import defaultdict
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
9
|
+
SOURCE_ROOT = REPO_ROOT / "src" / "stackops"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_typer_options_have_single_letter_short_aliases_only() -> None:
|
|
13
|
+
failures: list[str] = []
|
|
14
|
+
|
|
15
|
+
for path in sorted(SOURCE_ROOT.rglob("*.py")):
|
|
16
|
+
tree = ast.parse(path.read_text(encoding="utf-8"), filename=path.as_posix())
|
|
17
|
+
visitor = _TyperOptionVisitor(path=path.relative_to(REPO_ROOT))
|
|
18
|
+
visitor.visit(tree)
|
|
19
|
+
failures.extend(visitor.failures)
|
|
20
|
+
|
|
21
|
+
assert failures == []
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_checked_in_cli_hierarchy_short_names_are_single_letter() -> None:
|
|
25
|
+
failures: list[str] = []
|
|
26
|
+
for path in [
|
|
27
|
+
SOURCE_ROOT / "utils" / "cli_utils" / "hierarchy.py",
|
|
28
|
+
SOURCE_ROOT / "utils" / "cli_utils" / "hierarchy_types.py",
|
|
29
|
+
]:
|
|
30
|
+
tree = ast.parse(path.read_text(encoding="utf-8"), filename=path.as_posix())
|
|
31
|
+
for node in ast.walk(tree):
|
|
32
|
+
if not isinstance(node, ast.Dict):
|
|
33
|
+
continue
|
|
34
|
+
for key, value in zip(node.keys, node.values, strict=False):
|
|
35
|
+
if _string_literal_value(key) != "short_name":
|
|
36
|
+
continue
|
|
37
|
+
short_name = _literal_string_value(value)
|
|
38
|
+
if short_name is not None and len(short_name) != 1:
|
|
39
|
+
failures.append(f"{path.relative_to(REPO_ROOT)}:{value.lineno} short_name is not one letter: {short_name!r}")
|
|
40
|
+
|
|
41
|
+
assert failures == []
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class _TyperOptionVisitor(ast.NodeVisitor):
|
|
45
|
+
def __init__(self, path: Path) -> None:
|
|
46
|
+
self.path = path
|
|
47
|
+
self.function_stack: list[str] = []
|
|
48
|
+
self.option_declarations_by_function: dict[str, list[_OptionDeclaration]] = defaultdict(list)
|
|
49
|
+
self.failures: list[str] = []
|
|
50
|
+
|
|
51
|
+
def visit_FunctionDef(self, node: ast.FunctionDef) -> None:
|
|
52
|
+
self.function_stack.append(node.name)
|
|
53
|
+
self.generic_visit(node)
|
|
54
|
+
function_name = ".".join(self.function_stack)
|
|
55
|
+
self._record_duplicate_short_aliases(function_name=function_name)
|
|
56
|
+
self.function_stack.pop()
|
|
57
|
+
|
|
58
|
+
def visit_Call(self, node: ast.Call) -> None:
|
|
59
|
+
self._check_hidden_command_alias(node)
|
|
60
|
+
if _is_typer_option_call(node):
|
|
61
|
+
option_strings = [value for arg in node.args if (value := _string_literal_value(arg)) is not None]
|
|
62
|
+
short_aliases = [part for option in option_strings for part in _short_option_parts(option)]
|
|
63
|
+
one_letter_aliases = [alias for alias in short_aliases if len(alias) == 2]
|
|
64
|
+
multi_letter_aliases = [alias for alias in short_aliases if len(alias) > 2]
|
|
65
|
+
function_name = ".".join(self.function_stack) or "<module>"
|
|
66
|
+
declaration = _OptionDeclaration(lineno=node.lineno, function_name=function_name, option_strings=option_strings, short_aliases=one_letter_aliases)
|
|
67
|
+
self.option_declarations_by_function[function_name].append(declaration)
|
|
68
|
+
|
|
69
|
+
if not one_letter_aliases:
|
|
70
|
+
self.failures.append(f"{self.path}:{node.lineno} {function_name} has no one-letter short alias: {option_strings}")
|
|
71
|
+
if multi_letter_aliases:
|
|
72
|
+
self.failures.append(f"{self.path}:{node.lineno} {function_name} has multi-letter short alias: {multi_letter_aliases}")
|
|
73
|
+
|
|
74
|
+
self.generic_visit(node)
|
|
75
|
+
|
|
76
|
+
def _check_hidden_command_alias(self, node: ast.Call) -> None:
|
|
77
|
+
if not _is_typer_command_or_group_call(node):
|
|
78
|
+
return
|
|
79
|
+
if not _is_hidden_call(node):
|
|
80
|
+
return
|
|
81
|
+
command_name = _command_or_group_name(node)
|
|
82
|
+
if command_name is not None and len(command_name) != 1:
|
|
83
|
+
function_name = ".".join(self.function_stack) or "<module>"
|
|
84
|
+
self.failures.append(f"{self.path}:{node.lineno} {function_name} hidden command alias is not one letter: {command_name!r}")
|
|
85
|
+
|
|
86
|
+
def _record_duplicate_short_aliases(self, function_name: str) -> None:
|
|
87
|
+
declarations = self.option_declarations_by_function.get(function_name, [])
|
|
88
|
+
aliases_to_declarations: dict[str, list[_OptionDeclaration]] = defaultdict(list)
|
|
89
|
+
for declaration in declarations:
|
|
90
|
+
for alias in declaration.short_aliases:
|
|
91
|
+
aliases_to_declarations[alias].append(declaration)
|
|
92
|
+
|
|
93
|
+
for alias, alias_declarations in aliases_to_declarations.items():
|
|
94
|
+
if len(alias_declarations) < 2:
|
|
95
|
+
continue
|
|
96
|
+
locations = ", ".join(f"line {declaration.lineno}: {declaration.option_strings}" for declaration in alias_declarations)
|
|
97
|
+
self.failures.append(f"{self.path} {function_name} duplicates {alias}: {locations}")
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class _OptionDeclaration:
|
|
101
|
+
def __init__(self, *, lineno: int, function_name: str, option_strings: list[str], short_aliases: list[str]) -> None:
|
|
102
|
+
self.lineno = lineno
|
|
103
|
+
self.function_name = function_name
|
|
104
|
+
self.option_strings = option_strings
|
|
105
|
+
self.short_aliases = short_aliases
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def _is_typer_option_call(node: ast.AST) -> bool:
|
|
109
|
+
return (
|
|
110
|
+
isinstance(node, ast.Call)
|
|
111
|
+
and isinstance(node.func, ast.Attribute)
|
|
112
|
+
and node.func.attr == "Option"
|
|
113
|
+
and isinstance(node.func.value, ast.Name)
|
|
114
|
+
and node.func.value.id == "typer"
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _is_typer_command_or_group_call(node: ast.AST) -> bool:
|
|
119
|
+
return isinstance(node.func, ast.Attribute) and node.func.attr in {"command", "add_typer"}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _is_hidden_call(node: ast.Call) -> bool:
|
|
123
|
+
for keyword in node.keywords:
|
|
124
|
+
if keyword.arg == "hidden" and isinstance(keyword.value, ast.Constant):
|
|
125
|
+
return keyword.value.value is True
|
|
126
|
+
return False
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def _command_or_group_name(node: ast.Call) -> str | None:
|
|
130
|
+
if node.args and (value := _string_literal_value(node.args[0])) is not None:
|
|
131
|
+
return value
|
|
132
|
+
for keyword in node.keywords:
|
|
133
|
+
if keyword.arg == "name":
|
|
134
|
+
return _string_literal_value(keyword.value)
|
|
135
|
+
return None
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _string_literal_value(node: ast.AST) -> str | None:
|
|
139
|
+
if isinstance(node, ast.Constant) and isinstance(node.value, str):
|
|
140
|
+
return node.value
|
|
141
|
+
return None
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _literal_string_value(node: ast.AST) -> str | None:
|
|
145
|
+
value = _string_literal_value(node)
|
|
146
|
+
if value is not None:
|
|
147
|
+
return value
|
|
148
|
+
if isinstance(node, ast.Subscript) and isinstance(node.value, ast.Name) and node.value.id == "Literal":
|
|
149
|
+
return _string_literal_value(node.slice)
|
|
150
|
+
return None
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def _short_option_parts(option_string: str) -> list[str]:
|
|
154
|
+
if not option_string.startswith("-") or option_string.startswith("--"):
|
|
155
|
+
return []
|
|
156
|
+
return [part for part in option_string.split("/") if part.startswith("-") and not part.startswith("--")]
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
from inspect import signature
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
from typer.testing import CliRunner
|
|
5
|
+
|
|
6
|
+
from stackops.jobs.scripts_dynamic import download_stackops_offline_installer
|
|
7
|
+
from stackops.scripts.python.helpers.helpers_devops import cli_self
|
|
8
|
+
from stackops.utils.installer_utils import installer_offline_constants, installer_offline_publish
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def test_offline_installer_defaults_live_under_stackops_config_root() -> None:
|
|
12
|
+
expected_output_root = Path.home().joinpath(".config", "stackops", "offline_installers")
|
|
13
|
+
|
|
14
|
+
assert installer_offline_constants.DEFAULT_OUTPUT_ROOT == expected_output_root
|
|
15
|
+
assert signature(cli_self.export).parameters["output_root"].default == expected_output_root
|
|
16
|
+
assert download_stackops_offline_installer.DEFAULT_OUTPUT_DIR == expected_output_root / "stackops-offline-installer"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def test_offline_installer_upload_mirrors_home_relative_output_path(tmp_path: Path, monkeypatch) -> None:
|
|
20
|
+
captured_remote_paths: list[Path] = []
|
|
21
|
+
url_map_path = tmp_path / "download_stackops_offline_installer.json"
|
|
22
|
+
url_map_path.write_text("{}\n", encoding="utf-8")
|
|
23
|
+
|
|
24
|
+
def fake_to_cloud(
|
|
25
|
+
*,
|
|
26
|
+
local_path: Path,
|
|
27
|
+
cloud: str,
|
|
28
|
+
remote_path: Path,
|
|
29
|
+
share: bool,
|
|
30
|
+
verbose: bool,
|
|
31
|
+
transfers: int,
|
|
32
|
+
) -> str:
|
|
33
|
+
_ = local_path, cloud, share, verbose, transfers
|
|
34
|
+
captured_remote_paths.append(remote_path)
|
|
35
|
+
return "https://drive.google.com/file/d/example/view"
|
|
36
|
+
|
|
37
|
+
monkeypatch.setattr(installer_offline_publish.rclone_wrapper, "to_cloud", fake_to_cloud)
|
|
38
|
+
monkeypatch.setattr(installer_offline_publish, "_resolve_url_map_path", lambda: url_map_path)
|
|
39
|
+
|
|
40
|
+
archive_path = installer_offline_constants.DEFAULT_OUTPUT_ROOT / "stackops-offline-installer-linux-x86_64.zip"
|
|
41
|
+
|
|
42
|
+
installer_offline_publish.publish_archive(archive_path=archive_path, system_name="Linux", arch_name="x86_64")
|
|
43
|
+
|
|
44
|
+
assert captured_remote_paths == [
|
|
45
|
+
Path("myhome/generic_os/.config/stackops/offline_installers/stackops-offline-installer-linux-x86_64.zip")
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def test_self_download_installer_command_is_registered() -> None:
|
|
50
|
+
runner = CliRunner()
|
|
51
|
+
|
|
52
|
+
help_result = runner.invoke(cli_self.get_app(), ["download-installer", "--help"])
|
|
53
|
+
alias_result = runner.invoke(cli_self.get_app(), ["D", "--help"])
|
|
54
|
+
|
|
55
|
+
assert help_result.exit_code == 0
|
|
56
|
+
assert "--target" in help_result.stdout
|
|
57
|
+
assert "--output-dir" in help_result.stdout
|
|
58
|
+
assert alias_result.exit_code == 0
|
|
59
|
+
assert "--target" in alias_result.stdout
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_self_download_installer_invokes_dynamic_downloader(tmp_path: Path, monkeypatch) -> None:
|
|
63
|
+
captured: dict[str, object] = {}
|
|
64
|
+
|
|
65
|
+
def fake_download_installer(*, target_key: str | None, output_dir: Path | None) -> Path:
|
|
66
|
+
captured["target_key"] = target_key
|
|
67
|
+
captured["output_dir"] = output_dir
|
|
68
|
+
return output_dir or tmp_path
|
|
69
|
+
|
|
70
|
+
monkeypatch.setattr(download_stackops_offline_installer, "download_installer", fake_download_installer)
|
|
71
|
+
|
|
72
|
+
result = CliRunner().invoke(
|
|
73
|
+
cli_self.get_app(),
|
|
74
|
+
["download-installer", "--target", "linux-x64", "--output-dir", str(tmp_path)],
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
assert result.exit_code == 0
|
|
78
|
+
assert captured == {"target_key": "linux-x64", "output_dir": tmp_path}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def test_dynamic_downloader_supports_non_interactive_target(tmp_path: Path, monkeypatch) -> None:
|
|
82
|
+
url_map = {target_key: None for target_key in download_stackops_offline_installer.KNOWN_TARGETS}
|
|
83
|
+
url_map["linux-x64"] = "https://drive.google.com/file/d/example/view"
|
|
84
|
+
captured: dict[str, object] = {}
|
|
85
|
+
|
|
86
|
+
def fake_download_and_extract(*, url: str, output_dir: Path) -> None:
|
|
87
|
+
captured["url"] = url
|
|
88
|
+
captured["output_dir"] = output_dir
|
|
89
|
+
|
|
90
|
+
monkeypatch.setattr(download_stackops_offline_installer, "_load_url_map", lambda: url_map)
|
|
91
|
+
monkeypatch.setattr(download_stackops_offline_installer, "_download_and_extract", fake_download_and_extract)
|
|
92
|
+
|
|
93
|
+
output_dir = tmp_path / "installer"
|
|
94
|
+
|
|
95
|
+
resolved_output_dir = download_stackops_offline_installer.download_installer(
|
|
96
|
+
target_key="linux-x64",
|
|
97
|
+
output_dir=output_dir,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
assert resolved_output_dir == output_dir.resolve()
|
|
101
|
+
assert captured == {
|
|
102
|
+
"url": "https://drive.google.com/file/d/example/view",
|
|
103
|
+
"output_dir": output_dir.resolve(),
|
|
104
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
from datetime import date
|
|
2
|
+
|
|
3
|
+
from typer.testing import CliRunner
|
|
4
|
+
|
|
5
|
+
from stackops.scripts.python.helpers.helpers_devops import cli_self_assets, stackops_skill_refs
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
SAMPLE_GRAPH = {
|
|
9
|
+
"root": {
|
|
10
|
+
"kind": "root",
|
|
11
|
+
"name": "stackops",
|
|
12
|
+
"source": {"file": "src/stackops/scripts/python/stackops_entry.py"},
|
|
13
|
+
"children": [
|
|
14
|
+
{
|
|
15
|
+
"kind": "group",
|
|
16
|
+
"name": "devops",
|
|
17
|
+
"fullPath": "devops",
|
|
18
|
+
"source": {
|
|
19
|
+
"file": "src/stackops/scripts/python/stackops_entry.py",
|
|
20
|
+
"dispatches_to": "stackops.scripts.python.devops.get_app",
|
|
21
|
+
},
|
|
22
|
+
"aliases": [{"name": "d", "hidden": True}],
|
|
23
|
+
"children": [
|
|
24
|
+
{
|
|
25
|
+
"kind": "command",
|
|
26
|
+
"name": "install",
|
|
27
|
+
"fullPath": "devops install",
|
|
28
|
+
"source": {"file": "src/stackops/scripts/python/devops.py", "callable": "install"},
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"kind": "group",
|
|
34
|
+
"name": "type-fix",
|
|
35
|
+
"fullPath": "utils pyproject type-fix",
|
|
36
|
+
"source": {
|
|
37
|
+
"file": "src/stackops/scripts/python/helpers/helpers_utils/pyproject_utils_app.py",
|
|
38
|
+
"dispatches_to": "stackops.scripts.python.helpers.helpers_utils.type_fix.get_app",
|
|
39
|
+
},
|
|
40
|
+
"children": [],
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_cli_map_uses_canonical_tree_without_alias_nodes() -> None:
|
|
48
|
+
rendered = stackops_skill_refs.render_cli_map(
|
|
49
|
+
cli_graph_payload=SAMPLE_GRAPH,
|
|
50
|
+
project_scripts={"devops": "stackops.scripts.python.devops:main"},
|
|
51
|
+
generated_on=date(2026, 6, 9),
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
assert "Regenerated from `src/stackops/scripts/python/graph/cli_graph.json` on 2026-06-09." in rendered
|
|
55
|
+
assert "- `devops` -> `stackops.scripts.python.devops:main`" in rendered
|
|
56
|
+
assert "├─ devops" in rendered
|
|
57
|
+
assert "│ └─ install" in rendered
|
|
58
|
+
assert "└─ type-fix (callback group)" in rendered
|
|
59
|
+
assert "\n├─ d\n" not in rendered
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_source_map_links_groups_and_leaf_commands() -> None:
|
|
63
|
+
rendered = stackops_skill_refs.render_source_map(cli_graph_payload=SAMPLE_GRAPH, generated_on=date(2026, 6, 9))
|
|
64
|
+
|
|
65
|
+
assert "- `devops` -> `src/stackops/scripts/python/stackops_entry.py` -> `stackops.scripts.python.devops.get_app` via `devops`" in rendered
|
|
66
|
+
assert "- `devops install` -> `src/stackops/scripts/python/devops.py` -> `install`" in rendered
|
|
67
|
+
assert "devops self build-assets update-skill-refs" in rendered
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_update_skill_refs_command_is_registered() -> None:
|
|
71
|
+
result = CliRunner().invoke(cli_self_assets.get_app(), ["--help"])
|
|
72
|
+
|
|
73
|
+
assert result.exit_code == 0
|
|
74
|
+
assert "update-skill-refs" in result.stdout
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from datetime import date
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from stackops.utils.upgrade_packages import (
|
|
6
|
+
format_stackops_display_version,
|
|
7
|
+
get_next_stackops_version,
|
|
8
|
+
parse_stackops_calver,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_legacy_version_migrates_to_current_calver_month() -> None:
|
|
13
|
+
assert get_next_stackops_version("8.104", today=date(2026, 6, 9)) == "26.6"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_same_month_releases_increment_unbounded_release_number() -> None:
|
|
17
|
+
assert get_next_stackops_version("26.6", today=date(2026, 6, 9)) == "26.6.1"
|
|
18
|
+
assert get_next_stackops_version("26.6.500", today=date(2026, 6, 9)) == "26.6.501"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_new_month_release_resets_to_month_base_version() -> None:
|
|
22
|
+
assert get_next_stackops_version("26.6.500", today=date(2026, 7, 1)) == "26.7"
|
|
23
|
+
assert get_next_stackops_version("25.12.4", today=date(2026, 1, 1)) == "26.1"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_future_month_version_is_rejected_to_avoid_downgrade() -> None:
|
|
27
|
+
with pytest.raises(ValueError, match="later than today's release month"):
|
|
28
|
+
get_next_stackops_version("26.7", today=date(2026, 6, 9))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_display_version_keeps_v_prefix_and_canonical_month() -> None:
|
|
32
|
+
assert format_stackops_display_version("26.6") == "v26.6"
|
|
33
|
+
assert format_stackops_display_version("26.6.1") == "v26.6.1"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_calver_parser_accepts_tag_style_and_rejects_invalid_months() -> None:
|
|
37
|
+
parsed = parse_stackops_calver("v26.6.500")
|
|
38
|
+
assert parsed is not None
|
|
39
|
+
assert parsed.year == 26
|
|
40
|
+
assert parsed.month == 6
|
|
41
|
+
assert parsed.release == 500
|
|
42
|
+
assert parse_stackops_calver("8.104") is None
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Session manager helper APIs."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""tmux session manager utility APIs."""
|