Skip to content

Where people and agents ship software together. The open-source git platform for the whole job: issues, agents, checks and deploys to the edge.

g1t.sh
45 linesCodeBlameRaw
1import { data } from "react-router";
2
3import type { Route } from "./+types/guardrails";
4import { GuardrailsForm } from "../../components/guardrails";
5import { usePending } from "../../components/ui";
6import { SANDBOX_RUN_KINDS, settingsFromForm } from "../../lib/guardrails";
7import { page } from "../../lib/meta";
8import { guardrails } from "../../lib/services.server";
9import { assertSameOrigin, getViewer, requireUser, roleIn, unwrap } from "../../lib/session.server";
10
11export function meta({ params, ...args }: Route.MetaArgs) {
12 return page(args, { title: `Guardrails · ${params.owner} · g1t` });
13}
14
15export async function loader({ params, context }: Route.LoaderArgs) {
16 const viewer = getViewer(context);
17 const role = roleIn(viewer, params.owner);
18 if (!role) throw data(null, { status: 404 });
19 const view = await guardrails.getGuardrails(viewer, params.owner);
20 return { view: unwrap(view), owner: role === "owner" };
21}
22
23export async function action({ request, params, context }: Route.ActionArgs) {
24 assertSameOrigin(request);
25 const user = requireUser(context, request);
26 const form = await request.formData();
27 const settings = settingsFromForm(form, { kinds: SANDBOX_RUN_KINDS });
28 const saved = await guardrails.updateGuardrails(user, params.owner, null, settings);
29 return saved.ok ? { saved: true, error: null } : { saved: false, error: saved.error.message };
30}
31
32export default function WorkspaceGuardrails({ loaderData, actionData }: Route.ComponentProps) {
33 // Until the saved settings are back on the page, not just until the post is answered.
34 const saving = usePending();
35 return (
36 <GuardrailsForm
37 view={loaderData.view}
38 level="workspace"
39 editable={loaderData.owner}
40 saving={saving}
41 saved={actionData?.saved ?? false}
42 error={actionData?.error}
43 />
44 );
45}