devops-bot-sdk 1.6.47__tar.gz → 1.6.48__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 (221) hide show
  1. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/PKG-INFO +1 -1
  2. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/devops_bot_sdk.egg-info/PKG-INFO +1 -1
  3. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/__init__.py +2 -2
  4. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/os_setup.py +39 -9
  5. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_activity_os_setup.py +35 -5
  6. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/README.md +0 -0
  7. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/devops_bot_sdk.egg-info/SOURCES.txt +0 -0
  8. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/devops_bot_sdk.egg-info/dependency_links.txt +0 -0
  9. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/devops_bot_sdk.egg-info/entry_points.txt +0 -0
  10. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/devops_bot_sdk.egg-info/requires.txt +0 -0
  11. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/devops_bot_sdk.egg-info/top_level.txt +0 -0
  12. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/pyproject.toml +0 -0
  13. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/__init__.py +0 -0
  14. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/classifier.py +0 -0
  15. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/collectors/__init__.py +0 -0
  16. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/collectors/common.py +0 -0
  17. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/collectors/linux_auditd.py +0 -0
  18. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/collectors/macos_eslogger.py +0 -0
  19. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/collectors/windows_eventlog.py +0 -0
  20. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/models.py +0 -0
  21. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/recorder.py +0 -0
  22. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/redact.py +0 -0
  23. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/settings.py +0 -0
  24. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/shipper.py +0 -0
  25. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/activity/spool.py +0 -0
  26. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agentd.py +0 -0
  27. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/__init__.py +0 -0
  28. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/activity.py +0 -0
  29. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/builder.py +0 -0
  30. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/chat.py +0 -0
  31. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/connectors.py +0 -0
  32. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/engines/__init__.py +0 -0
  33. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/engines/claude_code.py +0 -0
  34. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/engines/http.py +0 -0
  35. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/engines/mcp.py +0 -0
  36. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/engines/n8n.py +0 -0
  37. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/engines/shell.py +0 -0
  38. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/integrations.py +0 -0
  39. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/inventory.py +0 -0
  40. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/library/__init__.py +0 -0
  41. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/manifest.py +0 -0
  42. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/prompt_studio.py +0 -0
  43. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/prompt_template.py +0 -0
  44. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/prompt_vars.py +0 -0
  45. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/run_log.py +0 -0
  46. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/schedules.py +0 -0
  47. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/secrets.py +0 -0
  48. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/ticket_run.py +0 -0
  49. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/usage.py +0 -0
  50. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/agents/varstore.py +0 -0
  51. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/browser_profile.py +0 -0
  52. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/cli.py +0 -0
  53. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/client.py +0 -0
  54. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/collectors/__init__.py +0 -0
  55. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/collectors/files.py +0 -0
  56. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/collectors/process.py +0 -0
  57. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/collectors/screenshot.py +0 -0
  58. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/config.py +0 -0
  59. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/crucial.py +0 -0
  60. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/departments.py +0 -0
  61. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/design_verify/__init__.py +0 -0
  62. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/design_verify/assets.py +0 -0
  63. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/design_verify/bootstrap.py +0 -0
  64. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/design_verify/browser.py +0 -0
  65. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/design_verify/compare.py +0 -0
  66. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/design_verify/loop.py +0 -0
  67. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/estimator.py +0 -0
  68. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/exceptions.py +0 -0
  69. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/firewall.py +0 -0
  70. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/formats.py +0 -0
  71. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/git_ops.py +0 -0
  72. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/github_fetch.py +0 -0
  73. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/github_ingest.py +0 -0
  74. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/graph_recon.py +0 -0
  75. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/graphify.py +0 -0
  76. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/hooks/__init__.py +0 -0
  77. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/hooks/crucial_guard.py +0 -0
  78. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/intake.py +0 -0
  79. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ipc/__init__.py +0 -0
  80. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ipc/electron_bridge.py +0 -0
  81. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ipc/handlers.py +0 -0
  82. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/journal.py +0 -0
  83. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/local_exec.py +0 -0
  84. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/memory_guard.py +0 -0
  85. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/models/__init__.py +0 -0
  86. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/models/envelope.py +0 -0
  87. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/models/requests.py +0 -0
  88. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/models/responses.py +0 -0
  89. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/models/snapshots.py +0 -0
  90. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/phase_timer.py +0 -0
  91. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/plan_run.py +0 -0
  92. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/platform_compat.py +0 -0
  93. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/prd_progress.py +0 -0
  94. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/proof_readers.py +0 -0
  95. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/providers.py +0 -0
  96. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/py.typed +0 -0
  97. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/resume.py +0 -0
  98. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/router.py +0 -0
  99. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/run_auto.py +0 -0
  100. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/scheduler.py +0 -0
  101. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/self_report.py +0 -0
  102. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/self_report_local.py +0 -0
  103. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/sse.py +0 -0
  104. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/swagger.py +0 -0
  105. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/task_file.py +0 -0
  106. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/task_types.py +0 -0
  107. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/test.py +0 -0
  108. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/test_pipeline.py +0 -0
  109. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ticket_fields.py +0 -0
  110. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/tiers/__init__.py +0 -0
  111. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/tiers/mini_agent.py +0 -0
  112. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/__init__.py +0 -0
  113. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/api.py +0 -0
  114. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/dashboard.py +0 -0
  115. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/health.py +0 -0
  116. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/ip_allowlist.py +0 -0
  117. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/jobs.py +0 -0
  118. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/models.py +0 -0
  119. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/runner.py +0 -0
  120. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/security.py +0 -0
  121. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/server.py +0 -0
  122. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/service.py +0 -0
  123. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/session.py +0 -0
  124. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/setup_manager.py +0 -0
  125. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/agents.html +0 -0
  126. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/app.js +0 -0
  127. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/chat.html +0 -0
  128. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/custom-agents.html +0 -0
  129. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/default-agents.html +0 -0
  130. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/index.html +0 -0
  131. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/report.html +0 -0
  132. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/runs.html +0 -0
  133. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/schedules.html +0 -0
  134. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/setup.html +0 -0
  135. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/styles.css +0 -0
  136. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/static/tickets.html +0 -0
  137. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/ui/swagger.py +0 -0
  138. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/updater.py +0 -0
  139. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/url_access.py +0 -0
  140. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/vps_health.py +0 -0
  141. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/sdk/write_hook.py +0 -0
  142. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/setup.cfg +0 -0
  143. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_activity_collectors.py +0 -0
  144. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_activity_core.py +0 -0
  145. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_activity_macos.py +0 -0
  146. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_activity_pipeline.py +0 -0
  147. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_agent_activity.py +0 -0
  148. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_agent_activity_tracking.py +0 -0
  149. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_agent_chat_features.py +0 -0
  150. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_agent_listing.py +0 -0
  151. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_agent_prompt_async.py +0 -0
  152. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_agent_prompt_models.py +0 -0
  153. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_agent_run_ticket.py +0 -0
  154. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_agent_schedules.py +0 -0
  155. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_agent_workspace_settings.py +0 -0
  156. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_agents_connectors_builder.py +0 -0
  157. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_allowed_tools_config.py +0 -0
  158. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_auto_agent_dispatch.py +0 -0
  159. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_browser_profile.py +0 -0
  160. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_cheap_tier.py +0 -0
  161. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_client_jira_projects.py +0 -0
  162. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_config_token_diagnostics.py +0 -0
  163. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_configure_token_owner.py +0 -0
  164. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_console_encoding.py +0 -0
  165. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_crash_recovery.py +0 -0
  166. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_departments.py +0 -0
  167. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_done_transition.py +0 -0
  168. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_epic_decompose_run.py +0 -0
  169. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_epic_inherited_agent_id.py +0 -0
  170. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_epic_session_isolation.py +0 -0
  171. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_estimator.py +0 -0
  172. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_firewall_open_on_update.py +0 -0
  173. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_formats.py +0 -0
  174. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_git_action.py +0 -0
  175. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_github_fetch.py +0 -0
  176. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_github_ingest.py +0 -0
  177. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_graph_recon.py +0 -0
  178. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_graphify_build.py +0 -0
  179. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_graphify_hook_install.py +0 -0
  180. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_health.py +0 -0
  181. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_intake_job_outcome.py +0 -0
  182. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_intake_plan_review.py +0 -0
  183. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_journal.py +0 -0
  184. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_local_exec_provider.py +0 -0
  185. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_mcp_route_contract.py +0 -0
  186. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_memory_guard.py +0 -0
  187. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_phase_timer.py +0 -0
  188. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_plan_new_command.py +0 -0
  189. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_plan_run_activity.py +0 -0
  190. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_pr_identity.py +0 -0
  191. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_prd_artifact.py +0 -0
  192. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_project_path_resolution.py +0 -0
  193. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_proof_readers.py +0 -0
  194. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_providers.py +0 -0
  195. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_recon_session_isolation.py +0 -0
  196. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_resume.py +0 -0
  197. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_router.py +0 -0
  198. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_run_auto_agent_only.py +0 -0
  199. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_run_outputs.py +0 -0
  200. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_run_verdict_is_honest.py +0 -0
  201. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_schedule_api.py +0 -0
  202. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_schedule_outputs_and_plans.py +0 -0
  203. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_scheduler.py +0 -0
  204. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_self_report.py +0 -0
  205. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_service_token_warning.py +0 -0
  206. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_swagger_command.py +0 -0
  207. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_task_file_and_plan_run.py +0 -0
  208. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_task_file_format_doc.py +0 -0
  209. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_ticket_fields.py +0 -0
  210. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_ticket_run_resolve_by_id.py +0 -0
  211. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_ticket_speed_fixes.py +0 -0
  212. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_tier_flag_parity.py +0 -0
  213. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_ui_gate.py +0 -0
  214. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_ui_lifespan.py +0 -0
  215. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_update_timer.py +0 -0
  216. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_updater_extras.py +0 -0
  217. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_updater_reports_the_truth.py +0 -0
  218. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_url_access.py +0 -0
  219. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_vps_health.py +0 -0
  220. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_windows_loop_identity.py +0 -0
  221. {devops_bot_sdk-1.6.47 → devops_bot_sdk-1.6.48}/tests/test_write_hook.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devops-bot-sdk
