Commit graph

876 commits

Author SHA1 Message Date
vsxd
1fb70a99f2 Merge remote-tracking branch 'origin/main' 2026-03-13 14:50:32 +08:00
vsxd
0cb940e2f8 Merge branch 'feature/improvement' 2026-03-13 14:49:23 +08:00
vsxd
de5956476b Sync header auth state after login 2026-03-13 14:48:01 +08:00
vsxd
c2b75bf961 Refine skill install command layout 2026-03-13 14:44:28 +08:00
vsxd
2170412bda feat(web): complete i18n coverage for all pages and components
Replace hardcoded Chinese strings with t() calls across 36 files.
Expand translation keys from ~160 to 412 covering all pages, features,
and shared components. Fix date formatting to use dynamic i18n locale.
2026-03-13 14:43:26 +08:00
wowo-zZ
72a14d2e8a refactor(web): simplify landing page and update typography
- Change font class from font-display to font-heading in home page
- Adjust landing page title tracking from tight to normal
- Remove redundant CTA section from landing page
- Simplify footer links to GitHub only with proper external link attributes
2026-03-13 14:34:17 +08:00
vsxd
d82665baba feat(review): allow admins to review their own submissions 2026-03-13 14:23:20 +08:00
vsxd
6189671c27 Merge branch 'feature/improvement' 2026-03-13 14:13:42 +08:00
yun-zhi-ztl
8cfb6b6384 fix(ci): stabilize openapi sdk validation 2026-03-13 14:13:30 +08:00
vsxd
5485e70eb8 chore: remove validate-openapi workflow 2026-03-13 14:12:59 +08:00
vsxd
b229b1030a Merge branch 'feature/improvement' 2026-03-13 14:01:43 +08:00
vsxd
cfcd4e9d0e chore: add .claude/ to .gitignore 2026-03-13 14:00:59 +08:00
vsxd
7f1e9b96fe fix(web): change namespace URL prefix from /@namespace to /space/namespace to avoid route conflicts 2026-03-13 13:59:55 +08:00
vsxd
e4ae46515e chore: remove stale package-lock.json and add to gitignore
Project uses pnpm, these npm lock files were causing spurious changes on every install.
2026-03-13 13:58:11 +08:00
vsxd
9b5154cc51 feat(web): add unified API error handling and complete i18n coverage
- Add ApiError class with status code for structured error handling
- Add global QueryCache/MutationCache error handlers with auto-toast
- Auto-redirect to login on 401, show appropriate messages for 403/404/5xx
- Add i18n to review-detail.tsx, token-list.tsx, confirm-dialog.tsx
- Add review, token, apiError translation keys to zh.json and en.json
2026-03-13 13:55:59 +08:00
vsxd
93158431ef Merge branch 'feature/improvement' 2026-03-13 13:43:36 +08:00
vsxd
066bbc8f00 fix(web): fix i18n language switching and add translations
- Fixed language switcher to handle language codes with region (zh-CN -> zh)
- Added translations for publish page, toast, and dialog components
- Added i18n keys for all new UI text
- Created TODO.md to track pending frontend improvements

Pending tasks:
- Complete i18n for all remaining components
- Implement unified API error handling
- Replace remaining alert/confirm calls
2026-03-13 13:42:57 +08:00
vsxd
0200d21f0e feat(web): implement toast notifications and SPA dialogs
- Added sonner toast library for notifications
- Created Toaster component with custom styling
- Created toast utility with success/error/warning/info methods
- Created ConfirmDialog component for confirmations
- Replaced browser alert() with toast notifications in:
  - Publish page: added review notice and toast feedback
  - Token list: replaced confirm() with ConfirmDialog
  - Review detail: replaced alert/confirm with toast and dialogs
- Added review notice in publish page explaining admin approval process
- Improved user experience with in-page notifications instead of browser popups

