@opencode-ai/server 0.0.0-beta-18155 → 0.0.0-beta-18230

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.
package/dist/api.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { LocationMiddleware } from "./location";
2
2
  import { FormLocationMiddleware } from "./middleware/form-location";
3
3
  import { SessionLocationMiddleware } from "./middleware/session-location";
4
- export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddleware, import("effect/unstable/httpapi/HttpApiMiddleware").HttpApiMiddleware<import("@opencode-ai/core/location").Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, never, never>, FormLocationMiddleware, import("effect/unstable/httpapi/HttpApiMiddleware").HttpApiMiddleware<import("@opencode-ai/core/location").Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, readonly [typeof import("@opencode-ai/protocol/errors").InvalidRequestError, typeof import("@opencode-ai/protocol/errors").SessionNotFoundError], never>, SessionLocationMiddleware, import("effect/unstable/httpapi/HttpApiMiddleware").HttpApiMiddleware<import("@opencode-ai/core/location").Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, readonly [typeof import("@opencode-ai/protocol/errors").InvalidRequestError, typeof import("@opencode-ai/protocol/errors").SessionNotFoundError], never>, import("effect/unstable/httpapi/HttpApiGroup").HttpApiGroup<"server.event", import("effect/unstable/httpapi/HttpApiEndpoint").HttpApiEndpoint<"event.subscribe", "GET", "/api/event", never, never, never, never, import("effect/unstable/httpapi/HttpApiSchema").StreamSse<import("effect/unstable/httpapi/HttpApiSchema").SseEventFromData<import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
4
+ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddleware, import("effect/unstable/httpapi/HttpApiMiddleware").HttpApiMiddleware<import("@opencode-ai/core/location").Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, never, never>, FormLocationMiddleware, import("effect/unstable/httpapi/HttpApiMiddleware").HttpApiMiddleware<import("@opencode-ai/core/location").Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, readonly [typeof import("@opencode-ai/protocol/errors").InvalidRequestError, typeof import("@opencode-ai/protocol/errors").SessionNotFoundError], never>, SessionLocationMiddleware, import("effect/unstable/httpapi/HttpApiMiddleware").HttpApiMiddleware<import("@opencode-ai/core/location").Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, readonly [typeof import("@opencode-ai/protocol/errors").InvalidRequestError, typeof import("@opencode-ai/protocol/errors").SessionNotFoundError], never>, import("effect/unstable/httpapi/HttpApiGroup").HttpApiGroup<"server.event", import("effect/unstable/httpapi/HttpApiEndpoint").HttpApiEndpoint<"event.subscribe", "GET", "/api/event", never, never, never, never, import("effect/unstable/httpapi/HttpApiSchema").StreamSse<import("effect/unstable/httpapi/HttpApiSchema").SseEventFromData<import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
5
5
  readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Event.ID"> & {
6
6
  create: () => string & import("effect/Brand").Brand<"Event.ID">;
7
7
  };
@@ -39,7 +39,7 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
39
39
  };
40
40
  readonly created: import("effect/Schema").Finite;
41
41
  readonly metadata: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>>, import("effect/Schema").optionalKey<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>, never, never>;
42
- readonly type: import("effect/Schema").Literal<"integration.updated">;
42
+ readonly type: import("effect/Schema").Literal<"credential.updated">;
43
43
  readonly location: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
44
44
  readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
45
45
  readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
@@ -61,7 +61,7 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
61
61
  }>>, never, never>;
62
62
  readonly data: import("effect/Schema").Struct<{}>;
63
63
  }> & {
64
- type: "integration.updated";
64
+ type: "credential.updated";
65
65
  durability: "ephemeral";
66
66
  durable: undefined;
67
67
  data: import("effect/Schema").Struct<{}>;
@@ -71,7 +71,7 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
71
71
  };
72
72
  readonly created: import("effect/Schema").Finite;
73
73
  readonly metadata: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>>, import("effect/Schema").optionalKey<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>, never, never>;
74
- readonly type: import("effect/Schema").Literal<"integration.connection.updated">;
74
+ readonly type: import("effect/Schema").Literal<"credential.switched">;
75
75
  readonly location: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
76
76
  readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
77
77
  readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
@@ -93,14 +93,52 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
93
93
  }>>, never, never>;
94
94
  readonly data: import("effect/Schema").Struct<{
95
95
  readonly integrationID: import("effect/Schema").brand<import("effect/Schema").String, "Integration.ID">;
96
+ readonly credentialID: import("effect/Schema").NullOr<import("effect/Schema").brand<import("effect/Schema").String, "Credential.ID"> & {
97
+ create: () => string & import("effect/Brand").Brand<"Credential.ID">;
98
+ }>;
96
99
  }>;
97
100
  }> & {
98
- type: "integration.connection.updated";
101
+ type: "credential.switched";
99
102
  durability: "ephemeral";
100
103
  durable: undefined;
101
104
  data: import("effect/Schema").Struct<{
102
105
  readonly integrationID: import("effect/Schema").brand<import("effect/Schema").String, "Integration.ID">;
106
+ readonly credentialID: import("effect/Schema").NullOr<import("effect/Schema").brand<import("effect/Schema").String, "Credential.ID"> & {
107
+ create: () => string & import("effect/Brand").Brand<"Credential.ID">;
108
+ }>;
103
109
  }>;
110
+ }, import("effect/Schema").Struct<{
111
+ readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Event.ID"> & {
112
+ create: () => string & import("effect/Brand").Brand<"Event.ID">;
113
+ };
114
+ readonly created: import("effect/Schema").Finite;
115
+ readonly metadata: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>>, import("effect/Schema").optionalKey<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>, never, never>;
116
+ readonly type: import("effect/Schema").Literal<"integration.updated">;
117
+ readonly location: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
118
+ readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
119
+ readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
120
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
121
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
122
+ }>>, import("effect/Schema").optionalKey<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
123
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
124
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
125
+ }>, never, never>;
126
+ }>>>, import("effect/Schema").optionalKey<import("effect/Schema").Struct<{
127
+ readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
128
+ readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
129
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
130
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
131
+ }>>, import("effect/Schema").optionalKey<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
132
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
133
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
134
+ }>, never, never>;
135
+ }>>, never, never>;
136
+ readonly data: import("effect/Schema").Struct<{}>;
137
+ }> & {
138
+ type: "integration.updated";
139
+ durability: "ephemeral";
140
+ durable: undefined;
141
+ data: import("effect/Schema").Struct<{}>;
104
142
  }, import("effect/Schema").Struct<{
105
143
  readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Event.ID"> & {
106
144
  create: () => string & import("effect/Brand").Brand<"Event.ID">;
@@ -3923,6 +3961,7 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
3923
3961
  readonly messageID: import("effect/Schema").String;
3924
3962
  readonly id: import("effect/Schema").String;
3925
3963
  }>]>>, never, never>;
3964
+ readonly message: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
3926
3965
  readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Permission.ID"> & {
3927
3966
  create: (id?: string) => string & import("effect/Brand").Brand<"Permission.ID">;
3928
3967
  };
@@ -3949,6 +3988,7 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
3949
3988
  readonly messageID: import("effect/Schema").String;
3950
3989
  readonly id: import("effect/Schema").String;
3951
3990
  }>]>>, never, never>;
3991
+ readonly message: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
3952
3992
  readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Permission.ID"> & {
3953
3993
  create: (id?: string) => string & import("effect/Brand").Brand<"Permission.ID">;
3954
3994
  };
@@ -4071,6 +4111,92 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
4071
4111
  durability: "ephemeral";
4072
4112
  durable: undefined;
4073
4113
  data: import("effect/Schema").Struct<{}>;
