Describe silent music, growing groups and covered comments (#429)

- MCP: get_asset lists under silent what is not heard, the Notes
  range C4 to B4 of a new instrument, coveredNotes in lint_graph.
- Behaviors: groups take in new nodes, Arrange takes groups and
  comments along, comments move below their nodes when covered.
admin committed 2026-10-18 18:28:24 +02:00
1 parent 9154ac8578
commit 54b0773dba
2 files changed
+34 -10

No files matched your search

+7 -3
@@ -635,9 +635,13 @@ the inspector).
those and leaves the rest; they keep their place if they fit there and no link to the rest runs
backwards from there. Else they go next to the node they link to — left of one they hand a value
to, right of one they take from — where there is room and their links cross the fewest others,
and of those places the one nearest to the two ports lying level; only when there is none, right
of everything. A group around them stays where it is. One undo step, *Arrange nodes*.
It measures every node as drawn; the rule is the pure `editor/graph/arrange.ts`.
and of those places the one nearest to the two ports lying level. Nodes put between two that stay,
with no room there, push what they feed and everything right of it further right; only when that
fails too, right of everything. Groups and comments go along in the same undo step, *Arrange
nodes*: a group whose nodes all moved alike moves as it is, else it is fitted round its nodes
again; a comment goes with the group or the nodes just below it (or just above it).
It measures every node as drawn; the rules are the pure `editor/graph/arrange.ts` and
`editor/graph/annotationFollow.ts`.
- **One tab per behavior**: each behavior opens as a document of its own (double-click in the
asset panel), several at once, each keeping its zoom and scroll for the session. A selection
never changes what a tab shows; selecting a node of another graph brings that graph's tab up.
+27 -7
@@ -60,7 +60,7 @@ the badge says *Agent offline* meanwhile.
| `list_assets` | The project's settings (start scene, layers, play settings, master bus) and the assets with ids, names and types, by type or a part of the name |
| `get_asset` | One asset as stored, with the rows of its properties and the named objects of a scene or container, the content of a placed container too (marked `fromContainer`, ids like `<container object>~<path>`). A graph is only counted, and so are the cells of a map past 400. Pixel art lists its palette as `colors` and, up to 16 384 pixels over all layers and frames, every layer of every frame as rows of characters (`.` is transparent, `1`-`9`, `a`-`z`, `A`-`Z` the indices 1 to 61); a bigger one says how many pixels are painted. Colors of palettes and vector art read as `#rrggbb`. An animation lists what its rows may aim at (`targets`, the root as `""`), with the properties each offers |
| `get_graph` | A graph: every node with its settings and its ports as they are now (the ports it declares itself under `ports`), the edges, the groups and comments with their boxes and colors |
| `lint_graph` | How a graph reads, counted as you see it: nodes on top of each other, links that cross, links running over a node that is not theirs, links running right to left, the longest links, with a few ids of each |
| `lint_graph` | How a graph reads, counted as you see it: nodes on top of each other, links that cross, links running over a node that is not theirs, links running right to left, comments a node lies on, the longest links, with a few ids of each |
| `catalog` | What there is to make: the commands by area with what each does, and with a query (an area or command names) their arguments; the nodes a graph can hold (all of them, or the best matches of a search in full); the asset types and their properties; the variable kinds |
| `run_commands` | Changes the project, see below |
| `open` | Brings up an asset's tab, or the scene or game tab |
@@ -94,15 +94,26 @@ it. One Ctrl+Z takes the whole call back.
run, the way the [Arrange](Behaviors) button does it, and the move is part of the same undo
step. Nodes that were there before stay where they are, so what you laid out by hand is never
shuffled; the new ones go next to the node they link to, where their links cross the fewest
others. `arrange_graph` arranges nodes the agent
names, or the whole graph, which the agent is told to do only when you ask.
others. When that node is in a group, the new ones go into it and the group grows round them —
unless it would then take in a node not its own. New nodes put between two that stay, say a
filter between an instrument's Delay and its Output, make room: what they feed and everything
right of it moves right as one, so no link runs backwards. `arrange_graph` arranges nodes the
agent names, or the whole graph, which the agent is told to do only when you ask.
- **Readable graphs.** The agent is told to fetch a value needed far away with a second Get or
Owner node next to where it is used rather than one long link, and to check with `lint_graph` —
the crossings too, with `arrange_graph` when there are more than the links need.
Nodes that belong together go into a group (`add_group`), with a comment on what they do
(`add_comment`). Both take the nodes they are about rather than a box: a group is drawn around
them, a comment just above, and when the call arranges its nodes they follow them there, still
in the same undo step. The group is the one *Group* in the graph's menu draws around a selection.
them, a comment just above — below them where another node or a group's title bar stands above —
and when the call arranges its nodes they follow them there, still in the same undo step. The
group is the one *Group* in the graph's menu draws around a selection. `lint_graph` also counts
comments a node lies on (`coveredNotes`), which `fit_group` puts back by their nodes.
- **Silent music.** A pattern plays nothing without an instrument, and an instrument sounds only
the notes its Notes nodes take in (C4 to B4 in a new one). Nothing else says so. `get_asset` lists
under `silent` what of a pattern, a song or a composition is not heard: all of it for want of an
instrument, or the notes outside what the instrument sounds, in a song after the transpose of the
item. Each line names the notes, what the instrument sounds instead and how to mend it.
`add_notes` mentions both. The keys the pattern tab greys out are worked out the same way.
- **Variables in a graph.** A Variables node reads (and with `set_port_write` writes) a variable
once `add_port` names it; the port takes the kind of the variable. Properties and Sound FX
parameters nodes work the same way, a start or end node or a struct gets ports of a kind given.
@@ -242,7 +253,8 @@ What is behind it on the server, and the routes it uses: [API](API), [Developmen
- `tests/editor/agent-view.test.ts`: what `get_view` answers, its one line, the tools' arguments.
- `tests/editor/agent-edit.test.ts`: a walking object built in one call and taken back whole by one
undo, a failing step that leaves nothing, argument checks, deletes that ask, nodes arranged at the
end of a call while placed ones stay, `arrange_graph`, what the editor shows after a call (and
end of a call while placed ones stay, a new node linked into a group put into it within the same
undo step, `arrange_graph`, what the editor shows after a call (and
the scene switch inside the undo step, and nothing with *Follow agent* off), the reading tools
and the catalog (every area in full under the size an answer is cut at).
- `tests/editor/agent-catalog.test.ts`: a Variables node reading a variable once `add_port` names
@@ -269,7 +281,15 @@ What is behind it on the server, and the routes it uses: [API](API), [Developmen
level); a clip of a sound added, changed and removed; an object, a picture and a pattern laid on a
composition, an animation and the composition itself refused as items, an item moved with its
clip, a clip over another refused, fades only on what sounds, an item removed with its object, and
the tracks of a composition.
the tracks of a composition; what of a pattern, a song and a composition is silent without an
instrument, until the item or the pattern has one; the notes outside the range of the
instrument named, in a song after the transpose, until the range of its Notes node takes them in.
- `tests/editor/graph-follow.test.ts`: a new node feeding one in a group joining it while the group
grows round it (and not, where it would take in a stranger), a new node taking from one in a group
put beside it rather than where it waited, a group fitted again after Arrange with its comment
going along, one moved as it is, room made between an instrument's Notes and Output (and none
where there is room), comments put below their nodes where above is taken, and covered comments
counted.
- `tests/editor/graph-arrange.test.ts`: the layout on the graph an agent really built for "walk with
the arrow keys" (no overlaps, no link over a node, none backwards, at most 8 crossings with one
Owner for four moves and 4 with one each), chains running straight, the flow on top when two