mirror of
https://github.com/lukaszraczylo/harness-sync.git
synced 2026-10-12 00:45:22 +00:00
zed: delete context_servers key to fix serde parse error; update tests
This commit is contained in:
@@ -0,0 +1 @@
|
||||
{"action":"prune","keep":10,"kept":[],"removed":[],"auditedAt":"2026-05-23T19:08:40.613Z"}
|
||||
@@ -52,7 +52,7 @@ func (a *Adapter) Capabilities() adapter.HarnessCapabilities {
|
||||
return adapter.HarnessCapabilities{
|
||||
ManagesProviders: true,
|
||||
ManagesModels: true,
|
||||
ManagesMCP: true,
|
||||
ManagesMCP: false, // Agent panel uses Extensions; context_servers key causes serde parse errors
|
||||
ManagesSkills: false,
|
||||
ManagesInstructions: false,
|
||||
HasBuiltInSub: false,
|
||||
@@ -67,14 +67,22 @@ func (a *Adapter) Detect() bool {
|
||||
|
||||
// Render produces the FileSet that applies the canonical bundle to Zed.
|
||||
// settings.json is MERGED to preserve all user-managed Zed configuration.
|
||||
// Manages: context_servers (MCP), language_models.openai, agent.default_model.
|
||||
// Manages: language_models.openai_compatible, agent.default_model.
|
||||
//
|
||||
// NOTE: context_servers is NOT written. Zed 1.3+ uses Extension-based MCP
|
||||
// servers in the Agent panel; writing context_servers causes a serde parse
|
||||
// error (ContextServerSettingsContent untagged enum bug) that aborts loading
|
||||
// the entire settings.json. We clear any existing context_servers key to fix
|
||||
// pre-existing parse errors from user-configured entries.
|
||||
func (a *Adapter) Render(b *canonical.Bundle) (*adapter.FileSet, error) {
|
||||
fs := adapter.NewFileSet()
|
||||
cfgPath := filepath.Join(a.home, ".config", "zed", "settings.json")
|
||||
existing, _ := os.ReadFile(cfgPath)
|
||||
|
||||
// Set context_servers to nil so MergeJSONKeys removes the key entirely,
|
||||
// clearing any entries that trigger the serde ContextServerSettingsContent bug.
|
||||
overlay := map[string]any{
|
||||
"context_servers": common.BuildMCPMapStyled(&b.MCP, common.MCPZedStyle),
|
||||
"context_servers": nil,
|
||||
}
|
||||
|
||||
if b.Profile.Gateway.URL != "" {
|
||||
|
||||
@@ -58,13 +58,9 @@ func TestZedRenderProducesExpectedTargets(t *testing.T) {
|
||||
gw := oc["harness-sync-gateway"].(map[string]any)
|
||||
assert.Equal(t, "https://llmgw.example.com/v1", gw["api_url"])
|
||||
|
||||
// context_servers — no "enabled" or "source" (Zed serde bug workaround).
|
||||
cs := parsed["context_servers"].(map[string]any)
|
||||
fp := cs["filepuff"].(map[string]any)
|
||||
assert.Equal(t, "/bin/filepuff", fp["command"])
|
||||
assert.Equal(t, []any{"--serve"}, fp["args"])
|
||||
assert.NotContains(t, fp, "enabled")
|
||||
assert.NotContains(t, fp, "source")
|
||||
// context_servers must be absent — Zed serde untagged-enum bug aborts
|
||||
// settings loading when this key is present; we delete it via nil overlay.
|
||||
assert.NotContains(t, parsed, "context_servers")
|
||||
}
|
||||
|
||||
func TestZedRenderMergesExistingKeys(t *testing.T) {
|
||||
@@ -96,9 +92,9 @@ func TestZedRenderMergesExistingKeys(t *testing.T) {
|
||||
assert.Equal(t, "One Dark", parsed["theme"])
|
||||
assert.Equal(t, float64(16), parsed["font_size"])
|
||||
assert.Equal(t, true, parsed["vim_mode"])
|
||||
// Managed keys present.
|
||||
// Managed keys present; context_servers absent (serde bug — we delete it).
|
||||
assert.Contains(t, parsed, "agent")
|
||||
assert.Contains(t, parsed, "context_servers")
|
||||
assert.NotContains(t, parsed, "context_servers")
|
||||
}
|
||||
|
||||
func TestZedRenderNoMCP(t *testing.T) {
|
||||
@@ -118,10 +114,8 @@ func TestZedRenderNoMCP(t *testing.T) {
|
||||
cfgDest := filepath.Join(home, ".config", "zed", "settings.json")
|
||||
var parsed map[string]any
|
||||
require.NoError(t, json.Unmarshal(seen[cfgDest].Content, &parsed))
|
||||
// context_servers key present but empty map.
|
||||
cs, ok := parsed["context_servers"]
|
||||
assert.True(t, ok)
|
||||
assert.Empty(t, cs)
|
||||
// context_servers must be absent (nil overlay deletes the key).
|
||||
assert.NotContains(t, parsed, "context_servers")
|
||||
}
|
||||
|
||||
func TestZedRenderEmitsLanguageModelsOpenAICompatible(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user