Zum Inhalt springen

Projektspeicher verschieben oder wiederherstellen

opencode-mem schlüsselt Projekt-Shards über einen Hash der Projektidentität. Das Verschieben eines Repositories (OS-Migration, Pfad-Reorganisation, Wechsel von einem Windows-Mount auf einen nativen Pfad) kann daher den alten Shard unter ~/.opencode-mem/data/projects/ verwaisen lassen, während für den neuen Pfad ein neuer leerer Shard angelegt wird.

Das sind OpenCode-memory-Tool-Aufrufe mit JSON-Argumenten, keine Befehle zum Ausführen im Terminal. Die Issue-ähnliche Notation memory migrate --from ... entspricht memory({ mode: "migrate", fromPath: "..." }).

1. Lokaler Umzug, wenn du den alten Pfad noch kennst

OpenCode im neuen Projektverzeichnis öffnen. Das Zielprojekt darf noch keine Memories enthalten (Migration bricht bei Konflikt unverändert ab). Vor jeder Änderung die erkannte Quelle, das Ziel und die Dateiaktionen prüfen:

memory({ mode: "migrate", fromPath: "/old/path/to/project", dryRun: true });
memory({ mode: "migrate", fromPath: "/old/path/to/project" });

Zur Sicherheit lehnt die Migration eine Quelle ab, deren gespeichertes Projektverzeichnis noch existiert. Wenn du eine aktive Quelle absichtlich verschieben willst, zuerst die Dry-Run- Ausgabe prüfen und dann allowLinkedSource: true übergeben. Original-Quell-Shard- Dateien bleiben als zeitgestempelte *.pre-path-migrate-*.bak-Backups erhalten.

2. Alter Pfad ist weg — zuerst den verwaisten Shard finden

memory({ mode: "list-shards" });
memory({ mode: "migrate", fromHash: "fa645294d88bbae2" });

list-shards meldet jeden Projekt-Hash, den gespeicherten projectPath, die Memory-Anzahl und den Status (current, linked, orphaned, missing-file, empty oder ambiguous). fromHash ist der 16-stellige hexadezimale Kleinbuchstaben-scopeHash, den dieser Aufruf zurückgibt. Bevorzuge ihn, wenn das alte Verzeichnis nicht mehr existiert oder mehrere Shards denselben gespeicherten Pfad enthalten, weil Git-basierte Identitäten aus einem fehlenden Pfad nicht immer neu berechnet werden können.

3. Maschinenübergreifendes Backup / Restore

// on the source machine / old checkout
memory({ mode: "export", outputPath: "./memories.json" });
// on the destination machine / new checkout
memory({ mode: "import", inputPath: "./memories.json", dryRun: true });
memory({ mode: "import", inputPath: "./memories.json" });

Export schreibt ein versioniertes JSON-Dokument ohne Vektoren. Import mappt die Memories auf das aktuelle Projekt um und berechnet Embeddings mit dem aktuell konfigurierten Modell neu. Import fügt Memories zu einem bestehenden Projekt hinzu, aber doppelte Memory-IDs brechen den gesamten Import vor dem Schreiben ab; das unterscheidet sich von migrate, das ein leeres Ziel verlangt.

Export-Dateien sind Klartext und können Memory-Inhalte, User-Namen/E-Mail- Adressen, Repository-URLs und absolute Projektpfade enthalten. Sie wie andere sensible Backups speichern und löschen, wenn sie nicht mehr benötigt werden. Vollständig private Einträge werden ausgelassen, und Benutzerprofile sowie Prompt-Historie sind nicht enthalten. Das Dokument enthält schemaVersion: 1; Imports lehnen neuere nicht unterstützte Schema- Versionen ab, statt zu raten.