Skip to content

feat(studio): A12 agent detail actions - #990

Merged
LinuxDevil merged 2 commits into
mainfrom
fb-a12-detail-actions
Nov 8, 2026
Merged

LinuxDevil merged 2 commits into
mainfrom
fb-a12-detail-actions

Conversation

@LinuxDevil

Copy link
Copy Markdown
Owner

Summary

Implements ticket A12 (agent detail actions + canvas tab strip):

  • AgentActionsMenu (screens/agentDetail/): the detail header's overflow Menu — Duplicate (POST /agents { from: { copyOf } } → toast Duplicated as "<name>" → opens the copy's Overview), Export YAML (client-side downloadYaml → <id>.yaml), separator, Delete agent… (danger) behind a ConfirmDialog (alertdialog, pending disables both buttons, errors stay in the dialog). On success it navigates to #/agents before toasting so the detail screen never refetches the deleted record; if the deleted agent is the builder's open document it falls back to switchAgent('untitled-agent').
  • agentTabItems(id) extracted into screens/agents/agentTabs.ts; the A05 header now uses it too.
  • BuilderTabs + builderTabs.css: the same agent tab strip (Canvas current) as a 40px row above the builder toolbar on #/agents/:id/canvas, rendered only for saved agents; .app.app-builder-tabs grid rows 40px 52px minmax(0,1fr) auto.
  • importExport.ts: factored the Blob/anchor download into downloadText() (shared by downloadSpec and new downloadYaml).

Test plan

  • npm run typecheck --workspace apps/agent-forge — clean
  • npx vitest run (apps/agent-forge) — 177 files / 3441 tests pass, incl. new AgentActionsMenu.test.tsx (5), BuilderTabs.test.tsx (2), polishCss.test.ts additions; AgentDetailRoute.test.tsx updated with AppState mock + ToastProvider for the menu
  • npm run build --workspace apps/agent-forge — clean (root npm run build also run to produce dist/ for the lousho workspace dep)
  • npx fallow dead-code / npx fallow dupes — clean (bare npm run fallow needs CI's coverage-final.json; dead-code + dupes gates pass)
  • npx eslint on changed files — clean

- AgentActionsMenu: Duplicate (POST /agents { from: { copyOf } }),
  Export YAML (client-side downloadYaml), Delete agent behind a
  ConfirmDialog; wired as the detail header's overflow menu.
- Extract agentTabItems() shared by the detail header and the new
  BuilderTabs strip above the builder toolbar.
- Factor downloadText() out of downloadSpec(); add downloadYaml().
- .app.app-builder-tabs grid row for the 40px strip.
@LinuxDevil
LinuxDevil merged commit e83b1c7 into main Nov 8, 2026
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