Commit graph

289 commits

Author SHA1 Message Date
vsxd
e6abc83133 fix(web): avoid replaceAll in admin label form 2026-03-20 16:10:38 +08:00
vsxd
54b165e188 fix(label): harden validation and batched search sync 2026-03-20 16:10:38 +08:00
Xudong Sun
611d67f845 fix(web): update skill detail install command (#139)
* fix(web): update skill install command on detail page

* fix(web): reuse base url for skill install registry

* test(web): fix install command window mock typing
2026-03-20 15:44:09 +08:00
Xudong Sun
21ba6ee938 fea: implement skill label system end to end (#140)
* docs(label): add skill label system design spec

Covers data model, permission model, search integration,
API design, and frontend design for the label system.

* docs(label): address spec review findings

- Add CHECK constraint on label_definition.type, deny-by-default in app layer
- Use TIMESTAMPTZ consistently for all new tables
- Add (label_id) index on skill_label for filter performance
- Add label count limits (10 per skill, 100 definitions)
- Detail async rebuild strategy (Spring @Async, batch 50, error isolation)
- Clarify search_vector is GENERATED STORED column, auto-maintained
- Expand SearchQuery with labelSlugs field, detail SQL changes
- Define all API response JSON structures
- Clarify PUT update: no slug in body, full-replace translations
- Clarify hard delete with audit_log
- Add cross-namespace permission boundary (promotion scenario)
- Pre-reserve multi-label API param for future
- Clarify ClawHub compat layer: no label support in phase 1

* docs(label): address second-round spec review findings

- Fix chapter numbering (duplicate "6." → "6." + "7.")
- Move labelSlugs to end of SearchQuery record to reduce breaking change
- Add TIMESTAMPTZ convention note for new tables
- Clarify async rebuild transaction boundary (per-skill independent tx)
- Move rebuildByLabelId to app layer to preserve module boundaries
- Clarify multi-label filter uses OR semantics with AND extension path

* docs(label): fix section numbering in frontend design chapter

* Implement skill label system end to end

* Unify label app services and DTOs

* Add admin label management page

* Add label admin backend tests

* Fix merge fallout in generated schema
2026-03-20 15:26:41 +08:00
XiaoSeS
28e9049562 feat(profile): add field policy config and GET response
* feat(profile): add field policy config and GET response

Add per-field edit policy configuration (editable, requiresReview) to
application.yml and expose it in the GET /api/v1/user/profile response
via a new fieldPolicies map, enabling the frontend to dynamically render
fields based on backend-driven policies.

* feat(profile): implement mixed submission in PATCH

Split profile update changes by per-field policy: fields without
requiresReview apply immediately, fields with requiresReview enter
the pending queue. Return PARTIALLY_APPLIED status with appliedFields
and pendingFields maps when both paths trigger in a single request.

* feat(web): rewrite profile page with dynamic fields

Render profile fields dynamically from backend fieldPolicies, with
whole-page read/edit mode toggle. Handle APPLIED, PENDING_REVIEW, and
PARTIALLY_APPLIED responses. Add i18n keys for review hints and
partial-apply toasts in both en and zh.

* merge: resolve deepwiki.yml conflict with package-lock.json fix

* api schema

* fix(profile): align moderation defaults and tests

* ci(deepwiki): run crawler on release publish
2026-03-20 14:59:21 +08:00
dongmucat
8658738319 test(review): stabilize skill detail i18n assertions 2026-03-20 14:27:20 +08:00
dongmucat
fb33d376fa test(review): align review detail section copy assertions 2026-03-20 14:27:20 +08:00
dongmucat
0dea20f4be fix(select): use pointer cursor for expanded options 2026-03-20 14:27:20 +08:00
dongmucat
862328a915 test(select): pin dropdown visual contract
变更摘要:

- 为共享 Select 补充最终视觉契约回归测试,覆盖下拉阴影和选项层级

- 保持范围收敛,仅强化 shared contract,不改生产代码

- 已运行共享测试、lint 和 build 进行回归验证

关键文件:

- web/src/shared/ui/select.test.ts
2026-03-20 14:27:20 +08:00
dongmucat
192aea6e63 fix(web): restore clearable publish namespace select 2026-03-20 14:27:20 +08:00
dongmucat
c36b74fda6 feat(web): migrate shared select to radix 2026-03-20 14:27:20 +08:00
dongmucat
c116ac2167 fix(web): keep shared select native wrapper 2026-03-20 14:27:20 +08:00
dongmucat
cd8e3ee200 test(web): lock shared select theme contract 2026-03-20 14:27:20 +08:00
yun-zhi-ztl
94ecc4d0b2 feat: add super-admin hard delete skill api (#131)
* feat: add super-admin hard delete skill api

* fix: address hard delete review feedback

* fix: add missing unarchive skill locale

* docs: add skill detail hard delete design

* feat: add owner hard delete flow for skill details
2026-03-20 11:02:02 +08:00
yun-zhi-ztl
cf1ec1b89e merge: pull request #124 from feature/project-fixbug319
feat: add pending skill detail to review workflow
2026-03-19 22:16:09 +08:00
yun-zhi-ztl
7977871539 test: expand review detail regression coverage 2026-03-19 20:29:59 +08:00
yun-zhi-ztl
15d51c8ee9 fix: collapse review skill detail by default 2026-03-19 20:26:56 +08:00
yun-zhi-ztl
08b708c25b fix: keep review actions visible beside skill detail 2026-03-19 20:18:37 +08:00
XiaoSeS
9c778d5cc3 feat: add user profile update feature with moderation support
* feat: add user profile update feature with moderation support

Add ability for users to update their display name with optional machine/human review.

Backend:
- Add profile_change_request table (V15 migration)
- Add UserProfileService with moderation workflow
- Add PATCH /api/v1/user/profile and GET /api/v1/user/profile endpoints
- Add ProfileModerationService interface with NoOp implementation
- Add ProfileModerationProperties for machine/human review toggles
- Update AuthController /me to refresh session when displayName changes
- Add i18n messages for profile validation and responses

Frontend:
- Add /settings/profile page with edit-on-click pattern
- Add profileApi.updateProfile() to client
- Update user menu: add "Profile Settings", make "Security Settings" local-only
- Add i18n translations (en/zh) for profile settings

Testing:
- Add UserProfileControllerTest with 8 test cases
- Add UserProfileServiceTest with 6 test cases
- Add AuthControllerTest case for session refresh on displayName change

* version sql

* merge main

* feat: add profile review admin workflow

* feat(web): add pagination to skill review list

- useReviewList now passes page/size to backend and returns paginated response
- reviews.tsx maintains per-tab page state with prev/next controls
- namespace-reviews.tsx adapted to new response shape
- Added i18n keys for pagination (en/zh)

* feat(web): lazy-load review tabs and adjust profile review pagination

- Skill review tabs only fetch data when activated (not all 3 on mount)
- Tabs component now supports controlled mode via value prop
- Profile review page size reduced from 20 to 10
- Profile review pagination bar always visible regardless of page count

* feat(web): lazy-load profile review tabs

- useProfileReviewList now accepts enabled parameter
- Profile review tabs only fetch data when activated

* remove unnecessary file

* remove unnecessary file
2026-03-19 20:15:26 +08:00
yun-zhi-ztl
9e7c6d4563 feat: show pending skill detail in review flow 2026-03-19 20:01:47 +08:00
vsxd
f86f04a2d3 docs: align clawhub env vars with public docs 2026-03-19 17:39:38 +08:00
yun-zhi-ztl
5748018f8b Merge pull request #108 from iflytek/feature/project-fixbug319
fix: paginate governance views and add my skills filters
2026-03-19 17:37:32 +08:00
dongmucat
d6913d28aa feat(web): refine app shell layout polish
变更摘要:

- 优化应用壳布局,统一 search 与 dashboard 的内容宽度与切换时机

- 恢复 search 与 dashboard 页面的上浮入场动画,并保留 sticky header 阴影效果

- 将本次新增前端测试收纳到 web/test/app,并纳入 TypeScript 检查范围

- 同步调整 landing quick start 文案字号与本地开发代理地址

关键文件:

- web/src/app/layout.tsx

- web/src/app/layout-main-content.ts

- web/src/app/page-shell-style.ts

- web/test/app/layout-main-content.test.ts

- web/vite.config.ts
2026-03-19 17:32:27 +08:00
XiaoSeS
f2cf22b3e1 feat: add user profile update feature with moderation support
* feat: add user profile update feature with moderation support

Add ability for users to update their display name with optional machine/human review.

Backend:
- Add profile_change_request table (V15 migration)
- Add UserProfileService with moderation workflow
- Add PATCH /api/v1/user/profile and GET /api/v1/user/profile endpoints
- Add ProfileModerationService interface with NoOp implementation
- Add ProfileModerationProperties for machine/human review toggles
- Update AuthController /me to refresh session when displayName changes
- Add i18n messages for profile validation and responses

Frontend:
- Add /settings/profile page with edit-on-click pattern
- Add profileApi.updateProfile() to client
- Update user menu: add "Profile Settings", make "Security Settings" local-only
- Add i18n translations (en/zh) for profile settings

Testing:
- Add UserProfileControllerTest with 8 test cases
- Add UserProfileServiceTest with 6 test cases
- Add AuthControllerTest case for session refresh on displayName change

* version sql

* merge main

* feat: add profile review admin workflow

* feat(web): add pagination to skill review list

- useReviewList now passes page/size to backend and returns paginated response
- reviews.tsx maintains per-tab page state with prev/next controls
- namespace-reviews.tsx adapted to new response shape
- Added i18n keys for pagination (en/zh)
2026-03-19 17:23:05 +08:00
yun-zhi-ztl
4d827204bb fix: refine my skills empty states 2026-03-19 17:10:09 +08:00
yun-zhi-ztl
296c713652 fix: add my skills status filters 2026-03-19 17:06:26 +08:00
Xudong Sun
b9c4b05a0f fix: environment variable name for the registry
Signed-off-by: Xudong Sun <sun.xd@hotmail.com>
2026-03-19 17:01:16 +08:00
yun-zhi-ztl
3ba6d22c18 fix: paginate governance queries 2026-03-19 16:51:09 +08:00
yun-zhi-ztl
8665413650 fix: clamp governance inbox subtitles 2026-03-19 16:37:05 +08:00
vsxd
024e66d747 feat: add search index rebuild workflow 2026-03-19 15:20:08 +08:00
yun-zhi-ztl
cd570ed208 fix(web): swap password visibility toggle eye icons 2026-03-19 14:54:04 +08:00
yun-zhi-ztl
4365a9363c fix(web): remove default focus outline on user menu trigger button 2026-03-19 14:54:04 +08:00
yun-zhi-ztl
db92d17b25 fix(web): remove misleading visibility statement from publish review description 2026-03-19 14:54:04 +08:00
yun-zhi-ztl
7d8915fc7a fix(web): prevent version badges from overlapping action buttons in version list 2026-03-19 14:54:04 +08:00
yun-zhi-ztl
7222ff0f37 fix(web): add rejected badge for skill versions that failed review 2026-03-19 14:54:04 +08:00
yun-zhi-ztl
a4cb9f0cf9 fix(web): disable report button after successful submission 2026-03-19 14:54:04 +08:00
yun-zhi-ztl
1a5b8de196 fix: handle archived skill version deletion 2026-03-19 14:54:04 +08:00
yun-zhi-ztl
ac94930c94 fix: hide governance entry for unauthorized users 2026-03-19 14:54:04 +08:00
vsxd
f26a06d42f docs: simplify skillhub registry guide 2026-03-19 14:18:46 +08:00
vsxd
729b1c0498 docs: enrich frontend code documentation 2026-03-19 13:37:21 +08:00
Xudong Sun
6a62fec9e8 feat: allow spaces in profile display names (#97) 2026-03-19 11:13:52 +08:00
Xudong Sun
d126af15d8 fix:change 'Start Building' to 'Publish Skill' (#96) 2026-03-19 10:54:44 +08:00
Xudong Sun
c90199183a feat: refine skill detail author badge and landing publish CTA (#95)
* Replace skill author monogram with icon

* Update landing publish CTA copy
2026-03-19 10:49:54 +08:00
XiaoSeS
626e00219e feat: add user profile update feature with moderation support (#90)
* feat: add user profile update feature with moderation support

Add ability for users to update their display name with optional machine/human review.

Backend:
- Add profile_change_request table (V15 migration)
- Add UserProfileService with moderation workflow
- Add PATCH /api/v1/user/profile and GET /api/v1/user/profile endpoints
- Add ProfileModerationService interface with NoOp implementation
- Add ProfileModerationProperties for machine/human review toggles
- Update AuthController /me to refresh session when displayName changes
- Add i18n messages for profile validation and responses

Frontend:
- Add /settings/profile page with edit-on-click pattern
- Add profileApi.updateProfile() to client
- Update user menu: add "Profile Settings", make "Security Settings" local-only
- Add i18n translations (en/zh) for profile settings

Testing:
- Add UserProfileControllerTest with 8 test cases
- Add UserProfileServiceTest with 6 test cases
- Add AuthControllerTest case for session refresh on displayName change

* version sql

* merge main
2026-03-19 10:16:40 +08:00
yun-zhi-ztl
e42f3950bf fix(web): remove starred badge from skill card
The starred badge in the top-right corner of skill cards looked
cluttered. Removed it while keeping the subtle star highlight
in the bottom stats area.
2026-03-19 09:41:53 +08:00
vsxd
93b264309f feat(skill-detail): show author display name 2026-03-19 09:32:13 +08:00
vsxd
5f8a411852 fix(web): avoid stretching markdown badge images 2026-03-19 09:32:13 +08:00
vsxd
012ed35a10 Serve registry skill docs from nginx 2026-03-18 17:56:53 +08:00
dongmucat
18b064a8d0 Merge pull request #86 from iflytek/fix/publish-toast-pending-review
fix(web): show pending review toast for non-admin skill publish
2026-03-18 17:22:34 +08:00
dongmucat
42e6fff693 feat: Implement core web application structure including landing page, skill registry, layout, routing, and internationalization. (#87) 2026-03-18 17:20:49 +08:00