diff --git a/ECOSYSTEM.md b/ECOSYSTEM.md index ca53ec23..1efbc6ff 100644 --- a/ECOSYSTEM.md +++ b/ECOSYSTEM.md @@ -32,7 +32,7 @@ | Repo | Server name / tool prefix | Default policy | Status | |---|---|---|---| -| SIN-Code-Websearch-Skill | `websearch__*` | allow | ACTIVE | +| web_search_bundle | `websearch__*` | allow | ACTIVE | | vane (bridged, never vendored) | `vane__*` | allow | ACTIVE | | SIN-Code-Context-Bridge-Skill | `contextbridge__*` | allow | ACTIVE | | Simone-MCP | `simone__*` | allow | ACTIVE | diff --git a/README.md b/README.md index 35d086ce..6acb5b96 100644 --- a/README.md +++ b/README.md @@ -193,7 +193,7 @@ sin-code vane search "tradeoffs of LRU vs 2-tier cooldown" | Tool | Upstream | Bridge | License | Status | |---|---|---|---|---| | Vane | ItzCrazyKns/Vane | HTTP (internal/vane) | MIT | ACTIVE | -| Websearch | SIN-Code-Websearch-Skill | MCP `websearch__*` | MIT | ACTIVE | +| Websearch | [OpenSIN-Code/web_search_bundle](https://github.com/OpenSIN-Code/web_search_bundle) | MCP `websearch__*` | MIT | ACTIVE | | Symfony-Lens | sin-code-symfony-lens | MCP `symfonylens__*` | MIT | ACTIVE | **Bridged-External** means: SIN-Code never vendors the upstream code; it diff --git a/cmd/sin-code/internal/mcpclient/registry.go b/cmd/sin-code/internal/mcpclient/registry.go index dca3d584..6fbba0c7 100644 --- a/cmd/sin-code/internal/mcpclient/registry.go +++ b/cmd/sin-code/internal/mcpclient/registry.go @@ -27,7 +27,8 @@ func DefaultServers() []ServerConfig { return cfg } return []ServerConfig{ - py("SIN-Code-Websearch-Skill"), + // web_search_bundle is the Go-native successor to SIN-Code-Websearch-Skill. + {Name: "websearch", Transport: "stdio", Command: "sin-websearch", Args: []string{"serve"}}, py("SIN-Code-Scheduler-Skill"), py("SIN-Code-Goal-Mode-Skill"), py("SIN-Code-Grill-Me-Skill"), @@ -45,6 +46,7 @@ func DefaultServers() []ServerConfig { func shortName(repo string) string { m := map[string]string{ + "web_search_bundle": "websearch", "SIN-Code-Websearch-Skill": "websearch", "SIN-Code-Scheduler-Skill": "scheduler", "SIN-Code-Goal-Mode-Skill": "goalmode", diff --git a/cmd/sin-code/internal/skillmgr/manager.go b/cmd/sin-code/internal/skillmgr/manager.go index 616b1b8b..9b96af34 100644 --- a/cmd/sin-code/internal/skillmgr/manager.go +++ b/cmd/sin-code/internal/skillmgr/manager.go @@ -38,7 +38,7 @@ func SkillsDir() string { // with mcpclient.DefaultServers (ecosystem-sync CI enforces it). func KnownSkills() map[string]string { return map[string]string{ - "websearch": "SIN-Code-Websearch-Skill", + "websearch": "web_search_bundle", "scheduler": "SIN-Code-Scheduler-Skill", "goalmode": "SIN-Code-Goal-Mode-Skill", "grillme": "SIN-Code-Grill-Me-Skill", @@ -124,5 +124,14 @@ func verifyEntrypoint(ctx context.Context, dir string) (bool, string) { if _, err := os.Stat(filepath.Join(dir, "package.json")); err == nil { return true, "node entrypoint (package.json)" } + if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil { + // Go-native skill: verify it compiles. + cmd := exec.CommandContext(ctx, "go", "build", "./cmd/sin-websearch") + cmd.Dir = dir + if _, err := cmd.CombinedOutput(); err != nil { + return false, fmt.Sprintf("go entrypoint exists but build failed: %v", err) + } + return true, "go entrypoint builds" + } return false, "no recognized MCP entrypoint" } diff --git a/docs/mcp.json.example b/docs/mcp.json.example index ff178b37..2d6301d8 100644 --- a/docs/mcp.json.example +++ b/docs/mcp.json.example @@ -2,8 +2,8 @@ "mcpServers": { "websearch": { "transport": "stdio", - "command": "python3", - "args": ["${HOME}/skills/SIN-Code-Websearch-Skill/mcp_server.py"] + "command": "sin-websearch", + "args": ["serve"] }, "browser": { "transport": "http", diff --git a/requirements-ecosystem.txt b/requirements-ecosystem.txt index 65a2b888..1c3ee0e3 100644 --- a/requirements-ecosystem.txt +++ b/requirements-ecosystem.txt @@ -17,7 +17,7 @@ SIN-Code-Review-Interface==main SIN-Code-WebUI-v2==main # MCP skill servers (loaded via internal/mcpclient/registry.go) -SIN-Code-Websearch-Skill==main +web_search_bundle==main SIN-Code-Scheduler-Skill==main SIN-Code-Goal-Mode-Skill==main SIN-Code-Grill-Me-Skill==main