Skip to content
Merged
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
d0d9ef0
feat(server): Expo credentials, EAS Simulator API, and EAS project lo…
juliusmarminge Oct 19, 2026
09f91fc
fix(server): keep the Expo credential out of API errors
juliusmarminge Oct 19, 2026
8f9abbb
refactor(server): generate the Expo GraphQL client from Expo's schema
juliusmarminge Oct 19, 2026
d3d5fe1
fix(server): read the EAS project id instead of running app config
juliusmarminge Oct 19, 2026
736cb25
fix(server): read only the live EAS project id, and app.config.json
juliusmarminge Oct 19, 2026
5ea48e4
fix(server): never guess the EAS project from an ambiguous app config
juliusmarminge Oct 20, 2026
d3c0c98
fix(server): treat a computed EAS project id as unknown, and say when…
juliusmarminge Oct 20, 2026
cefa4a0
fix(server): keep a 5xx uncertain, and refuse an EAS project id a con…
juliusmarminge Oct 20, 2026
d99a56c
fix(server): read app.json beside a dynamic config, and keep an inter…
juliusmarminge Oct 20, 2026
4f12d56
fix(server): read Expo's error marks and unwrapped app configs
juliusmarminge Oct 20, 2026
8f6c0d0
fix(server): treat an Expo error that is not the user's as uncertain
juliusmarminge Oct 20, 2026
d9fd5cc
fix(server): read an EAS project id only from a whole quoted value
juliusmarminge Oct 20, 2026
2edd85b
fix(server): read a refusal the way Expo answers one
juliusmarminge Oct 20, 2026
35ee9ca
fix(server): a line break alone does not end a quoted EAS project id
juliusmarminge Oct 20, 2026
4c5d01f
fix(server): a comment does not end a quoted EAS project id either
juliusmarminge Oct 20, 2026
1768e5d
fix(server): a separator inside a comment does not end a quoted EAS p…
juliusmarminge Oct 20, 2026
9d5b837
test(server): keep the EAS project id matcher fast on a long comment
juliusmarminge Oct 20, 2026
d315264
fix(server): end a comment at any line terminator, and refuse an EAS …
juliusmarminge Oct 20, 2026
8e30fb5
fix(server): treat an app config too large to be one as naming an unk…
juliusmarminge Oct 20, 2026
948ffc6
fix(server): refuse an EAS project id anything after it may replace
juliusmarminge Oct 20, 2026
858d500
test(server): loosen the project id lookup's time bounds for a loaded…
juliusmarminge Oct 20, 2026
a4fa356
fix(server): treat an app config with too many project id entries as …
juliusmarminge Oct 20, 2026
8a0d762
fix(server): see an assignment over the config however it is written
juliusmarminge Oct 20, 2026
3954f98
fix(server): an assignment over the config anywhere makes the EAS pro…
juliusmarminge Oct 20, 2026
7ad1f83
fix(server): a spread of another file over app.json's EAS project id …
juliusmarminge Oct 20, 2026
d222e7f
fix(server): read what a spread spreads past comments and parentheses
juliusmarminge Oct 20, 2026
4abf92a
fix(server): another service's project id does not stand in for an EA…
juliusmarminge Oct 20, 2026
40abeaf
fix(server): scan a config's spreads once, and read a spread-free dyn…
juliusmarminge Oct 20, 2026
5e181c2
fix(server): a dynamic config that spreads nothing may still use app.…
juliusmarminge Oct 20, 2026
d9e4993
fix(server): a Unicode escape continues an identifier after config too
juliusmarminge Oct 20, 2026
99ac63a
fix(server): cut the credential out of Expo's error messages, and see…
juliusmarminge Oct 20, 2026
c67b2bb
fix(server): refuse an EAS project id a config may replace from anoth…
juliusmarminge Oct 20, 2026
ae4f35b
fix(server): keep the HTTP status Expo answered an error with
juliusmarminge Oct 20, 2026
89c0082
fix(server): a quoted extra or eas key replaces app.json's EAS projec…
juliusmarminge Oct 20, 2026
5c2d707
fix(server): a shorthand, computed or bracket-assigned extra replaces…
juliusmarminge Oct 20, 2026
9a4ca45
fix(server): an extra or eas entry keeps app.json's EAS project id on…
juliusmarminge Oct 20, 2026
526125b
fix(server): a spread of the config's own extra or eas may be optiona…
juliusmarminge Oct 20, 2026
0e80be3
fix(server): a dynamic config spreads the config, not a part of it, t…
juliusmarminge Oct 20, 2026
587bf07
fix(server): a config that deletes anything may have dropped app.json…
juliusmarminge Oct 20, 2026
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
3 changes: 2 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# Batch files need CRLF for cmd.exe to parse them reliably.
*.cmd text eol=crlf
*.bat text eol=crlf
# GitHub's GraphQL schema and the operations graphqlgen writes from it.
# GitHub's and Expo's GraphQL schemas and the operations graphqlgen writes from them.
packages/source-control-github/schema/** linguist-generated
apps/server/schema/** linguist-generated
**/*.graphql.ts linguist-generated
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ jobs:
- name: Check generated GitHub GraphQL operations
run: vp run --filter @t3tools/source-control-github generate --check

- name: Check generated Expo GraphQL operations
run: vp run --filter t3 generate --check

- name: Check
run: vp check

Expand Down
13 changes: 13 additions & 0 deletions apps/server/graphql.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { defineConfig } from "@effect/graphql-generator/Config";

// `schema/expo.graphql` is api.expo.dev's schema, read by introspection
// (`vp run generate:expo-schema`). The EAS Simulator operations are the ones
// eas-cli's `simulator:*` commands send; Expo does not document them.
export default defineConfig({
schema: "./schema/expo.graphql",
documents: ["src/device/**/*.graphql"],
scalars: {
// Feature gates arrive as an object of gate name to boolean.
JSONObject: "effect/Schema#Json",
},
});
6 changes: 5 additions & 1 deletion apps/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@
"record:cursor-replay": "node --env-file-if-exists=../../.env --experimental-strip-types scripts/record-cursor-agent-sdk-replay-fixture.ts",
"record:pi-replay": "node scripts/record-pi-rpc-replay-fixture.ts",
"record:grok-replay": "node scripts/record-grok-acp-replay-fixture.ts",
"record:muse-replay": "node scripts/record-muse-msp-replay-fixture.ts"
"record:muse-replay": "node scripts/record-muse-msp-replay-fixture.ts",
"generate": "graphqlgen",
"generate:expo-schema": "node scripts/fetch-expo-schema.ts"
},
"dependencies": {
"@anthropic-ai/claude-agent-sdk": "^0.3.276",
Expand Down Expand Up @@ -64,6 +66,7 @@
"yauzl": "^3.4.0"
},
"devDependencies": {
"@effect/graphql-generator": "catalog:",
"@effect/vitest": "catalog:",
"@modelcontextprotocol/sdk": "1.29.0",
"@t3tools/contracts": "workspace:*",
Expand All @@ -78,6 +81,7 @@
"@types/yauzl": "^3.4.0",
"effect-acp": "workspace:*",
"effect-codex-app-server": "workspace:*",
"graphql": "16.14.1",
"vite-plus": "catalog:"
},
"engines": {
Expand Down
Loading
Loading