Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
39 lines
1.2 KiB
Go
39 lines
1.2 KiB
Go
package agentruntime
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"regexp"
|
|
"sort"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/tutti-os/tutti/packages/agent/daemon/providerregistry"
|
|
)
|
|
|
|
// Locks the generated TypeScript vocabulary to the provider registry so drift
|
|
// fails even when capabilities.ts only re-exports the generated catalog.
|
|
func TestCapabilityVocabularyMatchesTypeScript(t *testing.T) {
|
|
t.Parallel()
|
|
tsPath := filepath.Join("..", "..", "activity-core", "src", "generated", "agentCapabilityKeys.ts")
|
|
raw, err := os.ReadFile(tsPath)
|
|
if err != nil {
|
|
t.Fatalf("read %s: %v", tsPath, err)
|
|
}
|
|
block := regexp.MustCompile(`(?s)AGENT_CAPABILITY_KEYS = \[(.*?)\]`).FindSubmatch(raw)
|
|
if block == nil {
|
|
t.Fatalf("AGENT_CAPABILITY_KEYS not found in %s", tsPath)
|
|
}
|
|
matches := regexp.MustCompile(`"([a-zA-Z]+)"`).FindAllStringSubmatch(string(block[1]), -1)
|
|
got := make([]string, 0, len(matches))
|
|
for _, match := range matches {
|
|
got = append(got, match[1])
|
|
}
|
|
want := providerregistry.KnownCapabilities()
|
|
sort.Strings(got)
|
|
sort.Strings(want)
|
|
if strings.Join(got, ",") != strings.Join(want, ",") {
|
|
t.Fatalf("capability vocabulary drift:\n ts = %v\n go = %v", got, want)
|
|
}
|
|
}
|