devops-bot-sdk 1.6.85__tar.gz → 1.6.86__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.
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/PKG-INFO +1 -1
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/devops_bot_sdk.egg-info/PKG-INFO +1 -1
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/devops_bot_sdk.egg-info/SOURCES.txt +1 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/__init__.py +2 -2
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/updater.py +29 -6
- devops_bot_sdk-1.6.86/tests/test_updater_ignores_cwd.py +67 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/README.md +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/devops_bot_sdk.egg-info/dependency_links.txt +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/devops_bot_sdk.egg-info/entry_points.txt +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/devops_bot_sdk.egg-info/requires.txt +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/devops_bot_sdk.egg-info/top_level.txt +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/pyproject.toml +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/classifier.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/collectors/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/collectors/common.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/collectors/linux_auditd.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/collectors/macos_eslogger.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/collectors/windows_eventlog.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/models.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/os_setup.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/recorder.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/redact.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/settings.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/shipper.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/activity/spool.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agentd.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/activity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/builder.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/chat.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/connectors.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/engines/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/engines/claude_code.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/engines/http.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/engines/mcp.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/engines/n8n.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/engines/shell.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/integrations.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/inventory.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/library/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/manifest.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/prompt_studio.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/prompt_template.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/prompt_vars.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/run_log.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/schedules.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/secrets.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/ticket_run.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/usage.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/agents/varstore.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/browser_profile.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/claude_usage.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/cli.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/client.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/collectors/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/collectors/files.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/collectors/process.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/collectors/screenshot.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/config.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/crucial.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/custom_agents.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/departments.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/design_verify/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/design_verify/assets.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/design_verify/bootstrap.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/design_verify/browser.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/design_verify/compare.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/design_verify/loop.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/estimator.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/exceptions.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/fallback_handoff.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/firewall.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/formats.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/git_ops.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/github_fetch.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/github_ingest.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/graph_recon.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/graphify.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/helpdesk.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/helpdesk_kb.md +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/hooks/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/hooks/crucial_guard.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/intake.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ipc/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ipc/electron_bridge.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ipc/handlers.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/journal.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/local_exec.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/memory_guard.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/models/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/models/envelope.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/models/requests.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/models/responses.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/models/snapshots.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/phase_timer.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/plan_run.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/platform_compat.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/prd_progress.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/proof_readers.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/providers.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/py.typed +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/resume.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/router.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/run_auto.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/schedule_tickets.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/scheduler.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/self_report.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/self_report_local.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/sse.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/swagger.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/task_file.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/task_types.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/test.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/test_pipeline.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ticket_fields.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/tickets.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/tiers/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/tiers/mini_agent.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/api.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/dashboard.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/health.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/ip_allowlist.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/jobs.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/models.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/runner.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/security.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/server.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/service.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/session.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/setup_manager.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/agents.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/app.js +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/chat.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/custom-agents.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/default-agents.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/help.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/index.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/report.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/runs.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/schedules.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/setup.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/styles.css +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/static/tickets.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/ui/swagger.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/url_access.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/vps_health.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/vps_identity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/sdk/write_hook.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/setup.cfg +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_activity_claude_runs.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_activity_collectors.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_activity_core.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_activity_live_tracking.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_activity_macos.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_activity_os_setup.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_activity_pipeline.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agent_activity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agent_activity_tracking.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agent_chat_features.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agent_crud_cli.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agent_listing.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agent_prompt_async.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agent_prompt_models.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agent_run_ticket.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agent_schedules.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agent_workspace_settings.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_agents_connectors_builder.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_allowed_tools_config.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_auto_agent_dispatch.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_auto_ticket_queue.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_browser_profile.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_cheap_tier.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_claude_usage_gate.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_client_jira_projects.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_config_token_diagnostics.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_configure_token_owner.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_console_encoding.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_crash_recovery.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_create_safe_retry.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_departments.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_done_transition.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_epic_decompose_run.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_epic_inherited_agent_id.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_epic_session_isolation.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_estimator.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_fallback_cli.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_fallback_cli_upgrade.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_firewall_open_on_update.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_formats.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_git_action.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_github_fetch.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_github_ingest.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_graph_recon.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_graphify_build.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_graphify_hook_install.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_health.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_helpdesk.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_intake_job_outcome.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_intake_plan_review.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_journal.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_limit_fallback_handoff.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_local_exec_provider.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_mcp_route_contract.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_memory_guard.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_panel_help.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_panel_ticket_schedules.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_phase_timer.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_plan_new_command.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_plan_run_activity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_pr_identity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_prd_artifact.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_project_path_resolution.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_proof_readers.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_providers.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_recon_session_isolation.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_resume.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_router.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_run_auto_agent_only.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_run_outputs.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_run_verdict_is_honest.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_schedule_api.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_schedule_outputs_and_plans.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_schedule_tickets.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_scheduler.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_scheduler_transient_retry.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_self_report.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_service_token_warning.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_stale_panel_restart.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_swagger_command.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_task_file_and_plan_run.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_task_file_format_doc.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_ticket_cli.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_ticket_fields.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_ticket_run_resolve_by_id.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_ticket_schedule_and_agent.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_ticket_speed_fixes.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_tier_flag_parity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_ui_gate.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_ui_lifespan.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_update_timer.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_updater_extras.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_updater_pep668.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_updater_reports_the_truth.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_url_access.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_vps_health.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_vps_only_reporting.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_windows_loop_identity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_windows_panel_task.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_windows_stop_and_pidfile.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_windows_task_paths.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/tests/test_write_hook.py +0 -0
|
@@ -238,6 +238,7 @@ tests/test_ui_gate.py
|
|
|
238
238
|
tests/test_ui_lifespan.py
|
|
239
239
|
tests/test_update_timer.py
|
|
240
240
|
tests/test_updater_extras.py
|
|
241
|
+
tests/test_updater_ignores_cwd.py
|
|
241
242
|
tests/test_updater_pep668.py
|
|
242
243
|
tests/test_updater_reports_the_truth.py
|
|
243
244
|
tests/test_url_access.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""AgentOS Desktop SDK — thin HTTPS/SSE client for the Electron app.
|
|
2
2
|
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.86
|
|
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.
|
|
37
|
+
__version__ = "1.6.86" # 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
|
|
@@ -306,6 +306,28 @@ def _pip_install(
|
|
|
306
306
|
return (False, _redact(str(exc)))
|
|
307
307
|
|
|
308
308
|
|
|
309
|
+
def _fresh_python_argv(code: str) -> list[str]:
|
|
310
|
+
"""``python -P -c <code>`` — a fresh interpreter that does NOT put the current
|
|
311
|
+
directory on ``sys.path``.
|
|
312
|
+
|
|
313
|
+
Without ``-P``, ``python -c`` imports from the caller's working directory first.
|
|
314
|
+
Run from a checkout of this repo, that meant the checkout's ``sdk/`` and its
|
|
315
|
+
leftover ``devops_bot_sdk.egg-info`` (git-ignored, written by a past
|
|
316
|
+
``pip install -e .``) shadowed what pip had just installed: measured on
|
|
317
|
+
2026-10-24, ``agentos-auto update`` installed 1.6.85, read 1.6.82 from the
|
|
318
|
+
stale egg-info, reported "the upgrade did not take" and force-reinstalled
|
|
319
|
+
through every source. ``-P`` exists from 3.11, which ``requires-python``
|
|
320
|
+
already demands. The callers also run from a neutral directory, belt and
|
|
321
|
+
braces for an interpreter that ignores the flag.
|
|
322
|
+
"""
|
|
323
|
+
return [sys.executable, "-P", "-c", code]
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
def _neutral_cwd() -> str:
|
|
327
|
+
import tempfile
|
|
328
|
+
return tempfile.gettempdir()
|
|
329
|
+
|
|
330
|
+
|
|
309
331
|
def installed_version() -> str:
|
|
310
332
|
"""The version pip has ON DISK, read in a FRESH interpreter.
|
|
311
333
|
|
|
@@ -318,10 +340,10 @@ def installed_version() -> str:
|
|
|
318
340
|
"""
|
|
319
341
|
try:
|
|
320
342
|
r = subprocess.run(
|
|
321
|
-
|
|
322
|
-
|
|
343
|
+
_fresh_python_argv(
|
|
344
|
+
f"from importlib.metadata import version; print(version({_DIST!r}))"),
|
|
323
345
|
capture_output=True, text=True, errors="replace", timeout=60,
|
|
324
|
-
check=False,
|
|
346
|
+
check=False, cwd=_neutral_cwd(),
|
|
325
347
|
)
|
|
326
348
|
ver = (r.stdout or "").strip().splitlines()
|
|
327
349
|
if r.returncode == 0 and ver and ver[-1].strip():
|
|
@@ -338,10 +360,11 @@ def _verify_install() -> bool:
|
|
|
338
360
|
``agentos-auto.exe`` / loaded package files can't be replaced mid-pip, which
|
|
339
361
|
can leave ``sdk`` importable but missing submodules (e.g. local_exec)."""
|
|
340
362
|
try:
|
|
363
|
+
# Same shadowing as `installed_version`: from a checkout, this imported the
|
|
364
|
+
# CHECKOUT's sdk and called a broken install healthy.
|
|
341
365
|
r = subprocess.run(
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
capture_output=True, timeout=90,
|
|
366
|
+
_fresh_python_argv("import sdk, sdk.local_exec, sdk.ipc.handlers, sdk.run_auto"),
|
|
367
|
+
capture_output=True, timeout=90, cwd=_neutral_cwd(),
|
|
345
368
|
)
|
|
346
369
|
return r.returncode == 0
|
|
347
370
|
except Exception: # noqa: BLE001
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""`agentos-auto update` run from a checkout must read what pip installed, not the
|
|
2
|
+
checkout.
|
|
3
|
+
|
|
4
|
+
Measured 2026-10-24: run from `~/github/DevOpsBot-SDK`, the update installed
|
|
5
|
+
1.6.85, then read 1.6.82 from the checkout's leftover `devops_bot_sdk.egg-info`
|
|
6
|
+
(a `python -c` child puts the working directory first on `sys.path`), reported
|
|
7
|
+
"the upgrade did not take" and force-reinstalled through every source.
|
|
8
|
+
"""
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import subprocess
|
|
12
|
+
import sys
|
|
13
|
+
|
|
14
|
+
import pytest
|
|
15
|
+
|
|
16
|
+
from sdk import updater
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@pytest.fixture
|
|
20
|
+
def stale_checkout(tmp_path, monkeypatch):
|
|
21
|
+
"""Two places that both look like the SDK:
|
|
22
|
+
|
|
23
|
+
* the WORKING DIRECTORY — an old checkout: egg-info at 0.0.1 and an `sdk/`
|
|
24
|
+
that cannot be imported;
|
|
25
|
+
* an INSTALLED location on PYTHONPATH (which `-P` still honours) — what pip
|
|
26
|
+
just put down: 9.9.9, importable with the submodules `_verify_install` loads.
|
|
27
|
+
"""
|
|
28
|
+
checkout = tmp_path / "checkout"
|
|
29
|
+
egg = checkout / "devops_bot_sdk.egg-info"
|
|
30
|
+
egg.mkdir(parents=True)
|
|
31
|
+
(egg / "PKG-INFO").write_text("Metadata-Version: 2.1\nName: devops-bot-sdk\nVersion: 0.0.1\n")
|
|
32
|
+
(checkout / "sdk").mkdir()
|
|
33
|
+
(checkout / "sdk" / "__init__.py").write_text("raise ImportError('the stale checkout')\n")
|
|
34
|
+
|
|
35
|
+
installed = tmp_path / "site"
|
|
36
|
+
dist = installed / "devops_bot_sdk-9.9.9.dist-info"
|
|
37
|
+
dist.mkdir(parents=True)
|
|
38
|
+
(dist / "METADATA").write_text("Metadata-Version: 2.1\nName: devops-bot-sdk\nVersion: 9.9.9\n")
|
|
39
|
+
for mod in ("sdk/__init__.py", "sdk/local_exec.py", "sdk/run_auto.py",
|
|
40
|
+
"sdk/ipc/__init__.py", "sdk/ipc/handlers.py"):
|
|
41
|
+
(installed / mod).parent.mkdir(parents=True, exist_ok=True)
|
|
42
|
+
(installed / mod).write_text("")
|
|
43
|
+
|
|
44
|
+
monkeypatch.setenv("PYTHONPATH", str(installed))
|
|
45
|
+
monkeypatch.chdir(checkout)
|
|
46
|
+
return checkout
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def test_the_shadowing_is_real(stale_checkout):
|
|
50
|
+
"""Proof the fixture reproduces the bug: a plain `python -c` reads the checkout."""
|
|
51
|
+
r = subprocess.run(
|
|
52
|
+
[sys.executable, "-c",
|
|
53
|
+
"from importlib.metadata import version; print(version('devops-bot-sdk'))"],
|
|
54
|
+
capture_output=True, text=True)
|
|
55
|
+
assert r.stdout.strip() == "0.0.1"
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def test_installed_version_reads_the_install_not_the_checkout(stale_checkout):
|
|
59
|
+
assert updater.installed_version() == "9.9.9"
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_verify_install_imports_the_install_not_the_checkout(stale_checkout):
|
|
63
|
+
assert updater._verify_install() is True
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_the_probe_never_puts_the_cwd_on_the_path():
|
|
67
|
+
assert updater._fresh_python_argv("pass")[:3] == [sys.executable, "-P", "-c"]
|
|
File without changes
|
{devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.86}/devops_bot_sdk.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|