stackops 8.102__tar.gz → 8.104__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (941) hide show
  1. {stackops-8.102 → stackops-8.104}/MANIFEST.in +1 -0
  2. {stackops-8.102/src/stackops.egg-info → stackops-8.104}/PKG-INFO +1 -1
  3. {stackops-8.102 → stackops-8.104}/pyproject.toml +3 -3
  4. stackops-8.104/src/manual/test_cli_config_secrets.py +259 -0
  5. stackops-8.104/src/manual/test_cli_self_docker.py +151 -0
  6. stackops-8.104/src/manual/test_herdr_backend.py +86 -0
  7. stackops-8.104/src/manual/test_path_references.py +18 -0
  8. stackops-8.104/src/manual/test_secrets_schema.py +47 -0
  9. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/remote/cloud_manager.py +3 -3
  10. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/remote/models.py +8 -9
  11. stackops-8.104/src/stackops/jobs/installer/__init__.py +1 -0
  12. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/checks/vt_utils.py +3 -5
  13. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/package_groups.py +6 -1
  14. stackops-8.104/src/stackops/profile/__init__.py +6 -0
  15. {stackops-8.102 → stackops-8.104}/src/stackops/profile/create_links.py +5 -5
  16. {stackops-8.102 → stackops-8.104}/src/stackops/profile/dotfiles_mapper.py +5 -4
  17. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/cloud.py +27 -9
  18. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/devops.py +28 -6
  19. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/fire_jobs.py +0 -4
  20. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph.json +4379 -1170
  21. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/cli_graph_app.py +9 -9
  22. stackops-8.104/src/stackops/scripts/python/graph/visualize/cli_graph_search.py +434 -0
  23. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/cli_graph_typer_app.py +8 -20
  24. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/helpers_navigator/devops_navigator.py +1 -1
  25. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_run_context.py +2 -7
  26. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_run_impl.py +1 -1
  27. stackops-8.104/src/stackops/scripts/python/helpers/helpers_agents/agents_yaml_schemas.py +28 -0
  28. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/fire_agents_help_launch.py +3 -2
  29. stackops-8.104/src/stackops/scripts/python/helpers/helpers_cloud/cloud_copy.py +452 -0
  30. stackops-8.104/src/stackops/scripts/python/helpers/helpers_cloud/cloud_helpers.py +45 -0
  31. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_cloud/cloud_mount.py +1 -1
  32. stackops-8.104/src/stackops/scripts/python/helpers/helpers_cloud/cloud_path_resolver.py +91 -0
  33. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_cloud/cloud_sync.py +5 -9
  34. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/backup_config.py +60 -8
  35. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +438 -0
  36. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_config.py +418 -0
  37. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_config_dotfile_mapper.py +449 -0
  38. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_config_dotfile_transfer.py +217 -0
  39. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_config_secrets.py +299 -0
  40. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_config_secrets_actions.py +474 -0
  41. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_config_secrets_candidates.py +323 -0
  42. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_config_secrets_support.py +484 -0
  43. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_terminal.py +10 -2
  44. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_config_tmux.py +334 -0
  45. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_data.py +316 -0
  46. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_repos.py +58 -80
  47. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self.py +72 -7
  48. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/update_installer.py +4 -4
  49. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_self_docker.py +249 -0
  50. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_share_server.py +6 -4
  51. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_share_terminal.py +9 -9
  52. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/cli_vault.py +110 -0
  53. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/devops_status_checks.py +6 -41
  54. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/devops_status_display.py +2 -2
  55. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/devops_update_repos.py +6 -44
  56. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/interactive.py +9 -7
  57. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/register_interactive.py +54 -0
  58. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/run_script.py +20 -30
  59. stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/vault.py +579 -0
  60. {stackops-8.102/src/stackops/scripts/python/helpers/helper_env → stackops-8.104/src/stackops/scripts/python/helpers/helpers_env}/env_manager_tui.py +1 -1
  61. {stackops-8.102/src/stackops/scripts/python/helpers/helper_env → stackops-8.104/src/stackops/scripts/python/helpers/helpers_env}/path_manager_tui.py +2 -2
  62. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_fire_command/fire_jobs_args_helper.py +0 -2
  63. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_fire_command/fire_jobs_impl.py +3 -9
  64. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_fire_command/fire_jobs_route_helper.py +1 -22
  65. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ftpx_impl.py +1 -1
  66. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn.py +32 -38
  67. stackops-8.102/src/stackops/scripts/python/helpers/helpers_croshell/croshell_impl.py → stackops-8.104/src/stackops/scripts/python/helpers/helpers_preview/preview_impl.py +18 -19
  68. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/cloud_repo_sync.py +16 -15
  69. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/record.py +100 -32
  70. stackops-8.104/src/stackops/scripts/python/helpers/helpers_repos/spec_store.py +119 -0
  71. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_search/script_help.py +3 -23
  72. stackops-8.104/src/stackops/scripts/python/helpers/helpers_sessions/_herdr_backend.py +446 -0
  73. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/attach_impl.py +5 -1
  74. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/kill_impl.py +5 -1
  75. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_cli_common.py +2 -1
  76. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_cli_run_aoe.py +2 -1
  77. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_layout_source.py +2 -1
  78. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_multiprocess.py +4 -9
  79. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/file_utils_app.py +106 -3
  80. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/python.py +5 -5
  81. stackops-8.104/src/stackops/scripts/python/helpers/helpers_utils/scrape.py +88 -0
  82. stackops-8.104/src/stackops/scripts/python/helpers/helpers_utils/surya.py +99 -0
  83. stackops-8.102/src/stackops/scripts/python/croshell.py → stackops-8.104/src/stackops/scripts/python/preview.py +6 -6
  84. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/stackops_entry.py +8 -10
  85. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/terminal.py +9 -4
  86. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/utils.py +1 -0
  87. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/setup/linux/interactive.sh +9 -9
  88. stackops-8.104/src/stackops/scripts/setup/linux/live_from_github.sh +35 -0
  89. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/setup/windows/interactive.ps1 +11 -11
  90. stackops-8.104/src/stackops/scripts/setup/windows/live_from_github.ps1 +38 -0
  91. stackops-8.104/src/stackops/secrets.py +165 -0
  92. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/lfrc +5 -5
  93. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/lfrc +3 -4
  94. stackops-8.104/src/stackops/settings/ollama/server.json +3 -0
  95. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/bash/init.sh +7 -5
  96. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/nushell/init.nu +2 -3
  97. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/pwsh/init.ps1 +2 -2
  98. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/vtm/settings.xml +1 -1
  99. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/zsh/init.sh +8 -6
  100. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/keymap_darwin.toml +3 -3
  101. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/keymap_linux.toml +3 -3
  102. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/keymap_windows.toml +3 -3
  103. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/scripts/interactive_view.py +1 -1
  104. {stackops-8.102 → stackops-8.104}/src/stackops/utils/cli_utils/hierarchy.py +11 -11
  105. {stackops-8.102 → stackops-8.104}/src/stackops/utils/cli_utils/hierarchy_types.py +9 -9
  106. stackops-8.104/src/stackops/utils/cloud_defaults.py +31 -0
  107. stackops-8.104/src/stackops/utils/encryption.py +14 -0
  108. stackops-8.104/src/stackops/utils/files/notebook.py +48 -0
  109. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_class.py +3 -0
  110. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_offline_constants.py +1 -1
  111. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_offline_scripts.py +1 -1
  112. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_runner.py +3 -3
  113. {stackops-8.102 → stackops-8.104}/src/stackops/utils/io.py +56 -0
  114. {stackops-8.102 → stackops-8.104}/src/stackops/utils/notifications.py +60 -88
  115. {stackops-8.102 → stackops-8.104}/src/stackops/utils/options_utils/textual_options_form_types.py +2 -2
  116. {stackops-8.102 → stackops-8.104}/src/stackops/utils/path_compression.py +7 -1
  117. stackops-8.104/src/stackops/utils/python_env.py +27 -0
  118. stackops-8.104/src/stackops/utils/schemas/__init__.py +1 -0
  119. stackops-8.104/src/stackops/utils/schemas/agents/__init__.py +2 -0
  120. stackops-8.104/src/stackops/utils/schemas/agents/parallel.schema.json +192 -0
  121. stackops-8.104/src/stackops/utils/schemas/agents/prompts.schema.json +84 -0
  122. stackops-8.104/src/stackops/utils/schemas/config/__init__.py +14 -0
  123. stackops-8.104/src/stackops/utils/schemas/config/config.json +7 -0
  124. stackops-8.104/src/stackops/utils/schemas/config/config.schema.json +38 -0
  125. stackops-8.104/src/stackops/utils/schemas/config/config_types.py +16 -0
  126. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/installer/__init__.py +1 -0
  127. {stackops-8.102/src/stackops/jobs → stackops-8.104/src/stackops/utils/schemas}/installer/installer_data.json +246 -29
  128. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/layouts/layout.json +1 -1
  129. stackops-8.104/src/stackops/utils/schemas/mapper/__init__.py +4 -0
  130. stackops-8.102/src/stackops/profile/mapper_data.schema.json → stackops-8.104/src/stackops/utils/schemas/mapper/data.schema.json +59 -1
  131. stackops-8.102/src/stackops/profile/mapper_data.yaml → stackops-8.104/src/stackops/utils/schemas/mapper/data.yaml +28 -2
  132. stackops-8.102/src/stackops/profile/mapper_dotfiles.schema.json → stackops-8.104/src/stackops/utils/schemas/mapper/dotfiles.schema.json +4 -4
  133. stackops-8.102/src/stackops/profile/mapper_dotfiles.yaml → stackops-8.104/src/stackops/utils/schemas/mapper/dotfiles.yaml +33 -25
  134. stackops-8.104/src/stackops/utils/schemas/secrets/__init__.py +2 -0
  135. stackops-8.104/src/stackops/utils/schemas/secrets/secrets.example.json +49 -0
  136. stackops-8.104/src/stackops/utils/schemas/secrets/secrets.schema.json +182 -0
  137. stackops-8.104/src/stackops/utils/schemas/secrets/secrets_loader.py +227 -0
  138. stackops-8.104/src/stackops/utils/schemas/secrets/secrets_types.py +38 -0
  139. stackops-8.104/src/stackops/utils/source_of_truth.py +207 -0
  140. {stackops-8.102 → stackops-8.104}/src/stackops/utils/ssh_utils/abc.py +1 -1
  141. {stackops-8.102 → stackops-8.104/src/stackops.egg-info}/PKG-INFO +1 -1
  142. {stackops-8.102 → stackops-8.104}/src/stackops.egg-info/SOURCES.txt +64 -32
  143. {stackops-8.102 → stackops-8.104}/src/stackops.egg-info/entry_points.txt +1 -1
  144. {stackops-8.102 → stackops-8.104}/src/stackops.egg-info/top_level.txt +1 -0
  145. stackops-8.102/src/stackops/jobs/installer/__init__.py +0 -2
  146. stackops-8.102/src/stackops/profile/__init__.py +0 -4
  147. stackops-8.102/src/stackops/scripts/python/graph/visualize/cli_graph_search.py +0 -219
  148. stackops-8.102/src/stackops/scripts/python/helpers/helpers_agents/agents_yaml_schemas.py +0 -131
  149. stackops-8.102/src/stackops/scripts/python/helpers/helpers_cloud/cloud_copy.py +0 -341
  150. stackops-8.102/src/stackops/scripts/python/helpers/helpers_cloud/cloud_helpers.py +0 -100
  151. stackops-8.102/src/stackops/scripts/python/helpers/helpers_cloud/helpers2.py +0 -171
  152. stackops-8.102/src/stackops/scripts/python/helpers/helpers_cloud/helpers5.py +0 -50
  153. stackops-8.102/src/stackops/scripts/python/helpers/helpers_devops/cli_backup_retrieve.py +0 -239
  154. stackops-8.102/src/stackops/scripts/python/helpers/helpers_devops/cli_config.py +0 -256
  155. stackops-8.102/src/stackops/scripts/python/helpers/helpers_devops/cli_config_dotfile.py +0 -472
  156. stackops-8.102/src/stackops/scripts/python/helpers/helpers_devops/cli_data.py +0 -157
  157. stackops-8.102/src/stackops/utils/source_of_truth.py +0 -35
  158. stackops-8.102/src/stackops/utils/ve.py +0 -94
  159. stackops-8.102/src/stackops/utils/ve_schema.py +0 -85
  160. stackops-8.102/tests/test_cli_graph_lazy_dispatch.py +0 -24
  161. stackops-8.102/tests/test_install_request_logic.py +0 -18
  162. stackops-8.102/tests/test_installer_explore.py +0 -51
  163. stackops-8.102/tests/test_layout_maker_stagger.py +0 -76
  164. stackops-8.102/tests/test_oz_agent_support.py +0 -75
  165. stackops-8.102/tests/test_rmpc_installer.py +0 -43
  166. {stackops-8.102 → stackops-8.104}/README.md +0 -0
  167. {stackops-8.102 → stackops-8.104}/setup.cfg +0 -0
  168. {stackops-8.102 → stackops-8.104}/src/stackops/__init__.py +0 -0
  169. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/__init__.py +0 -0
  170. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/remote/__init__.py +0 -0
  171. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/remote/data_transfer.py +0 -0
  172. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/remote/distribute.py +0 -0
  173. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/remote/execution_script.py +0 -0
  174. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/remote/file_manager.py +0 -0
  175. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/remote/job_params.py +0 -0
  176. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/remote/notification.py +0 -0
  177. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/remote/remote_machine.py +0 -0
  178. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/__init__.py +0 -0
  179. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/helpers/enhanced_command_runner.py +0 -0
  180. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/helpers/load_balancer_helper.py +0 -0
  181. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/session_conflict.py +0 -0
  182. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/session_exit_mode.py +0 -0
  183. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/tmux/__init__.py +0 -0
  184. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/tmux/tmux_local.py +0 -0
  185. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/tmux/tmux_local_manager.py +0 -0
  186. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/tmux/tmux_utils/tmux_common.py +0 -0
  187. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/tmux/tmux_utils/tmux_execution.py +0 -0
  188. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/tmux/tmux_utils/tmux_layout.py +0 -0
  189. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/tmux/tmux_utils/tmux_status.py +0 -0
  190. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/utils/__init__.py +0 -0
  191. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/utils/load_balancer.py +0 -0
  192. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/utils/maker.py +0 -0
  193. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/__init__.py +0 -0
  194. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_local.py +0 -0
  195. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_local_manager.py +0 -0
  196. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_remote.py +0 -0
  197. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_remote_manager.py +0 -0
  198. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/examples/__init__.py +0 -0
  199. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/examples/wt_local_manager_demo.py +0 -0
  200. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/layout_generator.py +0 -0
  201. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/local_monitoring.py +0 -0
  202. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/manager_persistence.py +0 -0
  203. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/monitoring_helpers.py +0 -0
  204. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/process_monitor.py +0 -0
  205. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/remote_executor.py +0 -0
  206. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/session_manager.py +0 -0
  207. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/status_reporter.py +0 -0
  208. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/status_reporting.py +0 -0
  209. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/windows_terminal/wt_utils/wt_helpers.py +0 -0
  210. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/__init__.py +0 -0
  211. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_local.py +0 -0
  212. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_local_manager.py +0 -0
  213. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_remote.py +0 -0
  214. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_remote_manager.py +0 -0
  215. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/example_usage.py +0 -0
  216. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/layout_generator.py +0 -0
  217. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/monitoring_types.py +0 -0
  218. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/process_monitor.py +0 -0
  219. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/remote_executor.py +0 -0
  220. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/session_manager.py +0 -0
  221. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/status_reporter.py +0 -0
  222. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/zellij_local_helper.py +0 -0
  223. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/zellij_local_helper_restart.py +0 -0
  224. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/zellij_local_helper_with_panes.py +0 -0
  225. {stackops-8.102 → stackops-8.104}/src/stackops/cluster/sessions_managers/zellij/zellij_utils/zellij_local_manager_helper.py +0 -0
  226. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/__init__.py +0 -0
  227. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/agents/mcps/__init__.py +0 -0
  228. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/agents/mcps/mcp.json +0 -0
  229. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/agents/mcps/mcp.schema.json +0 -0
  230. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/checks/__init__.py +0 -0
  231. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/checks/check_installations.py +0 -0
  232. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/checks/install_utils.py +0 -0
  233. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/checks/report_utils.py +0 -0
  234. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/checks/security_cli.py +0 -0
  235. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/checks/security_helper.py +0 -0
  236. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/__init__.py +0 -0
  237. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/brave.sh +0 -0
  238. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/cloudflare_warp_cli.sh +0 -0
  239. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/edge.sh +0 -0
  240. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/network.sh +0 -0
  241. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/ngrok.sh +0 -0
  242. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/oz.sh +0 -0
  243. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/q.sh +0 -0
  244. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/redis.sh +0 -0
  245. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/sysabc_macos.sh +0 -0
  246. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/sysabc_ubuntu.sh +0 -0
  247. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/vscode.sh +0 -0
  248. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/linux_scripts/wezterm.sh +0 -0
  249. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/macos_scripts/__init__.py +0 -0
  250. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/powershell_scripts/__init__.py +0 -0
  251. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/powershell_scripts/nerdfonts.ps1 +0 -0
  252. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/powershell_scripts/sysabc.ps1 +0 -0
  253. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/powershell_scripts/texlive.ps1 +0 -0
  254. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/__init__.py +0 -0
  255. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/alacritty.py +0 -0
  256. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/boxes.py +0 -0
  257. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/brave.py +0 -0
  258. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/bypass_paywall.py +0 -0
  259. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/cloudflare_warp_cli.py +0 -0
  260. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/code.py +0 -0
  261. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/cursor.py +0 -0
  262. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/docker.py +0 -0
  263. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/dubdb_adbc.py +0 -0
  264. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/espanso.py +0 -0
  265. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/goes.py +0 -0
  266. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/hx.py +0 -0
  267. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/lvim.py +0 -0
  268. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/main_protocol.py +0 -0
  269. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/nerdfont.py +0 -0
  270. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/orca.py +0 -0
  271. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/poppler.py +0 -0
  272. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/redis.py +0 -0
  273. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/rmpc.py +0 -0
  274. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/sysabc.py +0 -0
  275. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/termusic.py +0 -0
  276. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/wezterm.py +0 -0
  277. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/winget.py +0 -0
  278. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/yazi.py +0 -0
  279. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/youtube_tui.py +0 -0
  280. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/python_scripts/ytui_music.py +0 -0
  281. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/installer/todo.md +0 -0
  282. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/scripts/bash_scripts/__init__.py +0 -0
  283. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/scripts/bash_scripts/hollywood.sh +0 -0
  284. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/scripts/bash_scripts/lid.sh +0 -0
  285. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/scripts/bash_scripts/weather +0 -0
  286. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/scripts/powershell_scripts/__init__.py +0 -0
  287. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/scripts/powershell_scripts/cmatrix.ps1 +0 -0
  288. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/scripts/powershell_scripts/weather.ps1 +0 -0
  289. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/scripts_dynamic/__init__.py +0 -0
  290. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/scripts_dynamic/download_stackops_offline_installer.json +0 -0
  291. {stackops-8.102 → stackops-8.104}/src/stackops/jobs/scripts_dynamic/download_stackops_offline_installer.py +0 -0
  292. /stackops-8.102/src/stackops/jobs/scripts_dynamic/a.py → /stackops-8.104/src/stackops/jobs/scripts_dynamic/system_compute_analyzer.py +0 -0
  293. {stackops-8.102 → stackops-8.104}/src/stackops/logger.py +0 -0
  294. {stackops-8.102 → stackops-8.104}/src/stackops/profile/create_helper.py +0 -0
  295. {stackops-8.102 → stackops-8.104}/src/stackops/profile/create_links_export.py +0 -0
  296. {stackops-8.102 → stackops-8.104}/src/stackops/profile/create_shell_profile.py +0 -0
  297. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/__init__.py +0 -0
  298. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/linux/__init__.py +0 -0
  299. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/linux/wrap_stackops +0 -0
  300. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/nu/__init__.py +0 -0
  301. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/nu/wrap_stackops.nu +0 -0
  302. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/__init__.py +0 -0
  303. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/agents.py +0 -0
  304. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/agents_browser.py +0 -0
  305. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/agents_parallel.py +0 -0
  306. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/agents_parallel_commands.py +0 -0
  307. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/agents_parallel_run_command.py +0 -0
  308. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/__init__.py +0 -0
  309. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/initai.py +0 -0
  310. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/__init__.py +0 -0
  311. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/command_runner.ps1 +0 -0
  312. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/command_runner.sh +0 -0
  313. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/dashboard.py +0 -0
  314. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/lint_and_type_check.py +0 -0
  315. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/models.py +0 -0
  316. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/models_config.py +0 -0
  317. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/models_diagnostics.py +0 -0
  318. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/models_json.py +0 -0
  319. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/models_reports.py +0 -0
  320. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/scripts/paths.py +0 -0
  321. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/__init__.py +0 -0
  322. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/antigravity/__init__.py +0 -0
  323. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/antigravity/antigravity.py +0 -0
  324. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/auggie/__init__.py +0 -0
  325. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/auggie/auggie.py +0 -0
  326. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/claude/claude.py +0 -0
  327. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/cline/cline.py +0 -0
  328. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/codex/__init__.py +0 -0
  329. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/codex/codex.py +0 -0
  330. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/codex/config.toml +0 -0
  331. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/__init__.py +0 -0
  332. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/agents/Thinking-Beast-Mode.agent.md +0 -0
  333. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/agents/Ultimate-Transparent-Thinking-Beast-Mode.agent.md +0 -0
  334. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/agents/__init__.py +0 -0
  335. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/agents/deepResearch.agent.md +0 -0
  336. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/github_copilot.py +0 -0
  337. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/instructions/archive/__init__.py +0 -0
  338. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/instructions/archive/watch_exec.prompt.md +0 -0
  339. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/instructions/python/__init__.py +0 -0
  340. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/instructions/python/dev.instructions.md +0 -0
  341. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/prompts/__init__.py +0 -0
  342. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/prompts/pyright_fix.md +0 -0
  343. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/copilot/prompts/research-report-skeleton.prompt.md +0 -0
  344. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/crush/__init__.py +0 -0
  345. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/crush/crush.json +0 -0
  346. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/crush/crush.py +0 -0
  347. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/crush/privacy.md +0 -0
  348. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/cursor/cursors.py +0 -0
  349. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/droid/__init__.py +0 -0
  350. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/droid/droid.py +0 -0
  351. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/forge/__init__.py +0 -0
  352. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/forge/forge.py +0 -0
  353. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/kilocode/__init__.py +0 -0
  354. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/kilocode/kilocode.py +0 -0
  355. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/kilocode/privacy.md +0 -0
  356. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/opencode/__init__.py +0 -0
  357. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/opencode/opencode.jsonc +0 -0
  358. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/opencode/opencode.py +0 -0
  359. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/oz/__init__.py +0 -0
  360. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/oz/oz.py +0 -0
  361. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/pi/__init__.py +0 -0
  362. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/pi/pi.py +0 -0
  363. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/q/__init__.py +0 -0
  364. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/q/amazon_q.py +0 -0
  365. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/qwen_code/__init__.py +0 -0
  366. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/qwen_code/qwen_code.py +0 -0
  367. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/warp/__init__.py +0 -0
  368. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/solutions/warp/warp.py +0 -0
  369. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/utils/__init__.py +0 -0
  370. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/utils/generate_files.py +0 -0
  371. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/utils/generic.py +0 -0
  372. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/utils/shared.py +0 -0
  373. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ai/utils/vscode_tasks.py +0 -0
  374. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/enums.py +0 -0
  375. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/ftpx.py +0 -0
  376. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/__init__.py +0 -0
  377. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_apps.py +0 -0
  378. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_eval.py +0 -0
  379. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_node_utils.py +0 -0
  380. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_nodes.py +0 -0
  381. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_registration.py +0 -0
  382. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_resolver.py +0 -0
  383. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_shared.py +0 -0
  384. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_signature.py +0 -0
  385. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_targets.py +0 -0
  386. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_tree.py +0 -0
  387. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/cli_graph_values.py +0 -0
  388. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/generate_cli_graph.py +0 -0
  389. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/__init__.py +0 -0
  390. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/dot_export.py +0 -0
  391. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/graph_data.py +0 -0
  392. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/graph_paths.py +0 -0
  393. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/helpers_navigator/__init__.py +0 -0
  394. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/helpers_navigator/cli_graph_loader.py +0 -0
  395. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/helpers_navigator/command_builder.py +0 -0
  396. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/helpers_navigator/command_detail.py +0 -0
  397. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/helpers_navigator/command_tree.py +0 -0
  398. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/helpers_navigator/data_models.py +0 -0
  399. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/helpers_navigator/main_app.py +0 -0
  400. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/helpers_navigator/search_bar.py +0 -0
  401. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/plotly_browser.py +0 -0
  402. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/plotly_views.py +0 -0
  403. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/graph/visualize/rich_tree.py +0 -0
  404. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/__init__.py +0 -0
  405. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/__init__.py +0 -0
  406. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agent_impl_interactive/__init__.py +0 -0
  407. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agent_impl_interactive/common.py +0 -0
  408. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agent_impl_interactive/create_options.py +0 -0
  409. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agent_impl_interactive/main.py +0 -0
  410. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/__init__.py +0 -0
  411. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_codex.py +0 -0
  412. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_copilot.py +0 -0
  413. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.json +0 -0
  414. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_crush.py +0 -0
  415. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_cursor_agents.py +0 -0
  416. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_pi.py +0 -0
  417. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agentic_frameworks/fire_qwen.py +0 -0
  418. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_ask_impl.py +0 -0
  419. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_browser_constants.py +0 -0
  420. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_browser_guides.py +0 -0
  421. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_browser_impl.py +0 -0
  422. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_browser_resolution.py +0 -0
  423. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_create_artifacts.py +0 -0
  424. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_create_inputs.py +0 -0
  425. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_impl.py +0 -0
  426. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_mcp_impl.py +0 -0
  427. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_parallel_add_entry.py +0 -0
  428. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_parallel_run_config.py +0 -0
  429. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_parallel_run_impl.py +0 -0
  430. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_parallel_run_yaml.py +0 -0
  431. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_parallel_yaml_defaults.py +0 -0
  432. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_rich_output.py +0 -0
  433. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_shell.py +0 -0
  434. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/agents_skill_impl.py +0 -0
  435. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/__init__.py +0 -0
  436. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/agent-browser.md +0 -0
  437. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/chrome-devtools-mcp-browser-url.mcp.json +0 -0
  438. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/chrome-devtools-mcp.mcp.json +0 -0
  439. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/chrome-devtools-mcp.md +0 -0
  440. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp-cdp.mcp.json +0 -0
  441. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp-extension.mcp.json +0 -0
  442. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp-storage-state.mcp.json +0 -0
  443. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp-user-data-dir.mcp.json +0 -0
  444. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp.mcp.json +0 -0
  445. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/browser_guides/playwright-mcp.md +0 -0
  446. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/fire_agents_help_search.py +0 -0
  447. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/fire_agents_helper_types.py +0 -0
  448. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/fire_agents_load_balancer.py +0 -0
  449. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/mcp_catalog.py +0 -0
  450. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/mcp_install.py +0 -0
  451. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/mcp_types.py +0 -0
  452. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/aichat/__init__.py +0 -0
  453. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/aichat/config.yaml +0 -0
  454. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/aider/.aider.conf.yml +0 -0
  455. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/auggie/__init__.py +0 -0
  456. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/auggie/auggie_privacy.py +0 -0
  457. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/chatgpt/__init__.py +0 -0
  458. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/chatgpt/chatgpt_privacy.py +0 -0
  459. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/cline/__init__.py +0 -0
  460. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/cline/cline_privacy.py +0 -0
  461. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/codex/__init__.py +0 -0
  462. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/codex/codex_privacy.py +0 -0
  463. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/common/__init__.py +0 -0
  464. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/common/privacy_orchestrator.py +0 -0
  465. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/copilot/__init__.py +0 -0
  466. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/copilot/config.yml +0 -0
  467. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/crush/__init__.py +0 -0
  468. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/crush/crush.json +0 -0
  469. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/cursor/__init__.py +0 -0
  470. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/cursor/cursor_privacy.py +0 -0
  471. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/droid/__init__.py +0 -0
  472. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/droid/droid_privacy.py +0 -0
  473. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/kilocode/__init__.py +0 -0
  474. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/kilocode/kilocode_privacy.py +0 -0
  475. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/mods/__init__.py +0 -0
  476. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/mods/mods_privacy.py +0 -0
  477. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/opencode/__init__.py +0 -0
  478. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/q/__init__.py +0 -0
  479. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/q/q_privacy.py +0 -0
  480. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/qwen/__init__.py +0 -0
  481. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/configs/qwen/qwen_privacy.py +0 -0
  482. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/privacy/privacy.py +0 -0
  483. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/reasoning_capabilities.py +0 -0
  484. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/templates/__init__.py +0 -0
  485. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/templates/prompt.txt +0 -0
  486. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/templates/template.ps1 +0 -0
  487. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_agents/templates/template.sh +0 -0
  488. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_cloud/__init__.py +0 -0
  489. /stackops-8.102/src/stackops/scripts/python/helpers/helpers_cloud/cloud_mont_tmux.py → /stackops-8.104/src/stackops/scripts/python/helpers/helpers_cloud/cloud_mount_tmux.py +0 -0
  490. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_cloud/cloud_mount_zellij.py +0 -0
  491. {stackops-8.102/src/stackops/scripts/python/helpers/helpers_croshell → stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops}/__init__.py +0 -0
  492. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_config_mount.py +0 -0
  493. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_device.py +0 -0
  494. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_nw.py +0 -0
  495. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_nw_vscode_share.py +0 -0
  496. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/__init__.py +0 -0
  497. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/app.py +0 -0
  498. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/update_docs.py +0 -0
  499. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/update_logic.py +0 -0
  500. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/update_test.py +0 -0
  501. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/workflow_capture.py +0 -0
  502. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_ai/workflows_yaml.py +0 -0
  503. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_assets.py +0 -0
  504. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_self_docs.py +0 -0
  505. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_share_file.py +0 -0
  506. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_share_temp.py +0 -0
  507. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/cli_ssh.py +0 -0
  508. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/devops_status.py +0 -0
  509. {stackops-8.102/src/stackops/scripts/python/helpers/helpers_devops → stackops-8.104/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers}/__init__.py +0 -0
  510. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/commands.py +0 -0
  511. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/device_entry.py +0 -0
  512. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/devices.py +0 -0
  513. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/linux.py +0 -0
  514. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/macos.py +0 -0
  515. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/selection.py +0 -0
  516. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/utils.py +0 -0
  517. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers/windows.py +0 -0
  518. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/themes/__init__.py +0 -0
  519. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/themes/choose_pwsh_theme.ps1 +0 -0
  520. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.ps1 +0 -0
  521. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/themes/choose_starship_theme.sh +0 -0
  522. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/themes/choose_wezterm_theme.py +0 -0
  523. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_devops/themes/choose_windows_terminal_theme.ps1 +0 -0
  524. {stackops-8.102/src/stackops/scripts/python/helpers/helper_env → stackops-8.104/src/stackops/scripts/python/helpers/helpers_env}/__init__.py +0 -0
  525. {stackops-8.102/src/stackops/scripts/python/helpers/helper_env → stackops-8.104/src/stackops/scripts/python/helpers/helpers_env}/path_manager_backend.py +0 -0
  526. {stackops-8.102/src/stackops/scripts/python/helpers/helpers_devops/mount_helpers → stackops-8.104/src/stackops/scripts/python/helpers/helpers_fire_command}/__init__.py +0 -0
  527. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_fire_command/cloud_manager.py +0 -0
  528. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_fire_command/f.py +0 -0
  529. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_fire_command/file_wrangler.py +0 -0
  530. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_fire_command/fire_jobs_streamlit_helper.py +0 -0
  531. {stackops-8.102/src/stackops/scripts/python/helpers/helpers_fire_command → stackops-8.104/src/stackops/scripts/python/helpers/helpers_network}/__init__.py +0 -0
  532. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/address.py +0 -0
  533. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/address_switch.py +0 -0
  534. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/onetimeshare.py +0 -0
  535. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/__init__.py +0 -0
  536. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_add_key_windows.py +0 -0
  537. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_add_ssh_key.py +0 -0
  538. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_cloud_init.py +0 -0
  539. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_darwin.py +0 -0
  540. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_darwin_utils.py +0 -0
  541. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_linux.py +0 -0
  542. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_linux_utils.py +0 -0
  543. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_windows.py +0 -0
  544. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_debug_windows_utils.py +0 -0
  545. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/ssh/ssh_deploy_key_remote.py +0 -0
  546. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn_platforms/common.py +0 -0
  547. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn_platforms/darwin.py +0 -0
  548. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn_platforms/linux.py +0 -0
  549. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn_platforms/unsupported.py +0 -0
  550. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_network/wifi_conn_platforms/windows.py +0 -0
  551. {stackops-8.102/src/stackops/scripts/python/helpers/helpers_network → stackops-8.104/src/stackops/scripts/python/helpers/helpers_preview}/__init__.py +0 -0
  552. {stackops-8.102/src/stackops/scripts/python/helpers/helpers_croshell → stackops-8.104/src/stackops/scripts/python/helpers/helpers_preview}/pomodoro.py +0 -0
  553. /stackops-8.102/src/stackops/scripts/python/helpers/helpers_croshell/crosh.py → /stackops-8.104/src/stackops/scripts/python/helpers/helpers_preview/preview_read.py +0 -0
  554. {stackops-8.102/src/stackops/scripts/python/helpers/helpers_croshell → stackops-8.104/src/stackops/scripts/python/helpers/helpers_preview}/scheduler.py +0 -0
  555. {stackops-8.102/src/stackops/scripts/python/helpers/helpers_croshell → stackops-8.104/src/stackops/scripts/python/helpers/helpers_preview}/start_slidev.py +0 -0
  556. {stackops-8.102/src/stackops/scripts/python/helpers/helpers_croshell → stackops-8.104/src/stackops/scripts/python/helpers/helpers_preview}/viewer.py +0 -0
  557. {stackops-8.102/src/stackops/scripts/python/helpers/helpers_croshell → stackops-8.104/src/stackops/scripts/python/helpers/helpers_preview}/viewer_template.py +0 -0
  558. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/action.py +0 -0
  559. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/action_helper.py +0 -0
  560. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/clone.py +0 -0
  561. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/cloud_repo_sync_conflicts.py +0 -0
  562. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/grource.py +0 -0
  563. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/repo_analyzer_1.py +0 -0
  564. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/repo_analyzer_2.py +0 -0
  565. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/sync.py +0 -0
  566. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_repos/update.py +0 -0
  567. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_search/ast_search.py +0 -0
  568. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_search/qr_code.py +0 -0
  569. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_search/repo_rag.py +0 -0
  570. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_search/semantic_search.py +0 -0
  571. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_seek/__init__.py +0 -0
  572. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_seek/scripts_linux/__init__.py +0 -0
  573. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_seek/scripts_linux/fzfg +0 -0
  574. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_seek/scripts_linux/search_with_context.sh +0 -0
  575. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_seek/scripts_macos/__init__.py +0 -0
  576. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_seek/scripts_macos/fzfg +0 -0
  577. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_seek/scripts_windows/__init__.py +0 -0
  578. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_seek/scripts_windows/fzfg.ps1 +0 -0
  579. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_seek/seek_impl.py +0 -0
  580. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/__init__.py +0 -0
  581. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/_tmux_backend.py +0 -0
  582. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/_tmux_backend_options.py +0 -0
  583. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/_tmux_backend_preview.py +0 -0
  584. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/_tmux_backend_processes.py +0 -0
  585. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend.py +0 -0
  586. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend_focus.py +0 -0
  587. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend_layout.py +0 -0
  588. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend_metadata.py +0 -0
  589. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend_options.py +0 -0
  590. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/_zellij_backend_preview.py +0 -0
  591. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/session_trace_tmux.py +0 -0
  592. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/session_trace_zellij.py +0 -0
  593. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_aoe_impl.py +0 -0
  594. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_cli_run.py +0 -0
  595. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_cli_run_all.py +0 -0
  596. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_dynamic.py +0 -0
  597. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_dynamic_display.py +0 -0
  598. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_dynamic_tmux.py +0 -0
  599. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_dynamic_zellij.py +0 -0
  600. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_impl.py +0 -0
  601. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_test_layouts.py +0 -0
  602. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/sessions_trace.py +0 -0
  603. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_sessions/utils.py +0 -0
  604. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/download.py +0 -0
  605. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/machine_utils_app.py +0 -0
  606. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/path_reference_validation.py +0 -0
  607. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/pdf.py +0 -0
  608. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/pyproject_utils_app.py +0 -0
  609. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/read_db_cli_tui.py +0 -0
  610. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/read_db_cli_tui_backend.py +0 -0
  611. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/specs.py +0 -0
  612. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/test_runtime.py +0 -0
  613. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/helpers/helpers_utils/type_fix.py +0 -0
  614. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/python/seek.py +0 -0
  615. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/setup/linux/__init__.py +0 -0
  616. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/setup/linux/apps_desktop.sh +0 -0
  617. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/setup/linux/uv.sh +0 -0
  618. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/setup/macos/__init__.py +0 -0
  619. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/setup/macos/uv.sh +0 -0
  620. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/setup/windows/__init__.py +0 -0
  621. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/setup/windows/quick_init.ps1 +0 -0
  622. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/setup/windows/uv.ps1 +0 -0
  623. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/windows/__init__.py +0 -0
  624. {stackops-8.102 → stackops-8.104}/src/stackops/scripts/windows/wrap_stackops.ps1 +0 -0
  625. {stackops-8.102 → stackops-8.104}/src/stackops/settings/__init__.py +0 -0
  626. {stackops-8.102 → stackops-8.104}/src/stackops/settings/atuin/__init__.py +0 -0
  627. {stackops-8.102 → stackops-8.104}/src/stackops/settings/atuin/config.toml +0 -0
  628. {stackops-8.102 → stackops-8.104}/src/stackops/settings/atuin/themes/__init__.py +0 -0
  629. {stackops-8.102 → stackops-8.104}/src/stackops/settings/atuin/themes/catppuccin-mocha-mauve.toml +0 -0
  630. {stackops-8.102 → stackops-8.104}/src/stackops/settings/broot/__init__.py +0 -0
  631. {stackops-8.102 → stackops-8.104}/src/stackops/settings/broot/br.sh +0 -0
  632. {stackops-8.102 → stackops-8.104}/src/stackops/settings/broot/brootcd.ps1 +0 -0
  633. {stackops-8.102 → stackops-8.104}/src/stackops/settings/broot/conf.toml +0 -0
  634. {stackops-8.102 → stackops-8.104}/src/stackops/settings/glow/__init__.py +0 -0
  635. {stackops-8.102 → stackops-8.104}/src/stackops/settings/glow/glow.yml +0 -0
  636. {stackops-8.102 → stackops-8.104}/src/stackops/settings/gromit-mpx/__init__.py +0 -0
  637. {stackops-8.102 → stackops-8.104}/src/stackops/settings/gromit-mpx/gromit-mpx.cfg +0 -0
  638. {stackops-8.102 → stackops-8.104}/src/stackops/settings/helix/__init__.py +0 -0
  639. {stackops-8.102 → stackops-8.104}/src/stackops/settings/helix/config.toml +0 -0
  640. {stackops-8.102 → stackops-8.104}/src/stackops/settings/helix/languages.toml +0 -0
  641. {stackops-8.102 → stackops-8.104}/src/stackops/settings/helix/yazi-picker.sh +0 -0
  642. {stackops-8.102 → stackops-8.104}/src/stackops/settings/keras/__init__.py +0 -0
  643. {stackops-8.102 → stackops-8.104}/src/stackops/settings/keras/keras.json +0 -0
  644. {stackops-8.102 → stackops-8.104}/src/stackops/settings/keyboard/espanso/config/__init__.py +0 -0
  645. {stackops-8.102 → stackops-8.104}/src/stackops/settings/keyboard/espanso/config/default.yml +0 -0
  646. {stackops-8.102 → stackops-8.104}/src/stackops/settings/keyboard/espanso/match/__init__.py +0 -0
  647. {stackops-8.102 → stackops-8.104}/src/stackops/settings/keyboard/espanso/match/base.yml +0 -0
  648. {stackops-8.102 → stackops-8.104}/src/stackops/settings/keyboard/kanata/__init__.py +0 -0
  649. {stackops-8.102 → stackops-8.104}/src/stackops/settings/keyboard/kanata/kanata.kbd +0 -0
  650. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/__init__.py +0 -0
  651. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/autocall/__init__.py +0 -0
  652. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/autocall/delete.sh +0 -0
  653. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/autocall/on-cd.sh +0 -0
  654. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/autocall/on-quit.sh +0 -0
  655. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/autocall/open.sh +0 -0
  656. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/autocall/paste.sh +0 -0
  657. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/autocall/pre-cd.sh +0 -0
  658. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/autocall/rename.sh +0 -0
  659. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/colors +0 -0
  660. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/exe/__init__.py +0 -0
  661. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/exe/cleaner.sh +0 -0
  662. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/exe/leftpane_previewer.sh +0 -0
  663. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/exe/lfcd.sh +0 -0
  664. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/exe/previewer.sh +0 -0
  665. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/exe/previewer_archive.sh +0 -0
  666. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/linux/icons +0 -0
  667. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/__init__.py +0 -0
  668. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/autocall/__init__.py +0 -0
  669. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/autocall/delete.ps1 +0 -0
  670. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/autocall/on-cd.ps1 +0 -0
  671. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/autocall/on-quit.ps1 +0 -0
  672. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/autocall/open.ps1 +0 -0
  673. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/autocall/paste.ps1 +0 -0
  674. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/autocall/pre-cd.ps1 +0 -0
  675. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/autocall/rename.ps1 +0 -0
  676. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/cd_tere.ps1 +0 -0
  677. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/cd_zoxide.ps1 +0 -0
  678. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/cd_zoxide2.ps1 +0 -0
  679. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/colors +0 -0
  680. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/icons +0 -0
  681. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/leftpane_previewer.ps1 +0 -0
  682. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/lfcd.ps1 +0 -0
  683. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/mkdir.ps1 +0 -0
  684. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/mkfile.ps1 +0 -0
  685. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lf/windows/previewer.ps1 +0 -0
  686. {stackops-8.102 → stackops-8.104}/src/stackops/settings/linters/.flake8 +0 -0
  687. {stackops-8.102 → stackops-8.104}/src/stackops/settings/linters/.mypy.ini +0 -0
  688. {stackops-8.102 → stackops-8.104}/src/stackops/settings/linters/.pylintrc +0 -0
  689. {stackops-8.102 → stackops-8.104}/src/stackops/settings/linters/.ruff.toml +0 -0
  690. {stackops-8.102 → stackops-8.104}/src/stackops/settings/linters/__init__.py +0 -0
  691. {stackops-8.102 → stackops-8.104}/src/stackops/settings/linters/pyrefly.toml +0 -0
  692. {stackops-8.102 → stackops-8.104}/src/stackops/settings/linters/ty.toml +0 -0
  693. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lvim/linux/__init__.py +0 -0
  694. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lvim/linux/config.lua +0 -0
  695. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lvim/windows/__init__.py +0 -0
  696. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lvim/windows/archive/__init__.py +0 -0
  697. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lvim/windows/archive/config_additional.lua +0 -0
  698. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lvim/windows/config.lua +0 -0
  699. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lvim/windows/lua/user/__init__.py +0 -0
  700. {stackops-8.102 → stackops-8.104}/src/stackops/settings/lvim/windows/lua/user/custom_config.lua +0 -0
  701. {stackops-8.102 → stackops-8.104}/src/stackops/settings/marimo/__init__.py +0 -0
  702. {stackops-8.102 → stackops-8.104}/src/stackops/settings/marimo/marimo.toml +0 -0
  703. {stackops-8.102 → stackops-8.104}/src/stackops/settings/marimo/snippets/globalize.py +0 -0
  704. {stackops-8.102 → stackops-8.104}/src/stackops/settings/mprocs/windows/__init__.py +0 -0
  705. {stackops-8.102 → stackops-8.104}/src/stackops/settings/mprocs/windows/mprocs.yaml +0 -0
  706. {stackops-8.102 → stackops-8.104}/src/stackops/settings/mprocs/windows/other +0 -0
  707. {stackops-8.102/src/stackops/settings/psmux → stackops-8.104/src/stackops/settings/ollama}/__init__.py +0 -0
  708. {stackops-8.102 → stackops-8.104}/src/stackops/settings/pistol/__init__.py +0 -0
  709. {stackops-8.102 → stackops-8.104}/src/stackops/settings/pistol/pistol.conf +0 -0
  710. {stackops-8.102 → stackops-8.104}/src/stackops/settings/presenterm/__init__.py +0 -0
  711. {stackops-8.102 → stackops-8.104}/src/stackops/settings/presenterm/config.yaml +0 -0
  712. {stackops-8.102 → stackops-8.104}/src/stackops/settings/procs/.procs.toml +0 -0
  713. {stackops-8.102/src/stackops/utils/schemas → stackops-8.104/src/stackops/settings/psmux}/__init__.py +0 -0
  714. {stackops-8.102 → stackops-8.104}/src/stackops/settings/psmux/description.md +0 -0
  715. {stackops-8.102 → stackops-8.104}/src/stackops/settings/psmux/install-ppm.ps1 +0 -0
  716. {stackops-8.102 → stackops-8.104}/src/stackops/settings/psmux/psmux.bindings.conf +0 -0
  717. {stackops-8.102 → stackops-8.104}/src/stackops/settings/psmux/psmux.conf +0 -0
  718. {stackops-8.102 → stackops-8.104}/src/stackops/settings/psmux/psmux.local.conf +0 -0
  719. {stackops-8.102 → stackops-8.104}/src/stackops/settings/psmux/psmux.plugins.conf +0 -0
  720. {stackops-8.102 → stackops-8.104}/src/stackops/settings/psmux/psmux.powerline.conf +0 -0
  721. {stackops-8.102 → stackops-8.104}/src/stackops/settings/psmux/psmux.theme.conf +0 -0
  722. {stackops-8.102 → stackops-8.104}/src/stackops/settings/pudb/__init__.py +0 -0
  723. {stackops-8.102 → stackops-8.104}/src/stackops/settings/pudb/pudb.cfg +0 -0
  724. {stackops-8.102 → stackops-8.104}/src/stackops/settings/rofi/__init__.py +0 -0
  725. {stackops-8.102 → stackops-8.104}/src/stackops/settings/rofi/config.rasi +0 -0
  726. {stackops-8.102 → stackops-8.104}/src/stackops/settings/rofi/config_default.rasi +0 -0
  727. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/alacritty/__init__.py +0 -0
  728. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/alacritty/alacritty.toml +0 -0
  729. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/alacritty/alacritty.yml +0 -0
  730. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/bash/__init__.py +0 -0
  731. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/ghostty/__init__.py +0 -0
  732. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/ghostty/config +0 -0
  733. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/hyper/.hyper.js +0 -0
  734. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/ipy/profiles/default/__init__.py +0 -0
  735. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/ipy/profiles/default/startup/__init__.py +0 -0
  736. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/ipy/profiles/default/startup/playext.py +0 -0
  737. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/kitty/__init__.py +0 -0
  738. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/kitty/kitty.conf +0 -0
  739. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/nushell/__init__.py +0 -0
  740. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/nushell/config.nu +0 -0
  741. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/nushell/env.nu +0 -0
  742. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/pwsh/__init__.py +0 -0
  743. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/pwsh/search_pwsh_history.ps1 +0 -0
  744. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/starship/__init__.py +0 -0
  745. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/starship/starship.toml +0 -0
  746. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/vtm/__init__.py +0 -0
  747. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/wezterm/__init__.py +0 -0
  748. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/wezterm/wezterm.lua +0 -0
  749. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/wt/__init__.py +0 -0
  750. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/wt/settings.json +0 -0
  751. {stackops-8.102 → stackops-8.104}/src/stackops/settings/shells/zsh/__init__.py +0 -0
  752. {stackops-8.102 → stackops-8.104}/src/stackops/settings/streamlit/__init__.py +0 -0
  753. {stackops-8.102 → stackops-8.104}/src/stackops/settings/streamlit/config.toml +0 -0
  754. {stackops-8.102 → stackops-8.104}/src/stackops/settings/svim/linux/__init__.py +0 -0
  755. {stackops-8.102 → stackops-8.104}/src/stackops/settings/svim/linux/init.toml +0 -0
  756. {stackops-8.102 → stackops-8.104}/src/stackops/settings/svim/windows/__init__.py +0 -0
  757. {stackops-8.102 → stackops-8.104}/src/stackops/settings/svim/windows/init.toml +0 -0
  758. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/__init__.py +0 -0
  759. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/alias.toml +0 -0
  760. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/apt-packages.toml +0 -0
  761. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/aws-buckets.toml +0 -0
  762. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/aws-instances.toml +0 -0
  763. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/bash-history.toml +0 -0
  764. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/brew-packages.toml +0 -0
  765. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/channels.toml +0 -0
  766. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/dirs.toml +0 -0
  767. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/diskutil.toml +0 -0
  768. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/distrobox-list.toml +0 -0
  769. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/docker-images.toml +0 -0
  770. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/dotfiles.toml +0 -0
  771. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/downloads.toml +0 -0
  772. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/env.toml +0 -0
  773. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/figlet-fonts.toml +0 -0
  774. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/files.toml +0 -0
  775. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/fish-history.toml +0 -0
  776. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/fonts.toml +0 -0
  777. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/git-branch.toml +0 -0
  778. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/git-diff.toml +0 -0
  779. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/git-files.toml +0 -0
  780. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/git-log.toml +0 -0
  781. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/git-reflog.toml +0 -0
  782. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/git-repos.toml +0 -0
  783. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/git-tags.toml +0 -0
  784. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/git-worktrees.toml +0 -0
  785. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/guix.toml +0 -0
  786. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/images.toml +0 -0
  787. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/just-recipes.toml +0 -0
  788. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/k8s-deployments.toml +0 -0
  789. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/k8s-pods.toml +0 -0
  790. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/k8s-services.toml +0 -0
  791. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/linux-disks.toml +0 -0
  792. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/man-pages.toml +0 -0
  793. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/mounts.toml +0 -0
  794. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/npm-packages.toml +0 -0
  795. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/nu-history.toml +0 -0
  796. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/path.toml +0 -0
  797. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/ports.toml +0 -0
  798. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/procs.toml +0 -0
  799. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/python-venvs.toml +0 -0
  800. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/recent-files.toml +0 -0
  801. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/sesh.toml +0 -0
  802. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/text.toml +0 -0
  803. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/tldr.toml +0 -0
  804. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/tmux-sessions.toml +0 -0
  805. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/tmux-windows.toml +0 -0
  806. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/todo-comments.toml +0 -0
  807. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/trash.toml +0 -0
  808. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/unicode.toml +0 -0
  809. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/wifi.toml +0 -0
  810. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/zoxide.toml +0 -0
  811. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_unix/zsh-history.toml +0 -0
  812. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/__init__.py +0 -0
  813. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/alias.toml +0 -0
  814. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/dirs.toml +0 -0
  815. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/docker-images.toml +0 -0
  816. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/dotfiles.toml +0 -0
  817. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/env.toml +0 -0
  818. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/files.toml +0 -0
  819. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/git-branch.toml +0 -0
  820. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/git-diff.toml +0 -0
  821. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/git-log.toml +0 -0
  822. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/git-reflog.toml +0 -0
  823. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/git-repos.toml +0 -0
  824. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/nu-history.toml +0 -0
  825. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/pwsh-history.toml +0 -0
  826. {stackops-8.102 → stackops-8.104}/src/stackops/settings/television/cable_windows/text.toml +0 -0
  827. {stackops-8.102 → stackops-8.104}/src/stackops/settings/tere/__init__.py +0 -0
  828. {stackops-8.102 → stackops-8.104}/src/stackops/settings/tere/terecd.ps1 +0 -0
  829. {stackops-8.102 → stackops-8.104}/src/stackops/settings/tere/terecd.sh +0 -0
  830. {stackops-8.102 → stackops-8.104}/src/stackops/settings/tmux/__init__.py +0 -0
  831. {stackops-8.102 → stackops-8.104}/src/stackops/settings/tmux/tmux.conf.local +0 -0
  832. {stackops-8.102 → stackops-8.104}/src/stackops/settings/tv/__init__.py +0 -0
  833. {stackops-8.102 → stackops-8.104}/src/stackops/settings/tv/config.toml +0 -0
  834. {stackops-8.102 → stackops-8.104}/src/stackops/settings/tv/themes/__init__.py +0 -0
  835. {stackops-8.102 → stackops-8.104}/src/stackops/settings/tv/themes/catppuccin-mocha-sky.toml +0 -0
  836. {stackops-8.102 → stackops-8.104}/src/stackops/settings/wsl/.wslconfig +0 -0
  837. {stackops-8.102 → stackops-8.104}/src/stackops/settings/wt/__init__.py +0 -0
  838. {stackops-8.102 → stackops-8.104}/src/stackops/settings/wt/set_wt_settings.py +0 -0
  839. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/__init__.py +0 -0
  840. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/init.lua +0 -0
  841. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/scripts/__init__.py +0 -0
  842. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/scripts/compress_selected.py +0 -0
  843. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/scripts/copy_file_content.py +0 -0
  844. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/scripts/fullscreen_preview.py +0 -0
  845. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/scripts/open_db_readonly.py +0 -0
  846. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/scripts/open_default_app.py +0 -0
  847. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/scripts/serve_browser_file.py +0 -0
  848. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/shell/__init__.py +0 -0
  849. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/shell/yazi_cd.ps1 +0 -0
  850. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/shell/yazi_cd.sh +0 -0
  851. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/theme.toml +0 -0
  852. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/yazi_darwin.toml +0 -0
  853. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/yazi_linux.toml +0 -0
  854. {stackops-8.102 → stackops-8.104}/src/stackops/settings/yazi/yazi_windows.toml +0 -0
  855. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zed/__init__.py +0 -0
  856. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zed/settings.json +0 -0
  857. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/__init__.py +0 -0
  858. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/commands/__init__.py +0 -0
  859. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/commands/monitor +0 -0
  860. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/commands/standard_panes +0 -0
  861. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/config.kdl +0 -0
  862. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/layouts/__init__.py +0 -0
  863. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/layouts/hist +0 -0
  864. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/layouts/panes.kdl +0 -0
  865. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/layouts/st.kdl +0 -0
  866. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/layouts/st2.kdl +0 -0
  867. {stackops-8.102 → stackops-8.104}/src/stackops/settings/zellij/layouts/stacked_panes.kdl +0 -0
  868. {stackops-8.102 → stackops-8.104}/src/stackops/utils/__init__.py +0 -0
  869. {stackops-8.102 → stackops-8.104}/src/stackops/utils/accessories.py +0 -0
  870. {stackops-8.102 → stackops-8.104}/src/stackops/utils/ai/__init__.py +0 -0
  871. {stackops-8.102 → stackops-8.104}/src/stackops/utils/cli_utils/__init__.py +0 -0
  872. {stackops-8.102 → stackops-8.104}/src/stackops/utils/cloud/onedrive/README.md +0 -0
  873. {stackops-8.102 → stackops-8.104}/src/stackops/utils/cloud/onedrive/__init__.py +0 -0
  874. {stackops-8.102 → stackops-8.104}/src/stackops/utils/cloud/onedrive/auth.py +0 -0
  875. {stackops-8.102 → stackops-8.104}/src/stackops/utils/cloud/onedrive/file_ops.py +0 -0
  876. {stackops-8.102 → stackops-8.104}/src/stackops/utils/cloud/onedrive/setup_oauth.py +0 -0
  877. {stackops-8.102 → stackops-8.104}/src/stackops/utils/code.py +0 -0
  878. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/art/__init__.py +0 -0
  879. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/art/fat_croco.txt +0 -0
  880. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/art/halfwit_croco.txt +0 -0
  881. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/art/happy_croco.txt +0 -0
  882. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/art/water_croco.txt +0 -0
  883. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/ascii_art.py +0 -0
  884. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/dbms.py +0 -0
  885. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/f.py +0 -0
  886. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/headers.py +0 -0
  887. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/ouch/__init__.py +0 -0
  888. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/ouch/decompress.py +0 -0
  889. {stackops-8.102 → stackops-8.104}/src/stackops/utils/files/read.py +0 -0
  890. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/__init__.py +0 -0
  891. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/github_release_bulk.py +0 -0
  892. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/github_release_scraper.py +0 -0
  893. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/install_from_url.py +0 -0
  894. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/install_request_logic.py +0 -0
  895. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_cli.py +0 -0
  896. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_explore.py +0 -0
  897. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_helper.py +0 -0
  898. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_locator_utils.py +0 -0
  899. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_offline.py +0 -0
  900. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_offline_models.py +0 -0
  901. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_offline_publish.py +0 -0
  902. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_offline_render.py +0 -0
  903. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_offline_steps.py +0 -0
  904. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_offline_uv.py +0 -0
  905. {stackops-8.102 → stackops-8.104}/src/stackops/utils/installer_utils/installer_summary.py +0 -0
  906. {stackops-8.102 → stackops-8.104}/src/stackops/utils/links.py +0 -0
  907. {stackops-8.102 → stackops-8.104}/src/stackops/utils/meta.py +0 -0
  908. {stackops-8.102 → stackops-8.104}/src/stackops/utils/options.py +0 -0
  909. {stackops-8.102 → stackops-8.104}/src/stackops/utils/options_utils/__init__.py +0 -0
  910. {stackops-8.102 → stackops-8.104}/src/stackops/utils/options_utils/options_tv_linux.py +0 -0
  911. {stackops-8.102 → stackops-8.104}/src/stackops/utils/options_utils/options_tv_windows.py +0 -0
  912. {stackops-8.102 → stackops-8.104}/src/stackops/utils/options_utils/textual_options_form.py +0 -0
  913. {stackops-8.102 → stackops-8.104}/src/stackops/utils/options_utils/tv_options.py +0 -0
  914. {stackops-8.102 → stackops-8.104}/src/stackops/utils/path_core.py +0 -0
  915. {stackops-8.102 → stackops-8.104}/src/stackops/utils/path_helper.py +0 -0
  916. {stackops-8.102 → stackops-8.104}/src/stackops/utils/path_reference.py +0 -0
  917. {stackops-8.102 → stackops-8.104}/src/stackops/utils/procs.py +0 -0
  918. {stackops-8.102 → stackops-8.104}/src/stackops/utils/rclone.py +0 -0
  919. {stackops-8.102 → stackops-8.104}/src/stackops/utils/rclone_wrapper.py +0 -0
  920. {stackops-8.102 → stackops-8.104}/src/stackops/utils/repo_stackops.py +0 -0
  921. {stackops-8.102 → stackops-8.104}/src/stackops/utils/scheduler.py +0 -0
  922. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/fire_agents/fire_agents_input.py +0 -0
  923. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/installer/installer_type.schema.json +0 -0
  924. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/installer/installer_types.py +0 -0
  925. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/layouts/__init__.py +0 -0
  926. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/layouts/layout.schema.json +0 -0
  927. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/layouts/layout_types.py +0 -0
  928. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/repos/__init__.py +0 -0
  929. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/repos/repos_schema.json +0 -0
  930. {stackops-8.102 → stackops-8.104}/src/stackops/utils/schemas/repos/repos_types.py +0 -0
  931. {stackops-8.102 → stackops-8.104}/src/stackops/utils/ssh.py +0 -0
  932. {stackops-8.102 → stackops-8.104}/src/stackops/utils/ssh_utils/copy_from_here.py +0 -0
  933. {stackops-8.102 → stackops-8.104}/src/stackops/utils/ssh_utils/copy_to_here.py +0 -0
  934. {stackops-8.102 → stackops-8.104}/src/stackops/utils/ssh_utils/utils.py +0 -0
  935. {stackops-8.102 → stackops-8.104}/src/stackops/utils/ssh_utils/wsl.py +0 -0
  936. {stackops-8.102 → stackops-8.104}/src/stackops/utils/ssh_utils/wsl_helper.py +0 -0
  937. {stackops-8.102 → stackops-8.104}/src/stackops/utils/terminal.py +0 -0
  938. {stackops-8.102 → stackops-8.104}/src/stackops/utils/upgrade_packages.py +0 -0
  939. {stackops-8.102 → stackops-8.104}/src/stackops/utils/yaml_schema.py +0 -0
  940. {stackops-8.102 → stackops-8.104}/src/stackops.egg-info/dependency_links.txt +0 -0
  941. {stackops-8.102 → stackops-8.104}/src/stackops.egg-info/requires.txt +0 -0
