* fix(server): change pubsub close timing to beforeStop (#8934)
* test(server): add test cases
* test(plugin-multi-app-manager): add test cases
* refactor(server): add isTransient to check if run as worker
* refactor(server): move serving / isTransient to worker-mode.ts
* fix(server): fix test cases due to api changed
* fix(plugin-multi-app-manager): revert file
* chore(plugin-multi-app-manager): change test file name
* fix(plugin-multi-app-manager): fix test case
* fix(plugin-multi-app-manager): fix test cases
* fix(server): fix type
* test(plugin-multi-app-manager): remove only for test cases
* fix(plugin-multi-app-manager): fix test case
* feat(ai): add SKIILS features for AI employee
* feat(ai): add buildSkiilsTool for skill use
* feat(plugin-ai): add skill query tools and simplify employee setup
* feat(ai): implement the SKILLS loading mechanism
* feat(ai): renaming skillSettings.skills to skillSettings.tools
* feat(ai): added metadata for AI skills
* feat(ai): refactor skills and tools definition
* feat(ai): added skills list api for client
* refactor(ai): change `skills` to `tools` in skilSettings.tsx
* refactor(ai): show skills and tools in skilSettings.tsx
* fix(ai): fixed SkillsLoader fail in app install
* fix(ai): fixed SkillsLoader not auto bind tools
* feat(ai): add AIEmployeeLoader
* test(ai): add AIEmployeeLoader test case
* fix(core/ai): add missing dependency
* chore(ai): load ai employee profile info from locals
* chore(ai): load built in ai employee by loader not builtInManager
* chore(ai): move built-in ai employee to ai/ai-employees
* refactor(ai): split skills and tools in two tabs
* fix(core/ai): add missing dependency `gray-matter`
* feat(ai): add mcp manager and loader
* chore(core/ai): add dependency `@langchain/mcp-adapters` in core
* fix(core/ai): ai employee loader conflict with aiEmployees collection migration
* fix(ai): fixed build error
* feat(ai): add MCP settings
* refactor(ai): skills manager do persistence after app started
* fix(ai): remove duplicate skills manager persistence method invoke
* fix(ai): fixed MCPSettings build error
* fix(ai): ai-employee loader not loading .js file
* fix(ai): split skills and tools in ai task config page
* refactor(ai): change skills and tools select component style in ai emplpoyee task config page
* fix(ai): skill setting for task not effect
* fix(ai): list binding tools api should not include mcp tools
* refactor(ai): change mcp list to table
* refactor(ai): add view drawer for mcp tools list
* refactor(ai): mcp tools view style adjustment
* fix(plugin-ai): add missing MCP test connection translations
* refactor(ai): add ToolsRuntime as arg in ToolsOptions.invok method
* chore(ai): merge docs from develop
* refactor(ai): add AIConversationsManager
* refactor(ai): change AIEmployee constructor to accept ChatStreamProtocol from outside
* feat(ai): add SubAgentsDispatcher
* refactor(ai): add "from" field to split main-agent and sub-agent created conversation
* refactor(mcp): align action spacing with llm services
* feat(ai): add sub agents dispatch skill
* fix(mcp): pin edit drawer footer to bottom
* style(ai): adjust skills and tools selector width in task edit page
* fix(ai): build error
* style(ai): mcp tools description should support ellipsis
* docs(ai): add AI employee MCP integration document
* feat(ai): complete the resume mechanism for nested tool calls when sub agent interrupted
* refactor(ai): add conversation info to splite main / sub agent chunks in stream
* feat(ai): message render adapting sub agent messages
* feat(ai): ai employee loader support external prompt markdown file reading
* refactor(ai): change sub agents scheduling capability from SKILLS to atlas`s system prompt
* refactor(ai): add sub agents list in system prompt
* fix(ai): main agent should only read last meesage from sub agent
* refactor(ai): add custome Card UI for sub agent tool
* refactor(ai): add `status`, `toolCallId` properties to subAgentConversations entry
* refactor(ai): add sub agent conversation complete hint to message list
* refactor(ai): restore specific scene ai employee
* feat(ai): ai employee loader support sort field
* feat(ai): make chat button switch to atlas as default
* fix(ai): tool chartGenerator shoule auto run
* feat(ai): update sub agent complete status in time
* fix(ai): new message should auto reject interrupted tool call from sub agent
* fix(ai): new message to reject sub agent tool call should be sent and persistence
* refactor(ai): show user message in sub agent conversation
* refactor(ai): sub agent messages no support resend action
* style(ai): make sub agent task tool card clickable
* feat(ai): folding completed sub agent conversation
* fix(ai): hide edit button when user message in sub agent conversation
* fix(ai): sub agent reply status incorrect
* style(ai): change sub agent conversation divider`s margin
* fix(ai): page render error while sub agent conversation without messages
* fix(ai): user decisions should not share in dispatch-sub-agent-task tool call
* fix(ai): incorrect message appending for sub agent conversation
* style(ai): make sub agent conversation collapsed default open
* fix(ai): fixed build error
* fix(ai): sub agent should use same webSearch parameter as main agent
* chore(ai): merge docs change from develop
* refactor(ai): prompt optimization nathan`s mandatory Workflow
* refactor(ai): keep sender state while selected ai employee changed
* fix(ai): message render incorrect while editing message that behind sub agent conversatiuon
* chore(ai): add introduction for sub agent tools
* docs(ai): add introduction of built in ai employee Atlas
* docs(ai): adjust the skills and tools documents for the AI employee