Add bot schedules (routines), open Activity, add Help and a Desktop computer view

Bots create, list, update and delete schedules (cron_jobs, Bun.cron in UTC);
a per-minute cron queues due runs as tasks. Routines, Activity (super admins)
and Help get their own rail aside. Help covers familiar problems, starting
with signing in to Google through Cookie-Editor over the new Desktop (noVNC)
view.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-19 10:52:32 +01:00
co-authored by Claude Opus 5.5
parent f24c0d7e82
commit c44048dbab
62 changed files with 1904 additions and 78 deletions
+10 -3
View File
@@ -1,8 +1,15 @@
/**
* The admin sections that are live. Any other `/admin/*` path redirects to
* `AdminHomePath`. People, logs and backups exist in code but stay closed
* until they are added back here.
* `AdminHomePath`. People and backups exist in code but stay closed until
* they are added back here. Logs (Activity) is super admins only.
*/
export const AdminSections = ["/admin/bots", "/admin/workspaces", "/admin/settings"] as const;
export const AdminSections = [
"/admin/bots",
"/admin/workspaces",
"/admin/routines",
"/admin/logs",
"/admin/help",
"/admin/settings",
] as const;
export const AdminHomePath = "/admin/bots";
+10 -2
View File
@@ -110,8 +110,11 @@ export const ComputerMcpExcludedTools = [
/**
* How the user can open a computer, each one of the AIO sandbox's own
* apps at `path` (relative to the computer's address). More of them
* (VNC, opencode, codex) can join later.
* apps at `path` (relative to the computer's address; `{prefix}` is the
* computer's app address without its leading slash, e.g. `computers/3/`).
* Desktop is the whole screen over VNC: the only view with the browser's
* toolbar (extensions) and a clipboard panel. More of them (opencode,
* codex) can join later.
*/
export const ComputerViewModes = [
{
@@ -129,6 +132,11 @@ export const ComputerViewModes = [
value: "code",
path: "code-server/",
},
{
title: "Desktop",
value: "desktop",
path: "vnc/vnc.html?autoconnect=true&resize=scale&reconnect=true&path={prefix}websockify",
},
] as const;
export type ComputerViewMode = (typeof ComputerViewModes)[number]["value"];
+9
View File
@@ -0,0 +1,9 @@
/**
* The help page, and the topics other code points to.
*/
export const HelpPath = "/admin/help";
/**
* Signing in to Google and other strict sites with Cookie-Editor.
*/
export const HelpSignInTopicId = "sign-in-with-cookies";
+25
View File
@@ -0,0 +1,25 @@
import { Activity, CircleHelp, Clock, type LucideIcon } from "lucide-react";
import { HelpPath } from "./help-dict";
export type RailPage = {
title: string;
url: string;
Icon: LucideIcon;
/**
* Shown and served to super admins only.
*/
super_admin_only?: boolean;
};
export const RoutinesPath = "/admin/routines";
export const ActivityPath = "/admin/logs";
/**
* Pages opened from the rail's user popover that have their own rail: a
* back link, then this list (like settings).
*/
export const RailPages: RailPage[] = [
{ title: "Routines", url: RoutinesPath, Icon: Clock },
{ title: "Activity", url: ActivityPath, Icon: Activity, super_admin_only: true },
{ title: "Help", url: HelpPath, Icon: CircleHelp },
];