opencode icon indicating copy to clipboard operation
opencode copied to clipboard

feat(plugin): add session.select API endpoint for TUI navigation

Open code-yeongyu opened this issue 2 weeks ago • 0 comments

Summary

Add plugin API endpoint (POST /session/{sessionID}/select) that allows plugins to programmatically navigate the TUI to a different session.

Changes

Server (packages/opencode/src/server/server.ts)

  • Add POST /session/:sessionID/select endpoint
  • Validates session exists before emitting event
  • Returns 404 for invalid session ID

TUI (packages/opencode/src/cli/cmd/tui/)

  • Add SessionSelect event type in event.ts
  • Handle SessionSelect event in app.tsx to switch displayed session

SDK (packages/sdk/js/)

  • Regenerated with client.session.select() method

Usage

From Plugin (Native)

import type { Plugin } from "@opencode-ai/plugin"

const plugin: Plugin = async ({ client }) => ({
  tool: {
    switch_session: {
      description: "Switch to a different session",
      parameters: z.object({ sessionID: z.string() }),
      async execute({ parameters }) {
        await client.session.select({ sessionID: parameters.sessionID })
        return { output: `Switched to session ${parameters.sessionID}` }
      },
    },
  },
})

export default plugin

From External SDK

import { createClient } from "@opencode-ai/sdk"

const client = createClient({ baseUrl: "http://localhost:34127" })
await client.session.select({ sessionID: "ses_abc123" })

code-yeongyu avatar Jan 01 '26 08:01 code-yeongyu