3
- Version: 1.6.47
3
+ Version: 1.6.48
4
4
  Summary: DevOps Bot Desktop SDK — thin client for the AgentOS Electron desktop app
5
5
  Author: noumanaziz2128
6
6
  License-Expression: LicenseRef-Proprietary
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devops-bot-sdk
3
- Version: 1.6.47
3
+ Version: 1.6.48
4
4
  Summary: DevOps Bot Desktop SDK — thin client for the AgentOS Electron desktop app
5
5
  Author: noumanaziz2128
6
6
  License-Expression: LicenseRef-Proprietary
@@ -1,6 +1,6 @@
1
1
  """AgentOS Desktop SDK — thin HTTPS/SSE client for the Electron app.
2
2
 
3
- Version: 1.6.47
3
+ Version: 1.6.48
4
4
 
5
5
  Public surface:
6
6
  BackendClient.from_config() — create client from ~/.agentos/config.toml
@@ -34,7 +34,7 @@ Rules:
34
34
  - All data egress through submit_webhook only
35
35
  """
36
36
 
37
- __version__ = "1.6.47" # SINGLE SOURCE OF TRUTH — bump on every change; pyproject,
37
+ __version__ = "1.6.48" # SINGLE SOURCE OF TRUTH — bump on every change; pyproject,
38
38
  __author__ = "AgentOS" # sdk.client.SDK_VERSION and the UI server version all read this.
