MCP: Nodes kopieren, auch in einen anderen Graphen #434

Closed
opened 2026-10-18 19:38:38 +02:00 by meleki · 1 comment
Owner

Aus #429, Nachbetrachtung nach Etappe 5d („was am MCP noch fehlt“). Punkt 4 von 6.

Anlass

Der Agent baut gleiche Teile eines Graphen jedes Mal neu auf, Node für Node und Kante für Kante, auch wenn derselbe Aufbau schon in einem anderen Behavior oder Instrument steht. Der User kopiert so etwas mit Ctrl+C und Ctrl+V.

Stand heute (im Code nachgesehen)

  • Der Graph-Tab kopiert über die Zwischenablage (src/editor/clipboard.ts, src/core/model/clipboard.ts) und fügt mit PasteGraphCommand (src/core/commands/pasteCommands.ts) ein, auch in einen anderen Graphen.
  • Im Katalog des Agenten gibt es dafür keinen Command.

Vorschlag

  • Neuer Command copy_nodes (Bereich graphs) mit from (Graph), nodes (Ids), optional to (anderer Graph, sonst derselbe). Die Kanten zwischen den kopierten Nodes kommen mit, Gruppen und Kommentare, die nur kopierte Nodes umfassen, auch.
  • made nennt die neuen Ids je alter Id, damit spätere Schritte sie verbinden können.
  • Ohne Ort werden die Kopien wie neue Nodes gesetzt, also neben das, womit sie verbunden werden.
  • Offen beim Plan: Was passiert mit Nodes, die im Ziel-Graphen nicht erlaubt sind (z. B. ein Shader-Node in einem Behavior), und mit Variablen, die es dort nicht gibt? Der Graph-Tab hat dafür schon Regeln, die übernommen werden sollten.
Aus #429, Nachbetrachtung nach Etappe 5d („was am MCP noch fehlt“). Punkt 4 von 6. ## Anlass Der Agent baut gleiche Teile eines Graphen jedes Mal neu auf, Node für Node und Kante für Kante, auch wenn derselbe Aufbau schon in einem anderen Behavior oder Instrument steht. Der User kopiert so etwas mit Ctrl+C und Ctrl+V. ## Stand heute (im Code nachgesehen) - Der Graph-Tab kopiert über die Zwischenablage (`src/editor/clipboard.ts`, `src/core/model/clipboard.ts`) und fügt mit `PasteGraphCommand` (`src/core/commands/pasteCommands.ts`) ein, auch in einen anderen Graphen. - Im Katalog des Agenten gibt es dafür keinen Command. ## Vorschlag - **Neuer Command `copy_nodes`** (Bereich *graphs*) mit `from` (Graph), `nodes` (Ids), optional `to` (anderer Graph, sonst derselbe). Die Kanten zwischen den kopierten Nodes kommen mit, Gruppen und Kommentare, die nur kopierte Nodes umfassen, auch. - `made` nennt die neuen Ids je alter Id, damit spätere Schritte sie verbinden können. - Ohne Ort werden die Kopien wie neue Nodes gesetzt, also neben das, womit sie verbunden werden. - Offen beim Plan: Was passiert mit Nodes, die im Ziel-Graphen nicht erlaubt sind (z. B. ein Shader-Node in einem Behavior), und mit Variablen, die es dort nicht gibt? Der Graph-Tab hat dafür schon Regeln, die übernommen werden sollten.
admin added this to the Development project 2026-10-18 19:38:51 +02:00
admin moved this to Next in Development on 2026-10-18 19:39:02 +02:00
Author
Owner

Umgesetzt in fb981b5 (dazu e4ccf5f für einen Fund beim Testen), Wiki 286e3da (MCP).

Was neu ist

Der Command copy_nodes (Bereich graphs) kopiert Nodes in denselben Graphen oder in einen anderen, wie Ctrl+C / Ctrl+V.

  • Mit kommen die Kanten zwischen den kopierten Nodes sowie Gruppen und Kommentare, die nur kopierte Nodes betreffen. Ob ein Node zu einer Gruppe gehört, entscheidet wie beim Ziehen die Lage seines Mittelpunkts.
  • made nennt jede Kopie unter der Id ihres Originals. Spätere Schritte erreichen sie mit $copy.<id>, $copy allein ist die Kopie des ersten Nodes.
  • Ohne x/y werden die Kopien am Ende des Aufrufs angeordnet wie neue Nodes. Mit x/y behalten sie ihr Layout, die linke obere Ecke liegt dort.

