Commit graph

364 commits

Author SHA1 Message Date
dongmucat
fed4eeb2b9 fix(web): make quick start tab icons exhaustive 2026-05-12 14:08:29 +08:00
dongmucat
8931f6d241 feat(web): add CLI install tab on landing quick start
Add a third peer tab 'CLI' to LandingQuickStartSection that surfaces the
official install command 'npm i -g @astron-team/skillhub'. Layout uses
grid-cols-1 md:grid-cols-3 so mobile shows tabs stacked and desktop
shows three equal-width columns.

Addresses iflytek/skillhub#419 (homepage Quick Start part only).
2026-05-12 11:05:02 +08:00
dongmucat
84914c9d94
Merge pull request #359 from iflytek/feature/skillhub-cli-v1
Some checks failed
Deploy Docs / build (push) Has been cancelled
Deploy Docs / Deploy (push) Has been cancelled
feat(cli): add SkillHub CLI v1
2026-05-09 17:25:24 +08:00
dongmucat
ab06c75737 Merge branch 'main' into fix/namespace-management-gaps
Resolved conflicts by keeping both sides:
- web/src/api/client.ts: preserve paginated listMembers(slug, {page,size})
  and add delete(slug) from main.
- web/src/shared/hooks/use-namespace-queries.ts: keep useUpdateNamespace
  and useTransferNamespaceOwnership from this branch, plus useDeleteNamespace
  from main.
2026-05-09 15:13:44 +08:00
dongmucat
2821262fa4
Merge pull request #408 from iflytek/fix/namespace-delete-341
fix(namespace): support team namespace deletion
2026-05-09 15:04:06 +08:00
dongmucat
30f3a84ce0 fix(namespace): remove optimistic update on member add to avoid cross-page duplication
appendNamespaceMember was being called via setQueriesData across all cached
pages, causing the new member to appear at the end of every page. The
invalidation will refresh the list correctly.
2026-05-09 14:22:16 +08:00
dongmucat
9b64cbedba feat(namespace): add edit/transfer UI with pagination support
Add namespace edit dialog, transfer ownership dialog, and member list pagination. Update API layer to support pagination (PagedResponse), add useUpdateNamespace and useTransferNamespaceOwnership hooks with pagination-aware optimistic updates. Integrate edit button in NamespaceHeader and transfer button on members page. Add i18n keys for all new features (en + zh).
2026-05-09 14:22:16 +08:00
Cheney
702bbff216 Merge branch 'main' into fix/web-js-compat 2026-05-09 14:18:05 +08:00
Cheney
81f7e3943f fix(web): scope legacy browser target to production build only
The top-level esbuild.target also applied to dev/test transforms, which
broke vitest suites that use top-level await (Chromium 83 / ES2020 does
not support it). Only build.target and optimizeDeps.esbuildOptions.target
need the legacy target; remove the global esbuild.target override.
2026-05-09 13:55:57 +08:00
Cheney
e869a4d365 fix(web): restore compatibility with Chromium 83 (Debian 10)
Publish page dropdowns (namespace/visibility) failed to open on older
Chromium because Vite 6 defaults build target to chrome87 and some
bundled deps call runtime APIs absent in Chrome 83 (replaceAll, .at,
hasOwn). Lower esbuild/vite target to chrome83, add browserslist, drop
??= in bootstrap, and inject runtime polyfills before main loads.
2026-05-09 13:55:50 +08:00
dongmucat
04a4545107 refactor(ci): inline pnpm build-script approval into package.json
Addresses review feedback on #413: for a single-package project,
pnpm-workspace.yaml is unnecessary and its 'packages: [.]' declaration
turns the web/ directory into a pnpm workspace root, which is a
semantic side effect we don't want.

Move onlyBuiltDependencies under the 'pnpm' field in package.json
(pnpm 10 still reads it there) and drop the workspace file from the
Dockerfile COPY list. Verified locally with docker buildx: pnpm 10.33
runs esbuild postinstall and the build succeeds.
2026-05-09 11:10:53 +08:00
dongmucat
32e40cbbb4 fix(ci): pin pnpm 10.33 and approve esbuild build scripts
Corepack was resolving pnpm to latest (11.0.9) on each CI run, and
pnpm 11 refuses unapproved postinstall scripts in --frozen-lockfile
mode. That caused ERR_PNPM_IGNORED_BUILDS: esbuild@0.25.12 and failed
the web image build in publish-images.

Changes:
- web/package.json: pin packageManager to pnpm@10.33.0
- web/pnpm-workspace.yaml: approve esbuild via onlyBuiltDependencies
  (pnpm 10 syntax; matches the pinned major)
- web/Dockerfile: copy pnpm-workspace.yaml before pnpm install so the
  approval list is visible inside the build stage
2026-05-09 10:46:48 +08:00
dongmucat
8dd1668555 fix(namespace): support team namespace deletion 2026-05-08 10:15:17 +08:00
dongmucat
13e148741d style(skill-compare): add background colors for diff add/delete lines 2026-05-07 15:58:39 +08:00
dongmucat
5c95ab2b38 feat(skill): add version compare page with unified diff
Introduce a dedicated `/space/$namespace/$slug/compare` page that compares
two published skill versions GitHub-style: left file list + right unified
diff. Backend exposes `GET /versions/compare` returning structured diff
(computed via java-diff-utils) with per-file hunks, binary placeholder,
and truncation flags. Frontend uses two version selectors scoped to
PUBLISHED versions, a file search box, active-file highlighting, and
whitespace-preserving unified view. E2E covers the publish + rerelease
+ approve round trip; controller/domain tests cover happy path and
same-version rejection.
2026-05-07 09:45:26 +08:00
dongmucat
351dddc912 feat(cli): add SkillHub CLI v1 with full command suite
Implement complete CLI tool for SkillHub with 12 commands, 7 backend API endpoints, and comprehensive documentation.

CLI Commands:
- help, version: Basic information
- login, logout, whoami: Authentication management
- search: Discover published skills
- install: Install skills to agent directories (14 Tier 1 agents supported)
- list, remove, doctor: Local skill management
- publish: Publish skill packages
- update: Self-update mechanism

Backend API:
- Add /api/cli/v1 endpoints for auth, search, resolve, download, delete, publish
- Implement CliAuthController and CliSkillController
- Add security policies for CLI routes
- Full test coverage (19 backend tests)

CLI Implementation:
- TypeScript with strict mode, Bun runtime
- Pure JS zip handling (fflate) for cross-platform compatibility
- 15 agent profiles (14 Tier 1 + generic fallback)
- Secure token storage (0600 permissions)
- Path safety validation for remove operations
- Comprehensive error handling (404/403/network distinction)
- 41 unit and integration tests

Documentation:
- CLI user guide (Chinese and English)
- README updates with quick start
- GitHub Actions workflow for cross-platform CI

