From 46ece56c44335d338e37638620ccce71bb19185a Mon Sep 17 00:00:00 2001 From: Jaana Dogan Date: Mon, 15 Jun 2026 20:29:21 -0700 Subject: [PATCH 1/8] Use SubstrateHarness if AX_SUBSTRATE=1 Fixes #87. --- internal/controller2/controller.go | 32 ++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/internal/controller2/controller.go b/internal/controller2/controller.go index 91e20d6..81a02ff 100644 --- a/internal/controller2/controller.go +++ b/internal/controller2/controller.go @@ -20,8 +20,10 @@ import ( "context" "fmt" "log/slog" + "os" "github.com/google/ax/internal/controller/executor" + "github.com/google/ax/internal/harness" "github.com/google/ax/internal/harness/harnesstest" "github.com/google/ax/proto" "github.com/google/uuid" @@ -73,22 +75,32 @@ func (d *Controller) Exec(ctx context.Context, req *proto.ExecRequest, handler E // TODO(jbd): Enable bringing a remote harness that implements HarnessService. // TODO(anj): We need to consolidate agents and harness registration. // Adding harness registration support temporarily. - h, err := d.registry.Harness(req.AgentId) - if err != nil { - // Fallback to test harness - slog.WarnContext(ctx, "Harness not found in registry, falling back to test harness", - slog.String("agent_id", req.AgentId), - slog.String("conversation_id", req.ConversationId), - slog.Any("error", err), - ) - h = harnesstest.New() + var h harness.Harness + if os.Getenv("AX_SUBSTRATE") == "1" { + sh, err := harness.NewSubstrateHarness(req.AgentId, "", "", "", 0) + if err != nil { + return fmt.Errorf("failed to create substrate harness: %w", err) + } + h = sh + } else { + var err error + h, err = d.registry.Harness(req.AgentId) + if err != nil { + // Fallback to test harness + slog.WarnContext(ctx, "Harness not found in registry, falling back to test harness", + slog.String("agent_id", req.AgentId), + slog.String("conversation_id", req.ConversationId), + slog.Any("error", err), + ) + h = harnesstest.New() + } } exec, err := h.Start(ctx, req.ConversationId) if err != nil { return fmt.Errorf("failed to start harness session: %w", err) } defer exec.Close(ctx) - + if err := exec.Queue(ctx, req.Inputs...); err != nil { return fmt.Errorf("failed to queue inputs: %w", err) } From 676b3666702383cc0d537a68c496d5d490df5d59 Mon Sep 17 00:00:00 2001 From: Jaana Dogan Date: Mon, 15 Jun 2026 21:58:18 -0700 Subject: [PATCH 2/8] Don't allow multiple antigravity harnesses Fixes #96. --- cmd/ax/internal/cliutil/cliutil_harness.go | 29 ++++++++------ .../internal/cliutil/cliutil_harness_test.go | 30 +++----------- internal/ax2.yaml | 4 +- internal/config2/config.go | 40 +++++++++++-------- internal/config2/config_test.go | 31 +++++++++----- internal/manifests/ax-deployment2.yaml | 4 +- 6 files changed, 68 insertions(+), 70 deletions(-) diff --git a/cmd/ax/internal/cliutil/cliutil_harness.go b/cmd/ax/internal/cliutil/cliutil_harness.go index d936ff6..f3badbd 100644 --- a/cmd/ax/internal/cliutil/cliutil_harness.go +++ b/cmd/ax/internal/cliutil/cliutil_harness.go @@ -56,14 +56,16 @@ func NewControllerFromConfig(ctx context.Context, cfg *Config) (*controller2.Con endpoint := os.Getenv("AX_SUBSTRATE_ENDPOINT") // Built-in harnesses. - for _, hc := range cfg.Harnesses.Antigravity { - h, err := hc.NewHarness(substrateMode, endpoint) - if err != nil { - return nil, fmt.Errorf("antigravity harness %q: %w", hc.ID, err) - } - if err := reg.RegisterHarness(hc.ID, h); err != nil { - return nil, fmt.Errorf("register antigravity harness %q: %w", hc.ID, err) - } + var defaultHarnessID string + antigravityHarness, err := cfg.Harnesses.Antigravity.NewHarness(substrateMode, endpoint) + if err != nil { + return nil, fmt.Errorf("antigravity harness: %w", err) + } + if err := reg.RegisterHarness("antigravity", antigravityHarness); err != nil { + return nil, fmt.Errorf("register antigravity harness: %w", err) + } + if cfg.Harnesses.Antigravity.Default { + defaultHarnessID = "antigravity" } // Custom substrate harnesses. @@ -78,16 +80,19 @@ func NewControllerFromConfig(ctx context.Context, cfg *Config) (*controller2.Con if err := reg.RegisterHarness(sc.ID, h); err != nil { return nil, fmt.Errorf("register substrate harness %q: %w", sc.ID, err) } + if sc.Default { + defaultHarnessID = sc.ID + } } // Register the configured default harness. - if id := cfg.Harnesses.Default; id != "" { - h, err := reg.Harness(id) + if defaultHarnessID != "" { + h, err := reg.Harness(defaultHarnessID) if err != nil { - return nil, fmt.Errorf("default harness %q not found", id) + return nil, fmt.Errorf("default harness %q not found", defaultHarnessID) } if err := reg.RegisterHarness("", h); err != nil { - return nil, fmt.Errorf("register default harness %q: %w", id, err) + return nil, fmt.Errorf("register default harness %q: %w", defaultHarnessID, err) } } diff --git a/cmd/ax/internal/cliutil/cliutil_harness_test.go b/cmd/ax/internal/cliutil/cliutil_harness_test.go index 1655cfc..bc392fe 100644 --- a/cmd/ax/internal/cliutil/cliutil_harness_test.go +++ b/cmd/ax/internal/cliutil/cliutil_harness_test.go @@ -33,9 +33,9 @@ func TestNewControllerFromConfig_DefaultHarness(t *testing.T) { }, }, Harnesses: config2.HarnessesConfig{ - Default: "ag", - Antigravity: []config2.AntigravityHarnessConfig{ - {ID: "ag", Address: "localhost:50053"}, + Antigravity: config2.AntigravityHarnessConfig{ + Default: true, + Endpoint: "localhost:50053", }, }, } @@ -50,25 +50,6 @@ func TestNewControllerFromConfig_DefaultHarness(t *testing.T) { c.Close() } -func TestNewControllerFromConfig_UnknownDefaultHarness(t *testing.T) { - cfg := &config2.Config{ - Harnesses: config2.HarnessesConfig{ - Default: "missing", - Antigravity: []config2.AntigravityHarnessConfig{ - {ID: "ag", Address: "localhost:50053"}, - }, - }, - } - - _, err := NewControllerFromConfig(context.Background(), cfg) - if err == nil { - t.Fatal("expected error for unknown default harness, got nil") - } - if !strings.Contains(err.Error(), "missing") { - t.Errorf("expected error to mention %q, got: %v", "missing", err) - } -} - func TestNewControllerFromConfig_BuiltinSubstrate(t *testing.T) { t.Setenv("AX_SUBSTRATE", "1") @@ -79,9 +60,8 @@ func TestNewControllerFromConfig_BuiltinSubstrate(t *testing.T) { }, }, Harnesses: config2.HarnessesConfig{ - Default: "ag", - Antigravity: []config2.AntigravityHarnessConfig{ - {ID: "ag"}, + Antigravity: config2.AntigravityHarnessConfig{ + Default: true, }, }, } diff --git a/internal/ax2.yaml b/internal/ax2.yaml index 9865b29..5e3cd24 100644 --- a/internal/ax2.yaml +++ b/internal/ax2.yaml @@ -24,7 +24,5 @@ eventlog: filename: "eventlog/log.sqlite" harnesses: - default: antigravity-example - antigravity: - - id: antigravity-example + default: true diff --git a/internal/config2/config.go b/internal/config2/config.go index af5dfeb..c889301 100644 --- a/internal/config2/config.go +++ b/internal/config2/config.go @@ -63,34 +63,33 @@ type EventLogConfig struct { // - Custom harnesses on substrate whose implementation and container image are // provided by the user via their own ActorTemplate. type HarnessesConfig struct { - // Default is the id of the harness to serve when a request specifies no harness. - Default string `yaml:"default,omitempty"` - Antigravity []AntigravityHarnessConfig `yaml:"antigravity,omitempty"` - Substrate []SubstrateHarnessConfig `yaml:"substrate,omitempty"` + Antigravity AntigravityHarnessConfig `yaml:"antigravity,omitempty"` + Substrate []SubstrateHarnessConfig `yaml:"substrate,omitempty"` } // AntigravityHarnessConfig registers the built-in Antigravity harness. type AntigravityHarnessConfig struct { - ID string `yaml:"id"` // Unique harness identifier - Address string `yaml:"address,omitempty"` // HarnessService address + Default bool `yaml:"default,omitempty"` + Endpoint string `yaml:"endpoint,omitempty"` // HarnessService address } // SubstrateHarnessConfig registers a custom harness deployed on substrate // from a user-provided container image. type SubstrateHarnessConfig struct { - ID string `yaml:"id"` // Unique harness identifier - Namespace string `yaml:"namespace"` // ActorTemplate namespace (user-owned, not "ax") - Template string `yaml:"template"` // ActorTemplate name - Port int `yaml:"port,omitempty"` // HarnessService port + ID string `yaml:"id"` // Unique harness identifier + Namespace string `yaml:"namespace"` // ActorTemplate namespace (user-owned, not "ax") + Template string `yaml:"template"` // ActorTemplate name + Port int `yaml:"port,omitempty"` // HarnessService port + Default bool `yaml:"default,omitempty"` // Default harness or not } // NewHarness builds the built-in Antigravity harness. In substrate mode it's deployed // as a substrate actor; otherwise it runs locally. func (c AntigravityHarnessConfig) NewHarness(substrate bool, endpoint string) (harness.Harness, error) { if substrate { - return newSubstrateHarness(c.ID, endpoint, defaultNamespace, antigravityTemplate, substrateDefaultPort) + return newSubstrateHarness("antigravity", endpoint, defaultNamespace, antigravityTemplate, substrateDefaultPort) } - address := c.Address + address := c.Endpoint if address == "" { address = fmt.Sprintf("localhost:%d", defaultPort) } @@ -159,16 +158,18 @@ func (c *Config) Validate() error { return fmt.Errorf("eventlog.sqlite.filename is required") } - for _, hc := range c.Harnesses.Antigravity { - if hc.ID == "" { - return fmt.Errorf("antigravity harness id is required") - } + var defaultCount int + if c.Harnesses.Antigravity.Default { + defaultCount++ } for _, sc := range c.Harnesses.Substrate { if sc.ID == "" { return fmt.Errorf("substrate harness id is required") } + if sc.ID == "antigravity" { + return fmt.Errorf("substrate harness id %q is reserved for the built-in antigravity harness", sc.ID) + } if sc.Namespace == "" { return fmt.Errorf("substrate harness %q: namespace is required", sc.ID) } @@ -178,6 +179,13 @@ func (c *Config) Validate() error { if sc.Template == "" { return fmt.Errorf("substrate harness %q: template is required", sc.ID) } + if sc.Default { + defaultCount++ + } + } + + if defaultCount > 1 { + return fmt.Errorf("multiple harnesses marked as default") } return nil diff --git a/internal/config2/config_test.go b/internal/config2/config_test.go index abdd6ed..67321a5 100644 --- a/internal/config2/config_test.go +++ b/internal/config2/config_test.go @@ -20,7 +20,7 @@ import ( ) func TestAntigravityNewHarness_Local(t *testing.T) { - h, err := AntigravityHarnessConfig{ID: "ag"}.NewHarness(false, "") + h, err := AntigravityHarnessConfig{Endpoint: "localhost:50053"}.NewHarness(false, "") if err != nil { t.Fatalf("NewHarness: %v", err) } @@ -30,7 +30,7 @@ func TestAntigravityNewHarness_Local(t *testing.T) { } func TestAntigravityNewHarness_Substrate(t *testing.T) { - h, err := AntigravityHarnessConfig{ID: "ag"}.NewHarness(true, "api.ate-system.svc:443") + h, err := AntigravityHarnessConfig{}.NewHarness(true, "api.ate-system.svc:443") if err != nil { t.Fatalf("NewHarness: %v", err) } @@ -53,7 +53,7 @@ func TestSubstrateNewHarness(t *testing.T) { func validConfig() *Config { c := DefaultConfig() c.Harnesses = HarnessesConfig{ - Antigravity: []AntigravityHarnessConfig{{ID: "ag"}}, + Antigravity: AntigravityHarnessConfig{Default: true}, Substrate: []SubstrateHarnessConfig{ {ID: "custom", Namespace: "team-ns", Template: "custom-template"}, }, @@ -67,21 +67,21 @@ func TestValidate_ValidConfig(t *testing.T) { } } -func TestValidate_AntigravityIDRequired(t *testing.T) { +func TestValidate_CustomIDRequired(t *testing.T) { c := validConfig() - c.Harnesses.Antigravity[0].ID = "" + c.Harnesses.Substrate[0].ID = "" err := c.Validate() - if err == nil || !strings.Contains(err.Error(), "antigravity harness id") { - t.Fatalf("Validate() = %v, want antigravity id error", err) + if err == nil || !strings.Contains(err.Error(), "substrate harness id") { + t.Fatalf("Validate() = %v, want substrate id error", err) } } -func TestValidate_CustomIDRequired(t *testing.T) { +func TestValidate_CustomIDReserved(t *testing.T) { c := validConfig() - c.Harnesses.Substrate[0].ID = "" + c.Harnesses.Substrate[0].ID = "antigravity" err := c.Validate() - if err == nil || !strings.Contains(err.Error(), "substrate harness id") { - t.Fatalf("Validate() = %v, want substrate id error", err) + if err == nil || !strings.Contains(err.Error(), "reserved") { + t.Fatalf("Validate() = %v, want reserved id error", err) } } @@ -111,3 +111,12 @@ func TestValidate_CustomTemplateRequired(t *testing.T) { t.Fatalf("Validate() = %v, want template-required error", err) } } + +func TestValidate_MultipleDefaults(t *testing.T) { + c := validConfig() + c.Harnesses.Substrate[0].Default = true + err := c.Validate() + if err == nil || !strings.Contains(err.Error(), "multiple harnesses marked as default") { + t.Fatalf("Validate() = %v, want multiple defaults error", err) + } +} diff --git a/internal/manifests/ax-deployment2.yaml b/internal/manifests/ax-deployment2.yaml index b0743de..56ec77c 100644 --- a/internal/manifests/ax-deployment2.yaml +++ b/internal/manifests/ax-deployment2.yaml @@ -122,7 +122,5 @@ metadata: data: ax.yaml: | harnesses: - default: antigravity - # Built-in harness antigravity: - - id: antigravity + default: true From 071457133b1e5010ba4b365379896772b53a2345 Mon Sep 17 00:00:00 2001 From: Jaana Dogan Date: Mon, 15 Jun 2026 22:12:21 -0700 Subject: [PATCH 3/8] refactor: cliutil registers the substrate implementation --- cmd/ax/internal/cliutil/cliutil_harness.go | 4 --- internal/controller2/controller.go | 30 +++++++--------------- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/cmd/ax/internal/cliutil/cliutil_harness.go b/cmd/ax/internal/cliutil/cliutil_harness.go index f3badbd..3f7c0ac 100644 --- a/cmd/ax/internal/cliutil/cliutil_harness.go +++ b/cmd/ax/internal/cliutil/cliutil_harness.go @@ -87,10 +87,6 @@ func NewControllerFromConfig(ctx context.Context, cfg *Config) (*controller2.Con // Register the configured default harness. if defaultHarnessID != "" { - h, err := reg.Harness(defaultHarnessID) - if err != nil { - return nil, fmt.Errorf("default harness %q not found", defaultHarnessID) - } if err := reg.RegisterHarness("", h); err != nil { return nil, fmt.Errorf("register default harness %q: %w", defaultHarnessID, err) } diff --git a/internal/controller2/controller.go b/internal/controller2/controller.go index 81a02ff..f842049 100644 --- a/internal/controller2/controller.go +++ b/internal/controller2/controller.go @@ -20,10 +20,8 @@ import ( "context" "fmt" "log/slog" - "os" "github.com/google/ax/internal/controller/executor" - "github.com/google/ax/internal/harness" "github.com/google/ax/internal/harness/harnesstest" "github.com/google/ax/proto" "github.com/google/uuid" @@ -75,25 +73,15 @@ func (d *Controller) Exec(ctx context.Context, req *proto.ExecRequest, handler E // TODO(jbd): Enable bringing a remote harness that implements HarnessService. // TODO(anj): We need to consolidate agents and harness registration. // Adding harness registration support temporarily. - var h harness.Harness - if os.Getenv("AX_SUBSTRATE") == "1" { - sh, err := harness.NewSubstrateHarness(req.AgentId, "", "", "", 0) - if err != nil { - return fmt.Errorf("failed to create substrate harness: %w", err) - } - h = sh - } else { - var err error - h, err = d.registry.Harness(req.AgentId) - if err != nil { - // Fallback to test harness - slog.WarnContext(ctx, "Harness not found in registry, falling back to test harness", - slog.String("agent_id", req.AgentId), - slog.String("conversation_id", req.ConversationId), - slog.Any("error", err), - ) - h = harnesstest.New() - } + h, err := d.registry.Harness(req.AgentId) + if err != nil { + // Fallback to test harness + slog.WarnContext(ctx, "Harness not found in registry, falling back to test harness", + slog.String("agent_id", req.AgentId), + slog.String("conversation_id", req.ConversationId), + slog.Any("error", err), + ) + h = harnesstest.New() } exec, err := h.Start(ctx, req.ConversationId) if err != nil { From ccb16b3eb2670fe9af11fc517a5152b2d73100d7 Mon Sep 17 00:00:00 2001 From: Jaana Dogan Date: Mon, 15 Jun 2026 22:24:06 -0700 Subject: [PATCH 4/8] refactor: move Antigravity harness initialization from config to cliutil --- cmd/ax/internal/cliutil/cliutil_harness.go | 29 ++++++++++++++++------ internal/config2/config.go | 15 ----------- internal/config2/config_test.go | 20 --------------- 3 files changed, 22 insertions(+), 42 deletions(-) diff --git a/cmd/ax/internal/cliutil/cliutil_harness.go b/cmd/ax/internal/cliutil/cliutil_harness.go index 3f7c0ac..3306a71 100644 --- a/cmd/ax/internal/cliutil/cliutil_harness.go +++ b/cmd/ax/internal/cliutil/cliutil_harness.go @@ -24,8 +24,11 @@ import ( "github.com/google/ax/internal/config2" "github.com/google/ax/internal/controller/executor" "github.com/google/ax/internal/controller2" + "github.com/google/ax/internal/harness" ) +const antigravityHarnessID = "antigravity" + // Controller is the active controller type for this build. type Controller = *controller2.Controller @@ -52,20 +55,28 @@ func NewControllerFromConfig(ctx context.Context, cfg *Config) (*controller2.Con // AX_SUBSTRATE selects how built-in harnesses run: locally (unset) or as // substrate actors ("1"). substrateMode := os.Getenv("AX_SUBSTRATE") == "1" - // AX_SUBSTRATE_ENDPOINT is the control-plane endpoint for substrate server. - endpoint := os.Getenv("AX_SUBSTRATE_ENDPOINT") // Built-in harnesses. var defaultHarnessID string - antigravityHarness, err := cfg.Harnesses.Antigravity.NewHarness(substrateMode, endpoint) - if err != nil { - return nil, fmt.Errorf("antigravity harness: %w", err) + var antigravityHarness harness.Harness + var err error + if !substrateMode { + address := cfg.Harnesses.Antigravity.Endpoint + if address == "" { + address = "127.0.0.1:50053" + } + antigravityHarness = harness.NewAntigravityHarness(address) + } else { + antigravityHarness, err = harness.NewSubstrateHarness(antigravityHarnessID, os.Getenv("AX_SUBSTRATE_ENDPOINT"), "", "", 80) + if err != nil { + return nil, fmt.Errorf("antigravity harness: %w", err) + } } - if err := reg.RegisterHarness("antigravity", antigravityHarness); err != nil { + if err := reg.RegisterHarness(antigravityHarnessID, antigravityHarness); err != nil { return nil, fmt.Errorf("register antigravity harness: %w", err) } if cfg.Harnesses.Antigravity.Default { - defaultHarnessID = "antigravity" + defaultHarnessID = antigravityHarnessID } // Custom substrate harnesses. @@ -87,6 +98,10 @@ func NewControllerFromConfig(ctx context.Context, cfg *Config) (*controller2.Con // Register the configured default harness. if defaultHarnessID != "" { + h, err := reg.Harness(defaultHarnessID) + if err != nil { + return nil, fmt.Errorf("default harness %q not found", defaultHarnessID) + } if err := reg.RegisterHarness("", h); err != nil { return nil, fmt.Errorf("register default harness %q: %w", defaultHarnessID, err) } diff --git a/internal/config2/config.go b/internal/config2/config.go index c889301..ebfab3c 100644 --- a/internal/config2/config.go +++ b/internal/config2/config.go @@ -31,8 +31,6 @@ const ( // The port for harnesses running as substrate actors. Substrate's // actor networking DNATs inbound workerPodIP:80 to the actor. substrateDefaultPort = 80 - // The Antigravity ActorTemplate name. - antigravityTemplate = "antigravity-template" ) // Config represents the main configuration for the AX harness server. @@ -83,19 +81,6 @@ type SubstrateHarnessConfig struct { Default bool `yaml:"default,omitempty"` // Default harness or not } -// NewHarness builds the built-in Antigravity harness. In substrate mode it's deployed -// as a substrate actor; otherwise it runs locally. -func (c AntigravityHarnessConfig) NewHarness(substrate bool, endpoint string) (harness.Harness, error) { - if substrate { - return newSubstrateHarness("antigravity", endpoint, defaultNamespace, antigravityTemplate, substrateDefaultPort) - } - address := c.Endpoint - if address == "" { - address = fmt.Sprintf("localhost:%d", defaultPort) - } - return harness.NewAntigravityHarness(address), nil -} - // NewHarness builds the custom harness. Custom harnesses always run as substrate // actors from the user's own ActorTemplate. func (c SubstrateHarnessConfig) NewHarness(endpoint string) (harness.Harness, error) { diff --git a/internal/config2/config_test.go b/internal/config2/config_test.go index 67321a5..0423790 100644 --- a/internal/config2/config_test.go +++ b/internal/config2/config_test.go @@ -19,26 +19,6 @@ import ( "testing" ) -func TestAntigravityNewHarness_Local(t *testing.T) { - h, err := AntigravityHarnessConfig{Endpoint: "localhost:50053"}.NewHarness(false, "") - if err != nil { - t.Fatalf("NewHarness: %v", err) - } - if h == nil { - t.Fatal("expected non-nil harness") - } -} - -func TestAntigravityNewHarness_Substrate(t *testing.T) { - h, err := AntigravityHarnessConfig{}.NewHarness(true, "api.ate-system.svc:443") - if err != nil { - t.Fatalf("NewHarness: %v", err) - } - if h == nil { - t.Fatal("expected non-nil harness") - } -} - func TestSubstrateNewHarness(t *testing.T) { h, err := SubstrateHarnessConfig{ID: "c", Namespace: "team-ns", Template: "custom-template"}.NewHarness("api.ate-system.svc:443") if err != nil { From 30a9500e7638eed78eb2c095c34f5a993826fa32 Mon Sep 17 00:00:00 2001 From: Jaana Dogan Date: Mon, 15 Jun 2026 22:27:47 -0700 Subject: [PATCH 5/8] feat: add substrate template parameter to antigravity harness initialization --- cmd/ax/internal/cliutil/cliutil_harness.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cmd/ax/internal/cliutil/cliutil_harness.go b/cmd/ax/internal/cliutil/cliutil_harness.go index 3306a71..29ee508 100644 --- a/cmd/ax/internal/cliutil/cliutil_harness.go +++ b/cmd/ax/internal/cliutil/cliutil_harness.go @@ -27,7 +27,10 @@ import ( "github.com/google/ax/internal/harness" ) -const antigravityHarnessID = "antigravity" +const ( + antigravityHarnessID = "antigravity" + antigravitySubstrateTemplate = "antigravity-template" // TODO: Replace it with ax-harness-template +) // Controller is the active controller type for this build. type Controller = *controller2.Controller @@ -67,7 +70,7 @@ func NewControllerFromConfig(ctx context.Context, cfg *Config) (*controller2.Con } antigravityHarness = harness.NewAntigravityHarness(address) } else { - antigravityHarness, err = harness.NewSubstrateHarness(antigravityHarnessID, os.Getenv("AX_SUBSTRATE_ENDPOINT"), "", "", 80) + antigravityHarness, err = harness.NewSubstrateHarness(antigravityHarnessID, os.Getenv("AX_SUBSTRATE_ENDPOINT"), "", antigravitySubstrateTemplate, 80) if err != nil { return nil, fmt.Errorf("antigravity harness: %w", err) } From 64025f329a10dbfa064d58662f6a2ddaa93e419b Mon Sep 17 00:00:00 2001 From: Jaana Dogan Date: Mon, 15 Jun 2026 22:28:59 -0700 Subject: [PATCH 6/8] refactor: rename antigravity template to ax-harness-template and remove redundant constant definition --- cmd/ax/internal/cliutil/cliutil_harness.go | 7 ++----- internal/manifests/ax-deployment2.yaml | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/cmd/ax/internal/cliutil/cliutil_harness.go b/cmd/ax/internal/cliutil/cliutil_harness.go index 29ee508..3306a71 100644 --- a/cmd/ax/internal/cliutil/cliutil_harness.go +++ b/cmd/ax/internal/cliutil/cliutil_harness.go @@ -27,10 +27,7 @@ import ( "github.com/google/ax/internal/harness" ) -const ( - antigravityHarnessID = "antigravity" - antigravitySubstrateTemplate = "antigravity-template" // TODO: Replace it with ax-harness-template -) +const antigravityHarnessID = "antigravity" // Controller is the active controller type for this build. type Controller = *controller2.Controller @@ -70,7 +67,7 @@ func NewControllerFromConfig(ctx context.Context, cfg *Config) (*controller2.Con } antigravityHarness = harness.NewAntigravityHarness(address) } else { - antigravityHarness, err = harness.NewSubstrateHarness(antigravityHarnessID, os.Getenv("AX_SUBSTRATE_ENDPOINT"), "", antigravitySubstrateTemplate, 80) + antigravityHarness, err = harness.NewSubstrateHarness(antigravityHarnessID, os.Getenv("AX_SUBSTRATE_ENDPOINT"), "", "", 80) if err != nil { return nil, fmt.Errorf("antigravity harness: %w", err) } diff --git a/internal/manifests/ax-deployment2.yaml b/internal/manifests/ax-deployment2.yaml index 56ec77c..4b3e39a 100644 --- a/internal/manifests/ax-deployment2.yaml +++ b/internal/manifests/ax-deployment2.yaml @@ -39,7 +39,7 @@ spec: apiVersion: ate.dev/v1alpha1 kind: ActorTemplate metadata: - name: antigravity-template + name: ax-harness-template namespace: ax spec: workerPoolRef: From 14fa41d9223e5179929aed08222384b54316e8b2 Mon Sep 17 00:00:00 2001 From: Jaana Dogan Date: Mon, 15 Jun 2026 22:31:15 -0700 Subject: [PATCH 7/8] refactor: remove unused defaultPort constant from config --- internal/config2/config.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/config2/config.go b/internal/config2/config.go index ebfab3c..12eb5ab 100644 --- a/internal/config2/config.go +++ b/internal/config2/config.go @@ -26,8 +26,6 @@ import ( const ( // The substrate namespace reserved for AX's built-in harnesses. defaultNamespace = "ax" - // The default HarnessService port for non-substrate harnesses. - defaultPort = 50053 // The port for harnesses running as substrate actors. Substrate's // actor networking DNATs inbound workerPodIP:80 to the actor. substrateDefaultPort = 80 From 612b9145b5a92952c1d42489d0fe87e5c17dabd0 Mon Sep 17 00:00:00 2001 From: Jaana Dogan Date: Mon, 15 Jun 2026 22:33:15 -0700 Subject: [PATCH 8/8] refactor: remove AX_SUBSTRATE_ENDPOINT configuration and dependency from substrate harness --- cmd/ax/internal/cliutil/cliutil_harness.go | 2 +- internal/manifests/ax-deployment2.yaml | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/cmd/ax/internal/cliutil/cliutil_harness.go b/cmd/ax/internal/cliutil/cliutil_harness.go index 3306a71..1187bf1 100644 --- a/cmd/ax/internal/cliutil/cliutil_harness.go +++ b/cmd/ax/internal/cliutil/cliutil_harness.go @@ -67,7 +67,7 @@ func NewControllerFromConfig(ctx context.Context, cfg *Config) (*controller2.Con } antigravityHarness = harness.NewAntigravityHarness(address) } else { - antigravityHarness, err = harness.NewSubstrateHarness(antigravityHarnessID, os.Getenv("AX_SUBSTRATE_ENDPOINT"), "", "", 80) + antigravityHarness, err = harness.NewSubstrateHarness(antigravityHarnessID, "", "", "", 80) if err != nil { return nil, fmt.Errorf("antigravity harness: %w", err) } diff --git a/internal/manifests/ax-deployment2.yaml b/internal/manifests/ax-deployment2.yaml index 4b3e39a..5d12159 100644 --- a/internal/manifests/ax-deployment2.yaml +++ b/internal/manifests/ax-deployment2.yaml @@ -104,8 +104,6 @@ spec: value: "${GEMINI_API_KEY}" - name: AX_SUBSTRATE value: "1" - - name: AX_SUBSTRATE_ENDPOINT - value: "api.ate-system.svc:443" volumeMounts: - name: ax-config mountPath: /etc/ax