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 phone app's scaffolding, in apps/mobile: Expo SDK 57 with Expo Router, Android first, with Chat, Code and Customize. It signs in with g1t's own OAuth 2.1 (PKCE, a client id that encodes "g1t for Android" and g1t://oauth/callback, so nothing is registered), keeps the server and credentials in the phone's keystore, refreshes the 30-day token a minute early and shares the single-use refresh between requests. A personal access token is the other way in, and a self-hosted g1t the other server. | 1 | import assert from "node:assert/strict"; |
| 2 | import { test } from "node:test"; | |
| 3 | ||
| 4 | import { CUSTOMIZE, CUSTOMIZE_SECTIONS, customizePath, sectionOfListing } from "./customize.ts"; | |
| 5 | ||
| 6 | test("every Marketplace listing has a place in Customize", () => { | |
| 7 | assert.equal(sectionOfListing("integration"), "connectors"); | |
| 8 | assert.equal(sectionOfListing("extension"), "plugins"); | |
| 9 | for (const section of CUSTOMIZE_SECTIONS) assert.equal(CUSTOMIZE[section].id, section); | |
| 10 | }); | |
| 11 | ||
| 12 | test("a section's site path names its workspace", () => { | |
| 13 | assert.equal(customizePath("connectors", "acme"), "/acme/-/marketplace/integrations"); | |
| 14 | assert.equal(customizePath("skills", "a b"), "/a%20b/-/agents/skills"); | |
| 15 | }); |