Quality:
- lint: 0 errors
- typecheck: pass
- test: 41/41 pass
- build: 0.30 MB (target=node for npm/npx compatibility)
2026-04-29 15:37:04 +08:00
dongmucat
f41723e0dc
Merge pull request #356 from iflytek/feature/skill-subscription-notification
feat(subscription): add skill subscription notification feature
2026-04-29 15:20:40 +08:00
dongmucat
a2adec2b06 fix(subscription): improve button spacing and eliminate toggle flicker
- Add visual separator between StarButton and SubscribeButton
- Use optimistic updates in useToggleSubscription for instant feedback
- Remove isLoading guard that caused button to unmount during refetch
2026-04-29 14:47:17 +08:00
dongmucat
62f3c3a0b4 fix(e2e): approve skill review before testing subscription
Published skills start in PENDING_REVIEW status with canInteract=false,
so the SubscribeButton is not rendered. Use admin user to approve the
review first, following the same pattern as search-seed and review-seed.
2026-04-29 10:31:27 +08:00
dongmucat
f0760a6416 fix(e2e): resolve strict mode violation in subscription tests
Use .first() for h1 heading locator since skill detail page
renders two h1 elements (page title + README heading).
Add page-ready wait in second test before locating Subscribe button.
2026-04-29 10:05:51 +08:00
dongmucat
284b0992af test(subscription): add frontend unit and e2e tests 2026-04-29 09:52:54 +08:00
dongmucat
d0e79266f1 feat(subscription): add i18n for subscription notification events 2026-04-29 09:52:54 +08:00
dongmucat
78b7e4f0c2 chore(api): regenerate OpenAPI types for subscription endpoints 2026-04-28 11:15:57 +08:00
dongmucat
f707cfee61
Merge pull request #342 from iflytek/feature/batch-member-import
feat(namespace): batch member import via CSV upload
2026-04-28 09:44:53 +08:00
dongmucat
c667cab280 fix(subscription): replace any type with explicit type assertion 2026-04-27 17:29:31 +08:00
dongmucat
658c44603b feat(subscription): add Chinese i18n for subscription feature 2026-04-27 17:21:39 +08:00
dongmucat
e70de0fc2e feat(subscription): add English i18n for subscription feature 2026-04-27 17:19:50 +08:00
dongmucat
12ed6f9146 feat(subscription): add subscriptions card to dashboard 2026-04-27 17:18:07 +08:00
dongmucat
6b3855e061 feat(subscription): add subscriptions menu item to user menu 2026-04-27 17:17:24 +08:00
dongmucat
6eee7342f3 feat(subscription): add /dashboard/subscriptions route 2026-04-27 17:16:48 +08:00
dongmucat
f0c2403134 feat(subscription): add MySubscriptionsPage component 2026-04-27 17:15:24 +08:00
dongmucat
1afb2085d9 feat(subscription): add SubscribeButton to skill detail page 2026-04-27 17:14:53 +08:00
dongmucat
b0623660c9 feat(subscription): add SubscribeButton component 2026-04-27 17:13:49 +08:00
dongmucat
0175897f45 feat(subscription): add useSubscription and useToggleSubscription hooks 2026-04-27 17:13:19 +08:00
dongmucat
d6ea91e069 feat(subscription): add useMySubscriptions query hooks 2026-04-27 17:12:52 +08:00
dongmucat
ebc3280d65 feat(subscription): add meApi subscriptions methods 2026-04-27 17:12:23 +08:00
dongmucat
c330db0bf3 feat(ui): display user ID on dashboard and profile settings pages 2026-04-27 14:54:39 +08:00
dongmucat
c1241ff83a test(namespace): fully mock search api in pagination e2e test
Root cause: two issues caused CI failure:
1. publishSkill hit 429 rate limit from other tests in the suite
2. glob pattern '?' was ambiguous for matching literal '?' in URLs

Fix: remove publishSkill dependency, use regex route matching, and
return fully mocked API responses with fake skill data. This tests
the frontend pagination UI behavior without needing real published
skills.
2026-04-27 11:42:43 +08:00
dongmucat
548ded0ad0 test(namespace): fix pagination e2e rate limit by intercepting search api 2026-04-27 11:25:07 +08:00
dongmucat
0020989ccb fix(namespace): add pagination to namespace skill list
The namespace detail page hardcoded a limit of 20 skills with no
pagination controls, so namespaces with more than 20 skills appeared
truncated. Add page state, wire it into the search query, and render
the shared Pagination component when total exceeds PAGE_SIZE. Also
reset page to 0 when the namespace param changes.

Closes #350
2026-04-27 10:54:57 +08:00
dongmucat
0cc3c46831
Merge pull request #340 from iflytek/feature/web-update-skill
feat(dashboard): add Update button to My Skills with publish prefill
2026-04-24 15:25:04 +08:00
dongmucat
df85ea0e18 fix(search): preserve empty-query discovery results 2026-04-23 16:24:23 +08:00
dongmucat
1591ee02b5 feat(ui): add dependencies and i18n for version diff 2026-04-23 11:08:33 +08:00
dongmucat
068cdaf84c test(namespace): add batch import members E2E tests
Adds Playwright E2E tests for batch member import dialog:
- Opens dialog and verifies upload step UI elements
- Uploads CSV with mixed valid/invalid rows and verifies preview with validation messages

Uses admin context pattern to create namespace and add test user as ADMIN member.
2026-04-22 16:36:18 +08:00
dongmucat
ee8ca10b3a feat(namespace): add batch import button to members page 2026-04-22 16:18:40 +08:00
dongmucat
ebb873e8b3 test(namespace): add batch import CSV parsing and validation tests 2026-04-22 16:16:27 +08:00
dongmucat
ca29994816 feat(namespace): add batch import members dialog component 2026-04-22 16:15:03 +08:00
dongmucat
5f3e7a0441 feat(namespace): add batch member import i18n keys 2026-04-22 16:12:07 +08:00
dongmucat
7baf059783 feat(namespace): add useBatchAddNamespaceMembers mutation hook 2026-04-22 16:11:17 +08:00
dongmucat
4b538bde04 feat(namespace): add batchAddMembers API client method 2026-04-22 16:10:14 +08:00