Skip to content

Commit 5d6572f

Browse files
committed
feat(webapp): restore header docs buttons when the agent is unavailable (part 2)
1 parent 6fe98a2 commit 5d6572f

10 files changed

Lines changed: 135 additions & 14 deletions

File tree

  • apps/webapp/app/routes
    • _app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.prompts._index
    • _app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues
    • _app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam
    • _app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index
    • _app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.sessions.$sessionParam
    • _app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.sessions._index
    • _app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test
    • _app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.tokens
    • _app.orgs.$organizationSlug.settings.private-connections.new
    • account.tokens

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.prompts._index/route.tsx‎

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { MainCenteredContainer, PageBody, PageContainer } from "~/components/lay
1414
import { TruncatedCopyableValue } from "~/components/primitives/TruncatedCopyableValue";
1515
import { DateTime, formatDateTime } from "~/components/primitives/DateTime";
1616
import { Header3 } from "~/components/primitives/Headers";
17-
import { NavBar, PageTitle } from "~/components/primitives/PageHeader";
17+
import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
1818
import { Paragraph } from "~/components/primitives/Paragraph";
1919
import TooltipPortal from "~/components/primitives/TooltipPortal";
2020
import { cn } from "~/utils/cn";
@@ -35,7 +35,10 @@ import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server";
3535
import { PromptPresenter } from "~/presenters/v3/PromptPresenter.server";
3636
import { clickhouseFactory } from "~/services/clickhouse/clickhouseFactoryInstance.server";
3737
import { requireUserId } from "~/services/session.server";
38-
import { EnvironmentParamSchema, v3PromptsPath } from "~/utils/pathBuilder";
38+
import { docsPath, EnvironmentParamSchema, v3PromptsPath } from "~/utils/pathBuilder";
39+
import { LinkButton } from "~/components/primitives/Buttons";
40+
import { BookOpenIcon } from "@heroicons/react/24/solid";
41+
import { WhenAgentUnavailable } from "~/components/dashboard-agent/WhenAgentUnavailable";
3942
import { promptsAgentPageContext } from "~/components/dashboard-agent/suggested-prompts";
4043
import type { Handle } from "~/utils/handle";
4144