4114
+ }, import("effect/Schema").Struct<{
4115
+ readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Event.ID"> & {
4116
+ create: () => string & import("effect/Brand").Brand<"Event.ID">;
4117
+ };
4118
+ readonly created: import("effect/Schema").Finite;
4119
+ readonly metadata: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>>, import("effect/Schema").optionalKey<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>, never, never>;
4120
+ readonly type: import("effect/Schema").Literal<"project.updated">;
4121
+ readonly location: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
4122
+ readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
4123
+ readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4124
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4125
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4126
+ }>>, import("effect/Schema").optionalKey<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4127
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4128
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4129
+ }>, never, never>;
4130
+ }>>>, import("effect/Schema").optionalKey<import("effect/Schema").Struct<{
4131
+ readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
4132
+ readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4133
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4134
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4135
+ }>>, import("effect/Schema").optionalKey<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4136
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4137
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4138
+ }>, never, never>;
4139
+ }>>, never, never>;
4140
+ readonly data: import("effect/Schema").Struct<{
4141
+ readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Project.ID"> & {
4142
+ global: string & import("effect/Brand").Brand<"Project.ID">;
4143
+ };
4144
+ readonly canonical: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
4145
+ readonly vcs: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Literals<readonly ["git", "hg"]>>>, import("effect/Schema").optionalKey<import("effect/Schema").Literals<readonly ["git", "hg"]>>, never, never>;
4146
+ readonly name: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4147
+ readonly icon: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
4148
+ readonly url: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4149
+ readonly override: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4150
+ readonly color: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4151
+ }>>>, import("effect/Schema").optionalKey<import("effect/Schema").Struct<{
4152
+ readonly url: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4153
+ readonly override: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4154
+ readonly color: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4155
+ }>>, never, never>;
4156
+ readonly commands: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
4157
+ readonly start: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4158
+ }>>>, import("effect/Schema").optionalKey<import("effect/Schema").Struct<{
4159
+ readonly start: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4160
+ }>>, never, never>;
4161
+ readonly time: import("effect/Schema").Struct<{
4162
+ readonly created: import("effect/Schema").Int;
4163
+ readonly updated: import("effect/Schema").Int;
4164
+ readonly initialized: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Int>>, import("effect/Schema").optionalKey<import("effect/Schema").Int>, never, never>;
4165
+ }>;
4166
+ readonly sandboxes: import("effect/Schema").$Array<import("effect/Schema").String>;
4167
+ }>;
4168
+ }> & {
4169
+ type: "project.updated";
4170
+ durability: "ephemeral";
4171
+ durable: undefined;
4172
+ data: import("effect/Schema").Struct<{
4173
+ readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Project.ID"> & {
4174
+ global: string & import("effect/Brand").Brand<"Project.ID">;
4175
+ };
4176
+ readonly canonical: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
4177
+ readonly vcs: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Literals<readonly ["git", "hg"]>>>, import("effect/Schema").optionalKey<import("effect/Schema").Literals<readonly ["git", "hg"]>>, never, never>;
4178
+ readonly name: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4179
+ readonly icon: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
4180
+ readonly url: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4181
+ readonly override: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4182
+ readonly color: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4183
+ }>>>, import("effect/Schema").optionalKey<import("effect/Schema").Struct<{
4184
+ readonly url: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4185
+ readonly override: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4186
+ readonly color: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4187
+ }>>, never, never>;
4188
+ readonly commands: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
4189
+ readonly start: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4190
+ }>>>, import("effect/Schema").optionalKey<import("effect/Schema").Struct<{
4191
+ readonly start: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").String>>, import("effect/Schema").optionalKey<import("effect/Schema").String>, never, never>;
4192
+ }>>, never, never>;
4193
+ readonly time: import("effect/Schema").Struct<{
4194
+ readonly created: import("effect/Schema").Int;
4195
+ readonly updated: import("effect/Schema").Int;
4196
+ readonly initialized: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Int>>, import("effect/Schema").optionalKey<import("effect/Schema").Int>, never, never>;
4197
+ }>;
4198
+ readonly sandboxes: import("effect/Schema").$Array<import("effect/Schema").String>;
4199
+ }>;
4074
4200
  }, import("effect/Schema").Struct<{
4075
4201
  readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Event.ID"> & {
4076
4202
  create: () => string & import("effect/Brand").Brand<"Event.ID">;
@@ -4469,6 +4595,150 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
4469
4595
  ascending: (id?: string) => string & import("effect/Brand").Brand<"PtyID">;
4470
4596
  };
4471
4597
  }>;
