summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-08-11 22:42:17 -0400
committerDax Raad <[email protected]>2025-08-11 22:42:25 -0400
commitfb0a200ecfa421d2bee9d2c053985f32d8b6b03d (patch)
treebb58f54d09627de203799c787441f83744704f47
parent3ec670784daaa7ef2c3269790f44c739b09ac3b2 (diff)
downloadopencode-fb0a200ecfa421d2bee9d2c053985f32d8b6b03d.tar.gz
opencode-fb0a200ecfa421d2bee9d2c053985f32d8b6b03d.zip
refactor: replace OPENCODE_AGENTS env var with HTTP API call
Replace environment variable passing of agent data from Node.js to TUI with proper HTTP API call to /agent endpoint. This improves architecture by eliminating env var dependencies and allows dynamic agent data fetching.
-rw-r--r--packages/opencode/src/cli/cmd/tui.ts3
-rw-r--r--packages/tui/cmd/opencode/main.go22
2 files changed, 14 insertions, 11 deletions
diff --git a/packages/opencode/src/cli/cmd/tui.ts b/packages/opencode/src/cli/cmd/tui.ts
index 3d8028af7..30e861db6 100644
--- a/packages/opencode/src/cli/cmd/tui.ts
+++ b/packages/opencode/src/cli/cmd/tui.ts
@@ -12,7 +12,7 @@ import { Bus } from "../../bus"
import { Log } from "../../util/log"
import { FileWatcher } from "../../file/watch"
import { Ide } from "../../ide"
-import { Agent } from "../../agent/agent"
+
import { Flag } from "../../flag/flag"
import { Session } from "../../session"
@@ -141,7 +141,6 @@ export const TuiCommand = cmd({
CGO_ENABLED: "0",
OPENCODE_SERVER: server.url.toString(),
OPENCODE_APP_INFO: JSON.stringify(app),
- OPENCODE_AGENTS: JSON.stringify(await Agent.list()),
},
onExit: () => {
server.stop()
diff --git a/packages/tui/cmd/opencode/main.go b/packages/tui/cmd/opencode/main.go
index c242a737a..f1473e8ba 100644
--- a/packages/tui/cmd/opencode/main.go
+++ b/packages/tui/cmd/opencode/main.go
@@ -45,14 +45,6 @@ func main() {
os.Exit(1)
}
- agentsStr := os.Getenv("OPENCODE_AGENTS")
- var agents []opencode.Agent
- err = json.Unmarshal([]byte(agentsStr), &agents)
- if err != nil {
- slog.Error("Failed to unmarshal modes", "error", err)
- os.Exit(1)
- }
-
stat, err := os.Stdin.Stat()
if err != nil {
slog.Error("Failed to stat stdin", "error", err)
@@ -81,13 +73,25 @@ func main() {
option.WithBaseURL(url),
)
+ // Fetch agents from the /agent endpoint
+ agentsPtr, err := httpClient.App.Agents(context.Background())
+ if err != nil {
+ slog.Error("Failed to fetch agents", "error", err)
+ os.Exit(1)
+ }
+ if agentsPtr == nil {
+ slog.Error("No agents returned from server")
+ os.Exit(1)
+ }
+ agents := *agentsPtr
+
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
apiHandler := util.NewAPILogHandler(ctx, httpClient, "tui", slog.LevelDebug)
logger := slog.New(apiHandler)
slog.SetDefault(logger)
- slog.Debug("TUI launched", "app", appInfoStr, "modes", agentsStr, "url", url)
+ slog.Debug("TUI launched", "app", appInfoStr, "agents_count", len(agents), "url", url)
go func() {
err = clipboard.Init()