Skip to content

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

g1t.sh
131 linesCodeBlameRaw

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold1/**
2 * A project's pages and the tabs within them, in one place: the sidebar
3 * lists the pages, and a page with more than one view shows them as tabs
4 * across its top, the way GitHub and Vercel do. Soon tabs come from the
5 * roadmap and open its page for them, under the same tabs.
6 */
Merge main into rm-agents: mirroring removal, open signups, free-tier limits, the g1t CLI and runner fixes, with the agent removal kept. The CLI's table of operations is regenerated from the API without the agent, customize and AI credit operations; no CLI command used them.7import type { Abilities, Capability } from "@g1t/contracts";
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold8
A desktop release goes out with what can be built. Linux is built on g1t's machines in every release; Windows and macOS each wait on a repository variable: a machine registered for them, or for Windows a cross build on Linux once aka.ms and download.visualstudio.microsoft.com are workflow-only domains, which is where the first release stopped. A platform with no machine is skipped and the download page says it is coming, with a word for the visitor whose platform this release lacks. The guide and CONTRIBUTING say so.9import { type RoadmapItem, roadmapIn } from "./roadmap.ts";
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold10
11export type Tab = {
12 label: string;
13 /** Under the project, without a leading slash; "" is its overview. */
14 path: string;
15 /** Other paths under which this tab is the current one. */
16 also?: string[];
17 soon?: boolean;
18 about?: string;
19 /** Members only. */
20 members?: boolean;
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar21 /** Current on its own path only, not on the paths under it. */
22 exact?: boolean;
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold23 /** Only for viewers whose role has this capability, once it is known. */
24 needs?: Capability;
25};
26
27export type Section = {
28 key: RoadmapItem["section"] | "Workflows" | "Settings";
29 tabs: Tab[];
30};
31
32function soon(section: RoadmapItem["section"]): Tab[] {
33 return roadmapIn(section).map((item) => ({ label: item.title, path: `soon/${item.key}`, soon: true, about: item.summary }));
34}
35
36export const SECTIONS: Section[] = [
37 {
38 key: "Code",
39 tabs: [
40 { label: "Files", path: "code", also: ["tree", "blob"] },
41 { label: "Commits", path: "commits", also: ["commit"] },
42 { label: "Branches", path: "branches" },
43 { label: "Tags", path: "tags" },
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb9744 { label: "Releases", path: "releases" },
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold45 { label: "Compare", path: "compare" },
Chat controls, public profiles, shadcn selects, and no Docs tab in a project46 // No Docs tab: code is not docs. Docs is a workspace mode, filtered by project there.
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold47 ],
48 },
49 {
50 key: "Issues",
51 tabs: [
52 { label: "Issues", path: "issues" },
Usage, Billing settings and prepaid AI credit; fixes from the UX audit53 { label: "Milestones", path: "milestones" },
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold54 ...soon("Issues"),
55 ],
56 },
57 {
58 key: "Deployments",
59 tabs: [{ label: "Deployments", path: "deployments" }, ...soon("Deployments")],
60 },
61 {
Projects have Observability: their requests, logs, traces, metrics and errors, from apps on g1t.page with nothing to set up, and from software anywhere else over OpenTelemetry.62 key: "Observability",
63 tabs: [
64 { label: "Overview", path: "observability", exact: true, members: true },
65 { label: "Requests", path: "observability/requests", members: true },
66 { label: "Logs", path: "observability/logs", members: true },
67 { label: "Traces", path: "observability/traces", members: true },
68 { label: "Errors", path: "observability/errors", members: true },
69 { label: "Metrics", path: "observability/metrics", members: true },
70 { label: "Settings", path: "observability/settings", members: true, needs: "manage_integrations" },
71 ...soon("Observability"),
72 ],
73 },
74 {
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold75 key: "Security",
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar76 tabs: [
Merge main (membership, two-factor, GitHub repo roles) into tokens77 { label: "Overview", path: "security", members: true, needs: "security_alerts", exact: true },
78 { label: "Secret scanning", path: "security/secret-scanning", members: true, needs: "security_alerts" },
79 { label: "Code scanning", path: "security/code-scanning", members: true, needs: "security_alerts", also: ["security/pulls"] },
80 { label: "Vulnerabilities", path: "security/vulnerabilities", members: true, needs: "security_alerts" },
81 { label: "Dependency graph", path: "security/dependency-graph", members: true, needs: "security_alerts" },
82 { label: "Dependency updates", path: "security/dependency-updates", members: true, needs: "security_alerts" },
Merge remote-tracking branch 'origin/claude/cool-newton-7nm8r9' into claude/cool-newton-7nm8r983 { label: "Advisories", path: "security/advisories", members: true, needs: "security_alerts", also: ["security/reports"] },
Merge main (membership, two-factor, GitHub repo roles) into tokens84 { label: "Settings", path: "security/settings", members: true, needs: "security_alerts" },
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar85 ...soon("Security"),
86 ],
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold87 },
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb9788 {
89 key: "Insights",
90 tabs: [
91 { label: "Contributors", path: "contributors" },
92 { label: "Activity", path: "activity" },
93 { label: "Stargazers", path: "stargazers" },
94 ...soon("Insights"),
95 ],
96 },
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold97];
98
Merge branch 'worktree-agent-aa68cf6ecc03dffaf'99/** Pull requests, the work on them, the merge queue and sessions share a page's tabs too. */
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold100export const PULLS: Section = {
101 key: "Code",
102 tabs: [
103 { label: "Pull requests", path: "pulls", also: ["pull"] },
Merge branch 'worktree-agent-aa68cf6ecc03dffaf'104 { label: "Work", path: "work" },
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold105 { label: "Merge queue", path: "queue" },
The site no longer has g1t's own agents. g1t is where the coding agents you already use do their work, so the Agents mode is gone from the rail, with every page under /<workspace>/-/agents: personas, faces, skills, abilities, routines, computers, sessions and agent spend. Customize (skills, connectors, plugins, marketplaces), the context hub, model providers, the AI Gateway page, the Spend page and pill, Ask g1t, and the repository's Agents, Plans and agent settings pages go too, and their addresses now answer 404.106 { label: "Sessions", path: "sessions" },
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold107 ],
108};
109
110function matches(rest: string, tab: Tab): boolean {
111 return [tab.path, ...(tab.also ?? [])].some((path) => path !== "" && (rest === path || rest.startsWith(`${path}/`)));
112}
113
114/**
115 * The tabs for the page at `rest` (the path under the project), if it
Merge main into rm-agents: mirroring removal, open signups, free-tier limits, the g1t CLI and runner fixes, with the agent removal kept. The CLI's table of operations is regenerated from the API without the agent, customize and AI credit operations; no CLI command used them.116 * belongs to a page with more than one view.
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold117 */
Merge main into rm-agents: mirroring removal, open signups, free-tier limits, the g1t CLI and runner fixes, with the agent removal kept. The CLI's table of operations is regenerated from the API without the agent, customize and AI credit operations; no CLI command used them.118export function tabsFor(rest: string, member: boolean, can?: Partial<Abilities>): Tab[] | null {
sudo: a billing reset runs the costs analysis again so every figure is fresh; every submit button shows it is working (CSS only); no margin percentage on less than a cent sold119 for (const section of [...SECTIONS, PULLS]) {
120 const visible = section.tabs.filter(
121 (tab) => (member || !tab.members) && (!tab.needs || !can || Boolean(can[tab.needs])),
122 );
123 if (visible.length > 1 && visible.some((tab) => matches(rest, tab))) return visible;
124 }
125 return null;
126}
127
128/** The first page of a section, for its sidebar link: a built one if any. */
129export function entryOf(key: Section["key"]): Tab | undefined {
130 return SECTIONS.find((section) => section.key === key)?.tabs[0];
131}

This file's history is long; its oldest lines are credited to the oldest commit read.