@@ -101,6 +104,13 @@ export default function PromptsPage() {
101104
<PageContainer>
102105
<NavBar>
103106
<PageTitle title="Prompts" />
107+
<PageAccessories>
108+
<WhenAgentUnavailable>
109+
<LinkButton variant="docs/small" LeadingIcon={BookOpenIcon} to={docsPath("ai/prompts")}>
110+
Prompts docs
111+
</LinkButton>
112+
</WhenAgentUnavailable>
113+
</PageAccessories>
104114
</NavBar>
105115
<PageBody scrollable={false}>
106116
<Table containerClassName="border-t-0">

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.queues/route.tsx‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ import {
9494
} from "~/utils/pathBuilder";
9595
import type { Handle } from "~/utils/handle";
9696
import { queuesAgentPageContext } from "~/components/dashboard-agent/suggested-prompts";
97+
import { WhenAgentUnavailable } from "~/components/dashboard-agent/WhenAgentUnavailable";
9798
import { PauseEnvironmentService } from "~/v3/services/pauseEnvironment.server";
9899
import { handleQueueMutationAction } from "~/models/queueMutation.server";
99100
import {
@@ -477,6 +478,15 @@ function QueuesWithMetricsView() {
477478
<PageTitle title="Queues" />
478479
<PageAccessories>
479480
<AdminDebugTooltip />
481+
<WhenAgentUnavailable>
482+
<LinkButton
483+
variant={"docs/small"}
484+
LeadingIcon={BookOpenIcon}
485+
to={docsPath("/queue-concurrency")}
486+
>
487+
Queues docs
488+
</LinkButton>
489+
</WhenAgentUnavailable>
480490
</PageAccessories>
481491
</NavBar>
482492
<MetricsLayout.Root>
@@ -1683,6 +1693,15 @@ function ClassicQueuesView() {
16831693
<PageTitle title="Queues" />
16841694
<PageAccessories>
16851695
<AdminDebugTooltip />
1696+
<WhenAgentUnavailable>
1697+
<LinkButton
1698+
variant={"docs/small"}
1699+
LeadingIcon={BookOpenIcon}
1700+
to={docsPath("/queue-concurrency")}
1701+
>
1702+
Queues docs
1703+
</LinkButton>
1704+
</WhenAgentUnavailable>
16861705
</PageAccessories>
16871706
</NavBar>
16881707
<PageBody scrollable={false}>

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
ArrowUturnLeftIcon,
33
BoltSlashIcon,
4+
BookOpenIcon,
45
ChevronDownIcon,
56
ChevronRightIcon,
67
InformationCircleIcon,
@@ -106,10 +107,12 @@ import { getResizableSnapshot } from "~/services/resizablePanel.server";
106107
import { requireUserId } from "~/services/session.server";
107108
import { rbac } from "~/services/rbac.server";
108109
import { runAgentPageContext } from "~/components/dashboard-agent/suggested-prompts";
110+
import { WhenAgentUnavailable } from "~/components/dashboard-agent/WhenAgentUnavailable";
109111
import { cn } from "~/utils/cn";
110112
import type { Handle } from "~/utils/handle";
111113
import { lerp } from "~/utils/lerp";
112114
import {
115+
docsPath,
113116
v3BillingPath,
114117
v3RunParamsSchema,
115118
v3RunPath,
@@ -520,6 +523,11 @@ export default function Page() {
520523
</Property.Item>
521524
</Property.Table>
522525
</AdminDebugTooltip>
526+
<WhenAgentUnavailable>
527+
<LinkButton variant={"docs/small"} LeadingIcon={BookOpenIcon} to={docsPath("/runs")}>
528+
Run docs
529+
</LinkButton>
530+
</WhenAgentUnavailable>
523531
<Dialog key={`replay-${run.friendlyId}`}>
524532
<DialogTrigger asChild>
525533
<Button

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import {
7979
shouldRevalidateRunsList,
8080
} from "./shouldRevalidateRunsList";
8181
import { useRunsLiveReload } from "./useRunsLiveReload";
82+
import { WhenAgentUnavailable } from "~/components/dashboard-agent/WhenAgentUnavailable";
8283
import { pageMeta } from "~/utils/pageTitle";
8384

8485
export { shouldRevalidateRunsList as shouldRevalidate };
@@ -177,6 +178,15 @@ export default function Page() {
177178
)}
178179
<PageAccessories>
179180
<AdminDebugTooltip />
181+
<WhenAgentUnavailable>
182+
<LinkButton
183+
variant={"docs/small"}
184+
LeadingIcon={BookOpenIcon}
185+
to={docsPath("/runs-and-attempts")}
186+
>
187+
Runs docs
188+
</LinkButton>
189+
</WhenAgentUnavailable>
180190
</PageAccessories>
181191
</NavBar>
182192
<PageBody scrollable={false}>

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.sessions.$sessionParam/route.tsx‎

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { BoltIcon, BoltSlashIcon } from "@heroicons/react/20/solid";
2-
import { CheckIcon } from "@heroicons/react/24/solid";
2+
import { BookOpenIcon, CheckIcon } from "@heroicons/react/24/solid";
33

44
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
55
import { useVirtualizer } from "@tanstack/react-virtual";
@@ -21,7 +21,7 @@ import { Button, LinkButton } from "~/components/primitives/Buttons";
2121
import { CopyableText } from "~/components/primitives/CopyableText";
2222
import { DateTime } from "~/components/primitives/DateTime";
2323
import { Dialog, DialogTrigger } from "~/components/primitives/Dialog";
24-
import { NavBar, PageTitle } from "~/components/primitives/PageHeader";
24+
import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
2525
import { Paragraph } from "~/components/primitives/Paragraph";
2626
import * as Property from "~/components/primitives/PropertyTable";
2727
import {
@@ -65,8 +65,15 @@ import { requireUserId } from "~/services/session.server";
6565
import { type SessionStatus } from "~/services/sessionsRepository/sessionsRepository.server";
6666
import { cn } from "~/utils/cn";
6767
import { throwNotFound } from "~/utils/httpErrors";
68-
import { EnvironmentParamSchema, v3RunPath, v3RunsPath, v3SessionsPath } from "~/utils/pathBuilder";
68+
import {
69+
docsPath,
70+
EnvironmentParamSchema,
71+
v3RunPath,
72+
v3RunsPath,
73+
v3SessionsPath,
74+
} from "~/utils/pathBuilder";
6975
import { sessionsAgentPageContext } from "~/components/dashboard-agent/suggested-prompts";
76+
import { WhenAgentUnavailable } from "~/components/dashboard-agent/WhenAgentUnavailable";
7077
import type { Handle } from "~/utils/handle";
7178

7279
import { pageMeta } from "~/utils/pageTitle";
@@ -139,6 +146,17 @@ export default function Page() {
139146
</span>
140147
}
141148
/>
149+
<PageAccessories>
150+
<WhenAgentUnavailable>
151+
<LinkButton
152+
variant={"docs/small"}
153+
LeadingIcon={BookOpenIcon}
154+
to={docsPath("/ai-chat/sessions")}
155+
>
156+
Sessions docs
157+
</LinkButton>
158+
</WhenAgentUnavailable>
159+
</PageAccessories>
142160
</NavBar>
143161
<PageBody scrollable={false}>
144162
<ResizablePanelGroup orientation="horizontal" className="max-h-full">

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.sessions._index/route.tsx‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
import { BookOpenIcon } from "@heroicons/react/24/solid";
12
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
23
import { typedjson, useTypedLoaderData } from "remix-typedjson";
34
import { QuestionMarkIcon } from "~/assets/icons/QuestionMarkIcon";
45
import { InlineCode } from "~/components/code/InlineCode";
56
import { ListPagination } from "~/components/ListPagination";
67
import { AdminDebugTooltip } from "~/components/admin/debugTooltip";
78
import { MainCenteredContainer, PageBody } from "~/components/layout/AppLayout";
9+
import { LinkButton } from "~/components/primitives/Buttons";
810
import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
911
import { Paragraph } from "~/components/primitives/Paragraph";
1012
import { SimpleTooltip } from "~/components/primitives/Tooltip";
@@ -19,9 +21,10 @@ import { getSessionFiltersFromRequest } from "~/presenters/SessionFilters.server
1921
import { SessionListPresenter } from "~/presenters/v3/SessionListPresenter.server";
2022
import { clickhouseFactory } from "~/services/clickhouse/clickhouseFactoryInstance.server";
2123
import { requireUserId } from "~/services/session.server";
22-
import { EnvironmentParamSchema } from "~/utils/pathBuilder";
24+
import { docsPath, EnvironmentParamSchema } from "~/utils/pathBuilder";
2325
import { throwNotFound } from "~/utils/httpErrors";
2426
import { sessionsAgentPageContext } from "~/components/dashboard-agent/suggested-prompts";
27+
import { WhenAgentUnavailable } from "~/components/dashboard-agent/WhenAgentUnavailable";
2528
import type { Handle } from "~/utils/handle";
2629

2730
export const handle: Handle = {
@@ -79,6 +82,15 @@ export default function Page() {
7982
<PageTitle title="Sessions" accessory={<SessionsHelpTooltip />} />
8083
<PageAccessories>
8184
<AdminDebugTooltip />
85+
<WhenAgentUnavailable>
86+
<LinkButton
87+
variant={"docs/small"}
88+
LeadingIcon={BookOpenIcon}
89+
to={docsPath("ai-chat/sessions")}
90+
>
91+
Sessions docs
92+
</LinkButton>
93+
</WhenAgentUnavailable>
8294
</PageAccessories>
8395
</NavBar>
8496
<PageBody scrollable={false}>

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test/route.tsx‎

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
import { MagnifyingGlassIcon } from "@heroicons/react/20/solid";
1+
import { BookOpenIcon, MagnifyingGlassIcon } from "@heroicons/react/20/solid";
22
import { Outlet, useParams } from "@remix-run/react";
33

44
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
55
import { typedjson, useTypedLoaderData } from "remix-typedjson";
66
import { TestHasNoTasks } from "~/components/BlankStatePanels";
77
import { MainCenteredContainer, PageBody, PageContainer } from "~/components/layout/AppLayout";
8+
import { LinkButton } from "~/components/primitives/Buttons";
89
import { Callout } from "~/components/primitives/Callout";
910
import { Input } from "~/components/primitives/Input";
10-
import { NavBar, PageTitle } from "~/components/primitives/PageHeader";
11+
import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
1112
import { Paragraph } from "~/components/primitives/Paragraph";
1213
import { RadioButtonCircle } from "~/components/primitives/RadioButton";
1314
import {
@@ -35,8 +36,9 @@ import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server";
3536
import { type TaskListItem, TestPresenter } from "~/presenters/v3/TestPresenter.server";
3637
import { requireUserId } from "~/services/session.server";
3738
import { cn } from "~/utils/cn";
38-
import { EnvironmentParamSchema, v3TestTaskPath } from "~/utils/pathBuilder";
39+
import { docsPath, EnvironmentParamSchema, v3TestTaskPath } from "~/utils/pathBuilder";
3940
import { testAgentPageContext } from "~/components/dashboard-agent/suggested-prompts";
41+
import { WhenAgentUnavailable } from "~/components/dashboard-agent/WhenAgentUnavailable";
4042
import type { Handle } from "~/utils/handle";
4143

4244
export const handle: Handle = {
@@ -86,6 +88,17 @@ export default function Page() {
8688
<PageContainer>
8789
<NavBar>
8890
<PageTitle title="Test" />
91+
<PageAccessories>
92+
<WhenAgentUnavailable>
93+
<LinkButton
94+
variant={"docs/small"}
95+
LeadingIcon={BookOpenIcon}
96+
to={docsPath("/run-tests")}
97+
>
98+
Test docs
99+
</LinkButton>
100+
</WhenAgentUnavailable>
101+
</PageAccessories>
89102
</NavBar>
90103
<PageBody scrollable={false}>
91104
{tasks.length === 0 ? (

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.tokens/route.tsx‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { BookOpenIcon } from "@heroicons/react/20/solid";
12
import { Outlet, useParams } from "@remix-run/react";
23

34
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
@@ -6,6 +7,7 @@ import { AdminDebugTooltip } from "~/components/admin/debugTooltip";
67
import { NoWaitpointTokens } from "~/components/BlankStatePanels";
78
import { MainCenteredContainer, PageBody, PageContainer } from "~/components/layout/AppLayout";
89
import { ListPagination } from "~/components/ListPagination";
10+
import { LinkButton } from "~/components/primitives/Buttons";
911
import { ClipboardField } from "~/components/primitives/ClipboardField";
1012
import { CopyableText } from "~/components/primitives/CopyableText";
1113
import { DateTime } from "~/components/primitives/DateTime";
@@ -47,8 +49,9 @@ import {
4749
runOpsSplitReadEnabled,
4850
type PrismaClientOrTransaction,
4951
} from "~/db.server";
50-
import { EnvironmentParamSchema, v3WaitpointTokenPath } from "~/utils/pathBuilder";
52+
import { docsPath, EnvironmentParamSchema, v3WaitpointTokenPath } from "~/utils/pathBuilder";
5153
import { waitpointsAgentPageContext } from "~/components/dashboard-agent/suggested-prompts";
54+
import { WhenAgentUnavailable } from "~/components/dashboard-agent/WhenAgentUnavailable";
5255
import type { Handle } from "~/utils/handle";
5356

5457
export const handle: Handle = {
@@ -138,6 +141,11 @@ export default function Page() {
138141
<PageTitle title={<V4Title>Waitpoint Tokens</V4Title>} />
139142
<PageAccessories>
140143
<AdminDebugTooltip />
144+
<WhenAgentUnavailable>
145+
<LinkButton variant={"docs/small"} LeadingIcon={BookOpenIcon} to={docsPath("/wait")}>
146+
Waitpoints docs
147+
</LinkButton>
148+
</WhenAgentUnavailable>
141149
</PageAccessories>
142150
</NavBar>
143151
<PageBody scrollable={false}>

‎apps/webapp/app/routes/_app.orgs.$organizationSlug.settings.private-connections.new/route.tsx‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { Header2, Header3 } from "~/components/primitives/Headers";
2020
import { Input } from "~/components/primitives/Input";
2121
import { InputGroup } from "~/components/primitives/InputGroup";
2222
import { Label } from "~/components/primitives/Label";
23-
import { NavBar, PageTitle } from "~/components/primitives/PageHeader";
23+
import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
2424
import { Paragraph } from "~/components/primitives/Paragraph";
2525
import { Select, SelectItem } from "~/components/primitives/Select";
2626
import { prisma } from "~/db.server";
@@ -38,12 +38,14 @@ import {
3838
} from "~/utils/pathBuilder";
3939
import {
4040
ArrowTopRightOnSquareIcon,
41+
BookOpenIcon,
4142
CommandLineIcon,
4243
DocumentTextIcon,
4344
PencilSquareIcon,
4445
SparklesIcon,
4546
TrashIcon,
4647
} from "@heroicons/react/20/solid";
48+
import { WhenAgentUnavailable } from "~/components/dashboard-agent/WhenAgentUnavailable";
4749
import { pageMeta } from "~/utils/pageTitle";
4850

4951
export const meta = pageMeta("Add Private Connection");
@@ -552,6 +554,17 @@ export default function Page() {
552554
text: "Private Connections",
553555
}}
554556
/>
557+
<PageAccessories>
558+
<WhenAgentUnavailable>
559+
<LinkButton
560+
variant="docs/small"
561+
LeadingIcon={BookOpenIcon}
562+
to={docsPath("private-networking/overview")}
563+
>
564+
Private connection docs
565+
</LinkButton>
566+
</WhenAgentUnavailable>
567+
</PageAccessories>
555568
</NavBar>
556569
<PageBody scrollable={true}>
557570
<MainHorizontallyCenteredContainer className="max-w-3xl">

‎apps/webapp/app/routes/account.tokens/route.tsx‎

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getFormProps, getInputProps, useForm } from "@conform-to/react";
22
import { parseWithZod } from "@conform-to/zod";
3-
import { ShieldCheckIcon, TrashIcon } from "@heroicons/react/20/solid";
3+
import { BookOpenIcon, ShieldCheckIcon, TrashIcon } from "@heroicons/react/20/solid";
44
import { ShieldExclamationIcon } from "@heroicons/react/24/solid";
55
import { DialogClose } from "@radix-ui/react-dialog";
66
import { Form, useActionData, useFetcher } from "@remix-run/react";
@@ -9,7 +9,7 @@ import { useState } from "react";
99
import { typedjson, useTypedLoaderData } from "remix-typedjson";
1010
import { z } from "zod";
1111
import { PageBody, PageContainer } from "~/components/layout/AppLayout";
12-
import { Button } from "~/components/primitives/Buttons";
12+
import { Button, LinkButton } from "~/components/primitives/Buttons";
1313
import { Callout } from "~/components/primitives/Callout";
1414
import { ClipboardField } from "~/components/primitives/ClipboardField";
1515
import { DateTime } from "~/components/primitives/DateTime";
@@ -46,8 +46,9 @@ import {
4646
revokePersonalAccessToken,
4747
} from "~/services/personalAccessToken.server";
4848
import { requireUserId } from "~/services/session.server";
49-
import { personalAccessTokensPath } from "~/utils/pathBuilder";
49+
import { docsPath, personalAccessTokensPath } from "~/utils/pathBuilder";
5050

51+
import { WhenAgentUnavailable } from "~/components/dashboard-agent/WhenAgentUnavailable";
5152
import { pageMeta } from "~/utils/pageTitle";
5253

5354
export const meta = pageMeta("Personal Access Tokens");
@@ -247,6 +248,15 @@ export default function Page() {
247248
<NavBar>
248249
<PageTitle title="Personal Access Tokens" />
249250
<PageAccessories>
251+
<WhenAgentUnavailable>
252+
<LinkButton
253+
LeadingIcon={BookOpenIcon}
254+
to={docsPath("management/overview#personal-access-token-pat")}
255+
variant="docs/small"
256+
>
257+
Personal Access Token docs
258+
</LinkButton>
259+
</WhenAgentUnavailable>
250260
<Dialog>
251261
<DialogTrigger asChild>
252262
<Button variant="primary/small">Create new token…</Button>

0 commit comments

Comments
 (0)