fix(TUI): fix agent types agents modal (#1942)

This commit is contained in:
Timo Clasen
2025-08-15 00:58:44 +02:00
committed by GitHub
parent bcd1dddcbe
commit 156cc6cffe
3 changed files with 24 additions and 26 deletions

View File

@@ -13,6 +13,7 @@ export namespace Agent {
name: z.string(),
description: z.string().optional(),
mode: z.union([z.literal("subagent"), z.literal("primary"), z.literal("all")]),
builtIn: z.boolean(),
topP: z.number().optional(),
temperature: z.number().optional(),
permission: z.object({
@@ -58,6 +59,7 @@ export namespace Agent {
options: {},
permission: agentPermission,
mode: "subagent",
builtIn: true,
},
build: {
name: "build",
@@ -65,6 +67,7 @@ export namespace Agent {
options: {},
permission: agentPermission,
mode: "primary",
builtIn: true,
},
plan: {
name: "plan",
@@ -76,6 +79,7 @@ export namespace Agent {
patch: false,
},
mode: "primary",
builtIn: true,
},
}
for (const [key, value] of Object.entries(cfg.agent ?? {})) {
@@ -91,6 +95,7 @@ export namespace Agent {
permission: agentPermission,
options: {},
tools: {},
builtIn: false,
}
const { model, prompt, tools, description, temperature, top_p, mode, permission, ...extra } = value
item.options = {

View File

@@ -72,6 +72,7 @@ func (r *AppService) Providers(ctx context.Context, opts ...option.RequestOption
}
type Agent struct {
BuiltIn bool `json:"builtIn,required"`
Mode AgentMode `json:"mode,required"`
Name string `json:"name,required"`
Options map[string]interface{} `json:"options,required"`
@@ -87,6 +88,7 @@ type Agent struct {
// agentJSON contains the JSON metadata for the struct [Agent]
type agentJSON struct {
BuiltIn apijson.Field
Mode apijson.Field
Name apijson.Field
Options apijson.Field

View File

@@ -76,20 +76,15 @@ func (a agentSelectItem) Render(
agentName := a.displayName
// For user agents and subagents, show description; for built-in, show mode
// Determine if agent is built-in or custom using the agent's builtIn field
var displayText string
if a.description != "" && (a.mode == "all" || a.mode == "subagent") {
// User agent or subagent with description
if a.agent.BuiltIn {
displayText = "(built-in)"
} else {
if a.description != "" {
displayText = a.description
} else {
// Built-in without description - show mode
switch a.mode {
case "primary":
displayText = "(built-in)"
case "all":
displayText = "(user)"
default:
displayText = ""
}
}
@@ -206,23 +201,19 @@ func (a *agentDialog) calculateOptimalWidth(agents []agentSelectItem) int {
for _, agent := range agents {
// Calculate the width needed for this item: "AgentName - Description" (visual improvement)
itemWidth := len(agent.displayName)
if agent.description != "" && (agent.mode == "all" || agent.mode == "subagent") {
// User agent or subagent - use description (capped to maxDescriptionLength)
if agent.agent.BuiltIn {
itemWidth += len("(built-in)") + 3 // " - "
} else {
if agent.description != "" {
descLength := len(agent.description)
if descLength > maxDescriptionLength {
descLength = maxDescriptionLength
}
itemWidth += descLength + 3 // " - "
} else {
// Built-in without description - use mode
var modeText string
switch agent.mode {
case "primary":
modeText = "(built-in)"
case "all":
modeText = "(user)"
itemWidth += len("(user)") + 3 // " - "
}
itemWidth += len(modeText) + 3 // " - "
}
if itemWidth > maxWidth {