devops-bot-sdk 1.6.85__tar.gz → 1.6.87__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.87}/PKG-INFO +1 -1
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/devops_bot_sdk.egg-info/PKG-INFO +1 -1
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/devops_bot_sdk.egg-info/SOURCES.txt +1 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/__init__.py +2 -2
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/helpdesk_kb.md +39 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/updater.py +29 -6
- devops_bot_sdk-1.6.87/tests/test_updater_ignores_cwd.py +67 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/README.md +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/devops_bot_sdk.egg-info/dependency_links.txt +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/devops_bot_sdk.egg-info/entry_points.txt +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/devops_bot_sdk.egg-info/requires.txt +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/devops_bot_sdk.egg-info/top_level.txt +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/pyproject.toml +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/classifier.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/collectors/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/collectors/common.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/collectors/linux_auditd.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/collectors/macos_eslogger.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/collectors/windows_eventlog.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/models.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/os_setup.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/recorder.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/redact.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/settings.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/shipper.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/activity/spool.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agentd.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/activity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/builder.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/chat.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/connectors.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/engines/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/engines/claude_code.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/engines/http.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/engines/mcp.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/engines/n8n.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/engines/shell.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/integrations.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/inventory.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/library/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/manifest.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/prompt_studio.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/prompt_template.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/prompt_vars.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/run_log.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/schedules.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/secrets.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/ticket_run.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/usage.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/agents/varstore.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/browser_profile.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/claude_usage.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/cli.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/client.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/collectors/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/collectors/files.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/collectors/process.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/collectors/screenshot.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/config.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/crucial.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/custom_agents.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/departments.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/design_verify/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/design_verify/assets.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/design_verify/bootstrap.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/design_verify/browser.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/design_verify/compare.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/design_verify/loop.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/estimator.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/exceptions.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/fallback_handoff.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/firewall.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/formats.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/git_ops.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/github_fetch.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/github_ingest.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/graph_recon.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/graphify.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/helpdesk.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/hooks/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/hooks/crucial_guard.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/intake.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ipc/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ipc/electron_bridge.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ipc/handlers.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/journal.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/local_exec.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/memory_guard.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/models/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/models/envelope.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/models/requests.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/models/responses.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/models/snapshots.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/phase_timer.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/plan_run.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/platform_compat.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/prd_progress.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/proof_readers.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/providers.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/py.typed +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/resume.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/router.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/run_auto.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/schedule_tickets.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/scheduler.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/self_report.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/self_report_local.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/sse.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/swagger.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/task_file.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/task_types.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/test.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/test_pipeline.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ticket_fields.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/tickets.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/tiers/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/tiers/mini_agent.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/__init__.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/api.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/dashboard.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/health.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/ip_allowlist.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/jobs.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/models.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/runner.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/security.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/server.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/service.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/session.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/setup_manager.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/agents.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/app.js +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/chat.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/custom-agents.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/default-agents.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/help.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/index.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/report.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/runs.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/schedules.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/setup.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/styles.css +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/static/tickets.html +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/ui/swagger.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/url_access.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/vps_health.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/vps_identity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/sdk/write_hook.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/setup.cfg +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_activity_claude_runs.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_activity_collectors.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_activity_core.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_activity_live_tracking.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_activity_macos.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_activity_os_setup.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_activity_pipeline.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agent_activity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agent_activity_tracking.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agent_chat_features.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agent_crud_cli.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agent_listing.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agent_prompt_async.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agent_prompt_models.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agent_run_ticket.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agent_schedules.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agent_workspace_settings.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_agents_connectors_builder.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_allowed_tools_config.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_auto_agent_dispatch.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_auto_ticket_queue.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_browser_profile.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_cheap_tier.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_claude_usage_gate.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_client_jira_projects.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_config_token_diagnostics.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_configure_token_owner.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_console_encoding.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_crash_recovery.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_create_safe_retry.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_departments.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_done_transition.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_epic_decompose_run.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_epic_inherited_agent_id.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_epic_session_isolation.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_estimator.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_fallback_cli.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_fallback_cli_upgrade.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_firewall_open_on_update.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_formats.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_git_action.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_github_fetch.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_github_ingest.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_graph_recon.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_graphify_build.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_graphify_hook_install.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_health.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_helpdesk.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_intake_job_outcome.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_intake_plan_review.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_journal.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_limit_fallback_handoff.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_local_exec_provider.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_mcp_route_contract.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_memory_guard.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_panel_help.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_panel_ticket_schedules.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_phase_timer.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_plan_new_command.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_plan_run_activity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_pr_identity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_prd_artifact.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_project_path_resolution.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_proof_readers.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_providers.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_recon_session_isolation.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_resume.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_router.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_run_auto_agent_only.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_run_outputs.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_run_verdict_is_honest.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_schedule_api.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_schedule_outputs_and_plans.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_schedule_tickets.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_scheduler.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_scheduler_transient_retry.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_self_report.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_service_token_warning.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_stale_panel_restart.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_swagger_command.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_task_file_and_plan_run.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_task_file_format_doc.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_ticket_cli.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_ticket_fields.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_ticket_run_resolve_by_id.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_ticket_schedule_and_agent.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_ticket_speed_fixes.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_tier_flag_parity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_ui_gate.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_ui_lifespan.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_update_timer.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_updater_extras.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_updater_pep668.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_updater_reports_the_truth.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_url_access.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_vps_health.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_vps_only_reporting.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_windows_loop_identity.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_windows_panel_task.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_windows_stop_and_pidfile.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/tests/test_windows_task_paths.py +0 -0
- {devops_bot_sdk-1.6.85 → devops_bot_sdk-1.6.87}/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.87
|
|
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.87" # 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
|
|
@@ -101,6 +101,45 @@ the fix is not in their code, `agentos-auto update` installs the latest.
|
|
|
101
101
|
unresolved".** The `agentId` on the ticket could not be resolved
|
|
102
102
|
(`handlers._resolve_ticket_agent`); check the agent exists with
|
|
103
103
|
`agentos agent list`, or run with an explicit `--agent NAME`.
|
|
104
|
+
- **AI Draftsman fallback (`ad`) fails with `RATE_LIMIT: 429 RESOURCE_EXHAUSTED`.**
|
|
105
|
+
The text is Vertex's, but measured on 2026-10-24 the cause was Azure: the
|
|
106
|
+
gateway's `gpt-5.4` deployment (eastus) over its tokens-per-minute quota, then
|
|
107
|
+
every fallback model, with only the last error shown. Client side, `ad` 1.1.2
|
|
108
|
+
retries that error itself (5/10/20/40s); the SDK keeps machines on it —
|
|
109
|
+
`local_exec.FALLBACK_MIN_VERSION` is `(1, 1, 2)` and an older `ad` is upgraded
|
|
110
|
+
on `agentos-auto update`, or now with `agentos fallback install`. Check with
|
|
111
|
+
`agentos fallback status`. Server side (ai-draftsman-ml-b2b), rate-limited
|
|
112
|
+
deployments cool down and requests wait for capacity instead of failing, once
|
|
113
|
+
that change is deployed. Large prompts (a long ticket, `agentos help`) hit the
|
|
114
|
+
limit sooner; retrying a minute later usually works.
|
|
115
|
+
- **`agentos-auto update` says "still on vX — the upgrade did not take" but pip
|
|
116
|
+
exited 0.** Fixed in `updater._fresh_python_argv`: the post-install check ran
|
|
117
|
+
`python -c`, which reads the current directory first, so run from inside a
|
|
118
|
+
checkout of this repo it read the checkout's leftover `devops_bot_sdk.egg-info`
|
|
119
|
+
instead of the install. On an older SDK: run the update from any other folder,
|
|
120
|
+
or delete `devops_bot_sdk.egg-info` in the checkout (generated, git-ignored).
|
|
121
|
+
The install itself had worked.
|
|
122
|
+
- **After `agentos-auto update`: "no systemd unit 'agentos-ui' — restart the panel
|
|
123
|
+
manually", "could not read the firewall state (needs root …) … sudo ufw allow
|
|
124
|
+
8765/tcp", "VPS health: not reported — not_assigned_vps".** Not errors. The
|
|
125
|
+
update restarts the panel so it runs the new code (`sdk/ui/service.py`), checks
|
|
126
|
+
the panel's port is open for remote access (`sdk/firewall.py` — it never runs
|
|
127
|
+
sudo itself, so unprivileged it prints the command instead), and reports VPS
|
|
128
|
+
health only from the VPS assigned to the account (`sdk/vps_health.py`). On a
|
|
129
|
+
laptop or any machine that is not the assigned VPS all three are expected and
|
|
130
|
+
need no action; on the VPS, open the port with the printed command if the panel
|
|
131
|
+
must be reachable remotely, and restart `agentos-ui` if it runs by hand.
|
|
132
|
+
|
|
133
|
+
## Help in the control panel
|
|
134
|
+
|
|
135
|
+
The panel's **Help** page (`/help.html`, "Help" in the nav; `sdk/ui/static/help.html`)
|
|
136
|
+
is the same helper as `agentos help`: describe the problem, the answer shows which
|
|
137
|
+
engine answered (claude or the AI Draftsman fallback), follow-ups stay in the same
|
|
138
|
+
case. **Collect diagnostics only** = `agentos doctor`; **Download bundle for your
|
|
139
|
+
admin** = a zip of the case's diagnostics, errors and logs (no SDK source). API:
|
|
140
|
+
`POST /api/ui/help/ask` (a job), `POST /api/ui/help/doctor`,
|
|
141
|
+
`GET /api/ui/help/case/{name}/bundle` (`sdk/ui/api.py`). It runs on the machine the
|
|
142
|
+
panel runs on, so it reads that machine's logs.
|
|
104
143
|
|
|
105
144
|
## Useful commands (all verified to exist)
|
|
106
145
|
|
|
@@ -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.87}/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
|