4598
+ }, import("effect/Schema").Struct<{
4599
+ readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Event.ID"> & {
4600
+ create: () => string & import("effect/Brand").Brand<"Event.ID">;
4601
+ };
4602
+ readonly created: import("effect/Schema").Finite;
4603
+ readonly metadata: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>>, import("effect/Schema").optionalKey<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>, never, never>;
4604
+ readonly type: import("effect/Schema").Literal<"persistent-pty.added">;
4605
+ readonly location: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
4606
+ readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
4607
+ readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4608
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4609
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4610
+ }>>, import("effect/Schema").optionalKey<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4611
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4612
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4613
+ }>, never, never>;
4614
+ }>>>, import("effect/Schema").optionalKey<import("effect/Schema").Struct<{
4615
+ readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
4616
+ readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4617
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4618
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4619
+ }>>, import("effect/Schema").optionalKey<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4620
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4621
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4622
+ }>, never, never>;
4623
+ }>>, never, never>;
4624
+ readonly data: import("effect/Schema").Struct<{
4625
+ readonly sessionID: import("effect/Schema").brand<import("effect/Schema").String, "SessionID"> & {
4626
+ create: () => string & import("effect/Brand").Brand<"SessionID">;
4627
+ descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
4628
+ };
4629
+ readonly terminal: import("effect/Schema").Struct<{
4630
+ readonly sessionID: import("effect/Schema").brand<import("effect/Schema").String, "SessionID"> & {
4631
+ create: () => string & import("effect/Brand").Brand<"SessionID">;
4632
+ descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
4633
+ };
4634
+ readonly foregroundProcess: import("effect/Schema").NullOr<import("effect/Schema").String>;
4635
+ readonly size: import("effect/Schema").Struct<{
4636
+ readonly cols: import("effect/Schema").Int;
4637
+ readonly rows: import("effect/Schema").Int;
4638
+ }>;
4639
+ readonly output: import("effect/Schema").Struct<{
4640
+ readonly head: import("effect/Schema").Int;
4641
+ readonly tail: import("effect/Schema").Int;
4642
+ }>;
4643
+ readonly id: import("effect/Schema").brand<import("effect/Schema").String, "PtyID"> & {
4644
+ create: () => string & import("effect/Brand").Brand<"PtyID">;
4645
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"PtyID">;
4646
+ };
4647
+ readonly title: import("effect/Schema").String;
4648
+ readonly command: import("effect/Schema").String;
4649
+ readonly args: import("effect/Schema").$Array<import("effect/Schema").String>;
4650
+ readonly cwd: import("effect/Schema").String;
4651
+ readonly status: import("effect/Schema").Literals<readonly ["running", "exited"]>;
4652
+ readonly pid: import("effect/Schema").Int;
4653
+ readonly exitCode: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Int>>, import("effect/Schema").optionalKey<import("effect/Schema").Int>, never, never>;
4654
+ }>;
4655
+ }>;
4656
+ }> & {
4657
+ type: "persistent-pty.added";
4658
+ durability: "ephemeral";
4659
+ durable: undefined;
4660
+ data: import("effect/Schema").Struct<{
4661
+ readonly sessionID: import("effect/Schema").brand<import("effect/Schema").String, "SessionID"> & {
4662
+ create: () => string & import("effect/Brand").Brand<"SessionID">;
4663
+ descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
4664
+ };
4665
+ readonly terminal: import("effect/Schema").Struct<{
4666
+ readonly sessionID: import("effect/Schema").brand<import("effect/Schema").String, "SessionID"> & {
4667
+ create: () => string & import("effect/Brand").Brand<"SessionID">;
4668
+ descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
4669
+ };
4670
+ readonly foregroundProcess: import("effect/Schema").NullOr<import("effect/Schema").String>;
4671
+ readonly size: import("effect/Schema").Struct<{
4672
+ readonly cols: import("effect/Schema").Int;
4673
+ readonly rows: import("effect/Schema").Int;
4674
+ }>;
4675
+ readonly output: import("effect/Schema").Struct<{
4676
+ readonly head: import("effect/Schema").Int;
4677
+ readonly tail: import("effect/Schema").Int;
4678
+ }>;
4679
+ readonly id: import("effect/Schema").brand<import("effect/Schema").String, "PtyID"> & {
4680
+ create: () => string & import("effect/Brand").Brand<"PtyID">;
4681
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"PtyID">;
4682
+ };
4683
+ readonly title: import("effect/Schema").String;
4684
+ readonly command: import("effect/Schema").String;
4685
+ readonly args: import("effect/Schema").$Array<import("effect/Schema").String>;
4686
+ readonly cwd: import("effect/Schema").String;
4687
+ readonly status: import("effect/Schema").Literals<readonly ["running", "exited"]>;
4688
+ readonly pid: import("effect/Schema").Int;
4689
+ readonly exitCode: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Int>>, import("effect/Schema").optionalKey<import("effect/Schema").Int>, never, never>;
4690
+ }>;
4691
+ }>;
4692
+ }, import("effect/Schema").Struct<{
4693
+ readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Event.ID"> & {
4694
+ create: () => string & import("effect/Brand").Brand<"Event.ID">;
4695
+ };
4696
+ readonly created: import("effect/Schema").Finite;
4697
+ readonly metadata: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>>, import("effect/Schema").optionalKey<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>, never, never>;
4698
+ readonly type: import("effect/Schema").Literal<"persistent-pty.removed">;
4699
+ readonly location: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
4700
+ readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
4701
+ readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4702
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4703
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4704
+ }>>, import("effect/Schema").optionalKey<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4705
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4706
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4707
+ }>, never, never>;
4708
+ }>>>, import("effect/Schema").optionalKey<import("effect/Schema").Struct<{
4709
+ readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
4710
+ readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4711
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4712
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4713
+ }>>, import("effect/Schema").optionalKey<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
4714
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
4715
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
4716
+ }>, never, never>;
4717
+ }>>, never, never>;
4718
+ readonly data: import("effect/Schema").Struct<{
4719
+ readonly sessionID: import("effect/Schema").brand<import("effect/Schema").String, "SessionID"> & {
4720
+ create: () => string & import("effect/Brand").Brand<"SessionID">;
4721
+ descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
4722
+ };
4723
+ readonly ptyID: import("effect/Schema").brand<import("effect/Schema").String, "PtyID"> & {
4724
+ create: () => string & import("effect/Brand").Brand<"PtyID">;
4725
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"PtyID">;
4726
+ };
4727
+ }>;
4728
+ }> & {
4729
+ type: "persistent-pty.removed";
4730
+ durability: "ephemeral";
4731
+ durable: undefined;
4732
+ data: import("effect/Schema").Struct<{
4733
+ readonly sessionID: import("effect/Schema").brand<import("effect/Schema").String, "SessionID"> & {
4734
+ create: () => string & import("effect/Brand").Brand<"SessionID">;
4735
+ descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
4736
+ };
4737
+ readonly ptyID: import("effect/Schema").brand<import("effect/Schema").String, "PtyID"> & {
4738
+ create: () => string & import("effect/Brand").Brand<"PtyID">;
4739
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"PtyID">;
4740
+ };
4741
+ }>;
4472
4742
  }, import("effect/Schema").Struct<{
4473
4743
  readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Event.ID"> & {
4474
4744
  create: () => string & import("effect/Brand").Brand<"Event.ID">;
@@ -5752,7 +6022,7 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
5752
6022
  } | {
5753
6023
  readonly id: string & import("effect/Brand").Brand<"Event.ID">;
5754
6024
  readonly data: {};
5755
- readonly type: "integration.updated";
6025
+ readonly type: "credential.updated";
5756
6026
  readonly created: number;
5757
6027
  readonly location?: {
5758
6028
  readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
@@ -5765,8 +6035,21 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
5765
6035
  readonly id: string & import("effect/Brand").Brand<"Event.ID">;
5766
6036
  readonly data: {
5767
6037
  readonly integrationID: string & import("effect/Brand").Brand<"Integration.ID">;
6038
+ readonly credentialID: (string & import("effect/Brand").Brand<"Credential.ID">) | null;
5768
6039
  };
5769
- readonly type: "integration.connection.updated";
6040
+ readonly type: "credential.switched";
6041
+ readonly created: number;
6042
+ readonly location?: {
6043
+ readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
6044
+ readonly workspaceID?: (string & import("effect/Brand").Brand<"Workspace.ID">) | undefined;
6045
+ } | undefined;
6046
+ readonly metadata?: {
6047
+ readonly [x: string]: unknown;
6048
+ } | undefined;
6049
+ } | {
6050
+ readonly id: string & import("effect/Brand").Brand<"Event.ID">;
6051
+ readonly data: {};
6052
+ readonly type: "integration.updated";
5770
6053
  readonly created: number;
5771
6054
  readonly location?: {
5772
6055
  readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
@@ -5785,6 +6068,7 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
5785
6068
  readonly metadata?: {
5786
6069
  readonly [x: string]: unknown;
5787
6070
  } | undefined;
6071
+ readonly message?: string | undefined;
5788
6072
  readonly save?: readonly string[] | undefined;
5789
6073
  readonly source?: {
5790
6074
  readonly type: "tool";
@@ -5829,6 +6113,37 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
5829
6113
  readonly metadata?: {
5830
6114
  readonly [x: string]: unknown;
5831
6115
  } | undefined;
6116
+ } | {
6117
+ readonly id: string & import("effect/Brand").Brand<"Event.ID">;
6118
+ readonly data: {
6119
+ readonly id: string & import("effect/Brand").Brand<"Project.ID">;
6120
+ readonly canonical: string & import("effect/Brand").Brand<"AbsolutePath">;
6121
+ readonly time: {
6122
+ readonly created: number;
6123
+ readonly updated: number;
6124
+ readonly initialized?: number | undefined;
6125
+ };
6126
+ readonly sandboxes: readonly string[];
6127
+ readonly name?: string | undefined;
6128
+ readonly vcs?: "git" | "hg" | undefined;
6129
+ readonly icon?: {
6130
+ readonly url?: string | undefined;
6131
+ readonly color?: string | undefined;
6132
+ readonly override?: string | undefined;
6133
+ } | undefined;
6134
+ readonly commands?: {
6135
+ readonly start?: string | undefined;
6136
+ } | undefined;
6137
+ };
6138
+ readonly type: "project.updated";
6139
+ readonly created: number;
6140
+ readonly location?: {
6141
+ readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
6142
+ readonly workspaceID?: (string & import("effect/Brand").Brand<"Workspace.ID">) | undefined;
6143
+ } | undefined;
6144
+ readonly metadata?: {
6145
+ readonly [x: string]: unknown;
6146
+ } | undefined;
5832
6147
  } | {
5833
6148
  readonly id: string & import("effect/Brand").Brand<"Event.ID">;
5834
6149
  readonly data: {
@@ -7285,21 +7600,18 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
7285
7600
  } | {
7286
7601
  readonly id: string & import("effect/Brand").Brand<"Event.ID">;
7287
7602
  readonly data: {
7288
- readonly id: string & import("effect/Brand").Brand<"Plugin.ID">;
7603
+ readonly info: {
7604
+ readonly id: string & import("effect/Brand").Brand<"PtyID">;
7605
+ readonly command: string;
7606
+ readonly title: string;
7607
+ readonly status: "running" | "exited";
7608
+ readonly pid: number;
7609
+ readonly cwd: string;
7610
+ readonly args: readonly string[];
7611
+ readonly exitCode?: number | undefined;
7612
+ };
7289
7613
  };
7290
- readonly type: "plugin.added";
7291
- readonly created: number;
7292
- readonly location?: {
7293
- readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
7294
- readonly workspaceID?: (string & import("effect/Brand").Brand<"Workspace.ID">) | undefined;
7295
- } | undefined;
7296
- readonly metadata?: {
7297
- readonly [x: string]: unknown;
7298
- } | undefined;
7299
- } | {
7300
- readonly id: string & import("effect/Brand").Brand<"Event.ID">;
7301
- readonly data: {};
7302
- readonly type: "plugin.updated";
7614
+ readonly type: "pty.created";
7303
7615
  readonly created: number;
7304
7616
  readonly location?: {
7305
7617
  readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
@@ -7322,7 +7634,7 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
7322
7634
  readonly exitCode?: number | undefined;
7323
7635
  };
7324
7636
  };
7325
- readonly type: "pty.created";
7637
+ readonly type: "pty.updated";
7326
7638
  readonly created: number;
7327
7639
  readonly location?: {
7328
7640
  readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
@@ -7334,18 +7646,58 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
7334
7646
  } | {
7335
7647
  readonly id: string & import("effect/Brand").Brand<"Event.ID">;
7336
7648
  readonly data: {
7337
- readonly info: {
7649
+ readonly id: string & import("effect/Brand").Brand<"PtyID">;
7650
+ readonly exitCode: number;
7651
+ };
7652
+ readonly type: "pty.exited";
7653
+ readonly created: number;
7654
+ readonly location?: {
7655
+ readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
7656
+ readonly workspaceID?: (string & import("effect/Brand").Brand<"Workspace.ID">) | undefined;
7657
+ } | undefined;
7658
+ readonly metadata?: {
7659
+ readonly [x: string]: unknown;
7660
+ } | undefined;
7661
+ } | {
7662
+ readonly id: string & import("effect/Brand").Brand<"Event.ID">;
7663
+ readonly data: {
7664
+ readonly id: string & import("effect/Brand").Brand<"PtyID">;
7665
+ };
7666
+ readonly type: "pty.deleted";
7667
+ readonly created: number;
7668
+ readonly location?: {
7669
+ readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
7670
+ readonly workspaceID?: (string & import("effect/Brand").Brand<"Workspace.ID">) | undefined;
7671
+ } | undefined;
7672
+ readonly metadata?: {
7673
+ readonly [x: string]: unknown;
7674
+ } | undefined;
7675
+ } | {
7676
+ readonly id: string & import("effect/Brand").Brand<"Event.ID">;
7677
+ readonly data: {
7678
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
7679
+ readonly terminal: {
7338
7680
  readonly id: string & import("effect/Brand").Brand<"PtyID">;
7681
+ readonly size: {
7682
+ readonly cols: number;
7683
+ readonly rows: number;
7684
+ };
7685
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
7339
7686
  readonly command: string;
7340
7687
  readonly title: string;
7341
7688
  readonly status: "running" | "exited";
7689
+ readonly output: {
7690
+ readonly head: number;
7691
+ readonly tail: number;
7692
+ };
7342
7693
  readonly pid: number;
7343
7694
  readonly cwd: string;
7344
7695
  readonly args: readonly string[];
7696
+ readonly foregroundProcess: string | null;
7345
7697
  readonly exitCode?: number | undefined;
7346
7698
  };
7347
7699
  };
7348
- readonly type: "pty.updated";
7700
+ readonly type: "persistent-pty.added";
7349
7701
  readonly created: number;
7350
7702
  readonly location?: {
7351
7703
  readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
@@ -7357,10 +7709,10 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
7357
7709
  } | {
7358
7710
  readonly id: string & import("effect/Brand").Brand<"Event.ID">;
7359
7711
  readonly data: {
7360
- readonly id: string & import("effect/Brand").Brand<"PtyID">;
7361
- readonly exitCode: number;
7712
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
7713
+ readonly ptyID: string & import("effect/Brand").Brand<"PtyID">;
7362
7714
  };
7363
- readonly type: "pty.exited";
7715
+ readonly type: "persistent-pty.removed";
7364
7716
  readonly created: number;
7365
7717
  readonly location?: {
7366
7718
  readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
@@ -7372,9 +7724,21 @@ export declare const Api: import("@opencode-ai/protocol/api").Api<LocationMiddle
7372
7724
  } | {
7373
7725
  readonly id: string & import("effect/Brand").Brand<"Event.ID">;
7374
7726
  readonly data: {
7375
- readonly id: string & import("effect/Brand").Brand<"PtyID">;
7727
+ readonly id: string & import("effect/Brand").Brand<"Plugin.ID">;
7376
7728
  };
7377
- readonly type: "pty.deleted";
7729
+ readonly type: "plugin.added";
7730
+ readonly created: number;
7731
+ readonly location?: {
7732
+ readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
7733
+ readonly workspaceID?: (string & import("effect/Brand").Brand<"Workspace.ID">) | undefined;
7734
+ } | undefined;
7735
+ readonly metadata?: {
7736
+ readonly [x: string]: unknown;
7737
+ } | undefined;
7738
+ } | {
7739
+ readonly id: string & import("effect/Brand").Brand<"Event.ID">;
7740
+ readonly data: {};
7741
+ readonly type: "plugin.updated";
7378
7742
  readonly created: number;
7379
7743
  readonly location?: {
7380
7744
  readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
@@ -5,6 +5,9 @@ import { Api } from "../api";
5
5
  export const CredentialHandler = HttpApiBuilder.group(Api, "server.credential", (handlers) => handlers.handle("credential.update", Effect.fn(function* (ctx) {
6
6
  yield* (yield* Integration.Service).connection.update(ctx.params.credentialID, { label: ctx.payload.label });
7
7
  return HttpApiSchema.NoContent.make();
8
+ })).handle("credential.activate", Effect.fn(function* (ctx) {
9
+ yield* (yield* Integration.Service).connection.activate(ctx.params.credentialID);
10
+ return HttpApiSchema.NoContent.make();
8
11
  })).handle("credential.remove", Effect.fn(function* (ctx) {
9
12
  yield* (yield* Integration.Service).connection.remove(ctx.params.credentialID);
10
13
  return HttpApiSchema.NoContent.make();
@@ -0,0 +1,3 @@
1
+ import { PersistentPty } from "@opencode-ai/core/persistent-pty";
2
+ import { PtyTicket } from "@opencode-ai/core/pty/ticket";
3
+ export declare const PersistentPtyHandler: import("effect/Layer").Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.experimental">, never, PtyTicket.Service | PersistentPty.Service | (import("@opencode-ai/protocol/middleware/schema-error").SchemaErrorMiddleware | import("@opencode-ai/protocol/middleware/authorization").Authorization)>;
@@ -0,0 +1,126 @@
1
+ import { PersistentPty } from "@opencode-ai/core/persistent-pty";
2
+ import { PtyTicket } from "@opencode-ai/core/pty/ticket";
3
+ import { ForbiddenError, PtyNotFoundError, ServiceUnavailableError } from "@opencode-ai/protocol/errors";
4
+ import {
5
+ PTY_CONNECT_TICKET_QUERY,
6
+ PTY_CONNECT_TOKEN_HEADER,
7
+ PTY_CONNECT_TOKEN_HEADER_VALUE
8
+ } from "@opencode-ai/protocol/groups/persistent-pty";
9
+ import { Effect, Queue, Semaphore } from "effect";
10
+ import { HttpServerRequest, HttpServerResponse } from "effect/unstable/http";
11
+ import { HttpApiBuilder, HttpApiSchema } from "effect/unstable/httpapi";
12
+ import { Socket } from "effect/unstable/socket";
13
+ import { Api } from "../api";
14
+ import { CorsConfig, isAllowedRequestOrigin } from "../cors";
15
+ export const PersistentPtyHandler = HttpApiBuilder.group(Api, "server.experimental", (handlers) => Effect.gen(function* () {
16
+ const tickets = yield* PtyTicket.Service, cors = yield* CorsConfig, pty = yield* PersistentPty.Service;
17
+ return handlers.handle("persistentPty.list", Effect.fn(function* (ctx) {
18
+ return { data: yield* pty.list(ctx.params.sessionID).pipe(mapUnavailable) };
19
+ })).handle("persistentPty.create", Effect.fn(function* (ctx) {
20
+ return {
21
+ data: yield* pty.create(ctx.params.sessionID, {
22
+ command: ctx.payload.command,
23
+ args: ctx.payload.args,
24
+ cwd: ctx.payload.cwd,
25
+ title: ctx.payload.title,
26
+ env: ctx.payload.env,
27
+ cols: ctx.payload.size?.cols,
28
+ rows: ctx.payload.size?.rows
29
+ }).pipe(Effect.catchTag("PersistentPty.UnavailableError", unavailable))
30
+ };
31
+ })).handle("persistentPty.shutdown", Effect.fn(function* () {
32
+ yield* pty.shutdown().pipe(mapUnavailable);
33
+ return HttpApiSchema.NoContent.make();
34
+ })).handle("persistentPty.get", Effect.fn(function* (ctx) {
35
+ return { data: yield* pty.get(ctx.params.ptyID).pipe(mapTerminalError) };
36
+ })).handle("persistentPty.update", Effect.fn(function* (ctx) {
37
+ yield* pty.resize(ctx.params.ptyID, ctx.payload.size.cols, ctx.payload.size.rows, ctx.payload.attachmentID).pipe(mapTerminalError);
38
+ return { data: yield* pty.get(ctx.params.ptyID).pipe(mapTerminalError) };
39
+ })).handle("persistentPty.snapshot", Effect.fn(function* (ctx) {
40
+ return { data: yield* pty.snapshot(ctx.params.ptyID).pipe(mapTerminalError) };
41
+ })).handle("persistentPty.remove", Effect.fn(function* (ctx) {
42
+ yield* pty.remove(ctx.params.ptyID).pipe(mapTerminalError);
43
+ return HttpApiSchema.NoContent.make();
44
+ })).handle("persistentPty.connectToken", Effect.fn(function* (ctx) {
45
+ const request = yield* HttpServerRequest.HttpServerRequest;
46
+ if (request.headers[PTY_CONNECT_TOKEN_HEADER] !== PTY_CONNECT_TOKEN_HEADER_VALUE || !isAllowedRequestOrigin(request.headers.origin, request.headers.host, cors))
47
+ return yield* new ForbiddenError({ message: "Invalid persistent PTY connect token request" });
48
+ yield* pty.get(ctx.params.ptyID).pipe(mapTerminalError);
49
+ return { data: yield* tickets.issue({ ptyID: ctx.params.ptyID }) };
50
+ })).handleRaw("persistentPty.connect", Effect.fn("PersistentPtyHandler.connect")(function* (ctx) {
51
+ if (!(yield* pty.get(ctx.params.ptyID).pipe(Effect.as(!0), Effect.catchTag("PersistentPty.NotFoundError", () => Effect.succeed(!1)), Effect.catchTag("PersistentPty.UnavailableError", () => Effect.succeed(!1)))))
52
+ return HttpServerResponse.empty({ status: 404 });
53
+ const url = new URL(ctx.request.url, "http://localhost"), ticket = url.searchParams.get(PTY_CONNECT_TICKET_QUERY);
54
+ if (ticket) {
55
+ if (!(isAllowedRequestOrigin(ctx.request.headers.origin, ctx.request.headers.host, cors) ? yield* tickets.consume({ ticket, ptyID: ctx.params.ptyID }) : !1))
56
+ return HttpServerResponse.empty({ status: 403 });
57
+ }
58
+ const cursor = Number(url.searchParams.get("cursor") ?? "0"), role = url.searchParams.get("role") === "observer" ? "observer" : "controller", framedInput = url.searchParams.get("input_protocol") === "1", attachmentID = url.searchParams.get("attachment_id") ?? crypto.randomUUID();
59
+ if (!Number.isSafeInteger(cursor) || cursor < 0)
60
+ return HttpServerResponse.empty({ status: 400 });
61
+ const socket = yield* Effect.orDie(ctx.request.upgrade), write = yield* socket.writer, outbox = yield* Queue.unbounded(), input = yield* Semaphore.make(1), attachment = yield* pty.attach(ctx.params.ptyID, {
62
+ cursor,
63
+ attachmentID,
64
+ role,
65
+ takeover: url.searchParams.get("takeover") === "true",
66
+ onEvent: (event) => {
67
+ if (event.type === "output")
68
+ Queue.offerUnsafe(outbox, event.data);
69
+ if (event.type === "resized")
70
+ Queue.offerUnsafe(outbox, JSON.stringify({ ...event, checkpoint: Buffer.from(event.checkpoint).toString("base64") }));
71
+ if (event.type !== "output" && event.type !== "resized")
72
+ Queue.offerUnsafe(outbox, JSON.stringify(event));
73
+ },
74
+ onEnd: () => Queue.offerUnsafe(outbox, new Socket.CloseEvent(1000))
75
+ }).pipe(Effect.catchTags({
76
+ "PersistentPty.NotFoundError": () => Effect.succeed(void 0),
77
+ "PersistentPty.UnavailableError": () => Effect.succeed(void 0)
78
+ }));
79
+ if (!attachment)
80
+ return HttpServerResponse.empty({ status: 404 });
81
+ Queue.offerUnsafe(outbox, JSON.stringify({
82
+ type: "attached",
83
+ attachmentID,
84
+ inputProtocol: framedInput ? 1 : 0,
85
+ info: attachment.info,
86
+ role: attachment.role,
87
+ generation: attachment.generation,
88
+ replay: {
89
+ requestedOffset: attachment.replay.requestedOffset,
90
+ availableOffset: attachment.replay.availableOffset,
91
+ endOffset: attachment.replay.endOffset,
92
+ truncated: attachment.replay.truncated
93
+ }
94
+ }));
95
+ if (attachment.replay.data.length > 0)
96
+ Queue.offerUnsafe(outbox, attachment.replay.data);
97
+ Queue.offerUnsafe(outbox, JSON.stringify({ type: "replay_complete", endOffset: attachment.replay.endOffset }));
98
+ attachment.activate();
99
+ const drain = Effect.gen(function* () {
100
+ while (!0) {
101
+ const item = yield* Queue.take(outbox);
102
+ yield* write(item);
103
+ if (item instanceof Socket.CloseEvent)
104
+ return;
105
+ }
106
+ });
107
+ yield* Effect.race(drain, socket.runRaw((message) => input.withPermit(Effect.suspend(() => {
108
+ const data = typeof message === "string" ? Buffer.from(message) : message;
109
+ if (!framedInput)
110
+ return pty.input(ctx.params.ptyID, attachmentID, attachment.info.size.cols, attachment.info.size.rows, data).pipe(Effect.ignore);
111
+ if (data.byteLength < 5)
112
+ return Effect.void;
113
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength), type = data[0], cols = view.getUint16(1), rows = view.getUint16(3);
114
+ if (type !== 0 && type !== 1 || cols === 0 || rows === 0)
115
+ return Effect.void;
116
+ if (type === 0)
117
+ return pty.control(ctx.params.ptyID, attachmentID, cols, rows).pipe(Effect.ignore);
118
+ return pty.input(ctx.params.ptyID, attachmentID, cols, rows, data.subarray(5)).pipe(Effect.ignore);
119
+ })))).pipe(Effect.catchReason("SocketError", "SocketCloseError", () => Effect.void), Effect.ensuring(Effect.sync(() => attachment.detach())), Effect.orDie);
120
+ return HttpServerResponse.empty();
121
+ }));
122
+ }));
123
+ const mapUnavailable = (effect) => effect.pipe(Effect.catchTag("PersistentPty.UnavailableError", unavailable)), mapTerminalError = (effect) => effect.pipe(Effect.catchTags({
124
+ "PersistentPty.NotFoundError": (error) => new PtyNotFoundError({ ptyID: error.ptyID, message: `PTY session not found: ${error.ptyID}` }),
125
+ "PersistentPty.UnavailableError": unavailable
126
+ })), unavailable = (error) => new ServiceUnavailableError({ message: error.message, service: "opencode-pty" });
@@ -1,2 +1,2 @@
1
1
  import { Project } from "@opencode-ai/core/project";
2
- export declare const ProjectHandler: import("effect/Layer").Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.project">, never, import("@opencode-ai/protocol/middleware/schema-error").SchemaErrorMiddleware | import("@opencode-ai/protocol/middleware/authorization").Authorization | import("../location").LocationMiddleware | import("effect/unstable/http/HttpRouter").Request<"Requires", Project.Service>>;
2
+ export declare const ProjectHandler: import("effect/Layer").Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.project">, never, import("effect/unstable/http/HttpRouter").Request<"Requires", Project.Service> | (import("@opencode-ai/protocol/middleware/schema-error").SchemaErrorMiddleware | import("@opencode-ai/protocol/middleware/authorization").Authorization | import("../location").LocationMiddleware)>;
@@ -3,7 +3,11 @@ import { Project } from "@opencode-ai/core/project";
3
3
  import { Effect } from "effect";
4
4
  import { HttpApiBuilder } from "effect/unstable/httpapi";
5
5
  import { Api } from "../api";
6
- export const ProjectHandler = HttpApiBuilder.group(Api, "server.project", (handlers) => handlers.handle("project.list", () => Project.Service.use((project) => project.list())).handle("project.current", () => Location.Service.use((location) => Effect.succeed({
6
+ import { ProjectNotFoundError } from "@opencode-ai/protocol/errors";
7
+ export const ProjectHandler = HttpApiBuilder.group(Api, "server.project", (handlers) => handlers.handle("project.list", () => Project.Service.use((project) => project.list())).handle("project.update", (ctx) => Project.Service.use((project) => project.update({ ...ctx.payload, projectID: ctx.params.projectID }).pipe(Effect.mapError(() => new ProjectNotFoundError({
8
+ projectID: ctx.params.projectID,
9
+ message: `Project not found: ${ctx.params.projectID}`
10
+ }))))).handle("project.current", () => Location.Service.use((location) => Effect.succeed({
7
11
  id: location.project.id,
8
12
  directory: location.project.directory,
9
13
  canonical: location.project.canonical
@@ -1,5 +1,6 @@
1
1
  import { Session } from "@opencode-ai/core/session";
2
2
  import { SessionStats } from "@opencode-ai/core/session/stats";
3
+ import { SessionTitle } from "@opencode-ai/core/session/title";
3
4
  import { SessionTransfer } from "@opencode-ai/core/session/transfer";
4
5
  import { InstructionEntry } from "@opencode-ai/core/session/instruction-entry";
5
6
  import { DateTime, Effect, Stream } from "effect";
@@ -125,7 +126,11 @@ export const SessionHandler = HttpApiBuilder.group(Api, "server.session", (handl
125
126
  yield* session.switchModel({ sessionID: ctx.params.sessionID, model: ctx.payload.model }).pipe(Effect.catchTag("Session.NotFoundError", missingSession));
126
127
  return HttpApiSchema.NoContent.make();
127
128
  })).handle("session.rename", Effect.fn(function* (ctx) {
128
- yield* session.rename({ sessionID: ctx.params.sessionID, title: ctx.payload.title }).pipe(Effect.catchTag("Session.NotFoundError", missingSession));
129
+ if (ctx.payload.title) {
130
+ yield* session.rename({ sessionID: ctx.params.sessionID, title: ctx.payload.title }).pipe(Effect.catchTag("Session.NotFoundError", missingSession));
131
+ return HttpApiSchema.NoContent.make();
132
+ }
133
+ yield* (yield* SessionTitle.Service).generate(ctx.params.sessionID);
129
134
  return HttpApiSchema.NoContent.make();
130
135
  })).handle("session.move", Effect.fn(function* (ctx) {
131
136
  yield* session.move({
@@ -8,6 +8,8 @@ export const VcsHandler = HttpApiBuilder.group(Api, "server.vcs", (handlers) =>
8
8
  return yield* (yield* Vcs.Service).info();
9
9
  }))).handle("vcs.status", () => response(Effect.gen(function* () {
10
10
  return yield* (yield* Vcs.Service).status();
11
+ }))).handle("vcs.branches", (ctx) => response(Effect.gen(function* () {
12
+ return yield* (yield* Vcs.Service).branches({ search: ctx.query.search, limit: Math.min(ctx.query.limit ?? 50, 100) });
11
13
  }))).handle("vcs.diff", (ctx) => response(Effect.gen(function* () {
12
14
  return yield* (yield* Vcs.Service).diff(ctx.query.mode, { context: ctx.query.context });
13
15
  })));
@@ -1,2 +1,2 @@
1
1
  import { Layer } from "effect";
2
- export declare const handlers: Layer.Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.generate"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.message"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.model"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.provider"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.session"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.permission"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.fs"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.form"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.command"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.skill"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.event"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.agent"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.plugin"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.health"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.server"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.debug"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.pty"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.shell"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.reference"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.location"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.integration"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.websearch"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.mcp"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.credential"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.project"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.worktree"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.vcs"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.migration"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.config"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.workspace">, never, import("@opencode-ai/protocol/middleware/schema-error").SchemaErrorMiddleware | import("@opencode-ai/protocol/middleware/authorization").Authorization | import("@opencode-ai/util/global").Service | import("@opencode-ai/core/bus").Service | import("@opencode-ai/core/workspace").Service | import("@opencode-ai/core/location-service-map").Service | import("@opencode-ai/core/worktree").Service | import("@opencode-ai/core/session").Service | import("./location").LocationMiddleware | import("./middleware/form-location").FormLocationMiddleware | import("./middleware/session-location").SessionLocationMiddleware | import("@opencode-ai/core/pty/ticket").Service | import("@opencode-ai/core/session/transfer").Service | import("effect/unstable/http/HttpRouter").Request<"Requires", import("@opencode-ai/core/database/database").Service> | import("effect/unstable/http/HttpRouter").Request<"Requires", import("@opencode-ai/core/permission/saved").Service> | import("effect/unstable/http/HttpRouter").Request<"Requires", import("./server-info").Service> | import("./pty-environment").Service | import("effect/unstable/http/HttpRouter").Request<"Requires", import("@opencode-ai/core/wellknown").Service> | import("effect/unstable/http/HttpRouter").Request<"Requires", import("@opencode-ai/core/project").Service>>;
2
+ export declare const handlers: Layer.Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.generate"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.message"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.model"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.provider"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.session"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.permission"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.fs"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.form"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.command"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.skill"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.event"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.agent"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.plugin"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.health"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.server"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.debug"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.pty"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.experimental"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.shell"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.reference"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.location"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.integration"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.websearch"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.mcp"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.credential"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.project"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.worktree"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.vcs"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.migration"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.config"> | import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.workspace">, never, import("@opencode-ai/protocol/middleware/schema-error").SchemaErrorMiddleware | import("@opencode-ai/protocol/middleware/authorization").Authorization | import("@opencode-ai/util/global").Service | import("@opencode-ai/core/bus").Service | import("@opencode-ai/core/workspace").Service | import("@opencode-ai/core/location-service-map").Service | import("@opencode-ai/core/worktree").Service | import("@opencode-ai/core/session").Service | import("./location").LocationMiddleware | import("./middleware/form-location").FormLocationMiddleware | import("./middleware/session-location").SessionLocationMiddleware | import("@opencode-ai/core/pty/ticket").Service | import("@opencode-ai/core/persistent-pty/index").Service | import("@opencode-ai/core/session/transfer").Service | import("effect/unstable/http/HttpRouter").Request<"Requires", import("@opencode-ai/core/database/database").Service> | import("effect/unstable/http/HttpRouter").Request<"Requires", import("@opencode-ai/core/permission/saved").Service> | import("effect/unstable/http/HttpRouter").Request<"Requires", import("./server-info").Service> | import("./pty-environment").Service | import("effect/unstable/http/HttpRouter").Request<"Requires", import("@opencode-ai/core/wellknown").Service> | import("effect/unstable/http/HttpRouter").Request<"Requires", import("@opencode-ai/core/project").Service>>;
package/dist/handlers.js CHANGED
@@ -16,6 +16,7 @@ import { HealthHandler } from "./handlers/health";
16
16
  import { ServerHandler } from "./handlers/server";
17
17
  import { DebugHandler } from "./handlers/debug";
18
18
  import { PtyHandler } from "./handlers/pty";
19
+ import { PersistentPtyHandler } from "./handlers/persistent-pty";
19
20
  import { ShellHandler } from "./handlers/shell";
20
21
  import { ReferenceHandler } from "./handlers/reference";
21
22
  import { LocationHandler } from "./handlers/location";
@@ -30,4 +31,4 @@ import { EventFeed } from "./event-feed";
30
31
  import { MigrationHandler } from "./handlers/migration";
31
32
  import { ConfigHandler } from "./handlers/config";
32
33
  import { WorkspaceHandler } from "./handlers/workspace";
33
- export const handlers = Layer.mergeAll(HealthHandler, ServerHandler, DebugHandler, MigrationHandler, LocationHandler, AgentHandler, PluginHandler, SessionHandler, MessageHandler, ModelHandler, GenerateHandler, ProviderHandler, IntegrationHandler, WebSearchHandler, McpHandler, CredentialHandler, ProjectHandler, FormHandler, PermissionHandler, FileSystemHandler, CommandHandler, SkillHandler, EventHandler.pipe(Layer.provide(EventFeed.layer)), PtyHandler, ShellHandler, ReferenceHandler, WorktreeHandler, WorkspaceHandler, VcsHandler, ConfigHandler);
34
+ export const handlers = Layer.mergeAll(HealthHandler, ServerHandler, DebugHandler, MigrationHandler, LocationHandler, AgentHandler, PluginHandler, SessionHandler, MessageHandler, ModelHandler, GenerateHandler, ProviderHandler, IntegrationHandler, WebSearchHandler, McpHandler, CredentialHandler, ProjectHandler, FormHandler, PermissionHandler, FileSystemHandler, CommandHandler, SkillHandler, EventHandler.pipe(Layer.provide(EventFeed.layer)), PtyHandler, PersistentPtyHandler, ShellHandler, ReferenceHandler, WorktreeHandler, WorkspaceHandler, VcsHandler, ConfigHandler);
@@ -6,12 +6,12 @@ import { HttpApiMiddleware } from "effect/unstable/httpapi";
6
6
  export type LocationServices = Layer.Success<ReturnType<(typeof LocationServiceMap.Service)["get"]>>;
7
7
  declare const LocationMiddleware_base: HttpApiMiddleware.ServiceClass<LocationMiddleware, "@opencode/HttpApiLocation", {
8
8
  requires: never;
9
- provides: Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/filesystem/location-watcher").Service;
9
+ provides: Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/filesystem/location-watcher").Service;
10
10
  error: never;
11
11
  clientError: never;
12
12
  requiredForClient: false;
13
13
  security: never;
14
- }, HttpApiMiddleware.HttpApiMiddleware<Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, never, never>>;
14
+ }, HttpApiMiddleware.HttpApiMiddleware<Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, never, never>>;
15
15
  export declare class LocationMiddleware extends LocationMiddleware_base {
16
16
  }
17
17
  export declare function response<A, E, R>(data: Effect.Effect<A, E, R>): Effect.Effect<{
@@ -3,6 +3,7 @@ import { UnauthorizedError } from "@opencode-ai/protocol/errors";
3
3
  import { Authorization } from "@opencode-ai/protocol/middleware/authorization";
4
4
  export { Authorization } from "@opencode-ai/protocol/middleware/authorization";
5
5
  import { hasPtyConnectTicketURL } from "@opencode-ai/protocol/groups/pty";
6
+ import { hasPersistentPtyConnectTicketURL } from "@opencode-ai/protocol/groups/persistent-pty";
6
7
  import { Effect, Encoding, Layer, Redacted } from "effect";
7
8
  import { HttpEffect, HttpServerRequest, HttpServerResponse } from "effect/unstable/http";
8
9
  const AUTH_TOKEN_QUERY = "auth_token", WWW_AUTHENTICATE = 'Basic realm="Secure Area"';
@@ -37,8 +38,8 @@ export const authorizationLayer = Layer.effect(Authorization, Effect.gen(functio
37
38
  if (!ServerAuth.required(config))
38
39
  return Authorization.of((effect) => effect);
39
40
  return Authorization.of((effect) => Effect.gen(function* () {
40
- const request = yield* HttpServerRequest.HttpServerRequest;
41
- if (hasPtyConnectTicketURL(new URL(request.url, "http://localhost")))
41
+ const request = yield* HttpServerRequest.HttpServerRequest, url = new URL(request.url, "http://localhost");
42
+ if (hasPtyConnectTicketURL(url) || hasPersistentPtyConnectTicketURL(url))
42
43
  return yield* effect;
43
44
  if (yield* authorizedRequest(request, config))
44
45
  return yield* effect;
@@ -6,12 +6,12 @@ import { Layer } from "effect";
6
6
  import { HttpApiMiddleware } from "effect/unstable/httpapi";
7
7
  declare const FormLocationMiddleware_base: HttpApiMiddleware.ServiceClass<FormLocationMiddleware, "@opencode/HttpApiFormLocation", {
8
8
  requires: never;
9
- provides: Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/filesystem/location-watcher").Service;
9
+ provides: Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/filesystem/location-watcher").Service;
10
10
  error: readonly [typeof InvalidRequestError, typeof SessionNotFoundError];
11
11
  clientError: never;
12
12
  requiredForClient: false;
13
13
  security: never;
14
- }, HttpApiMiddleware.HttpApiMiddleware<Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, readonly [typeof InvalidRequestError, typeof SessionNotFoundError], never>>;
14
+ }, HttpApiMiddleware.HttpApiMiddleware<Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, readonly [typeof InvalidRequestError, typeof SessionNotFoundError], never>>;
15
15
  export declare class FormLocationMiddleware extends FormLocationMiddleware_base {
16
16
  }
17
17
  export declare const formLocationLayer: Layer.Layer<FormLocationMiddleware, never, Database.Service | LocationServiceMap.Service>;
@@ -6,12 +6,12 @@ import { HttpApiMiddleware } from "effect/unstable/httpapi";
6
6
  import { InvalidRequestError, SessionNotFoundError } from "@opencode-ai/protocol/errors";
7
7
  declare const SessionLocationMiddleware_base: HttpApiMiddleware.ServiceClass<SessionLocationMiddleware, "@opencode/HttpApiSessionLocation", {
8
8
  requires: never;
9
- provides: Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/filesystem/location-watcher").Service;
9
+ provides: Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/filesystem/location-watcher").Service;
10
10
  error: readonly [typeof InvalidRequestError, typeof SessionNotFoundError];
11
11
  clientError: never;
12
12
  requiredForClient: false;
13
13
  security: never;
14
- }, HttpApiMiddleware.HttpApiMiddleware<Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, readonly [typeof InvalidRequestError, typeof SessionNotFoundError], never>>;
14
+ }, HttpApiMiddleware.HttpApiMiddleware<Location.Service | import("@opencode-ai/core/agent").Service | import("@opencode-ai/core/aisdk").Service | import("@opencode-ai/core/form").Service | import("@opencode-ai/core/integration").Service | import("@opencode-ai/core/catalog").Service | import("@opencode-ai/core/command").Service | import("@opencode-ai/core/config").Service | import("@opencode-ai/core/environment/environment").Service | import("@opencode-ai/core/file-mutation").Service | import("@opencode-ai/core/formatter").Service | import("@opencode-ai/core/filesystem/search").Service | import("@opencode-ai/core/filesystem").Service | import("@opencode-ai/core/model-resolver").Service | import("@opencode-ai/core/generate").Service | import("@opencode-ai/core/image").Service | import("@opencode-ai/core/plugin/supervisor-service").Service | import("@opencode-ai/core/mcp/index").Service | import("@opencode-ai/core/reference").Service | import("@opencode-ai/core/websearch").Service | import("@opencode-ai/core/plugin").Service | import("@opencode-ai/core/permission").Service | import("@opencode-ai/core/skill").Service | import("@opencode-ai/core/tool").Service | import("@opencode-ai/core/vcs").Service | import("@opencode-ai/core/location-mutation").Service | import("@opencode-ai/core/tool/read-filesystem").Service | import("@opencode-ai/core/session/instructions").Service | import("@opencode-ai/core/shell").Service | import("@opencode-ai/core/shell/select").Service | import("@opencode-ai/core/instruction-discovery").Service | import("@opencode-ai/core/session/compaction").Service | import("@opencode-ai/core/snapshot").Service | import("@opencode-ai/core/tool-output").Service | import("@opencode-ai/core/session/runner/model").Service | import("@opencode-ai/core/session/model-transport").Service | import("@opencode-ai/core/pty").Service | import("@opencode-ai/core/instructions/builtins").Service | import("@opencode-ai/core/skill/instructions").Service | import("@opencode-ai/core/reference/instructions").Service | import("@opencode-ai/core/session/instruction-entry").Service | import("@opencode-ai/core/session/generate").Service | import("@opencode-ai/core/tool/mcp").Service | import("@opencode-ai/core/session/title").Service | import("@opencode-ai/core/session/runner/index").Service | import("@opencode-ai/core/filesystem/location-watcher").Service, readonly [typeof InvalidRequestError, typeof SessionNotFoundError], never>>;
15
15
  export declare class SessionLocationMiddleware extends SessionLocationMiddleware_base {
16
16
  }
17
17
  export declare const sessionLocationLayer: Layer.Layer<SessionLocationMiddleware, never, Database.Service | LocationServiceMap.Service>;
package/dist/process.js CHANGED
@@ -2,6 +2,7 @@ export * as ServerProcess from "./process";
2
2
  import { NodeHttpServer } from "@effect/platform-node";
3
3
  import { SessionRestart } from "@opencode-ai/core/session/execution/restart";
4
4
  import { hasPtyConnectTicketURL } from "@opencode-ai/protocol/groups/pty";
5
+ import { hasPersistentPtyConnectTicketURL } from "@opencode-ai/protocol/groups/persistent-pty";
5
6
  import { Cause, Context, Effect, Exit, Latch, Layer, Option, Ref, Scope } from "effect";
6
7
  import {
7
8
  HttpMiddleware,
@@ -88,7 +89,7 @@ function dispatch(password, status, application, version) {
88
89
  return yield* healthResponse(status, version);
89
90
  }
90
91
  const state = yield* status.current, app = yield* Ref.get(application), ready = state.type === "ready" && Option.isSome(app);
91
- if ((!ready || !hasPtyConnectTicketURL(url)) && !(yield* authorizedRequest(request, auth)))
92
+ if ((!ready || !hasPtyConnectTicketURL(url) && !hasPersistentPtyConnectTicketURL(url)) && !(yield* authorizedRequest(request, auth)))
92
93
  return unauthorized();
93
94
  if (ready)
94
95
  return yield* app.value;
package/dist/routes.d.ts CHANGED
@@ -4,6 +4,7 @@ import { Bus } from "@opencode-ai/core/bus";
4
4
  import { Credential } from "@opencode-ai/core/credential";
5
5
  import { PermissionSaved } from "@opencode-ai/core/permission/saved";
6
6
  import { PtyTicket } from "@opencode-ai/core/pty/ticket";
7
+ import { PersistentPty } from "@opencode-ai/core/persistent-pty";
7
8
  import { Project } from "@opencode-ai/core/project";
8
9
  import { Session } from "@opencode-ai/core/session";
9
10
  import { SessionTransfer } from "@opencode-ai/core/session/transfer";
@@ -20,5 +21,5 @@ import { HttpRouter } from "effect/unstable/http";
20
21
  import { Layer } from "effect";
21
22
  import { PtyEnvironment } from "./pty-environment";
22
23
  import type { ServerOptions } from "./options";
23
- export declare function createRoutes(options?: ServerOptions, serviceURLs?: () => ReadonlyArray<string>, overrides?: LayerNode.Replacements): Layer.Layer<Global.Service | Database.Service | Bus.Service | import("effect/unstable/http/HttpClient").HttpClient | Project.Service | Credential.Service | WellKnown.Service | Workspace.Service | Job.Service | LocationServiceMap.Service | SdkPlugins.Service | PermissionSaved.Service | Worktree.Service | Session.Service | SessionRestart.Service | PtyTicket.Service | SessionTransfer.Service | LocationActivity.Service | PtyEnvironment.Service | HttpRouter.HttpRouter, Error, import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("effect/unstable/http/Etag").Generator | import("effect/unstable/http/HttpPlatform").HttpPlatform>;
24
- export declare function createEmbeddedRoutes(options?: ServerOptions, overrides?: LayerNode.Replacements): Layer.Layer<Global.Service | Database.Service | Bus.Service | import("effect/unstable/http/HttpClient").HttpClient | Project.Service | Credential.Service | WellKnown.Service | Workspace.Service | Job.Service | LocationServiceMap.Service | SdkPlugins.Service | PermissionSaved.Service | Worktree.Service | Session.Service | SessionRestart.Service | PtyTicket.Service | SessionTransfer.Service | LocationActivity.Service | PtyEnvironment.Service | HttpRouter.HttpRouter, Error, import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("effect/unstable/http/Etag").Generator | import("effect/unstable/http/HttpPlatform").HttpPlatform>;
24
+ export declare function createRoutes(options?: ServerOptions, serviceURLs?: () => ReadonlyArray<string>, overrides?: LayerNode.Replacements): Layer.Layer<Global.Service | Database.Service | Bus.Service | import("effect/unstable/http/HttpClient").HttpClient | Project.Service | Credential.Service | WellKnown.Service | Workspace.Service | Job.Service | LocationServiceMap.Service | PermissionSaved.Service | SdkPlugins.Service | Worktree.Service | Session.Service | SessionRestart.Service | PtyTicket.Service | PersistentPty.Service | SessionTransfer.Service | LocationActivity.Service | PtyEnvironment.Service | HttpRouter.HttpRouter, Error, import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("effect/unstable/http/Etag").Generator | import("effect/unstable/http/HttpPlatform").HttpPlatform>;
25
+ export declare function createEmbeddedRoutes(options?: ServerOptions, overrides?: LayerNode.Replacements): Layer.Layer<Global.Service | Database.Service | Bus.Service | import("effect/unstable/http/HttpClient").HttpClient | Project.Service | Credential.Service | WellKnown.Service | Workspace.Service | Job.Service | LocationServiceMap.Service | PermissionSaved.Service | SdkPlugins.Service | Worktree.Service | Session.Service | SessionRestart.Service | PtyTicket.Service | PersistentPty.Service | SessionTransfer.Service | LocationActivity.Service | PtyEnvironment.Service | HttpRouter.HttpRouter, Error, import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("effect/unstable/http/Etag").Generator | import("effect/unstable/http/HttpPlatform").HttpPlatform>;
package/dist/routes.js CHANGED
@@ -11,6 +11,7 @@ import { Credential } from "@opencode-ai/core/credential";
11
11
  import { Config } from "@opencode-ai/core/config";
12
12
  import { PermissionSaved } from "@opencode-ai/core/permission/saved";
13
13
  import { PtyTicket } from "@opencode-ai/core/pty/ticket";
14
+ import { PersistentPty } from "@opencode-ai/core/persistent-pty";
14
15
  import { Project } from "@opencode-ai/core/project";
15
16
  import { Session } from "@opencode-ai/core/session";
16
17
  import { SessionTransfer } from "@opencode-ai/core/session/transfer";
@@ -57,6 +58,7 @@ const applicationServiceNodes = [
57
58
  SdkPlugins.node,
58
59
  PermissionSaved.node,
59
60
  PtyTicket.node,
61
+ PersistentPty.node,
60
62
  Credential.node,
61
63
  WellKnown.node,
62
64
  PtyEnvironment.node,
package/dist/workerd.js CHANGED
@@ -37,7 +37,10 @@ export function replacements(options) {
37
37
  ];
38
38
  }
39
39
  const unavailable = (what) => Effect.die(Error(`${what} is unavailable in the workerd profile`)), vcsLayer = Layer.succeed(Vcs.Service, Vcs.Service.of({
40
+ transform: () => Effect.succeed({ dispose: Effect.void }),
41
+ reload: () => Effect.void,
40
42
  info: () => Effect.succeed({ branch: {} }),
43
+ branches: () => Effect.succeed([]),
41
44
  status: () => Effect.succeed([]),
42
45
  diff: () => Effect.succeed([])
43
46
  })), fileSystemLayer = Layer.succeed(FileSystem.Service, FileSystem.Service.of({
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@opencode-ai/server",
4
- "version": "0.0.0-beta-18155",
4
+ "version": "0.0.0-beta-18230",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -29,11 +29,12 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@effect/platform-node": "4.0.0-rc.111",
32
- "@opencode-ai/core": "0.0.0-beta-18155",
33
- "@opencode-ai/protocol": "0.0.0-beta-18155",
34
- "@opencode-ai/schema": "0.0.0-beta-18155",
35
- "@opencode-ai/simulation": "0.0.0-beta-18155",
36
- "@opencode-ai/util": "0.0.0-beta-18155",
32
+ "@effect/platform-node-shared": "4.0.0-rc.111",
33
+ "@opencode-ai/core": "0.0.0-beta-18230",
34
+ "@opencode-ai/protocol": "0.0.0-beta-18230",
35
+ "@opencode-ai/schema": "0.0.0-beta-18230",
36
+ "@opencode-ai/simulation": "0.0.0-beta-18230",
37
+ "@opencode-ai/util": "0.0.0-beta-18230",
37
38
  "drizzle-orm": "1.0.0-rc.5-169397b",
38
39
  "effect": "4.0.0-rc.111"
39
40
  },