TUI plugin API: allow a location on the home route (router.navigate)

Abierto Apto para principiantes
#62,322 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
76/100
Tipo de issue
Nueva funcionalidad
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
typescript

Línea de trabajo

Empieza con el tipo Route del plugin en packages/plugin/src/tui/context.ts y compáralo con HomeRoute en packages/tui/src/context/route.tsx. Añade la ubicación opcional a la variante home y documéntala; comprueba que router.current() exponga la ubicación de la ruta home y que la navegación acepte el directorio mostrado en la reproducción. El issue no indica ningún test, así que primero busca tests existentes de tipos de la API del plugin.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Description

A TUI plugin cannot open the new-session screen for a specific directory with the typed plugin API. OpenCode's own code can.

Internally, HomeRoute carries an optional location (packages/tui/src/context/route.tsx):

export type HomeRoute = {
  type: "home"
  prompt?: PromptInfo
  // Location carried over from the previous session or project picker so a new session lands there.
  location?: LocationRef
}

The project picker (component/dialog-open.tsx) and the workspace move (component/prompt/move.tsx) both call route.navigate({ type: "home", location: { directory } }). Home then applies route.location (routes/home.tsx), so the next session is created in that directory.

The plugin API's Route type (packages/plugin/src/tui/context.ts) has only { readonly type: "home" }. ui.router.navigate passes a home destination straight through to the host (packages/tui/src/plugin/api.tsx), so navigate({ type: "home", location }) works at runtime. However, a plugin has to cast to reach it, and nothing guarantees it keeps working.

Proposal: add readonly location?: LocationRef to the home variant of the plugin Route type, and document it. router.current() would then also type the location of the current home route, which the host already returns.

Use case: opencode-switchboard, a side panel that lists sessions grouped by project, wants a "New session" action on a project. It should open that project's new-session screen, as picking the project in Ctrl+O does, without creating an empty session up front with session.create.

Happy to send a PR.

Plugins

opencode-switchboard

OpenCode version

2.2.5

Steps to reproduce
  1. In a TUI plugin, call ctx.ui.router.navigate({ type: "home", location: { directory: "/some/other/project" } }).
  2. TypeScript rejects location. With a cast, it works: the new-session screen opens in that directory.
Operating System

Ubuntu 24.04

Terminal

Ghostty

Lenguaje dominante
TypeScript
Estrellas
224k
Forks
30k
Merge medio
5 h 25 min
PR fusionados (30 d)
494

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de anomalyco/opencode

Todos los issues de anomalyco/opencode

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.