Skip to content
94 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.

Docs: a workspace knowledge base people and agents write together1{
2 "$schema": "../../node_modules/wrangler/config-schema.json",
3 "name": "g1t-docs-service",
4 "account_id": "1e6f2cffa3f445920836e8ebe446bb58",
5 "compatibility_date": "2026-09-26",
6 "main": "./src/index.ts",
7 // Reached only through service bindings. The live socket's and uploads'
8 // viewer comes in a header the site sets after checking the session,
9 // which is only safe to trust because nothing else can reach this Worker.
10 "workers_dev": false,
11 "placement": { "mode": "off" },
12 "d1_databases": [
13 {
14 "binding": "DB",
15 "database_name": "g1t-docs",
16 // Create it once, then put its id here:
17 // npx wrangler d1 create g1t-docs
18 // npx wrangler d1 migrations apply g1t-docs --remote
Docs: the g1t-docs database's id19 "database_id": "8f2193ed-fd2b-4322-b6cb-c79090e7603d",
Docs: a workspace knowledge base people and agents write together20 "migrations_dir": "migrations"
21 }
22 ],
23 // Files people put in pages (images, attachments), served from the
24 // usercontent origin at /docs-files/<key> (apps/web/workers/usercontent.ts).
25 // Create it once: npx wrangler r2 bucket create g1t-docs-files
Docs know what code they describe; a project's docs folder in Docs; Docs events; files on any S3 store26 // Self-hosted, any S3-compatible store instead: DOCS_FILES=s3 and the
27 // DOCS_S3_* settings (src/files.ts, docs/SELF_HOSTING.md).
Docs: a workspace knowledge base people and agents write together28 "r2_buckets": [{ "binding": "FILES", "bucket_name": "g1t-docs-files" }],
Docs index by meaning: passages of every page and project doc, embedded on save and recalled for agents; hybrid search for people29 // The semantic index agents recall from (src/indexer.ts, src/vectors.ts):
30 // Workers AI embeds passages (@cf/baai/bge-base-en-v1.5, 768 dimensions)
31 // into Vectorize, with metadata indexes on workspace_id and space_id so a
32 // query only reads spaces its reader may. Create it once:
33 // npx wrangler vectorize create g1t-docs --dimensions=768 --metric=cosine
34 // npx wrangler vectorize create-metadata-index g1t-docs --property-name=workspace_id --type=string
35 // npx wrangler vectorize create-metadata-index g1t-docs --property-name=space_id --type=string
36 // Without them Docs still keeps passages in D1 and recall matches words.
The docs service answers every artifacts call: docs can be made, listed, shared, moved, trashed, restored, searched, versioned and edited live in their own rooms, agents read, write and recall them only where their person and everyone in the conversation can, and folio events go out on the bus, while Docs' pages keep working as before.37 //
38 // Folios (Artifacts mode, docs/ARTIFACTS_MODE.md section 5) have an
39 // index of their own, filtered by workspace, scope and kind. Create it
40 // once, before the first deploy that has this binding:
41 // npx wrangler vectorize create g1t-folios --dimensions=768 --metric=cosine
42 // npx wrangler vectorize create-metadata-index g1t-folios --property-name=workspace_id --type=string
43 // npx wrangler vectorize create-metadata-index g1t-folios --property-name=scope --type=string
44 // npx wrangler vectorize create-metadata-index g1t-folios --property-name=kind --type=string
45 // Without FOLIO_VECTORS, artifacts are searched and recalled by words.
Docs index by meaning: passages of every page and project doc, embedded on save and recalled for agents; hybrid search for people46 "ai": { "binding": "AI" },
The docs service answers every artifacts call: docs can be made, listed, shared, moved, trashed, restored, searched, versioned and edited live in their own rooms, agents read, write and recall them only where their person and everyone in the conversation can, and folio events go out on the bus, while Docs' pages keep working as before.47 "vectorize": [
48 { "binding": "VECTORS", "index_name": "g1t-docs" },
49 { "binding": "FOLIO_VECTORS", "index_name": "g1t-folios" }
50 ],
Docs: a workspace knowledge base people and agents write together51 "services": [
52 // Workspaces by slug, people's names and avatars, and teams.
53 { "binding": "IDENTITY", "service": "g1t-identity" },
54 // The workspace's agents: who they are, for agents' calls and mentions.
55 { "binding": "AGENTS", "service": "g1t-agents" },
56 // Mentions and suggestions reach people's inboxes (services/notify).
Docs know what code they describe; a project's docs folder in Docs; Docs events; files on any S3 store57 { "binding": "NOTIFY", "service": "g1t-notify" },
58 // Who may read a repository, what a change touched, and a project's
59 // docs folder (src/staleness.ts, src/repo-spaces.ts).
60 { "binding": "REPOS", "service": "g1t-repos" },
61 // What a merged pull request changed.
62 { "binding": "WORK", "service": "g1t-work" },
63 // doc.page.* events on the bus (src/events.ts).
64 { "binding": "EVENTS", "service": "g1t-events" }
Docs: a workspace knowledge base people and agents write together65 ],
Docs know what code they describe; a project's docs folder in Docs; Docs events; files on any S3 store66 // Merges and pushes to default branches: pages whose cited code
67 // changed, and projects' docs read again (src/staleness.ts). The events
68 // service sends it what g1t_contracts::subscribers routes to
69 // SUBSCRIBER_DOCS. Create it once: npx wrangler queues create g1t-events-docs
70 "queues": {
Docs index by meaning: passages of every page and project doc, embedded on save and recalled for agents; hybrid search for people71 // Its own backfill jobs ride the same queue (`docs.index`,
72 // src/indexer.ts): a workspace's pages and projects' docs indexed in
73 // batches, and waiting out the hourly embedding cap.
74 "producers": [{ "binding": "JOBS", "queue": "g1t-events-docs" }],
Docs know what code they describe; a project's docs folder in Docs; Docs events; files on any S3 store75 "consumers": [{ "queue": "g1t-events-docs", "max_batch_size": 20, "max_batch_timeout": 2, "max_retries": 3, "dead_letter_queue": "g1t-events-dlq" }]
76 },
Docs: a workspace knowledge base people and agents write together77 // One room per page: it holds the page's Yjs document and open sockets,
The docs service answers every artifacts call: docs can be made, listed, shared, moved, trashed, restored, searched, versioned and edited live in their own rooms, agents read, write and recall them only where their person and everyone in the conversation can, and folio events go out on the bus, while Docs' pages keep working as before.78 // hibernating while nobody types (src/room.ts). And one per folio
79 // (Artifacts mode, src/folios/room.ts): PageRoom stays until Phase 7
80 // deletes it (`deleted_classes` in a v3 migration).
Docs: a workspace knowledge base people and agents write together81 "durable_objects": {
The docs service answers every artifacts call: docs can be made, listed, shared, moved, trashed, restored, searched, versioned and edited live in their own rooms, agents read, write and recall them only where their person and everyone in the conversation can, and folio events go out on the bus, while Docs' pages keep working as before.82 "bindings": [
83 { "name": "PAGES", "class_name": "PageRoom" },
84 { "name": "FOLIOS", "class_name": "FolioRoom" }
85 ]
Docs: a workspace knowledge base people and agents write together86 },
The docs service answers every artifacts call: docs can be made, listed, shared, moved, trashed, restored, searched, versioned and edited live in their own rooms, agents read, write and recall them only where their person and everyone in the conversation can, and folio events go out on the bus, while Docs' pages keep working as before.87 "migrations": [
88 { "tag": "v1", "new_sqlite_classes": ["PageRoom"] },
89 { "tag": "v2", "new_sqlite_classes": ["FolioRoom"] }
90 ],
91 // Daily: folios in the trash for over 30 days are deleted for good.
92 "triggers": { "crons": ["17 3 * * *"] },
Docs: a workspace knowledge base people and agents write together93 "observability": { "enabled": true, "head_sampling_rate": 0.1 }
94}