refactor(cli): remove obsolete workflow commands
This commit is contained in:
@@ -26,7 +26,7 @@ DECISION_OPT = typer.Option(None, "--decision", help="Seq da promuovere (ripetib
|
||||
def registry_path(cfg) -> Path:
|
||||
if getattr(cfg.paths, "memory", None) is not None:
|
||||
return cfg.paths.memory / "registry.jsonl"
|
||||
# Legacy location; migrate with `tht memory migrate` (P3).
|
||||
# Legacy location remains readable while old workspaces are retired.
|
||||
return cfg.paths.artifacts / "memory" / "registry.jsonl"
|
||||
|
||||
|
||||
@@ -45,12 +45,6 @@ def _resync_memory(cfg):
|
||||
)
|
||||
|
||||
|
||||
def clear_memory_index(cfg):
|
||||
from tht.adapters.factory import build_vector_store
|
||||
|
||||
return build_vector_store(cfg, require_write=True).delete_kinds("memory", ["memory"])
|
||||
|
||||
|
||||
@memory_app.command("promote")
|
||||
def promote_cmd(
|
||||
session: str = typer.Option(..., "--session"),
|
||||
@@ -130,7 +124,7 @@ def promote_cmd(
|
||||
f"{len(promoted)} memorie promosse nel registro, ma l'indice vettoriale "
|
||||
"NON e' stato sincronizzato (runtime vettoriale mancante o irraggiungibile): "
|
||||
"NON saranno trovate da `tht memory search` finche' non reindicizzi sul "
|
||||
"server (`tht vector init`, poi `tht memory index`)."
|
||||
"server (`tht memory index` quando il runtime vettoriale è disponibile)."
|
||||
)
|
||||
|
||||
if json_out:
|
||||
@@ -194,35 +188,6 @@ def save_one_cmd(
|
||||
typer.secho(f"OK: {msg}", fg=typer.colors.GREEN if count else typer.colors.YELLOW)
|
||||
|
||||
|
||||
@memory_app.command("clear")
|
||||
def clear_cmd(
|
||||
yes: bool = typer.Option(False, "--yes", "-y", help="Salta la richiesta di conferma."),
|
||||
config: Path = CONFIG_OPT,
|
||||
) -> None:
|
||||
"""Cancella TUTTA la review memory: registro canonico + indice semantico (kind=memory)."""
|
||||
from tht.memory import load_registry
|
||||
|
||||
cfg = _load_config_or_exit(config)
|
||||
require_server_profile(cfg, "memory clear")
|
||||
registry = registry_path(cfg)
|
||||
count = len(load_registry(registry))
|
||||
if count == 0:
|
||||
typer.secho("Nessuna memoria da cancellare.", fg=typer.colors.YELLOW)
|
||||
return
|
||||
|
||||
if not yes and not typer.confirm(
|
||||
f"Cancellare definitivamente {count} memorie (registro + indice)?"
|
||||
):
|
||||
typer.secho("Annullato.", fg=typer.colors.YELLOW)
|
||||
raise typer.Exit(code=1)
|
||||
|
||||
clear_memory_index(cfg)
|
||||
|
||||
# Registro canonico.
|
||||
registry.unlink()
|
||||
typer.secho(f"OK: {count} memorie cancellate.", fg=typer.colors.GREEN)
|
||||
|
||||
|
||||
@memory_app.command("index")
|
||||
def index_cmd(config: Path = CONFIG_OPT) -> None:
|
||||
"""Sincronizza il registro memory nell'indice semantico (full-resync)."""
|
||||
@@ -553,67 +518,3 @@ def solved_search_cmd(
|
||||
table.add_row(r["session_id"], r["question"][:60],
|
||||
", ".join(r["tables"]), f"{r['score']:.3f}")
|
||||
Console().print(table)
|
||||
|
||||
@memory_app.command("migrate")
|
||||
def memory_migrate_cmd(
|
||||
config: Path = CONFIG_OPT,
|
||||
json_output: bool = typer.Option(False, "--json"),
|
||||
) -> None:
|
||||
"""Migrate the legacy artifacts/memory registry to the explicit workspace memory root (P3).
|
||||
|
||||
Copies and verifies exactly one legacy canonical JSONL under the workspace lock, then rebuilds
|
||||
the Qdrant projection. Conflicting legacy registries fail closed; no in-place reinterpretation.
|
||||
"""
|
||||
from tht.memory import load_registry
|
||||
|
||||
cfg = _load_config_or_exit(config)
|
||||
target_root = getattr(cfg.paths, "memory", None)
|
||||
if target_root is None:
|
||||
payload = {"status": "failed", "error": "explicit memory root is not configured"}
|
||||
if json_output:
|
||||
typer.echo(json.dumps(payload, sort_keys=True))
|
||||
else:
|
||||
typer.secho("ERRORE: memory root esplicito non configurato", fg=typer.colors.RED, err=True)
|
||||
raise typer.Exit(code=1)
|
||||
legacy = cfg.paths.artifacts / "memory" / "registry.jsonl"
|
||||
target = registry_path(cfg)
|
||||
if target.exists():
|
||||
payload = {"status": "unchanged", "path": str(target)}
|
||||
if json_output:
|
||||
typer.echo(json.dumps(payload, sort_keys=True))
|
||||
else:
|
||||
typer.secho(f"OK: memory registry già in {target}", fg=typer.colors.GREEN)
|
||||
return
|
||||
if not legacy.exists():
|
||||
payload = {"status": "failed", "error": "legacy memory registry is missing"}
|
||||
if json_output:
|
||||
typer.echo(json.dumps(payload, sort_keys=True))
|
||||
else:
|
||||
typer.secho("ERRORE: registry legacy mancante", fg=typer.colors.RED, err=True)
|
||||
raise typer.Exit(code=1)
|
||||
try:
|
||||
records = load_registry(legacy)
|
||||
except Exception: # noqa: BLE001
|
||||
payload = {"status": "failed", "error": "legacy memory registry is invalid"}
|
||||
if json_output:
|
||||
typer.echo(json.dumps(payload, sort_keys=True))
|
||||
else:
|
||||
typer.secho("ERRORE: registry legacy non valido", fg=typer.colors.RED, err=True)
|
||||
raise typer.Exit(code=1)
|
||||
target_root.mkdir(parents=True, exist_ok=True)
|
||||
from tht.memory import save_registry
|
||||
|
||||
save_registry(records, target)
|
||||
if load_registry(target) != records:
|
||||
target.unlink(missing_ok=True)
|
||||
payload = {"status": "failed", "error": "memory registry migration verification failed"}
|
||||
if json_output:
|
||||
typer.echo(json.dumps(payload, sort_keys=True))
|
||||
else:
|
||||
typer.secho("ERRORE: verifica migrazione fallita", fg=typer.colors.RED, err=True)
|
||||
raise typer.Exit(code=1)
|
||||
payload = {"status": "migrated", "path": str(target), "records": len(records)}
|
||||
if json_output:
|
||||
typer.echo(json.dumps(payload, sort_keys=True))
|
||||
else:
|
||||
typer.secho(f"OK: migrate {len(records)} record verso {target}", fg=typer.colors.GREEN)
|
||||
|
||||
Reference in New Issue
Block a user