✨ feat: support agent group unpublish agents#11687
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Reviewer's GuideAdds full status-management support (publish, unpublish, deprecate) for agent groups across backend lambda router, market API client, discover service responses, and the user detail/group card UI, aligning group behavior with existing single-agent controls and status display. Sequence diagram for agent group status change flowsequenceDiagram
actor User
participant UserGroupCard
participant DetailProvider
participant UseUserDetail
participant MarketApiService
participant LambdaAgentGroupRouter
participant MarketBackendApi
User->>UserGroupCard: Click more menu
UserGroupCard->>UserGroupCard: handleStatusAction(action, group)
UserGroupCard->>DetailProvider: onStatusChange(identifier, action, group)
DetailProvider->>UseUserDetail: handleStatusChange(identifier, action, group)
UseUserDetail->>UseUserDetail: validateAuth(enableMarketTrustedClient, session)
alt action is deprecate
UseUserDetail->>UseUserDetail: show confirm dialog
User-->>UseUserDetail: Confirm deprecate
end
UseUserDetail->>MarketApiService: executeStatusChange(identifier, action, group)
alt group publish
MarketApiService->>LambdaAgentGroupRouter: publishAgentGroup(identifier)
LambdaAgentGroupRouter->>MarketBackendApi: POST /agent-groups/{id}/publish
MarketBackendApi-->>LambdaAgentGroupRouter: 200 OK
else group unpublish
MarketApiService->>LambdaAgentGroupRouter: unpublishAgentGroup(identifier)
LambdaAgentGroupRouter->>MarketBackendApi: POST /agent-groups/{id}/unpublish
MarketBackendApi-->>LambdaAgentGroupRouter: 200 OK
else group deprecate
MarketApiService->>LambdaAgentGroupRouter: deprecateAgentGroup(identifier)
LambdaAgentGroupRouter->>MarketBackendApi: POST /agent-groups/{id}/deprecate
MarketBackendApi-->>LambdaAgentGroupRouter: 200 OK
end
LambdaAgentGroupRouter-->>MarketApiService: success
MarketApiService-->>UseUserDetail: success
UseUserDetail->>DetailProvider: onMutate()
DetailProvider-->>UserGroupCard: refreshed data with updated status
UserGroupCard-->>User: Updated status tag
Class diagram for updated agent and group status managementclassDiagram
class MarketApiService {
+setAccessToken(token string) void
+publishAgent(identifier string) void
+unpublishAgent(identifier string) void
+deprecateAgent(identifier string) void
+publishAgentGroup(identifier string) void
+unpublishAgentGroup(identifier string) void
+deprecateAgentGroup(identifier string) void
}
class UseUserDetail {
+handleStatusChange(identifier string, action AgentStatusAction, type EntityType) Promise~void~
}
class UserDetailContextConfig {
+isOwner boolean
+mobile boolean
+totalInstalls number
+user DiscoverUserInfo
+onEditProfile(onSuccess function) void
+onStatusChange(identifier string, action AgentStatusAction, type EntityType) void
}
class UserGroupCard {
+avatar string
+title string
+description string
+createdAt string
+category string
+installCount number
+identifier string
+memberCount number
+status GroupAgentStatus
+handleStatusAction(action AgentStatusAction, type EntityType) void
}
class UserAgentCard {
+status AgentStatus
+handleStatusAction(action AgentStatusAction, type EntityType) void
}
class DiscoverService {
+mapAgentToDiscoverItem(agent MarketAgent) DiscoverAgentItem
+mapGroupToDiscoverItem(group MarketAgentGroup) DiscoverGroupAgentItem
}
class DiscoverGroupAgentItem {
+identifier string
+title string
+status GroupAgentStatus
+memberCount number
+schemaVersion number
}
class DiscoverAgentItem {
+identifier string
+title string
+status AgentStatus
+schemaVersion number
}
class AgentStatusAction {
<<enumeration>>
publish
unpublish
deprecate
}
class EntityType {
<<enumeration>>
agent
group
}
class GroupAgentStatus {
<<enumeration>>
published
unpublished
deprecated
archived
}
class AgentStatus {
<<enumeration>>
published
unpublished
deprecated
archived
}
%% Relationships
UseUserDetail ..> MarketApiService : uses
UserGroupCard ..> UserDetailContextConfig : reads context
UserAgentCard ..> UserDetailContextConfig : reads context
UserDetailContextConfig o--> UseUserDetail : provides onStatusChange
UseUserDetail ..> AgentStatusAction
UseUserDetail ..> EntityType
UserGroupCard ..> GroupAgentStatus
UserAgentCard ..> AgentStatus
DiscoverService ..> DiscoverGroupAgentItem : returns
DiscoverService ..> DiscoverAgentItem : returns
DiscoverGroupAgentItem ..> GroupAgentStatus
DiscoverAgentItem ..> AgentStatus
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
TestGru AssignmentSummary
Files
Tip You can |
There was a problem hiding this comment.
Hey - I've found 3 issues, and left some high level feedback:
- The three new agentGroup mutations (publish/unpublish/deprecate) duplicate the same URL-building, header, and error-handling logic; consider extracting a shared helper to reduce repetition and keep behavior consistent if this flow changes.
- In
useUserDetail, whenenableMarketTrustedClientis true you can hit the path wheresessionis undefined butmarketApiService.setAccessToken(session!.accessToken)is still called; guard this or skip setting the access token in the trusted-client-only scenario to avoid a runtime error. - The
DropdownMenuusages inUserGroupCardandUserAgentCardare cast toanyforitems; it would be more robust to align themenuItemsshape with theDropdownMenutype (or add a small wrapper type) so you don't need the unsafe casts.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The three new agentGroup mutations (publish/unpublish/deprecate) duplicate the same URL-building, header, and error-handling logic; consider extracting a shared helper to reduce repetition and keep behavior consistent if this flow changes.
- In `useUserDetail`, when `enableMarketTrustedClient` is true you can hit the path where `session` is undefined but `marketApiService.setAccessToken(session!.accessToken)` is still called; guard this or skip setting the access token in the trusted-client-only scenario to avoid a runtime error.
- The `DropdownMenu` usages in `UserGroupCard` and `UserAgentCard` are cast to `any` for `items`; it would be more robust to align the `menuItems` shape with the `DropdownMenu` type (or add a small wrapper type) so you don't need the unsafe casts.
## Individual Comments
### Comment 1
<location> `src/app/[variants]/(main)/community/(detail)/user/features/useUserDetail.ts:22-31` </location>
<code_context>
+ const enableMarketTrustedClient = useServerConfigStore(
</code_context>
<issue_to_address>
**issue (bug_risk):** Possible undefined access token when trusted-client mode is enabled
When `enableMarketTrustedClient` is true, the guard `if (!enableMarketTrustedClient && !session?.accessToken)` no longer protects against a missing `session`/`accessToken`, so `marketApiService.setAccessToken(session!.accessToken)` may receive `undefined` or throw. Please either:
1) Call `setAccessToken` only when an access token is present, or
2) Add a separate guard that requires `session?.accessToken` in the paths where the downstream API needs it.
This avoids relying on the non-null assertion when trusted-client auth runs without a user session.
</issue_to_address>
### Comment 2
<location> `src/app/[variants]/(main)/community/(detail)/user/features/UserGroupCard.tsx:198` </location>
<code_context>
- </div>
- </DropdownMenu>
+ <div onClick={(e) => e.stopPropagation()}>
+ <DropdownMenu items={menuItems as any}>
+ <div className={cx('more-button', styles.moreButton)}>
+ <Icon icon={MoreVerticalIcon} size={16} style={{ cursor: 'pointer' }} />
</code_context>
<issue_to_address>
**suggestion:** Avoid `any` cast on menuItems by aligning its type with DropdownMenu
Casting `menuItems` to `any` masks type mismatches between what `DropdownMenu` expects and what is provided. Since `menuItems` is already a structured array (`icon`, `key`, `label`, `onClick`, `type`, `danger`), you can define its type explicitly or derive it from the `DropdownMenu` API instead of using `any`, preserving compile-time checks if the contract changes.
Suggested implementation:
```typescript
{isOwner && (
<div onClick={(e) => e.stopPropagation()}>
<DropdownMenu items={menuItems}>
```
To fully remove the `any` cast while keeping type safety, also adjust the `menuItems` declaration earlier in the file:
1. Import `DropdownMenu`’s type if needed (or rely on the value import if it’s already imported):
- If `DropdownMenu` is already imported as a component, you can derive the type directly from it:
```ts
import DropdownMenu from '...'; // existing import
```
2. Change the `menuItems` declaration to use the inferred `items` type from `DropdownMenu`:
```ts
const menuItems: React.ComponentProps<typeof DropdownMenu>['items'] = [
// existing items with icon, key, label, onClick, type, danger, ...
];
```
This aligns `menuItems`’s type with `DropdownMenu`’s `items` prop and will preserve compile-time checks if the `DropdownMenu` API changes.
</issue_to_address>
### Comment 3
<location> `src/app/[variants]/(main)/community/(detail)/user/features/UserAgentCard.tsx:264` </location>
<code_context>
- </div>
- </DropdownMenu>
+ <div onClick={(e) => e.stopPropagation()}>
+ <DropdownMenu items={menuItems as any}>
+ <div className={cx('more-button', styles.moreButton)}>
+ <Icon icon={MoreVerticalIcon} size={16} style={{ cursor: 'pointer' }} />
</code_context>
<issue_to_address>
**suggestion:** Type `menuItems` instead of casting to `any` for the agent card menu as well
As with `UserGroupCard`, avoid casting `menuItems` to `any`. Instead, give it the same type as `DropdownMenu`'s `items` prop (either by importing that type or defining a local interface) so TypeScript enforces the menu shape.
Suggested implementation:
```typescript
{isOwner && (
<div onClick={(e) => e.stopPropagation()}>
<DropdownMenu items={menuItems}>
<div className={cx('more-button', styles.moreButton)}>
<Icon icon={MoreVerticalIcon} size={16} style={{ cursor: 'pointer' }} />
</div>
</DropdownMenu>
</div>
)}
```
To fully implement your comment and get type safety instead of the `any` cast, also:
1. Locate the `menuItems` declaration in this file and give it the same type used by `DropdownMenu`'s `items` prop (for example, something like `DropdownMenuItem[]`).
2. If `DropdownMenu` already exports that item type (check the implementation or how `UserGroupCard` types its `menuItems`), import it at the top of this file and annotate: `const menuItems: DropdownMenuItem[] = [...]`.
3. If no shared type exists, define a local interface (mirroring the `DropdownMenu` item shape) and use it as the type for `menuItems`, again following the pattern used in `UserGroupCard`.
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
| > | ||
| {isOwner && ( | ||
| <div onClick={(e) => e.stopPropagation()}> | ||
| <DropdownMenu items={menuItems as any}> |
There was a problem hiding this comment.
suggestion: Avoid any cast on menuItems by aligning its type with DropdownMenu
Casting menuItems to any masks type mismatches between what DropdownMenu expects and what is provided. Since menuItems is already a structured array (icon, key, label, onClick, type, danger), you can define its type explicitly or derive it from the DropdownMenu API instead of using any, preserving compile-time checks if the contract changes.
Suggested implementation:
{isOwner && (
<div onClick={(e) => e.stopPropagation()}>
<DropdownMenu items={menuItems}>To fully remove the any cast while keeping type safety, also adjust the menuItems declaration earlier in the file:
-
Import
DropdownMenu’s type if needed (or rely on the value import if it’s already imported):- If
DropdownMenuis already imported as a component, you can derive the type directly from it:
import DropdownMenu from '...'; // existing import
- If
-
Change the
menuItemsdeclaration to use the inferreditemstype fromDropdownMenu:const menuItems: React.ComponentProps<typeof DropdownMenu>['items'] = [ // existing items with icon, key, label, onClick, type, danger, ... ];
This aligns menuItems’s type with DropdownMenu’s items prop and will preserve compile-time checks if the DropdownMenu API changes.
| </div> | ||
| </DropdownMenu> | ||
| <div onClick={(e) => e.stopPropagation()}> | ||
| <DropdownMenu items={menuItems as any}> |
There was a problem hiding this comment.
suggestion: Type menuItems instead of casting to any for the agent card menu as well
As with UserGroupCard, avoid casting menuItems to any. Instead, give it the same type as DropdownMenu's items prop (either by importing that type or defining a local interface) so TypeScript enforces the menu shape.
Suggested implementation:
{isOwner && (
<div onClick={(e) => e.stopPropagation()}>
<DropdownMenu items={menuItems}>
<div className={cx('more-button', styles.moreButton)}>
<Icon icon={MoreVerticalIcon} size={16} style={{ cursor: 'pointer' }} />
</div>
</DropdownMenu>
</div>
)}To fully implement your comment and get type safety instead of the any cast, also:
- Locate the
menuItemsdeclaration in this file and give it the same type used byDropdownMenu'sitemsprop (for example, something likeDropdownMenuItem[]). - If
DropdownMenualready exports that item type (check the implementation or howUserGroupCardtypes itsmenuItems), import it at the top of this file and annotate:const menuItems: DropdownMenuItem[] = [...]. - If no shared type exists, define a local interface (mirroring the
DropdownMenuitem shape) and use it as the type formenuItems, again following the pattern used inUserGroupCard.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 226ae3d145
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| message.loading({ content: loadingText, key: messageKey }); | ||
| marketApiService.setAccessToken(session!.accessToken); | ||
|
|
There was a problem hiding this comment.
Guard access token when trusted client skips session
When enableMarketTrustedClient is true and the user isn’t logged in, handleStatusChange allows the action to proceed but executeStatusChange still executes session!.accessToken, which will throw because session is undefined. This means group/agent publish/unpublish flows crash for trusted-client users without a session. Consider only calling setAccessToken when a session exists, or derive the token from trusted client state instead.
Useful? React with 👍 / 👎.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## next #11687 +/- ##
==========================================
- Coverage 74.06% 74.05% -0.01%
==========================================
Files 1187 1187
Lines 94521 94525 +4
Branches 10825 12426 +1601
==========================================
Hits 70004 70004
- Misses 24427 24431 +4
Partials 90 90
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
|
❤️ Great PR @ONLY-yours ❤️ The growth of the project is inseparable from user feedback and contributions. Thanks for your contribution! If you are interested in the lobehub developer community, please join our discord and then DM @arvinxx or @canisminor1990. They will invite you to our private developer channel. We are talking about lobe-chat development and sharing AI newsletters from around the world.
Original Content❤️ Great PR @ONLY-yours ❤️ The growth of project is inseparable from user feedback and contribution, thanks for your contribution! If you are interesting with the lobehub developer community, please join our discord and then dm @arvinxx or @canisminor1990. They will invite you to our private developer channel. We are talking about the lobe-chat development or sharing ai newsletter around the world. |
## [Version 2.0.0-next.336](v2.0.0-next.335...v2.0.0-next.336) <sup>Released on **2026-01-22**</sup> #### ✨ Features - **misc**: Support agent group unpublish agents. #### 🐛 Bug Fixes - **misc**: Fix tool argument scape and improve multi task run. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### What's improved * **misc**: Support agent group unpublish agents, closes [#11687](#11687) ([4e060be](4e060be)) #### What's fixed * **misc**: Fix tool argument scape and improve multi task run, closes [#11691](#11691) ([b13bb8a](b13bb8a)) </details> <div align="right"> [](#readme-top) </div>
|
🎉 This PR is included in version 2.0.0-next.336 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [Version 1.153.0](v1.152.0...v1.153.0) <sup>Released on **2026-01-23**</sup> #### ♻ Code Refactoring - **auth**: Remove NEXT_PUBLIC_AUTH_URL env variable. - **model-select**: Migrate FunctionCallingModelSelect to LobeSelect. - **ModelSwitchPanel**: Migrate from Popover to DropdownMenu with virtual scrolling. - **userMemories**: Removed un-used code. - **misc**: Improve memory data with experience and identity, move vercel-react-best-practices skills to .agents directory. #### ✨ Features - **database**: Added user memory activity. - **desktop**: Add legacy local database detection and migration guidance. - **misc**: Add platform-aware download client menu option, add server version check for desktop app, remove Clerk authentication code, skill setting page and skill store, support agent group unpublish agents, support client tasks mode, update the sandbox preinstall libs in sys role. #### 🐛 Bug Fixes - **copilot**: Pass correct scope when creating new session in PageEditor. - **desktop**: Gracefully handle missing update manifest 404 errors. - **model-runtime**: Filter unsupported image types (SVG) before sending to vision models. - **pdf**: Upgrade pdfjs-dist and react-pdf to v5.x. - **sidebar-drawer**: Fix drawer positioning and title style. - **misc**: Fix group broadcast trigger tool use, fix local system tools, fix memory schema, fix multi agent tasks issue, fix multi tasks no summary issue, fix scope issue, fix tool argument scape and improve multi task run, fixed the sandbox tools call when error should use right callback, improve e2e server and complete i18n resources, slove the agent group editor not focus in editdata area, slove the agents header switch agents the lobeAI not show problem, sloved the old removeSessionTopics not work, TypewriterEffect not refreshing on language change, updata cron job ui & fixed commnuity pagenation goto error, update the agentbuilder tools not always use humanIntervention. #### 💄 Styles - **misc**: Improve auto scroll and group profile, update og, update share style. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### Code refactoring * **auth**: Remove NEXT_PUBLIC_AUTH_URL env variable, closes [lobehub#11658](https://github.com/jaworldwideorg/OneJA-Bot/issues/11658) ([c0f9875](c0f9875)) * **model-select**: Migrate FunctionCallingModelSelect to LobeSelect, closes [lobehub#11664](https://github.com/jaworldwideorg/OneJA-Bot/issues/11664) ([ad51305](ad51305)) * **ModelSwitchPanel**: Migrate from Popover to DropdownMenu with virtual scrolling, closes [lobehub#11663](https://github.com/jaworldwideorg/OneJA-Bot/issues/11663) ([c9d9dff](c9d9dff)) * **userMemories**: Removed un-used code, closes [lobehub#11713](https://github.com/jaworldwideorg/OneJA-Bot/issues/11713) ([89750fc](89750fc)) * **misc**: Improve memory data with experience and identity, closes [lobehub#11717](https://github.com/jaworldwideorg/OneJA-Bot/issues/11717) ([bdb3eb4](bdb3eb4)) * **misc**: Move vercel-react-best-practices skills to .agents directory, closes [lobehub#11703](https://github.com/jaworldwideorg/OneJA-Bot/issues/11703) ([6df7731](6df7731)) #### What's improved * **database**: Added user memory activity, closes [lobehub#11680](https://github.com/jaworldwideorg/OneJA-Bot/issues/11680) ([0160fbd](0160fbd)) * **desktop**: Add legacy local database detection and migration guidance, closes [lobehub#11682](https://github.com/jaworldwideorg/OneJA-Bot/issues/11682) ([5664b84](5664b84)) * **misc**: Add platform-aware download client menu option, closes [lobehub#11676](https://github.com/jaworldwideorg/OneJA-Bot/issues/11676) ([55abddc](55abddc)) * **misc**: Add server version check for desktop app, closes [lobehub#11710](https://github.com/jaworldwideorg/OneJA-Bot/issues/11710) ([0cf2723](0cf2723)) * **misc**: Remove Clerk authentication code, closes [lobehub#11711](https://github.com/jaworldwideorg/OneJA-Bot/issues/11711) ([395595a](395595a)) * **misc**: Skill setting page and skill store, closes [lobehub#11665](https://github.com/jaworldwideorg/OneJA-Bot/issues/11665) ([d8c0c26](d8c0c26)) * **misc**: Support agent group unpublish agents, closes [lobehub#11687](https://github.com/jaworldwideorg/OneJA-Bot/issues/11687) ([4e060be](4e060be)) * **misc**: Support client tasks mode, closes [lobehub#11666](https://github.com/jaworldwideorg/OneJA-Bot/issues/11666) ([98cf57b](98cf57b)) * **misc**: Update the sandbox preinstall libs in sys role, closes [lobehub#11688](https://github.com/jaworldwideorg/OneJA-Bot/issues/11688) ([404c577](404c577)) #### What's fixed * **copilot**: Pass correct scope when creating new session in PageEditor, closes [lobehub#11714](https://github.com/jaworldwideorg/OneJA-Bot/issues/11714) ([0259270](0259270)) * **desktop**: Gracefully handle missing update manifest 404 errors, closes [lobehub#11625](https://github.com/jaworldwideorg/OneJA-Bot/issues/11625) ([13e95b9](13e95b9)) * **model-runtime**: Filter unsupported image types (SVG) before sending to vision models, closes [lobehub#11698](https://github.com/jaworldwideorg/OneJA-Bot/issues/11698) ([c0c99a7](c0c99a7)) * **pdf**: Upgrade pdfjs-dist and react-pdf to v5.x, closes [lobehub#11686](https://github.com/jaworldwideorg/OneJA-Bot/issues/11686) ([2b620df](2b620df)) * **sidebar-drawer**: Fix drawer positioning and title style, closes [lobehub#11655](https://github.com/jaworldwideorg/OneJA-Bot/issues/11655) ([cf5320e](cf5320e)) * **misc**: Fix group broadcast trigger tool use, closes [lobehub#11646](https://github.com/jaworldwideorg/OneJA-Bot/issues/11646) ([831a9b3](831a9b3)) * **misc**: Fix local system tools, closes [lobehub#11702](https://github.com/jaworldwideorg/OneJA-Bot/issues/11702) ([6548fc7](6548fc7)) * **misc**: Fix memory schema, closes [lobehub#11645](https://github.com/jaworldwideorg/OneJA-Bot/issues/11645) ([3baf780](3baf780)) * **misc**: Fix multi agent tasks issue, closes [lobehub#11672](https://github.com/jaworldwideorg/OneJA-Bot/issues/11672) ([9de773b](9de773b)) * **misc**: Fix multi tasks no summary issue, closes [lobehub#11685](https://github.com/jaworldwideorg/OneJA-Bot/issues/11685) ([26ce317](26ce317)) * **misc**: Fix scope issue, closes [lobehub#11719](https://github.com/jaworldwideorg/OneJA-Bot/issues/11719) ([17adde8](17adde8)) * **misc**: Fix tool argument scape and improve multi task run, closes [lobehub#11691](https://github.com/jaworldwideorg/OneJA-Bot/issues/11691) ([b13bb8a](b13bb8a)) * **misc**: Fixed the sandbox tools call when error should use right callback, closes [lobehub#11721](https://github.com/jaworldwideorg/OneJA-Bot/issues/11721) ([e8fce68](e8fce68)) * **misc**: Improve e2e server and complete i18n resources, closes [lobehub#11678](https://github.com/jaworldwideorg/OneJA-Bot/issues/11678) ([d450dd9](d450dd9)) * **misc**: Slove the agent group editor not focus in editdata area, closes [lobehub#11677](https://github.com/jaworldwideorg/OneJA-Bot/issues/11677) ([9ac84e6](9ac84e6)) * **misc**: Slove the agents header switch agents the lobeAI not show problem, closes [lobehub#11726](https://github.com/jaworldwideorg/OneJA-Bot/issues/11726) ([f45f508](f45f508)) * **misc**: Sloved the old removeSessionTopics not work, closes [lobehub#11671](https://github.com/jaworldwideorg/OneJA-Bot/issues/11671) ([06d41e5](06d41e5)) * **misc**: TypewriterEffect not refreshing on language change, closes [lobehub#11657](https://github.com/jaworldwideorg/OneJA-Bot/issues/11657) ([ba30f46](ba30f46)) * **misc**: Updata cron job ui & fixed commnuity pagenation goto error, closes [lobehub#11700](https://github.com/jaworldwideorg/OneJA-Bot/issues/11700) ([42ad2a0](42ad2a0)) * **misc**: Update the agentbuilder tools not always use humanIntervention, closes [lobehub#11696](https://github.com/jaworldwideorg/OneJA-Bot/issues/11696) ([0d3017b](0d3017b)) #### Styles * **misc**: Improve auto scroll and group profile, closes [lobehub#11725](https://github.com/jaworldwideorg/OneJA-Bot/issues/11725) ([550acc2](550acc2)) * **misc**: Update og, closes [lobehub#11709](https://github.com/jaworldwideorg/OneJA-Bot/issues/11709) ([01cf4e4](01cf4e4)) * **misc**: Update share style, closes [lobehub#11716](https://github.com/jaworldwideorg/OneJA-Bot/issues/11716) ([3c70dfa](3c70dfa)) </details> <div align="right"> [](#readme-top) </div>
💻 Change Type
🔗 Related Issue
🔀 Description of Change
🧪 How to Test
📸 Screenshots / Videos
📝 Additional Information
Summary by Sourcery
Add server and client support for managing agent group publication status in the marketplace, including publish, unpublish, and deprecate actions.
New Features:
Enhancements: