@renai-labs/sdk 0.1.20 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1423,6 +1423,14 @@ export class Skill extends HeyApiClient {
1423
1423
  },
1424
1424
  });
1425
1425
  }
1426
+ /**
1427
+ * Resolve the one version served per skill in this project, with pin-conflict warnings
1428
+ *
1429
+ * The server resolves one version per skill per project — highest live version wins (decision 5). When a bound pin loses, it is reported here as a warning (never an error at bind time): a pin can lose later when someone publishes a newer version, so there is no request to reject at that moment.
1430
+ */
1431
+ resolution(options) {
1432
+ return (options.client ?? this.client).get({ url: "/api/projects/{id}/skills/resolution", ...options });
1433
+ }
1426
1434
  /**
1427
1435
  * Detach a skill from a project
1428
1436
  */
@@ -1858,6 +1866,8 @@ export class Session extends HeyApiClient {
1858
1866
  export class Version2 extends HeyApiClient {
1859
1867
  /**
1860
1868
  * List skill versions
1869
+ *
1870
+ * Git-backed skills are versionless (GitHub owns their history) but expose one pointer row holding the git source; its version string is a placeholder, not a commit SHA.
1861
1871
  */
1862
1872
  list(options) {
1863
1873
  return (options.client ?? this.client).get({
@@ -1870,11 +1880,10 @@ export class Version2 extends HeyApiClient {
1870
1880
  */
1871
1881
  create(options) {
1872
1882
  return (options.client ?? this.client).post({
1873
- ...formDataBodySerializer,
1874
1883
  url: "/api/skills/{id}/versions",
1875
1884
  ...options,
1876
1885
  headers: {
1877
- "Content-Type": null,
1886
+ "Content-Type": "application/json",
1878
1887
  ...options.headers,
1879
1888
  },
1880
1889
  });
@@ -1909,7 +1918,7 @@ export class Version2 extends HeyApiClient {
1909
1918
  }
1910
1919
  export class Skill2 extends HeyApiClient {
1911
1920
  /**
1912
- * List skills
1921
+ * List and search skills
1913
1922
  */
1914
1923
  list(options) {
1915
1924
  return (options?.client ?? this.client).get({
@@ -1921,22 +1930,8 @@ export class Skill2 extends HeyApiClient {
1921
1930
  * Create a skill
1922
1931
  */
1923
1932
  create(options) {
1924
- return (options.client ?? this.client).post({
1925
- ...formDataBodySerializer,
1926
- url: "/api/skills",
1927
- ...options,
1928
- headers: {
1929
- "Content-Type": null,
1930
- ...options.headers,
1931
- },
1932
- });
1933
- }
1934
- /**
1935
- * Search skills across private, org, and published tiers
1936
- */
1937
- search(options) {
1938
1933
  return (options?.client ?? this.client).post({
1939
- url: "/api/skills/search",
1934
+ url: "/api/skills",
1940
1935
  ...options,
1941
1936
  headers: {
1942
1937
  "Content-Type": "application/json",
@@ -1945,20 +1940,11 @@ export class Skill2 extends HeyApiClient {
1945
1940
  });
1946
1941
  }
1947
1942
  /**
1948
- * Get a skill by slug
1949
- */
1950
- getBySlug(options) {
1951
- return (options.client ?? this.client).get({
1952
- url: "/api/skills/slug/{slug}",
1953
- ...options,
1954
- });
1955
- }
1956
- /**
1957
- * Get a skill
1943
+ * Get a skill by ID or slug
1958
1944
  */
1959
1945
  get(options) {
1960
1946
  return (options.client ?? this.client).get({
1961
- url: "/api/skills/{id}",
1947
+ url: "/api/skills/{idOrSlug}",
1962
1948
  ...options,
1963
1949
  });
1964
1950
  }
@@ -1986,6 +1972,8 @@ export class Skill2 extends HeyApiClient {
1986
1972
  }
1987
1973
  /**
1988
1974
  * Publish a skill
1975
+ *
1976
+ * Publishing changes copyability (the skill enters the registry), not materialisation: it does NOT fan out to sandboxes. A git-backed skill's repository must be publicly cloneable (decision 11).
1989
1977
  */
1990
1978
  publish(options) {
1991
1979
  return (options.client ?? this.client).post({
@@ -1995,6 +1983,8 @@ export class Skill2 extends HeyApiClient {
1995
1983
  }
1996
1984
  /**
1997
1985
  * Deprecate a skill
1986
+ *
1987
+ * Deprecation is an adoption signal only — it does NOT affect materialisation: sandboxes already tracking the skill keep receiving it. Use archive to remove a skill from sandboxes.
1998
1988
  */
1999
1989
  deprecate(options) {
2000
1990
  return (options.client ?? this.client).post({
@@ -835,6 +835,22 @@ export type Topology = {
835
835
  address: string;
836
836
  }>;
837
837
  };
838
+ export type SkillVersionFiles = {
839
+ /**
840
+ * Discriminant: this version is file-backed and returns its files inline.
841
+ */
842
+ type: "files";
843
+ files: Array<{
844
+ /**
845
+ * Relative path within the skill folder.
846
+ */
847
+ path: string;
848
+ /**
849
+ * Base64-encoded file bytes. Decode to reconstruct the exact file.
850
+ */
851
+ contentBase64: string;
852
+ }>;
853
+ };
838
854
  export type SkillVersion = {
839
855
  id: string;
840
856
  skillId: string;
@@ -844,16 +860,54 @@ export type SkillVersion = {
844
860
  archivedAt: string | null;
845
861
  source: {
846
862
  type: "s3";
847
- url: string;
863
+ /**
864
+ * S3 object-key prefix holding the version's files, one object per file at `${key}/${path}`. The prefix is stored (not a full URL) so a storage-endpoint change never breaks a stored skill; presigned URLs are built at read time (decision 12, Materialise fix #5).
865
+ */
866
+ key: string;
848
867
  } | {
849
868
  type: "git";
869
+ /**
870
+ * HTTPS git repository URL (https:// only). Public repos are cloned directly; private repos use the org's GitHub installation.
871
+ */
850
872
  url: string;
873
+ /**
874
+ * Branch, tag, or commit to mirror. Omitted = the remote's default branch (HEAD). Floating refs are re-resolved at index build time.
875
+ */
851
876
  ref?: string;
877
+ /**
878
+ * Subdirectory containing SKILL.md, relative to the repo root. No leading slash or '..' segments.
879
+ */
852
880
  path?: string;
853
881
  };
854
882
  requiredCredentials: Array<RequiredCredential>;
855
883
  releaseNotes: string | null;
856
- contentHash: string | null;
884
+ };
885
+ export type SkillArchiveResult = {
886
+ id: string;
887
+ slug: string;
888
+ name: string;
889
+ description: string | null;
890
+ icon: string | null;
891
+ docUrl: string | null;
892
+ repository: Repository | null;
893
+ orgId: string;
894
+ userId: string | null;
895
+ publisherId: string | null;
896
+ parentId: string | null;
897
+ websiteMetadata: WebsiteMetadata | null;
898
+ sortOrder: number | null;
899
+ popularityScore: number | null;
900
+ trendingScore: number | null;
901
+ rank: number | null;
902
+ latestVersionId: string | null;
903
+ createdAt: string;
904
+ updatedAt: string;
905
+ archivedAt: string | null;
906
+ deprecatedAt: string | null;
907
+ deprecationMessage: string | null;
908
+ tags?: Array<string>;
909
+ agentCount: number;
910
+ projectCount: number;
857
911
  };
858
912
  export type Skill = {
859
913
  id: string;
@@ -1059,6 +1113,45 @@ export type ProjectMcp = {
1059
1113
  createdAt: string;
1060
1114
  updatedAt: string;
1061
1115
  };
1116
+ export type ProjectSkillResolution = {
1117
+ /**
1118
+ * One resolved version per attached skill (highest live version wins).
1119
+ */
1120
+ skills: Array<{
1121
+ skillId: string;
1122
+ skillSlug: string;
1123
+ /**
1124
+ * The one version served for this skill in this project.
1125
+ */
1126
+ effectiveVersionId: string;
1127
+ /**
1128
+ * Its version string: semver for file-backed skills; for git-backed skills this is the pointer row's placeholder version — the mirror commit SHA appears in the serving menu, not here.
1129
+ */
1130
+ effectiveVersion: string;
1131
+ }>;
1132
+ /**
1133
+ * Warnings where a bound pin lost. Warning-only: a pin can lose later when a newer version is published.
1134
+ */
1135
+ conflicts: Array<SkillPinConflict>;
1136
+ };
1137
+ export type SkillPinConflict = {
1138
+ /**
1139
+ * Slug of the skill whose pin lost.
1140
+ */
1141
+ skillSlug: string;
1142
+ /**
1143
+ * The bound (pinned) version that did not win.
1144
+ */
1145
+ pinnedVersion: string;
1146
+ /**
1147
+ * The version actually served for this skill in this project.
1148
+ */
1149
+ effectiveVersion: string;
1150
+ /**
1151
+ * `outranked`: a higher live version won. `pin-archived`: the pin was archived; latest served.
1152
+ */
1153
+ reason: "outranked" | "pin-archived";
1154
+ };
1062
1155
  export type ProjectSkill = {
1063
1156
  id: string;
1064
1157
  projectId: string;
@@ -7041,6 +7134,9 @@ export type ProjectSkillListResponse = ProjectSkillListResponses[keyof ProjectSk
7041
7134
  export type ProjectSkillAddData = {
7042
7135
  body?: {
7043
7136
  skillId: string;
7137
+ /**
7138
+ * Pin to a specific version, or null to track the latest live version (highest wins) for this skill.
7139
+ */
7044
7140
  skillVersionId?: string | null;
7045
7141
  };
7046
7142
  path: {
@@ -7083,6 +7179,42 @@ export type ProjectSkillAddResponses = {
7083
7179
  200: ProjectSkill;
7084
7180
  };
7085
7181
  export type ProjectSkillAddResponse = ProjectSkillAddResponses[keyof ProjectSkillAddResponses];
7182
+ export type ProjectSkillResolutionData = {
7183
+ body?: never;
7184
+ path: {
7185
+ id: string;
7186
+ };
7187
+ query?: never;
7188
+ url: "/api/projects/{id}/skills/resolution";
7189
+ };
7190
+ export type ProjectSkillResolutionErrors = {
7191
+ /**
7192
+ * Unauthorized
7193
+ */
7194
+ 401: {
7195
+ error: string;
7196
+ };
7197
+ /**
7198
+ * Forbidden
7199
+ */
7200
+ 403: {
7201
+ error: string;
7202
+ };
7203
+ /**
7204
+ * Not found
7205
+ */
7206
+ 404: {
7207
+ error: string;
7208
+ };
7209
+ };
7210
+ export type ProjectSkillResolutionError = ProjectSkillResolutionErrors[keyof ProjectSkillResolutionErrors];
7211
+ export type ProjectSkillResolutionResponses = {
7212
+ /**
7213
+ * Effective versions and pin-conflict warnings
7214
+ */
7215
+ 200: ProjectSkillResolution;
7216
+ };
7217
+ export type ProjectSkillResolutionResponse = ProjectSkillResolutionResponses[keyof ProjectSkillResolutionResponses];
7086
7218
  export type ProjectSkillRemoveData = {
7087
7219
  body?: never;
7088
7220
  path: {
@@ -8313,7 +8445,26 @@ export type SkillListData = {
8313
8445
  offset?: number;
8314
8446
  includeDeprecated?: boolean;
8315
8447
  sort?: "popular" | "trending" | "recent";
8448
+ /**
8449
+ * Restrict to a single visibility tier within the caller's scope.
8450
+ */
8316
8451
  visibility?: "private" | "org";
8452
+ /**
8453
+ * Case-insensitive match across name, slug, and description.
8454
+ */
8455
+ query?: string;
8456
+ /**
8457
+ * true = only published (registry) skills; false = only unpublished.
8458
+ */
8459
+ published?: boolean;
8460
+ /**
8461
+ * Restrict to skills carried by a specific publisher.
8462
+ */
8463
+ publisherId?: string;
8464
+ /**
8465
+ * Only skills carrying every one of these tags. Repeat the param for multiple tags.
8466
+ */
8467
+ tagged?: string | Array<string>;
8317
8468
  };
8318
8469
  url: "/api/skills";
8319
8470
  };
@@ -8340,26 +8491,53 @@ export type SkillListResponses = {
8340
8491
  };
8341
8492
  export type SkillListResponse = SkillListResponses[keyof SkillListResponses];
8342
8493
  export type SkillCreateData = {
8343
- body: {
8494
+ body?: {
8344
8495
  slug?: string;
8345
- name: string;
8346
- description?: string;
8347
- icon?: string;
8348
8496
  /**
8349
- * JSON-encoded string array
8497
+ * Overrides the name declared in SKILL.md.
8350
8498
  */
8351
- tags?: string;
8499
+ nameOverride?: string;
8352
8500
  /**
8353
- * JSON-encoded RequiredCredential[]
8501
+ * Overrides the description declared in SKILL.md.
8354
8502
  */
8355
- requiredCredentials?: string;
8503
+ descriptionOverride?: string;
8504
+ icon?: string | null;
8505
+ docUrl?: string | null;
8506
+ repository?: Repository | null;
8507
+ websiteMetadata?: WebsiteMetadata | null;
8508
+ version?: string;
8356
8509
  releaseNotes?: string;
8510
+ requiredCredentials?: Array<RequiredCredential>;
8511
+ tags?: Array<string>;
8357
8512
  /**
8358
- * JSON-encoded GitSource
8513
+ * Skill folder as base64-encoded files. A root SKILL.md is required. Total decoded size max 10 MB.
8359
8514
  */
8360
- source?: string;
8515
+ files?: Array<{
8516
+ /**
8517
+ * Relative path within the skill folder. No leading slash or '..' segments.
8518
+ */
8519
+ path: string;
8520
+ /**
8521
+ * Base64-encoded file bytes. Per-file decoded size max 10 MB.
8522
+ */
8523
+ contentBase64: string;
8524
+ }>;
8525
+ source?: {
8526
+ type: "git";
8527
+ /**
8528
+ * HTTPS git repository URL (https:// only). Public repos are cloned directly; private repos use the org's GitHub installation.
8529
+ */
8530
+ url: string;
8531
+ /**
8532
+ * Branch, tag, or commit to mirror. Omitted = the remote's default branch (HEAD). Floating refs are re-resolved at index build time.
8533
+ */
8534
+ ref?: string;
8535
+ /**
8536
+ * Subdirectory containing SKILL.md, relative to the repo root. No leading slash or '..' segments.
8537
+ */
8538
+ path?: string;
8539
+ };
8361
8540
  visibility?: "private" | "org";
8362
- files: Array<Blob | File>;
8363
8541
  };
8364
8542
  path?: never;
8365
8543
  query?: never;
@@ -8384,99 +8562,28 @@ export type SkillCreateErrors = {
8384
8562
  403: {
8385
8563
  error: string;
8386
8564
  };
8387
- };
8388
- export type SkillCreateError = SkillCreateErrors[keyof SkillCreateErrors];
8389
- export type SkillCreateResponses = {
8390
- /**
8391
- * Created skill
8392
- */
8393
- 200: Skill;
8394
- };
8395
- export type SkillCreateResponse = SkillCreateResponses[keyof SkillCreateResponses];
8396
- export type SkillSearchData = {
8397
- body?: {
8398
- query?: string;
8399
- sources?: Array<"user" | "org" | "registry">;
8400
- limit?: number;
8401
- };
8402
- path?: never;
8403
- query?: never;
8404
- url: "/api/skills/search";
8405
- };
8406
- export type SkillSearchErrors = {
8407
- /**
8408
- * Bad request
8409
- */
8410
- 400: {
8411
- error: string;
8412
- };
8413
- /**
8414
- * Unauthorized
8415
- */
8416
- 401: {
8417
- error: string;
8418
- };
8419
- /**
8420
- * Forbidden
8421
- */
8422
- 403: {
8423
- error: string;
8424
- };
8425
- };
8426
- export type SkillSearchError = SkillSearchErrors[keyof SkillSearchErrors];
8427
- export type SkillSearchResponses = {
8428
8565
  /**
8429
- * Matching skills
8430
- */
8431
- 200: Array<SearchResult>;
8432
- };
8433
- export type SkillSearchResponse = SkillSearchResponses[keyof SkillSearchResponses];
8434
- export type SkillGetBySlugData = {
8435
- body?: never;
8436
- path: {
8437
- /**
8438
- * URL-friendly identifier
8439
- */
8440
- slug: string;
8441
- };
8442
- query?: never;
8443
- url: "/api/skills/slug/{slug}";
8444
- };
8445
- export type SkillGetBySlugErrors = {
8446
- /**
8447
- * Unauthorized
8448
- */
8449
- 401: {
8450
- error: string;
8451
- };
8452
- /**
8453
- * Forbidden
8454
- */
8455
- 403: {
8456
- error: string;
8457
- };
8458
- /**
8459
- * Not found
8566
+ * Conflict
8460
8567
  */
8461
- 404: {
8568
+ 409: {
8462
8569
  error: string;
8463
8570
  };
8464
8571
  };
8465
- export type SkillGetBySlugError = SkillGetBySlugErrors[keyof SkillGetBySlugErrors];
8466
- export type SkillGetBySlugResponses = {
8572
+ export type SkillCreateError = SkillCreateErrors[keyof SkillCreateErrors];
8573
+ export type SkillCreateResponses = {
8467
8574
  /**
8468
- * Skill details
8575
+ * Created skill
8469
8576
  */
8470
8577
  200: Skill;
8471
8578
  };
8472
- export type SkillGetBySlugResponse = SkillGetBySlugResponses[keyof SkillGetBySlugResponses];
8579
+ export type SkillCreateResponse = SkillCreateResponses[keyof SkillCreateResponses];
8473
8580
  export type SkillGetData = {
8474
8581
  body?: never;
8475
8582
  path: {
8476
- id: string;
8583
+ idOrSlug: string | string;
8477
8584
  };
8478
8585
  query?: never;
8479
- url: "/api/skills/{id}";
8586
+ url: "/api/skills/{idOrSlug}";
8480
8587
  };
8481
8588
  export type SkillGetErrors = {
8482
8589
  /**
@@ -8508,8 +8615,14 @@ export type SkillGetResponses = {
8508
8615
  export type SkillGetResponse = SkillGetResponses[keyof SkillGetResponses];
8509
8616
  export type SkillUpdateData = {
8510
8617
  body?: {
8618
+ /**
8619
+ * Registry display name. Editing it does not change any version's SKILL.md.
8620
+ */
8511
8621
  name?: string;
8512
- description?: string | null;
8622
+ /**
8623
+ * Registry description. Editing it does not change any version's SKILL.md.
8624
+ */
8625
+ description?: string;
8513
8626
  icon?: string | null;
8514
8627
  docUrl?: string | null;
8515
8628
  repository?: Repository | null;
@@ -8587,9 +8700,9 @@ export type SkillArchiveErrors = {
8587
8700
  export type SkillArchiveError = SkillArchiveErrors[keyof SkillArchiveErrors];
8588
8701
  export type SkillArchiveResponses = {
8589
8702
  /**
8590
- * Archived skill
8703
+ * Archived skill with the blast radius of agents and projects that referenced it
8591
8704
  */
8592
- 200: Skill;
8705
+ 200: SkillArchiveResult;
8593
8706
  };
8594
8707
  export type SkillArchiveResponse = SkillArchiveResponses[keyof SkillArchiveResponses];
8595
8708
  export type SkillPublishData = {
@@ -8601,6 +8714,12 @@ export type SkillPublishData = {
8601
8714
  url: "/api/skills/{id}/publish";
8602
8715
  };
8603
8716
  export type SkillPublishErrors = {
8717
+ /**
8718
+ * Bad request
8719
+ */
8720
+ 400: {
8721
+ error: string;
8722
+ };
8604
8723
  /**
8605
8724
  * Unauthorized
8606
8725
  */
@@ -8619,6 +8738,12 @@ export type SkillPublishErrors = {
8619
8738
  404: {
8620
8739
  error: string;
8621
8740
  };
8741
+ /**
8742
+ * Conflict
8743
+ */
8744
+ 409: {
8745
+ error: string;
8746
+ };
8622
8747
  };
8623
8748
  export type SkillPublishError = SkillPublishErrors[keyof SkillPublishErrors];
8624
8749
  export type SkillPublishResponses = {
@@ -8739,6 +8864,12 @@ export type SkillCopyErrors = {
8739
8864
  404: {
8740
8865
  error: string;
8741
8866
  };
8867
+ /**
8868
+ * Conflict
8869
+ */
8870
+ 409: {
8871
+ error: string;
8872
+ };
8742
8873
  };
8743
8874
  export type SkillCopyError = SkillCopyErrors[keyof SkillCopyErrors];
8744
8875
  export type SkillCopyResponses = {
@@ -8837,21 +8968,41 @@ export type SkillVersionListResponses = {
8837
8968
  };
8838
8969
  export type SkillVersionListResponse = SkillVersionListResponses[keyof SkillVersionListResponses];
8839
8970
  export type SkillVersionCreateData = {
8840
- body: {
8971
+ body?: {
8841
8972
  /**
8842
- * Semver string or 'major' | 'minor' | 'patch'
8973
+ * Either an explicit semver string (e.g. "1.2.0") or a bump keyword ("major" | "minor" | "patch") applied to the latest live version.
8843
8974
  */
8844
- version?: string;
8975
+ version?: string | "major" | "minor" | "patch";
8845
8976
  releaseNotes?: string;
8977
+ requiredCredentials?: Array<RequiredCredential>;
8846
8978
  /**
8847
- * JSON-encoded RequiredCredential[]
8848
- */
8849
- requiredCredentials?: string;
8850
- /**
8851
- * JSON-encoded GitSource
8979
+ * Skill folder as base64-encoded files. A root SKILL.md is required. Total decoded size max 10 MB.
8852
8980
  */
8853
- source?: string;
8854
- files: Array<Blob | File>;
8981
+ files?: Array<{
8982
+ /**
8983
+ * Relative path within the skill folder. No leading slash or '..' segments.
8984
+ */
8985
+ path: string;
8986
+ /**
8987
+ * Base64-encoded file bytes. Per-file decoded size max 10 MB.
8988
+ */
8989
+ contentBase64: string;
8990
+ }>;
8991
+ source?: {
8992
+ type: "git";
8993
+ /**
8994
+ * HTTPS git repository URL (https:// only). Public repos are cloned directly; private repos use the org's GitHub installation.
8995
+ */
8996
+ url: string;
8997
+ /**
8998
+ * Branch, tag, or commit to mirror. Omitted = the remote's default branch (HEAD). Floating refs are re-resolved at index build time.
8999
+ */
9000
+ ref?: string;
9001
+ /**
9002
+ * Subdirectory containing SKILL.md, relative to the repo root. No leading slash or '..' segments.
9003
+ */
9004
+ path?: string;
9005
+ };
8855
9006
  };
8856
9007
  path: {
8857
9008
  id: string;
@@ -8942,9 +9093,7 @@ export type SkillVersionDataData = {
8942
9093
  id: string;
8943
9094
  version: string;
8944
9095
  };
8945
- query?: {
8946
- format?: "json" | "presigned";
8947
- };
9096
+ query?: never;
8948
9097
  url: "/api/skills/{id}/versions/{version}/data";
8949
9098
  };
8950
9099
  export type SkillVersionDataErrors = {
@@ -8970,19 +9119,21 @@ export type SkillVersionDataErrors = {
8970
9119
  export type SkillVersionDataError = SkillVersionDataErrors[keyof SkillVersionDataErrors];
8971
9120
  export type SkillVersionDataResponses = {
8972
9121
  /**
8973
- * Extracted files, presigned URL, or git source descriptor
9122
+ * One shape per skill kind: file-backed versions return their files base64-encoded (binary-safe); git-backed versions return the git source pointer verbatim (Read fix #1).
8974
9123
  */
8975
- 200: {
8976
- files: Array<{
8977
- path: string;
8978
- content: string;
8979
- }>;
8980
- } | {
8981
- url: string;
8982
- } | {
9124
+ 200: SkillVersionFiles | {
8983
9125
  type: "git";
9126
+ /**
9127
+ * HTTPS git repository URL (https:// only). Public repos are cloned directly; private repos use the org's GitHub installation.
9128
+ */
8984
9129
  url: string;
9130
+ /**
9131
+ * Branch, tag, or commit to mirror. Omitted = the remote's default branch (HEAD). Floating refs are re-resolved at index build time.
9132
+ */
8985
9133
  ref?: string;
9134
+ /**
9135
+ * Subdirectory containing SKILL.md, relative to the repo root. No leading slash or '..' segments.
9136
+ */
8986
9137
  path?: string;
8987
9138
  };
8988
9139
  };