Database changes:
- Added SKILL_ADMIN role to user usr_da52079c-3329-4a5c-a631-8eadfb865a79
2026-03-13 13:41:10 +08:00
vsxd
389604e866 fix(web): fix skill detail page issues
- Fixed double @ in namespace display (@@global -> @global)
- Added download button functionality to download skill package
- Download button is disabled when no version is available
- Cleaned namespace parameter before constructing download URL
2026-03-13 13:31:12 +08:00
vsxd
8d01cc0976 feat(web): add role-based menu item visibility
- Added platformRoles to User interface in UserMenu
- Implemented role checks for menu items:
  - Reviews: SKILL_ADMIN, NAMESPACE_ADMIN, SUPER_ADMIN
  - Promotions: SKILL_ADMIN, SUPER_ADMIN
  - User Management: USER_ADMIN, SUPER_ADMIN
  - Audit Log: AUDITOR, SUPER_ADMIN
- Added translations for new menu items
- Menu items now only show for users with appropriate permissions
2026-03-13 13:29:02 +08:00
vsxd
9905763f6b fix(web): correct terminology for reviews menu item
Changed "我的评论" to "审核管理" to accurately reflect that this
is the review management page, not comments page.
2026-03-13 13:26:19 +08:00
vsxd
e525e381d8 fix(web): correct route path parameters for namespace and skill detail
- Changed route paths from @$namespace to /$namespace to match TanStack Router syntax
- Added @ prefix stripping in API calls to match backend expectations
- Fixed useParams from parameter to match new route paths
- URL format remains /@namespace/slug but route captures @namespace as parameter
2026-03-13 13:25:37 +08:00
yun-zhi-ztl
cab3bc3f8c Merge branch 'main' into feature/project-review 2026-03-13 13:21:51 +08:00
vsxd
969464afba feat(web): implement i18n and user menu
- Added i18next for internationalization support
- Created language switcher component with zh/en support
- Refactored user navigation into dropdown menu
- Moved Dashboard, Security, and Account settings into user menu
- Added translation files for Chinese and English
- Updated layout to use i18n for all text content
2026-03-13 13:21:05 +08:00
yun-zhi-ztl
644fc6aa43 fix 2026-03-13 13:20:58 +08:00
vsxd
ebd72bc422 fix(web): ensure all page navigation uses 0-based index
Fixed remaining instances in landing.tsx and layout.tsx where
page was still set to 1 instead of 0.
2026-03-13 13:16:35 +08:00
vsxd
9811540141 fix(web): 修复路由导航参数替换问题
TanStack Router 的 to 路径不会自动替换 $param,需要用模板字符串手动拼接。
修复所有 navigate 调用,避免 URL 中出现字面量 @$namespace。

涉及: home, search, namespace, my-skills, my-namespaces, stars, reviews
2026-03-13 13:06:04 +08:00
vsxd
303c27bca7 fix(web): 统一前端分页为0-based page index
与后端 Spring Data 的 0-based 分页对齐,修复首页数据不显示的问题。
涉及: router, search, home, landing, pagination 组件
2026-03-13 12:58:28 +08:00
vsxd
763c908f74 Revert "fix(api): 统一所有分页接口为1-based page"
This reverts commit 3706e920df.
2026-03-13 12:56:29 +08:00
vsxd
3706e920df fix(api): 统一所有分页接口为1-based page
前端传 page=1 表示第一页,后端原来是 0-based 导致首页数据丢失。
涉及: SkillSearch, SkillController, ReviewController,
PromotionController, UserManagement, AuditLog
2026-03-13 12:56:23 +08:00
yun-zhi-ztl
447a34a1d1 merge(main): sync latest origin/main into feature/project-review 2026-03-13 12:49:12 +08:00
vsxd
a85a9c3177 fix(publish): 放宽技能包上传校验
- application.yml 补齐缺失的文件扩展名白名单(.js,.ts,.png,.jpg,.svg)
- version 为空时自动生成时间戳版本号,不再强制报错
2026-03-13 12:47:34 +08:00
vsxd
ac32fce08f fix(auth): preserve return target across oauth login 2026-03-13 11:59:17 +08:00
yun-zhi-ztl
9021ba754e fix(web): clear lint gate and split route bundles
Remove the markdown renderer ts-ignore workaround by applying prose styling at the container level, which clears the remaining lint failure without changing rendered behavior.

Convert top-level pages to route-level lazy imports with a shared suspense fallback so the main bundle is no longer forced to include every page upfront. Verified with pnpm run lint, pnpm run typecheck, and pnpm run build; the entry chunk dropped from roughly 770 kB to 338.77 kB after the split.
2026-03-13 11:54:47 +08:00
yun-zhi-ztl
556d556724 fix(token): align revoke endpoint with 204 contract
Change DELETE /api/v1/tokens/{id} to return HTTP 204 No Content so the backend matches the existing OpenAPI contract and the frontend delete flow no longer rejects successful revocations.

Add a controller regression test that verifies the endpoint returns 204 with an empty body and still delegates the revoke call to ApiTokenService. Verified with the targeted TokenControllerTest plus full server mvn test.
2026-03-13 11:49:57 +08:00
vsxd
45e96be179 fix(ci): install pnpm before setup-node cache 2026-03-13 11:48:44 +08:00
yun-zhi-ztl
383bc1edae fix(admin): replace compat and admin placeholders with real queries
Implement compat search through SkillSearchAppService instead of returning an empty placeholder list, and map search results back to canonical slugs for the compatibility API.

Replace hard-coded admin user and audit-log payloads with repository-backed application services. User management now supports paged search and status filters, validates managed statuses and role codes, prevents USER_ADMIN from assigning SUPER_ADMIN, and persists role/status changes against the real repositories. Audit logs now read from the audit_log table through a dedicated query repository/service with filterable pagination.

Align admin response DTOs with the frontend contract, add domain not-found handling for localized 404 responses, and cover the new behavior with controller and service regression tests. Verified with targeted skillhub-app tests plus full server mvn test.
2026-03-13 11:46:21 +08:00
vsxd
84dd08503d merge: bring feature/project-init into main for beta3
# Conflicts:
#	scripts/smoke-test.sh
2026-03-13 11:45:56 +08:00
vsxd
c499571408 fix(web): redirect unauthenticated users back after login 2026-03-13 11:43:14 +08:00
vsxd
f16885a39d fix(web): normalize protected route matching 2026-03-13 11:41:02 +08:00
vsxd
8171a190a7 fix(web): prevent landing page from matching nested routes 2026-03-13 11:37:22 +08:00
vsxd
68af8047b8 Complete phase 3 and 4 frontend flows 2026-03-13 11:36:39 +08:00
vsxd
6a9e0845d4 Complete phase 3 and 4 backend workflows 2026-03-13 11:36:34 +08:00
vsxd
76808ca794 test(auth): align auth module tests with current flows 2026-03-13 11:32:50 +08:00
vsxd
5bb2eb0d98 fix(auth): grant global membership to new users 2026-03-13 11:29:01 +08:00
vsxd
0c5e4200cb fix(dev): provide explicit skill repository bean 2026-03-13 11:21:32 +08:00
yun-zhi-ztl
ad8bb9c6fd fix(security): whitelist only public skill GET routes
- require authentication for skill star and rating GET endpoints before the public skill-read rules

- keep documented public skill detail, version, download, resolve, and tag listing endpoints readable anonymously

- add regression coverage for anonymous star and rating access denial plus public tag listing
2026-03-13 11:12:18 +08:00
vsxd
c8d155e23f chore(git): ignore python cache files 2026-03-13 11:10:02 +08:00
vsxd
ec9341a6da fix(dev): harden local process startup checks 2026-03-13 11:09:02 +08:00
vsxd
56aeb424af fix(web): landing page no longer nested inside Layout header/footer
When pathname is '/', Layout now renders only the Outlet without its
own header/footer chrome, so the landing page's self-contained layout
displays correctly.
2026-03-13 11:08:35 +08:00