Skip to content

feat(remix_agent): add headless agent workflow surfaces - #183

Draft
leoafarias wants to merge 11 commits into
feat/open-code-sidebarfrom
leoafarias/remix-agent
Draft

feat(remix_agent): add headless agent workflow surfaces#183
leoafarias wants to merge 11 commits into
feat/open-code-sidebarfrom
leoafarias/remix-agent

Conversation

@leoafarias

Copy link
Copy Markdown
Member

Description

Add an unpublished remix_agent package with composer, message, transcript, answer, permission, execution, plan, and activity surfaces. They reuse Remix controls and upstream Disclosure, expose empty generated Mix styles, and keep child-control styles unresolved. Include a styled example, behavior tests, and separate loading announcements for Remix Button and IconButton.

This is a draft stacked on #177, targeting feat/open-code. The clean-sheet review and integration plan recommends keeping reusable Agent behavior in the package and distributing application-owned recipes through an optional registry item. Agent registry installation is not implemented yet; runtime publication and compound recipe wiring remain prerequisites.

Related Issues

Related to #177. This PR does not require the Sidebar stack.


Checklist

  • All changed behaviors have complete verification; fresh browser evidence remains pending.
  • Relevant documentation and the registry integration plan are included.
  • Follow up on review comments before marking ready.

Validation

  • Agent analysis: no issues.
  • Agent, example, Button, IconButton, and Disclosure suites: 284 tests passed.
  • CLI suite: 76 tests passed.
  • Agent clean generation: eight artifacts reproduced byte-for-byte.
  • Toolchain, version alignment, consumer Mix, Material, and whitespace checks passed.

Full workspace CI, Agent registry consumer verification, and fresh browser/media evidence are not claimed by these results. Keep this PR as a draft while those integration gates remain open.

Breaking Change

  • Yes.
  • No manual migration for existing published-package consumers; Agent remains unpublished.

Conversation, permission, and progress surfaces with host-owned chrome.
Enter/IME/send-stop, live-edge follow, and collapse-when-complete are
package contracts. remix and remix_fortal public APIs are unchanged.
The open-code review asks to verify the two base-button loading changes
separately, because registry work does not make them implicit.

RemixIconButton already had a case for the live-region announcement.
RemixButton had none. Add it, and add the excludeSemantics case to both,
which is the branch that suppresses the announcement.

Both use `pump` rather than `pumpAndSettle`: the loading spinner animates
forever, so settling never returns.
…mposer

The open-code review puts one gate before any Agent registry item: prove
one consumer before converting eight surfaces. This is that gate.

`open_code/agent_fixture/` is a pre-install application. Its
`uiAgentComposerRecipe()` returns the five stylers `AgentComposer` takes,
built from the installed card, text-area, and icon-button recipes. It adds
only the toolbar row, the card inset, and the field's removed second box.
A bundle rather than one `@MixWidget` recipe, because `AgentComposerSpec`
holds only the toolbar and cannot carry the other four values. The child
stylers stay unresolved, so each control resolves its own hover, focus,
and disabled state.

`tool/check_agent_consumer.dart` builds a guarded temporary app, installs
Theme, Card, TextField, and IconButton with the checkout CLI, and points
`remix` and `remix_agent` at this checkout. It then edits the installed
IconButton recipe and reruns the suite with the new expected metric, which
is what proves Agent's send and stop buttons are painted by the
application's file rather than by a copy Agent kept.

The checker has no hosted phase. `remix_agent` is `publish_to: none`, so
there is no version to resolve, and nothing here claims that hosted
installation works.
…split

The worksheets still read as a package contract. They are the benchmark
the anatomy was read from, and this package resolves none of those values.
Say so in each file, rename `non_token_measurements` to
`recipe_measurements`, and change every `status` to name what is shipped.
Point the composer worksheet at the first proven application recipe.

ADR 0001 gains the runtime and recipe split, what the first consumer
established, and the two things that stay gated: publication, and the
seven surfaces with no proven recipe yet.

The README documented the Overlay requirement for a picker only. The
requirement is the text field's: `EditableText` asserts on an Overlay
ancestor the moment it takes focus, so `AgentComposer` needs one too.

The example declared `remix: ^1.0.0-beta.4` while the package declares
beta.8. Workspace resolution binds the local sibling either way, so a
stale constraint says nothing until someone reads it as the tested
version.
`docs/plans/remix-agent*.md` and `packages/remix_agent/docs/open-code-review.md`
are working notes, not source or consumer documentation. Remove them and keep
ADR 0001 as the surviving record: it already carries the boundary, and it now
carries what the first consumer proved and what is still gated.

Repoint the README, the eight worksheets, and the consumer checker at the ADR.
Retarget this draft from the first branch in the stack to its tip, so the
pull request shows only the Agent change.

The tip relocates the registry to `registry/default/` and `registry/fortal/`,
adds the Fortal preset, and moves `remix` to 1.0.0-beta.9. Four conflicts,
all in shared lists:

- `analysis_options.yaml` and `open_code/README.md` now name three consumer
  fixtures, not two;
- `pubspec.yaml` keeps both notes on why the fresh-consumer steps run last;
- `skills/using-remix/SKILL.md` keeps the tip's preset rows and the Agent row.

`remix_agent` and its example move to the `remix` floor the stack now tests.
`tool/check_agent_consumer.dart` needed no change: it installs by item name,
never by registry path, and the default preset is what `remix init` selects.
@leoafarias
leoafarias force-pushed the leoafarias/remix-agent branch from 5d9ed78 to d81e5b9 Compare September 9, 2026 01:10
@leoafarias
leoafarias changed the base branch from feat/open-code to feat/open-code-sidebar September 9, 2026 01:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant