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.
| The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens. | 1 | import type { RateLimitBinding, ServiceBinding } from "@g1t/contracts"; |
| Project settings say who created the project, by name | 2 | |
| 3 | declare global { | |
| 4 | namespace Cloudflare { | |
| 5 | interface Env { | |
| 6 | IDENTITY: ServiceBinding; | |
| 7 | /** Also serves git over HTTPS through `fetch`. */ | |
| 8 | REPOS: ServiceBinding & { fetch(request: Request): Promise<Response> }; | |
| 9 | /** Also serves the container registry (`/v2/`) through `fetch`. */ | |
| 10 | PACKAGES: ServiceBinding & { fetch(request: Request): Promise<Response> }; | |
| 11 | WORK: ServiceBinding; | |
| 12 | BILLING: ServiceBinding; | |
| 13 | EVENTS: ServiceBinding; | |
| 14 | INTEGRATIONS: ServiceBinding; | |
| 15 | WEBHOOKS: ServiceBinding; | |
| 16 | ACTIONS: ServiceBinding; | |
| 17 | DEPLOYMENTS: ServiceBinding; | |
| 18 | PROJECTS: ServiceBinding; | |
| 19 | SECURITY: ServiceBinding; | |
| 20 | /** Search across all of g1t, and Explore. */ | |
| 21 | SEARCH: ServiceBinding; | |
| Chat and workspace agents: channels, DMs and named agents you talk to | 22 | /** |
| 23 | * Chat: channels, messages and read state over RPC, and the live | |
| 24 | * socket, forwarded as it is (app/lib/chat-live.server.ts). | |
| 25 | */ | |
| 26 | CHAT: ServiceBinding & { fetch(request: Request): Promise<Response> }; | |
| The artifacts service is services/artifacts, the Worker g1t-artifacts, bound as ARTIFACTS by the API, the site and the agents; its live rooms move to it with a Durable Object transfer from g1t-docs-service, and its database, bucket, indexes and queue keep their names. The git store's binding and settings are GITSTORE, its ops scripts gitstore-*, and workflow run artifacts keep their compatible API under run_artifacts modules. The deploy tool puts a Worker that has never deployed before the Workers in its stage that bind to it, and the deploy guide gives the cutover runbook. | 27 | /** Artifacts (services/artifacts): RPC, each artifact's live socket, and files in them. */ |
| 28 | ARTIFACTS: ServiceBinding & { fetch(request: Request | string, init?: RequestInit): Promise<Response> }; | |
| Merge the workspace shell: navigation and phone shell, g1t as orchestrator, agents in roles with audience-checked reads, reactions and custom emoji, live notifications and browser push, the homepage tour (agents 0002, chat 0002) | 29 | /** |
| 30 | * Live notifications, counts and browser push (services/notify): RPC, | |
| 31 | * and each tab's feed socket, forwarded as it is (routes/notify/live.ts). | |
| 32 | * Absent where it is not deployed: pages work without it. | |
| 33 | */ | |
| 34 | NOTIFY?: ServiceBinding & { fetch(request: Request): Promise<Response> }; | |
| 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. | 35 | /** |
| 36 | * Observability (services/telemetry): RPC, and a project's live tail, | |
| 37 | * forwarded as it is (routes/repo/observability/live.ts). Absent where | |
| 38 | * it is not deployed: the pages say so. | |
| 39 | */ | |
| 40 | TELEMETRY?: ServiceBinding & { fetch(request: Request): Promise<Response> }; | |
| Project settings say who created the project, by name | 41 | /** Production screenshots, from the og service's `Screenshots` entrypoint. */ |
| 42 | SCREENSHOTS?: { | |
| 43 | image(input: { host: string; commit: string; since?: string }): Promise<{ | |
| 44 | body: ArrayBuffer; | |
| 45 | contentType: string; | |
| 46 | commit: string; | |
| 47 | capturedAt: string; | |
| 48 | } | null>; | |
| Merge branch 'worktree-agent-a5b0d9e2733e9e382' | 49 | /** A production deployed elsewhere, at its address; `commit` is a deploy's commit or a UTC day. */ |
| 50 | externalImage(input: { url: string; commit: string; since?: string }): Promise<{ | |
| 51 | body: ArrayBuffer; | |
| 52 | contentType: string; | |
| 53 | commit: string; | |
| 54 | capturedAt: string; | |
| 55 | } | null>; | |
| Project settings say who created the project, by name | 56 | }; |
| 57 | BLOBS: KVNamespace; | |
| 58 | /** Uploaded avatars by SHA-256, with `{ contentType }`; written by identity. */ | |
| 59 | AVATARS: KVNamespace; | |
| 60 | /** The self-hosted runner's releases (scripts/runner-release.mjs). Absent when self-hosted. */ | |
| 61 | DOWNLOADS?: R2Bucket; | |
| Merge branch 'worktree-agent-aaf03bdceac799c89' | 62 | /** The site's own origin. Unset on g1t.sh, which is https://g1t.sh (app/lib/addresses.server.ts). */ |
| 63 | SITE_URL?: string; | |
| 64 | /** The REST API's origin, which is also the OAuth issuer. Unset on g1t.sh. */ | |
| 65 | API_URL?: string; | |
| 66 | /** The MCP server's URL, as agents are told to add it. Unset on g1t.sh. */ | |
| 67 | MCP_URL?: string; | |
| 68 | /** The social-card image service; an empty string for none. Unset on g1t.sh. */ | |
| 69 | OG_URL?: string; | |
| Merge branch 'worktree-agent-a8752162fea25f63f' into spend-guardrails | 70 | /** The front door's rate limits (app/lib/front-door-limits.ts). Absent when self-hosted. */ |
| 71 | WEB_ANONYMOUS_LIMIT?: RateLimitBinding; | |
| 72 | WEB_HEAVY_LIMIT?: RateLimitBinding; | |
| 73 | WEB_SESSION_LIMIT?: RateLimitBinding; | |
| 74 | WEB_ADDRESS_LIMIT?: RateLimitBinding; | |
| Merge main into Artifacts Phase 2 | 75 | WEB_TOKEN_LIMIT?: RateLimitBinding; |
| Merge branch 'ask-g1t' | 76 | /** Ask g1t's questions, per person (app/routes/workspace/ask.ts). */ |
| 77 | WEB_ASK_LIMIT?: RateLimitBinding; | |
| Merge branch 'worktree-agent-a8752162fea25f63f' into spend-guardrails | 78 | GIT_ANONYMOUS_LIMIT?: RateLimitBinding; |
| 79 | GIT_SIGNED_LIMIT?: RateLimitBinding; | |
| Merge g1tusercontent.com: registry answers run nothing in a browser, the site's pages run only their own scripts, repository files and avatars on their own origin, raw files rate limited per address | 80 | /** |
| 81 | * Where repository files and avatars are served (app/lib/usercontent.ts). | |
| 82 | * Unset on g1t.sh, which is https://g1tusercontent.com; unset on another | |
| 83 | * site, `<SITE_URL>/-/usercontent`. | |
| 84 | */ | |
| 85 | USERCONTENT_URL?: string; | |
| 86 | /** Signs the short-lived addresses of private repositories' files. A secret. */ | |
| 87 | USERCONTENT_KEY?: string; | |
| Project settings say who created the project, by name | 88 | } |
| 89 | } | |
| 90 | interface Env extends Cloudflare.Env {} | |
| 91 | } |
This file's history is long; its oldest lines are credited to the oldest commit read.