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>