Extend the model picker to schedules

schedules.model_id (migration 0013) pins every fired run of a recurring spawn
to a registered model backend, exactly like a hand-spawned agent: the worker
copies it into each firing's spawn payload, the launched agent records the pin,
and resumes stay on the same backend. The Schedules form gets the same Model
dropdown as the spawn form (Claude subscription by default), with a badge in
the schedules table. Create/update routes fail fast on a missing or disabled
backend so a stale selection bounces immediately instead of every firing
failing asynchronously in Activity; a backend deleted later still fails each
firing visibly rather than silently falling back to the subscription.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DzDofD7gP63WpeLG8vEdZu
This commit is contained in:
Claude
2026-07-29 18:54:31 +00:00
parent 2d5c0e34d7
commit 44632ea771
40 changed files with 208 additions and 51 deletions
+3 -1
View File
@@ -236,7 +236,9 @@ What the dashboard can now do (all state-changing actions require `ADMIN_TOKEN`)
enqueues a `sync` command so the worker clones it. Manual mode (existing `root_dir`) enqueues a `sync` command so the worker clones it. Manual mode (existing `root_dir`)
still works; every project with a remote gets a **Pull now** button, and spawn always still works; every project with a remote gets a **Pull now** button, and spawn always
pulls first. pulls first.
- **Schedules** — recurring agent spawns: a name prefix, a prompt, and an interval. The - **Schedules** — recurring agent spawns: a name prefix, a prompt, an interval, and
optionally a **model backend** (the same dropdown the spawn form has — every fired run
spawns on it). The
worker fires each due schedule as a normal queued `spawn` with a timestamped agent name worker fires each due schedule as a normal queued `spawn` with a timestamped agent name
(`nightly-20260710-090000`), so runs are fresh, stateless agents and show up in (`nightly-20260710-090000`), so runs are fresh, stateless agents and show up in
Activity. The canonical prompt keeps its state in the repo: *"Read @notes.md, continue Activity. The canonical prompt keeps its state in the repo: *"Read @notes.md, continue
+2 -1
View File
@@ -14,7 +14,8 @@ thing a **model backend** changes is the environment of that one agent's process
| `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | `1` (skip sidecar calls a local endpoint won't serve; override via the row's env map) | | `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | `1` (skip sidecar calls a local endpoint won't serve; override via the row's env map) |
Register backends on the dashboard's **Claude → Models** tab (or `POST /claude/models`), Register backends on the dashboard's **Claude → Models** tab (or `POST /claude/models`),
then pick one from the **Model** dropdown when spawning an agent. No selection = the then pick one from the **Model** dropdown when spawning an agent — or on a **Schedule**,
so every fired run spawns on that backend. No selection = the
worker's logged-in Claude subscription, exactly as before. The agent is *pinned* to its worker's logged-in Claude subscription, exactly as before. The agent is *pinned* to its
backend: resumes come back up on the same one, and deleting a backend makes resumes of backend: resumes come back up on the same one, and deleting a backend makes resumes of
its agents fail loudly rather than silently falling back to the subscription. its agents fail loudly rather than silently falling back to the subscription.
@@ -36,7 +36,7 @@ function intervalLabel(seconds: number): string {
return `every ${seconds}s`; return `every ${seconds}s`;
} }
const emptyForm = { name_prefix: "", task: "", interval: "3600", role: "" }; const emptyForm = { name_prefix: "", task: "", interval: "3600", role: "", model_id: "" };
export function SchedulesSection() { export function SchedulesSection() {
const s = useDashboard(); const s = useDashboard();
@@ -46,6 +46,21 @@ export function SchedulesSection() {
() => s.projects.map((p) => ({ value: p.id, label: p.id })), () => s.projects.map((p) => ({ value: p.id, label: p.id })),
[s.projects], [s.projects],
); );
/* Same choice the spawn form offers: Claude subscription by default, plus every
* enabled backend from the Claude page's Models tab. Every fired run spawns on it. */
const modelOpts = useMemo(
() => [
{ value: "", label: "Claude (subscription)" },
...s.claudeModels
.filter((m) => m.enabled)
.map((m) => ({ value: String(m.id), label: `${m.name} (${m.model})` })),
],
[s.claudeModels],
);
const modelName = useMemo(() => {
const byId = new Map(s.claudeModels.map((m) => [m.id, m.name]));
return (id: number | null | undefined) => (id == null ? null : byId.get(id) ?? `#${id}`);
}, [s.claudeModels]);
const create = async () => { const create = async () => {
const ok = await s.createSchedule(s.selectedProjectId, { const ok = await s.createSchedule(s.selectedProjectId, {
@@ -53,6 +68,7 @@ export function SchedulesSection() {
task: form.task, task: form.task,
interval_seconds: Number(form.interval), interval_seconds: Number(form.interval),
role: form.role, role: form.role,
model_id: form.model_id,
}); });
if (ok) setForm(emptyForm); if (ok) setForm(emptyForm);
}; };
@@ -107,6 +123,12 @@ export function SchedulesSection() {
onChange={(v) => setForm({ ...form, role: v })} onChange={(v) => setForm({ ...form, role: v })}
options={ROLE_OPTS} options={ROLE_OPTS}
/> />
<Select
label="Model"
value={form.model_id}
onChange={(v) => setForm({ ...form, model_id: v })}
options={modelOpts}
/>
</div> </div>
<div className="mt14"> <div className="mt14">
<Textarea <Textarea
@@ -167,6 +189,12 @@ export function SchedulesSection() {
<Badge tone="info">{sc.role}</Badge> <Badge tone="info">{sc.role}</Badge>
</> </>
) : null} ) : null}
{sc.model_id != null ? (
<>
{" "}
<Badge tone="warning">{modelName(sc.model_id)}</Badge>
</>
) : null}
</td> </td>
<td className="mono faint">{sc.project_id}</td> <td className="mono faint">{sc.project_id}</td>
<td className="nowrap">{intervalLabel(sc.interval_seconds)}</td> <td className="nowrap">{intervalLabel(sc.interval_seconds)}</td>
+6 -2
View File
@@ -231,6 +231,8 @@ export interface ScheduleBody {
task: string; task: string;
interval_seconds: number; interval_seconds: number;
role: string; role: string;
/* Model backend id as a select value; "" = the Claude subscription. */
model_id: string;
} }
export interface ApprovalBody { export interface ApprovalBody {
branch: string; branch: string;
@@ -496,7 +498,8 @@ export function DashboardProvider({
const s = sectionRef.current; const s = sectionRef.current;
const run = selectedRunRef.current; const run = selectedRunRef.current;
if (run) await loadRun(run.projectId, run.name); if (run) await loadRun(run.projectId, run.name);
if (s === "agents") await loadClaudeModels(); // the spawn form's model dropdown // The spawn/schedule forms' model dropdowns.
if (s === "agents" || s === "schedules") await loadClaudeModels();
if (s === "approvals") await loadApprovals(selectedProjectRef.current); if (s === "approvals") await loadApprovals(selectedProjectRef.current);
if (s === "servers") await loadHosts(); if (s === "servers") await loadHosts();
if (s === "activity") await loadCommands(); if (s === "activity") await loadCommands();
@@ -527,7 +530,7 @@ export function DashboardProvider({
(s: Section) => { (s: Section) => {
setSectionRaw(s); setSectionRaw(s);
setCmd({ text: "", error: false, busy: false }); setCmd({ text: "", error: false, busy: false });
if (s === "agents") void loadClaudeModels(); if (s === "agents" || s === "schedules") void loadClaudeModels();
if (s === "approvals") void loadApprovals(selectedProjectRef.current); if (s === "approvals") void loadApprovals(selectedProjectRef.current);
if (s === "servers") void loadHosts(); if (s === "servers") void loadHosts();
if (s === "activity") void loadCommands(); if (s === "activity") void loadCommands();
@@ -894,6 +897,7 @@ export function DashboardProvider({
task: b.task.trim(), task: b.task.trim(),
interval_seconds: b.interval_seconds, interval_seconds: b.interval_seconds,
role: b.role || null, role: b.role || null,
model_id: b.model_id ? Number(b.model_id) : null,
}, },
}); });
setCmd({ setCmd({
+2
View File
@@ -135,6 +135,8 @@ export interface Schedule {
role?: string | null; role?: string | null;
worktree?: string | null; worktree?: string | null;
subdir?: string | null; subdir?: string | null;
/* Model backend every fired run spawns on (see ClaudeModel); null = subscription. */
model_id?: number | null;
interval_seconds: number; interval_seconds: number;
enabled: boolean; enabled: boolean;
next_run_at: string; next_run_at: string;
+18
View File
@@ -33,6 +33,20 @@ def _schedule_or_404(conn: Connection, schedule_id: int) -> dict:
return schedule return schedule
def _check_model(conn: Connection, model_id: int | None) -> None:
"""Fail-fast for the model dropdown, mirroring the spawn route: a stale or disabled
selection bounces now instead of every firing failing asynchronously in Activity."""
if model_id is None:
return
model = repo.get_claude_model(conn, model_id)
if model is None:
raise HTTPException(status.HTTP_400_BAD_REQUEST, detail=f"model {model_id} not found")
if not model["enabled"]:
raise HTTPException(
status.HTTP_400_BAD_REQUEST, detail=f"model backend '{model['name']}' is disabled"
)
@router.get("/schedules", response_model=list[ScheduleOut]) @router.get("/schedules", response_model=list[ScheduleOut])
def list_all_schedules(conn: Connection = Depends(db_conn)) -> list[dict]: def list_all_schedules(conn: Connection = Depends(db_conn)) -> list[dict]:
return repo.list_schedules(conn) return repo.list_schedules(conn)
@@ -56,6 +70,7 @@ def create_schedule(
raise HTTPException( raise HTTPException(
status.HTTP_404_NOT_FOUND, detail=f"project '{project_id}' not found" status.HTTP_404_NOT_FOUND, detail=f"project '{project_id}' not found"
) )
_check_model(conn, body.model_id)
# next_run_at starts at now, so the first run fires on the worker's next pass — the # next_run_at starts at now, so the first run fires on the worker's next pass — the
# operator sees the schedule work immediately instead of waiting a full interval. # operator sees the schedule work immediately instead of waiting a full interval.
return repo.create_schedule( return repo.create_schedule(
@@ -68,6 +83,7 @@ def create_schedule(
role=body.role, role=body.role,
worktree=body.worktree, worktree=body.worktree,
subdir=body.subdir, subdir=body.subdir,
model_id=body.model_id,
enabled=body.enabled, enabled=body.enabled,
) )
@@ -82,6 +98,8 @@ def update_schedule(
) -> dict: ) -> dict:
_schedule_or_404(conn, schedule_id) _schedule_or_404(conn, schedule_id)
fields = body.model_dump(exclude_unset=True) fields = body.model_dump(exclude_unset=True)
if fields.get("model_id") is not None:
_check_model(conn, fields["model_id"])
return repo.update_schedule(conn, schedule_id, **fields) return repo.update_schedule(conn, schedule_id, **fields)
+10 -2
View File
@@ -221,7 +221,10 @@ class HostOut(BaseModel):
class ScheduleIn(BaseModel): class ScheduleIn(BaseModel):
"""A recurring agent spawn: every ``interval_seconds``, run ``task`` as a fresh """A recurring agent spawn: every ``interval_seconds``, run ``task`` as a fresh
agent named ``<name_prefix>-<timestamp>``. The first run fires on the worker's next agent named ``<name_prefix>-<timestamp>``. The first run fires on the worker's next
pass (``next_run_at`` starts at now).""" pass (``next_run_at`` starts at now). ``model_id`` picks a registered model backend
(``/claude/models``) for every fired run; omit it for the Claude subscription."""
model_config = ConfigDict(protected_namespaces=())
name_prefix: str = Field(min_length=1) name_prefix: str = Field(min_length=1)
task: str = Field(min_length=1) task: str = Field(min_length=1)
@@ -229,21 +232,25 @@ class ScheduleIn(BaseModel):
role: Role | None = None role: Role | None = None
worktree: str | None = None worktree: str | None = None
subdir: str | None = None subdir: str | None = None
model_id: int | None = None
enabled: bool = True enabled: bool = True
class ScheduleUpdateIn(BaseModel): class ScheduleUpdateIn(BaseModel):
model_config = ConfigDict(protected_namespaces=())
name_prefix: str | None = Field(default=None, min_length=1) name_prefix: str | None = Field(default=None, min_length=1)
task: str | None = Field(default=None, min_length=1) task: str | None = Field(default=None, min_length=1)
interval_seconds: int | None = Field(default=None, ge=10) interval_seconds: int | None = Field(default=None, ge=10)
role: Role | None = None role: Role | None = None
worktree: str | None = None worktree: str | None = None
subdir: str | None = None subdir: str | None = None
model_id: int | None = None
enabled: bool | None = None enabled: bool | None = None
class ScheduleOut(BaseModel): class ScheduleOut(BaseModel):
model_config = ConfigDict(from_attributes=True) model_config = ConfigDict(from_attributes=True, protected_namespaces=())
id: int id: int
project_id: str project_id: str
@@ -252,6 +259,7 @@ class ScheduleOut(BaseModel):
role: Role | None = None role: Role | None = None
worktree: str | None = None worktree: str | None = None
subdir: str | None = None subdir: str | None = None
model_id: int | None = None
interval_seconds: int interval_seconds: int
enabled: bool enabled: bool
next_run_at: datetime next_run_at: datetime
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,8 +1,8 @@
2:I[9107,[],"ClientPageRoot"] 2:I[9107,[],"ClientPageRoot"]
3:I[7839,["171","static/chunks/171-7eacb8f2c45d0186.js","263","static/chunks/app/activity/page-809b415dd18cb14e.js"],"default",1] 3:I[7839,["171","static/chunks/171-19de960b70cee25e.js","263","static/chunks/app/activity/page-809b415dd18cb14e.js"],"default",1]
4:I[4707,[],""] 4:I[4707,[],""]
5:I[6423,[],""] 5:I[6423,[],""]
6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-7eacb8f2c45d0186.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"] 6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-19de960b70cee25e.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"]
0:["KmcUQ9fxOry3HfFR_U9HV",[[["",{"children":["activity",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["activity",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","activity","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 0:["4cEQAcmEL0RnY9yw8HjTQ",[[["",{"children":["activity",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["activity",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","activity","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]]
7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]]
1:null 1:null
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,8 +1,8 @@
2:I[9107,[],"ClientPageRoot"] 2:I[9107,[],"ClientPageRoot"]
3:I[2506,["171","static/chunks/171-7eacb8f2c45d0186.js","718","static/chunks/app/agents/page-65cc70b94cb9abd3.js"],"default",1] 3:I[2506,["171","static/chunks/171-19de960b70cee25e.js","718","static/chunks/app/agents/page-65cc70b94cb9abd3.js"],"default",1]
4:I[4707,[],""] 4:I[4707,[],""]
5:I[6423,[],""] 5:I[6423,[],""]
6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-7eacb8f2c45d0186.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"] 6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-19de960b70cee25e.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"]
0:["KmcUQ9fxOry3HfFR_U9HV",[[["",{"children":["agents",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["agents",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","agents","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 0:["4cEQAcmEL0RnY9yw8HjTQ",[[["",{"children":["agents",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["agents",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","agents","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]]
7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]]
1:null 1:null
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,8 +1,8 @@
2:I[9107,[],"ClientPageRoot"] 2:I[9107,[],"ClientPageRoot"]
3:I[2651,["171","static/chunks/171-7eacb8f2c45d0186.js","163","static/chunks/app/approvals/page-8d5622be330f4d01.js"],"default",1] 3:I[2651,["171","static/chunks/171-19de960b70cee25e.js","163","static/chunks/app/approvals/page-8d5622be330f4d01.js"],"default",1]
4:I[4707,[],""] 4:I[4707,[],""]
5:I[6423,[],""] 5:I[6423,[],""]
6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-7eacb8f2c45d0186.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"] 6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-19de960b70cee25e.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"]
0:["KmcUQ9fxOry3HfFR_U9HV",[[["",{"children":["approvals",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["approvals",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","approvals","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 0:["4cEQAcmEL0RnY9yw8HjTQ",[[["",{"children":["approvals",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["approvals",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","approvals","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]]
7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]]
1:null 1:null
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,8 +1,8 @@
2:I[9107,[],"ClientPageRoot"] 2:I[9107,[],"ClientPageRoot"]
3:I[6529,["171","static/chunks/171-7eacb8f2c45d0186.js","877","static/chunks/app/claude/page-235e137771d99edc.js"],"default",1] 3:I[6529,["171","static/chunks/171-19de960b70cee25e.js","877","static/chunks/app/claude/page-235e137771d99edc.js"],"default",1]
4:I[4707,[],""] 4:I[4707,[],""]
5:I[6423,[],""] 5:I[6423,[],""]
6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-7eacb8f2c45d0186.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"] 6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-19de960b70cee25e.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"]
0:["KmcUQ9fxOry3HfFR_U9HV",[[["",{"children":["claude",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["claude",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","claude","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 0:["4cEQAcmEL0RnY9yw8HjTQ",[[["",{"children":["claude",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["claude",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","claude","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]]
7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]]
1:null 1:null
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,8 +1,8 @@
2:I[9107,[],"ClientPageRoot"] 2:I[9107,[],"ClientPageRoot"]
3:I[3807,["171","static/chunks/171-7eacb8f2c45d0186.js","931","static/chunks/app/page-cf68f34e95b90a40.js"],"default",1] 3:I[3807,["171","static/chunks/171-19de960b70cee25e.js","931","static/chunks/app/page-cf68f34e95b90a40.js"],"default",1]
4:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-7eacb8f2c45d0186.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"] 4:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-19de960b70cee25e.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"]
5:I[4707,[],""] 5:I[4707,[],""]
6:I[6423,[],""] 6:I[6423,[],""]
0:["KmcUQ9fxOry3HfFR_U9HV",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 0:["4cEQAcmEL0RnY9yw8HjTQ",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]]
7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]]
1:null 1:null
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -2,7 +2,7 @@
3:I[6374,["626","static/chunks/app/login/page-b08c6695be5632dd.js"],"default",1] 3:I[6374,["626","static/chunks/app/login/page-b08c6695be5632dd.js"],"default",1]
4:I[4707,[],""] 4:I[4707,[],""]
5:I[6423,[],""] 5:I[6423,[],""]
6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-7eacb8f2c45d0186.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"] 6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-19de960b70cee25e.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"]
0:["KmcUQ9fxOry3HfFR_U9HV",[[["",{"children":["login",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["login",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","login","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 0:["4cEQAcmEL0RnY9yw8HjTQ",[[["",{"children":["login",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["login",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","login","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]]
7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]]
1:null 1:null
File diff suppressed because one or more lines are too long
@@ -1,8 +1,8 @@
2:I[9107,[],"ClientPageRoot"] 2:I[9107,[],"ClientPageRoot"]
3:I[3641,["171","static/chunks/171-7eacb8f2c45d0186.js","27","static/chunks/app/repositories/page-fb0c29b8dc7ed817.js"],"default",1] 3:I[3641,["171","static/chunks/171-19de960b70cee25e.js","27","static/chunks/app/repositories/page-fb0c29b8dc7ed817.js"],"default",1]
4:I[4707,[],""] 4:I[4707,[],""]
5:I[6423,[],""] 5:I[6423,[],""]
6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-7eacb8f2c45d0186.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"] 6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-19de960b70cee25e.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"]
0:["KmcUQ9fxOry3HfFR_U9HV",[[["",{"children":["repositories",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["repositories",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","repositories","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 0:["4cEQAcmEL0RnY9yw8HjTQ",[[["",{"children":["repositories",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["repositories",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","repositories","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]]
7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]]
1:null 1:null
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,8 +1,8 @@
2:I[9107,[],"ClientPageRoot"] 2:I[9107,[],"ClientPageRoot"]
3:I[5124,["171","static/chunks/171-7eacb8f2c45d0186.js","95","static/chunks/app/schedules/page-db675df274be2677.js"],"default",1] 3:I[5124,["171","static/chunks/171-19de960b70cee25e.js","95","static/chunks/app/schedules/page-4398c9c829e1b9fd.js"],"default",1]
4:I[4707,[],""] 4:I[4707,[],""]
5:I[6423,[],""] 5:I[6423,[],""]
6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-7eacb8f2c45d0186.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"] 6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-19de960b70cee25e.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"]
0:["KmcUQ9fxOry3HfFR_U9HV",[[["",{"children":["schedules",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["schedules",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","schedules","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 0:["4cEQAcmEL0RnY9yw8HjTQ",[[["",{"children":["schedules",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["schedules",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","schedules","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]]
7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]]
1:null 1:null
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,8 +1,8 @@
2:I[9107,[],"ClientPageRoot"] 2:I[9107,[],"ClientPageRoot"]
3:I[4646,["171","static/chunks/171-7eacb8f2c45d0186.js","664","static/chunks/app/servers/page-7cfc66d88412e3d1.js"],"default",1] 3:I[4646,["171","static/chunks/171-19de960b70cee25e.js","664","static/chunks/app/servers/page-7cfc66d88412e3d1.js"],"default",1]
4:I[4707,[],""] 4:I[4707,[],""]
5:I[6423,[],""] 5:I[6423,[],""]
6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-7eacb8f2c45d0186.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"] 6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-19de960b70cee25e.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"]
0:["KmcUQ9fxOry3HfFR_U9HV",[[["",{"children":["servers",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["servers",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","servers","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 0:["4cEQAcmEL0RnY9yw8HjTQ",[[["",{"children":["servers",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["servers",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","servers","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]]
7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]]
1:null 1:null
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,8 +1,8 @@
2:I[9107,[],"ClientPageRoot"] 2:I[9107,[],"ClientPageRoot"]
3:I[9475,["171","static/chunks/171-7eacb8f2c45d0186.js","856","static/chunks/app/shared/page-dc7068fcf86ab8e4.js"],"default",1] 3:I[9475,["171","static/chunks/171-19de960b70cee25e.js","856","static/chunks/app/shared/page-dc7068fcf86ab8e4.js"],"default",1]
4:I[4707,[],""] 4:I[4707,[],""]
5:I[6423,[],""] 5:I[6423,[],""]
6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-7eacb8f2c45d0186.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"] 6:I[5520,["258","static/chunks/258-022159d3c3089cd0.js","171","static/chunks/171-19de960b70cee25e.js","185","static/chunks/app/layout-c7c117ef7b86bf6f.js"],"AppFrame"]
0:["KmcUQ9fxOry3HfFR_U9HV",[[["",{"children":["shared",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["shared",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","shared","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 0:["4cEQAcmEL0RnY9yw8HjTQ",[[["",{"children":["shared",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["shared",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[null,["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children","shared","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bbd6ee1e7265be74.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L6",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]]
7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Handler · Claude Activity"}],["$","meta","3",{"name":"description","content":"Monitor and manage Claude Code agents across projects."}],["$","link","4",{"rel":"icon","href":"/icon.svg?bab509b45a421e43","type":"image/svg+xml","sizes":"any"}]]
1:null 1:null
+1 -1
View File
@@ -387,7 +387,7 @@ def fire_due_schedules(now: datetime | None = None) -> int:
for sched in due: for sched in due:
name = f"{sched['name_prefix']}-{now.strftime('%Y%m%d-%H%M%S')}" name = f"{sched['name_prefix']}-{now.strftime('%Y%m%d-%H%M%S')}"
payload: dict = {"task": sched["task"]} payload: dict = {"task": sched["task"]}
for key in ("role", "worktree", "subdir"): for key in ("role", "worktree", "subdir", "model_id"):
if sched.get(key): if sched.get(key):
payload[key] = sched[key] payload[key] = sched[key]
with connection() as conn: with connection() as conn:
+3
View File
@@ -627,6 +627,7 @@ def create_schedule(
role: str | None = None, role: str | None = None,
worktree: str | None = None, worktree: str | None = None,
subdir: str | None = None, subdir: str | None = None,
model_id: int | None = None,
enabled: bool = True, enabled: bool = True,
) -> dict: ) -> dict:
result = conn.execute( result = conn.execute(
@@ -637,6 +638,7 @@ def create_schedule(
role=role, role=role,
worktree=worktree, worktree=worktree,
subdir=subdir, subdir=subdir,
model_id=model_id,
interval_seconds=interval_seconds, interval_seconds=interval_seconds,
enabled=enabled, enabled=enabled,
next_run_at=next_run_at, next_run_at=next_run_at,
@@ -653,6 +655,7 @@ def update_schedule(conn: Connection, schedule_id: int, **fields: Any) -> dict |
"role", "role",
"worktree", "worktree",
"subdir", "subdir",
"model_id",
"interval_seconds", "interval_seconds",
"enabled", "enabled",
"next_run_at", "next_run_at",
+4
View File
@@ -452,6 +452,10 @@ schedules = Table(
Column("name_prefix", String, nullable=False), # runs are named <prefix>-<timestamp> Column("name_prefix", String, nullable=False), # runs are named <prefix>-<timestamp>
Column("task", String, nullable=False), # the prompt each run starts with Column("task", String, nullable=False), # the prompt each run starts with
Column("role", String), Column("role", String),
# Model backend (claude_models row) every fired run spawns on; null = the Claude
# subscription. No FK, same rationale as agents.model_id: a deleted backend makes the
# fired spawn fail visibly in Activity instead of breaking the schedule row.
Column("model_id", BigInteger),
Column("worktree", String), # optional branch for a per-run git worktree Column("worktree", String), # optional branch for a per-run git worktree
Column("subdir", String), # optional subdir under the project root Column("subdir", String), # optional subdir under the project root
Column("interval_seconds", BigInteger, nullable=False), Column("interval_seconds", BigInteger, nullable=False),
@@ -0,0 +1,34 @@
"""schedules pick a model backend
Revision ID: 0013_schedule_model
Revises: 0012_claude_models
Create Date: 2026-07-29
The spawn form's model dropdown, extended to recurring spawns: ``schedules.model_id``
names the ``claude_models`` backend every fired run spawns on (null = the Claude
subscription). The worker copies it into each firing's spawn payload, so the launched
agent gets pinned exactly as a hand-spawned one would. No FK, same rationale as
``agents.model_id``: deleting a backend must make the next firing fail visibly in
Activity, not break the schedule row.
"""
from __future__ import annotations
from collections.abc import Sequence
import sqlalchemy as sa
from alembic import op
revision: str = "0013_schedule_model"
down_revision: str | None = "0012_claude_models"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
def upgrade() -> None:
op.add_column("schedules", sa.Column("model_id", sa.BigInteger()))
def downgrade() -> None:
with op.batch_alter_table("schedules", schema=None) as batch_op:
batch_op.drop_column("model_id")
+53
View File
@@ -323,6 +323,59 @@ def test_spawn_route_and_worker_pass_model_through(client, auth, env, fake_launc
assert r.json()[0]["model_id"] == row["id"] assert r.json()[0]["model_id"] == row["id"]
def test_schedule_model_validated_stored_and_fired(client, auth, env, fake_launch):
root = env["tmp"] / "proj"
_write_mise(root)
_register_project(root)
with get_engine().begin() as conn:
row = repo.create_claude_model(conn, "qwen3-coder", "http://llm.local:4000", "qwen")
off = repo.create_claude_model(conn, "off", "http://x", "m", enabled=False)
# Fail-fast at create/update time, mirroring the spawn route.
r = client.post(
"/projects/proj/schedules",
json={"name_prefix": "nightly", "task": "t", "interval_seconds": 60, "model_id": 999},
headers=auth,
)
assert r.status_code == 400 and "not found" in r.json()["detail"]
r = client.post(
"/projects/proj/schedules",
json={"name_prefix": "nightly", "task": "t", "interval_seconds": 60,
"model_id": off["id"]},
headers=auth,
)
assert r.status_code == 400 and "disabled" in r.json()["detail"]
r = client.post(
"/projects/proj/schedules",
json={"name_prefix": "nightly", "task": "do it", "interval_seconds": 60,
"model_id": row["id"]},
headers=auth,
)
assert r.status_code == 201
sched = r.json()
assert sched["model_id"] == row["id"]
assert (
client.patch(f"/schedules/{sched['id']}", json={"model_id": 999}, headers=auth).status_code
== 400
)
# Clearing back to the subscription is an explicit null.
r = client.patch(f"/schedules/{sched['id']}", json={"model_id": None}, headers=auth)
assert r.status_code == 200 and r.json()["model_id"] is None
r = client.patch(f"/schedules/{sched['id']}", json={"model_id": row["id"]}, headers=auth)
assert r.status_code == 200 and r.json()["model_id"] == row["id"]
# The firing carries the pin into the spawn payload, and the launched agent gets it.
assert worker.fire_due_schedules() == 1
with connection() as conn:
command = repo.claim_next_command(conn, "w1")
assert command["payload"]["model_id"] == row["id"]
worker.execute_command(command)
assert fake_launch[0]["env"]["ANTHROPIC_MODEL"] == "qwen"
assert fake_launch[0]["agent"]["model_id"] == row["id"]
def test_cli_spawn_resolves_model_by_name(env, fake_launch, capsys): def test_cli_spawn_resolves_model_by_name(env, fake_launch, capsys):
root = env["tmp"] / "proj" root = env["tmp"] / "proj"
_write_mise(root) _write_mise(root)