devops-bot-sdk 1.6.54__tar.gz → 1.6.57__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.54 → devops_bot_sdk-1.6.57}/PKG-INFO +1 -1
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/devops_bot_sdk.egg-info/PKG-INFO +1 -1
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/devops_bot_sdk.egg-info/SOURCES.txt +2 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/pyproject.toml +1 -1
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/__init__.py +1 -1
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/cli.py +94 -1
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ipc/handlers.py +9 -8
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/local_exec.py +449 -1
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/plan_run.py +2 -3
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/run_auto.py +2 -3
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/setup_manager.py +14 -0
- devops_bot_sdk-1.6.57/sdk/vendor/aidraftsman-cli-0.1.0.tgz +0 -0
- devops_bot_sdk-1.6.57/tests/test_fallback_cli.py +301 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_project_path_resolution.py +12 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_task_file_and_plan_run.py +14 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/README.md +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/devops_bot_sdk.egg-info/dependency_links.txt +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/devops_bot_sdk.egg-info/entry_points.txt +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/devops_bot_sdk.egg-info/requires.txt +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/devops_bot_sdk.egg-info/top_level.txt +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/classifier.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/collectors/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/collectors/common.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/collectors/linux_auditd.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/collectors/macos_eslogger.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/collectors/windows_eventlog.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/models.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/os_setup.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/recorder.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/redact.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/settings.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/shipper.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/activity/spool.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agentd.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/activity.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/builder.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/chat.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/connectors.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/engines/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/engines/claude_code.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/engines/http.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/engines/mcp.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/engines/n8n.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/engines/shell.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/integrations.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/inventory.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/library/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/manifest.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/prompt_studio.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/prompt_template.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/prompt_vars.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/run_log.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/schedules.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/secrets.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/ticket_run.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/usage.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/agents/varstore.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/browser_profile.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/client.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/collectors/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/collectors/files.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/collectors/process.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/collectors/screenshot.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/config.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/crucial.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/departments.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/design_verify/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/design_verify/assets.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/design_verify/bootstrap.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/design_verify/browser.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/design_verify/compare.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/design_verify/loop.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/estimator.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/exceptions.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/firewall.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/formats.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/git_ops.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/github_fetch.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/github_ingest.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/graph_recon.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/graphify.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/hooks/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/hooks/crucial_guard.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/intake.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ipc/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ipc/electron_bridge.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/journal.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/memory_guard.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/models/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/models/envelope.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/models/requests.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/models/responses.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/models/snapshots.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/phase_timer.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/platform_compat.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/prd_progress.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/proof_readers.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/providers.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/py.typed +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/resume.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/router.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/scheduler.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/self_report.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/self_report_local.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/sse.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/swagger.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/task_file.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/task_types.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/test.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/test_pipeline.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ticket_fields.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/tiers/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/tiers/mini_agent.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/__init__.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/api.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/dashboard.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/health.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/ip_allowlist.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/jobs.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/models.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/runner.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/security.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/server.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/service.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/session.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/agents.html +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/app.js +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/chat.html +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/custom-agents.html +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/default-agents.html +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/index.html +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/report.html +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/runs.html +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/schedules.html +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/setup.html +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/styles.css +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/static/tickets.html +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/ui/swagger.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/updater.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/url_access.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/vps_health.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/sdk/write_hook.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/setup.cfg +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_activity_collectors.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_activity_core.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_activity_macos.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_activity_os_setup.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_activity_pipeline.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_agent_activity.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_agent_activity_tracking.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_agent_chat_features.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_agent_listing.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_agent_prompt_async.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_agent_prompt_models.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_agent_run_ticket.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_agent_schedules.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_agent_workspace_settings.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_agents_connectors_builder.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_allowed_tools_config.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_auto_agent_dispatch.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_browser_profile.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_cheap_tier.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_client_jira_projects.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_config_token_diagnostics.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_configure_token_owner.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_console_encoding.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_crash_recovery.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_departments.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_done_transition.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_epic_decompose_run.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_epic_inherited_agent_id.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_epic_session_isolation.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_estimator.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_firewall_open_on_update.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_formats.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_git_action.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_github_fetch.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_github_ingest.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_graph_recon.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_graphify_build.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_graphify_hook_install.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_health.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_intake_job_outcome.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_intake_plan_review.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_journal.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_local_exec_provider.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_mcp_route_contract.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_memory_guard.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_phase_timer.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_plan_new_command.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_plan_run_activity.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_pr_identity.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_prd_artifact.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_proof_readers.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_providers.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_recon_session_isolation.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_resume.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_router.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_run_auto_agent_only.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_run_outputs.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_run_verdict_is_honest.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_schedule_api.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_schedule_outputs_and_plans.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_scheduler.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_self_report.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_service_token_warning.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_stale_panel_restart.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_swagger_command.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_task_file_format_doc.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_ticket_fields.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_ticket_run_resolve_by_id.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_ticket_speed_fixes.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_tier_flag_parity.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_ui_gate.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_ui_lifespan.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_update_timer.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_updater_extras.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_updater_pep668.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_updater_reports_the_truth.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_url_access.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_vps_health.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_windows_loop_identity.py +0 -0
- {devops_bot_sdk-1.6.54 → devops_bot_sdk-1.6.57}/tests/test_write_hook.py +0 -0
|
@@ -137,6 +137,7 @@ sdk/ui/static/schedules.html
|
|
|
137
137
|
sdk/ui/static/setup.html
|
|
138
138
|
sdk/ui/static/styles.css
|
|
139
139
|
sdk/ui/static/tickets.html
|
|
140
|
+
sdk/vendor/aidraftsman-cli-0.1.0.tgz
|
|
140
141
|
tests/test_activity_collectors.py
|
|
141
142
|
tests/test_activity_core.py
|
|
142
143
|
tests/test_activity_macos.py
|
|
@@ -167,6 +168,7 @@ tests/test_epic_decompose_run.py
|
|
|
167
168
|
tests/test_epic_inherited_agent_id.py
|
|
168
169
|
tests/test_epic_session_isolation.py
|
|
169
170
|
tests/test_estimator.py
|
|
171
|
+
tests/test_fallback_cli.py
|
|
170
172
|
tests/test_firewall_open_on_update.py
|
|
171
173
|
tests/test_formats.py
|
|
172
174
|
tests/test_git_action.py
|
|
@@ -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.57" # 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
|
|
@@ -104,6 +104,11 @@ Command surface:
|
|
|
104
104
|
One submission in full — its text, its proofs and the evaluator's
|
|
105
105
|
per-criterion reasoning.
|
|
106
106
|
|
|
107
|
+
agentos fallback install | login [--browser | --api-key [KEY]] | status [--verify] | logout
|
|
108
|
+
The AI Draftsman CLI a ticket re-runs on when `claude` is not working:
|
|
109
|
+
install the bundled copy, log it in (a sign-in code approved on the
|
|
110
|
+
frontend, or an API key), and check it. See sdk.local_exec.fallback_status.
|
|
111
|
+
|
|
107
112
|
agentos agentd start [--foreground]
|
|
108
113
|
Start the local agent daemon (background by default).
|
|
109
114
|
agentos agentd status
|
|
@@ -188,12 +193,16 @@ def main() -> None:
|
|
|
188
193
|
_browser_command(rest)
|
|
189
194
|
return
|
|
190
195
|
|
|
196
|
+
if noun == "fallback":
|
|
197
|
+
_fallback_command(rest)
|
|
198
|
+
return
|
|
199
|
+
|
|
191
200
|
_print_usage()
|
|
192
201
|
sys.exit(1)
|
|
193
202
|
|
|
194
203
|
|
|
195
204
|
def _print_usage() -> None:
|
|
196
|
-
print("usage: agentos <configure|chat|agent|integration|default-agents|agentd|github|report|browser|firewall|activity-setup|swagger> ...")
|
|
205
|
+
print("usage: agentos <configure|chat|agent|integration|default-agents|agentd|github|report|browser|fallback|firewall|activity-setup|swagger> ...")
|
|
197
206
|
print()
|
|
198
207
|
print(" agentos configure [--rotate]")
|
|
199
208
|
print(" agentos chat [--product-id ID] [--pv-id ID] [--no-autorun] # requirements → ticket")
|
|
@@ -205,6 +214,7 @@ def _print_usage() -> None:
|
|
|
205
214
|
print(" agentos github <ingest [--days N]|status> # PR ingestion; --days N backfills N days")
|
|
206
215
|
print(" agentos report <submit|list|show ID> # report work Jira/GitHub never saw")
|
|
207
216
|
print(" agentos browser <login URL|status|logout> # sign in once; private links become readable")
|
|
217
|
+
print(" agentos fallback <install|login|status|logout> # the AI Draftsman CLI used when claude is not working")
|
|
208
218
|
print(" agentos firewall [--apply] [--revoke IP] [--port N] # open the UI port to the allowlisted IPs")
|
|
209
219
|
print(" agentos firewall --any [--apply] # open the UI port to any source (allowlist is the gate)")
|
|
210
220
|
print(" agentos swagger [--open] [--json [PATH]] # where /docs is, and can you reach it")
|
|
@@ -892,6 +902,89 @@ def _browser_command(args: list[str]) -> None:
|
|
|
892
902
|
sys.exit(1)
|
|
893
903
|
|
|
894
904
|
|
|
905
|
+
# ── fallback ─────────────────────────────────────────────────────────────
|
|
906
|
+
|
|
907
|
+
def _fallback_usage() -> None:
|
|
908
|
+
print("usage: agentos fallback install # npm-install the bundled CLI now")
|
|
909
|
+
print(" agentos fallback login [--browser | --api-key [KEY]] [--base-url URL] [--no-browser]")
|
|
910
|
+
print(" agentos fallback status [--verify] # --verify asks the server too")
|
|
911
|
+
print(" agentos fallback logout")
|
|
912
|
+
print()
|
|
913
|
+
print(" When the `claude` CLI is not working, tickets re-run on the AI Draftsman CLI")
|
|
914
|
+
print(" bundled with the SDK. It needs its own login, made as the user the SDK runs as.")
|
|
915
|
+
print()
|
|
916
|
+
print(" --browser prints a sign-in code and a link; approve it on the AI Draftsman")
|
|
917
|
+
print(" frontend from any machine — works on a headless VPS")
|
|
918
|
+
print(" --api-key paste a key from Settings → API keys (hidden prompt), or pass")
|
|
919
|
+
print(" KEY after the flag")
|
|
920
|
+
print(" (neither) the CLI's own menu")
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
def _fallback_command(args: list[str]) -> None:
|
|
924
|
+
"""``agentos fallback install|login|status|logout`` — the AI Draftsman fallback CLI."""
|
|
925
|
+
from sdk import local_exec as le
|
|
926
|
+
|
|
927
|
+
verb = args[0] if args else None
|
|
928
|
+
rest = args[1:]
|
|
929
|
+
|
|
930
|
+
if verb == "install":
|
|
931
|
+
if le._fallback_disabled():
|
|
932
|
+
print("error: the fallback is disabled (AGENTOS_FALLBACK_CLI=off)")
|
|
933
|
+
sys.exit(1)
|
|
934
|
+
cli = asyncio.run(le.ensure_fallback_cli())
|
|
935
|
+
if not cli:
|
|
936
|
+
print("error: could not install the AI Draftsman CLI (Node.js 20+ and npm are needed)")
|
|
937
|
+
sys.exit(1)
|
|
938
|
+
print(f"installed: {cli}")
|
|
939
|
+
ad = Path(cli).with_name("ad.cmd" if cli.lower().endswith(".cmd") else "ad")
|
|
940
|
+
if ad.exists():
|
|
941
|
+
print(f"also as : {ad} (the same CLI under its short name)")
|
|
942
|
+
print("next : agentos fallback login")
|
|
943
|
+
return
|
|
944
|
+
|
|
945
|
+
if verb == "login":
|
|
946
|
+
method = api_key = base_url = None
|
|
947
|
+
no_browser = True if "--no-browser" in rest else None
|
|
948
|
+
if "--browser" in rest:
|
|
949
|
+
method = "browser"
|
|
950
|
+
if "--api-key" in rest:
|
|
951
|
+
method = "api-key"
|
|
952
|
+
i = rest.index("--api-key") + 1
|
|
953
|
+
if i < len(rest) and not rest[i].startswith("-"):
|
|
954
|
+
api_key = rest[i]
|
|
955
|
+
if "--base-url" in rest:
|
|
956
|
+
try:
|
|
957
|
+
base_url = rest[rest.index("--base-url") + 1]
|
|
958
|
+
except IndexError:
|
|
959
|
+
print("error: --base-url needs a URL")
|
|
960
|
+
sys.exit(1)
|
|
961
|
+
rc = le.fallback_login(method=method, api_key=api_key, base_url=base_url,
|
|
962
|
+
no_browser=no_browser)
|
|
963
|
+
if rc == 0:
|
|
964
|
+
print("check it : agentos fallback status --verify")
|
|
965
|
+
sys.exit(rc)
|
|
966
|
+
|
|
967
|
+
if verb == "status":
|
|
968
|
+
st = le.fallback_status(verify="--verify" in rest)
|
|
969
|
+
print(f"installed : {'yes' if st['installed'] else 'no'}")
|
|
970
|
+
print(f"path : {st['path'] or '-'}")
|
|
971
|
+
print(f"logged in : {'yes' if st['logged_in'] else 'no'}")
|
|
972
|
+
if st["verified"] is not None:
|
|
973
|
+
print(f"server : {'key accepted' if st['verified'] else 'NOT accepted'}")
|
|
974
|
+
print(f"account : {st['account'] or '-'}")
|
|
975
|
+
print(f"server url: {st['base_url'] or '-'}")
|
|
976
|
+
if st["error"]:
|
|
977
|
+
print(f"problem : {st['error']}")
|
|
978
|
+
ready = st["logged_in"] and st["verified"] is not False
|
|
979
|
+
sys.exit(0 if ready else 1)
|
|
980
|
+
|
|
981
|
+
if verb == "logout":
|
|
982
|
+
sys.exit(le.fallback_logout())
|
|
983
|
+
|
|
984
|
+
_fallback_usage()
|
|
985
|
+
sys.exit(1)
|
|
986
|
+
|
|
987
|
+
|
|
895
988
|
def _report_check(url: str) -> None:
|
|
896
989
|
"""``agentos report check <URL>`` — can this machine open that link?
|
|
897
990
|
|
|
@@ -1973,12 +1973,11 @@ async def _run_local_pipeline(
|
|
|
1973
1973
|
thread_id = str(payload.get("thread_id", "") or "")
|
|
1974
1974
|
project_path = str(payload.get("project_path", "") or "").strip()
|
|
1975
1975
|
|
|
1976
|
-
if not local_exec.
|
|
1976
|
+
if not local_exec.can_run_locally():
|
|
1977
1977
|
await send(Envelope(
|
|
1978
1978
|
type=Envelope.TYPE_ERROR, thread_id=thread_id,
|
|
1979
1979
|
data={"code": "CLAUDE_CLI_MISSING",
|
|
1980
|
-
"message":
|
|
1981
|
-
"Install it (and run `claude login`) to use the local claude_code engine."},
|
|
1980
|
+
"message": local_exec.NO_LOCAL_CLI_MESSAGE},
|
|
1982
1981
|
).model_dump())
|
|
1983
1982
|
return
|
|
1984
1983
|
if not project_path:
|
|
@@ -3920,12 +3919,15 @@ _HOME_PATH_RE = re.compile(r"(?<![\w.])~(?:/[A-Za-z0-9._\- ]+)+")
|
|
|
3920
3919
|
# `[\\/]+` in the separator position, not a single `\\`: a doubled separator is a
|
|
3921
3920
|
# thing people write (`D://Nexus-AI` — the exact form in one bug report) and the
|
|
3922
3921
|
# old pattern rejected it outright, sending the ticket to the ~/AgentOS fallback.
|
|
3923
|
-
|
|
3922
|
+
# The drive letter must not follow a word character: in `https://host/...` the
|
|
3923
|
+
# `s:` of the scheme otherwise reads as drive S:, so any ticket quoting a web link
|
|
3924
|
+
# "named" the folder `s://host/...` and was refused as unresolvable.
|
|
3925
|
+
_WIN_PATH_RE = re.compile(r"(?<![A-Za-z0-9_])[A-Za-z]:[\\/]+(?:[^\\/:*?\"<>|\r\n]+[\\/]*)+")
|
|
3924
3926
|
# Windows path written with FORWARD slashes (e.g. C:/Users/me/new_tasks) — common on
|
|
3925
3927
|
# Windows. Segments here also allow spaces, for the same reason the backslash form
|
|
3926
3928
|
# does; over-capture is settled afterwards by `_trim_to_existing_dir`, not by trying
|
|
3927
3929
|
# to tell a folder name from prose with a regex.
|
|
3928
|
-
_WIN_FS_PATH_RE = re.compile(r"[A-Za-z]:/+(?:[^\\/:*?\"<>|\r\n]+/*)+")
|
|
3930
|
+
_WIN_FS_PATH_RE = re.compile(r"(?<![A-Za-z0-9_])[A-Za-z]:/+(?:[^\\/:*?\"<>|\r\n]+/*)+")
|
|
3929
3931
|
# A QUOTED path (single/double/back quotes) — the reliable way to give a path that
|
|
3930
3932
|
# contains spaces, on any OS. Accepts a drive letter with EITHER separator (C:\ or C:/).
|
|
3931
3933
|
_QUOTED_PATH_RE = re.compile(r"""["'`]\s*((?:[A-Za-z]:[\\/]|~/|/)[^"'`\r\n]+?)\s*["'`]""")
|
|
@@ -4951,12 +4953,11 @@ async def handle_orchestrate_auto_local_run(
|
|
|
4951
4953
|
# guaranteed on every exit — including early returns — via the finally below.
|
|
4952
4954
|
active_flusher: ActivityFlusher | None = None
|
|
4953
4955
|
try:
|
|
4954
|
-
if not local_exec.
|
|
4956
|
+
if not local_exec.can_run_locally():
|
|
4955
4957
|
await send(Envelope(
|
|
4956
4958
|
type=Envelope.TYPE_ERROR, thread_id=thread_id,
|
|
4957
4959
|
data={"code": "CLAUDE_CLI_MISSING",
|
|
4958
|
-
"message":
|
|
4959
|
-
"Install it and run `claude setup-token` to use local execution."},
|
|
4960
|
+
"message": local_exec.NO_LOCAL_CLI_MESSAGE},
|
|
4960
4961
|
).model_dump())
|
|
4961
4962
|
return
|
|
4962
4963
|
|