From bbbeaf5c7984d9bae0f0e18ddbee1cad41469af2 Mon Sep 17 00:00:00 2001 From: Matt Miller Date: Tue, 14 Jul 2026 12:38:56 -0700 Subject: [PATCH 1/2] =?UTF-8?q?refactor(cli):=20remove=20dead=20command=20?= =?UTF-8?q?surface=20=E2=80=94=20dup=20dependency=20decorator,=20models=20?= =?UTF-8?q?typo-stub,=20no-op=20nodes=20refresh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dependency: collapse the two stacked @app.command decorators into one (hidden=True + help), so the name registers exactly one implementation. - models: drop the hidden 'did you mean comfy model' typo-stub in cmdline.py; it was shadowed by the real 'models' sub-app and never reachable. - nodes refresh: remove the honest no-op command. object_info is fetched live and the on-disk cache auto-refreshes on every successful 'comfy nodes' command via resilient_load_object_info, so a manual refresh does nothing. --- comfy_cli/cmdline.py | 10 ++-------- comfy_cli/command/nodes.py | 22 ---------------------- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/comfy_cli/cmdline.py b/comfy_cli/cmdline.py index 4662b788..ea939041 100644 --- a/comfy_cli/cmdline.py +++ b/comfy_cli/cmdline.py @@ -1435,12 +1435,6 @@ def env(): renderer.emit(data, command="env") -@app.command(hidden=True) -@tracking.track_command() -def models(): - rprint("\n[bold red] No such command, did you mean 'comfy model' instead?[/bold red]\n") - - _FEEDBACK_DISABLED_NOTICE = ( "[yellow]Feedback not sent — telemetry is opted out via DO_NOT_TRACK / COMFY_NO_TELEMETRY.[/yellow]\n" "Unset that to send, or open an issue: https://github.com/Comfy-Org/comfy-cli/issues/new/choose" @@ -1544,9 +1538,9 @@ def agent_review( ) -@app.command(hidden=True) @app.command( - help="Given an existing installation of comfy core and any custom nodes, installs any needed python dependencies" + hidden=True, + help="Given an existing installation of comfy core and any custom nodes, installs any needed python dependencies", ) @tracking.track_command() def dependency(): diff --git a/comfy_cli/command/nodes.py b/comfy_cli/command/nodes.py index 27e48989..f41aefe8 100644 --- a/comfy_cli/command/nodes.py +++ b/comfy_cli/command/nodes.py @@ -848,25 +848,3 @@ def categories_cmd( renderer.console().print(tbl) rprint(f"[dim]{len(flat)} categories[/dim]") renderer.emit(payload, command="nodes categories") - - -# --------------------------------------------------------------------------- -# refresh — object_info is fetched live; nothing to cache -# --------------------------------------------------------------------------- - - -@app.command( - "refresh", - help="object_info is fetched live from the server on each command — nothing to refresh.", -) -@tracking.track_command("nodes") -def refresh_cmd( - where: Annotated[ - str | None, - typer.Option("--where", show_default=False, help="Override the resolved routing mode."), - ] = None, -): - """Explain that object_info is fetched live and exit.""" - renderer = get_renderer() - rprint("[dim]object_info is fetched live from the server on each command — nothing to refresh.[/dim]") - renderer.emit({"refreshed": False, "reason": "live_fetch"}, command="nodes refresh") From ed8e28982e0bb3c76d9931a3db039dad6f85424e Mon Sep 17 00:00:00 2001 From: Matt Miller Date: Tue, 14 Jul 2026 13:34:02 -0700 Subject: [PATCH 2/2] fix(cli): scrub dangling nodes refresh references (BE-2978) Removing the no-op `nodes refresh` command left dangling guidance pointing users/agents at a now-nonexistent command. Since object_info is fetched live (no cache to populate), replace each reference with the accurate remediation: - run/__init__.py cql_no_graph hint: check cloud sign-in/connection + retry, or use a local server - discovery.py COMMAND_SCHEMAS: drop the `comfy nodes refresh` entry - comfy-debug + comfy SKILL.md: point to retry/live-fetch guidance Raised by cursor-review (gpt-5.3-codex-xhigh edge-case). Co-Authored-By: Claude Opus 4.8 --- comfy_cli/command/run/__init__.py | 2 +- comfy_cli/discovery.py | 1 - comfy_cli/skills/comfy-debug/SKILL.md | 2 +- comfy_cli/skills/comfy/SKILL.md | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/comfy_cli/command/run/__init__.py b/comfy_cli/command/run/__init__.py index fc230d00..4d5a170b 100644 --- a/comfy_cli/command/run/__init__.py +++ b/comfy_cli/command/run/__init__.py @@ -531,7 +531,7 @@ def execute_cloud( renderer.error( code="cql_no_graph", message=f"could not load cloud object_info for conversion: {e}", - hint="run `comfy nodes refresh --where cloud` to populate the cache", + hint="object_info is fetched live — check your cloud sign-in and connection then retry, or run against a local server", ) raise typer.Exit(code=1) from e try: diff --git a/comfy_cli/discovery.py b/comfy_cli/discovery.py index f98e9493..7e636e3e 100644 --- a/comfy_cli/discovery.py +++ b/comfy_cli/discovery.py @@ -48,7 +48,6 @@ "comfy nodes path": "nodes", "comfy nodes types": "nodes", "comfy nodes categories": "nodes", - "comfy nodes refresh": "nodes", # workflow editing "comfy workflow slots": "workflow", "comfy workflow set-slot": "workflow", diff --git a/comfy_cli/skills/comfy-debug/SKILL.md b/comfy_cli/skills/comfy-debug/SKILL.md index 056a737a..3e8c30eb 100644 --- a/comfy_cli/skills/comfy-debug/SKILL.md +++ b/comfy_cli/skills/comfy-debug/SKILL.md @@ -47,7 +47,7 @@ comfy --json run --workflow same_workflow.json --where cloud # just resubmit If several jobs from one batch died together with this code, resubmit them all; one retry each is normally enough. ### `workflow_not_api_format` -UI-format workflows are converted to API format **client-side** using object_info (no server conversion endpoint exists). If conversion fails with `conversion_error`, re-export via `File > Export (API)` in ComfyUI; if object_info can't be fetched (`cql_no_graph`), run `comfy nodes refresh --where cloud` or start a local server. +UI-format workflows are converted to API format **client-side** using object_info (no server conversion endpoint exists). If conversion fails with `conversion_error`, re-export via `File > Export (API)` in ComfyUI; if object_info can't be fetched (`cql_no_graph`), retry (it's fetched live — check cloud sign-in/connection) or start a local server. ### `workflow_invalid_json` The file isn't valid JSON. Inspect the first/last 100 bytes — often it's an HTML error page that was saved with `.json`. diff --git a/comfy_cli/skills/comfy/SKILL.md b/comfy_cli/skills/comfy/SKILL.md index 6f9a3649..8d079426 100644 --- a/comfy_cli/skills/comfy/SKILL.md +++ b/comfy_cli/skills/comfy/SKILL.md @@ -499,7 +499,7 @@ object_info through the routing chain with a cached fallback — cloud-signed-in works with no local server. If the live fetch fails, the command still succeeds from cache and the envelope carries `data.stale: true` + `warnings[] {code: "object_info_stale"}` — treat results as possibly outdated -and run `comfy nodes refresh --where cloud` to refresh. +re-run the command once the live fetch recovers to pick up fresh object_info. Slot addresses are `.`. Feed them to `workflow set-slot` / `workflow vary` in the Execution half. Works on