@@ -3,3 +3,4 @@ graft src/stackops/settings
3
3
  graft src/stackops/jobs
4
4
  graft src/stackops/profile
5
5
  graft src/stackops/scripts
6
+ graft src/stackops/utils/schemas
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackops
3
- Version: 8.102
3
+ Version: 8.104
4
4
  Summary: Developer Stack Manager
5
5
  Author-email: Alex Al-Saffar <programmer@usa.com>
6
6
  License: Apache 2.0
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "stackops"
9
- version = "8.102"
9
+ version = "8.104"
10
10
  description = "Developer Stack Manager"
11
11
  readme = "README.md"
12
12
  license = {text = "Apache 2.0"}
@@ -51,7 +51,7 @@ cloud = "stackops.scripts.python.cloud:main"
51
51
  fire = "stackops.scripts.python.fire_jobs:main"
52
52
  agents = "stackops.scripts.python.agents:main"
53
53
  terminal = "stackops.scripts.python.terminal:main"
54
- croshell = "stackops.scripts.python.croshell:main"
54
+ preview = "stackops.scripts.python.preview:main"
55
55
  utils = "stackops.scripts.python.utils:main"
56
56
  stackops = "stackops.scripts.python.stackops_entry:main"
57
57
  seek = "stackops.scripts.python.seek:main"
