Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const DEFAULT_ITEMS: PaletteItem[] = [
{ label: "Beta onboarding", to: "/docs/beta-onboarding", group: "Docs" },
{ label: "Quickstart", to: "/docs/quickstart", group: "Docs" },
{ label: "MCP clients", to: "/docs/mcp-clients", group: "Docs" },
{ label: "Coding-agent driver", to: "/docs/miner-coding-agent", group: "Docs" },
{ label: "Miner workflow", to: "/docs/miner-workflow", group: "Docs" },
{ label: "Maintainer workflow", to: "/docs/maintainer-workflow", group: "Docs" },
{ label: "Self-host reviews", to: "/docs/maintainer-self-hosting", group: "Docs" },
Expand Down
5 changes: 4 additions & 1 deletion apps/gittensory-ui/src/components/site/docs-nav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ export const docsNav: DocsGroup[] = [
},
{
title: "Workflows",
items: [{ to: "/docs/miner-workflow", label: "Miner workflow" }],
items: [
{ to: "/docs/miner-coding-agent", label: "Coding-agent driver" },
{ to: "/docs/miner-workflow", label: "Miner workflow" },
],
},
{
title: "Maintainers",
Expand Down
19 changes: 19 additions & 0 deletions apps/gittensory-ui/src/routeTree.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import { Route as DocsScoreabilityRouteImport } from './routes/docs.scoreability
import { Route as DocsQuickstartRouteImport } from './routes/docs.quickstart'
import { Route as DocsPrivacySecurityRouteImport } from './routes/docs.privacy-security'
import { Route as DocsOwnerChecklistRouteImport } from './routes/docs.owner-checklist'
import { Route as DocsMinerCodingAgentRouteImport } from './routes/docs.miner-coding-agent'
import { Route as DocsMinerWorkflowRouteImport } from './routes/docs.miner-workflow'
import { Route as DocsMinerQuickstartRouteImport } from './routes/docs.miner-quickstart'
import { Route as DocsMcpClientsRouteImport } from './routes/docs.mcp-clients'
Expand Down Expand Up @@ -251,6 +252,11 @@ const DocsOwnerChecklistRoute = DocsOwnerChecklistRouteImport.update({
path: '/owner-checklist',
getParentRoute: () => DocsRoute,
} as any)
const DocsMinerCodingAgentRoute = DocsMinerCodingAgentRouteImport.update({
id: '/miner-coding-agent',
path: '/miner-coding-agent',
getParentRoute: () => DocsRoute,
} as any)
const DocsMinerWorkflowRoute = DocsMinerWorkflowRouteImport.update({
id: '/miner-workflow',
path: '/miner-workflow',
Expand Down Expand Up @@ -424,6 +430,7 @@ export interface FileRoutesByFullPath {
'/docs/maintainer-self-hosting': typeof DocsMaintainerSelfHostingRoute
'/docs/maintainer-workflow': typeof DocsMaintainerWorkflowRoute
'/docs/mcp-clients': typeof DocsMcpClientsRoute
'/docs/miner-coding-agent': typeof DocsMinerCodingAgentRoute
'/docs/miner-quickstart': typeof DocsMinerQuickstartRoute
'/docs/miner-workflow': typeof DocsMinerWorkflowRoute
'/docs/owner-checklist': typeof DocsOwnerChecklistRoute
Expand Down Expand Up @@ -484,6 +491,7 @@ export interface FileRoutesByTo {
'/docs/maintainer-self-hosting': typeof DocsMaintainerSelfHostingRoute
'/docs/maintainer-workflow': typeof DocsMaintainerWorkflowRoute
'/docs/mcp-clients': typeof DocsMcpClientsRoute
'/docs/miner-coding-agent': typeof DocsMinerCodingAgentRoute
'/docs/miner-quickstart': typeof DocsMinerQuickstartRoute
'/docs/miner-workflow': typeof DocsMinerWorkflowRoute
'/docs/owner-checklist': typeof DocsOwnerChecklistRoute
Expand Down Expand Up @@ -613,6 +621,7 @@ export interface FileRouteTypes {
| '/docs/maintainer-self-hosting'
| '/docs/maintainer-workflow'
| '/docs/mcp-clients'
| '/docs/miner-coding-agent'
| '/docs/miner-quickstart'
| '/docs/miner-workflow'
| '/docs/owner-checklist'
Expand Down Expand Up @@ -673,6 +682,7 @@ export interface FileRouteTypes {
| '/docs/maintainer-self-hosting'
| '/docs/maintainer-workflow'
| '/docs/mcp-clients'
| '/docs/miner-coding-agent'
| '/docs/miner-quickstart'
| '/docs/miner-workflow'
| '/docs/owner-checklist'
Expand Down Expand Up @@ -1026,6 +1036,13 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof DocsMinerWorkflowRouteImport
parentRoute: typeof DocsRoute
}
'/docs/miner-coding-agent': {
id: '/docs/miner-coding-agent'
path: '/miner-coding-agent'
fullPath: '/docs/miner-coding-agent'
preLoaderRoute: typeof DocsMinerCodingAgentRouteImport
parentRoute: typeof DocsRoute
}
'/docs/miner-quickstart': {
id: '/docs/miner-quickstart'
path: '/miner-quickstart'
Expand Down Expand Up @@ -1270,6 +1287,7 @@ interface DocsRouteChildren {
DocsMaintainerSelfHostingRoute: typeof DocsMaintainerSelfHostingRoute
DocsMaintainerWorkflowRoute: typeof DocsMaintainerWorkflowRoute
DocsMcpClientsRoute: typeof DocsMcpClientsRoute
DocsMinerCodingAgentRoute: typeof DocsMinerCodingAgentRoute
DocsMinerQuickstartRoute: typeof DocsMinerQuickstartRoute
DocsMinerWorkflowRoute: typeof DocsMinerWorkflowRoute
DocsOwnerChecklistRoute: typeof DocsOwnerChecklistRoute
Expand Down Expand Up @@ -1307,6 +1325,7 @@ const DocsRouteChildren: DocsRouteChildren = {
DocsMaintainerSelfHostingRoute: DocsMaintainerSelfHostingRoute,
DocsMaintainerWorkflowRoute: DocsMaintainerWorkflowRoute,
DocsMcpClientsRoute: DocsMcpClientsRoute,
DocsMinerCodingAgentRoute: DocsMinerCodingAgentRoute,
DocsMinerQuickstartRoute: DocsMinerQuickstartRoute,
DocsMinerWorkflowRoute: DocsMinerWorkflowRoute,
DocsOwnerChecklistRoute: DocsOwnerChecklistRoute,
Expand Down
1 change: 1 addition & 0 deletions apps/gittensory-ui/src/routes/docs.index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ const AUDIENCES: Audience[] = [
links: [
{ to: "/docs/quickstart", label: "Quickstart" },
{ to: "/docs/miner-quickstart", label: "Quickstart by lane" },
{ to: "/docs/miner-coding-agent", label: "Coding-agent driver" },
{ to: "/docs/miner-workflow", label: "Miner workflow" },
{ to: "/docs/branch-analysis", label: "Branch analysis" },
{ to: "/docs/scoreability", label: "Scoreability" },
Expand Down
92 changes: 92 additions & 0 deletions apps/gittensory-ui/src/routes/docs.miner-coding-agent.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import { render, screen } from "@testing-library/react";
import { type ReactNode } from "react";
import { describe, expect, it, vi } from "vitest";

import { CODING_AGENT_DRIVER_NAMES } from "../../../../packages/gittensory-engine/src/miner/driver-factory";
import {
MINER_CODING_AGENT_ENV_ROWS,
MINER_CODING_AGENT_PROVIDER_ITEMS,
MinerCodingAgentDriverDocs,
} from "./docs.miner-coding-agent";

vi.mock("@tanstack/react-router", async (importOriginal) => {
const actual = await importOriginal<typeof import("@tanstack/react-router")>();
return {
...actual,
Link: ({ to, children }: { to: string; children: ReactNode }) => <a href={to}>{children}</a>,
};
});

vi.mock("@/components/site/docs-page", () => ({
DocsPage: ({
children,
title,
eyebrow,
description,
}: {
children: ReactNode;
title: string;
eyebrow?: string;
description?: string;
}) => (
<div data-testid="docs-page">
{eyebrow ? <div>{eyebrow}</div> : null}
<h1>{title}</h1>
{description ? <p>{description}</p> : null}
{children}
</div>
),
}));

vi.mock("@/components/site/primitives", () => ({
Callout: ({ children, title }: { children: ReactNode; title?: string }) => (
<section data-testid="callout">
{title ? <strong>{title}</strong> : null}
<div>{children}</div>
</section>
),
CodeBlock: ({ code }: { code: string }) => <pre>{code}</pre>,
FeatureRow: ({ items }: { items: Array<{ title: string; description: string }> }) => (
<dl>
{items.map((item) => (
<div key={item.title}>
<dt>{item.title}</dt>
<dd>{item.description}</dd>
</div>
))}
</dl>
),
}));

describe("miner coding-agent docs page", () => {
it("mounts the docs route and renders the expected sections", async () => {
render(<MinerCodingAgentDriverDocs />);

expect(await screen.findByRole("heading", { name: "Miner coding-agent driver" })).toBeTruthy();
expect(screen.getByRole("heading", { name: "Provider selection" })).toBeTruthy();
expect(screen.getByRole("heading", { name: "Model and timeout overrides" })).toBeTruthy();
expect(
screen.getByRole("heading", { name: "Recognizing a stale or missing credential" }),
).toBeTruthy();
expect(screen.getByRole("heading", { name: "Related docs" })).toBeTruthy();
});

it("keeps the provider list aligned with the engine's accepted provider names", () => {
expect(MINER_CODING_AGENT_PROVIDER_ITEMS.map((item) => item.title)).toEqual([
...CODING_AGENT_DRIVER_NAMES,
]);
});

it("documents every driver env var the page claims to cover", () => {
expect(MINER_CODING_AGENT_ENV_ROWS.map((row) => row.name)).toEqual([
"MINER_CODING_AGENT_PROVIDER",
"MINER_CODING_AGENT_CLAUDE_MODEL",
"MINER_CODING_AGENT_CODEX_MODEL",
"MINER_CODING_AGENT_TIMEOUT_MS",
]);
});

it("exports the route component used by the route definition", () => {
expect(typeof MinerCodingAgentDriverDocs).toBe("function");
});
});
Loading
Loading