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
102 lines
3.6 KiB
Go
102 lines
3.6 KiB
Go
package storesqlite
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/tutti-os/tutti/packages/agent/store-sqlite/canonical"
|
|
)
|
|
|
|
func TestSplitSessionRuntimeContextSeparatesPublicMetadataFromProviderPrivateState(t *testing.T) {
|
|
metadata, capabilities, internal, err := splitSessionRuntimeContext(map[string]any{
|
|
"visible": false, "imported": true,
|
|
"capabilities": []any{"planMode", "interrupt"},
|
|
"usage": map[string]any{
|
|
"contextWindow": map[string]any{"usedTokens": 33_168, "totalTokens": 400_000},
|
|
"quotas": []any{map[string]any{
|
|
"quotaType": "weekly", "percentRemaining": 75.5, "resetsAtUnixMs": 1_750_003_600_000,
|
|
}},
|
|
},
|
|
"goal": map[string]any{"objective": "ship", "status": "active"},
|
|
"providerConfig": map[string]any{"threadId": "thread-1"},
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if metadata.Visible || !metadata.Imported || capabilities == nil || len(capabilities.Values) != 2 ||
|
|
metadata.Usage == nil || metadata.Usage.ContextWindow == nil || metadata.Usage.ContextWindow.UsedTokens != 33_168 ||
|
|
metadata.Goal == nil || metadata.Goal.Objective != "ship" {
|
|
t.Fatalf("metadata=%#v", metadata)
|
|
}
|
|
providerConfig, _ := internal["providerConfig"].(map[string]any)
|
|
if providerConfig["threadId"] != "thread-1" {
|
|
t.Fatalf("internal=%#v", internal)
|
|
}
|
|
for _, key := range sessionMetadataRuntimeContextKeys {
|
|
if _, leaked := internal[key]; leaked {
|
|
t.Fatalf("typed key %q leaked into internal context %#v", key, internal)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSessionMetadataCapabilitySnapshotBackwardCompatibility(t *testing.T) {
|
|
_, legacyUnknown, err := unmarshalSessionMetadata(`{"visible":true,"imported":false,"capabilities":[]}`)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if legacyUnknown != nil {
|
|
t.Fatalf("legacy empty capabilities = %#v, want unknown", legacyUnknown)
|
|
}
|
|
|
|
_, legacyReported, err := unmarshalSessionMetadata(`{"visible":true,"imported":false,"capabilities":["goalPause"]}`)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if legacyReported == nil || len(legacyReported.Values) != 1 || legacyReported.Values[0] != "goalPause" {
|
|
t.Fatalf("legacy non-empty capabilities = %#v, want reported", legacyReported)
|
|
}
|
|
|
|
raw, err := marshalSessionMetadata(SessionMetadata{Visible: true}, canonical.NewCapabilitySnapshot(nil))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
_, reportedEmpty, err := unmarshalSessionMetadata(raw)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if reportedEmpty == nil || len(reportedEmpty.Values) != 0 {
|
|
t.Fatalf("reported empty capabilities = %#v", reportedEmpty)
|
|
}
|
|
}
|
|
|
|
func TestSplitSessionRuntimeContextUsesClosedMetadataVocabularies(t *testing.T) {
|
|
metadata, capabilities, internal, err := splitSessionRuntimeContext(map[string]any{
|
|
"capabilities": []any{" planMode ", "planMode", "provider-private"},
|
|
"goal": map[string]any{"objective": "ship", "status": "usageLimited"},
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if capabilities == nil || len(capabilities.Values) != 1 || capabilities.Values[0] != "planMode" ||
|
|
metadata.Goal.Status != "usageLimited" {
|
|
t.Fatalf("metadata=%#v", metadata)
|
|
}
|
|
if len(internal) != 0 {
|
|
t.Fatalf("internal context = %#v, want empty", internal)
|
|
}
|
|
}
|
|
|
|
func TestDecodeSessionGoalUsesCanonicalValidation(t *testing.T) {
|
|
goal, err := DecodeSessionGoal(map[string]any{
|
|
"objective": "ship", "status": "paused", "startedAtUnixMs": 10, "iterations": 2,
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if goal.Objective != "ship" || goal.Status != "paused" || goal.StartedAtUnixMS != 10 || goal.Iterations != 2 {
|
|
t.Fatalf("goal=%#v", goal)
|
|
}
|
|
if _, err := DecodeSessionGoal(map[string]any{"objective": "ship", "status": "unknown"}); err == nil {
|
|
t.Fatal("DecodeSessionGoal() error=nil, want closed status validation")
|
|
}
|
|
}
|