39
39
 
40
40
  from sdk.client import BackendClient
@@ -535,9 +535,12 @@ def ensure(apply: bool = True) -> tuple[bool, str]:
535
535
  return False, "" # set up already (by hand, or by an earlier run)
536
536
  if apply and sysname == "linux" and _sudo_without_password():
537
537
  return _ensure_via_sudo()
538
+ import shlex
539
+
540
+ cmd = " ".join(shlex.quote(a) for a in _privileged_argv())
538
541
  return False, ("activity audit is not set up — human activity on this VPS is "
539
- f"not being recorded. Run once:\n sudo {_agentos_exe()} "
540
- "activity-setup\nor by hand:\n" + manual)
542
+ f"not being recorded. Run once:\n sudo {cmd}\nor by hand:\n"
543
+ + manual)
541
544
 
542
545
  step = {"linux": _ensure_linux, "windows": _ensure_windows, "darwin": _ensure_macos}
543
546
  _, done, err = step[sysname]()
@@ -575,7 +578,7 @@ def _ensure_via_sudo() -> tuple[bool, str]:
575
578
  installation is what runs — never whatever ``agentos`` is first on root's PATH.
576
579
  """
577
580
  before = settings.audit_enabled()
578
- rc, out = _run(["sudo", "-n", sys.executable, "-m", "sdk.activity.os_setup"], timeout=1800)
581
+ rc, out = _run(["sudo", "-n", *_privileged_argv()], timeout=1800)
579
582
  lines = [ln.strip() for ln in out.splitlines() if ln.strip()]
580
583
  # cli() prints the outcome first ("activity audit …") and a restart hint after it.
581
584
  last = next((ln for ln in lines if ln.startswith("activity audit")), lines[-1] if lines else "")
@@ -587,12 +590,39 @@ def _ensure_via_sudo() -> tuple[bool, str]:
587
590
  ("activity audit enabled (via sudo)" if changed else ""))
588
591
 
589
592
 
590
- def _agentos_exe() -> str:
591
- """Absolute ``agentos`` path, so ``sudo`` finds the venv / ~/.local/bin install."""
592
- exe = Path(sys.executable).parent / ("agentos.exe" if _system() == "windows" else "agentos")
593
- if exe.exists():
594
- return str(exe)
595
- return shutil.which("agentos") or "agentos"
593
+ def _import_path() -> str:
594
+ """This process's import path, for the root child.
595
+
596
+ A ``pip install --user`` puts the SDK and its dependencies in the USER's site
597
+ directory (``~/.local/lib/pythonX.Y/site-packages``), which root's interpreter
598
+ never looks in. So ``sudo python3 -m sdk.activity.os_setup`` failed with
599
+ ``No module named 'sdk'``, and ``sudo agentos`` failed the same way even with a
600
+ full path. Handing the child exactly the path this process imports from makes it
601
+ import what we import: a --user install, a venv or an editable checkout alike.
602
+ (It runs as root from user-writable directories. That grants nothing, because
603
+ it only happens for a user who already has root through sudo.)
604
+ """
605
+ # Not the caller's working directory (``-m`` puts it on sys.path): a root child
606
+ # has no business importing whatever happens to sit in the folder someone ran the
607
+ # panel from. Kept only when the SDK itself lives there (an editable checkout).
608
+ sdk_home = str(Path(__file__).resolve().parents[2])
609
+ cwd = os.getcwd()
610
+ seen: list[str] = []
611
+ for p in sys.path:
612
+ if not p or not os.path.isdir(p):
613
+ continue
614
+ p = os.path.abspath(p)
615
+ if p == cwd and p != sdk_home:
616
+ continue
617
+ if p not in seen:
618
+ seen.append(p)
619
+ return os.pathsep.join(seen)
620
+
621
+
622
+ def _privileged_argv() -> list[str]:
623
+ """The command (minus ``sudo``) that runs the privileged half: same interpreter,
624
+ same import path, through ``env`` so ``sudo``'s environment reset cannot drop it."""
625
+ return ["env", f"PYTHONPATH={_import_path()}", sys.executable, "-m", "sdk.activity.os_setup"]
596
626
 
