diff --git a/packages/opencode/src/server/instance/session.ts b/packages/opencode/src/server/instance/session.ts index a2a15d59ec..016fb3ee1a 100644 --- a/packages/opencode/src/server/instance/session.ts +++ b/packages/opencode/src/server/instance/session.ts @@ -273,6 +273,7 @@ export const SessionRoutes = lazy(() => "json", z.object({ title: z.string().optional(), + permission: Permission.Ruleset.optional(), time: z .object({ archived: z.number().optional(), @@ -283,10 +284,17 @@ export const SessionRoutes = lazy(() => async (c) => { const sessionID = c.req.valid("param").sessionID const updates = c.req.valid("json") + const current = await Session.get(sessionID) if (updates.title !== undefined) { await Session.setTitle({ sessionID, title: updates.title }) } + if (updates.permission !== undefined) { + await Session.setPermission({ + sessionID, + permission: Permission.merge(current.permission ?? [], updates.permission), + }) + } if (updates.time?.archived !== undefined) { await Session.setArchived({ sessionID, time: updates.time.archived }) } diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index d7bf99637a..70deb95a4b 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -708,6 +708,11 @@ export namespace Session { runPromise((svc) => svc.setArchived(input)), ) + export const setPermission = fn( + z.object({ sessionID: SessionID.zod, permission: Permission.Ruleset }), + (input) => runPromise((svc) => svc.setPermission(input)), + ) + export const setRevert = fn( z.object({ sessionID: SessionID.zod, revert: Info.shape.revert, summary: Info.shape.summary }), (input) => diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index d06a504d6c..7fba60fcef 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -1725,6 +1725,7 @@ export class Session2 extends HeyApiClient { directory?: string workspace?: string title?: string + permission?: PermissionRuleset time?: { archived?: number } @@ -1740,6 +1741,7 @@ export class Session2 extends HeyApiClient { { in: "query", key: "directory" }, { in: "query", key: "workspace" }, { in: "body", key: "title" }, + { in: "body", key: "permission" }, { in: "body", key: "time" }, ], }, diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index de45b1599b..f2b32a1593 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -3266,6 +3266,7 @@ export type SessionGetResponse = SessionGetResponses[keyof SessionGetResponses] export type SessionUpdateData = { body?: { title?: string + permission?: PermissionRuleset time?: { archived?: number }