Let the agent copy nodes, also into another graph (#434)

The agent built every part again that already stood in a graph,
node by node, while the editor has Ctrl+C and Ctrl+V for it. The new
command `copy_nodes` in the area graphs copies nodes into the same
graph or another one, in one undo step with the rest of the call.

- The links between the copied nodes come along, and so do groups
  and comments that are only about copied nodes. A node belongs to a
  group by its middle, as when it is dragged. `boxesAbout` in
  annotationFollow.ts decides this.
- `made` names each copy by the id of its original, so later steps
  link to it with `$copy.<id>`. `$copy` alone is the first one.
- Without x and y the copies are arranged at the end of the call like
  new nodes. With them they keep their layout, top left corner there.
- Nodes the target graph does not take are refused by name, not left
  out as Ctrl+V does. The rule is the graph tab's: `fitsGraph` and
  `fittingPart` moved from clipboard.ts to paletteEntries.ts.
- A copied Variables node takes the variables of its behavior along
  into the target behavior (`CarryVariablesCommand`), with default,
  value, Keep and Private. A variable of that name of another kind
  there is refused.
- The relay's instructions name `copy_nodes`.

Found on the way:
- Groups made by the agent can take in a node of another group once
  the nodes are arranged. lint_graph does not count that.
- Undo after a paste leaves an empty `groups: []`, as
  AddAnnotationCommand does. It is the same as no list.

Tests:
- agent-copy (new, 3 tests) with the agent, relay, clipboard and
  palette tests: 118/118.
- Counter-probes: 6 bendings, all compile, all red.
- e2e 71 (atx): ALL PASSED, 26 checks.
- Gate (atx): CHECK EXIT 0, 327 files, 5024 tests.
- Live in the MCP Test Project: 5 nodes of Arrow keys walk into a new
  behavior, 6 links, group, comment and speed (300) along, lint_graph
  0 everywhere, taken back with undo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 5.5 committed 2026-10-18 20:39:37 +02:00
1 parent e4b0419a53
commit fb981b5b0f
7 files changed
+386 -45

No files matched your search

+5 -3
View File
@@ -45,9 +45,11 @@ const INSTRUCTIONS = [
'over a long link. Check with lint_graph, the crossings too: when there are more than the links',
'need, arrange_graph orders the whole graph for the fewest. Put nodes that belong together into a',
'group with add_group, and say what they do with add_comment; a comment a node lies on',
'(coveredNotes) goes back above its nodes with fit_group. Music plays nothing without an',
'instrument, and an instrument sounds only the notes its Notes nodes take in, C4 to B4 in a new',
'one: get_asset lists under silent what of a pattern, song or composition is not heard.',
'(coveredNotes) goes back above its nodes with fit_group. A part already built elsewhere is',
'copied with copy_nodes, into the same graph or another, rather than built again. Music plays',
'nothing without an instrument, and an instrument sounds only the notes its Notes nodes take',
'in, C4 to B4 in a new one: get_asset lists under silent what of a pattern, song or composition',
'is not heard.',
'apply_preset gives an instrument that sounds every note in one step. Pictures, fonts, sounds',
'and videos are files: list_files lists those the server holds, add_file_asset makes an asset',
'of one. Before deleting or reworking an asset, get_asset says under usedBy what names it.',