packages/app/V1_API_MIGRATION.md
The app is currently hybrid. In this document, V1 refers to the legacy unprefixed server APIs used by @opencode-ai/sdk/v2, despite the SDK package name.
GET /global/event with GET /api/event.
src/context/server-sdk.tsxsrc/context/server-session-v2-reducer.tssrc/context/server-session.tssession.created, session.updated, session.diff, session.status, session.idle, and session.error.
src/context/global-sync/event-reducer.tssrc/context/server-session.tssrc/context/notification.tsxsrc/pages/session/usage-exceeded-dialogs.tsxmessage.updated, message.removed, message.part.updated, message.part.removed, and message.part.delta.
src/context/global-sync/event-reducer.tssrc/context/server-session.tssrc/context/global-sync/event-reducer.tssrc/context/permission.tsxsrc/context/file.tsxsrc/context/global-sync/event-reducer.tssrc/pages/session.tsxpty.exited events.
src/context/terminal.tsxsrc/context/global-sync/event-reducer.tsGET /session/status with one server-scoped GET /api/session/active snapshot plus V2 execution events.
src/context/server-sync.tsxGET /session.
src/context/server-sync.tsxsrc/context/directory-sync.tssrc/pages/layout.tsxGET /session/:sessionID.
src/components/titlebar.tsxPATCH /session/:sessionID.
src/context/directory-sync.tssrc/context/layout.tsxsrc/pages/home.tsxsrc/pages/layout.tsxsrc/pages/session/timeline/message-timeline.tsxsrc/components/titlebar-tab-nav.tsxPOST /api/session/:sessionID/rename; archival uses POST /api/session/:sessionID/archive.DELETE /session/:sessionID.
src/pages/session/timeline/message-timeline.tsxGET /session/:sessionID/diff.
POST /session/:sessionID/abort.
src/components/prompt-input/submit.tssrc/pages/session/use-session-commands.tsxsrc/pages/session.tsxPOST /session/:sessionID/revert and POST /session/:sessionID/unrevert.
src/pages/session/use-session-commands.tsxsrc/pages/session.tsxPOST /session/:sessionID/summarize with the current compact API.
src/pages/session/use-session-commands.tsxPOST /session/:sessionID/command.
src/components/prompt-input/submit.tsPOST /session/:sessionID/shell.
src/components/prompt-input/submit.tsPOST /session/:sessionID/fork.
src/components/dialog-fork.tsxPOST /session/:sessionID/share and DELETE /session/:sessionID/share.
src/pages/session/use-session-commands.tsxsrc/pages/session/timeline/message-timeline.tsxThese calls are retained as fallback adapters. The current production path supplies the current session and message APIs.
GET /session/:sessionID after compatibility support is unnecessary.
src/context/server-session.tsGET /session/:sessionID/message after compatibility support is unnecessary.
src/context/server-session.tsGET /session/:sessionID/message/:messageID after compatibility support is unnecessary.
src/context/server-session.tsGET /file.
src/context/file.tsxGET /file/content.
src/context/file.tsxsrc/pages/session/review-tab.tsxsrc/pages/session/v2/review-panel-v2.tsxGET /path to GET /api/path.
src/context/global-sync/bootstrap.tssrc/components/dialog-select-directory.tsxsrc/components/dialog-select-directory-v2.tsxGET /project to GET /api/project.
src/context/global-sync/bootstrap.tsGET /project/current to GET /api/project/current.
src/context/global-sync/bootstrap.tsPOST /project/git/init.
src/pages/session.tsxPATCH /project/:projectID to PATCH /api/project/:projectID.
src/context/layout.tsxsrc/components/edit-project.tssrc/pages/layout.tsx/experimental/worktree.
src/pages/layout.tsxsrc/components/prompt-input/submit.tsGET /api/project/:projectID/directories; create, removal, and reset remain.POST /instance/dispose.
src/pages/layout.tsxGET /vcs to GET /api/vcs.
src/context/global-sync/bootstrap.tsGET /vcs/diff to GET /api/vcs/diff.
src/pages/session.tsxGET /vcs/status to GET /api/vcs/status.
src/pages/layout.tsxGET /global/config.
src/context/global-sync/bootstrap.tsGET /config.
src/context/global-sync/bootstrap.tsPATCH /global/config.
src/context/server-sync.tsxGET /provider/auth to GET /api/integration/:integrationID.
src/components/dialog-connect-provider.tsx/api/integration/:integrationID/connect/oauth/*.
src/components/dialog-connect-provider.tsxPUT /auth/:providerID and DELETE /auth/:providerID.
POST /api/integration/:integrationID/connect/key.src/components/dialog-connect-provider.tsxsrc/components/dialog-custom-provider.tsxsrc/components/settings-providers.tsxsrc/components/settings-v2/providers.tsxPOST /global/dispose.
src/components/dialog-connect-provider.tsxsrc/components/settings-providers.tsxsrc/components/settings-v2/providers.tsxGET /permission to GET /api/permission/request.
src/context/global-sync/bootstrap.tssrc/context/permission.tsx/session/:sessionID/permissions/:permissionID.
src/context/permission.tsxsrc/pages/session/composer/session-composer-state.tsGET /question to GET /api/question/request.
src/context/global-sync/bootstrap.ts/question/:requestID/* to /api/session/:sessionID/question/:requestID/*.
src/pages/session/composer/session-question-dock.tsxGET /command to GET /api/command.
src/context/global-sync/bootstrap.tssrc/context/server-sync.tsx/mcp to /api/mcp.
src/context/server-sync.tsxsrc/context/server-sync.tsxGET /experimental/resource to GET /api/mcp/resource.
src/context/server-sync.tsxGET /lsp.
src/context/server-sync.tsxGET /api/reference off the legacy generated SDK transport.
src/context/global-sync/bootstrap.tsGET /experimental/session to GET /api/session.
src/components/command-palette.tssrc/components/dialog-command-palette-v2.tsx/pty to /api/pty.
src/context/terminal.tsxsrc/components/terminal.tsxGET /pty/shells to GET /api/pty/shells.
src/components/settings-general.tsxsrc/components/settings-v2/general.tsxPOST /pty/:ptyID/connect-token to POST /api/pty/:ptyID/connect-token.
src/components/terminal.tsx/pty/:ptyID/connect to /api/pty/:ptyID/connect.
src/components/terminal.tsxThese are not V1 network requests, but they keep the UI coupled to V1 data contracts.
src/utils/session.tssrc/utils/session-message.tssrc/context/global-sync/utils.tsSession, Message, Part, PermissionRequest, QuestionRequest, Project, FileNode, FileDiffInfo, and Event types throughout app state and rendering.@opencode-ai/sdk runtime dependency after all legacy calls and types are gone.
package.jsone2e/utils/mock-server.ts/global/event and /event interception with current event transport handling.
e2e/utils/sse-transport.tsSessionV1 and legacy SDK fixtures in timeline performance tests.
e2e/performance/timeline-stability/fixture.ts