feat(skill): add per-skill auto_sync toggle to control git sync on startup#156
Open
niiish32x wants to merge 7 commits intoderisk-ai:mainfrom
Open
feat(skill): add per-skill auto_sync toggle to control git sync on startup#156niiish32x wants to merge 7 commits intoderisk-ai:mainfrom
niiish32x wants to merge 7 commits intoderisk-ai:mainfrom
Conversation
Root cause: when the LLM responded with plain text (no tool_calls) in a function-calling session, the next iteration still built history pairs of assistant(tool_calls=null) → tool(tool_call_id=...) which violates the OpenAI-compatible API contract and produces: "messages with role 'tool' must be a response to a preceeding message with 'tool_calls'" Fix (base_agent.py): - `function_callning_reply_messages`: skip appending tool-result messages when the preceding assistant message has no tool_calls, preventing the invalid sequence from being produced in the first place. - `_sanitize_tool_messages`: new helper that scrubs any remaining orphaned tool messages from the final LLM message list immediately before the API call, acting as a last-resort safety net.
… creation
When an MCP resource is rebound (deleted and recreated with a new code/name),
the old resource instance remains registered but no longer matches the new
configuration. Previously, this caused a ValueError to be thrown, breaking
the entire agent initialization.
Changes:
- When registered instances exist but none match the requested resource,
fall back to dynamic resource creation using the configuration value
- Properly catch MCPNotFoundError in both matching and dynamic creation
paths, returning None to allow graceful degradation
- Filter out None entries in build_resource() and a_build_resource() to
prevent unavailable MCPs from breaking agent loading
This ensures that when an MCP is rebound, the agent can still initialize
by creating a new resource instance from the updated configuration.
sync main
…tartup
This change allows users to disable automatic git synchronization for
individual skills, which is particularly useful for users in regions
with slow access to GitHub (e.g., China).
Backend Changes:
- Add `auto_sync` column to skill table (Boolean, default: true)
- Update SkillRequest/SkillResponse schemas to include auto_sync field
- Add POST /{skill_code}/auto_sync endpoint to toggle auto_sync setting
- Update sync logic to skip skills with auto_sync=false (unless force_update)
- Add global `enable_default_skill_sync` config to disable all auto-sync
- Preserve existing auto_sync settings when updating skills from git
Frontend Changes:
- Add updateSkillAutoSync API client method
- Add toggle switch to skill cards in agent-skills page
- Show cloud sync icon (blue when enabled, gray when disabled)
- Only show toggle for skills from git repositories
Database Migration:
- Add Alembic migration: 20260310201723_add_auto_sync_to_skill.py
- Provide SQL script for manual migration
Usage:
- Per-skill: Toggle "Auto Sync" switch in Agent Skills page
- Global: Set `enable_default_skill_sync = false` in config
csunny
approved these changes
Mar 11, 2026
Contributor
csunny
left a comment
There was a problem hiding this comment.
Review Summary
This PR introduces a per-skill auto_sync toggle feature and includes two additional bug fixes.
Key Changes
1. Feature: Per-skill auto_sync toggle (d688cbb)
- Backend: Adds
auto_synccolumn to skill table with newPOST /{skill_code}/auto_syncendpoint - Frontend: Toggle switch in Agent Skills page with visual sync icon indicators
- Config: Global
enable_default_skill_syncoption to disable all auto-sync
2. Bug Fix: Orphaned tool-role message (a838338)
- Fixes API 400 errors when LLM responds without
tool_callsin function-calling sessions - Adds
_sanitize_tool_messages()helper to scrub orphaned tool messages
3. Bug Fix: MCP rebind handling (6ff3f81)
- Gracefully handles MCP resource rebind scenarios (deleted/recreated with new code)
- Returns
Noneinstead of crashing on unavailable MCPs
Minor Suggestions (Non-blocking)
| Area | Issue |
|---|---|
| Logging | Excessive logger.info() statements in _base_dao.py should be removed or changed to debug level |
| Code Duplication | update_auto_sync endpoint manually copies 15+ fields - consider using model_dump(exclude_none=True) |
Verdict
Approved - The feature is well-structured and addresses a real user pain point (slow GitHub access). Bug fixes are solid and defensive.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
feat(skill): add per-skill auto_sync toggle to control git sync on startup
This change allows users to disable automatic git synchronization for
individual skills, which is particularly useful for users in regions
with slow access to GitHub (e.g., China).
Backend Changes:
auto_synccolumn to skill table (Boolean, default: true)enable_default_skill_syncconfig to disable all auto-syncFrontend Changes:
Database Migration:
Usage:
enable_default_skill_sync = falsein configHow Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
Snapshots:
Include snapshots for easier review.
Checklist: