Commit Graph
3 Commits
Author SHA1 Message Date
adminandClaude Opus 5.5 0684e76dc5 Let the agent draw pixel art and vector art (#429)
feuerwerk / gate (push) Successful in 5m46s
feuerwerk / suite (push) Successful in 19m14s
Stage 5c of the MCP work. The agent could place sprites and edit
graphs, but it could not draw: pixel art, palettes and vector art had
no commands in its catalog. Two new areas bring 29 commands, so the
catalog now holds 144.

- pixelart (13): paint, layers (add, copy, remove, change, move,
  merge down), frames (add, also as a copy, remove, move), canvas size
  with an anchor, palette colors set and removed.
- paint_pixels edits one layer on one frame. Its steps run in order:
  rows (a small picture as characters, a space keeps the pixel),
  pixels, line, rect, ellipse, fill, clear. An index the palette does
  not have, a pixel off the canvas and an unknown character are
  refused.
- vectorart (16): shapes from rings or as rect and ellipse, outline,
  style (fill, opacity, gradient or image fill, stroke), move, scale,
  rotate and flip, copy, remove, combine, rename, order, move into
  groups, group, layers.
- get_asset gives the palette of pixel art as colors. Up to 16384
  pixels over all layers and frames each layer comes as rows, above
  that only the number of painted pixels. Palette and vector colors
  come as #rrggbb.
- Merge down, canvas size and removing a color are now builders in
  pixelActions.ts. The panel and the agent share the same code.
- Color and point helpers moved into catalog/shared.ts, and graphs.ts
  uses them too.

Found while testing:

- The ellipse tests only checked the four extreme points, which stay
  right even with wrong handle lengths. The test now checks that every
  point of the drawn curve lies on the ellipse.

Tests:

- agent-drawing (new, 9) and the other agent, pixel and relay tests:
  133/133.
- 7 mutations, all red in the matching test.
- e2e 71 on melektaus-atx: 24/24. New check: the agent's pixel art
  opens in its tab, reads back as rows, and its cel is on the server
  after saving (status 200).
- Live in a test project: an 8x8 sprite and a copied second frame
  read back as painted, a rotated square and a radial gradient disc
  with their corners where computed.
- Gate on melektaus-atx: CHECK EXIT 0, 322 files, 4978 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:59:08 +02:00
adminandClaude Opus 5.5 d01e2b832e Let the agent edit animations, frames, tiles and tilemaps (#429)
feuerwerk / gate (push) Successful in 5m14s
feuerwerk / suite (push) Successful in 18m43s
After stage 5a the agent could build behaviors and scenes, but not
animate an object, cut a texture into frames or paint a tilemap.
Stage 5b adds three areas with 30 commands, 115 in all.

- animation (12): set the root, add, retarget and make rows relative,
  set, move, copy and delete keys, easing, insert or remove frames,
  and curve points.
- textures (8): add, change and delete frames, slice a grid, nine
  slice, sorting line and collision outline.
- tiles (10): the images of a tile, painting tilemaps, layers (add,
  copy, move, change) and the border of a placed tilemap.
- get_asset names the targets of an animation with their animatable
  properties. A tilemap up to 400 cells shows its cells, a bigger one
  only their count.
- After such a call the editor opens the tab of the animation, curve,
  texture, tile or tilemap. A frame edit selects the frame there.
- One paint step takes rectangles and single cells. Rectangles go
  first, so a cell can cut a hole into a rectangle. Cells outside the
  grid, ids that are no tile and more than 20 000 cells are refused.
  The grid is the tilemap's largest, a grown placement included.

Left out on purpose: Generate collision, because it reads the pixels
of the texture, and pasting keys, which goes through the clipboard.

Found on the way:
- Nine slice without fill now keeps the fill the image has. The
  model's default is repeat, not stretch as first described.
- Painting ran the other way round, rectangles overwrote cells.

Tests:
- agent-art (new, 11) and the other agent tests green, 64/64.
  5 bends of the code, all red.
- e2e 71 on atx: 23/23, the new check opens the agent's animation in
  its tab and reads its targets.
- Gate on atx: 321 files, 4969 tests.
- Live on a test project: a Spin animation of 360 degrees in 30
  frames matched 12 degrees per frame to 0.01 frames in the game.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:24:27 +02:00
adminandClaude Opus 5.5 0d8fd6ff52 Let the agent use the graph, scene and project commands (#429)
feuerwerk / gate (push) Successful in 5m10s
feuerwerk / suite (push) Failing after 18m49s
The agent knew 23 of the editor's commands. It could not point a
Variables node at a variable, group nodes, edit ports, transitions,
containers, colliders or the project settings. Stage 5a brings the
catalog to 85 commands in five areas and keeps every answer short.

- The catalog lists names and descriptions only. With a query (an
  area or command names) it adds the arguments. All schemas at once
  would pass the 60 000 character limit of one answer.
- add_port points a Variables node at a variable. The port takes the
  variable's kind, and an unknown name is refused with the list of
  the ones that exist.
- add_group and add_comment take nodes instead of coordinates. They
  follow the nodes after the arrange step, in the same undo step.
- The rule for which list a port picks from moved into portChoices.ts.
  Inspector and agent now share it.
- The frame of a group around nodes moved into annotationDrag.ts, so
  the button and the agent get the same frame.
- list_assets returns the project settings. get_asset shows the
  content of placed containers with the ids overrides need. get_graph
  shows declared ports and frame colors.
- A new node is placed at the height of its port, in the free spot
  whose links cross the fewest others. A source goes left of the node
  it feeds. Before, new nodes always went right of the rest.
- Arrange breaks a tie in crossings by putting the flow on top, and
  exec links pull harder when a column is sorted.
- A comment over a group keeps clear of the group's title bar.
- The agent's instructions and lint_graph ask to look at crossings
  too and to call arrange_graph when there are more than needed.

Left out on purpose: file assets (no upload), paste from the
clipboard, internal wrapper commands and switching plugins on.

Found on the way:
- Variable commands on a Struct asset did not run through
  WithStructTypes. New fields did not reach variables of that type.
- A query "variables" also matched set_variables_scope. A word that
  names an area now means only that area.

Tests:
- agent-catalog (new, 10), agent-edit, graph-arrange (3 new) and
  relay green. 11 bends of the code, all red.
- e2e 71 on atx: 22/22, the new check sees port speed and a group
  around all 4 drawn nodes.
- Live on a test project: a speed variable of 300 moved the player
  to x 150.03 in 0.5 s. A re-placed Variables node landed below Axis
  input with 4 crossings instead of 7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:01:15 +02:00