gsxdsm
5c4c765134
FN-5904: feat(FN-5904): add browse-and-install flow for skills.sh catalog in Skills view
Add end-to-end browse-and-install flow for skills.sh catalog entries in the dashboard Skills view, enabling users to install skills directly from the catalog UI.
- Add POST /api/skills/install route with source validation and scoped project cwd
- Add installSkill method to SkillsAdapter using supervised npx skills add spawn
- Add installSkill client API function and Install button on catalog cards
- Refresh discovered skills list automatically after successful install
- Handle install errors with structured error codes (invalid_source, install_failed, install_timeout, spawn_error)
- Add card header layout with install button, disabled state, and loading spinner
- Add comprehensive tests: adapter unit tests, route integration tests, component tests
- Add changeset for @runfusion/fusion minor bump
- Update dashboard-guide.md with install endpoint documentation
Files changed:
.changeset/four-oranges-film.md | 5 +
docs/dashboard-guide.md | 45 +++++++
packages/dashboard/app/__tests__/api-skills.test.ts | 46 +++++++
packages/dashboard/app/api/legacy.ts | 12 ++
packages/dashboard/app/components/SkillsView.css | 16 +++
packages/dashboard/app/components/SkillsView.tsx | 83 +++++++++---
packages/dashboard/app/components/__tests__/SkillsView.test.tsx | 72 +++++++++++
packages/dashboard/src/__tests__/routes-skills.test.ts | 67 ++++++++++
packages/dashboard/src/__tests__/skills-adapter.test.ts | 113 ++++++++++++++++
packages/dashboard/src/routes/__tests__/register-agent-skills-routes.test.ts | 144 +++++++++++++++++++++
packages/dashboard/src/routes/register-agent-skills-routes.ts | 51 ++++++++
packages/dashboard/src/skills-adapter.ts | 103 +++++++++++++++
12 files changed, 736 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-5904
Fusion-Task-Lineage: 338d53e3-baba-4c6c-9173-8e214242403c
2026-06-02 18:29:53 -07:00
..
2026-06-02 18:29:53 -07:00
2026-05-22 17:24:38 -07:00
2026-05-03 04:43:14 -07:00
2026-05-30 16:25:09 -07:00
2026-05-30 16:25:09 -07:00
2026-05-22 17:24:38 -07:00
2026-05-07 23:21:05 -07:00
2026-05-05 20:47:37 -07:00
2026-05-05 20:47:37 -07:00
2026-05-22 17:24:38 -07:00
2026-05-29 08:45:12 -07:00
2026-05-22 17:24:38 -07:00
2026-05-05 20:47:37 -07:00
2026-05-03 19:01:10 -07:00
2026-05-05 12:37:25 -07:00
2026-05-16 18:40:03 -07:00
2026-05-26 21:57:31 -07:00
2026-05-22 17:24:38 -07:00
2026-06-01 16:24:21 -07:00
2026-05-30 14:20:12 -07:00
2026-05-10 07:59:40 -07:00
2026-05-03 04:43:14 -07:00
2026-05-22 17:24:38 -07:00
2026-05-19 10:39:56 -07:00
2026-05-22 17:24:38 -07:00
2026-05-15 07:10:36 -07:00
2026-05-22 17:24:38 -07:00
2026-05-04 04:19:32 -07:00
2026-05-22 17:24:38 -07:00
2026-05-15 07:10:36 -07:00
2026-05-22 17:24:38 -07:00
2026-05-13 06:29:35 -07:00
2026-05-22 17:24:38 -07:00
2026-05-06 08:04:47 -07:00
2026-05-22 17:24:38 -07:00
2026-05-20 03:57:17 -07:00
2026-05-22 17:24:38 -07:00
2026-06-01 05:15:14 -07:00
2026-05-22 17:24:38 -07:00
2026-05-09 10:31:05 -07:00
2026-05-22 17:24:38 -07:00
2026-05-17 22:58:34 -07:00
2026-05-22 17:24:38 -07:00
2026-06-01 23:29:21 -07:00
2026-05-19 03:21:17 -07:00
2026-06-01 05:15:14 -07:00
2026-06-01 16:24:21 -07:00
2026-06-01 16:24:21 -07:00
2026-05-22 17:24:38 -07:00
2026-05-13 06:29:35 -07:00
2026-05-22 17:24:38 -07:00
2026-05-30 16:48:13 -07:00
2026-06-02 04:01:31 -07:00
2026-05-13 10:00:00 -07:00
2026-05-05 15:09:56 -07:00
2026-05-13 10:00:00 -07:00
2026-06-01 05:15:14 -07:00
2026-05-23 20:44:01 -07:00
2026-05-23 20:44:01 -07:00
2026-05-22 17:24:38 -07:00
2026-05-22 17:24:38 -07:00
2026-05-09 10:31:05 -07:00
2026-05-22 17:24:38 -07:00
2026-05-07 04:17:52 -07:00
2026-05-22 17:24:38 -07:00
2026-05-22 17:24:38 -07:00
2026-05-13 18:05:12 +03:00
2026-05-22 17:24:38 -07:00
2026-05-27 21:31:12 -07:00
2026-05-13 10:00:00 -07:00
2026-05-20 03:19:44 -07:00
2026-06-02 14:14:24 -07:00
2026-05-22 17:24:38 -07:00
2026-05-20 04:13:43 -07:00
2026-05-20 14:28:45 -07:00
2026-05-17 23:32:10 -07:00
2026-05-12 21:55:43 -07:00
2026-05-22 17:24:38 -07:00
2026-05-21 18:15:26 -07:00
2026-05-22 17:24:38 -07:00
2026-05-03 07:47:45 -07:00
2026-05-22 17:24:38 -07:00
2026-05-03 14:10:11 -07:00
2026-05-22 17:24:38 -07:00
2026-05-03 07:47:45 -07:00
2026-05-22 17:24:38 -07:00
2026-05-03 07:47:45 -07:00
2026-05-22 17:24:38 -07:00
2026-05-22 17:24:38 -07:00
2026-05-16 22:26:42 -07:00
2026-05-13 10:00:00 -07:00
2026-05-22 17:24:38 -07:00
2026-05-08 04:21:20 -07:00
2026-05-29 09:32:22 -07:00
2026-05-29 09:32:22 -07:00
2026-05-22 17:24:38 -07:00
2026-05-07 13:11:37 -07:00
2026-05-22 17:24:38 -07:00
2026-05-15 01:05:09 -07:00
2026-06-02 00:23:05 -07:00
2026-05-22 17:24:38 -07:00
2026-05-20 04:12:40 -07:00
2026-05-17 08:22:26 -07:00
2026-05-18 01:16:17 -07:00
2026-05-18 01:56:59 -07:00
2026-05-10 05:29:41 -07:00
2026-06-02 08:25:46 -07:00
2026-06-02 17:58:41 -07:00
2026-06-02 17:58:41 -07:00
2026-06-01 05:15:14 -07:00
2026-06-01 05:15:14 -07:00
2026-05-23 00:03:22 -07:00
2026-05-19 01:59:21 -07:00
2026-06-01 01:35:03 -07:00
2026-05-22 17:24:38 -07:00
2026-05-18 23:14:48 -07:00
2026-05-22 17:24:38 -07:00
2026-05-18 16:08:10 -07:00
2026-05-22 17:24:38 -07:00
2026-05-16 09:21:06 -07:00
2026-05-22 17:24:38 -07:00
2026-05-19 18:56:24 -07:00
2026-05-22 17:24:38 -07:00
2026-05-05 01:46:58 -07:00
2026-05-16 09:42:37 -07:00
2026-06-01 10:31:36 -07:00
2026-05-17 03:34:56 -07:00
2026-05-15 23:39:43 -07:00
2026-05-22 17:24:38 -07:00
2026-05-09 14:20:03 -07:00
2026-05-09 10:31:05 -07:00
2026-05-23 06:06:51 -07:00
2026-05-23 13:06:48 -07:00
2026-05-15 12:07:51 -07:00
2026-05-10 16:53:36 -07:00
2026-06-01 10:17:52 -07:00
2026-05-04 01:43:04 -07:00
2026-06-02 18:15:14 -07:00
2026-05-07 16:03:25 -07:00
2026-06-02 14:30:35 -07:00
2026-06-02 18:15:14 -07:00
2026-06-02 18:15:14 -07:00
2026-05-29 09:32:22 -07:00
2026-05-23 02:50:37 -07:00
2026-05-22 17:24:38 -07:00
2026-05-29 11:25:11 -07:00
2026-05-29 10:02:58 -07:00
2026-05-22 17:24:38 -07:00
2026-05-07 18:35:45 -07:00
2026-05-22 17:24:38 -07:00
2026-05-04 22:17:10 -07:00
2026-05-22 17:24:38 -07:00
2026-05-06 05:29:56 -07:00
2026-05-22 17:24:38 -07:00
2026-05-29 08:45:12 -07:00
2026-05-29 09:44:17 -07:00
2026-06-01 03:23:10 -07:00
2026-05-04 06:12:12 -07:00
2026-05-22 17:24:38 -07:00
2026-05-04 21:21:22 -07:00
2026-05-22 17:24:38 -07:00
2026-05-10 18:04:43 -07:00
2026-05-11 21:48:26 -07:00
2026-05-11 21:48:26 -07:00
2026-05-27 21:31:12 -07:00
2026-05-29 11:25:11 -07:00
2026-05-22 17:24:38 -07:00
2026-06-01 01:35:03 -07:00
2026-05-22 17:24:38 -07:00
2026-05-31 21:59:06 -07:00
2026-06-02 12:42:04 -07:00
2026-05-22 17:24:38 -07:00
2026-05-12 17:03:10 -07:00
2026-05-22 17:24:38 -07:00
2026-05-04 21:21:22 -07:00
2026-05-22 17:24:38 -07:00
2026-05-04 21:21:22 -07:00
2026-05-22 17:24:38 -07:00
2026-05-18 00:20:39 -07:00
2026-05-22 17:24:38 -07:00
2026-05-18 08:31:38 -07:00
2026-05-22 17:24:38 -07:00
2026-06-02 14:14:24 -07:00
2026-06-02 14:14:24 -07:00
2026-05-22 17:24:38 -07:00
2026-05-22 17:24:38 -07:00
2026-06-02 14:14:24 -07:00
2026-05-22 17:24:38 -07:00
2026-06-02 14:14:24 -07:00
2026-05-07 04:17:52 -07:00
2026-05-28 23:31:03 -07:00
2026-05-28 23:31:03 -07:00
2026-05-22 17:24:38 -07:00
2026-06-02 09:34:19 -07:00
2026-05-22 17:24:38 -07:00
2026-06-02 08:08:01 -07:00
2026-05-22 17:24:38 -07:00
2026-05-16 00:13:37 -07:00
2026-05-22 17:24:38 -07:00
2026-05-03 19:01:10 -07:00
2026-05-22 17:24:38 -07:00
2026-05-21 18:15:26 -07:00
2026-05-22 17:24:38 -07:00
2026-05-04 07:00:39 -07:00
2026-05-23 18:39:36 -07:00
2026-05-03 19:01:10 -07:00
2026-05-22 17:24:38 -07:00
2026-06-02 08:14:10 -07:00
2026-05-22 17:24:38 -07:00
2026-05-31 11:55:11 -07:00
2026-06-01 21:55:10 -07:00
2026-05-22 17:24:38 -07:00
2026-05-12 21:55:43 -07:00
2026-05-22 17:24:38 -07:00
2026-05-22 17:24:38 -07:00
2026-05-04 17:22:21 -07:00
2026-05-22 17:24:38 -07:00
2026-05-08 00:40:15 -07:00
2026-05-13 10:00:00 -07:00
2026-06-02 18:29:53 -07:00
2026-06-02 18:29:53 -07:00
2026-05-22 17:24:38 -07:00
2026-05-23 13:06:48 -07:00
2026-05-23 13:06:48 -07:00
2026-05-22 17:24:38 -07:00
2026-05-09 19:49:02 -07:00
2026-06-01 05:15:14 -07:00
2026-05-22 17:24:38 -07:00
2026-05-04 15:16:53 -07:00
2026-05-30 15:52:46 -07:00
2026-06-02 00:10:21 -07:00
2026-05-13 15:05:05 -07:00
2026-06-02 07:40:37 -07:00
2026-06-02 07:40:37 -07:00
2026-05-22 17:24:38 -07:00
2026-06-02 08:46:04 -07:00
2026-06-01 04:47:19 -07:00
2026-05-22 17:24:38 -07:00
2026-06-01 03:23:10 -07:00
2026-05-22 17:24:38 -07:00
2026-05-12 23:04:56 -07:00
2026-05-29 10:55:25 -07:00
2026-05-29 10:55:25 -07:00
2026-05-06 18:37:23 -07:00
2026-05-22 17:24:38 -07:00
2026-05-19 20:45:46 -07:00
2026-05-22 17:24:38 -07:00
2026-06-02 09:20:31 -07:00
2026-05-22 17:24:38 -07:00
2026-05-22 00:15:14 -07:00
2026-05-22 17:24:38 -07:00
2026-05-11 13:44:14 -07:00
2026-05-22 17:24:38 -07:00
2026-05-07 12:30:18 -07:00
2026-05-22 17:24:38 -07:00
2026-05-07 10:27:48 -07:00
2026-05-22 17:24:38 -07:00
2026-05-16 12:49:57 -07:00
2026-05-22 17:24:38 -07:00
2026-05-16 09:20:33 -07:00
2026-05-22 17:24:38 -07:00
2026-05-11 09:52:23 +02:00
2026-05-22 17:24:38 -07:00
2026-06-02 09:24:42 -07:00
2026-05-22 17:24:38 -07:00
2026-05-14 11:15:47 -07:00
2026-05-22 17:24:38 -07:00
2026-05-14 05:35:12 -07:00
2026-05-22 17:24:38 -07:00
2026-05-14 22:16:44 -07:00
2026-05-18 13:16:35 -07:00
2026-05-22 17:24:38 -07:00
2026-05-15 23:39:43 -07:00