@@ -65,7 +65,7 @@ license-files = []
65
65
  where = ["src"]
66
66
 
67
67
  [tool.setuptools.package-data]
68
- stackops = ["**/*.toml", "**/*.md", "**/*.sh", "**/*.ps1", "**/*.txt", "utils/schemas/**/*.json"]
68
+ stackops = ["**/*.toml", "**/*.md", "**/*.sh", "**/*.ps1", "**/*.txt", "utils/schemas/**/*.json", "utils/schemas/**/*.yaml"]
69
69
 
70
70
  [dependency-groups]
71
71
  dev = [
@@ -0,0 +1,259 @@
1
+ import json
2
+ from inspect import Parameter, signature
3
+ from pathlib import Path
4
+ from typing import get_args
5
+
6
+ import pytest
7
+ from typer.testing import CliRunner
8
+
9
+ from stackops.scripts.python.helpers.helpers_devops import cli_config, cli_config_secrets
10
+
11
+
12
+ def test_config_secrets_is_nested_typer_app() -> None:
13
+ runner = CliRunner()
14
+
15
+ result = runner.invoke(cli_config.get_app(), ["secrets", "--help"])
16
+
17
+ assert result.exit_code == 0
18
+ assert "Usage: root secrets [OPTIONS] COMMAND [ARGS]..." in result.output
19
+ assert "search" in result.output
20
+ assert "stats" in result.output
21
+ assert "subset" in result.output
22
+ assert "add" in result.output
23
+ assert "edit" in result.output
24
+ assert "Examples:" not in result.output
25
+
26
+
27
+ def test_config_secrets_search_help_has_examples() -> None:
28
+ runner = CliRunner()
29
+
30
+ result = runner.invoke(cli_config.get_app(), ["secrets", "search", "--help"])
31
+
32
+ assert result.exit_code == 0
33
+ assert "Usage: root secrets search [OPTIONS] [TERMS]..." in result.output
34
+ assert "Examples:" in result.output
35
+ assert "devops config secrets search aws dev iam-access-key" in result.output
36
+ assert "devops config secrets add" not in result.output
37
+ assert "devops config secrets edit" not in result.output
38
+
39
+
40
+ def test_secrets_search_keeps_selector_aliases() -> None:
41
+ parameters = signature(cli_config_secrets.search).parameters
42
+ expected_aliases = {
43
+ "secrets_path": "-p",
44
+ "secrets_source": "-s",
45
+ "interactive": "-i",
46
+ "preview_secrets": "-P",
47
+ "verbose": "-v",
48
+ "login_name": "-n",
49
+ "secret_name": "-N",
50
+ "tags": "-t",
51
+ "login_tags": "-l",
52
+ "secret_tags": "-T",
53
+ "scopes": "-S",
54
+ "keys": "-k",
55
+ }
56
+
57
+ for parameter_name, alias in expected_aliases.items():
58
+ assert alias in _option_param_decls(parameters[parameter_name])
59
+ assert "add" not in parameters
60
+ assert "edit" not in parameters
61
+ assert "create" not in parameters
62
+ assert "editor" not in parameters
63
+
64
+
65
+ def test_secrets_add_and_edit_have_short_aliases() -> None:
66
+ stats_parameters = signature(cli_config_secrets.stats).parameters
67
+ subset_parameters = signature(cli_config_secrets.subset).parameters
68
+ add_parameters = signature(cli_config_secrets.add).parameters
69
+ edit_parameters = signature(cli_config_secrets.edit).parameters
70
+
71
+ assert "-p" in _option_param_decls(stats_parameters["secrets_path"])
72
+ assert "-s" in _option_param_decls(stats_parameters["secrets_source"])
73
+ assert "-d" in _option_param_decls(stats_parameters["details"])
74
+ assert "-o" in _option_param_decls(subset_parameters["output_path"])
75
+ assert "-p" in _option_param_decls(subset_parameters["secrets_path"])
76
+ assert "-s" in _option_param_decls(subset_parameters["secrets_source"])
77
+ assert "-f" in _option_param_decls(subset_parameters["overwrite"])
78
+ assert "-p" in _option_param_decls(add_parameters["secrets_path"])
79
+ assert "-s" in _option_param_decls(add_parameters["secrets_source"])
80
+ assert "-p" in _option_param_decls(edit_parameters["secrets_path"])
81
+ assert "-s" in _option_param_decls(edit_parameters["secrets_source"])
82
+ assert "-E" in _option_param_decls(edit_parameters["editor"])
83
+
84
+
85
+ def test_secrets_search_writes_selected_env_handoff(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
86
+ secrets_path = tmp_path / "secrets.json"
87
+ secrets_path.write_text(
88
+ json.dumps(
89
+ {
90
+ "version": "0.5",
91
+ "entries": [
92
+ {
93
+ "name": "aws-dev",
94
+ "tags": ["aws", "dev"],
95
+ "secrets": [
96
+ {
97
+ "name": "iam-access-key",
98
+ "tags": ["iam-access-key"],
99
+ "scopes": ["aws"],
100
+ "keyValues": {"AWS_ACCESS_KEY_ID": "dummy-key"},
101
+ }
102
+ ],
103
+ }
104
+ ],
105
+ }
106
+ ),
107
+ encoding="utf-8",
108
+ )
109
+ handoff: list[dict[str, object]] = []
110
+ monkeypatch.setattr(cli_config_secrets.secret_actions, "write_env_handoff", handoff.append)
111
+
112
+ cli_config_secrets.search(terms=["aws", "dev"], secrets_path=secrets_path, secrets_source="local")
113
+
114
+ assert handoff == [{"AWS_ACCESS_KEY_ID": "dummy-key"}]
115
+
116
+
117
+ def test_secrets_stats_uses_aggregate_tables_without_secret_values(tmp_path: Path) -> None:
118
+ secrets_path = tmp_path / "secrets.json"
119
+ secrets_path.write_text(
120
+ json.dumps(
121
+ {
122
+ "version": "0.5",
123
+ "entries": [
124
+ {
125
+ "name": "service-login",
126
+ "tags": ["team-a"],
127
+ "description": "Used by service tests",
128
+ "secrets": [
129
+ {
130
+ "name": "service-token",
131
+ "tags": ["api"],
132
+ "scopes": ["ci"],
133
+ "keyValues": {
134
+ "SERVICE_TOKEN": "super-secret-token",
135
+ "SERVICE_PAYLOAD": {"nested": "do-not-print"},
136
+ },
137
+ "rotation": {"lastRotated": "2026-01-01", "rotateEveryDays": 90},
138
+ }
139
+ ],
140
+ }
141
+ ],
142
+ }
143
+ ),
144
+ encoding="utf-8",
145
+ )
146
+ runner = CliRunner()
147
+
148
+ result = runner.invoke(cli_config_secrets.get_app(), ["stats", "--path", str(secrets_path), "--source", "local"])
149
+
150
+ assert result.exit_code == 0
151
+ assert "StackOps Secrets Sources" in result.output
152
+ assert "Inventory Totals" in result.output
153
+ assert "Metadata Coverage" in result.output
154
+ assert "Env Vars" in result.output
155
+ assert "2" in result.output
156
+ assert str(secrets_path) not in result.output
157
+ assert "super-secret-token" not in result.output
158
+ assert "do-not-print" not in result.output
159
+ assert "SERVICE_TOKEN" not in result.output
160
+ assert "service-login" not in result.output
161
+ assert "service-token" not in result.output
162
+
163
+
164
+ def test_secrets_subset_writes_selected_entries_without_printing_secret_values(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
165
+ secrets_path = tmp_path / "source-secrets.json"
166
+ output_path = tmp_path / "subset" / "secrets.json"
167
+ secrets_path.write_text(
168
+ json.dumps(
169
+ {
170
+ "$schema": "./secrets.schema.json",
171
+ "version": "0.5",
172
+ "entries": [
173
+ {
174
+ "name": "first-login",
175
+ "tags": ["team-a"],
176
+ "secrets": [
177
+ {
178
+ "name": "first-token",
179
+ "tags": ["api"],
180
+ "scopes": ["dev"],
181
+ "keyValues": {"FIRST_TOKEN": "first-secret-value"},
182
+ }
183
+ ],
184
+ },
185
+ {
186
+ "name": "second-login",
187
+ "tags": ["team-b"],
188
+ "secrets": [
189
+ {
190
+ "name": "second-token",
191
+ "tags": ["api"],
192
+ "scopes": ["prod"],
193
+ "keyValues": {"SECOND_TOKEN": "second-secret-value"},
194
+ }
195
+ ],
196
+ },
197
+ ],
198
+ }
199
+ ),
200
+ encoding="utf-8",
201
+ )
202
+ monkeypatch.setattr(cli_config_secrets.secret_actions, "_choose_subset_login_indices", lambda secrets_file: [1])
203
+ runner = CliRunner()
204
+
205
+ result = runner.invoke(
206
+ cli_config_secrets.get_app(),
207
+ ["subset", "--path", str(secrets_path), "--source", "local", "--output", str(output_path)],
208
+ )
209
+
210
+ assert result.exit_code == 0
211
+ assert "second-secret-value" not in result.output
212
+ subset_payload = json.loads(output_path.read_text(encoding="utf-8"))
213
+ assert subset_payload["$schema"] == "./secrets.schema.json"
214
+ assert subset_payload["version"] == "0.5"
215
+ assert [entry["name"] for entry in subset_payload["entries"]] == ["second-login"]
216
+ assert subset_payload["entries"][0]["secrets"][0]["keyValues"] == {"SECOND_TOKEN": "second-secret-value"}
217
+
218
+
219
+ def test_secrets_subset_refuses_to_overwrite_by_default(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
220
+ secrets_path = tmp_path / "source-secrets.json"
221
+ output_path = tmp_path / "subset-secrets.json"
222
+ secrets_path.write_text(
223
+ json.dumps(
224
+ {
225
+ "version": "0.5",
226
+ "entries": [
227
+ {
228
+ "name": "service-login",
229
+ "secrets": [
230
+ {
231
+ "name": "service-token",
232
+ "keyValues": {"SERVICE_TOKEN": "source-secret-value"},
233
+ }
234
+ ],
235
+ }
236
+ ],
237
+ }
238
+ ),
239
+ encoding="utf-8",
240
+ )
241
+ output_path.write_text("existing\n", encoding="utf-8")
242
+ monkeypatch.setattr(cli_config_secrets.secret_actions, "_choose_subset_login_indices", lambda secrets_file: [0])
243
+ runner = CliRunner()
244
+
245
+ result = runner.invoke(
246
+ cli_config_secrets.get_app(),
247
+ ["subset", "--path", str(secrets_path), "--source", "local", "--output", str(output_path)],
248
+ )
249
+
250
+ assert result.exit_code == 1
251
+ assert output_path.read_text(encoding="utf-8") == "existing\n"
252
+
253
+
254
+ def _option_param_decls(parameter: Parameter) -> tuple[str, ...]:
255
+ for metadata in get_args(parameter.annotation)[1:]:
256
+ param_decls = getattr(metadata, "param_decls", ())
257
+ if param_decls:
258
+ return tuple(param_decls)
259
+ raise AssertionError(f"Parameter has no Typer option metadata: {parameter.name}")
@@ -0,0 +1,151 @@
1
+ import json
2
+ from inspect import Parameter, signature
3
+ from pathlib import Path
4
+ from typing import get_args
5
+
6
+ import pytest
7
+
8
+ from stackops.scripts.python.helpers.helpers_devops import cli_self, cli_self_docker
9
+
10
+
11
+ def test_build_docker_options_have_one_letter_aliases() -> None:
12
+ parameters = signature(cli_self.build_docker).parameters
13
+ expected_aliases = {
14
+ "docker_login_name": "-n",
15
+ "docker_account_name": "-a",
16
+ "docker_secret_name": "-N",
17
+ "docker_secret_tags": "-T",
18
+ "docker_scopes": "-S",
19
+ "docker_token_key": "-k",
20
+ "docker_secrets_path": "-p",
21
+ }
22
+
23
+ for parameter_name, alias in expected_aliases.items():
24
+ assert alias in _option_param_decls(parameters[parameter_name])
25
+ assert parameters["docker_login_name"].default == "docker"
26
+ assert "docker_tags" not in parameters
27
+ assert "docker_login_tags" not in parameters
28
+
29
+
30
+ def test_docker_credentials_use_login_username(monkeypatch: pytest.MonkeyPatch) -> None:
31
+ calls: list[dict[str, object]] = []
32
+
33
+ def fake_search_logins(**kwargs: object) -> list[dict[str, object]]:
34
+ calls.append(kwargs)
35
+ if kwargs["keys"] != ("DOCKER_TOKEN",):
36
+ return []
37
+ return [
38
+ {
39
+ "name": "docker",
40
+ "tags": ["docker"],
41
+ "username": "alice",
42
+ "secrets": [
43
+ {
44
+ "name": "publish",
45
+ "tags": ["docker"],
46
+ "scopes": ["docker"],
47
+ "keyValues": {"DOCKER_TOKEN": "dummy-token"},
48
+ }
49
+ ],
50
+ }
51
+ ]
52
+
53
+ monkeypatch.setattr(cli_self_docker, "search_logins", fake_search_logins)
54
+
55
+ credentials = cli_self_docker.resolve_docker_credentials(
56
+ secrets_path=None,
57
+ login_name=None,
58
+ account_name=None,
59
+ secret_name=None,
60
+ secret_tags=None,
61
+ scopes=None,
62
+ token_key=None,
63
+ )
64
+
65
+ assert credentials.username == "alice"
66
+ assert credentials.token_env_key == "DOCKER_TOKEN"
67
+ assert credentials.key_values == {"DOCKER_TOKEN": "dummy-token"}
68
+ assert calls[0]["login_name"] == "docker"
69
+
70
+
71
+ def test_docker_credentials_resolve_through_search_logins_with_temp_file(tmp_path: Path) -> None:
72
+ secrets_path = tmp_path / "secrets.json"
73
+ secrets_path.write_text(
74
+ json.dumps(
75
+ {
76
+ "version": "0.5",
77
+ "entries": [
78
+ {
79
+ "name": "docker",
80
+ "tags": ["docker"],
81
+ "username": "alice",
82
+ "secrets": [
83
+ {
84
+ "name": "publish",
85
+ "tags": ["docker"],
86
+ "scopes": ["docker"],
87
+ "keyValues": {"DOCKER_TOKEN": "dummy-token"},
88
+ }
89
+ ],
90
+ }
91
+ ],
92
+ }
93
+ ),
94
+ encoding="utf-8",
95
+ )
96
+
97
+ credentials = cli_self_docker.resolve_docker_credentials(
98
+ secrets_path=secrets_path,
99
+ login_name=None,
100
+ account_name=None,
101
+ secret_name=None,
102
+ secret_tags=None,
103
+ scopes=None,
104
+ token_key=None,
105
+ )
106
+
107
+ assert credentials.login_name == "docker"
108
+ assert credentials.secret_name == "publish"
109
+ assert credentials.username == "alice"
110
+ assert credentials.token_env_key == "DOCKER_TOKEN"
111
+
112
+
113
+ def test_rendered_docker_handoff_script_does_not_include_secret_values(tmp_path: Path) -> None:
114
+ script = cli_self_docker.render_build_docker_shell_script(
115
+ variant="slim",
116
+ repo_root=tmp_path / "repo",
117
+ script_path=tmp_path / "repo/jobs/shell/docker_build_and_publish.sh",
118
+ secret_env_path=tmp_path / "handoff.docker.secrets.env.sh",
119
+ docker_username="alice",
120
+ token_env_key="DOCKER_TOKEN",
121
+ credential_env_keys=("DOCKER_TOKEN",),
122
+ )
123
+
124
+ assert "dummy-token" not in script
125
+ assert "statistician" not in script
126
+ assert "export DOCKER_IMAGE_NAMESPACE=alice" in script
127
+ assert "export DOCKER_LOGIN_TOKEN_ENV_VAR=DOCKER_TOKEN" in script
128
+ assert "unset DOCKER_TOKEN" in script
129
+
130
+
131
+ def test_docker_publish_script_no_longer_hardcodes_namespace() -> None:
132
+ script = Path("jobs/shell/docker_build_and_publish.sh").read_text(encoding="utf-8")
133
+
134
+ assert "statistician" not in script
135
+ assert "DOCKER_IMAGE_NAMESPACE" in script
136
+ assert "docker login" in script
137
+
138
+
139
+ def test_docker_helper_module_does_not_import_typer() -> None:
140
+ script = Path("src/stackops/scripts/python/helpers/helpers_devops/cli_self_docker.py").read_text(encoding="utf-8")
141
+
142
+ assert "import typer" not in script
143
+ assert "typer." not in script
144
+
145
+
146
+ def _option_param_decls(parameter: Parameter) -> tuple[str, ...]:
147
+ for metadata in get_args(parameter.annotation)[1:]:
148
+ param_decls = getattr(metadata, "param_decls", ())
149
+ if param_decls:
150
+ return tuple(param_decls)
151
+ raise AssertionError(f"Parameter has no Typer option metadata: {parameter.name}")
@@ -0,0 +1,86 @@
1
+ from subprocess import CompletedProcess
2
+
3
+ import pytest
4
+
5
+ from stackops.scripts.python.helpers.helpers_sessions import _herdr_backend as herdr
6
+
7
+
8
+ def _completed(args: list[str], stdout: str, returncode: int = 0) -> CompletedProcess[str]:
9
+ return CompletedProcess(args=args, returncode=returncode, stdout=stdout, stderr="")
10
+
11
+
12
+ def test_choose_named_session_uses_herdr_attach() -> None:
13
+ assert herdr.choose_session(name="default", new_session=False, kill_all=False) == (
14
+ "handoff_script",
15
+ "herdr session attach default",
16
+ )
17
+
18
+
19
+ def test_new_session_uses_generated_herdr_session_name(monkeypatch: pytest.MonkeyPatch) -> None:
20
+ monkeypatch.setattr(herdr, "_new_session_name", lambda: "stackops-test")
21
+
22
+ assert herdr.new_session_script(kill_all=False) == "herdr --session stackops-test"
23
+
24
+
25
+ def test_kill_all_stops_running_sessions(monkeypatch: pytest.MonkeyPatch) -> None:
26
+ sessions = [
27
+ {"name": "default", "running": True},
28
+ {"name": "stopped", "running": False},
29
+ {"name": "agent work", "running": True},
30
+ ]
31
+ monkeypatch.setattr(herdr, "_session_entries", lambda: sessions)
32
+
33
+ assert herdr.choose_kill_target(name=None, kill_all=True) == (
34
+ "run_script",
35
+ "herdr session stop default --json\nherdr session stop 'agent work' --json",
36
+ )
37
+
38
+
39
+ def test_window_selection_builds_tab_and_pane_attach_scripts(monkeypatch: pytest.MonkeyPatch) -> None:
40
+ def fake_run_command(args: list[str], timeout: float = 5.0) -> CompletedProcess[str]:
41
+ _ = timeout
42
+ if args == ["herdr", "--session", "default", "tab", "list"]:
43
+ return _completed(
44
+ args,
45
+ (
46
+ '{"result":{"tabs":['
47
+ '{"tab_id":"workspace:1","number":1,"label":"main","focused":true}'
48
+ ']}}'
49
+ ),
50
+ )
51
+ if args == ["herdr", "--session", "default", "pane", "list"]:
52
+ return _completed(
53
+ args,
54
+ (
55
+ '{"result":{"panes":['
56
+ '{"pane_id":"pane-1","terminal_id":"term-1","tab_id":"workspace:1",'
57
+ '"label":"codex","focused":false}'
58
+ ']}}'
59
+ ),
60
+ )
61
+ return _completed(args, "{}", returncode=1)
62
+
63
+ monkeypatch.setattr(herdr, "run_command", fake_run_command)
64
+ monkeypatch.setattr(
65
+ herdr,
66
+ "_session_entries",
67
+ lambda: [{"name": "default", "running": True, "default": True}],
68
+ )
69
+ monkeypatch.setattr(
70
+ herdr,
71
+ "interactive_choose_with_preview",
72
+ lambda msg, options_to_preview_mapping, multi=False: "[default] 1:main / codex",
73
+ )
74
+
75
+ action, script = herdr.choose_session(
76
+ name=None,
77
+ new_session=False,
78
+ kill_all=False,
79
+ window=True,
80
+ )
81
+
82
+ assert action == "handoff_script"
83
+ assert script == (
84
+ "herdr --session default agent focus term-1\n"
85
+ "herdr session attach default"
86
+ )
@@ -0,0 +1,18 @@
1
+
2
+
3
+ from pathlib import Path
4
+
5
+ import pytest
6
+
7
+ from stackops.scripts.python.helpers.helpers_utils.path_reference_validation import audit_repository_path_references, format_path_reference_audit
8
+
9
+
10
+ REPO_ROOT = Path(__file__).resolve().parents[2]
11
+
12
+
13
+ def test_all_path_reference_targets_exist(capsys: pytest.CaptureFixture[str]) -> None:
14
+ audit = audit_repository_path_references(repo_path=REPO_ROOT, search_root=None)
15
+ with capsys.disabled():
16
+ print(f"Picked up {audit.reference_count} _PATH_REFERENCE variables.")
17
+ if audit.has_failures():
18
+ pytest.fail(format_path_reference_audit(audit=audit))
@@ -0,0 +1,47 @@
1
+ import json
2
+ from pathlib import Path
3
+
4
+ import pytest
5
+
6
+ from stackops.utils.schemas.secrets.secrets_loader import SecretsSchemaError, load_secrets_file
7
+ from stackops.utils.schemas.secrets.secrets_types import SecretRecord
8
+
9
+
10
+ REPO_ROOT = Path(__file__).resolve().parents[2]
11
+ SECRETS_SCHEMA_PATH = REPO_ROOT / "src" / "stackops" / "utils" / "schemas" / "secrets" / "secrets.schema.json"
12
+ SECRETS_EXAMPLE_PATH = REPO_ROOT / "src" / "stackops" / "utils" / "schemas" / "secrets" / "secrets.example.json"
13
+
14
+
15
+ def test_loader_requires_secret_name(tmp_path: Path) -> None:
16
+ secrets_path = tmp_path / "secrets.json"
17
+ secrets_path.write_text(
18
+ json.dumps({"version": "0.5", "entries": [{"name": "service", "secrets": [{"keyValues": {"TOKEN": "redacted"}}]}]}), encoding="utf-8"
19
+ )
20
+
21
+ with pytest.raises(SecretsSchemaError, match=r"entries\[0\]\.secrets\[0\]\.name must be a non-empty string"):
22
+ load_secrets_file(secrets_path)
23
+
24
+
25
+ def test_loaded_secret_name_is_required_type(tmp_path: Path) -> None:
26
+ secrets_path = tmp_path / "secrets.json"
27
+ secrets_path.write_text(
28
+ json.dumps({"version": "0.5", "entries": [{"name": "service", "secrets": [{"name": "api-token", "keyValues": {"TOKEN": "redacted"}}]}]}),
29
+ encoding="utf-8",
30
+ )
31
+
32
+ loaded = load_secrets_file(secrets_path)
33
+ secret: SecretRecord = loaded["entries"][0]["secrets"][0]
34
+
35
+ assert secret["name"] == "api-token"
36
+
37
+
38
+ def test_schema_requires_secret_name() -> None:
39
+ schema = json.loads(SECRETS_SCHEMA_PATH.read_text(encoding="utf-8"))
40
+
41
+ assert schema["definitions"]["secret"]["required"] == ["name", "keyValues"]
42
+
43
+
44
+ def test_packaged_example_secret_entries_have_names() -> None:
45
+ example = json.loads(SECRETS_EXAMPLE_PATH.read_text(encoding="utf-8"))
46
+
47
+ assert all("name" in secret for entry in example["entries"] for secret in entry["secrets"])
@@ -13,8 +13,8 @@ from rich.console import Console
13
13
  from stackops.cluster.remote.models import JOB_STATUS, LogEntry
14
14
  from stackops.utils import rclone as rclone_utils
15
15
  from stackops.utils.files.read import read_json
16
- from stackops.utils.io import read_ini, save_json
17
- from stackops.utils.source_of_truth import DEFAULTS_PATH
16
+ from stackops.utils.io import save_json
17
+ from stackops.utils.source_of_truth import read_stackops_config_string
18
18
 
19
19
 
20
20
  LOCK_EXPIRY_SECONDS = 3600
@@ -59,7 +59,7 @@ class CloudManager:
59
59
  self.status_root = status_root
60
60
  self.max_jobs = max_jobs
61
61
  if cloud is None:
62
- self.cloud = str(read_ini(DEFAULTS_PATH)["general"]["rclone_config_name"])
62
+ self.cloud = read_stackops_config_string("default_rclone_config")
63
63
  else:
64
64
  self.cloud = cloud
65
65
  self.lock_claimed = False
@@ -3,8 +3,8 @@ from dataclasses import dataclass, field, asdict
3
3
  from datetime import datetime, timedelta
4
4
 
5
5
  from stackops.utils.accessories import randstr
6
- from stackops.utils.io import read_ini
7
- from stackops.utils.source_of_truth import DEFAULTS_PATH
6
+ from stackops.utils.source_of_truth import DOTFILES_STACKOPS_CONFIG_PATH, read_stackops_config_string
7
+ from stackops.utils.schemas.config.config_types import StackOpsConfigStringKey
8
8
 
9
9
 
10
10
  JOB_STATUS: TypeAlias = Literal["queued", "running", "completed", "failed"]
@@ -158,12 +158,11 @@ class LogEntry:
158
158
  )
159
159
 
160
160
 
161
- def _read_default_config_value(key: str) -> str:
161
+ def _read_default_config_value(key: StackOpsConfigStringKey) -> str:
162
162
  try:
163
- section = read_ini(DEFAULTS_PATH)["general"]
164
- return str(section[key])
165
- except (FileNotFoundError, KeyError, IndexError) as err:
166
- raise ValueError(f"Default config value '{key}' could not be read from `{DEFAULTS_PATH}`") from err
163
+ return read_stackops_config_string(key)
164
+ except (FileNotFoundError, KeyError, ValueError) as err:
165
+ raise ValueError(f"Config value '{key}' could not be read from `{DOTFILES_STACKOPS_CONFIG_PATH}`") from err
167
166
 
168
167
 
169
168
  @dataclass
@@ -222,9 +221,9 @@ class RemoteStackOpsConfig:
222
221
  raise ValueError("cloud_name must be provided when transfer_method is 'cloud'")
223
222
  if self.notify_upon_completion:
224
223
  if self.to_email is None:
225
- self.to_email = _read_default_config_value("to_email")
224
+ self.to_email = _read_default_config_value("default_email_address")
226
225
  if self.email_config_name is None:
227
- self.email_config_name = _read_default_config_value("email_config_name")
226
+ self.email_config_name = _read_default_config_value("default_email_config")
228
227
 
229
228
 
230
229
  @dataclass
@@ -0,0 +1 @@
1
+ TODO_PATH_REFERENCE = "todo.md"