refactorai-cli 0.7.13__tar.gz → 0.7.15__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.
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/PKG-INFO +1 -1
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/pyproject.toml +1 -1
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/__init__.py +1 -1
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/run_cmds.py +11 -2
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/runtime_proxy_cmds.py +74 -10
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli.egg-info/PKG-INFO +1 -1
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/README.md +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/auth.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/client.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/cloud_rr.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/__init__.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/account_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/auth_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/branch_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/cloud_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/engine_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/hook_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/model_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/policy_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/pre_push_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/request_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/rules_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/runtime_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/setup_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/toolchains_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/watch_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/workspace_cmds.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commit_queue.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commit_telemetry.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/control_plane.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/credentials.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/dotenv_loader.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/git_scope.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/local_constitution.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/local_engine_runtime.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/local_paths.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/main.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/mode_sync.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/model_policy.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/pre_push_gate.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/refactor_branch_store.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/review_runner.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/runtime_manager.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/settings.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/setup_flow.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/watch_ledger.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/watch_state.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/watch_supervisor.py +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli.egg-info/SOURCES.txt +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli.egg-info/dependency_links.txt +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli.egg-info/entry_points.txt +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli.egg-info/requires.txt +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli.egg-info/top_level.txt +0 -0
- {refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/setup.cfg +0 -0
|
@@ -119,7 +119,6 @@ from refactor_core.execution_variant import (
|
|
|
119
119
|
is_cloud_execution,
|
|
120
120
|
platform_inference_mode,
|
|
121
121
|
resolve_execution_variant,
|
|
122
|
-
uses_platform_inference,
|
|
123
122
|
verification_location,
|
|
124
123
|
)
|
|
125
124
|
|
|
@@ -5341,7 +5340,17 @@ def doctor(
|
|
|
5341
5340
|
_report_dotenv(dotenv, project_root)
|
|
5342
5341
|
|
|
5343
5342
|
execution_variant = _execution_variant(constitution)
|
|
5344
|
-
|
|
5343
|
+
# Route by ENGINE LOCATION (docs/46), matching review/code dispatch. Every
|
|
5344
|
+
# server-engine variant (local_byok / local_managed / cloud_byok /
|
|
5345
|
+
# cloud_managed) runs its engine on the Refactor server, so it is diagnosed
|
|
5346
|
+
# via the platform path and must NEVER import engine-only modules -- those
|
|
5347
|
+
# ship in the private engine wheel and are absent from a public pip/pipx
|
|
5348
|
+
# install. Only the host-engine variants (local_heuristic / local_model)
|
|
5349
|
+
# fall through to the engine-backed local doctor below. Previously this
|
|
5350
|
+
# branched on ``uses_platform_inference`` (False for local_byok), which sent
|
|
5351
|
+
# local_byok down the local path and blew up importing
|
|
5352
|
+
# ``refactor_core.execution`` on a client-only install.
|
|
5353
|
+
if engine_is_remote(execution_variant):
|
|
5345
5354
|
_cloud_doctor(
|
|
5346
5355
|
project_root=project_root,
|
|
5347
5356
|
constitution=constitution,
|
{refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli/commands/runtime_proxy_cmds.py
RENAMED
|
@@ -79,6 +79,30 @@ def _engine_runs_on_server() -> bool:
|
|
|
79
79
|
return engine_is_remote(_project_execution_mode())
|
|
80
80
|
|
|
81
81
|
|
|
82
|
+
def _sync_mode_from_server_if_possible(command_name: str | None = None) -> None:
|
|
83
|
+
"""Best-effort server->local mode sync before routing.
|
|
84
|
+
|
|
85
|
+
Fixes the stale-mode chicken-and-egg: when a developer changes the mode in
|
|
86
|
+
the web UI, the local ``refactor.config`` may still point at the previous
|
|
87
|
+
variant. If dispatch reads that stale local value first, commands can route
|
|
88
|
+
to the wrong engine path (for example ``doctor`` going to the runtime path
|
|
89
|
+
instead of the local CLI cloud path), so the sync never runs and the local
|
|
90
|
+
mode never updates.
|
|
91
|
+
|
|
92
|
+
This helper is intentionally silent and fail-open (offline/auth issues are
|
|
93
|
+
ignored) so command routing remains robust.
|
|
94
|
+
"""
|
|
95
|
+
try:
|
|
96
|
+
from refactorai_cli.mode_sync import sync_execution_variant_from_server
|
|
97
|
+
|
|
98
|
+
emit = None
|
|
99
|
+
if command_name == "doctor":
|
|
100
|
+
emit = lambda m: console.print(f"[dim]{m}[/dim]")
|
|
101
|
+
sync_execution_variant_from_server(Path.cwd(), emit=emit)
|
|
102
|
+
except Exception:
|
|
103
|
+
return
|
|
104
|
+
|
|
105
|
+
|
|
82
106
|
def _active_runtime_artifact() -> Path:
|
|
83
107
|
status = runtime_status()
|
|
84
108
|
version = str(status.get("active_version") or "").strip()
|
|
@@ -98,12 +122,50 @@ def _active_runtime_artifact() -> Path:
|
|
|
98
122
|
return artifact
|
|
99
123
|
|
|
100
124
|
|
|
125
|
+
# Subpackages that ship ONLY in the private engine wheel (R21 core split) and are
|
|
126
|
+
# intentionally absent from a public pip/pipx install of ``refactorai-core``.
|
|
127
|
+
_ENGINE_ONLY_PREFIXES = (
|
|
128
|
+
"refactor_core.execution",
|
|
129
|
+
"refactor_core.providers",
|
|
130
|
+
"refactor_core.enginecore",
|
|
131
|
+
"refactor_core.codeintel",
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _is_engine_only_module(exc: ModuleNotFoundError) -> bool:
|
|
136
|
+
"""True when the missing module is an engine-only subpackage (not version skew)."""
|
|
137
|
+
name = exc.name or ""
|
|
138
|
+
return any(name == p or name.startswith(p + ".") for p in _ENGINE_ONLY_PREFIXES)
|
|
139
|
+
|
|
140
|
+
|
|
101
141
|
def _is_core_too_old(exc: ModuleNotFoundError) -> bool:
|
|
102
|
-
"""True when a missing module points at an outdated installed ``refactor_core``.
|
|
103
|
-
|
|
142
|
+
"""True when a missing module points at an outdated installed ``refactor_core``.
|
|
143
|
+
|
|
144
|
+
Engine-only subpackages are excluded: their absence in a public install is by
|
|
145
|
+
design, not a version mismatch (see :func:`_print_missing_module`).
|
|
146
|
+
"""
|
|
147
|
+
return (exc.name or "").startswith("refactor_core") and not _is_engine_only_module(exc)
|
|
148
|
+
|
|
104
149
|
|
|
150
|
+
def _print_missing_module(exc: ModuleNotFoundError) -> None:
|
|
151
|
+
"""Print an actionable message for a missing ``refactor_core`` module.
|
|
105
152
|
|
|
106
|
-
|
|
153
|
+
Distinguishes two very different causes:
|
|
154
|
+
- engine-only module absent from a public install (a routing/mode issue), vs
|
|
155
|
+
- a genuinely outdated core (version skew -> upgrade).
|
|
156
|
+
"""
|
|
157
|
+
if _is_engine_only_module(exc):
|
|
158
|
+
console.print(
|
|
159
|
+
"[red]This command needs the local engine, which is not part of the "
|
|
160
|
+
"public install.[/red]\n"
|
|
161
|
+
f"Missing engine module: [bold]{exc.name}[/bold]\n"
|
|
162
|
+
"Only local_heuristic / local_model run the engine on this machine "
|
|
163
|
+
"(via the runtime artifact). Server-engine modes (local_byok / "
|
|
164
|
+
"local_managed / cloud_byok / cloud_managed) should not reach this "
|
|
165
|
+
"path — check the project's execution mode in refactor.config or the "
|
|
166
|
+
"web UI, then rerun. If the mode is correct, this is a routing bug."
|
|
167
|
+
)
|
|
168
|
+
return
|
|
107
169
|
console.print(
|
|
108
170
|
"[red]Installed refactor core is too old for this CLI.[/red]\n"
|
|
109
171
|
f"Missing module: [bold]{exc.name}[/bold]\n"
|
|
@@ -127,8 +189,8 @@ def _delegate_to_run_cmds(command_name: str, passthrough_args: list[str]) -> Non
|
|
|
127
189
|
try:
|
|
128
190
|
from refactorai_cli.commands import run_cmds
|
|
129
191
|
except ModuleNotFoundError as exc:
|
|
130
|
-
if
|
|
131
|
-
|
|
192
|
+
if (exc.name or "").startswith("refactor_core"):
|
|
193
|
+
_print_missing_module(exc)
|
|
132
194
|
raise typer.Exit(code=1) from exc
|
|
133
195
|
raise
|
|
134
196
|
|
|
@@ -157,11 +219,12 @@ def _delegate_to_run_cmds(command_name: str, passthrough_args: list[str]) -> Non
|
|
|
157
219
|
if code:
|
|
158
220
|
raise typer.Exit(code=code) from exc
|
|
159
221
|
except ModuleNotFoundError as exc:
|
|
160
|
-
# A refactor_core submodule missing at call time
|
|
161
|
-
#
|
|
162
|
-
#
|
|
163
|
-
|
|
164
|
-
|
|
222
|
+
# A refactor_core submodule missing at call time can mean two things:
|
|
223
|
+
# version skew (installed core predates this CLI) or an engine-only module
|
|
224
|
+
# reached on a client-only install (a routing/mode issue). Surface the
|
|
225
|
+
# right actionable hint instead of exiting silently.
|
|
226
|
+
if (exc.name or "").startswith("refactor_core"):
|
|
227
|
+
_print_missing_module(exc)
|
|
165
228
|
else:
|
|
166
229
|
console.print(f"[red]{command_name} failed:[/red] {exc}")
|
|
167
230
|
raise typer.Exit(code=1) from exc
|
|
@@ -181,6 +244,7 @@ def _dispatch(command_name: str, passthrough_args: list[str]) -> None:
|
|
|
181
244
|
host-engine variants (``local_model`` / ``local_heuristic``) execute via the
|
|
182
245
|
downloaded runtime artifact.
|
|
183
246
|
"""
|
|
247
|
+
_sync_mode_from_server_if_possible(command_name)
|
|
184
248
|
if _engine_runs_on_server():
|
|
185
249
|
_delegate_to_run_cmds(command_name, passthrough_args)
|
|
186
250
|
return
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{refactorai_cli-0.7.13 → refactorai_cli-0.7.15}/refactorai_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|