Code-generate inbound (server→client) RPC dispatch for the Rust SDK
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 55/100
- Tipo de issue
- Refactorización
- Claridad
- Bien especificado
- Estado de actividad
- Tranquilo
- Stack tecnológico
- rust, typescript
- Área
- api, backend-api-design, tooling
Línea de trabajo
Empieza con scripts/codegen/rust.ts y compara la emisión de entrada en scripts/codegen/{csharp,go,python,typescript}.ts. Después inspecciona rust/src/canvas_dispatch.rs, rust/src/session_fs_dispatch.rs y rust/src/copilot_request_handler.rs, preservando los traits ergonómicos y el puente de streaming. Se considera terminado cuando los traits de entrada generados y el dispatch sustituyan a los matches escritos a mano, mientras cargo build, clippy y la suite e2e completa de Rust sigan pasando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Background
The SDK protocol has two directions of RPC:
- Outbound (client→server): the SDK calls into the runtime.
- Inbound (server→client): the runtime calls back into the SDK — e.g.
clientSession.*(canvas,sessionFs) and the newclientGlobal.*(llmInference) callbacks added in #1689.
For inbound dispatch, the four SDKs split into two camps:
-
C#, Go, Python, TypeScript code-generate the inbound handler scaffolding (handler interfaces + the dispatch/registration glue) from
api.schema.json. Adding theclientGlobalbucket in #1689 required teaching all fourscripts/codegen/*.tsgenerators about it. -
Rust generates only the inbound wire types (
generated/api_types.rs) and method-name constants (rpc_methods::*ingenerated/rpc.rs). The per-group dispatch + handler trait is hand-written, consistently, across all three inbound groups:canvas.*→rust/src/canvas_dispatch.rssessionFs.*→rust/src/session_fs_dispatch.rsllmInference.*→rust/src/copilot_request_handler.rs(dispatch)
Each follows the identical shape: prefix-check → match
rpc_methods::*constant → deserialize generated params → call the hand-written handler trait → serialize the result. -
Java has no codegen pipeline at all (entire RPC surface hand-authored), so it's out of scope here.
Proposal
Bring Rust to parity with the other generated SDKs by code-generating the inbound handler trait + dispatch helper per group into rust/src/generated/, so future inbound callbacks (new clientSession / clientGlobal groups) come for free, as they already do in C#/Go/Python/TS.
Why this is its own PR, not part of #1689
This was investigated during #1689 and deliberately deferred:
-
Do all three groups, not a one-off. Rust's hand-written-dispatch convention is currently uniform across
canvas,sessionFs, andllmInference. Generating onlyllmInference(the group #1689 touches) would trade Rust's internal consistency for cross-SDK symmetry and leave a confusing one-off. The clean change converts all three groups together — a cross-cutting refactor of shipped, well-tested dispatchers and their public trait surfaces (CanvasHandler,SessionFsProvider,CopilotRequestHandler), out of scope for a callbacks PR. -
Generate only the low-level wire trait; keep ergonomic traits + streaming bridges hand-written. The public
CopilotRequestHandler(send_request+open_websocket) does not mirror the wire methods (httpRequestStart+httpRequestChunk); ~1200 lines bridge frame-oriented streaming ↔ that 2-method seam with stateful exchange correlation. Codegen should emit only the thin wire-level trait + dispatch (mirroring what TS generates), with the ergonomic traits and the llmInference bridge staying hand-written. Net hand-written savings are small (≈ the dispatchmatch+ method constants); the value is future-proofing and symmetry, not LOC. -
Validation. The streaming handler is heavily covered by Rust e2e (cancel / error / session-id) record-replay tests that should gate the refactor in CI.
Suggested scope of work
- Add inbound handler-trait + dispatch emission to
scripts/codegen/rust.ts(readclientSession+clientGlobal), emitting intorust/src/generated/. - Migrate
canvas_dispatch.rs,session_fs_dispatch.rs, andcopilot_request_handler.rsto implement/use the generated trait + dispatch instead of their hand-rolledmatch+ local method-name constants. - Keep ergonomic public traits (
CanvasHandler,SessionFsProvider,CopilotRequestHandler) and the llmInference streaming bridge hand-written. - Verify
cargo build+ clippy + the full Rust e2e suite stay green.
References
- PR #1689 (LLM inference callbacks) — where the
clientGlobalbucket and the C#/Go/Python/TS generator changes landed. - Generators with inbound support:
scripts/codegen/{csharp,go,python,typescript}.ts(emitClientGlobalApiRegistration/emitClientSessionApiRegistration). - Rust generator (outbound only today):
scripts/codegen/rust.ts.
- Lenguaje dominante
- Java
- Estrellas
- 10.5k
- Forks
- 1.5k
- Merge medio
- 1 d 9 h
- PR fusionados (30 d)
- 129
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de github/copilot-sdk
-
agentic-workflows
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
github/copilot-sdk#2760 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
github/copilot-sdk#2759 ·
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
github/copilot-sdk#2758 ·
-
agentic-workflows
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
github/copilot-sdk#2709 · 1 comentario ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
github/copilot-sdk#2673 ·
Todos los issues de github/copilot-sdk
Issues similares
-
area-deployment area-integrations triage:bot-seen
Dificultad 2/5 Medio día Aptitud para principiantes 86/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
apache/flink-agents#1156 ·
-
[source-shopify] FAILED bulk operation without partialDataUrl is silently treated as successful Abiertoarea/connectors autoteam community connectors/source/shopify needs-triage team/use type/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100