Files
tutti/packages/agent/daemon/runtime/capabilities_vocabulary_test.go
agent-radar 2ed3415fb7
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
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

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)
}
}