@opencode/client 0.0.0-dev-19533 → 0.0.0-dev-19537

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,6 +17,7 @@ import type { PromptInput } from "@opencode/schema/prompt-input";
17
17
  import type { AgentAttachment } from "@opencode/schema/prompt";
18
18
  import type { Skill } from "@opencode/schema/skill";
19
19
  import type { Event } from "@opencode/schema/event";
20
+ import type { FileDiff } from "@opencode/schema/file-diff";
20
21
  import type { InstructionEntry } from "@opencode/schema/instruction-entry";
21
22
  import type { Schema } from "effect";
22
23
  import type { EventLog } from "@opencode/schema/event-log";
@@ -35,7 +36,6 @@ import type { PtyTicket } from "@opencode/schema/pty-ticket";
35
36
  import type { Reference } from "@opencode/schema/reference";
36
37
  import type { Worktree } from "@opencode/schema/worktree";
37
38
  import type { Vcs } from "@opencode/schema/vcs";
38
- import type { FileDiff } from "@opencode/schema/file-diff";
39
39
  import type { WebSearch } from "@opencode/schema/websearch";
40
40
  import type { Config } from "@opencode/schema/config";
41
41
  export type HealthGetOutput = {
@@ -395,6 +395,14 @@ export type SessionContextInput = {
395
395
  };
396
396
  export type SessionContextOutput = ReadonlyArray<SessionMessage.Info>;
397
397
  export type SessionContextOperation<E = never> = (input: SessionContextInput) => Effect.Effect<SessionContextOutput, E>;
398
+ export type SessionDiffInput = {
399
+ readonly sessionID: Session.ID;
400
+ readonly from?: SessionMessage.ID | undefined;
401
+ readonly to?: SessionMessage.ID | undefined;
402
+ readonly context?: number | undefined;
403
+ };
404
+ export type SessionDiffOutput = ReadonlyArray<FileDiff.Info>;
405
+ export type SessionDiffOperation<E = never> = (input: SessionDiffInput) => Effect.Effect<SessionDiffOutput, E>;
398
406
  export type SessionInboxListInput = {
399
407
  readonly sessionID: Session.ID;
400
408
  };
@@ -1471,6 +1479,7 @@ export interface SessionApi<E = never> {
1471
1479
  readonly commit: SessionRevertCommitOperation<E>;
1472
1480
  };
1473
1481
  readonly context: SessionContextOperation<E>;
1482
+ readonly diff: SessionDiffOperation<E>;
1474
1483
  readonly inbox: {
1475
1484
  readonly list: SessionInboxListOperation<E>;
1476
1485
  readonly cancel: SessionInboxCancelOperation<E>;
@@ -2268,6 +2268,7 @@ export declare const make: (options?: {
2268
2268
  commit: (input: import("./api.js").SessionRevertCommitInput) => Effect.Effect<void, import("@opencode/protocol/errors").InvalidRequestError | import("@opencode/protocol/errors").UnauthorizedError | import("@opencode/protocol/errors").SessionBusyError | import("@opencode/protocol/errors").SessionNotFoundError | import("effect/Schema").SchemaError | ClientError | import("effect/unstable/http/HttpClientError").HttpClientError, never>;
2269
2269
  };
2270
2270
  context: (input: import("./api.js").SessionContextInput) => Effect.Effect<import("./api.js").SessionContextOutput, import("@opencode/protocol/errors").InvalidRequestError | import("@opencode/protocol/errors").UnauthorizedError | import("@opencode/protocol/errors").UnknownError | import("@opencode/protocol/errors").SessionNotFoundError | import("effect/Schema").SchemaError | ClientError | import("effect/unstable/http/HttpClientError").HttpClientError, never>;
2271
+ diff: (input: import("./api.js").SessionDiffInput) => Effect.Effect<import("./api.js").SessionDiffOutput, import("@opencode/protocol/errors").InvalidRequestError | import("@opencode/protocol/errors").UnauthorizedError | import("@opencode/protocol/errors").UnknownError | import("@opencode/protocol/errors").SessionNotFoundError | import("@opencode/protocol/errors").MessageNotFoundError | import("effect/Schema").SchemaError | ClientError | import("effect/unstable/http/HttpClientError").HttpClientError, never>;
2271
2272
  inbox: {
2272
2273
  list: (input: import("./api.js").SessionInboxListInput) => Effect.Effect<import("./api.js").SessionInboxListOutput, import("@opencode/protocol/errors").InvalidRequestError | import("@opencode/protocol/errors").UnauthorizedError | import("@opencode/protocol/errors").SessionNotFoundError | import("effect/Schema").SchemaError | ClientError | import("effect/unstable/http/HttpClientError").HttpClientError, never>;
2273
2274
  cancel: (input: import("./api.js").SessionInboxCancelInput) => Effect.Effect<void, import("@opencode/protocol/errors").InvalidRequestError | import("@opencode/protocol/errors").UnauthorizedError | import("@opencode/protocol/errors").ConflictError | import("@opencode/protocol/errors").SessionNotFoundError | import("effect/Schema").SchemaError | ClientError | import("effect/unstable/http/HttpClientError").HttpClientError, never>;
@@ -1,7 +1,7 @@
1
1
  import { Effect, Stream, Schema } from "effect";
2
2
  import { Sse } from "effect/unstable/encoding";
3
3
  import { HttpClientError } from "effect/unstable/http";
4
- import type { HealthGetOutput, ServerGetOutput, LocationGetInput, AgentListInput, AgentListOutput, AgentGetInput, AgentGetOutput, PluginListInput, PluginListOutput, PluginAwaitActivationInput, PluginCheckInput, PluginCheckOutput, PluginUpdateInput, SessionListInput, SessionListOutput, SessionStatsInput, SessionStatsOutput, SessionCreateInput, SessionImportInput, SessionExportInput, SessionExportOutput, SessionActiveOutput, SessionGetInput, SessionRemoveInput, SessionForkInput, SessionSwitchAgentInput, SessionSwitchModelInput, SessionRenameInput, SessionMoveInput, SessionPromptInput, SessionCommandInput, SessionSkillInput, SessionSyntheticInput, SessionShellInput, SessionCompactInput, SessionWaitInput, SessionRevertStageInput, SessionRevertClearInput, SessionRevertCommitInput, SessionContextInput, SessionContextOutput, SessionInboxListInput, SessionInboxListOutput, SessionInboxCancelInput, SessionInboxSteerInput, SessionInboxQueueInput, SessionInstructionsEntryListInput, SessionInstructionsEntryListOutput, SessionInstructionsEntryPutInput, SessionInstructionsEntryRemoveInput, SessionGenerateInput, SessionGenerateOutput, SessionLogInput, SessionLogOutput, SessionInterruptInput, SessionInterruptOutput, SessionBackgroundInput, SessionMessageInput, SessionEnvironmentInput, SessionViewInput, MessageListInput, MessageListOutput, ModelListInput, ModelListOutput, ModelDefaultInput, ModelDefaultOutput, GenerateTextInput, GenerateTextOutput, ProviderListInput, ProviderListOutput, ProviderGetInput, ProviderGetOutput, IntegrationListInput, IntegrationListOutput, IntegrationGetInput, IntegrationGetOutput, IntegrationWellknownAddInput, IntegrationConnectKeyInput, IntegrationOauthConnectInput, IntegrationOauthConnectOutput, IntegrationOauthStatusInput, IntegrationOauthStatusOutput, IntegrationOauthCompleteInput, IntegrationOauthCancelInput, IntegrationCommandConnectInput, IntegrationCommandConnectOutput, IntegrationCommandStatusInput, IntegrationCommandStatusOutput, IntegrationCommandCancelInput, McpListInput, McpListOutput, McpAddInput, McpRemoveInput, McpConnectInput, McpDisconnectInput, McpResourceCatalogInput, McpResourceCatalogOutput, CredentialUpdateInput, CredentialActivateInput, CredentialRemoveInput, ProjectListOutput, ProjectUpdateInput, ProjectCurrentInput, FormRequestListInput, FormRequestListOutput, FormListInput, FormListOutput, FormCreateInput, FormGetInput, FormStateInput, FormReplyInput, FormCancelInput, PermissionRequestListInput, PermissionRequestListOutput, PermissionSavedListInput, PermissionSavedListOutput, PermissionSavedRemoveInput, PermissionCreateInput, PermissionCreateOutput, PermissionListInput, PermissionListOutput, PermissionGetInput, PermissionReplyInput, PermissionRulesInput, FileListInput, FileListOutput, FileFindInput, FileFindOutput, CommandListInput, CommandListOutput, SkillListInput, SkillListOutput, RpcCallInput, RpcCallOutput, PtyListInput, PtyListOutput, PtyCreateInput, PtyCreateOutput, PtyGetInput, PtyGetOutput, PtyUpdateInput, PtyUpdateOutput, PtyRemoveInput, PtyConnectTokenInput, PtyConnectTokenOutput, ExperimentalPersistentPtyReadInput, ExperimentalPersistentPtyReadOutput, ExperimentalPersistentPtyListInput, ExperimentalPersistentPtyListOutput, ExperimentalPersistentPtyCreateInput, ExperimentalPersistentPtyCreateOutput, ExperimentalPersistentPtyHandoffOutput, ExperimentalPersistentPtyGetInput, ExperimentalPersistentPtyGetOutput, ExperimentalPersistentPtyUpdateInput, ExperimentalPersistentPtyUpdateOutput, ExperimentalPersistentPtySnapshotInput, ExperimentalPersistentPtySnapshotOutput, ExperimentalPersistentPtyRemoveInput, ExperimentalPersistentPtyConnectTokenInput, ShellListInput, ShellListOutput, ShellCreateInput, ShellCreateOutput, ShellGetInput, ShellGetOutput, ShellTimeoutInput, ShellTimeoutOutput, ShellOutputInput, ShellOutputOutput, ShellRemoveInput, ReferenceListInput, ReferenceListOutput, WorktreeListInput, WorktreeCreateInput, WorktreeRemoveInput, WorktreeRefreshInput, WorkspaceCreateInput, WorkspaceDestroyInput, VcsGetInput, VcsGetOutput, VcsBaseInput, VcsBaseOutput, VcsStatusInput, VcsStatusOutput, VcsBranchesInput, VcsBranchesOutput, VcsDiffInput, VcsDiffOutput, DebugLocationListOutput, DebugLocationEvictInput, MigrationV1StatusOutput, WebsearchProvidersInput, WebsearchProvidersOutput, WebsearchQueryInput, WebsearchQueryOutput, ConfigGetInput, ConfigGetOutput, ConfigUpdatePreferencesInput, ConfigShellsOutput } from "../api/api.js";
4
+ import type { HealthGetOutput, ServerGetOutput, LocationGetInput, AgentListInput, AgentListOutput, AgentGetInput, AgentGetOutput, PluginListInput, PluginListOutput, PluginAwaitActivationInput, PluginCheckInput, PluginCheckOutput, PluginUpdateInput, SessionListInput, SessionListOutput, SessionStatsInput, SessionStatsOutput, SessionCreateInput, SessionImportInput, SessionExportInput, SessionExportOutput, SessionActiveOutput, SessionGetInput, SessionRemoveInput, SessionForkInput, SessionSwitchAgentInput, SessionSwitchModelInput, SessionRenameInput, SessionMoveInput, SessionPromptInput, SessionCommandInput, SessionSkillInput, SessionSyntheticInput, SessionShellInput, SessionCompactInput, SessionWaitInput, SessionRevertStageInput, SessionRevertClearInput, SessionRevertCommitInput, SessionContextInput, SessionContextOutput, SessionDiffInput, SessionDiffOutput, SessionInboxListInput, SessionInboxListOutput, SessionInboxCancelInput, SessionInboxSteerInput, SessionInboxQueueInput, SessionInstructionsEntryListInput, SessionInstructionsEntryListOutput, SessionInstructionsEntryPutInput, SessionInstructionsEntryRemoveInput, SessionGenerateInput, SessionGenerateOutput, SessionLogInput, SessionLogOutput, SessionInterruptInput, SessionInterruptOutput, SessionBackgroundInput, SessionMessageInput, SessionEnvironmentInput, SessionViewInput, MessageListInput, MessageListOutput, ModelListInput, ModelListOutput, ModelDefaultInput, ModelDefaultOutput, GenerateTextInput, GenerateTextOutput, ProviderListInput, ProviderListOutput, ProviderGetInput, ProviderGetOutput, IntegrationListInput, IntegrationListOutput, IntegrationGetInput, IntegrationGetOutput, IntegrationWellknownAddInput, IntegrationConnectKeyInput, IntegrationOauthConnectInput, IntegrationOauthConnectOutput, IntegrationOauthStatusInput, IntegrationOauthStatusOutput, IntegrationOauthCompleteInput, IntegrationOauthCancelInput, IntegrationCommandConnectInput, IntegrationCommandConnectOutput, IntegrationCommandStatusInput, IntegrationCommandStatusOutput, IntegrationCommandCancelInput, McpListInput, McpListOutput, McpAddInput, McpRemoveInput, McpConnectInput, McpDisconnectInput, McpResourceCatalogInput, McpResourceCatalogOutput, CredentialUpdateInput, CredentialActivateInput, CredentialRemoveInput, ProjectListOutput, ProjectUpdateInput, ProjectCurrentInput, FormRequestListInput, FormRequestListOutput, FormListInput, FormListOutput, FormCreateInput, FormGetInput, FormStateInput, FormReplyInput, FormCancelInput, PermissionRequestListInput, PermissionRequestListOutput, PermissionSavedListInput, PermissionSavedListOutput, PermissionSavedRemoveInput, PermissionCreateInput, PermissionCreateOutput, PermissionListInput, PermissionListOutput, PermissionGetInput, PermissionReplyInput, PermissionRulesInput, FileListInput, FileListOutput, FileFindInput, FileFindOutput, CommandListInput, CommandListOutput, SkillListInput, SkillListOutput, RpcCallInput, RpcCallOutput, PtyListInput, PtyListOutput, PtyCreateInput, PtyCreateOutput, PtyGetInput, PtyGetOutput, PtyUpdateInput, PtyUpdateOutput, PtyRemoveInput, PtyConnectTokenInput, PtyConnectTokenOutput, ExperimentalPersistentPtyReadInput, ExperimentalPersistentPtyReadOutput, ExperimentalPersistentPtyListInput, ExperimentalPersistentPtyListOutput, ExperimentalPersistentPtyCreateInput, ExperimentalPersistentPtyCreateOutput, ExperimentalPersistentPtyHandoffOutput, ExperimentalPersistentPtyGetInput, ExperimentalPersistentPtyGetOutput, ExperimentalPersistentPtyUpdateInput, ExperimentalPersistentPtyUpdateOutput, ExperimentalPersistentPtySnapshotInput, ExperimentalPersistentPtySnapshotOutput, ExperimentalPersistentPtyRemoveInput, ExperimentalPersistentPtyConnectTokenInput, ShellListInput, ShellListOutput, ShellCreateInput, ShellCreateOutput, ShellGetInput, ShellGetOutput, ShellTimeoutInput, ShellTimeoutOutput, ShellOutputInput, ShellOutputOutput, ShellRemoveInput, ReferenceListInput, ReferenceListOutput, WorktreeListInput, WorktreeCreateInput, WorktreeRemoveInput, WorktreeRefreshInput, WorkspaceCreateInput, WorkspaceDestroyInput, VcsGetInput, VcsGetOutput, VcsBaseInput, VcsBaseOutput, VcsStatusInput, VcsStatusOutput, VcsBranchesInput, VcsBranchesOutput, VcsDiffInput, VcsDiffOutput, DebugLocationListOutput, DebugLocationEvictInput, MigrationV1StatusOutput, WebsearchProvidersInput, WebsearchProvidersOutput, WebsearchQueryInput, WebsearchQueryOutput, ConfigGetInput, ConfigGetOutput, ConfigUpdatePreferencesInput, ConfigShellsOutput } from "../api/api.js";
5
5
  import { ClientError } from "./client-error.js";
6
6
  export declare const make: (options?: {
7
7
  readonly baseUrl?: URL | string;
@@ -52,6 +52,7 @@ export declare const make: (options?: {
52
52
  commit: (input: SessionRevertCommitInput) => Effect.Effect<void, import("@opencode/protocol/errors").InvalidRequestError | import("@opencode/protocol/errors").UnauthorizedError | import("@opencode/protocol/errors").SessionBusyError | import("@opencode/protocol/errors").SessionNotFoundError | Schema.SchemaError | ClientError | HttpClientError.HttpClientError, never>;
53
53
  };
54
54
  context: (input: SessionContextInput) => Effect.Effect<SessionContextOutput, import("@opencode/protocol/errors").InvalidRequestError | import("@opencode/protocol/errors").UnauthorizedError | import("@opencode/protocol/errors").UnknownError | import("@opencode/protocol/errors").SessionNotFoundError | Schema.SchemaError | ClientError | HttpClientError.HttpClientError, never>;
55
+ diff: (input: SessionDiffInput) => Effect.Effect<SessionDiffOutput, import("@opencode/protocol/errors").InvalidRequestError | import("@opencode/protocol/errors").UnauthorizedError | import("@opencode/protocol/errors").UnknownError | import("@opencode/protocol/errors").SessionNotFoundError | import("@opencode/protocol/errors").MessageNotFoundError | Schema.SchemaError | ClientError | HttpClientError.HttpClientError, never>;
55
56
  inbox: {
56
57
  list: (input: SessionInboxListInput) => Effect.Effect<SessionInboxListOutput, import("@opencode/protocol/errors").InvalidRequestError | import("@opencode/protocol/errors").UnauthorizedError | import("@opencode/protocol/errors").SessionNotFoundError | Schema.SchemaError | ClientError | HttpClientError.HttpClientError, never>;
57
58
  cancel: (input: SessionInboxCancelInput) => Effect.Effect<void, import("@opencode/protocol/errors").InvalidRequestError | import("@opencode/protocol/errors").UnauthorizedError | import("@opencode/protocol/errors").ConflictError | import("@opencode/protocol/errors").SessionNotFoundError | Schema.SchemaError | ClientError | HttpClientError.HttpClientError, never>;
@@ -135,6 +135,10 @@ const EndpointSessionRevertStage = (raw) => (input) => preserveEffect()(raw["ses
135
135
  const EndpointSessionRevertClear = (raw) => (input) => preserveEffect()(raw["session.revert.clear"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError)));
136
136
  const EndpointSessionRevertCommit = (raw) => (input) => preserveEffect()(raw["session.revert.commit"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError)));
137
137
  const EndpointSessionContext = (raw) => (input) => preserveEffect()(raw["session.context"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError), Effect.map((value) => value.data)));
138
+ const EndpointSessionDiff = (raw) => (input) => preserveEffect()(raw["session.diff"]({
139
+ params: { sessionID: input["sessionID"] },
140
+ query: { from: input["from"], to: input["to"], context: input["context"] },
141
+ }).pipe(Effect.mapError(mapClientError), Effect.map((value) => value.data)));
138
142
  const EndpointSessionInboxList = (raw) => (input) => preserveEffect()(raw["session.inbox.list"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError), Effect.map((value) => value.data)));
139
143
  const EndpointSessionInboxCancel = (raw) => (input) => preserveEffect()(raw["session.inbox.cancel"]({ params: { sessionID: input["sessionID"], inboxID: input["inboxID"] } }).pipe(Effect.mapError(mapClientError)));
140
144
  const EndpointSessionInboxSteer = (raw) => (input) => preserveEffect()(raw["session.inbox.steer"]({ params: { sessionID: input["sessionID"], inboxID: input["inboxID"] } }).pipe(Effect.mapError(mapClientError)));
@@ -188,6 +192,7 @@ const adaptGroupSession = (raw) => ({
188
192
  commit: EndpointSessionRevertCommit(raw),
189
193
  },
190
194
  context: EndpointSessionContext(raw),
195
+ diff: EndpointSessionDiff(raw),
191
196
  inbox: {
192
197
  list: EndpointSessionInboxList(raw),
193
198
  cancel: EndpointSessionInboxCancel(raw),
@@ -58,6 +58,7 @@ export declare function make(options: ClientOptions): {
58
58
  commit: (input: import("./index.js").SessionRevertCommitInput, requestOptions?: OpenCode.RequestOptions) => Promise<void>;
59
59
  };
60
60
  context: (input: import("./index.js").SessionContextInput, requestOptions?: OpenCode.RequestOptions) => Promise<import("./index.js").SessionMessageInfo[]>;
61
+ diff: (input: import("./index.js").SessionDiffInput, requestOptions?: OpenCode.RequestOptions) => Promise<import("./index.js").FileDiffInfo[]>;
61
62
  inbox: {
62
63
  list: (input: import("./index.js").SessionInboxListInput, requestOptions?: OpenCode.RequestOptions) => Promise<import("./index.js").SessionInboxInfo[]>;
63
64
  cancel: (input: import("./index.js").SessionInboxCancelInput, requestOptions?: OpenCode.RequestOptions) => Promise<void>;
@@ -77,7 +78,7 @@ export declare function make(options: ClientOptions): {
77
78
  log: (input: import("./index.js").SessionLogInput, requestOptions?: OpenCode.RequestOptions) => AsyncIterable<import("./index.js").SessionLogOutput>;
78
79
  interrupt: (input: import("./index.js").SessionInterruptInput, requestOptions?: OpenCode.RequestOptions) => Promise<import("./index.js").SessionInterruptResponse>;
79
80
  background: (input: import("./index.js").SessionBackgroundInput, requestOptions?: OpenCode.RequestOptions) => Promise<void>;
80
- message: (input: import("./index.js").SessionMessageInput, requestOptions?: OpenCode.RequestOptions) => Promise<import("./index.js").SessionMessageAgentSelected | import("./index.js").SessionMessageSynthetic | import("./index.js").SessionMessageSystem | import("./index.js").SessionMessageSkill | import("./index.js").SessionMessageShell | import("./index.js").SessionMessageCompactionRunning | import("./index.js").SessionMessageLocationSwitched | import("./index.js").SessionMessageModelSelected | import("./index.js").SessionMessageCompactionFailed | import("./index.js").SessionMessageUser | import("./index.js").SessionMessageCompactionCompleted | import("./index.js").SessionMessageAssistant>;
81
+ message: (input: import("./index.js").SessionMessageInput, requestOptions?: OpenCode.RequestOptions) => Promise<import("./index.js").SessionMessageAgentSelected | import("./index.js").SessionMessageSynthetic | import("./index.js").SessionMessageSystem | import("./index.js").SessionMessageSkill | import("./index.js").SessionMessageShell | import("./index.js").SessionMessageCompactionRunning | import("./index.js").SessionMessageIdle | import("./index.js").SessionMessageLocationSwitched | import("./index.js").SessionMessageModelSelected | import("./index.js").SessionMessageCompactionFailed | import("./index.js").SessionMessageUser | import("./index.js").SessionMessageCompactionCompleted | import("./index.js").SessionMessageAssistant>;
81
82
  environment: (input: import("./index.js").SessionEnvironmentInput, requestOptions?: OpenCode.RequestOptions) => Promise<void>;
82
83
  view: (input: import("./index.js").SessionViewInput, requestOptions?: OpenCode.RequestOptions) => Promise<void>;
83
84
  };
@@ -1,4 +1,4 @@
1
- import type { ServerGetOutput, LocationGetInput, LocationGetOutput, AgentListInput, AgentListOutput, AgentGetInput, AgentGetOutput, PluginListInput, PluginListOutput, PluginAwaitActivationInput, PluginCheckInput, PluginCheckOutput, PluginUpdateInput, SessionListInput, SessionStatsInput, SessionCreateInput, SessionImportInput, SessionExportInput, SessionGetInput, SessionRemoveInput, SessionForkInput, SessionSwitchAgentInput, SessionSwitchModelInput, SessionRenameInput, SessionMoveInput, SessionPromptInput, SessionCommandInput, SessionSkillInput, SessionSyntheticInput, SessionShellInput, SessionCompactInput, SessionWaitInput, SessionRevertStageInput, SessionRevertClearInput, SessionRevertCommitInput, SessionContextInput, SessionInboxListInput, SessionInboxCancelInput, SessionInboxSteerInput, SessionInboxQueueInput, SessionInstructionsEntryListInput, SessionInstructionsEntryPutInput, SessionInstructionsEntryRemoveInput, SessionGenerateInput, SessionLogInput, SessionLogOutput, SessionInterruptInput, SessionBackgroundInput, SessionMessageInput, SessionEnvironmentInput, SessionViewInput, MessageListInput, ModelListInput, ModelListOutput, ModelDefaultInput, ModelDefaultOutput, GenerateTextInput, ProviderListInput, ProviderListOutput, ProviderGetInput, ProviderGetOutput, IntegrationListInput, IntegrationListOutput, IntegrationGetInput, IntegrationGetOutput, IntegrationWellknownAddInput, IntegrationConnectKeyInput, IntegrationOauthConnectInput, IntegrationOauthConnectOutput, IntegrationOauthStatusInput, IntegrationOauthStatusOutput, IntegrationOauthCompleteInput, IntegrationOauthCancelInput, IntegrationCommandConnectInput, IntegrationCommandConnectOutput, IntegrationCommandStatusInput, IntegrationCommandStatusOutput, IntegrationCommandCancelInput, McpListInput, McpListOutput, McpAddInput, McpRemoveInput, McpConnectInput, McpDisconnectInput, McpResourceCatalogInput, McpResourceCatalogOutput, CredentialUpdateInput, CredentialActivateInput, CredentialRemoveInput, ProjectListOutput, ProjectUpdateInput, ProjectCurrentInput, FormRequestListInput, FormRequestListOutput, FormListInput, FormCreateInput, FormGetInput, FormStateInput, FormReplyInput, FormCancelInput, PermissionRequestListInput, PermissionRequestListOutput, PermissionSavedListInput, PermissionSavedRemoveInput, PermissionCreateInput, PermissionListInput, PermissionGetInput, PermissionReplyInput, PermissionRulesInput, FileReadInput, FileReadOutput, FileListInput, FileListOutput, FileFindInput, FileFindOutput, CommandListInput, CommandListOutput, SkillListInput, SkillListOutput, RpcCallInput, EventSubscribeOutput, PtyListInput, PtyListOutput, PtyCreateInput, PtyCreateOutput, PtyGetInput, PtyGetOutput, PtyUpdateInput, PtyUpdateOutput, PtyRemoveInput, PtyConnectTokenInput, PtyConnectTokenOutput, ExperimentalPersistentPtyReadInput, ExperimentalPersistentPtyListInput, ExperimentalPersistentPtyCreateInput, ExperimentalPersistentPtyHandoffOutput, ExperimentalPersistentPtyGetInput, ExperimentalPersistentPtyUpdateInput, ExperimentalPersistentPtySnapshotInput, ExperimentalPersistentPtyRemoveInput, ExperimentalPersistentPtyConnectTokenInput, ShellListInput, ShellListOutput, ShellCreateInput, ShellCreateOutput, ShellGetInput, ShellGetOutput, ShellTimeoutInput, ShellTimeoutOutput, ShellOutputInput, ShellOutputOutput, ShellRemoveInput, ReferenceListInput, ReferenceListOutput, WorktreeListInput, WorktreeCreateInput, WorktreeRemoveInput, WorktreeRefreshInput, WorkspaceCreateInput, WorkspaceDestroyInput, VcsGetInput, VcsGetOutput, VcsBaseInput, VcsBaseOutput, VcsStatusInput, VcsStatusOutput, VcsBranchesInput, VcsBranchesOutput, VcsDiffInput, VcsDiffOutput, DebugLocationListOutput, DebugLocationEvictInput, MigrationV1StatusOutput, WebsearchProvidersInput, WebsearchProvidersOutput, WebsearchQueryInput, WebsearchQueryOutput, ConfigGetInput, ConfigGetOutput, ConfigUpdatePreferencesInput, ConfigShellsOutput } from "./types.js";
1
+ import type { ServerGetOutput, LocationGetInput, LocationGetOutput, AgentListInput, AgentListOutput, AgentGetInput, AgentGetOutput, PluginListInput, PluginListOutput, PluginAwaitActivationInput, PluginCheckInput, PluginCheckOutput, PluginUpdateInput, SessionListInput, SessionStatsInput, SessionCreateInput, SessionImportInput, SessionExportInput, SessionGetInput, SessionRemoveInput, SessionForkInput, SessionSwitchAgentInput, SessionSwitchModelInput, SessionRenameInput, SessionMoveInput, SessionPromptInput, SessionCommandInput, SessionSkillInput, SessionSyntheticInput, SessionShellInput, SessionCompactInput, SessionWaitInput, SessionRevertStageInput, SessionRevertClearInput, SessionRevertCommitInput, SessionContextInput, SessionDiffInput, SessionInboxListInput, SessionInboxCancelInput, SessionInboxSteerInput, SessionInboxQueueInput, SessionInstructionsEntryListInput, SessionInstructionsEntryPutInput, SessionInstructionsEntryRemoveInput, SessionGenerateInput, SessionLogInput, SessionLogOutput, SessionInterruptInput, SessionBackgroundInput, SessionMessageInput, SessionEnvironmentInput, SessionViewInput, MessageListInput, ModelListInput, ModelListOutput, ModelDefaultInput, ModelDefaultOutput, GenerateTextInput, ProviderListInput, ProviderListOutput, ProviderGetInput, ProviderGetOutput, IntegrationListInput, IntegrationListOutput, IntegrationGetInput, IntegrationGetOutput, IntegrationWellknownAddInput, IntegrationConnectKeyInput, IntegrationOauthConnectInput, IntegrationOauthConnectOutput, IntegrationOauthStatusInput, IntegrationOauthStatusOutput, IntegrationOauthCompleteInput, IntegrationOauthCancelInput, IntegrationCommandConnectInput, IntegrationCommandConnectOutput, IntegrationCommandStatusInput, IntegrationCommandStatusOutput, IntegrationCommandCancelInput, McpListInput, McpListOutput, McpAddInput, McpRemoveInput, McpConnectInput, McpDisconnectInput, McpResourceCatalogInput, McpResourceCatalogOutput, CredentialUpdateInput, CredentialActivateInput, CredentialRemoveInput, ProjectListOutput, ProjectUpdateInput, ProjectCurrentInput, FormRequestListInput, FormRequestListOutput, FormListInput, FormCreateInput, FormGetInput, FormStateInput, FormReplyInput, FormCancelInput, PermissionRequestListInput, PermissionRequestListOutput, PermissionSavedListInput, PermissionSavedRemoveInput, PermissionCreateInput, PermissionListInput, PermissionGetInput, PermissionReplyInput, PermissionRulesInput, FileReadInput, FileReadOutput, FileListInput, FileListOutput, FileFindInput, FileFindOutput, CommandListInput, CommandListOutput, SkillListInput, SkillListOutput, RpcCallInput, EventSubscribeOutput, PtyListInput, PtyListOutput, PtyCreateInput, PtyCreateOutput, PtyGetInput, PtyGetOutput, PtyUpdateInput, PtyUpdateOutput, PtyRemoveInput, PtyConnectTokenInput, PtyConnectTokenOutput, ExperimentalPersistentPtyReadInput, ExperimentalPersistentPtyListInput, ExperimentalPersistentPtyCreateInput, ExperimentalPersistentPtyHandoffOutput, ExperimentalPersistentPtyGetInput, ExperimentalPersistentPtyUpdateInput, ExperimentalPersistentPtySnapshotInput, ExperimentalPersistentPtyRemoveInput, ExperimentalPersistentPtyConnectTokenInput, ShellListInput, ShellListOutput, ShellCreateInput, ShellCreateOutput, ShellGetInput, ShellGetOutput, ShellTimeoutInput, ShellTimeoutOutput, ShellOutputInput, ShellOutputOutput, ShellRemoveInput, ReferenceListInput, ReferenceListOutput, WorktreeListInput, WorktreeCreateInput, WorktreeRemoveInput, WorktreeRefreshInput, WorkspaceCreateInput, WorkspaceDestroyInput, VcsGetInput, VcsGetOutput, VcsBaseInput, VcsBaseOutput, VcsStatusInput, VcsStatusOutput, VcsBranchesInput, VcsBranchesOutput, VcsDiffInput, VcsDiffOutput, DebugLocationListOutput, DebugLocationEvictInput, MigrationV1StatusOutput, WebsearchProvidersInput, WebsearchProvidersOutput, WebsearchQueryInput, WebsearchQueryOutput, ConfigGetInput, ConfigGetOutput, ConfigUpdatePreferencesInput, ConfigShellsOutput } from "./types.js";
2
2
  export interface ClientOptions {
3
3
  readonly baseUrl: string;
4
4
  readonly fetch?: typeof globalThis.fetch;
@@ -59,6 +59,7 @@ export declare function make(options: ClientOptions): {
59
59
  commit: (input: SessionRevertCommitInput, requestOptions?: RequestOptions) => Promise<void>;
60
60
  };
61
61
  context: (input: SessionContextInput, requestOptions?: RequestOptions) => Promise<import("./types.js").SessionMessageInfo[]>;
62
+ diff: (input: SessionDiffInput, requestOptions?: RequestOptions) => Promise<import("./types.js").FileDiffInfo[]>;
62
63
  inbox: {
63
64
  list: (input: SessionInboxListInput, requestOptions?: RequestOptions) => Promise<import("./types.js").SessionInboxInfo[]>;
64
65
  cancel: (input: SessionInboxCancelInput, requestOptions?: RequestOptions) => Promise<void>;
@@ -78,7 +79,7 @@ export declare function make(options: ClientOptions): {
78
79
  log: (input: SessionLogInput, requestOptions?: RequestOptions) => AsyncIterable<SessionLogOutput>;
79
80
  interrupt: (input: SessionInterruptInput, requestOptions?: RequestOptions) => Promise<import("./types.js").SessionInterruptResponse>;
80
81
  background: (input: SessionBackgroundInput, requestOptions?: RequestOptions) => Promise<void>;
81
- message: (input: SessionMessageInput, requestOptions?: RequestOptions) => Promise<import("./types.js").SessionMessageAgentSelected | import("./types.js").SessionMessageSynthetic | import("./types.js").SessionMessageSystem | import("./types.js").SessionMessageSkill | import("./types.js").SessionMessageShell | import("./types.js").SessionMessageCompactionRunning | import("./types.js").SessionMessageLocationSwitched | import("./types.js").SessionMessageModelSelected | import("./types.js").SessionMessageCompactionFailed | import("./types.js").SessionMessageUser | import("./types.js").SessionMessageCompactionCompleted | import("./types.js").SessionMessageAssistant>;
82
+ message: (input: SessionMessageInput, requestOptions?: RequestOptions) => Promise<import("./types.js").SessionMessageAgentSelected | import("./types.js").SessionMessageSynthetic | import("./types.js").SessionMessageSystem | import("./types.js").SessionMessageSkill | import("./types.js").SessionMessageShell | import("./types.js").SessionMessageCompactionRunning | import("./types.js").SessionMessageIdle | import("./types.js").SessionMessageLocationSwitched | import("./types.js").SessionMessageModelSelected | import("./types.js").SessionMessageCompactionFailed | import("./types.js").SessionMessageUser | import("./types.js").SessionMessageCompactionCompleted | import("./types.js").SessionMessageAssistant>;
82
83
  environment: (input: SessionEnvironmentInput, requestOptions?: RequestOptions) => Promise<void>;
83
84
  view: (input: SessionViewInput, requestOptions?: RequestOptions) => Promise<void>;
84
85
  };
@@ -434,6 +434,14 @@ export function make(options) {
434
434
  declaredStatuses: [400, 401, 404, 500],
435
435
  empty: false,
436
436
  }, requestOptions).then((value) => value.data),
437
+ diff: (input, requestOptions) => request({
438
+ method: "GET",
439
+ path: `/api/session/${encodeURIComponent(input.sessionID)}/diff`,
440
+ query: { from: input["from"], to: input["to"], context: input["context"] },
441
+ successStatus: 200,
442
+ declaredStatuses: [400, 401, 404, 500],
443
+ empty: false,
444
+ }, requestOptions).then((value) => value.data),
437
445
  inbox: {
438
446
  list: (input, requestOptions) => request({
439
447
  method: "GET",
@@ -226,6 +226,17 @@ export type SessionProviderContextProvenance = {
226
226
  protocol: string;
227
227
  endpoint: string;
228
228
  };
229
+ export type SessionMessageIdle = {
230
+ id: string;
231
+ metadata?: {
232
+ [x: string]: JsonValue;
233
+ };
234
+ time: {
235
+ created: number;
236
+ };
237
+ type: "idle";
238
+ outcome: "succeeded" | "failed" | "interrupted";
239
+ };
229
240
  export type SessionActive = {
230
241
  type: "running";
231
242
  };
@@ -3143,7 +3154,7 @@ export type FormInfo1 = {
3143
3154
  metadata?: FormMetadata1;
3144
3155
  fields: FormFields2;
3145
3156
  };
3146
- export type SessionMessageInfo = SessionMessageAgentSelected | SessionMessageModelSelected | SessionMessageLocationSwitched | SessionMessageUser | SessionMessageSynthetic | SessionMessageSystem | SessionMessageSkill | SessionMessageShell | SessionMessageAssistant | SessionMessageCompaction;
3157
+ export type SessionMessageInfo = SessionMessageAgentSelected | SessionMessageModelSelected | SessionMessageLocationSwitched | SessionMessageUser | SessionMessageSynthetic | SessionMessageSystem | SessionMessageSkill | SessionMessageShell | SessionMessageAssistant | SessionMessageCompaction | SessionMessageIdle;
3147
3158
  export type SessionMessageContentUpdated = {
3148
3159
  id: string;
3149
3160
  created: number;
@@ -4258,7 +4269,17 @@ export type SessionImportInput = {
4258
4269
  readonly write: number;
4259
4270
  };
4260
4271
  };
4261
- })>;
4272
+ }) | {
4273
+ readonly id: string;
4274
+ readonly metadata?: {
4275
+ readonly [x: string]: JsonValue;
4276
+ };
4277
+ readonly time: {
4278
+ readonly created: number;
4279
+ };
4280
+ readonly type: "idle";
4281
+ readonly outcome: "succeeded" | "failed" | "interrupted";
4282
+ }>;
4262
4283
  readonly location?: {
4263
4284
  readonly directory: string;
4264
4285
  readonly workspaceID?: string;
@@ -4721,7 +4742,17 @@ export type SessionImportInput = {
4721
4742
  readonly write: number;
4722
4743
  };
4723
4744
  };
4724
- })>;
4745
+ }) | {
4746
+ readonly id: string;
4747
+ readonly metadata?: {
4748
+ readonly [x: string]: JsonValue;
4749
+ };
4750
+ readonly time: {
4751
+ readonly created: number;
4752
+ };
4753
+ readonly type: "idle";
4754
+ readonly outcome: "succeeded" | "failed" | "interrupted";
4755
+ }>;
4725
4756
  readonly location?: {
4726
4757
  readonly directory: string;
4727
4758
  readonly workspaceID?: string;
@@ -5184,7 +5215,17 @@ export type SessionImportInput = {
5184
5215
  readonly write: number;
5185
5216
  };
5186
5217
  };
5187
- })>;
5218
+ }) | {
5219
+ readonly id: string;
5220
+ readonly metadata?: {
5221
+ readonly [x: string]: JsonValue;
5222
+ };
5223
+ readonly time: {
5224
+ readonly created: number;
5225
+ };
5226
+ readonly type: "idle";
5227
+ readonly outcome: "succeeded" | "failed" | "interrupted";
5228
+ }>;
5188
5229
  readonly location?: {
5189
5230
  readonly directory: string;
5190
5231
  readonly workspaceID?: string;
@@ -5933,6 +5974,29 @@ export type SessionContextInput = {
5933
5974
  export type SessionContextOutput = {
5934
5975
  data: Array<SessionMessageInfo>;
5935
5976
  }["data"];
5977
+ export type SessionDiffInput = {
5978
+ readonly sessionID: {
5979
+ readonly sessionID: string;
5980
+ }["sessionID"];
5981
+ readonly from?: {
5982
+ readonly from?: string | undefined;
5983
+ readonly to?: string | undefined;
5984
+ readonly context?: number | undefined;
5985
+ }["from"];
5986
+ readonly to?: {
5987
+ readonly from?: string | undefined;
5988
+ readonly to?: string | undefined;
5989
+ readonly context?: number | undefined;
5990
+ }["to"];
5991
+ readonly context?: {
5992
+ readonly from?: string | undefined;
5993
+ readonly to?: string | undefined;
5994
+ readonly context?: number | undefined;
5995
+ }["context"];
5996
+ };
5997
+ export type SessionDiffOutput = {
5998
+ data: Array<FileDiffInfo>;
5999
+ }["data"];
5936
6000
  export type SessionInboxListInput = {
5937
6001
  readonly sessionID: {
5938
6002
  readonly sessionID: string;
@@ -898,6 +898,17 @@ export function createData(config) {
898
898
  });
899
899
  if (event.type === "session.execution.interrupted" && event.data.reason === "shutdown")
900
900
  return;
901
+ // Mirror the projected idle marker so turn boundaries match before the next message read.
902
+ message.insert(event.data.sessionID, {
903
+ id: messageIDFromEvent(event.id),
904
+ type: "idle",
905
+ outcome: event.type === "session.execution.succeeded"
906
+ ? "succeeded"
907
+ : event.type === "session.execution.failed"
908
+ ? "failed"
909
+ : "interrupted",
910
+ time: { created: event.created },
911
+ });
901
912
  // An event can overtake the first read; queue a revalidation when that read is still active.
902
913
  if (!store.session.info[event.data.sessionID] && !sync.has(`session:${event.data.sessionID}`))
903
914
  return;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@opencode/client",
4
- "version": "0.0.0-dev-19533",
4
+ "version": "0.0.0-dev-19537",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -57,8 +57,8 @@
57
57
  "typecheck": "tsgo --noEmit"
58
58
  },
59
59
  "dependencies": {
60
- "@opencode/schema": "0.0.0-dev-19533",
61
- "@opencode/protocol": "0.0.0-dev-19533"
60
+ "@opencode/schema": "0.0.0-dev-19537",
61
+ "@opencode/protocol": "0.0.0-dev-19537"
62
62
  },
63
63
  "peerDependencies": {
64
64
  "effect": "4.0.0-rc.112",
@@ -74,7 +74,7 @@
74
74
  },
75
75
  "devDependencies": {
76
76
  "@effect/platform-node": "4.0.0-rc.112",
77
- "@opencode/httpapi-codegen": "0.0.0-dev-19533",
77
+ "@opencode/httpapi-codegen": "0.0.0-dev-19537",
78
78
  "@tsconfig/bun": "1.0.9",
79
79
  "@types/bun": "1.4.0",
80
80
  "@typescript/native-preview": "7.0.0-dev.20251207.1",