@opencode/server 0.0.0-beta-19425 → 0.0.0-beta-19500

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
@@ -305,6 +305,15 @@ export declare const Api: import("@opencode/protocol/api").Api<LocationMiddlewar
305
305
  };
306
306
  }>, never, never>;
307
307
  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").Codec<import("effect/Schema").Json, import("effect/Schema").Json, never, never>>>>, import("effect/Schema").optionalKey<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Codec<import("effect/Schema").Json, import("effect/Schema").Json, never, never>>>, never, never>;
308
+ readonly permissions: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").$Array<import("effect/Schema").Struct<{
309
+ readonly action: import("effect/Schema").String;
310
+ readonly resource: import("effect/Schema").String;
311
+ readonly effect: import("effect/Schema").Literals<readonly ["allow", "deny", "ask"]>;
312
+ }>>>>, import("effect/Schema").optionalKey<import("effect/Schema").$Array<import("effect/Schema").Struct<{
313
+ readonly action: import("effect/Schema").String;
314
+ readonly resource: import("effect/Schema").String;
315
+ readonly effect: import("effect/Schema").Literals<readonly ["allow", "deny", "ask"]>;
316
+ }>>>, never, never>;
308
317
  readonly version: import("effect/Schema").String;
309
318
  readonly sessionID: import("effect/Schema").brand<import("effect/Schema").String, "SessionID"> & {
310
319
  create: () => string & import("effect/Brand").Brand<"SessionID">;
@@ -389,6 +398,15 @@ export declare const Api: import("@opencode/protocol/api").Api<LocationMiddlewar
389
398
  };
390
399
  }>, never, never>;
391
400
  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").Codec<import("effect/Schema").Json, import("effect/Schema").Json, never, never>>>>, import("effect/Schema").optionalKey<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Codec<import("effect/Schema").Json, import("effect/Schema").Json, never, never>>>, never, never>;
401
+ readonly permissions: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").$Array<import("effect/Schema").Struct<{
402
+ readonly action: import("effect/Schema").String;
403
+ readonly resource: import("effect/Schema").String;
404
+ readonly effect: import("effect/Schema").Literals<readonly ["allow", "deny", "ask"]>;
405
+ }>>>>, import("effect/Schema").optionalKey<import("effect/Schema").$Array<import("effect/Schema").Struct<{
406
+ readonly action: import("effect/Schema").String;
407
+ readonly resource: import("effect/Schema").String;
408
+ readonly effect: import("effect/Schema").Literals<readonly ["allow", "deny", "ask"]>;
409
+ }>>>, never, never>;
392
410
  readonly version: import("effect/Schema").String;
393
411
  readonly sessionID: import("effect/Schema").brand<import("effect/Schema").String, "SessionID"> & {
394
412
  create: () => string & import("effect/Brand").Brand<"SessionID">;
@@ -765,6 +783,66 @@ export declare const Api: import("@opencode/protocol/api").Api<LocationMiddlewar
765
783
  descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
766
784
  };
767
785
  }>;
