feat(core): gate scheduled prompts with shell checks (#60137)

This commit is contained in:
Kit Langton
2026-10-29 10:10:18 -07:00
committed by GitHub
Unverified
parent 756f832902
commit c784d17b83
20 changed files with 1482 additions and 90 deletions
+5
View File
@@ -1,3 +1,4 @@
import { Permission } from "@opencode/core/permission"
import { Schedule } from "@opencode/core/schedule"
import type { Session } from "@opencode/core/session"
import { ForbiddenError, InvalidRequestError, ScheduleNotFoundError } from "@opencode/protocol/errors"
@@ -29,12 +30,16 @@ export const makeSchedule = Effect.gen(function* () {
return {
create: (payload: CreatePayload) =>
// Stateless HTTP callers have no guaranteed UI listener to answer an interactive ask, so settle asks unattended.
schedules.create(Schedule.toCreateInput(payload.sessionID, payload)).pipe(
Effect.provideService(Permission.Unattended, []),
Effect.map((data) => ({ data })),
Effect.catchTags({
"Schedule.InvalidError": (error) =>
Effect.fail(new InvalidRequestError({ message: error.message, kind: "schedule" })),
"Schedule.DisabledError": () => Effect.fail(disabled()),
"Permission.BlockedError": (error) => Effect.fail(new ForbiddenError({ message: error.message })),
"Permission.CorrectedError": (error) => Effect.fail(new ForbiddenError({ message: error.feedback })),
"Session.NotFoundError": (error) => Effect.fail(missingSession(error)),
}),
),