mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-21 01:34:22 +01:00
fix(TUI): fix agent types agents modal (#1942)
This commit is contained in:
@@ -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 = {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user