597
627
 
598
628
  def cli(argv: list[str]) -> int:
@@ -233,7 +233,11 @@ def test_unprivileged_with_passwordless_sudo_sets_itself_up(box, monkeypatch, tm
233
233
  monkeypatch.setattr(O, "_run", run)
234
234
 
235
235
  changed, msg = O.ensure()
236
- assert calls == [["sudo", "-n", O.sys.executable, "-m", "sdk.activity.os_setup"]]
236
+ assert len(calls) == 1
237
+ cmd = calls[0]
238
+ assert cmd[:3] == ["sudo", "-n", "env"]
239
+ assert cmd[3].startswith("PYTHONPATH=")
240
+ assert cmd[4:] == [O.sys.executable, "-m", "sdk.activity.os_setup"]
237
241
  assert changed is True
238
242
  assert msg.startswith("activity audit enabled")
239
243
 
@@ -247,13 +251,16 @@ def test_a_failing_sudo_run_is_reported_not_raised(box, monkeypatch):
247
251
  assert changed is False and "incomplete" in msg and "audit rules did not load" in msg
248
252
 
249
253
 
250
- def test_sudo_with_a_password_prints_one_command_with_an_absolute_path(box, monkeypatch):
254
+ def test_sudo_with_a_password_prints_one_command_that_root_can_actually_run(box, monkeypatch):
255
+ """`sudo agentos activity-setup` cannot work for a --user install: root neither
256
+ finds `agentos` nor can import `sdk`. The hint carries the interpreter and path."""
251
257
  monkeypatch.setattr(O, "_is_privileged", lambda: False)
252
258
  monkeypatch.setattr(O, "_sudo_without_password", lambda: False)
253
- monkeypatch.setattr(O, "_agentos_exe", lambda: "/home/umer/venv/bin/agentos")
259
+ monkeypatch.setattr(O, "_import_path", lambda: "/home/umer/.local/lib/python3.12/site-packages")
254
260
  changed, msg = O.ensure()
255
261
  assert changed is False
256
- assert "sudo /home/umer/venv/bin/agentos activity-setup" in msg
262
+ assert ("sudo env PYTHONPATH=/home/umer/.local/lib/python3.12/site-packages "
263
+ f"{O.sys.executable} -m sdk.activity.os_setup") in msg
257
264
 
258
265
 
259
266
  def test_flag_on_but_log_unreadable_is_not_treated_as_set_up(box, monkeypatch):
@@ -264,7 +271,7 @@ def test_flag_on_but_log_unreadable_is_not_treated_as_set_up(box, monkeypatch):
264
271
  tried = []
265
272
  monkeypatch.setattr(O, "_sudo_without_password", lambda: tried.append(1) or False)
266
273
  _, msg = O.ensure()
267
- assert tried and "activity-setup" in msg
274
+ assert tried and "-m sdk.activity.os_setup" in msg
268
275
 
269
276
 
270
277
  def test_sudo_is_never_tried_on_a_check(box, monkeypatch):
@@ -281,3 +288,26 @@ def test_privileged_without_sudo_is_a_root_panel_and_never_a_guessed_user(monkey
281
288
  assert O._panel_user() is None
282
289
  monkeypatch.setenv("SUDO_USER", "root")
283
290
  assert O._panel_user() is None
291
+
292
+
293
+ def test_the_root_child_can_import_the_sdk_without_site_packages(tmp_path):
294
+ """Regression for a `pip install --user` box: under sudo, root's interpreter does
295
+ not see the user's site-packages (`No module named 'sdk'`). `-S` drops site-packages
296
+ the same way, so with only the PYTHONPATH we hand over, the import must succeed."""
297
+ import subprocess
298
+
299
+ argv = O._privileged_argv()
300
+ env = {"PATH": "/usr/bin:/bin", argv[1].split("=", 1)[0]: argv[1].split("=", 1)[1]}
301
+ proc = subprocess.run(
302
+ [argv[2], "-S", "-c", "import sdk.activity.os_setup"],
303
+ cwd=tmp_path, env=env, capture_output=True, text=True, timeout=60,
304
+ )
305
+ assert proc.returncode == 0, proc.stderr
306
+
307
+
308
+ def test_the_working_directory_is_not_handed_to_root(tmp_path, monkeypatch):
309
+ monkeypatch.chdir(tmp_path)
310
+ monkeypatch.setattr(O.sys, "path", [str(tmp_path), "", *O.sys.path])
311
+ parts = O._import_path().split(O.os.pathsep)
312
+ assert str(tmp_path) not in parts
313
+ assert len(parts) == len(set(parts))