786
+ }, import("effect/Schema").Struct<{
787
+ readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Event.ID"> & {
788
+ create: () => string & import("effect/Brand").Brand<"Event.ID">;
789
+ };
790
+ readonly created: import("effect/Schema").Finite;
791
+ 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>;
792
+ readonly type: import("effect/Schema").Literal<"session.permissions.updated">;
793
+ readonly durable: import("effect/Schema").Struct<{
794
+ readonly aggregateID: import("effect/Schema").String;
795
+ readonly seq: import("effect/Schema").brand<import("effect/Schema").Int, "Event.Seq">;
796
+ readonly version: import("effect/Schema").decodeTo<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").Int, "Event.Version">>, import("effect/Schema").Literal<number>, never, never>;
797
+ }>;
798
+ readonly location: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").Struct<{
799
+ readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
800
+ readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
801
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
802
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
803
+ }>>, import("effect/Schema").optionalKey<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
804
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
805
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
806
+ }>, never, never>;
807
+ }>>>, import("effect/Schema").optionalKey<import("effect/Schema").Struct<{
808
+ readonly directory: import("effect/Schema").brand<import("effect/Schema").String, "AbsolutePath">;
809
+ readonly workspaceID: import("effect/Schema").decodeTo<import("effect/Schema").optional<import("effect/Schema").toType<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
810
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
811
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
812
+ }>>, import("effect/Schema").optionalKey<import("effect/Schema").brand<import("effect/Schema").String, "Workspace.ID"> & {
813
+ ascending: (id?: string) => string & import("effect/Brand").Brand<"Workspace.ID">;
814
+ create: () => string & import("effect/Brand").Brand<"Workspace.ID">;
815
+ }>, never, never>;
816
+ }>>, never, never>;
817
+ readonly data: import("effect/Schema").Struct<{
818
+ readonly permissions: import("effect/Schema").$Array<import("effect/Schema").Struct<{
819
+ readonly action: import("effect/Schema").String;
820
+ readonly resource: import("effect/Schema").String;
821
+ readonly effect: import("effect/Schema").Literals<readonly ["allow", "deny", "ask"]>;
822
+ }>>;
823
+ readonly sessionID: import("effect/Schema").brand<import("effect/Schema").String, "SessionID"> & {
824
+ create: () => string & import("effect/Brand").Brand<"SessionID">;
825
+ descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
826
+ };
827
+ }>;
828
+ }> & {
829
+ type: "session.permissions.updated";
830
+ durability: "durable";
831
+ durable: {
832
+ readonly version: number;
833
+ readonly aggregate: string;
834
+ };
835
+ data: import("effect/Schema").Struct<{
836
+ readonly permissions: import("effect/Schema").$Array<import("effect/Schema").Struct<{
837
+ readonly action: import("effect/Schema").String;
838
+ readonly resource: import("effect/Schema").String;
839
+ readonly effect: import("effect/Schema").Literals<readonly ["allow", "deny", "ask"]>;
840
+ }>>;
841
+ readonly sessionID: import("effect/Schema").brand<import("effect/Schema").String, "SessionID"> & {
842
+ create: () => string & import("effect/Brand").Brand<"SessionID">;
843
+ descending: (id?: string) => string & import("effect/Brand").Brand<"SessionID">;
844
+ };
845
+ }>;
768
846
  }, import("effect/Schema").Struct<{
769
847
  readonly id: import("effect/Schema").brand<import("effect/Schema").String, "Event.ID"> & {
770
848
  create: () => string & import("effect/Brand").Brand<"Event.ID">;
@@ -6554,6 +6632,11 @@ export declare const Api: import("@opencode/protocol/api").Api<LocationMiddlewar
6554
6632
  readonly providerID: string & import("effect/Brand").Brand<"Provider.ID">;
6555
6633
  readonly variant?: (string & import("effect/Brand").Brand<"Model.VariantID">) | undefined;
6556
6634
  } | undefined;
6635
+ readonly permissions?: readonly {
6636
+ readonly action: string;
6637
+ readonly resource: string;
6638
+ readonly effect: "allow" | "deny" | "ask";
6639
+ }[] | undefined;
6557
6640
  readonly agent?: (string & import("effect/Brand").Brand<"Agent.ID">) | undefined;
6558
6641
  readonly subpath?: (string & import("effect/Brand").Brand<"RelativePath">) | undefined;
6559
6642
  readonly parentID?: (string & import("effect/Brand").Brand<"SessionID">) | undefined;
@@ -6667,6 +6750,30 @@ export declare const Api: import("@opencode/protocol/api").Api<LocationMiddlewar
6667
6750
  readonly metadata?: {
6668
6751
  readonly [x: string]: unknown;
6669
6752
  } | undefined;
6753
+ } | {
6754
+ readonly id: string & import("effect/Brand").Brand<"Event.ID">;
6755
+ readonly data: {
6756
+ readonly permissions: readonly {
6757
+ readonly action: string;
6758
+ readonly resource: string;
6759
+ readonly effect: "allow" | "deny" | "ask";
6760
+ }[];
6761
+ readonly sessionID: string & import("effect/Brand").Brand<"SessionID">;
6762
+ };
6763
+ readonly durable: {
6764
+ readonly aggregateID: string;
6765
+ readonly seq: number & import("effect/Brand").Brand<"Event.Seq">;
6766
+ readonly version: number & import("effect/Brand").Brand<"Event.Version">;
6767
+ };
6768
+ readonly type: "session.permissions.updated";
6769
+ readonly created: number;
6770
+ readonly location?: {
6771
+ readonly directory: string & import("effect/Brand").Brand<"AbsolutePath">;
6772
+ readonly workspaceID?: (string & import("effect/Brand").Brand<"Workspace.ID">) | undefined;
6773
+ } | undefined;
6774
+ readonly metadata?: {
6775
+ readonly [x: string]: unknown;
6776
+ } | undefined;
6670
6777
  } | {
6671
6778
  readonly id: string & import("effect/Brand").Brand<"Event.ID">;
6672
6779
  readonly data: {
@@ -1,4 +1,4 @@
1
1
  import { Instance } from "@opencode/core/instance/service";
2
2
  import { PermissionSaved } from "@opencode/core/permission/saved";
3
3
  import { Session } from "@opencode/core/session";
4
- export declare const PermissionHandler: import("effect/Layer").Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.permission">, never, Session.Service | Instance.Service | import("../middleware/session-location").SessionLocationMiddleware | (import("@opencode/protocol/middleware/schema-error").SchemaErrorMiddleware | import("@opencode/protocol/middleware/authorization").Authorization | import("../location").LocationMiddleware | import("effect/unstable/http/HttpRouter").Request<"Requires", PermissionSaved.Service>)>;
4
+ export declare const PermissionHandler: import("effect/Layer").Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"server", "server.permission">, never, import("@opencode/protocol/middleware/schema-error").SchemaErrorMiddleware | import("@opencode/protocol/middleware/authorization").Authorization | Session.Service | Instance.Service | import("../location").LocationMiddleware | import("../middleware/session-location").SessionLocationMiddleware | import("effect/unstable/http/HttpRouter").Request<"Requires", PermissionSaved.Service>>;
@@ -43,6 +43,9 @@ export const PermissionHandler = HttpApiBuilder.group(Api, "server.permission",
43
43
  })).handle("session.permission.reply", Effect.fn(function* (ctx) {
44
44
  yield* (yield* requireOwnedRequest(ctx.params.sessionID, ctx.params.requestID)).permission.reply({ requestID: ctx.params.requestID, reply: ctx.payload.reply, message: ctx.payload.message }).pipe(Effect.catchTag("Permission.NotFoundError", () => missingRequest(ctx.params.requestID)));
45
45
  return HttpApiSchema.NoContent.make();
46
+ })).handle("session.permission.rules", Effect.fn(function* (ctx) {
47
+ yield* sessions.setPermissions({ sessionID: ctx.params.sessionID, permissions: ctx.payload.permissions }).pipe(Effect.catchTag("Session.NotFoundError", missingSession));
48
+ return HttpApiSchema.NoContent.make();
46
49
  })).handle("permission.saved.list", Effect.fn(function* (ctx) {
47
50
  const location = yield* Location.Service;
48
51
  return {
@@ -77,6 +77,7 @@ export const SessionHandler = HttpApiBuilder.group(Api, "server.session", (handl
77
77
  agent: ctx.payload.agent,
78
78
  model: ctx.payload.model,
79
79
  metadata: ctx.payload.metadata,
80
+ permissions: ctx.payload.permissions,
80
81
  location: ctx.payload.location ?? { directory: AbsolutePath.make(process.cwd()) }
81
82
  }).pipe(Effect.orDie)
82
83
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@opencode/server",
4
- "version": "0.0.0-beta-19425",
4
+ "version": "0.0.0-beta-19500",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -30,17 +30,17 @@
30
30
  "dependencies": {
31
31
  "@effect/platform-node": "4.0.0-rc.112",
32
32
  "@effect/platform-node-shared": "4.0.0-rc.112",
33
- "@opencode/core": "0.0.0-beta-19425",
34
- "@opencode/protocol": "0.0.0-beta-19425",
35
- "@opencode/schema": "0.0.0-beta-19425",
36
- "@opencode/simulation": "0.0.0-beta-19425",
37
- "@opencode/util": "0.0.0-beta-19425",
33
+ "@opencode/core": "0.0.0-beta-19500",
34
+ "@opencode/protocol": "0.0.0-beta-19500",
35
+ "@opencode/schema": "0.0.0-beta-19500",
36
+ "@opencode/simulation": "0.0.0-beta-19500",
37
+ "@opencode/util": "0.0.0-beta-19500",
38
38
  "drizzle-orm": "1.0.0-rc.5-169397b",
39
39
  "effect": "4.0.0-rc.112"
40
40
  },
41
41
  "devDependencies": {
42
- "@opencode/client": "0.0.0-beta-19425",
43
- "@opencode/plugin": "0.0.0-beta-19425",
42
+ "@opencode/client": "0.0.0-beta-19500",
43
+ "@opencode/plugin": "0.0.0-beta-19500",
44
44
  "@tsconfig/bun": "1.0.9",
45
45
  "@types/bun": "1.4.0",
46
46
  "@typescript/native-preview": "7.0.0-dev.20251207.1"