steerdev 1.1.44__tar.gz → 1.1.45__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.
- {steerdev-1.1.44 → steerdev-1.1.45}/PKG-INFO +1 -1
- {steerdev-1.1.44 → steerdev-1.1.45}/pyproject.toml +1 -1
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/cli.py +25 -1
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/executor/__init__.py +9 -1
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/runner.py +24 -1
- steerdev-1.1.45/tests/test_resolve_executor_config.py +85 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/.github/workflows/pre-commit.yml +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/.github/workflows/publish.yml +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/.gitignore +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/.pre-commit-config.yaml +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/AGENTS.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/CLAUDE.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/README.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/docs/superpowers/plans/2026-06-05-wave-id-implies-unlimited-max-tasks.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/docs/superpowers/specs/2026-06-05-wave-id-implies-unlimited-max-tasks-design.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/scripts/pre-commit-version-bump.sh +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/snapshots/steerdev-agent-v1/Dockerfile +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/snapshots/steerdev-agent-v1/start-agent.sh +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/__init__.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/agent_loop.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/__init__.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/activity.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/agents.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/canals.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/client.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/commands.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/configs.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/context.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/events.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/hooks.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/implementation_plan.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/merger.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/messages.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/prd.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/reports.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/runs.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/sessions.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/specs.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/tasks.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/workflow_runs.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/api/workflows.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/config/__init__.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/config/models.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/config/platform.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/config/settings.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/evidence.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/evidence_assets.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/executor/base.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/executor/claude.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/executor/stream.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/git/__init__.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/git/commit.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/git/pr.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/git_ops.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/handlers/__init__.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/handlers/prd.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/integration.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/prompt/__init__.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/prompt/builder.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/prompt/templates.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/prompt/workflow_template.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/py.typed +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/retry.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/__init__.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/claude_setup.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/repo_setup.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/ci/canal-integration.yml +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/claude_md_section.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/settings.json +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/skills/steerdev-activity-skill/SKILL.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/skills/steerdev-canal-workflow-skill/SKILL.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/skills/steerdev-context-skill/SKILL.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/skills/steerdev-git-workflow-skill/SKILL.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/skills/steerdev-merge-into-canal-skill/SKILL.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/skills/steerdev-progress-logging-skill/SKILL.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/skills/steerdev-single-task-merge-skill/SKILL.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/skills/steerdev-specs-management-skill/SKILL.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/skills/steerdev-task-management-skill/SKILL.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/skills/steerdev-wave-tasks-merge-skill/SKILL.md +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/steerdev.yaml +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/worktrunk.config.toml +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/update_check.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/version.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/workflow/__init__.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/workflow/context.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/workflow/executor.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/workflow/memory.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/workspace/__init__.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/workspace/preparation.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/workspace/project_manager.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/workspace/tool_detection.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/worktree.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/__init__.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_agent_loop.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_agent_loop_extended.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_agents_api.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_api_client.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_claude_executor.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_claude_setup.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_client_methods.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_commands_api.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_config.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_config_extended.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_conflict_mitigation.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_context_search.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_executor.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_git_commit.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_git_ops.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_git_pr.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_hooks_post_tool_use.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_platform_config.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_preparation.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_preparation_provenance.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_prompt.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_reports_client.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_resolve_max_tasks.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_retry.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_runner_boundary_commit.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_runner_merge_modes.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_runner_wave_pr.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_runner_worktrees.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_stream_parser.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_tasks.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_tasks_update_branch.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_version.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_wave_scoped_fetch.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_workflow_context.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_workflow_memory.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_workflow_prompt_template.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_workflow_runs_api.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_workspace.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_workspace_extended.py +0 -0
- {steerdev-1.1.44 → steerdev-1.1.45}/tests/test_worktree.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: steerdev
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.45
|
|
4
4
|
Summary: Backend task runner for steerdev.com - orchestrates CLI coding agents with activity reporting
|
|
5
5
|
Project-URL: Homepage, https://github.com/pentoai/steerdev-agent
|
|
6
6
|
Project-URL: Repository, https://github.com/pentoai/steerdev-agent
|
|
@@ -1654,6 +1654,18 @@ def run(
|
|
|
1654
1654
|
envvar="STEERDEV_AGENT_ID",
|
|
1655
1655
|
),
|
|
1656
1656
|
] = None,
|
|
1657
|
+
provider: Annotated[
|
|
1658
|
+
str | None,
|
|
1659
|
+
typer.Option(
|
|
1660
|
+
"--provider",
|
|
1661
|
+
help=(
|
|
1662
|
+
"AI provider / executor type to run tasks with (e.g. claude)."
|
|
1663
|
+
" Overrides steerdev.yaml executor.type."
|
|
1664
|
+
" Reads from STEERDEV_PROVIDER env var."
|
|
1665
|
+
),
|
|
1666
|
+
envvar="STEERDEV_PROVIDER",
|
|
1667
|
+
),
|
|
1668
|
+
] = None,
|
|
1657
1669
|
model: Annotated[
|
|
1658
1670
|
str | None,
|
|
1659
1671
|
typer.Option(
|
|
@@ -1815,7 +1827,11 @@ def run(
|
|
|
1815
1827
|
steerdev run --project-id abc123 --workflow-id wf-abc123
|
|
1816
1828
|
steerdev run --config custom.yaml --project-id abc123
|
|
1817
1829
|
"""
|
|
1818
|
-
from steerdev_agent.runner import
|
|
1830
|
+
from steerdev_agent.runner import (
|
|
1831
|
+
resolve_executor_config,
|
|
1832
|
+
resolve_max_tasks,
|
|
1833
|
+
run_agent,
|
|
1834
|
+
)
|
|
1819
1835
|
|
|
1820
1836
|
# Get config from context (loaded in app callback)
|
|
1821
1837
|
config: SteerDevConfig = ctx.obj or SteerDevConfig()
|
|
@@ -1844,6 +1860,12 @@ def run(
|
|
|
1844
1860
|
resolved_evidence_config = config.evidence.model_copy()
|
|
1845
1861
|
if evidence is not None:
|
|
1846
1862
|
resolved_evidence_config.enabled = evidence
|
|
1863
|
+
# Resolve executor config: --provider/STEERDEV_PROVIDER overrides executor.type
|
|
1864
|
+
try:
|
|
1865
|
+
resolved_executor_config = resolve_executor_config(config.executor, provider)
|
|
1866
|
+
except ValueError as e:
|
|
1867
|
+
console.print(f"[red]Error: {e}[/red]")
|
|
1868
|
+
raise typer.Exit(1) from e
|
|
1847
1869
|
|
|
1848
1870
|
# API key: CLI > env (via envvar) > config env var
|
|
1849
1871
|
resolved_api_key = api_key
|
|
@@ -1875,6 +1897,7 @@ def run(
|
|
|
1875
1897
|
f"Project ID: {resolved_project_id}\n"
|
|
1876
1898
|
f"Agent Name: {agent_name_display}\n"
|
|
1877
1899
|
f"Working Directory: {working_dir or 'current'}\n"
|
|
1900
|
+
f"Provider: {resolved_executor_config.type}\n"
|
|
1878
1901
|
f"Model: {resolved_model or 'default'}\n"
|
|
1879
1902
|
f"Max Tasks: {max_tasks_display}\n"
|
|
1880
1903
|
f"Timeout: {resolved_timeout}s\n"
|
|
@@ -1921,6 +1944,7 @@ def run(
|
|
|
1921
1944
|
enable_canals=canals,
|
|
1922
1945
|
worktree_config=resolved_worktree_config,
|
|
1923
1946
|
evidence_config=resolved_evidence_config,
|
|
1947
|
+
executor_config=resolved_executor_config,
|
|
1924
1948
|
force_workflow_id=resolved_workflow_id,
|
|
1925
1949
|
dry_run=dry_run,
|
|
1926
1950
|
retry_config=retry_config,
|
|
@@ -12,6 +12,7 @@ if TYPE_CHECKING:
|
|
|
12
12
|
from steerdev_agent.config.models import ExecutorConfig
|
|
13
13
|
|
|
14
14
|
__all__ = [
|
|
15
|
+
"SUPPORTED_EXECUTOR_TYPES",
|
|
15
16
|
"AgentExecutor",
|
|
16
17
|
"ClaudeExecutor",
|
|
17
18
|
"ExecutorFactory",
|
|
@@ -19,6 +20,10 @@ __all__ = [
|
|
|
19
20
|
"StreamParser",
|
|
20
21
|
]
|
|
21
22
|
|
|
23
|
+
# Executor types ExecutorFactory can build. `steerdev run --provider` and
|
|
24
|
+
# steerdev.yaml's executor.type are validated against this.
|
|
25
|
+
SUPPORTED_EXECUTOR_TYPES: tuple[str, ...] = ("claude",)
|
|
26
|
+
|
|
22
27
|
|
|
23
28
|
class ExecutorFactory:
|
|
24
29
|
"""Factory for creating agent executors based on configuration."""
|
|
@@ -62,4 +67,7 @@ class ExecutorFactory:
|
|
|
62
67
|
extra_args=config.args or None,
|
|
63
68
|
)
|
|
64
69
|
|
|
65
|
-
raise ValueError(
|
|
70
|
+
raise ValueError(
|
|
71
|
+
f"Unsupported executor type: {config.type} "
|
|
72
|
+
f"(supported: {', '.join(SUPPORTED_EXECUTOR_TYPES)})"
|
|
73
|
+
)
|
|
@@ -26,7 +26,7 @@ from steerdev_agent.config.models import (
|
|
|
26
26
|
RetryConfig,
|
|
27
27
|
WorktreeConfig,
|
|
28
28
|
)
|
|
29
|
-
from steerdev_agent.executor import ExecutorFactory
|
|
29
|
+
from steerdev_agent.executor import SUPPORTED_EXECUTOR_TYPES, ExecutorFactory
|
|
30
30
|
from steerdev_agent.executor.base import AgentExecutor, EventType, StreamEvent
|
|
31
31
|
from steerdev_agent.executor.claude import ClaudeExecutorError
|
|
32
32
|
from steerdev_agent.git.commit import commit_task_boundary
|
|
@@ -165,6 +165,29 @@ def resolve_max_tasks(max_tasks: int | None, wave_id: str | None) -> int:
|
|
|
165
165
|
return 0 if wave_id else 1
|
|
166
166
|
|
|
167
167
|
|
|
168
|
+
def resolve_executor_config(
|
|
169
|
+
base: ExecutorConfig,
|
|
170
|
+
provider: str | None,
|
|
171
|
+
) -> ExecutorConfig:
|
|
172
|
+
"""Resolve the effective executor config for a run.
|
|
173
|
+
|
|
174
|
+
- `provider` (from --provider / STEERDEV_PROVIDER) overrides the config
|
|
175
|
+
file's executor.type; None keeps it.
|
|
176
|
+
- The resolved type is validated against SUPPORTED_EXECUTOR_TYPES so an
|
|
177
|
+
unsupported provider fails fast (before task claiming), not deep inside
|
|
178
|
+
ExecutorFactory mid-run.
|
|
179
|
+
"""
|
|
180
|
+
resolved = base.model_copy()
|
|
181
|
+
if provider is not None:
|
|
182
|
+
resolved.type = provider
|
|
183
|
+
if resolved.type not in SUPPORTED_EXECUTOR_TYPES:
|
|
184
|
+
raise ValueError(
|
|
185
|
+
f"Unsupported provider: {resolved.type} "
|
|
186
|
+
f"(supported: {', '.join(SUPPORTED_EXECUTOR_TYPES)})"
|
|
187
|
+
)
|
|
188
|
+
return resolved
|
|
189
|
+
|
|
190
|
+
|
|
168
191
|
def resolve_merge_flow(
|
|
169
192
|
waves_enabled: bool,
|
|
170
193
|
canals_enabled: bool,
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""Tests for resolve_executor_config: the `steerdev run --provider` override.
|
|
2
|
+
|
|
3
|
+
The sandbox bootstrap passes --provider "$STEERDEV_PROVIDER" so the web app
|
|
4
|
+
can choose the executor per dispatch. Resolution: CLI/env > config file >
|
|
5
|
+
default ("claude"). Unsupported providers must fail fast with a clear error,
|
|
6
|
+
before any network or agent work starts.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import pytest
|
|
10
|
+
from typer.testing import CliRunner
|
|
11
|
+
|
|
12
|
+
from steerdev_agent.cli import app
|
|
13
|
+
from steerdev_agent.config.models import ExecutorConfig
|
|
14
|
+
from steerdev_agent.executor import SUPPORTED_EXECUTOR_TYPES
|
|
15
|
+
from steerdev_agent.runner import resolve_executor_config
|
|
16
|
+
|
|
17
|
+
runner = CliRunner()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_no_provider_keeps_config_type():
|
|
21
|
+
# Without --provider, the config file's executor.type is preserved.
|
|
22
|
+
base = ExecutorConfig(type="claude", permission_mode="plan")
|
|
23
|
+
resolved = resolve_executor_config(base, None)
|
|
24
|
+
assert resolved.type == "claude"
|
|
25
|
+
assert resolved.permission_mode == "plan"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_provider_overrides_config_type():
|
|
29
|
+
resolved = resolve_executor_config(ExecutorConfig(), "claude")
|
|
30
|
+
assert resolved.type == "claude"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_does_not_mutate_base_config():
|
|
34
|
+
base = ExecutorConfig()
|
|
35
|
+
resolve_executor_config(base, "claude")
|
|
36
|
+
assert base.type == "claude"
|
|
37
|
+
resolved = resolve_executor_config(base, "claude")
|
|
38
|
+
assert resolved is not base
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def test_unsupported_provider_raises_with_supported_list():
|
|
42
|
+
with pytest.raises(ValueError, match="codex"):
|
|
43
|
+
resolve_executor_config(ExecutorConfig(), "codex")
|
|
44
|
+
with pytest.raises(ValueError, match="claude"):
|
|
45
|
+
# The error must name the supported types so the sandbox log is actionable.
|
|
46
|
+
resolve_executor_config(ExecutorConfig(), "nonsense")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def test_unsupported_config_type_raises_even_without_provider():
|
|
50
|
+
# A bad executor.type in steerdev.yaml should fail fast too, not deep in
|
|
51
|
+
# ExecutorFactory after task claiming.
|
|
52
|
+
with pytest.raises(ValueError, match="nonsense"):
|
|
53
|
+
resolve_executor_config(ExecutorConfig(type="nonsense"), None)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def test_supported_types_include_claude():
|
|
57
|
+
assert "claude" in SUPPORTED_EXECUTOR_TYPES
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def test_cli_run_help_lists_provider():
|
|
61
|
+
result = runner.invoke(app, ["run", "--help"])
|
|
62
|
+
assert result.exit_code == 0
|
|
63
|
+
assert "--provider" in result.output
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_cli_run_rejects_unsupported_provider_before_running():
|
|
67
|
+
# Must exit non-zero with an actionable message, without contacting the API.
|
|
68
|
+
result = runner.invoke(
|
|
69
|
+
app,
|
|
70
|
+
["run", "--project-id", "proj-x", "--provider", "nonsense"],
|
|
71
|
+
)
|
|
72
|
+
assert result.exit_code == 1
|
|
73
|
+
assert "nonsense" in result.output
|
|
74
|
+
assert "claude" in result.output
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def test_cli_run_reads_provider_from_env():
|
|
78
|
+
# The sandbox exports STEERDEV_PROVIDER; the option must honor it.
|
|
79
|
+
result = runner.invoke(
|
|
80
|
+
app,
|
|
81
|
+
["run", "--project-id", "proj-x"],
|
|
82
|
+
env={"STEERDEV_PROVIDER": "nonsense"},
|
|
83
|
+
)
|
|
84
|
+
assert result.exit_code == 1
|
|
85
|
+
assert "nonsense" in result.output
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/ci/canal-integration.yml
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
|
{steerdev-1.1.44 → steerdev-1.1.45}/src/steerdev_agent/setup/templates/worktrunk.config.toml
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
|