Die zwei offenen Fragen

  • Nodes, die der Ziel-Graph nicht annimmt, werden mit Namen abgelehnt, nicht still weggelassen. Die Regel ist dieselbe wie im Graph-Tab: fittingPart liegt jetzt in paletteEntries.ts und wird von beiden genutzt.
  • Liest ein kopierter Variables-Node Variablen seines Behaviors, kommen sie mit (Standardwert, Wert, Keep, Private). Gibt es im Ziel schon eine Variable mit dem Namen, aber einer anderen Art, wird abgelehnt.

Fund beim Testen (e4ccf5f)

Eine Gruppe, die im selben Aufruf um neue Nodes gelegt wird, kannte das Anordnen nicht. Bei On key held, Move, Owner mit einer Gruppe um Key + Move und einer um den Owner landete der Owner in der ersten Gruppe, die beiden Gruppen überlappten. Jetzt bekommt so eine Gruppe Platz: Was sonst in ihr stünde, ein Node oder eine andere solche Gruppe, kommt darunter. Die Spalten des Flusses bleiben. Gruppen um vorhandene Nodes und der Arrange-Knopf sind unverändert.

Tests

  • Unit: agent-copy (neu, 3 Tests), neuer Test in agent-edit für den Fund. Agent-, Graph-, Clipboard- und Palette-Tests grün.
  • Gegenproben: 6 für copy_nodes, 1 für den Fund, alle kompilierbar, alle rot.
  • e2e 71 auf atx: ALL PASSED, 26 Checks.
  • Gate auf atx: CHECK EXIT 0, 327 Dateien, 5025 Tests.
  • Live in MCP Test Project: alle 5 Nodes von Arrow keys walk in ein neues Behavior kopiert, 6 Kanten, Gruppe, Kommentar und speed (300) kamen mit, lint_graph überall 0 außer 4 Kreuzungen wie im Original. Per Undo zurückgenommen.
Umgesetzt in `fb981b5` (dazu `e4ccf5f` für einen Fund beim Testen), Wiki `286e3da` (*MCP*). ## Was neu ist Der Command **`copy_nodes`** (Bereich *graphs*) kopiert Nodes in denselben Graphen oder in einen anderen, wie Ctrl+C / Ctrl+V. - Mit kommen die Kanten zwischen den kopierten Nodes sowie Gruppen und Kommentare, die nur kopierte Nodes betreffen. Ob ein Node zu einer Gruppe gehört, entscheidet wie beim Ziehen die Lage seines Mittelpunkts. - `made` nennt jede Kopie unter der Id ihres Originals. Spätere Schritte erreichen sie mit `$copy.<id>`, `$copy` allein ist die Kopie des ersten Nodes. - Ohne `x`/`y` werden die Kopien am Ende des Aufrufs angeordnet wie neue Nodes. Mit `x`/`y` behalten sie ihr Layout, die linke obere Ecke liegt dort. ## Die zwei offenen Fragen - Nodes, die der Ziel-Graph nicht annimmt, werden **mit Namen abgelehnt**, nicht still weggelassen. Die Regel ist dieselbe wie im Graph-Tab: `fittingPart` liegt jetzt in `paletteEntries.ts` und wird von beiden genutzt. - Liest ein kopierter Variables-Node Variablen seines Behaviors, **kommen sie mit** (Standardwert, Wert, *Keep*, *Private*). Gibt es im Ziel schon eine Variable mit dem Namen, aber einer anderen Art, wird abgelehnt. ## Fund beim Testen (`e4ccf5f`) Eine Gruppe, die im selben Aufruf um neue Nodes gelegt wird, kannte das Anordnen nicht. Bei *On key held*, *Move*, *Owner* mit einer Gruppe um Key + Move und einer um den Owner landete der Owner in der ersten Gruppe, die beiden Gruppen überlappten. Jetzt bekommt so eine Gruppe Platz: Was sonst in ihr stünde, ein Node oder eine andere solche Gruppe, kommt darunter. Die Spalten des Flusses bleiben. Gruppen um vorhandene Nodes und der *Arrange*-Knopf sind unverändert. ## Tests - Unit: `agent-copy` (neu, 3 Tests), neuer Test in `agent-edit` für den Fund. Agent-, Graph-, Clipboard- und Palette-Tests grün. - Gegenproben: 6 für `copy_nodes`, 1 für den Fund, alle kompilierbar, alle rot. - e2e 71 auf atx: ALL PASSED, 26 Checks. - Gate auf atx: `CHECK EXIT 0`, 327 Dateien, 5025 Tests. - Live in *MCP Test Project*: alle 5 Nodes von *Arrow keys walk* in ein neues Behavior kopiert, 6 Kanten, Gruppe, Kommentar und `speed` (300) kamen mit, `lint_graph` überall 0 außer 4 Kreuzungen wie im Original. Per Undo zurückgenommen.
admin moved this to Done in Development on 2026-10-18 20:56:25 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#434