Просмотр исходного кода

Revert "Added subagents to agents modal, non-selectable (#4460)"

This reverts commit 90044196bf06b630b81182a3eb0673a3032b2f06.
Aiden Cline 3 месяцев назад
Родитель
Сommit
b3afa84058

+ 11 - 31
packages/opencode/src/cli/cmd/tui/component/dialog-agent.tsx

@@ -1,39 +1,21 @@
 import { createMemo } from "solid-js"
 import { useLocal } from "@tui/context/local"
-import { useSync } from "@tui/context/sync"
 import { DialogSelect } from "@tui/ui/dialog-select"
 import { useDialog } from "@tui/ui/dialog"
-import { useTheme } from "@tui/context/theme"
 
 export function DialogAgent() {
   const local = useLocal()
-  const sync = useSync()
   const dialog = useDialog()
-  const { theme } = useTheme()
 
-  const options = createMemo(() => {
-    const allAgents = sync.data.agent
-    const primaryAgents = allAgents.filter((x) => x.mode !== "subagent")
-    const subagents = allAgents.filter((x) => x.mode === "subagent")
-
-    const primaryOptions = primaryAgents.map((item) => ({
-      value: item.name,
-      title: item.name,
-      description: item.builtIn ? "native" : item.description,
-      category: "Primary Agents",
-    }))
-
-    const subagentOptions = subagents.map((item) => ({
-      value: item.name,
-      title: item.name,
-      description: item.builtIn ? "native" : item.description,
-      category: "Subagents (non-selectable)",
-      disabled: true,
-      bg: theme.backgroundPanel,
-    }))
-
-    return [...primaryOptions, ...subagentOptions]
-  })
+  const options = createMemo(() =>
+    local.agent.list().map((item) => {
+      return {
+        value: item.name,
+        title: item.name,
+        description: item.builtIn ? "native" : item.description,
+      }
+    }),
+  )
 
   return (
     <DialogSelect
@@ -41,10 +23,8 @@ export function DialogAgent() {
       current={local.agent.current().name}
       options={options()}
       onSelect={(option) => {
-        if (!option.disabled) {
-          local.agent.set(option.value)
-          dialog.clear()
-        }
+        local.agent.set(option.value)
+        dialog.clear()
       }}
     />
   )

+ 11 - 40
packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx

@@ -54,8 +54,10 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
 
   const filtered = createMemo(() => {
     const needle = store.filter.toLowerCase()
-    const result = pipe(props.options, (x) =>
-      !needle ? x : fuzzysort.go(needle, x, { keys: ["title", "category"] }).map((x) => x.obj),
+    const result = pipe(
+      props.options,
+      filter((x) => x.disabled !== true),
+      (x) => (!needle ? x : fuzzysort.go(needle, x, { keys: ["title", "category"] }).map((x) => x.obj)),
     )
     return result
   })
@@ -94,16 +96,6 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
     let next = store.selected + direction
     if (next < 0) next = flat().length - 1
     if (next >= flat().length) next = 0
-
-    // Skip disabled options when flipping through agents
-    let attempts = 0
-    while (flat()[next]?.disabled && attempts < flat().length) {
-      next = next + direction
-      if (next < 0) next = flat().length - 1
-      if (next >= flat().length) next = 0
-      attempts++
-    }
-
     moveTo(next)
   }
 
@@ -134,7 +126,7 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
     if (evt.name === "pagedown") move(10)
     if (evt.name === "return") {
       const option = selected()
-      if (option && !option.disabled) {
+      if (option) {
         // evt.preventDefault()
         if (option.onSelect) option.onSelect(dialog)
         props.onSelect?.(option)
@@ -144,7 +136,7 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
     for (const item of props.keybind ?? []) {
       if (Keybind.match(item.keybind, keybind.parse(evt))) {
         const s = selected()
-        if (s && !s.disabled) {
+        if (s) {
           evt.preventDefault()
           item.onTrigger(s)
         }
@@ -216,19 +208,15 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
                       id={JSON.stringify(option.value)}
                       flexDirection="row"
                       onMouseUp={() => {
-                        if (!option.disabled) {
-                          option.onSelect?.(dialog)
-                          props.onSelect?.(option)
-                        }
+                        option.onSelect?.(dialog)
+                        props.onSelect?.(option)
                       }}
                       onMouseOver={() => {
                         const index = filtered().findIndex((x) => isDeepEqual(x.value, option.value))
                         if (index === -1) return
                         moveTo(index)
                       }}
-                      backgroundColor={
-                        active() && !option.disabled ? (option.bg ?? theme.primary) : RGBA.fromInts(0, 0, 0, 0)
-                      }
+                      backgroundColor={active() ? (option.bg ?? theme.primary) : RGBA.fromInts(0, 0, 0, 0)}
                       paddingLeft={1}
                       paddingRight={1}
                       gap={1}
@@ -239,7 +227,6 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
                         description={option.description !== category ? option.description : undefined}
                         active={active()}
                         current={isDeepEqual(option.value, props.current)}
-                        disabled={option.disabled}
                       />
                     </box>
                   )
@@ -269,22 +256,13 @@ function Option(props: {
   active?: boolean
   current?: boolean
   footer?: JSX.Element | string
-  disabled?: boolean
   onMouseOver?: () => void
 }) {
   const { theme } = useTheme()
 
-  const textColor = props.disabled
-    ? theme.textMuted
-    : props.active
-      ? theme.background
-      : props.current
-        ? theme.primary
-        : theme.text
-
   return (
     <>
-      <Show when={props.current && !props.disabled}>
+      <Show when={props.current}>
         <text
           flexShrink={0}
           fg={props.active ? theme.background : props.current ? theme.primary : theme.text}
@@ -293,17 +271,10 @@ function Option(props: {
         </text>
       </Show>
-      <Show when={props.disabled}>
-        <text flexShrink={0} fg={theme.textMuted} marginRight={0.5}>
-          ○
-        </text>
-      </Show>
       <text
         flexGrow={1}
         fg={props.active ? theme.background : props.current ? theme.primary : theme.text}
-        attributes={
-          props.active && !props.disabled ? TextAttributes.BOLD : props.disabled ? TextAttributes.DIM : undefined
-        }
+        attributes={props.active ? TextAttributes.BOLD : undefined}
         overflow="hidden"
         wrapMode="none"
       >