[PR #6565] feat(plugin): add tui.session.select API endpoint for TUI navigation #11978

Closed
opened 2026-02-16 18:16:54 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/anomalyco/opencode/pull/6565

State: closed
Merged: Yes


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" })
**Original Pull Request:** https://github.com/anomalyco/opencode/pull/6565 **State:** closed **Merged:** Yes --- ## 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) ```typescript 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 ```typescript import { createClient } from "@opencode-ai/sdk" const client = createClient({ baseUrl: "http://localhost:34127" }) await client.session.select({ sessionID: "ses_abc123" }) ```
yindo added the pull-request label 2026-02-16 18:16:54 -05:00
yindo closed this issue 2026-02-16 18:16:54 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: anomalyco/opencode#11978