SDK regeneration - #25
Conversation
|
@coderabbitai Review this PR
|
Breaking Changes Report:
|
| Change | Impact vs main |
|---|---|
Budget *Dto type renames (BudgetUsageResponseDto → BudgetUsageResponse, CreateOrUpdateBudgetDto → CreateOrUpdateBudgetRequest, etc.) |
None vs main — these types are new on this branch (gateway budgets API). Names below updated to current HEAD. |
GuardrailConfigIntegrations += CiscoAiDefenseGuardrailConfig |
Additive (non-breaking for writers; exhaustive switches need a new case). |
PySparkTaskConfig.image: TaskPySparkBuild → PySparkTaskConfigImage (TaskPySparkBuild | TaskSparkImage) |
Low — widening; existing build-based configs still type-check. Exhaustive readers of image.type need task-spark-image. |
Executive summary
This regeneration is breaking for TypeScript consumers, even though most client.* call sites that only pass object literals will keep compiling.
Highest-impact categories:
- Mass request/response type renames (38) with old names fully removed — any
import type { UsersListRequest }style usage breaks. - Query param union narrowing — fields that accepted
string | string[](ornumber | number[]) now only accept arrays. - Removed / renamed exported types and enum members (
ResourceType,BuildStatus,GatewayLoggingRule,ExternalIdentity, etc.). - Structural type changes in manifests/models (gateway logging, agent user messages, identity discriminator).
- Widespread
| nullon optional fields (337 model fields across 86 types) — stricter null checks understrictNullChecks.
No public client.* methods were removed. Argument positions were not removed from public methods; breakages are primarily in named types, param shapes, and model fields.
1. Public client method surface
1.1 Removed methods
None (public, non-internal).
1.2 Added methods (non-breaking)
| Method | Notes / types |
|---|---|
client.gatewayBudgets.list |
→ TrueFoundry.GatewayBudget[] |
client.gatewayBudgets.createOrUpdate |
request: CreateOrUpdateBudgetRequest → GatewayBudget |
client.gatewayBudgets.get |
→ TrueFoundry.GatewayBudget |
client.gatewayBudgets.delete |
→ void |
client.gatewayBudgets.getLeaderboard |
→ TrueFoundry.BudgetUsageResponse |
client.gatewayBudgets.getMyUsage |
→ TrueFoundry.BudgetUsageResponse |
client.gatewayBudgets.simulate |
request: SimulateBudgetRequest → BudgetUsageResponse |
client.agents.getToken |
→ TrueFoundry.GetAgentIdentityTokenResponse |
1.3 Return type rename
| Method | main |
branch |
|---|---|---|
client.applications.cancelDeployment |
ApplicationsCancelDeploymentResponse |
CancelDeploymentApplicationsResponse |
2. HIGH: Request/response type renames (old names removed)
Fern renamed request/response types from {Resource}{Action}Request to {Action}{Resource}Request (and similar). Old type names are deleted — no aliases remain.
Call sites using untyped object literals are usually fine. Code that imports or annotates the old names will not compile.
| Client method | Removed type | Replacement |
|---|---|---|
client.agentSkillVersions.list |
AgentSkillVersionsListRequest |
ListAgentSkillVersionsRequest |
client.agentSkills.list |
AgentSkillsListRequest |
ListAgentSkillsRequest |
client.agentVersions.list |
AgentVersionsListRequest |
ListAgentVersionsRequest |
client.agents.list |
AgentsListRequest |
ListAgentsRequest |
client.alerts.list |
AlertsListRequest |
ListAlertsRequest |
client.applicationVersions.list |
ApplicationVersionsListRequest |
ListApplicationVersionsRequest |
client.applications.cancelDeployment |
ApplicationsCancelDeploymentResponse |
CancelDeploymentApplicationsResponse |
client.applications.list |
ApplicationsListRequest |
ListApplicationsRequest |
client.artifactVersions.list |
ArtifactVersionsListRequest |
ListArtifactVersionsRequest |
client.artifacts.list |
ArtifactsListRequest |
ListArtifactsRequest |
client.clusters.getAddons |
ClustersGetAddonsRequest |
GetAddonsClustersRequest |
client.clusters.list |
ClustersListRequest |
ListClustersRequest |
client.dataDirectories.delete |
DataDirectoriesDeleteRequest |
DeleteDataDirectoriesRequest |
client.dataDirectories.list |
DataDirectoriesListRequest |
ListDataDirectoriesRequest |
client.environments.list |
EnvironmentsListRequest |
ListEnvironmentsRequest |
client.events.get |
EventsGetRequest |
GetEventsRequest |
client.jobs.listRuns |
JobsListRunsRequest |
ListRunsJobsRequest |
client.jobs.terminate |
JobsTerminateRequest |
TerminateJobsRequest |
client.logs.get |
LogsGetRequest |
GetLogsRequest |
client.mlRepos.list |
MlReposListRequest |
ListMlReposRequest |
client.modelVersions.list |
ModelVersionsListRequest |
ListModelVersionsRequest |
client.models.list |
ModelsListRequest |
ListModelsRequest |
client.personalAccessTokens.get |
PersonalAccessTokensGetRequest |
GetPersonalAccessTokensRequest |
client.personalAccessTokens.list |
PersonalAccessTokensListRequest |
ListPersonalAccessTokensRequest |
client.promptVersions.list |
PromptVersionsListRequest |
ListPromptVersionsRequest |
client.prompts.list |
PromptsListRequest |
ListPromptsRequest |
client.runs.getMetricHistory |
RunsGetMetricHistoryRequest |
GetMetricHistoryRunsRequest |
client.secretGroups.delete |
SecretGroupsDeleteRequest |
DeleteSecretGroupsRequest |
client.secretGroups.list |
SecretGroupsListRequest |
ListSecretGroupsRequest |
client.secrets.delete |
SecretsDeleteRequest |
DeleteSecretsRequest |
client.teams.list |
TeamsListRequest |
ListTeamsRequest |
client.teams.listManagers |
TeamsListManagersRequest |
ListManagersTeamsRequest |
client.teams.listMembers |
TeamsListMembersRequest |
ListMembersTeamsRequest |
client.users.delete |
UsersDeleteRequest |
DeleteUsersRequest |
client.users.list |
UsersListRequest |
ListUsersRequest |
client.virtualAccounts.list |
VirtualAccountsListRequest |
ListVirtualAccountsRequest |
client.workspaces.list |
WorkspacesListRequest |
ListWorkspacesRequest |
client.workspaces.search |
WorkspacesSearchRequest |
SearchWorkspacesRequest |
Nested request enum/type renames (also removed)
| Removed | Replacement |
|---|---|
AgentsListRequestType |
ListAgentsRequestType |
ApplicationsListRequestDeviceTypeFilter |
ListApplicationsRequestDeviceTypeFilter |
ApplicationsListRequestLifecycleStage |
ListApplicationsRequestLifecycleStage |
3. HIGH: Query parameter union narrowing
These fields previously accepted a single value or an array. They now accept only an array (plus | null). Passing a bare string/number is a type error.
| Method | Field | main |
branch |
|---|---|---|---|
client.agents.list |
attributes |
`string | string[]` |
client.artifactVersions.list |
runIds |
`string | string[]` |
client.artifactVersions.list |
runSteps |
`number | number[]` |
client.clusters.getAddons |
attributes |
`string | string[]` |
client.clusters.list |
attributes |
`string | string[]` |
client.events.get |
podNames |
`string | string[]` |
client.jobs.listRuns |
triggeredBy |
`string | string[]` |
client.jobs.listRuns |
versionNumbers |
`number | number[]` |
client.logs.get |
podNames |
`string | string[]` |
client.mlRepos.list |
attributes |
`string | string[]` |
client.modelVersions.list |
runIds |
`string | string[]` |
client.modelVersions.list |
runSteps |
`number | number[]` |
client.secretGroups.list |
attributes |
`string | string[]` |
client.teams.list |
attributes |
`string | string[]` |
client.virtualAccounts.list |
ownedByTeams |
`string | string[]` |
client.workspaces.list |
attributes |
`string | string[]` |
Migration: wrap scalars in an array, e.g. attributes: "x" → attributes: ["x"].
4. HIGH: Removed / renamed exported types
| Removed type | Replacement / notes |
|---|---|
TrueFoundry.ResourceType |
Replaced in UpdateUserRolesRequest.resourceType by UpdateUserRolesRequestResourceType (resource-local). Global ResourceType export is gone. |
TrueFoundry.BuildStatus |
Renamed to DeploymentBuildStatus (same string values: STARTED / SUCCEEDED / FAILED). Used by DeploymentBuild.status. |
TrueFoundry.IChangeOperation |
Renamed to IChangeType (same values: REMOVE / ADD / UPDATE). Used by IChange.type. |
TrueFoundry.GatewayLoggingRule |
Removed with no type alias. Gateway logging config shape changed (see §5). |
TrueFoundry.GatewayLoggingWhen |
Renamed to LoggingWhen. |
TrueFoundry.ApplicationsCancelDeploymentResponse |
CancelDeploymentApplicationsResponse |
5. HIGH: Structural / semantic type changes
5.1 GatewayLoggingConfig reshaped
main:
interface GatewayLoggingConfig {
type: "gateway-logging-config";
name: string;
rules: GatewayLoggingRule[]; // each rule: { id, when, tracingProjectFqn }
}branch:
interface GatewayLoggingConfig {
type: "gateway-logging-config";
name: string;
when?: LoggingWhen;
log: boolean;
redactWith?: Redaction;
}Breaks any client.apply / manifest code that built logging configs with rules.
5.2 TrueFoundryAgentUserMessage discriminator changed
main |
branch | |
|---|---|---|
| Discriminator field | role: "user" |
type: "user.message" |
Field role was removed; field type was added.
5.3 IdentityProviderBackedIdentity.type value changed
main |
branch |
|---|---|
"idp-backed" |
"identity-provider-backed" |
Breaks discriminators / switch cases / equality checks on this literal.
5.4 Subject.subjectType type renamed
main |
branch |
|---|---|
TrueFoundry.SubjectType |
TrueFoundry.SubjectSubjectType |
SubjectType still exists as a separate export but no longer includes ExternalIdentity (see §6). Subject.subjectType now points at SubjectSubjectType (also without ExternalIdentity).
5.5 GcpGkeIntegration.location type renamed
main |
branch |
|---|---|
TrueFoundry.GcpRegion |
TrueFoundry.GcpGkeIntegrationLocation |
5.6 TrueFoundryApplyResponse.data typed more specifically
main |
branch |
|---|---|
Record<string, unknown> |
TrueFoundryApplyResponseData | null (union of concrete resource types) |
This can break code that treated data as a loose record or mutated it freely.
5.7 Empty response interfaces → type aliases
Several empty interface Foo {} became type Foo = {} (e.g. ActivateUserResponse, EmptyResponse, DeleteUserResponse, …). Usually non-breaking in practice; mention only if consumers relied on interface merging.
6. HIGH: Enum / const-object member removals
| Enum | Removed member | Value |
|---|---|---|
SubjectType |
ExternalIdentity |
"external-identity" |
RoleBindingSubjectType |
ExternalIdentity |
"external-identity" |
Code comparing subjects/role-bindings against "external-identity" or SubjectType.ExternalIdentity will break.
Enum additions (non-breaking)
New members were added to GcpRegion, VertexRegion, McpServerOAuth2GrantType, RoleWithResourceResourceType, budget mode enums, VirtualModelModelType, etc. Additive only.
7. MEDIUM: Removed interface fields
| Type | Removed field | Was |
|---|---|---|
BudgetV2Alert |
notifyBreachingUser |
boolean? |
GatewayLoggingConfig |
rules |
GatewayLoggingRule[] |
TrueFoundryAgentUserMessage |
role |
"user" |
8. MEDIUM: Fields that became optional
Reading code that assumes these are always present may need guards:
| Type | Field |
|---|---|
AgentIdentityManifest |
ownedBy |
McpServerOAuth2 |
tokenUrl |
McpServerOAuth2 |
jwtSource |
TeamBudgetConfig |
when |
TenantBudgetConfig |
when |
9. MEDIUM: Widespread | null on optional model fields
337 fields across 86 types changed from T? / T optional patterns to include | null (typical Fern nullable+optional regeneration).
Impact: under strictNullChecks, assigning these fields to non-nullable locals, or calling methods without null checks, becomes a type error. Runtime JSON with explicit null is now accurately typed.
Most affected types (by field count):
| Type | # fields gaining | null |
|---|---|
Application |
22 |
AddonComponent |
20 |
Deployment |
13 |
DeploymentBuild |
13 |
Session |
13 |
UserMetadata |
13 |
JobRun |
10 |
VirtualAccount |
10 |
DeploymentStatus |
9 |
ApplicationSummary |
8 |
Recommendation |
8 |
Alert |
7 |
InternalArtifactVersion |
7 |
Secret |
7 |
InternalModelVersion |
6 |
SecretVersion |
6 |
UpgradeData |
6 |
ModelVersion |
5 |
SecretGroup |
5 |
Subject |
5 |
ApplicationDebugInfo |
4 |
Artifact |
4 |
ArtifactVersion |
4 |
Environment |
4 |
MlRepo |
4 |
Full list of files with nullability additions
| Type | Fields |
|---|---|
Account |
id, createdAt, updatedAt |
AddonComponent |
appName, namespace, applicationId, description, path, addonFolder, installed, status, version, manifest, installationSource, unsupportedClusterTypes, required, knownCrDs, source, upgrades, labels, recommendations, workspaceId, metadata |
AddonComponentStatus |
healthStatus, syncStatus |
Agent |
id, latestVersionDetails, createdBy |
AgentSkill |
createdAt, updatedAt, latestVersion |
AgentSkillVersion |
createdAt, updatedAt |
AgentVersion |
id, metadata, createdBySubject |
AgentVersionMetadata |
promptVariables |
Alert |
id, resolvedTime, applicationId, tenantName, updatedAt, createdAt, applicationDebugInfoId |
Application |
id, fqn, name, type, tenantName, metadata, workspaceId, lastVersion, activeVersion, applicationSetId, createdAt, updatedAt, recommendations, alerts, alertsSummary, applicationDebugInfos, potentialProblems, workspaceFqn, createdBy, deployment, activeDeploymentId, lastDeploymentId |
ApplicationDebugInfo |
id, application, createdAt, updatedAt |
ApplicationMetadata |
paused |
ApplicationSummary |
id, fqn, name, type, metadata, workspaceId, activeVersion, applicationSetId |
Artifact |
createdAt, updatedAt, latestVersion, runSteps |
ArtifactManifest |
description |
ArtifactVersion |
createdAt, updatedAt, usageCodeSnippet, tags |
BaseService |
env |
BaseWorkbenchInput |
env |
ChatPromptManifest |
description, variables |
Cluster |
createdBySubject, createdBy |
ClusterGateway |
uid, isTieBreaker |
ContainerTaskConfig |
env |
DataDirectory |
usageCodeSnippet |
DataDirectoryManifest |
description |
DatabricksJobTaskConfig |
jobParameters, timeoutSeconds, env |
Deployment |
id, version, fqn, applicationId, application, createdAt, updatedAt, deploymentBuilds, deploymentStatuses, currentStatusId, currentStatus, appliedRecommendations, createdBy |
DeploymentBuild |
id, deploymentId, componentName, build, buildId, imageUri, name, getLogsUrl, tailLogsUrl, logsStartTs, metadata, createdAt, updatedAt |
DeploymentStatus |
id, deploymentId, status, state, transition, message, retryCount, createdAt, updatedAt |
Environment |
id, priority, optimizeFor, createdBy |
Event |
name, firstTimestamp, namespace |
EventInvolvedObject |
apiVersion, namespace, containerName |
FileInfo |
fileSize, signedUrl, lastModified |
GatewayConfiguration |
id, createdAt, updatedAt |
GetAutoProvisioningStateResponse |
state |
GetSuggestedDeploymentEndpointResponse |
path, gateway |
GetVirtualAccountResponse |
token |
GitRepositoryExistsResponse |
id |
HttpError |
code, details |
IChange |
value, oldValue, changes |
InternalArtifactVersion |
createdAt, updatedAt, usageCodeSnippet, tags, artifactSize, artifactMetadata, internalMetadata |
InternalModelVersion |
createdAt, updatedAt, usageCodeSnippet, metrics, deployable, artifactSize |
Job |
env |
JobRun |
endTime, duration, error, triggeredBy, triggeredBySubject, exitCode, sparkUi, applicationId, deploymentId, tenantName |
JobTriggerInput |
command, params |
Jwt |
metadata |
ListFilesRequest |
path, limit, pageToken |
Log |
jobName, containerName |
Metadata |
jobRunNameAlias |
Metric |
value, timestamp, step |
MlRepo |
numRuns, artifactTypeCounts, datasetsCount, tracingProjectsCount |
Model |
createdAt, updatedAt, latestVersion, runSteps |
ModelManifest |
description |
ModelVersion |
createdAt, updatedAt, usageCodeSnippet, metrics, deployable |
MultiPartUpload |
s3CompatibleUploadId, azureBlobBlockIds |
Pagination |
offset, limit |
PresignedUrlObject |
headers |
Prompt |
createdAt, updatedAt, latestVersion, runSteps |
PromptVersion |
createdAt, updatedAt, usageCodeSnippet |
PySparkTaskConfig |
sparkConf, env |
PythonTaskConfig |
env |
Recommendation |
id, clusterId, applicationId, deploymentId, applicationVersion, appliedDeploymentId, createdAt, updatedAt |
SearchRunsResponse |
total, nextPageToken |
Secret |
value, createdBySubject, createdAt, updatedAt, secretVersions, activeDeploymentsCount, createdBy |
SecretGroup |
id, fqn, integrationId, manifest, createdBy |
SecretVersion |
value, version, secret, secretId, createdAt, updatedAt |
Session |
userName, subjectControllerName, subjectPatName, subjectExternalIdentitySlug, email, tenantName, metadata, createdAt, isBillingEnabled, actor, serviceAccountMetadata, account, rootAccount |
SessionActor |
organization |
SparkJob |
env, sparkConf |
SparkJobTriggerInput |
mainClass, mainApplicationFile, arguments |
Subject |
subjectSlug, subjectDisplayName, subjectPatName, subjectControllerName, subjectExternalIdentitySlug |
SubjectPermission |
resourceName, resourceFqn |
SyncTokenInSecretStoreInfo |
error |
Team |
members, metadata, roles |
TeamMetadata |
createdByScim, scimExternalId |
TokenPagination |
limit, nextPageToken, previousPageToken |
TraceSpan |
feedbacks |
TransformersFramework |
libraryName, pipelineTag, baseModel |
TrueFoundryApplyResponse |
existingManifest, action |
UpdateSecretInput |
value |
UpgradeData |
diff, currentManifest, desiredManifest, upgradePossible, conflictFields, hasConflict |
UsageCodeSnippet |
libraries, icon |
User |
roles, rolesWithResource, accounts, lastAccessedAt |
UserMetadata |
sub, imageUrl, pictureDownloadPath, displayName, userObject, inviteAccepted, registeredInIdp, preference, groups, tenantRoleManagedBy, ssoName, scimUserObject, createdByScim |
UserResource |
resourceName |
VirtualAccount |
manifest, jwtId, lastAccessedAt, isExpired, jwts, metadata, roleIds, rolesWithResource, createdBy, nextScheduledRotation |
Workspace |
environmentId, isSystemWs, createdBy |
Request types show the same pattern (~159 optional query fields gained | null) in addition to renames/narrowing above.
10. Union expansions (additive / low risk)
These widen unions and are generally non-breaking for writers; readers with exhaustive switches may need new cases:
| Type | Change |
|---|---|
HeaderRoutingConfig |
Added ComplexityBasedLoadBalancing |
GuardrailConfigIntegrations |
Added NomaSecurityGuardrailConfig, CiscoAiDefenseGuardrailConfig |
TrueFoundryApplyRequestManifest (and delete/existing variants) |
Added AgentChannelManifest |
TrueFoundryApplyResponseData |
New concrete union replacing Record<string, unknown> |
PySparkTaskConfig.image |
Was TaskPySparkBuild; now PySparkTaskConfigImage = TaskPySparkBuild | TaskSparkImage (new prebuilt-image option) |
11. What did not break (for clarity)
- No public methods removed from
client.*(excluding internal). - No required method arguments removed from public clients.
- No fields became newly required (optional → required count: 0).
- Trailing-comma-only signature formatting churn is not a runtime/API break.
12. Suggested consumer migration checklist
- Re-export / re-import renamed request types (
UsersListRequest→ListUsersRequest, etc.). - Replace
ResourceTypewithUpdateUserRolesRequestResourceType(or string literals). - Replace
BuildStatus→DeploymentBuildStatus,IChangeOperation→IChangeType,GatewayLoggingWhen→LoggingWhen. - Convert scalar multi-value query params to arrays (
attributes,podNames,runIds, …). - Update gateway logging manifests to the new
when/log/redactWithshape. - Update agent user messages:
role: "user"→type: "user.message". - Update identity discriminator:
"idp-backed"→"identity-provider-backed". - Remove uses of
SubjectType.ExternalIdentity/RoleBindingSubjectType.ExternalIdentity. - Add null checks for response fields that are now
T | null | undefined. - Update
cancelDeploymentreturn type name if annotated.
Appendix A: Complete request type rename map
| Old | New |
|---|---|
AgentSkillVersionsListRequest |
ListAgentSkillVersionsRequest |
AgentSkillsListRequest |
ListAgentSkillsRequest |
AgentVersionsListRequest |
ListAgentVersionsRequest |
AgentsListRequest |
ListAgentsRequest |
AlertsListRequest |
ListAlertsRequest |
ApplicationVersionsListRequest |
ListApplicationVersionsRequest |
ApplicationsCancelDeploymentResponse |
CancelDeploymentApplicationsResponse |
ApplicationsListRequest |
ListApplicationsRequest |
ArtifactVersionsListRequest |
ListArtifactVersionsRequest |
ArtifactsListRequest |
ListArtifactsRequest |
ClustersGetAddonsRequest |
GetAddonsClustersRequest |
ClustersListRequest |
ListClustersRequest |
DataDirectoriesDeleteRequest |
DeleteDataDirectoriesRequest |
DataDirectoriesListRequest |
ListDataDirectoriesRequest |
EnvironmentsListRequest |
ListEnvironmentsRequest |
EventsGetRequest |
GetEventsRequest |
JobsListRunsRequest |
ListRunsJobsRequest |
JobsTerminateRequest |
TerminateJobsRequest |
LogsGetRequest |
GetLogsRequest |
MlReposListRequest |
ListMlReposRequest |
ModelVersionsListRequest |
ListModelVersionsRequest |
ModelsListRequest |
ListModelsRequest |
PersonalAccessTokensGetRequest |
GetPersonalAccessTokensRequest |
PersonalAccessTokensListRequest |
ListPersonalAccessTokensRequest |
PromptVersionsListRequest |
ListPromptVersionsRequest |
PromptsListRequest |
ListPromptsRequest |
RunsGetMetricHistoryRequest |
GetMetricHistoryRunsRequest |
SecretGroupsDeleteRequest |
DeleteSecretGroupsRequest |
SecretGroupsListRequest |
ListSecretGroupsRequest |
SecretsDeleteRequest |
DeleteSecretsRequest |
TeamsListRequest |
ListTeamsRequest |
TeamsListManagersRequest |
ListManagersTeamsRequest |
TeamsListMembersRequest |
ListMembersTeamsRequest |
UsersDeleteRequest |
DeleteUsersRequest |
UsersListRequest |
ListUsersRequest |
VirtualAccountsListRequest |
ListVirtualAccountsRequest |
WorkspacesListRequest |
ListWorkspacesRequest |
WorkspacesSearchRequest |
SearchWorkspacesRequest |
Generated against main...HEAD (524dabb5) on branch chiragjn-nullable-optional. Internal group excluded per review scope. Last updated after commit 524dabb5.
|
Important Review skippedToo many files! This PR contains 2507 files, which is 2357 over the limit of 150. To get a review, narrow the scope: Upgrade to Pro+ to raise the limit. Usage-priced reviews support at most 300 files. ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (2531)
You can disable this status message by setting the |
Note
Medium Risk
Large auto-generated diff with widespread TypeScript type renames that can break compile-time consumers; new gateway budget and agent token APIs add surface area but are additive.
Overview
This PR regenerates the entire SDK from an updated Fern/OpenAPI definition (CLI 5.82.0, generator 3.85.1), so most changes are mechanical but they affect every consumer of the package.
New capabilities:
client.gatewayBudgetsis wired onTrueFoundryClientwith list, create/update, usage, simulate, get, delete, and leaderboard calls, plus atruefoundry-sdk/gatewayBudgetssubpath export.client.agents.getTokenis documented for on-demand agent identity tokens.Breaking / migration notes for TypeScript users: Fern renamed request types across the board (e.g.
UsersListRequest→ListUsersRequest,InternalGetIdFromFqnRequest→GetIdFromFqnInternalRequest). README examples now construct the client withbaseUrlinstead ofenvironment. Optional request fields are typed asT | nullin more places.Client/runtime behavior:
BaseRequestOptionsgainsadditionalBodyParametersmerged into JSON bodies on mutating calls. Several HTTP error classes nowdeclaretypedbody: HttpError. Docs trim optional query/body fields from examples; APIs still accept them where defined.Build tooling:
scripts/rename-to-esm-files.jsnow resolves extensionless relative imports to.mjsfor valid Node ESM.pnpm-lock.yamlbumps dev tooling (vitest, webpack, vite, etc.).Reviewed by Cursor Bugbot for commit c705c3f. Bugbot is set up for automated code reviews on this repo. Configure here.