mirror of
https://github.com/lukaszraczylo/harness-sync.git
synced 2026-10-14 00:57:49 +00:00
fix(adapters): emit correct provider/model schema per harness
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/lukaszraczylo/harness-sync/internal/adapter"
|
||||
"github.com/lukaszraczylo/harness-sync/internal/adapter/common"
|
||||
"github.com/lukaszraczylo/harness-sync/internal/canonical"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
@@ -76,6 +77,12 @@ func (a *Adapter) Render(b *canonical.Bundle) (*adapter.FileSet, error) {
|
||||
mcps[s.Name] = e
|
||||
}
|
||||
|
||||
// inline model shorthand: "providerID/modelID"
|
||||
modelRef := ""
|
||||
if b.Profile.Gateway.DefaultModel != "" {
|
||||
modelRef = "harness-sync-gateway/" + b.Profile.Gateway.DefaultModel
|
||||
}
|
||||
|
||||
cfg := map[string]any{
|
||||
"version": 8,
|
||||
"metadata": map[string]any{
|
||||
@@ -83,14 +90,15 @@ func (a *Adapter) Render(b *canonical.Bundle) (*adapter.FileSet, error) {
|
||||
},
|
||||
"agents": map[string]any{
|
||||
"default": map[string]any{
|
||||
"model": "gateway/" + b.Profile.Gateway.DefaultModel,
|
||||
"model": modelRef,
|
||||
"instruction": instructions,
|
||||
},
|
||||
},
|
||||
"providers": common.ProvidersAsCagentMap(&b.Profile),
|
||||
"models": map[string]any{
|
||||
"gateway": map[string]any{
|
||||
"provider": "openai", // cagent gateway via openai-compat
|
||||
"base_url": b.Profile.Gateway.URL,
|
||||
"harness-sync-gateway": map[string]any{
|
||||
"provider": "harness-sync-gateway",
|
||||
"model": b.Profile.Gateway.DefaultModel,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -48,19 +48,63 @@ func TestCagentRenderProducesExpectedTargets(t *testing.T) {
|
||||
|
||||
agents := parsed["agents"].(map[string]any)
|
||||
def := agents["default"].(map[string]any)
|
||||
assert.Equal(t, "gateway/claude-sonnet-4-6", def["model"])
|
||||
assert.Equal(t, "harness-sync-gateway/claude-sonnet-4-6", def["model"])
|
||||
assert.Contains(t, def["instruction"], "# global instruction")
|
||||
|
||||
// providers map (new schema).
|
||||
providers := parsed["providers"].(map[string]any)
|
||||
gwProv := providers["harness-sync-gateway"].(map[string]any)
|
||||
assert.Equal(t, "https://gw", gwProv["base_url"])
|
||||
assert.Equal(t, "HARNESS_SYNC_GATEWAY_TOKEN", gwProv["token_key"])
|
||||
assert.Equal(t, "openai", gwProv["provider"])
|
||||
|
||||
// models map.
|
||||
models := parsed["models"].(map[string]any)
|
||||
gw := models["gateway"].(map[string]any)
|
||||
assert.Equal(t, "openai", gw["provider"])
|
||||
assert.Equal(t, "https://gw", gw["base_url"])
|
||||
gw := models["harness-sync-gateway"].(map[string]any)
|
||||
assert.Equal(t, "harness-sync-gateway", gw["provider"])
|
||||
assert.Equal(t, "claude-sonnet-4-6", gw["model"])
|
||||
|
||||
mcps := parsed["mcps"].(map[string]any)
|
||||
fp := mcps["filepuff"].(map[string]any)
|
||||
assert.Equal(t, "/bin/filepuff", fp["command"])
|
||||
}
|
||||
|
||||
func TestCagentRenderProvidersAndModelsMaps(t *testing.T) {
|
||||
home := t.TempDir()
|
||||
ad := New(WithHome(home))
|
||||
b := &canonical.Bundle{
|
||||
Profile: canonical.Profile{
|
||||
Gateway: canonical.Gateway{
|
||||
URL: "https://gw",
|
||||
Token: "tok",
|
||||
DefaultModel: "claude-sonnet-4-6",
|
||||
},
|
||||
},
|
||||
}
|
||||
fs, err := ad.Render(b)
|
||||
require.NoError(t, err)
|
||||
seen := map[string]adapter.File{}
|
||||
fs.ForEach(func(f adapter.File) { seen[f.Dest] = f })
|
||||
|
||||
cfgDest := filepath.Join(home, ".config", "cagent", "default.yaml")
|
||||
var parsed map[string]any
|
||||
require.NoError(t, yaml.Unmarshal(seen[cfgDest].Content, &parsed))
|
||||
|
||||
// providers block present.
|
||||
providers, ok := parsed["providers"].(map[string]any)
|
||||
require.True(t, ok, "providers must be a map")
|
||||
gw, ok := providers["harness-sync-gateway"].(map[string]any)
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, "https://gw", gw["base_url"])
|
||||
assert.Equal(t, "HARNESS_SYNC_GATEWAY_TOKEN", gw["token_key"])
|
||||
assert.Equal(t, "openai", gw["provider"])
|
||||
|
||||
// agents.default.model uses inline shorthand.
|
||||
agents := parsed["agents"].(map[string]any)
|
||||
def := agents["default"].(map[string]any)
|
||||
assert.Equal(t, "harness-sync-gateway/claude-sonnet-4-6", def["model"])
|
||||
}
|
||||
|
||||
func TestCagentRenderNoMCP(t *testing.T) {
|
||||
home := t.TempDir()
|
||||
ad := New(WithHome(home))
|
||||
|
||||
Reference in New Issue
Block a user