-
-
Notifications
You must be signed in to change notification settings - Fork 13.9k
🔨 chore: add claude code powered workflows #9709
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 3 Skipped Deployments
|
Reviewer's GuideThis PR implements two new GitHub Actions workflows powered by Claude Code to automate issue triage and deduplication: it adds a custom prompt and MCP server setup for labeling new issues, defines a dedupe command spec for identifying duplicates, and wires up a dedupe workflow triggered on issue creation or manual dispatch. Sequence diagram for Claude Issue Triage workflowsequenceDiagram
participant GitHub
participant "Claude Issue Triage Workflow"
participant "Claude Code Base Action"
participant "MCP Server (GitHub)"
participant "Claude (Anthropic)"
GitHub->>"Claude Issue Triage Workflow": Issue opened event
"Claude Issue Triage Workflow"->>"Claude Code Base Action": Start triage job
"Claude Code Base Action"->>"Claude (Anthropic)": Send triage prompt
"Claude Code Base Action"->>"MCP Server (GitHub)": Use allowed tools (get issue, list labels, etc.)
"Claude (Anthropic)"->>"MCP Server (GitHub)": Request issue details, labels, comments
"MCP Server (GitHub)"->>"Claude (Anthropic)": Return data
"Claude (Anthropic)"->>"MCP Server (GitHub)": Apply selected labels
"MCP Server (GitHub)"->>GitHub: Update issue labels
Sequence diagram for Claude Issue Dedupe workflowsequenceDiagram
participant GitHub
participant "Claude Issue Dedupe Workflow"
participant "Claude Code Base Action"
participant "Claude (Anthropic)"
GitHub->>"Claude Issue Dedupe Workflow": Issue opened or workflow dispatch
"Claude Issue Dedupe Workflow"->>"Claude Code Base Action": Start dedupe job
"Claude Code Base Action"->>"Claude (Anthropic)": Run /dedupe command
"Claude (Anthropic)"->>GitHub: Use gh CLI to view issue, search for duplicates, comment if found
"Claude (Anthropic)"->>GitHub: Post dedupe comment if duplicates found
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
👍 @arvinxx Thank you for raising your pull request and contributing to our Community |
TestGru AssignmentSummary
Tip You can |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey there - I've reviewed your changes and they look great!
Blocking issues:
- An action sourced from a third-party repository on GitHub is not pinned to a full length commit SHA. Pinning an action to a full length commit SHA is currently the only way to use an action as an immutable release. Pinning to a particular SHA helps mitigate the risk of a bad actor adding a backdoor to the action's repository, as they would need to generate a SHA-1 collision for a valid Git object payload. (link)
- An action sourced from a third-party repository on GitHub is not pinned to a full length commit SHA. Pinning an action to a full length commit SHA is currently the only way to use an action as an immutable release. Pinning to a particular SHA helps mitigate the risk of a bad actor adding a backdoor to the action's repository, as they would need to generate a SHA-1 collision for a valid Git object payload. (link)
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location> `.github/workflows/claude-dedupe-issues.yml:30` </location>
<code_context>
+ - name: Run Claude Code slash command
+ uses: anthropics/claude-code-base-action@beta
+ with:
+ prompt: '/dedupe ${{ github.repository }}/issues/${{ github.event.issue.number || inputs.issue_number }}'
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
+ claude_env: |
</code_context>
<issue_to_address>
**suggestion:** Double-check the fallback logic for issue number selection.
'github.event.issue.number || inputs.issue_number' may not reliably select the correct issue number if 'github.event.issue.number' is undefined. Use explicit conditional logic to ensure the intended value is always used.
</issue_to_address>
### Comment 2
<location> `.claude/commands/dedupe.md:10` </location>
<code_context>
+
+To do this, follow these steps precisely:
+
+1. Use an agent to check if the Github issue (a) is closed, (b) does not need to be deduped (eg. because it is broad product feedback without a specific solution, or positive feedback), or (c) already has a duplicates comment that you made earlier. If so, do not proceed.
+2. Use an agent to view a Github issue, and ask the agent to return a summary of the issue
+3. Then, launch 5 parallel agents to search Github for duplicates of this issue, using diverse keywords and search approaches, using the summary from #1
</code_context>
<issue_to_address>
**suggestion (typo):** Use 'GitHub' instead of 'Github' for correct capitalization.
Please update all occurrences of 'Github' to 'GitHub' for consistency.
Suggested implementation:
```
Find up to 3 likely duplicate issues for a given GitHub issue.
To do this, follow these steps precisely:
1. Use an agent to check if the GitHub issue (a) is closed, (b) does not need to be deduped (eg. because it is broad product feedback without a specific solution, or positive feedback), or (c) already has a duplicates comment that you made earlier. If so, do not proceed.
2. Use an agent to view a GitHub issue, and ask the agent to return a summary of the issue
3. Then, launch 5 parallel agents to search GitHub for duplicates of this issue, using diverse keywords and search approaches, using the summary from #1
```
```
Notes (be sure to tell this to your agents, too):
- Use `gh` to interact with GitHub, rather than web fetch
- Do not use other tools, beyond `gh` (eg. don't use other MCP servers, file edit, etc.)
```
</issue_to_address>
### Comment 3
<location> `.claude/commands/dedupe.md:12` </location>
<code_context>
+
+1. Use an agent to check if the Github issue (a) is closed, (b) does not need to be deduped (eg. because it is broad product feedback without a specific solution, or positive feedback), or (c) already has a duplicates comment that you made earlier. If so, do not proceed.
+2. Use an agent to view a Github issue, and ask the agent to return a summary of the issue
+3. Then, launch 5 parallel agents to search Github for duplicates of this issue, using diverse keywords and search approaches, using the summary from #1
+4. Next, feed the results from #1 and #2 into another agent, so that it can filter out false positives, that are likely not actually duplicates of the original issue. If there are no duplicates remaining, do not proceed.
+5. Finally, comment back on the issue with a list of up to three duplicate issues (or zero, if there are no likely duplicates)
</code_context>
<issue_to_address>
**suggestion:** Reference to 'summary from #1' should be 'summary from #2' for clarity.
Since the summary is created in step 2, referencing it as 'summary from #1' is inaccurate. Please change the reference to 'summary from #2'.
```suggestion
3. Then, launch 5 parallel agents to search Github for duplicates of this issue, using diverse keywords and search approaches, using the summary from #2
```
</issue_to_address>
### Comment 4
<location> `.claude/commands/dedupe.md:13` </location>
<code_context>
+1. Use an agent to check if the Github issue (a) is closed, (b) does not need to be deduped (eg. because it is broad product feedback without a specific solution, or positive feedback), or (c) already has a duplicates comment that you made earlier. If so, do not proceed.
+2. Use an agent to view a Github issue, and ask the agent to return a summary of the issue
+3. Then, launch 5 parallel agents to search Github for duplicates of this issue, using diverse keywords and search approaches, using the summary from #1
+4. Next, feed the results from #1 and #2 into another agent, so that it can filter out false positives, that are likely not actually duplicates of the original issue. If there are no duplicates remaining, do not proceed.
+5. Finally, comment back on the issue with a list of up to three duplicate issues (or zero, if there are no likely duplicates)
+
</code_context>
<issue_to_address>
**suggestion:** Clarify which results are being referenced in step 4.
Update step 4 to reference 'results from #2 and #3' for clarity and accuracy.
```suggestion
+4. Next, feed the results from #2 and #3 into another agent, so that it can filter out false positives, that are likely not actually duplicates of the original issue. If there are no duplicates remaining, do not proceed.
```
</issue_to_address>
### Comment 5
<location> `.github/workflows/claude-dedupe-issues.yml:28` </location>
<code_context>
uses: anthropics/claude-code-base-action@beta
</code_context>
<issue_to_address>
**security (yaml.github-actions.security.third-party-action-not-pinned-to-commit-sha):** An action sourced from a third-party repository on GitHub is not pinned to a full length commit SHA. Pinning an action to a full length commit SHA is currently the only way to use an action as an immutable release. Pinning to a particular SHA helps mitigate the risk of a bad actor adding a backdoor to the action's repository, as they would need to generate a SHA-1 collision for a valid Git object payload.
*Source: opengrep*
</issue_to_address>
### Comment 6
<location> `.github/workflows/claude-issue-triage.yml:98` </location>
<code_context>
uses: anthropics/claude-code-base-action@beta
</code_context>
<issue_to_address>
**security (yaml.github-actions.security.third-party-action-not-pinned-to-commit-sha):** An action sourced from a third-party repository on GitHub is not pinned to a full length commit SHA. Pinning an action to a full length commit SHA is currently the only way to use an action as an immutable release. Pinning to a particular SHA helps mitigate the risk of a bad actor adding a backdoor to the action's repository, as they would need to generate a SHA-1 collision for a valid Git object payload.
*Source: opengrep*
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
| - name: Run Claude Code slash command | ||
| uses: anthropics/claude-code-base-action@beta | ||
| with: | ||
| prompt: '/dedupe ${{ github.repository }}/issues/${{ github.event.issue.number || inputs.issue_number }}' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggestion: Double-check the fallback logic for issue number selection.
'github.event.issue.number || inputs.issue_number' may not reliably select the correct issue number if 'github.event.issue.number' is undefined. Use explicit conditional logic to ensure the intended value is always used.
|
|
||
| To do this, follow these steps precisely: | ||
|
|
||
| 1. Use an agent to check if the Github issue (a) is closed, (b) does not need to be deduped (eg. because it is broad product feedback without a specific solution, or positive feedback), or (c) already has a duplicates comment that you made earlier. If so, do not proceed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggestion (typo): Use 'GitHub' instead of 'Github' for correct capitalization.
Please update all occurrences of 'Github' to 'GitHub' for consistency.
Suggested implementation:
Find up to 3 likely duplicate issues for a given GitHub issue.
To do this, follow these steps precisely:
1. Use an agent to check if the GitHub issue (a) is closed, (b) does not need to be deduped (eg. because it is broad product feedback without a specific solution, or positive feedback), or (c) already has a duplicates comment that you made earlier. If so, do not proceed.
2. Use an agent to view a GitHub issue, and ask the agent to return a summary of the issue
3. Then, launch 5 parallel agents to search GitHub for duplicates of this issue, using diverse keywords and search approaches, using the summary from #1
Notes (be sure to tell this to your agents, too):
- Use `gh` to interact with GitHub, rather than web fetch
- Do not use other tools, beyond `gh` (eg. don't use other MCP servers, file edit, etc.)
|
|
||
| 1. Use an agent to check if the Github issue (a) is closed, (b) does not need to be deduped (eg. because it is broad product feedback without a specific solution, or positive feedback), or (c) already has a duplicates comment that you made earlier. If so, do not proceed. | ||
| 2. Use an agent to view a Github issue, and ask the agent to return a summary of the issue | ||
| 3. Then, launch 5 parallel agents to search Github for duplicates of this issue, using diverse keywords and search approaches, using the summary from #1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggestion: Reference to 'summary from #1' should be 'summary from #2' for clarity.
Since the summary is created in step 2, referencing it as 'summary from #1' is inaccurate. Please change the reference to 'summary from #2'.
| 3. Then, launch 5 parallel agents to search Github for duplicates of this issue, using diverse keywords and search approaches, using the summary from #1 | |
| 3. Then, launch 5 parallel agents to search Github for duplicates of this issue, using diverse keywords and search approaches, using the summary from #2 |
| 1. Use an agent to check if the Github issue (a) is closed, (b) does not need to be deduped (eg. because it is broad product feedback without a specific solution, or positive feedback), or (c) already has a duplicates comment that you made earlier. If so, do not proceed. | ||
| 2. Use an agent to view a Github issue, and ask the agent to return a summary of the issue | ||
| 3. Then, launch 5 parallel agents to search Github for duplicates of this issue, using diverse keywords and search approaches, using the summary from #1 | ||
| 4. Next, feed the results from #1 and #2 into another agent, so that it can filter out false positives, that are likely not actually duplicates of the original issue. If there are no duplicates remaining, do not proceed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggestion: Clarify which results are being referenced in step 4.
Update step 4 to reference 'results from #2 and #3' for clarity and accuracy.
| 4. Next, feed the results from #1 and #2 into another agent, so that it can filter out false positives, that are likely not actually duplicates of the original issue. If there are no duplicates remaining, do not proceed. | |
| +4. Next, feed the results from #2 and #3 into another agent, so that it can filter out false positives, that are likely not actually duplicates of the original issue. If there are no duplicates remaining, do not proceed. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9709 +/- ##
========================================
Coverage 84.68% 84.68%
========================================
Files 848 848
Lines 54883 54883
Branches 6869 6636 -233
========================================
Hits 46480 46480
Misses 8403 8403
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codex Review
Here are some automated review suggestions for this pull request.
ℹ️ 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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
New security issues found
| fetch-depth: 1 | ||
|
|
||
| - name: Run Claude Code slash command | ||
| uses: anthropics/claude-code-base-action@beta |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
security (yaml.github-actions.security.third-party-action-not-pinned-to-commit-sha): An action sourced from a third-party repository on GitHub is not pinned to a full length commit SHA. Pinning an action to a full length commit SHA is currently the only way to use an action as an immutable release. Pinning to a particular SHA helps mitigate the risk of a bad actor adding a backdoor to the action's repository, as they would need to generate a SHA-1 collision for a valid Git object payload.
Source: opengrep
977b14c to
7fdc745
Compare
|
❤️ Great PR @arvinxx ❤️ 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. |
|
🎉 This PR is included in version 1.137.6 🎉 The release is available on: Your semantic-release bot 📦🚀 |
* 🔨 chore: output JSON support tools calling mode (#9696) * support tools calling in generateObject method * fix tests * 🔨 chore: add Clerk authentication related variables and some other variables in Dockerfile (#9640) * chore(docker): add Clerk authentication related variables in Dockerfile * chore(docker): add ENABLED_FAL, S3_ENABLE_PATH_STYLE, and S3_SET_ACL environment variables to Dockerfile * chore(docker): add CLERK_WEBHOOK_SECRET environment variable * revert(docker): fix indentation that was mistakenly modified due to. vscode settings * chore(docker): add ENABLE_AUTH_PROTECTION environment variable to Dockerfiles --------- Co-authored-by: bbbugg <[email protected]> * 💄 style: change the user chatItem maxWidth should use flex 1 (#9689) * feat: change the user chatitem max flex 1 * feat: add when editing not show actions * 🔖 chore(release): v1.137.1 [skip ci] ### [Version 1.137.1](v1.137.0...v1.137.1) <sup>Released on **2025-10-14**</sup> #### 💄 Styles - **misc**: Change the user chatItem maxWidth should use flex 1. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### Styles * **misc**: Change the user chatItem maxWidth should use flex 1, closes [#9689](#9689) ([cfd5221](cfd5221)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * 🐛 fix: fix the Worker URL cross-origin issue (#9624) When the origin of the Worker script is different from the current page, reconstruct the URL relative to the current origin to avoid cross-origin errors. * 🔖 chore(release): v1.137.2 [skip ci] ### [Version 1.137.2](v1.137.1...v1.137.2) <sup>Released on **2025-10-14**</sup> #### 🐛 Bug Fixes - **misc**: Fix the Worker URL cross-origin issue. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### What's fixed * **misc**: Fix the Worker URL cross-origin issue, closes [#9624](#9624) ([d379112](d379112)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * 🐛 fix: fix tools calling long name length >64 issue (#9697) * add ToolNameResolver * fix ToolName generate tests * fix tests * 🐛 fix: fix mcp server connect issue and refactor web search implement (#9694) * add * clean * refactor * refactor * add test * fix style * refactor to improve search performance * refactor types * refactor types * refactor types * fix mcp retry issue * add more tests * fix test and types * fix test * fix desktop remote streamable http * add local * fix tests * update * 🔖 chore(release): v1.137.3 [skip ci] ### [Version 1.137.3](v1.137.2...v1.137.3) <sup>Released on **2025-10-14**</sup> #### 🐛 Bug Fixes - **misc**: Fix mcp server connect issue and refactor web search implement, fix tools calling long name length >64 issue. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### What's fixed * **misc**: Fix mcp server connect issue and refactor web search implement, closes [#9694](#9694) ([15ebcb4](15ebcb4)) * **misc**: Fix tools calling long name length >64 issue, closes [#9697](#9697) ([cb98604](cb98604)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * 🔨 chore: add e2e workflow (#9677) * add e2e test * Potential fix for code scanning alert no. 137: Workflow does not contain permissions Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> * remove * update * fix tests * add e2e * update --------- Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> * 🐛fix(mobile): enable conditional fetching of AI provider list based on mobile view (#9621) 🐛fix: enable conditional fetching of AI provider list based on mobile view * 🐛 fix: prevent Vertex AI JSON credentials from being split by comma (#9703) - Add special case for VertexAI in getProviderAuthPayload to skip random API key selection - Vertex AI uses JSON format credentials that contain commas, which should not be split - Add test case to verify JSON credentials remain intact Fixes the issue introduced in #9477 where random API key splitting broke Vertex AI authentication 🤖 Generated with [Claude Code](https://claude.com/claude-code) * 🔖 chore(release): v1.137.4 [skip ci] ### [Version 1.137.4](v1.137.3...v1.137.4) <sup>Released on **2025-10-14**</sup> #### 🐛 Bug Fixes - **misc**: Prevent Vertex AI JSON credentials from being split by comma. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### What's fixed * **misc**: Prevent Vertex AI JSON credentials from being split by comma, closes [#9703](#9703) [#9477](#9477) ([189081d](189081d)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * 💄 style: add imagen model to vertex ai (#9699) * ♻️ refactor: rename isLocalUrl to isDesktopLocalStaticServerUrl Rename the function to better reflect its specific purpose of checking desktop local static server URLs (127.0.0.1 only). Update all usages across the codebase including imports, function calls, and test cases. * ✨ feat(model-bank): add Vertex AI image generation models - Add Nano Banana (Gemini 2.5 Flash Image) models - Add Imagen 4 series (Standard, Ultra, Fast, Preview variants) - Export shared parameters for reuse across providers * ✅ test(context-engine): fix mock after function rename Update test mock from isLocalUrl to isDesktopLocalStaticServerUrl * ♻️ refactor: use submodule imports for @lobechat/utils - Change from barrel imports to direct submodule imports - Update test to mock only necessary functions (imageUrlToBase64) - Fix test URL from localhost to 127.0.0.1 for isDesktopLocalStaticServerUrl - Update package.json exports for utils submodules * ✅ test: update mocks after function rename Update test mocks from isLocalUrl to isDesktopLocalStaticServerUrl * ✅ test(chat): fix mocks to use submodule imports * 🔖 chore(release): v1.137.5 [skip ci] ### [Version 1.137.5](v1.137.4...v1.137.5) <sup>Released on **2025-10-14**</sup> #### 💄 Styles - **misc**: Add imagen model to vertex ai. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### Styles * **misc**: Add imagen model to vertex ai, closes [#9699](#9699) ([3b2a2c1](3b2a2c1)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * ✅ test: refactor aiChat tests (#9708) * refactor tests * ♻️ refactor(test): improve test layering and fix type errors Improved test architecture by fixing test layer violations: 1. **internal_coreProcessMessage tests**: Changed to spy on direct dependency `internal_fetchAIChatMessage` instead of lower-level `chatService.createAssistantMessageStream` 2. **internal_fetchAIChatMessage tests**: Fixed to mock correct service (`chatService` instead of global `fetch`) 3. **beforeEach cleanup**: Removed global `spyOnChatService()` to reduce implicit coupling - tests now spy `chatService` only when needed 4. **Type fixes**: - Fixed mockResolvedValue() to include required undefined arguments - Fixed ChatMessageError type to include required `type` property - Fixed MessageDispatch type guard for safer property access Benefits: ✅ Clear test layers - each test only spies on direct dependencies ✅ Correct mocks matching actual implementation ✅ Coverage improved from 81.48% to 82.03% ✅ All 52 tests passing with no type errors * 🔨 chore: add claude code powered workflows (#9709) * add claude dedupe issue workflow * add triage * add auto close duplicate * improve triage * improve * 🐛 fix: vertext ai create image (#9710) * 🔧 fix: update Claude workflows to use oauth token (#9711) * 🔖 chore(release): v1.137.6 [skip ci] ### [Version 1.137.6](v1.137.5...v1.137.6) <sup>Released on **2025-10-14**</sup> #### 🐛 Bug Fixes - **misc**: Update Claude workflows to use oauth token, vertext ai create image. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### What's fixed * **misc**: Update Claude workflows to use oauth token, closes [#9711](#9711) ([8dcb00e](8dcb00e)) * **misc**: Vertext ai create image, closes [#9710](#9710) ([790d8fd](790d8fd)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * 🔨 chore: unify Claude Code workflows to use claude-code-action@main (#9712) 🤖 Generated with [Claude Code](https://claude.com/claude-code) * 🔨 chore: improve Claude Code triage workflow (#9713) * 🔨 chore: unify Claude Code workflows to use claude-code-action@main 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * 🔧 chore: extract issue triage prompt to separate file - Add .claude/prompts/issue-triage.md with comprehensive triage guide - Update workflow to read from issue-triage.md instead of inline prompt - Simplify workflow configuration for better maintainability - Add provider detection rules including aihubmix 🤖 Generated with [Claude Code](https://claude.com/claude-code) * ✅ test(store): refactor generateAIChatV2 tests following V1 patterns (#9714) - Introduce shared test helpers and fixtures - Use TEST_IDS and TEST_CONTENT constants instead of hardcoded strings - Organize tests by functionality (validation, message creation, RAG integration, error handling) - Remove commented-out test code - Maintain V2-specific features (isServerMode, aiChatService mock) - All 28 tests passing * 🔨 style: Use different favicon.ico in dev mode (#9723) * 🔖 chore(release): v1.137.7 [skip ci] ### [Version 1.137.7](v1.137.6...v1.137.7) <sup>Released on **2025-10-15**</sup> #### 💄 Styles - **misc**: Use different favicon.ico in dev mode. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### Styles * **misc**: Use different favicon.ico in dev mode, closes [#9723](#9723) ([2f7317b](2f7317b)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * 🐛 fix: fix duplicate tools id issue and fix link dialog issue (#9731) * add * baseline * ✅ test(store): add tests for discover store plugin and mcp slices - Add comprehensive tests for discover/slices/plugin/action.ts (15 tests) - Add comprehensive tests for discover/slices/mcp/action.ts (11 tests) - Update test-coverage.md with new metrics and completed work - Coverage: 74.24% overall (+26 tests, 2 new test files) - Action files coverage: 29/40 tested (72.5%, +2 files) Features tested: - Plugin/MCP categories, detail, identifiers, and list fetching - SWR key generation with locale and parameters - SWR configuration verification - Service integration with discoverService 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * 📝 docs(testing): add SWR hooks testing guide and subagent workflow Testing Guide Updates: - Add comprehensive SWR hooks testing section with examples - Document key differences from regular action tests - Add examples for testing SWR key generation and configuration - Add examples for testing conditional fetching - Update references to include SWR hook test examples Test Coverage Guide Updates: - Add detailed subagent workflow for parallel testing - Document when and how to use subagents for testing - Add complete workflow example using subagents - Add benefits and best practices for subagent usage - Clarify that subagents should NOT commit or update docs - Add step-by-step guide for launching parallel subagents Key improvements: - Better documentation for testing SWR-based store actions - Clear workflow for efficient parallel testing using subagents - Single atomic commit strategy after all subagents complete - Improved testing efficiency and organization 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * ♻️ refactor(test): fix SWR mock strategy to properly test fetcher Previously, tests were hardcoding return values instead of calling the fetcher function. This bypassed the actual service call logic. Changes: - Fix useSWR mock to call fetcher and return its Promise - Update assertions to await Promise results - Update testing guide with correct mock pattern - Add explanation of why this approach is correct Before (incorrect): ```typescript useSWRMock.mockImplementation(((key, fetcher) => { fetcher?.(); // Call but ignore result return { data: mockData }; // Hardcoded }) as any); expect(result.current.data).toEqual(mockData); ``` After (correct): ```typescript useSWRMock.mockImplementation(((key, fetcher) => { const data = fetcher?.(); // Get Promise from fetcher return { data }; // Return Promise }) as any); const resolvedData = await result.current.data; expect(resolvedData).toEqual(mockData); ``` Benefits: - ✅ Actually tests the fetcher function - ✅ Mirrors real SWR behavior (data is Promise) - ✅ Service calls are properly verified - ✅ Tests are more accurate and maintainable Updated files: - .cursor/rules/testing-guide/zustand-store-action-test.mdc - src/store/discover/slices/plugin/action.test.ts - src/store/discover/slices/mcp/action.test.ts 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * 🐛 fix(test): correct SWR mock strategy to match project standards - Remove useSWR mocking, use real SWR implementation instead - Only mock service methods (fetchers) with vi.spyOn - Use waitFor for async assertions - Update testing guide with correct SWR pattern - Add reference to src/store/chat/slices/message/action.test.ts This fixes the incorrect mocking approach from previous commits. All 13 tests pass with the corrected strategy. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * ✅ test(store): add comprehensive tests for high priority action files - Add mcpStore action tests (41 tests, 624 LOC covered) - MCP plugin installation flow (normal, resume, dependencies, config) - Connection testing (HTTP and STDIO) - Plugin lifecycle management - Error handling and cancellation flows - Add fileManager action tests (35 tests, 205 LOC covered) - File upload and processing workflows - Chunk embedding and parsing - File list management and refresh - SWR data fetching Testing approach: - Used parallel subagents for efficient development - Followed zustand testing patterns from guide - Proper test layering and per-test mocking - All tests pass type-check and lint Coverage improvement: 74.24% → ~76% (+76 tests, 2 files) Action files: 29/40 → 31/40 tested (77.5%) 🏆 Milestone: All high priority files (>200 LOC) now have tests! 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * ✅ test(store): complete 100% action file coverage with 160 new tests Added comprehensive tests for all remaining 9 medium-priority action files: Discovery Store (33 tests): - assistant/action.ts: 10 tests (SWR hooks, categories, detail, identifiers, list) - provider/action.ts: 11 tests (SWR hooks, detail with readme, identifiers, list with filters) - model/action.ts: 12 tests (SWR hooks, categories, detail, identifiers, list with params) Knowledge Base Store (29 tests): - crud/action.ts: 19 tests (create, update, remove, refresh, loading states, SWR hooks) - content/action.ts: 10 tests (add files, remove files, error handling) File Store (36 tests): - upload/action.ts: 18 tests (base64 upload, file upload with progress, type detection, KB integration) - chunk/action.ts: 18 tests (drawer management, highlight, semantic search) AI Infrastructure Store (23 tests): - aiModel/action.ts: 23 tests (CRUD, batch operations, remote sync, toggle enabled, SWR hooks) Chat Store (39 tests): - thread/action.ts: 39 tests (CRUD, messaging, AI title generation, validation, loading states) Testing approach: - Used 9 parallel subagents for efficient development - Followed zustand testing patterns from guide - SWR hook testing for discovery slices - Complex async flows with proper error handling - File operations with progress callbacks - Semantic search and RAG integration Coverage improvement: ~76% → ~80% (+160 tests, 9 files) Action files: 31/40 → 40/40 tested (100%) 🎉 MILESTONE: All 40 action files now have comprehensive test coverage! 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * fix test * fix test * fix context-engine * add tests * remove * remove tools bar * pin bun version * fix --------- Co-authored-by: Claude <[email protected]> * 💄 style: add region support for Vertex AI provider (#9720) ✨ feat: add region support for Vertex AI provider - Add VertexAIKeyVault interface with region support - Update UI to include region selector with 35+ regions - Add vertexAIRegion field to ClientSecretPayload - Update backend to use user-selected region with fallback - Add i18n support for English and Chinese - Fix issue with Gemini 2.5 models requiring global region * 🔖 chore(release): v1.137.8 [skip ci] ### [Version 1.137.8](v1.137.7...v1.137.8) <sup>Released on **2025-10-15**</sup> #### 🐛 Bug Fixes - **misc**: Fix duplicate tools id issue and fix link dialog issue. #### 💄 Styles - **misc**: Add region support for Vertex AI provider. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### What's fixed * **misc**: Fix duplicate tools id issue and fix link dialog issue, closes [#9731](#9731) ([0a8c80d](0a8c80d)) #### Styles * **misc**: Add region support for Vertex AI provider, closes [#9720](#9720) ([d17b50c](d17b50c)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * 💄 style: improve update notification (#9717) * refactor tool source * Revert "refactor tool source" This reverts commit a867118. * improve update notification * improve locale * 🔖 chore(release): v1.137.9 [skip ci] ### [Version 1.137.9](v1.137.8...v1.137.9) <sup>Released on **2025-10-15**</sup> #### 💄 Styles - **misc**: Improve update notification. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### Styles * **misc**: Improve update notification, closes [#9717](#9717) ([16de38a](16de38a)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * 🔨 chore: mobile related server implementation pick from mobile app (#9691) * server: sync from feat/mobile-app (exclude apps/mobile) * Update package.json * chore(mobile): update mobile router imports to use lambda * chore(mobile): refactor mobile router * chore: format tsconfig.json * chore(mobile): simplify mobile router --------- Co-authored-by: Arvin Xu <[email protected]> Co-authored-by: Tsuki <[email protected]> * 💄 style: Add Claude Haiku 4.5 model (#9735) * feat: 添加 Claude Haiku 4.5 模型及其相关配置 * fix: 修复模型 ID 格式并移除 Llama 4 Maverick 模型 * 添加 doubao-seed-1.6-lite;更新模型价格区间格式,调整价格单位为百万 tokens * fix: Invalid combination of reasoning_effort and thinking type: low + disabled * feat: 添加 Qwen3 VL Flash 和 Qwen3 Coder 30B A3B 模型,更新定价和发布信息 * 🔖 chore(release): v1.137.10 [skip ci] ### [Version 1.137.10](v1.137.9...v1.137.10) <sup>Released on **2025-10-16**</sup> #### 💄 Styles - **misc**: Add Claude Haiku 4.5 model. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### Styles * **misc**: Add Claude Haiku 4.5 model, closes [#9735](#9735) ([1cfbc87](1cfbc87)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * ✨ feat: support Group Chat, Mention, and Multi-Agent Orchestration with feature flag (#8976) * feat: implement group chat functionality * fix * update * revert pglite mock * fix: Add missing test * fix mention * fix mention * lint: Clear unused varibles * fix: type check * fix: Coverage * build: Add missing test * fix: add mention back * fix: Add missing test * fix: Add test for topic * feat: Group chat fallback style * fix: Revert unncessary files * fix: circular deps * feat: tool usage * fix: Replace debug info * feat: Update i18n * opti: Better prompr * fix claude * feat: Filter model without function calling * fix: DM reduction * lint: Address build error * fix: Test error * feat: Store model info * style: Clean up welcome messaeg * feat: Use new welcome message * fix: inbox not working * fix: inbox not working * fix: type error * feat: Optimize prompt * fix: Revert unintentional changes * lint: Remove unused code * fix: better test * fix: Use debug * refact: Move normalization postion * opti: Better prompt * opti: Better prompt * opti: Better prompt * lint: Clear console.log * fix: Update test snap * fix: test error * fix: Unexpectly test fail --------- Co-authored-by: arvinxx <[email protected]> * 🔖 chore(release): v1.138.0 [skip ci] ## [Version 1.138.0](v1.137.10...v1.138.0) <sup>Released on **2025-10-16**</sup> #### ✨ Features - **misc**: Support Group Chat, Mention, and Multi-Agent Orchestration with feature flag. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### What's improved * **misc**: Support Group Chat, Mention, and Multi-Agent Orchestration with feature flag, closes [#8976](#8976) ([03c2838](03c2838)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * 🔨 chore: support Feishu OAuth Provider (#9745) * feat: 添加 Feishu 作为新的 OAuth 认证提供者,并更新相关配置 * docs: 添加 Feishu 应用的环境变量配置说明 * refactor: 移除 Feishu 相关的环境变量配置,对齐 auth.js 环境变量规范 * improve docs * add feishu --------- Co-authored-by: 赵远景 <[email protected]> * 🐛 fix: Automatic topic creation switch does not work (#9693) * ✨ feat: 添加自动创建主题功能,支持根据消息数量和配置阈值决定是否创建新主题 * typo * fix test * 删除 GLM-4.6 模型的定义 * ✨ feat: 添加 Ring-1T 和 Ling-1T 模型定义,扩展聊天模型库 * ✨ feat: 添加 Qwen3 VL 模型,扩展聊天模型库并更新 Vercel AI Gateway 模型定价 * fix test * feat: support ios 26 icon * 🔖 chore(release): v1.138.1 [skip ci] ### [Version 1.138.1](v1.138.0...v1.138.1) <sup>Released on **2025-10-16**</sup> #### 🐛 Bug Fixes - **misc**: Automatic topic creation switch does not work. <br/> <details> <summary><kbd>Improvements and Fixes</kbd></summary> #### What's fixed * **misc**: Automatic topic creation switch does not work, closes [#9693](#9693) ([a02b301](a02b301)) </details> <div align="right"> [](#readme-top) </div> * 📝 docs(bot): Auto sync agents & plugin to readme * chore: fix lint error * add prompts package to workspace --------- Co-authored-by: Arvin Xu <[email protected]> Co-authored-by: iBenzene <[email protected]> Co-authored-by: bbbugg <[email protected]> Co-authored-by: Shinji-Li <[email protected]> Co-authored-by: semantic-release-bot <[email protected]> Co-authored-by: lobehubbot <[email protected]> Co-authored-by: peerless-hero <[email protected]> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: bbbugg <[email protected]> Co-authored-by: YuTengjing <[email protected]> Co-authored-by: René Wang <[email protected]> Co-authored-by: Claude <[email protected]> Co-authored-by: Tsuki <[email protected]> Co-authored-by: sxjeru <[email protected]> Co-authored-by: 赵远景 <[email protected]>
💻 Change Type
🔀 Description of Change
📝 Additional Information
Summary by Sourcery
Introduce automated issue triage and deduplication workflows leveraging Claude Code to streamline GitHub issue management
New Features:
CI:
Documentation: