feat(sdk): add TypeScript Fern client + thin @agenta/sdk wrapper#4256
feat(sdk): add TypeScript Fern client + thin @agenta/sdk wrapper#4256mmabrouk wants to merge 1 commit intofeat/sdk/python-fern-clientfrom
Conversation
Mirrors the Python split (clients/python + sdks/python) on the
TypeScript side: a standalone Fern-generated client at
clients/typescript/ joins the web/ workspace via pnpm relative path,
and a thin convenience wrapper at web/packages/agenta-sdk/ re-exports
the client with a Python-style init() helper and a
getAgentaSdkClient() lazy singleton.
Fern generator config is tuned at the source instead of via per-app
workarounds:
- omitFernHeaders: true - drop X-Fern-* headers the
Agenta CORS allowlist rejects
- includeCredentialsOnCrossOriginRequests: true - withCredentials
baked in, so cookie-session auth works without a custom fetch
wrapper
- retainOriginalCasing: true - keep wire snake_case
(matches backend, OpenAPI spec, and v2 entity Zod schemas)
- browser: { fs/stream/buffer: false } and @types/node devDep -
browser-stub Node built-ins at the package.json level
Next.js workspace wiring (web/oss + web/ee):
- Add @agenta/sdk and @agenta/client to transpilePackages
- Lift turbopack.root and outputFileTracingRoot from web/ to repo
root, since clients/typescript/ is a sibling of web/ (Turbopack
refuses to follow symlinks pointing outside its root)
- web/{oss,ee}/package.json build script: emit standalone bundle
under .next/standalone/web/{oss,ee}/ to match the new tracing root
First real consumer: web/packages/agenta-entities/src/testset/api/api.ts
migrates fetchTestsetsList from raw axios.post('/testsets/query') to
client.testsets.queryTestsets(...). The Zod boundary stays - Fern's
compile-time types under-declare backend extra="allow" fields, so
drift detection still has independent value.
Also moves the legacy v2 SDK packages (agenta-sdk, agenta-sdk-tracing,
agenta-sdk-ai, agenta-sdk-mastra) to web/_reference/ so they remain on
disk for design lookup but sit outside the workspace glob and never
build.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 5b9085c1-b081-4173-b029-f5f4a7d02598
⛔ Files ignored due to path filters (298)
clients/typescript/src/generated/BaseClient.tsis excluded by!**/generated/**clients/typescript/src/generated/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/CreateOrganizationDomainRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/CreateOrganizationPayload.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/CreateOrganizationProviderRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/CreateWorkspace.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/DeleteOrganizationDomainRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/DeleteOrganizationProviderRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/DeleteOrganizationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/GetOrganizationDomainRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/GetOrganizationProviderRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/ListOrganizationDomainsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/ListOrganizationProvidersRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/PatchOrganizationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/ResetUserPasswordRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/TransferOrganizationOwnershipRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/UnassignRoleFromUserRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/UpdateOrganizationProviderRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/UpdateOrganizationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/UpdateWorkspace.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/UserRole.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/UserUpdate.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/VerifyOrganizationDomainRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/errors/UnprocessableEntityError.tsis excluded by!**/generated/**clients/typescript/src/generated/api/errors/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/accessControl/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/accessControl/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/accessControl/client/requests/VerifyPermissionsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/accessControl/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/accessControl/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/accessControl/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminAccountsCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminAccountsDeleteDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminCancelSubscriptionRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminCreateCheckoutRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminCreatePortalRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminDeleteApiKeyRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminDeleteOrganizationMembershipRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminDeleteOrganizationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminDeleteProjectMembershipRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminDeleteProjectRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminDeleteUserIdentityRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminDeleteWorkspaceMembershipRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminDeleteWorkspaceRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsApiKeysCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsDeleteDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsOrganizationsCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsOrganizationsMembershipsCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsOrganizationsTransferOwnershipDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsProjectsCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsProjectsMembershipsCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsUsersCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsUsersIdentitiesCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsUsersResetPasswordDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsWorkspacesCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSimpleAccountsWorkspacesMembershipsCreateDto.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/AdminSwitchPlansRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/EntitiesRequestModel.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/admin/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/aiServices/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/aiServices/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/aiServices/client/requests/ToolCallRequestModel.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/aiServices/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/aiServices/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/aiServices/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/apiKeys/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/apiKeys/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/apiKeys/client/requests/DeleteApiKeyRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/apiKeys/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/apiKeys/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/apiKeys/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationForkRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationRevisionCommitRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationRevisionCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationRevisionDeployRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationRevisionEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationRevisionQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationRevisionResolveRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationRevisionRetrieveRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationRevisionsLogRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationVariantCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ApplicationVariantEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ArchiveApplicationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ArchiveApplicationRevisionRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ArchiveApplicationVariantRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ArchiveSimpleApplicationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/FetchApplicationCatalogPresetRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/FetchApplicationCatalogTemplateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/FetchApplicationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/FetchApplicationRevisionRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/FetchApplicationVariantRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/FetchSimpleApplicationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ListApplicationCatalogPresetsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/ListApplicationCatalogTemplatesRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/QueryApplicationVariantsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/SimpleApplicationCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/SimpleApplicationEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/SimpleApplicationQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/UnarchiveApplicationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/UnarchiveApplicationRevisionRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/UnarchiveApplicationVariantRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/UnarchiveSimpleApplicationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/types/QueryApplicationVariantsRequestOrder.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/applications/types/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/auth/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/auth/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/auth/client/requests/CheckOrganizationAccessAuthAccessGetRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/auth/client/requests/DiscoverRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/auth/client/requests/SessionIdentitiesUpdate.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/auth/client/requests/SsoCallbackRedirectAuthSsoCallbackOrganizationSlugProviderSlugGetRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/auth/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/auth/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/auth/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/billing/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/billing/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/billing/client/requests/CreateCheckoutRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/billing/client/requests/SwitchPlansRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/billing/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/billing/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/billing/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/ArchiveEnvironmentRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/ArchiveEnvironmentRevisionRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/ArchiveEnvironmentVariantRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/ArchiveSimpleEnvironmentRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/EnvironmentCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/EnvironmentEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/EnvironmentRevisionCommitRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/EnvironmentRevisionCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/EnvironmentRevisionEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/EnvironmentRevisionResolveRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/EnvironmentRevisionRetrieveRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/EnvironmentRevisionsLogRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/EnvironmentVariantCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/EnvironmentVariantEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/FetchEnvironmentRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/FetchEnvironmentRevisionRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/FetchEnvironmentVariantRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/FetchSimpleEnvironmentRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/GuardSimpleEnvironmentRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/QueryEnvironmentRevisionsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/QueryEnvironmentVariantsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/QueryEnvironmentsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/SimpleEnvironmentCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/SimpleEnvironmentEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/SimpleEnvironmentQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/UnarchiveEnvironmentRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/UnarchiveEnvironmentRevisionRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/UnarchiveEnvironmentVariantRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/UnarchiveSimpleEnvironmentRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/UnguardSimpleEnvironmentRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/types/QueryEnvironmentRevisionsRequestOrder.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/types/QueryEnvironmentVariantsRequestOrder.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/types/QueryEnvironmentsRequestOrder.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/environments/types/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/CloseEvaluationSimpleEvaluationsEvaluationIdClosePostRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/CloseRunEvaluationsRunsRunIdCloseStatusPostRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/DeleteEvaluationSimpleEvaluationsEvaluationIdDeleteRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/DeleteQueueEvaluationsQueuesQueueIdDeleteRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/DeleteResultEvaluationsResultsResultIdDeleteRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/DeleteRunEvaluationsRunsRunIdDeleteRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/DeleteScenarioEvaluationsScenariosScenarioIdDeleteRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsIdsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationMetricsRefreshRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationQueueEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationQueueIdsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationQueueQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationQueueScenariosQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationQueuesCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationQueuesEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationResultEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationResultIdsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationResultQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationResultsCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationResultsEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationRunEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationRunQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationRunsCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationRunsEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationScenarioEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationScenarioIdsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationScenarioQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationScenariosCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/EvaluationScenariosEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/FetchEvaluationSimpleEvaluationsEvaluationIdGetRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/FetchQueueEvaluationsQueuesQueueIdGetRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/FetchResultEvaluationsResultsResultIdGetRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/FetchRunEvaluationsRunsRunIdGetRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/FetchScenarioEvaluationsScenariosScenarioIdGetRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/FetchSimpleQueueRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/OpenEvaluationSimpleEvaluationsEvaluationIdOpenPostRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/OpenRunEvaluationsRunsRunIdOpenPostRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/RefreshRunsAdminEvaluationsRunsRefreshPostRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/SimpleEvaluationCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/SimpleEvaluationEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/SimpleEvaluationQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/SimpleQueueCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/SimpleQueueQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/SimpleQueueScenariosQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/SimpleQueueTestcasesCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/SimpleQueueTracesCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/StartSimpleEvaluationRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/StopEvaluationSimpleEvaluationsEvaluationIdStopPostRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluations/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/ArchiveEvaluatorRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/ArchiveEvaluatorRevisionRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/ArchiveEvaluatorVariantRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/ArchiveSimpleEvaluatorRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorForkRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorRevisionCommitRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorRevisionCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorRevisionDeployRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorRevisionEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorRevisionQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorRevisionResolveRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorRevisionRetrieveRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorRevisionsLogRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorVariantCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/EvaluatorVariantEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/FetchEvaluatorCatalogPresetRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/FetchEvaluatorCatalogTemplateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/FetchEvaluatorRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/FetchEvaluatorRevisionRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/FetchEvaluatorVariantRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/FetchSimpleEvaluatorRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/ListEvaluatorCatalogPresetsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/ListEvaluatorCatalogTemplatesRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/ListEvaluatorTemplatesRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/QueryEvaluatorVariantsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/SimpleEvaluatorCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/SimpleEvaluatorEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/SimpleEvaluatorQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/UnarchiveEvaluatorRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/UnarchiveEvaluatorRevisionRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/UnarchiveEvaluatorVariantRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/UnarchiveSimpleEvaluatorRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/types/QueryEvaluatorVariantsRequestOrder.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/evaluators/types/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/events/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/events/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/events/client/requests/EventQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/events/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/events/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/events/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/folders/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/folders/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/folders/client/requests/DeleteFolderRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/folders/client/requests/FetchFolderRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/folders/client/requests/FolderCreateRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/folders/client/requests/FolderEditRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/folders/client/requests/FolderQueryRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/folders/client/requests/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/folders/exports.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/folders/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/observability/client/Client.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/observability/client/index.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/observability/client/requests/DeleteTraceTracingRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/observability/client/requests/EditTraceRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/observability/client/requests/EditTraceTracingRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/observability/client/requests/FetchAnalyticsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/observability/client/requests/FetchLegacyAnalyticsRequest.tsis excluded by!**/generated/**clients/typescript/src/generated/api/resources/observability/client/requests/FetchSpanRequest.tsis excluded by!**/generated/**
📒 Files selected for processing (2)
clients/typescript/README.mdclients/typescript/package.json
| Generate the TypeScript Fern client from a locally running API: | ||
|
|
||
| ```bash | ||
| bash ./clients/scripts/generate.sh --language typescript | ||
| ``` | ||
|
|
||
| Generate the TypeScript Fern client from the live cloud API: | ||
|
|
||
| ```bash | ||
| bash ./clients/scripts/generate.sh --language typescript --live | ||
| ``` |
There was a problem hiding this comment.
Clarify the expected working directory for the commands.
These commands are repo-root-relative; from this README’s directory they fail. Please explicitly state “run from repository root” (or provide both forms).
Suggested doc tweak
-Generate the TypeScript Fern client from a locally running API:
+From the repository root, generate the TypeScript Fern client from a locally running API:
```bash
bash ./clients/scripts/generate.sh --language typescript-Generate the TypeScript Fern client from the live cloud API:
+From the repository root, generate the TypeScript Fern client from the live cloud API:
bash ./clients/scripts/generate.sh --language typescript --live</details>
<!-- suggestion_start -->
<details>
<summary>📝 Committable suggestion</summary>
> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
```suggestion
From the repository root, generate the TypeScript Fern client from a locally running API:
|
Superseded by re-sliced PRs that fix CI failures. See new PR layout for details. |
Summary
Mirrors the Python split (
clients/python+sdks/python) on theTypeScript side: a standalone Fern-generated client at
clients/typescript/joins theweb/workspace via pnpm relativepath, and a thin convenience wrapper at
web/packages/agenta-sdk/re-exports the client with a Python-style
init()helper and agetAgentaSdkClient()lazy singleton.First real consumer:
web/packages/agenta-entities/src/testset/api/api.tsmigrates
fetchTestsetsListfrom rawaxios.post('/testsets/query')toclient.testsets.queryTestsets(...). The Zod boundary stays — Fern'scompile-time types under-declare backend
extra="allow"fields, sodrift detection still has independent value.
What changed
Adds:
clients/typescript/(1,144 files) — standalone Fern-generatedTypeScript client
web/packages/agenta-sdk/(3 files) — thin convenience wrapperexporting
init(),getAgentaSdkClient(), and typesweb/_reference/(126 files) — legacy v2 SDK packages(
agenta-sdk,agenta-sdk-tracing,agenta-sdk-ai,agenta-sdk-mastra) moved out of the workspace glob so theyremain on disk for design lookup but never build
Workspace wiring:
web/pnpm-workspace.yamladds../clients/typescriptweb/pnpm-lock.yamlregeneratedNext.js config (
web/{oss,ee}/next.config.ts):@agenta/sdkand@agenta/clienttotranspilePackagesturbopack.rootandoutputFileTracingRootfromweb/tothe repo root (
__dirname/../..). Reason:clients/typescript/isa sibling of
web/; pnpm symlinks it into the workspace via../../clients/typescript. Turbopack refuses to follow symlinkspointing outside its
root, so the root has to span bothweb/and
clients/.Build script update (
web/{oss,ee}/package.json):next build && cp -r public/. .next/standalone/web/{oss,ee}/public(was
.next/standalone/{oss,ee}/public) — matches the new tracingroot. Note: the package
versionfield stays at the currentrelease version; chore/review-fern's regression to
0.96.10wasnot applied.
Fern generator config (in
clients/scripts/generate.shfrom PRfeat/sdk/python-fern-client, regenerated for TS in this PR):omitFernHeaders: true— dropsX-Fern-*headers the Agenta CORSallowlist rejects
includeCredentialsOnCrossOriginRequests: true— withCredentialsbaked in, so cookie-session auth works without a custom fetch
wrapper
retainOriginalCasing: true— keep wire snake_case (matchesbackend, OpenAPI spec, and v2 entity Zod schemas — camelCase
conversion would have broken nearly all existing consumer code)
browser: { fs: false, stream: false, buffer: false }and@types/nodedevDep — browser-stub Node built-ins at thepackage.json level, so the client bundles cleanly in Next.js
First consumer migration:
web/packages/agenta-entities/src/testset/api/api.ts—fetchTestsetsListswitches toclient.testsets.queryTestsets(...)web/packages/agenta-entities/package.jsonadds the@agenta/sdkdep
.gitignore:
clients/typescript/dist/(build output is not committed)Diff
clients/typescript/(excluded from ruff via the parent PR's
ruff.toml; prettier onTS is a known gap — see Risks)
Risks
Reviewers should focus on:
web/packages/agenta-sdk/src/index.ts— the wrapper layerweb/{oss,ee}/next.config.ts— workspace config changesweb/packages/agenta-entities/src/testset/api/api.ts— theconsumer migration
clients/typescript/src/Client.tsandclients/typescript/package.jsonfor the generator config
rootchange. Liftingturbopack.rootandoutputFileTracingRootto the repo root could cause unrelatedfiles outside
web/to be picked up in the file tracing graph. Thenext buildstandalone bundle path under.next/standalone/web/{oss,ee}/is updated accordingly. Verifypreview deploys work end-to-end before merge.
clients/typescript/: the existing pre-commitconfig does not exclude
clients/from prettier. Modifying a TSfile in this directory will trigger prettier to reformat all of
clients/typescript/. Mitigation: prettier hook is idempotent onFern output (already formatted), but worth noting. A follow-up can
add
exclude: ^clients/to the prettier hook if it becomes anuisance.
includeCredentialsOnCrossOriginRequests: truegenerator option means every Fern-client call sends cookies. This
is desired behavior for browser usage but means the client should
not be reused across user sessions on the server side.
fetchTestsetsListis migrated. Therest of
web/packages/agenta-entities/src/testset/api/api.tsandevery other consumer still uses raw axios. This is intentional —
the migration is incremental and a single consumer proves the
wiring end-to-end.
QA
pnpm installfrom repo root resolves cleanly across theworkspace
cd web/oss && pnpm typecheckpassescd web/oss && pnpm lintpassescd web/oss && pnpm build(full Next build) succeeds andproduces output at
.next/standalone/web/oss/web/eecd web/oss && pnpm dev --turbopackstarts cleanly; visit/w/<workspace>/p/<project>/testsetsand confirm thetestsets list loads (this is the migrated
fetchTestsetsListpath)
POST /testsets/querywithCookie:header set (cookie authworks) and without
X-Fern-*headers (omitFernHeadersworking)
(
bash clients/scripts/generate.sh ts --openapi-url ...) — diffagainst committed
clients/typescript/src/should be emptyhttps://<preview>.agenta.ailoads the testsets pageNotes
feat/sdk/python-fern-client→chore/sdk/relocate-to-sdks-python→chore/infra/per-service-container-workdir.axios.post(...)toclient.X.method(...)without furtherworkspace changes.