@boatdev/sdk 1.11.0 → 1.12.1

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.
Files changed (175) hide show
  1. package/.openapi-generator/FILES +42 -0
  2. package/dist/apis/BoatApi.d.ts +191 -14
  3. package/dist/apis/BoatApi.js +466 -14
  4. package/dist/esm/apis/BoatApi.d.ts +191 -14
  5. package/dist/esm/apis/BoatApi.js +466 -14
  6. package/dist/esm/models/CreateSandboxRequest.d.ts +35 -1
  7. package/dist/esm/models/CreateSandboxRequest.js +17 -0
  8. package/dist/esm/models/CreateSandboxRequestFilesInner.d.ts +52 -0
  9. package/dist/esm/models/CreateSandboxRequestFilesInner.js +56 -0
  10. package/dist/esm/models/CreateSandboxResponse.d.ts +7 -0
  11. package/dist/esm/models/CreateSandboxResponse.js +3 -0
  12. package/dist/esm/models/CreateSandboxResponseAllOfHostedPortsInner.d.ts +77 -0
  13. package/dist/esm/models/CreateSandboxResponseAllOfHostedPortsInner.js +64 -0
  14. package/dist/esm/models/FileDeleteResponse.d.ts +57 -0
  15. package/dist/esm/models/FileDeleteResponse.js +59 -0
  16. package/dist/esm/models/FileEntry.d.ts +68 -0
  17. package/dist/esm/models/FileEntry.js +67 -0
  18. package/dist/esm/models/FileFindResponse.d.ts +70 -0
  19. package/dist/esm/models/FileFindResponse.js +66 -0
  20. package/dist/esm/models/FileFindResponseAllOfMatches.d.ts +44 -0
  21. package/dist/esm/models/FileFindResponseAllOfMatches.js +51 -0
  22. package/dist/esm/models/FileFolderRequest.d.ts +38 -0
  23. package/dist/esm/models/FileFolderRequest.js +45 -0
  24. package/dist/esm/models/FileInfoResponse.d.ts +95 -0
  25. package/dist/esm/models/FileInfoResponse.js +85 -0
  26. package/dist/esm/models/FileListResponse.d.ts +70 -0
  27. package/dist/esm/models/FileListResponse.js +68 -0
  28. package/dist/esm/models/FileMoveRequest.d.ts +44 -0
  29. package/dist/esm/models/FileMoveRequest.js +49 -0
  30. package/dist/esm/models/FileMoveResponse.d.ts +63 -0
  31. package/dist/esm/models/FileMoveResponse.js +63 -0
  32. package/dist/esm/models/FilePermissionsRequest.d.ts +38 -0
  33. package/dist/esm/models/FilePermissionsRequest.js +47 -0
  34. package/dist/esm/models/FileReplaceRequest.d.ts +44 -0
  35. package/dist/esm/models/FileReplaceRequest.js +51 -0
  36. package/dist/esm/models/FileReplaceResponse.d.ts +58 -0
  37. package/dist/esm/models/FileReplaceResponse.js +60 -0
  38. package/dist/esm/models/FileReplaceResponseAllOfResults.d.ts +50 -0
  39. package/dist/esm/models/FileReplaceResponseAllOfResults.js +51 -0
  40. package/dist/esm/models/FileSearchResponse.d.ts +69 -0
  41. package/dist/esm/models/FileSearchResponse.js +65 -0
  42. package/dist/esm/models/LimitsFields.d.ts +54 -16
  43. package/dist/esm/models/LimitsFields.js +16 -2
  44. package/dist/esm/models/LimitsFieldsOveragePrices.d.ts +51 -0
  45. package/dist/esm/models/LimitsFieldsOveragePrices.js +48 -0
  46. package/dist/esm/models/LimitsFieldsOveragePricesStartBracketsInner.d.ts +44 -0
  47. package/dist/esm/models/LimitsFieldsOveragePricesStartBracketsInner.js +45 -0
  48. package/dist/esm/models/LimitsFieldsPlanIncluded.d.ts +44 -0
  49. package/dist/esm/models/LimitsFieldsPlanIncluded.js +45 -0
  50. package/dist/esm/models/LimitsFieldsStartLimitsWithWallet.d.ts +44 -0
  51. package/dist/esm/models/LimitsFieldsStartLimitsWithWallet.js +45 -0
  52. package/dist/esm/models/LimitsFieldsWallet.d.ts +32 -0
  53. package/dist/esm/models/LimitsFieldsWallet.js +41 -0
  54. package/dist/esm/models/LimitsResponse.d.ts +54 -16
  55. package/dist/esm/models/LimitsResponse.js +16 -2
  56. package/dist/esm/models/NamedSnapshotAllowance.d.ts +9 -3
  57. package/dist/esm/models/NamedSnapshotAllowance.js +2 -0
  58. package/dist/esm/models/SavedSnapshotAllowance.d.ts +9 -3
  59. package/dist/esm/models/SavedSnapshotAllowance.js +2 -0
  60. package/dist/esm/models/index.d.ts +21 -0
  61. package/dist/esm/models/index.js +21 -0
  62. package/dist/models/CreateSandboxRequest.d.ts +35 -1
  63. package/dist/models/CreateSandboxRequest.js +18 -1
  64. package/dist/models/CreateSandboxRequestFilesInner.d.ts +52 -0
  65. package/dist/models/CreateSandboxRequestFilesInner.js +64 -0
  66. package/dist/models/CreateSandboxResponse.d.ts +7 -0
  67. package/dist/models/CreateSandboxResponse.js +3 -0
  68. package/dist/models/CreateSandboxResponseAllOfHostedPortsInner.d.ts +77 -0
  69. package/dist/models/CreateSandboxResponseAllOfHostedPortsInner.js +72 -0
  70. package/dist/models/FileDeleteResponse.d.ts +57 -0
  71. package/dist/models/FileDeleteResponse.js +67 -0
  72. package/dist/models/FileEntry.d.ts +68 -0
  73. package/dist/models/FileEntry.js +74 -0
  74. package/dist/models/FileFindResponse.d.ts +70 -0
  75. package/dist/models/FileFindResponse.js +74 -0
  76. package/dist/models/FileFindResponseAllOfMatches.d.ts +44 -0
  77. package/dist/models/FileFindResponseAllOfMatches.js +58 -0
  78. package/dist/models/FileFolderRequest.d.ts +38 -0
  79. package/dist/models/FileFolderRequest.js +52 -0
  80. package/dist/models/FileInfoResponse.d.ts +95 -0
  81. package/dist/models/FileInfoResponse.js +93 -0
  82. package/dist/models/FileListResponse.d.ts +70 -0
  83. package/dist/models/FileListResponse.js +76 -0
  84. package/dist/models/FileMoveRequest.d.ts +44 -0
  85. package/dist/models/FileMoveRequest.js +56 -0
  86. package/dist/models/FileMoveResponse.d.ts +63 -0
  87. package/dist/models/FileMoveResponse.js +71 -0
  88. package/dist/models/FilePermissionsRequest.d.ts +38 -0
  89. package/dist/models/FilePermissionsRequest.js +54 -0
  90. package/dist/models/FileReplaceRequest.d.ts +44 -0
  91. package/dist/models/FileReplaceRequest.js +58 -0
  92. package/dist/models/FileReplaceResponse.d.ts +58 -0
  93. package/dist/models/FileReplaceResponse.js +68 -0
  94. package/dist/models/FileReplaceResponseAllOfResults.d.ts +50 -0
  95. package/dist/models/FileReplaceResponseAllOfResults.js +58 -0
  96. package/dist/models/FileSearchResponse.d.ts +69 -0
  97. package/dist/models/FileSearchResponse.js +73 -0
  98. package/dist/models/LimitsFields.d.ts +54 -16
  99. package/dist/models/LimitsFields.js +16 -2
  100. package/dist/models/LimitsFieldsOveragePrices.d.ts +51 -0
  101. package/dist/models/LimitsFieldsOveragePrices.js +55 -0
  102. package/dist/models/LimitsFieldsOveragePricesStartBracketsInner.d.ts +44 -0
  103. package/dist/models/LimitsFieldsOveragePricesStartBracketsInner.js +52 -0
  104. package/dist/models/LimitsFieldsPlanIncluded.d.ts +44 -0
  105. package/dist/models/LimitsFieldsPlanIncluded.js +52 -0
  106. package/dist/models/LimitsFieldsStartLimitsWithWallet.d.ts +44 -0
  107. package/dist/models/LimitsFieldsStartLimitsWithWallet.js +52 -0
  108. package/dist/models/LimitsFieldsWallet.d.ts +32 -0
  109. package/dist/models/LimitsFieldsWallet.js +48 -0
  110. package/dist/models/LimitsResponse.d.ts +54 -16
  111. package/dist/models/LimitsResponse.js +16 -2
  112. package/dist/models/NamedSnapshotAllowance.d.ts +9 -3
  113. package/dist/models/NamedSnapshotAllowance.js +2 -0
  114. package/dist/models/SavedSnapshotAllowance.d.ts +9 -3
  115. package/dist/models/SavedSnapshotAllowance.js +2 -0
  116. package/dist/models/index.d.ts +21 -0
  117. package/dist/models/index.js +21 -0
  118. package/docs/BoatApi.md +744 -48
  119. package/docs/CreateSandboxRequest.md +8 -0
  120. package/docs/CreateSandboxRequestFilesInner.md +36 -0
  121. package/docs/CreateSandboxResponse.md +2 -0
  122. package/docs/CreateSandboxResponseAllOfHostedPortsInner.md +44 -0
  123. package/docs/FileDeleteResponse.md +38 -0
  124. package/docs/FileEntry.md +44 -0
  125. package/docs/FileFindResponse.md +42 -0
  126. package/docs/FileFindResponseAllOfMatches.md +36 -0
  127. package/docs/FileFolderRequest.md +34 -0
  128. package/docs/FileInfoResponse.md +50 -0
  129. package/docs/FileListResponse.md +42 -0
  130. package/docs/FileMoveRequest.md +36 -0
  131. package/docs/FileMoveResponse.md +40 -0
  132. package/docs/FilePermissionsRequest.md +34 -0
  133. package/docs/FileReplaceRequest.md +36 -0
  134. package/docs/FileReplaceResponse.md +38 -0
  135. package/docs/FileReplaceResponseAllOfResults.md +38 -0
  136. package/docs/FileSearchResponse.md +42 -0
  137. package/docs/LimitsFields.md +12 -2
  138. package/docs/LimitsFieldsOveragePrices.md +39 -0
  139. package/docs/LimitsFieldsOveragePricesStartBracketsInner.md +36 -0
  140. package/docs/LimitsFieldsPlanIncluded.md +37 -0
  141. package/docs/LimitsFieldsStartLimitsWithWallet.md +37 -0
  142. package/docs/LimitsFieldsWallet.md +33 -0
  143. package/docs/LimitsResponse.md +12 -2
  144. package/docs/NamedSnapshotAllowance.md +3 -1
  145. package/docs/SavedSnapshotAllowance.md +3 -1
  146. package/package.json +1 -1
  147. package/src/apis/BoatApi.ts +721 -14
  148. package/src/models/CreateSandboxRequest.ts +57 -1
  149. package/src/models/CreateSandboxRequestFilesInner.ts +94 -0
  150. package/src/models/CreateSandboxResponse.ts +15 -0
  151. package/src/models/CreateSandboxResponseAllOfHostedPortsInner.ts +128 -0
  152. package/src/models/FileDeleteResponse.ts +102 -0
  153. package/src/models/FileEntry.ts +120 -0
  154. package/src/models/FileFindResponse.ts +127 -0
  155. package/src/models/FileFindResponseAllOfMatches.ts +84 -0
  156. package/src/models/FileFolderRequest.ts +74 -0
  157. package/src/models/FileInfoResponse.ts +158 -0
  158. package/src/models/FileListResponse.ts +128 -0
  159. package/src/models/FileMoveRequest.ts +83 -0
  160. package/src/models/FileMoveResponse.ts +111 -0
  161. package/src/models/FilePermissionsRequest.ts +75 -0
  162. package/src/models/FileReplaceRequest.ts +84 -0
  163. package/src/models/FileReplaceResponse.ts +110 -0
  164. package/src/models/FileReplaceResponseAllOfResults.ts +91 -0
  165. package/src/models/FileSearchResponse.ts +119 -0
  166. package/src/models/LimitsFields.ts +90 -16
  167. package/src/models/LimitsFieldsOveragePrices.ts +97 -0
  168. package/src/models/LimitsFieldsOveragePricesStartBracketsInner.ts +81 -0
  169. package/src/models/LimitsFieldsPlanIncluded.ts +81 -0
  170. package/src/models/LimitsFieldsStartLimitsWithWallet.ts +81 -0
  171. package/src/models/LimitsFieldsWallet.ts +65 -0
  172. package/src/models/LimitsResponse.ts +90 -16
  173. package/src/models/NamedSnapshotAllowance.ts +11 -3
  174. package/src/models/SavedSnapshotAllowance.ts +11 -3
  175. package/src/models/index.ts +21 -0
package/docs/BoatApi.md CHANGED
@@ -19,6 +19,7 @@ All URIs are relative to *https://boat.dev/api/v1*
19
19
  | [**createCredentialProfile**](BoatApi.md#createcredentialprofileoperation) | **POST** /credential-profiles | Create a credential profile |
20
20
  | [**createDownloadUrl**](BoatApi.md#createdownloadurl) | **POST** /sandboxes/{sandboxId}/files/download-url | Get a download URL for a sandbox file |
21
21
  | [**createEnvironment**](BoatApi.md#createenvironment) | **POST** /environments | Create a sandbox environment |
22
+ | [**createFolder**](BoatApi.md#createfolder) | **POST** /sandboxes/{sandboxId}/files/folder | Create a directory in a sandbox |
22
23
  | [**createScopedApiKey**](BoatApi.md#createscopedapikeyoperation) | **POST** /api-keys/scoped | Create a scoped API key |
23
24
  | [**createSnapshotShare**](BoatApi.md#createsnapshotshare) | **POST** /saved-snapshots/{name}/shares | Share a saved snapshot |
24
25
  | [**createUploadUrl**](BoatApi.md#createuploadurl) | **POST** /sandboxes/{sandboxId}/files/upload-url | Get an upload URL for a sandbox file |
@@ -31,6 +32,7 @@ All URIs are relative to *https://boat.dev/api/v1*
31
32
  | [**deleteEnvironmentRepo**](BoatApi.md#deleteenvironmentrepo) | **DELETE** /environments/{environmentId}/repos/{repositoryId} | Remove a repository from an environment |
32
33
  | [**deleteEnvironmentSecretFile**](BoatApi.md#deleteenvironmentsecretfile) | **DELETE** /environments/{environmentId}/secret-files | Remove one secret file |
33
34
  | [**deleteEnvironmentVar**](BoatApi.md#deleteenvironmentvar) | **DELETE** /environments/{environmentId}/vars/{key} | Remove one environment variable |
35
+ | [**deleteFile**](BoatApi.md#deletefile) | **DELETE** /sandboxes/{sandboxId}/files | Delete a file or directory in a sandbox |
34
36
  | [**deleteNamedSnapshot**](BoatApi.md#deletenamedsnapshot) | **DELETE** /named-snapshots/{name} | Remove a named snapshot |
35
37
  | [**deleteSandbox**](BoatApi.md#deletesandbox) | **DELETE** /sandboxes/{sandboxId} | Permanently delete sandbox data |
36
38
  | [**deleteSandboxSnapshots**](BoatApi.md#deletesandboxsnapshots) | **DELETE** /sandboxes/{sandboxId}/snapshots | Permanently delete all snapshots of a sandbox |
@@ -41,6 +43,7 @@ All URIs are relative to *https://boat.dev/api/v1*
41
43
  | [**desktop**](BoatApi.md#desktopoperation) | **POST** /sandboxes/{sandboxId}/desktop | Get desktop streaming URL |
42
44
  | [**environments**](BoatApi.md#environments) | **GET** /environments | List Sandbox environments |
43
45
  | [**events**](BoatApi.md#events) | **GET** /sandboxes/{sandboxId}/events | List boat events |
46
+ | [**findInFiles**](BoatApi.md#findinfiles) | **GET** /sandboxes/{sandboxId}/files/find | Find text in sandbox files |
44
47
  | [**fork**](BoatApi.md#forkoperation) | **POST** /sandboxes/{sandboxId}/fork | Fork sandbox |
45
48
  | [**get**](BoatApi.md#get) | **GET** /sandboxes/{sandboxId} | Get sandbox |
46
49
  | [**getAiProxy**](BoatApi.md#getaiproxy) | **GET** /ai-proxy | Get AI credentials proxy |
@@ -48,6 +51,7 @@ All URIs are relative to *https://boat.dev/api/v1*
48
51
  | [**getCommand**](BoatApi.md#getcommand) | **GET** /sandboxes/{sandboxId}/command-history/{commandId} | Get one command from the history |
49
52
  | [**getDataRetention**](BoatApi.md#getdataretention) | **GET** /account/data-retention | Get account data-retention policy |
50
53
  | [**getDeletionOperation**](BoatApi.md#getdeletionoperation) | **GET** /deletion-operations/{operationId} | Get deletion operation |
54
+ | [**getFileInfo**](BoatApi.md#getfileinfo) | **GET** /sandboxes/{sandboxId}/files/info | Get file or directory details in a sandbox |
51
55
  | [**getLatestSandboxSnapshot**](BoatApi.md#getlatestsandboxsnapshot) | **GET** /sandboxes/{sandboxId}/snapshots/latest | Get latest boat snapshot |
52
56
  | [**getNamedSnapshot**](BoatApi.md#getnamedsnapshot) | **GET** /named-snapshots/{name} | Get a named snapshot |
53
57
  | [**getSandboxAiUsage**](BoatApi.md#getsandboxaiusage) | **GET** /sandboxes/{sandboxId}/ai-usage | Get sandbox AI usage |
@@ -63,6 +67,7 @@ All URIs are relative to *https://boat.dev/api/v1*
63
67
  | [**limits**](BoatApi.md#limits) | **GET** /limits | Get Boat limits |
64
68
  | [**listCredentialAccounts**](BoatApi.md#listcredentialaccounts) | **GET** /credential-profiles/{profile}/accounts/{credential} | List the accounts of a credential |
65
69
  | [**listCredentialProfiles**](BoatApi.md#listcredentialprofiles) | **GET** /credential-profiles | List credential profiles |
70
+ | [**listFiles**](BoatApi.md#listfiles) | **GET** /sandboxes/{sandboxId}/files/list | List a directory in a sandbox |
66
71
  | [**listNamedSnapshots**](BoatApi.md#listnamedsnapshots) | **GET** /named-snapshots | List named snapshots |
67
72
  | [**listOrganizations**](BoatApi.md#listorganizations) | **GET** /orgs | List organizations |
68
73
  | [**listSandboxSnapshots**](BoatApi.md#listsandboxsnapshots) | **GET** /sandboxes/{sandboxId}/snapshots | List boat snapshots |
@@ -71,11 +76,13 @@ All URIs are relative to *https://boat.dev/api/v1*
71
76
  | [**listSnapshots**](BoatApi.md#listsnapshots) | **GET** /snapshots | List snapshots |
72
77
  | [**listWebhooks**](BoatApi.md#listwebhooks) | **GET** /webhooks | List webhooks |
73
78
  | [**me**](BoatApi.md#me) | **GET** /me | Get current Boat user |
79
+ | [**moveFile**](BoatApi.md#movefile) | **POST** /sandboxes/{sandboxId}/files/move | Move or rename a file or directory in a sandbox |
74
80
  | [**processes**](BoatApi.md#processes) | **GET** /sandboxes/{sandboxId}/processes | List the processes in a sandbox |
75
81
  | [**prompt**](BoatApi.md#promptoperation) | **POST** /sandboxes/{sandboxId}/prompt | Prompt Sandbox |
76
82
  | [**promptRunStatus**](BoatApi.md#promptrunstatus) | **GET** /sandboxes/{sandboxId}/prompts/{promptId} | Get prompt run status |
77
83
  | [**readFile**](BoatApi.md#readfile) | **GET** /sandboxes/{sandboxId}/files | Read a file from a sandbox |
78
84
  | [**recover**](BoatApi.md#recover) | **POST** /sandboxes/{sandboxId}/recover | Recover a sandbox that stopped responding |
85
+ | [**replaceInFiles**](BoatApi.md#replaceinfiles) | **POST** /sandboxes/{sandboxId}/files/replace | Replace text in sandbox files |
79
86
  | [**repos**](BoatApi.md#repos) | **GET** /repos | List GitHub repositories available to Boat |
80
87
  | [**resume**](BoatApi.md#resumeoperation) | **POST** /sandboxes/{sandboxId}/resume | Resume sandbox |
81
88
  | [**revokeApiKey**](BoatApi.md#revokeapikey) | **DELETE** /api-keys/{apiKeyId} | Revoke an API key |
@@ -85,6 +92,7 @@ All URIs are relative to *https://boat.dev/api/v1*
85
92
  | [**sandboxes**](BoatApi.md#sandboxes) | **GET** /sandboxes | List sandboxes |
86
93
  | [**saveNamedSnapshot**](BoatApi.md#savenamedsnapshot) | **POST** /named-snapshots | Save a named snapshot |
87
94
  | [**saveSavedSnapshot**](BoatApi.md#savesavedsnapshot) | **POST** /saved-snapshots | Save a saved snapshot |
95
+ | [**searchFiles**](BoatApi.md#searchfiles) | **GET** /sandboxes/{sandboxId}/files/search | Search files by name in a sandbox |
88
96
  | [**secrets**](BoatApi.md#secrets) | **GET** /secrets | Get Boat secrets setup |
89
97
  | [**selectRepo**](BoatApi.md#selectrepo) | **POST** /repos | Select repository for sandboxes |
90
98
  | [**setActiveOrganization**](BoatApi.md#setactiveorganization) | **PATCH** /orgs/active | Set the active organization |
@@ -92,6 +100,7 @@ All URIs are relative to *https://boat.dev/api/v1*
92
100
  | [**setCredentialProfileKey**](BoatApi.md#setcredentialprofilekey) | **PUT** /credential-profiles/{profile}/keys/{credential} | Set a credential profile API key |
93
101
  | [**setEnvironmentSecretFile**](BoatApi.md#setenvironmentsecretfileoperation) | **PUT** /environments/{environmentId}/secret-files | Write one secret file |
94
102
  | [**setEnvironmentVar**](BoatApi.md#setenvironmentvaroperation) | **PUT** /environments/{environmentId}/vars/{key} | Set one environment variable |
103
+ | [**setFilePermissions**](BoatApi.md#setfilepermissions) | **POST** /sandboxes/{sandboxId}/files/permissions | Set file permissions in a sandbox |
95
104
  | [**setSandboxAiAccess**](BoatApi.md#setsandboxaiaccessoperation) | **PUT** /sandboxes/{sandboxId}/ai-access | Block or unblock sandbox AI access |
96
105
  | [**setTelemetry**](BoatApi.md#settelemetry) | **PUT** /telemetry | Set OpenTelemetry export |
97
106
  | [**share**](BoatApi.md#share) | **POST** /sandboxes/{sandboxId}/share | Share sandbox with the organization |
@@ -1066,7 +1075,7 @@ example().catch(console.error);
1066
1075
  | **402** | Account cannot currently create or operate sandboxes. The error body may include a dashboard billing URL, but billing actions are not part of the v1 API. | - |
1067
1076
  | **403** | `environment_forbidden`: the organization limits this environment to other members. Ask an owner or admin to add you. Other `403` codes can also apply. | - |
1068
1077
  | **409** | Request conflicts with current account or sandbox state. | - |
1069
- | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window you hit). A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
1078
+ | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window and the `limit` that applied). With money in the wallet after the first payment, starts above a limit are paid, up to `startLimitsWithWallet`; the body carries `startLimitsWithWallet`, null when paid starts are not available. A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
1070
1079
  | **503** | No capacity. `no_ready_machine`: a `failFast` create, fork or resume found no ready machine of that type; nothing was started, billed, or counted, and a resumed sandbox stays stopped. `out_of_capacity`: creates and forks are paused until the provisioning queue drains. | - |
1071
1080
 
1072
1081
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
@@ -1302,13 +1311,88 @@ example().catch(console.error);
1302
1311
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1303
1312
 
1304
1313
 
1314
+ ## createFolder
1315
+
1316
+ > FileInfoResponse createFolder(sandboxId, fileFolderRequest)
1317
+
1318
+ Create a directory in a sandbox
1319
+
1320
+ Missing parent directories are created. An existing directory is not an error. Needs `file.write`.
1321
+
1322
+ ### Example
1323
+
1324
+ ```ts
1325
+ import {
1326
+ Configuration,
1327
+ BoatApi,
1328
+ } from '@boatdev/sdk';
1329
+ import type { CreateFolderRequest } from '@boatdev/sdk';
1330
+
1331
+ async function example() {
1332
+ console.log("🚀 Testing @boatdev/sdk SDK...");
1333
+ const config = new Configuration({
1334
+ // Configure HTTP bearer authorization: BoatBearerAuth
1335
+ accessToken: "YOUR BEARER TOKEN",
1336
+ });
1337
+ const api = new BoatApi(config);
1338
+
1339
+ const body = {
1340
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
1341
+ sandboxId: sandboxId_example,
1342
+ // FileFolderRequest
1343
+ fileFolderRequest: ...,
1344
+ } satisfies CreateFolderRequest;
1345
+
1346
+ try {
1347
+ const data = await api.createFolder(body);
1348
+ console.log(data);
1349
+ } catch (error) {
1350
+ console.error(error);
1351
+ }
1352
+ }
1353
+
1354
+ // Run the test
1355
+ example().catch(console.error);
1356
+ ```
1357
+
1358
+ ### Parameters
1359
+
1360
+
1361
+ | Name | Type | Description | Notes |
1362
+ |------------- | ------------- | ------------- | -------------|
1363
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
1364
+ | **fileFolderRequest** | [FileFolderRequest](FileFolderRequest.md) | | |
1365
+
1366
+ ### Return type
1367
+
1368
+ [**FileInfoResponse**](FileInfoResponse.md)
1369
+
1370
+ ### Authorization
1371
+
1372
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
1373
+
1374
+ ### HTTP request headers
1375
+
1376
+ - **Content-Type**: `application/json`
1377
+ - **Accept**: `application/json`
1378
+
1379
+
1380
+ ### HTTP response details
1381
+ | Status code | Description | Response headers |
1382
+ |-------------|-------------|------------------|
1383
+ | **200** | Directory created. | - |
1384
+ | **400** | Invalid request body or parameters. | - |
1385
+
1386
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
1387
+
1388
+
1305
1389
  ## createScopedApiKey
1306
1390
 
1307
1391
  > ApiKeySecretResponse createScopedApiKey(createScopedApiKeyRequest)
1308
1392
 
1309
1393
  Create a scoped API key
1310
1394
 
1311
- Creates a scoped, expiring API key. Requires a dashboard/CLI session or an admin-scoped token. The secret is returned once. This dedicated path returns a typed 503 until scoped credential creation is activated.
1395
+ Creates a scoped, expiring API key. Requires a dashboard/CLI session or an admin-scoped token. The secret is returned once. An unknown field is a 400, so a misspelled scope never creates a full-access key. environmentIds takes your own environments and the org environments you can use. This dedicated path returns a typed 503 until scoped credential creation is activated.
1312
1396
 
1313
1397
  ### Example
1314
1398
 
@@ -2227,6 +2311,84 @@ example().catch(console.error);
2227
2311
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2228
2312
 
2229
2313
 
2314
+ ## deleteFile
2315
+
2316
+ > FileDeleteResponse deleteFile(sandboxId, path, recursive)
2317
+
2318
+ Delete a file or directory in a sandbox
2319
+
2320
+ A directory needs `recursive=true`. A symlink is deleted itself, never its target. /home/user and /tmp themselves cannot be deleted. Needs `file.write`.
2321
+
2322
+ ### Example
2323
+
2324
+ ```ts
2325
+ import {
2326
+ Configuration,
2327
+ BoatApi,
2328
+ } from '@boatdev/sdk';
2329
+ import type { DeleteFileRequest } from '@boatdev/sdk';
2330
+
2331
+ async function example() {
2332
+ console.log("🚀 Testing @boatdev/sdk SDK...");
2333
+ const config = new Configuration({
2334
+ // Configure HTTP bearer authorization: BoatBearerAuth
2335
+ accessToken: "YOUR BEARER TOKEN",
2336
+ });
2337
+ const api = new BoatApi(config);
2338
+
2339
+ const body = {
2340
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
2341
+ sandboxId: sandboxId_example,
2342
+ // string
2343
+ path: path_example,
2344
+ // boolean (optional)
2345
+ recursive: true,
2346
+ } satisfies DeleteFileRequest;
2347
+
2348
+ try {
2349
+ const data = await api.deleteFile(body);
2350
+ console.log(data);
2351
+ } catch (error) {
2352
+ console.error(error);
2353
+ }
2354
+ }
2355
+
2356
+ // Run the test
2357
+ example().catch(console.error);
2358
+ ```
2359
+
2360
+ ### Parameters
2361
+
2362
+
2363
+ | Name | Type | Description | Notes |
2364
+ |------------- | ------------- | ------------- | -------------|
2365
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
2366
+ | **path** | `string` | | [Defaults to `undefined`] |
2367
+ | **recursive** | `boolean` | | [Optional] [Defaults to `false`] |
2368
+
2369
+ ### Return type
2370
+
2371
+ [**FileDeleteResponse**](FileDeleteResponse.md)
2372
+
2373
+ ### Authorization
2374
+
2375
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
2376
+
2377
+ ### HTTP request headers
2378
+
2379
+ - **Content-Type**: Not defined
2380
+ - **Accept**: `application/json`
2381
+
2382
+
2383
+ ### HTTP response details
2384
+ | Status code | Description | Response headers |
2385
+ |-------------|-------------|------------------|
2386
+ | **200** | Deleted. | - |
2387
+ | **400** | Invalid request body or parameters. | - |
2388
+
2389
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2390
+
2391
+
2230
2392
  ## deleteNamedSnapshot
2231
2393
 
2232
2394
  > NamedSnapshotDeletedResponse deleteNamedSnapshot(name)
@@ -2992,6 +3154,87 @@ example().catch(console.error);
2992
3154
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
2993
3155
 
2994
3156
 
3157
+ ## findInFiles
3158
+
3159
+ > FileFindResponse findInFiles(sandboxId, pattern, path, regex)
3160
+
3161
+ Find text in sandbox files
3162
+
3163
+ Every line under `path` that contains `pattern`. `pattern` is plain text; with `regex=true` it is an extended regular expression. Binary files are skipped and symlinks are not followed. Needs `file.read`.
3164
+
3165
+ ### Example
3166
+
3167
+ ```ts
3168
+ import {
3169
+ Configuration,
3170
+ BoatApi,
3171
+ } from '@boatdev/sdk';
3172
+ import type { FindInFilesRequest } from '@boatdev/sdk';
3173
+
3174
+ async function example() {
3175
+ console.log("🚀 Testing @boatdev/sdk SDK...");
3176
+ const config = new Configuration({
3177
+ // Configure HTTP bearer authorization: BoatBearerAuth
3178
+ accessToken: "YOUR BEARER TOKEN",
3179
+ });
3180
+ const api = new BoatApi(config);
3181
+
3182
+ const body = {
3183
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
3184
+ sandboxId: sandboxId_example,
3185
+ // string
3186
+ pattern: pattern_example,
3187
+ // string (optional)
3188
+ path: path_example,
3189
+ // boolean (optional)
3190
+ regex: true,
3191
+ } satisfies FindInFilesRequest;
3192
+
3193
+ try {
3194
+ const data = await api.findInFiles(body);
3195
+ console.log(data);
3196
+ } catch (error) {
3197
+ console.error(error);
3198
+ }
3199
+ }
3200
+
3201
+ // Run the test
3202
+ example().catch(console.error);
3203
+ ```
3204
+
3205
+ ### Parameters
3206
+
3207
+
3208
+ | Name | Type | Description | Notes |
3209
+ |------------- | ------------- | ------------- | -------------|
3210
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3211
+ | **pattern** | `string` | | [Defaults to `undefined`] |
3212
+ | **path** | `string` | | [Optional] [Defaults to `'/home/user'`] |
3213
+ | **regex** | `boolean` | | [Optional] [Defaults to `false`] |
3214
+
3215
+ ### Return type
3216
+
3217
+ [**FileFindResponse**](FileFindResponse.md)
3218
+
3219
+ ### Authorization
3220
+
3221
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
3222
+
3223
+ ### HTTP request headers
3224
+
3225
+ - **Content-Type**: Not defined
3226
+ - **Accept**: `application/json`
3227
+
3228
+
3229
+ ### HTTP response details
3230
+ | Status code | Description | Response headers |
3231
+ |-------------|-------------|------------------|
3232
+ | **200** | Matching lines. | - |
3233
+ | **400** | Invalid request body or parameters. | - |
3234
+
3235
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3236
+
3237
+
2995
3238
  ## fork
2996
3239
 
2997
3240
  > SandboxActionResponse fork(sandboxId, idempotencyKey, forkRequest)
@@ -3070,7 +3313,7 @@ example().catch(console.error);
3070
3313
  | **403** | `environment_forbidden`: the organization limits this environment to other members. Ask an owner or admin to add you. Other `403` codes can also apply. | - |
3071
3314
  | **404** | Resource not found. | - |
3072
3315
  | **409** | Request conflicts with current account or sandbox state. | - |
3073
- | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window you hit). A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
3316
+ | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window and the `limit` that applied). With money in the wallet after the first payment, starts above a limit are paid, up to `startLimitsWithWallet`; the body carries `startLimitsWithWallet`, null when paid starts are not available. A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
3074
3317
  | **503** | No capacity. `no_ready_machine`: a `failFast` create, fork or resume found no ready machine of that type; nothing was started, billed, or counted, and a resumed sandbox stays stopped. `out_of_capacity`: creates and forks are paused until the provisioning queue drains. | - |
3075
3318
 
3076
3319
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
@@ -3517,13 +3760,13 @@ example().catch(console.error);
3517
3760
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3518
3761
 
3519
3762
 
3520
- ## getLatestSandboxSnapshot
3763
+ ## getFileInfo
3521
3764
 
3522
- > SnapshotLatestResponse getLatestSandboxSnapshot(sandboxId)
3765
+ > FileInfoResponse getFileInfo(sandboxId, path)
3523
3766
 
3524
- Get latest boat snapshot
3767
+ Get file or directory details in a sandbox
3525
3768
 
3526
- Return the most recent completed snapshot for this sandbox, or `null` if it has none.
3769
+ Size, permission bits, type and modification time. Needs `file.read`.
3527
3770
 
3528
3771
  ### Example
3529
3772
 
@@ -3532,7 +3775,7 @@ import {
3532
3775
  Configuration,
3533
3776
  BoatApi,
3534
3777
  } from '@boatdev/sdk';
3535
- import type { GetLatestSandboxSnapshotRequest } from '@boatdev/sdk';
3778
+ import type { GetFileInfoRequest } from '@boatdev/sdk';
3536
3779
 
3537
3780
  async function example() {
3538
3781
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -3545,10 +3788,12 @@ async function example() {
3545
3788
  const body = {
3546
3789
  // string | Public Sandbox id returned by create/list/get sandbox calls.
3547
3790
  sandboxId: sandboxId_example,
3548
- } satisfies GetLatestSandboxSnapshotRequest;
3791
+ // string
3792
+ path: path_example,
3793
+ } satisfies GetFileInfoRequest;
3549
3794
 
3550
3795
  try {
3551
- const data = await api.getLatestSandboxSnapshot(body);
3796
+ const data = await api.getFileInfo(body);
3552
3797
  console.log(data);
3553
3798
  } catch (error) {
3554
3799
  console.error(error);
@@ -3565,10 +3810,11 @@ example().catch(console.error);
3565
3810
  | Name | Type | Description | Notes |
3566
3811
  |------------- | ------------- | ------------- | -------------|
3567
3812
  | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3813
+ | **path** | `string` | | [Defaults to `undefined`] |
3568
3814
 
3569
3815
  ### Return type
3570
3816
 
3571
- [**SnapshotLatestResponse**](SnapshotLatestResponse.md)
3817
+ [**FileInfoResponse**](FileInfoResponse.md)
3572
3818
 
3573
3819
  ### Authorization
3574
3820
 
@@ -3583,18 +3829,19 @@ example().catch(console.error);
3583
3829
  ### HTTP response details
3584
3830
  | Status code | Description | Response headers |
3585
3831
  |-------------|-------------|------------------|
3586
- | **200** | Most recent completed snapshot, or `null`. | - |
3587
- | **401** | Missing or invalid bearer token. | - |
3588
- | **404** | Resource not found. | - |
3832
+ | **200** | File details. | - |
3833
+ | **400** | Invalid request body or parameters. | - |
3589
3834
 
3590
3835
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3591
3836
 
3592
3837
 
3593
- ## getNamedSnapshot
3838
+ ## getLatestSandboxSnapshot
3594
3839
 
3595
- > NamedSnapshotInfoResponse getNamedSnapshot(name)
3840
+ > SnapshotLatestResponse getLatestSandboxSnapshot(sandboxId)
3596
3841
 
3597
- Get a named snapshot
3842
+ Get latest boat snapshot
3843
+
3844
+ Return the most recent completed snapshot for this sandbox, or `null` if it has none.
3598
3845
 
3599
3846
  ### Example
3600
3847
 
@@ -3603,7 +3850,7 @@ import {
3603
3850
  Configuration,
3604
3851
  BoatApi,
3605
3852
  } from '@boatdev/sdk';
3606
- import type { GetNamedSnapshotRequest } from '@boatdev/sdk';
3853
+ import type { GetLatestSandboxSnapshotRequest } from '@boatdev/sdk';
3607
3854
 
3608
3855
  async function example() {
3609
3856
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -3614,12 +3861,12 @@ async function example() {
3614
3861
  const api = new BoatApi(config);
3615
3862
 
3616
3863
  const body = {
3617
- // string
3618
- name: name_example,
3619
- } satisfies GetNamedSnapshotRequest;
3864
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
3865
+ sandboxId: sandboxId_example,
3866
+ } satisfies GetLatestSandboxSnapshotRequest;
3620
3867
 
3621
3868
  try {
3622
- const data = await api.getNamedSnapshot(body);
3869
+ const data = await api.getLatestSandboxSnapshot(body);
3623
3870
  console.log(data);
3624
3871
  } catch (error) {
3625
3872
  console.error(error);
@@ -3635,11 +3882,11 @@ example().catch(console.error);
3635
3882
 
3636
3883
  | Name | Type | Description | Notes |
3637
3884
  |------------- | ------------- | ------------- | -------------|
3638
- | **name** | `string` | | [Defaults to `undefined`] |
3885
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3639
3886
 
3640
3887
  ### Return type
3641
3888
 
3642
- [**NamedSnapshotInfoResponse**](NamedSnapshotInfoResponse.md)
3889
+ [**SnapshotLatestResponse**](SnapshotLatestResponse.md)
3643
3890
 
3644
3891
  ### Authorization
3645
3892
 
@@ -3654,20 +3901,18 @@ example().catch(console.error);
3654
3901
  ### HTTP response details
3655
3902
  | Status code | Description | Response headers |
3656
3903
  |-------------|-------------|------------------|
3657
- | **200** | The named snapshot. | - |
3904
+ | **200** | Most recent completed snapshot, or `null`. | - |
3658
3905
  | **401** | Missing or invalid bearer token. | - |
3659
3906
  | **404** | Resource not found. | - |
3660
3907
 
3661
3908
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3662
3909
 
3663
3910
 
3664
- ## getSandboxAiUsage
3665
-
3666
- > SandboxAiUsageResponse getSandboxAiUsage(sandboxId, days)
3911
+ ## getNamedSnapshot
3667
3912
 
3668
- Get sandbox AI usage
3913
+ > NamedSnapshotInfoResponse getNamedSnapshot(name)
3669
3914
 
3670
- One sandbox\'s proxied AI usage per UTC day, credential and model, and whether it is blocked. Needs an API key with `sandbox.read` on the sandbox.
3915
+ Get a named snapshot
3671
3916
 
3672
3917
  ### Example
3673
3918
 
@@ -3676,7 +3921,7 @@ import {
3676
3921
  Configuration,
3677
3922
  BoatApi,
3678
3923
  } from '@boatdev/sdk';
3679
- import type { GetSandboxAiUsageRequest } from '@boatdev/sdk';
3924
+ import type { GetNamedSnapshotRequest } from '@boatdev/sdk';
3680
3925
 
3681
3926
  async function example() {
3682
3927
  console.log("🚀 Testing @boatdev/sdk SDK...");
@@ -3687,14 +3932,12 @@ async function example() {
3687
3932
  const api = new BoatApi(config);
3688
3933
 
3689
3934
  const body = {
3690
- // string | Public Sandbox id returned by create/list/get sandbox calls.
3691
- sandboxId: sandboxId_example,
3692
- // number | Days of history, today included. (optional)
3693
- days: 56,
3694
- } satisfies GetSandboxAiUsageRequest;
3935
+ // string
3936
+ name: name_example,
3937
+ } satisfies GetNamedSnapshotRequest;
3695
3938
 
3696
3939
  try {
3697
- const data = await api.getSandboxAiUsage(body);
3940
+ const data = await api.getNamedSnapshot(body);
3698
3941
  console.log(data);
3699
3942
  } catch (error) {
3700
3943
  console.error(error);
@@ -3710,8 +3953,83 @@ example().catch(console.error);
3710
3953
 
3711
3954
  | Name | Type | Description | Notes |
3712
3955
  |------------- | ------------- | ------------- | -------------|
3713
- | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
3714
- | **days** | `number` | Days of history, today included. | [Optional] [Defaults to `30`] |
3956
+ | **name** | `string` | | [Defaults to `undefined`] |
3957
+
3958
+ ### Return type
3959
+
3960
+ [**NamedSnapshotInfoResponse**](NamedSnapshotInfoResponse.md)
3961
+
3962
+ ### Authorization
3963
+
3964
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
3965
+
3966
+ ### HTTP request headers
3967
+
3968
+ - **Content-Type**: Not defined
3969
+ - **Accept**: `application/json`
3970
+
3971
+
3972
+ ### HTTP response details
3973
+ | Status code | Description | Response headers |
3974
+ |-------------|-------------|------------------|
3975
+ | **200** | The named snapshot. | - |
3976
+ | **401** | Missing or invalid bearer token. | - |
3977
+ | **404** | Resource not found. | - |
3978
+
3979
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
3980
+
3981
+
3982
+ ## getSandboxAiUsage
3983
+
3984
+ > SandboxAiUsageResponse getSandboxAiUsage(sandboxId, days)
3985
+
3986
+ Get sandbox AI usage
3987
+
3988
+ One sandbox\'s proxied AI usage per UTC day, credential and model, and whether it is blocked. Needs an API key with `sandbox.read` on the sandbox.
3989
+
3990
+ ### Example
3991
+
3992
+ ```ts
3993
+ import {
3994
+ Configuration,
3995
+ BoatApi,
3996
+ } from '@boatdev/sdk';
3997
+ import type { GetSandboxAiUsageRequest } from '@boatdev/sdk';
3998
+
3999
+ async function example() {
4000
+ console.log("🚀 Testing @boatdev/sdk SDK...");
4001
+ const config = new Configuration({
4002
+ // Configure HTTP bearer authorization: BoatBearerAuth
4003
+ accessToken: "YOUR BEARER TOKEN",
4004
+ });
4005
+ const api = new BoatApi(config);
4006
+
4007
+ const body = {
4008
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
4009
+ sandboxId: sandboxId_example,
4010
+ // number | Days of history, today included. (optional)
4011
+ days: 56,
4012
+ } satisfies GetSandboxAiUsageRequest;
4013
+
4014
+ try {
4015
+ const data = await api.getSandboxAiUsage(body);
4016
+ console.log(data);
4017
+ } catch (error) {
4018
+ console.error(error);
4019
+ }
4020
+ }
4021
+
4022
+ // Run the test
4023
+ example().catch(console.error);
4024
+ ```
4025
+
4026
+ ### Parameters
4027
+
4028
+
4029
+ | Name | Type | Description | Notes |
4030
+ |------------- | ------------- | ------------- | -------------|
4031
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
4032
+ | **days** | `number` | Days of history, today included. | [Optional] [Defaults to `30`] |
3715
4033
 
3716
4034
  ### Return type
3717
4035
 
@@ -4406,7 +4724,7 @@ example().catch(console.error);
4406
4724
 
4407
4725
  Get Boat limits
4408
4726
 
4409
- Check remaining machine starts, compute time, credits, access readiness, and concurrent-sandbox capacity for the wallet a create would bill: the `org` / `X-Boat-Org` you pass (id or name), else the account\'s active wallet, else personal. The response carries `teamId` when an organization wallet was read.
4727
+ Check remaining machine starts, included VM time, the wallet, overage prices, access readiness, and concurrent-sandbox capacity for the wallet a create would bill: the `org` / `X-Boat-Org` you pass (id or name), else the account\'s active wallet, else personal. The response carries `teamId` when an organization wallet was read.
4410
4728
 
4411
4729
  ### Example
4412
4730
 
@@ -4620,6 +4938,81 @@ This endpoint does not need any parameter.
4620
4938
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
4621
4939
 
4622
4940
 
4941
+ ## listFiles
4942
+
4943
+ > FileListResponse listFiles(sandboxId, path)
4944
+
4945
+ List a directory in a sandbox
4946
+
4947
+ One level, sorted by name. A symlink is listed as a symlink, not followed. Defaults to /home/user. Needs `file.read`.
4948
+
4949
+ ### Example
4950
+
4951
+ ```ts
4952
+ import {
4953
+ Configuration,
4954
+ BoatApi,
4955
+ } from '@boatdev/sdk';
4956
+ import type { ListFilesRequest } from '@boatdev/sdk';
4957
+
4958
+ async function example() {
4959
+ console.log("🚀 Testing @boatdev/sdk SDK...");
4960
+ const config = new Configuration({
4961
+ // Configure HTTP bearer authorization: BoatBearerAuth
4962
+ accessToken: "YOUR BEARER TOKEN",
4963
+ });
4964
+ const api = new BoatApi(config);
4965
+
4966
+ const body = {
4967
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
4968
+ sandboxId: sandboxId_example,
4969
+ // string (optional)
4970
+ path: path_example,
4971
+ } satisfies ListFilesRequest;
4972
+
4973
+ try {
4974
+ const data = await api.listFiles(body);
4975
+ console.log(data);
4976
+ } catch (error) {
4977
+ console.error(error);
4978
+ }
4979
+ }
4980
+
4981
+ // Run the test
4982
+ example().catch(console.error);
4983
+ ```
4984
+
4985
+ ### Parameters
4986
+
4987
+
4988
+ | Name | Type | Description | Notes |
4989
+ |------------- | ------------- | ------------- | -------------|
4990
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
4991
+ | **path** | `string` | | [Optional] [Defaults to `'/home/user'`] |
4992
+
4993
+ ### Return type
4994
+
4995
+ [**FileListResponse**](FileListResponse.md)
4996
+
4997
+ ### Authorization
4998
+
4999
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
5000
+
5001
+ ### HTTP request headers
5002
+
5003
+ - **Content-Type**: Not defined
5004
+ - **Accept**: `application/json`
5005
+
5006
+
5007
+ ### HTTP response details
5008
+ | Status code | Description | Response headers |
5009
+ |-------------|-------------|------------------|
5010
+ | **200** | Directory entries. | - |
5011
+ | **400** | Invalid request body or parameters. | - |
5012
+
5013
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5014
+
5015
+
4623
5016
  ## listNamedSnapshots
4624
5017
 
4625
5018
  > NamedSnapshotListResponse listNamedSnapshots()
@@ -5175,6 +5568,81 @@ This endpoint does not need any parameter.
5175
5568
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5176
5569
 
5177
5570
 
5571
+ ## moveFile
5572
+
5573
+ > FileMoveResponse moveFile(sandboxId, fileMoveRequest)
5574
+
5575
+ Move or rename a file or directory in a sandbox
5576
+
5577
+ Works across /home/user and /tmp. A symlink is moved itself, never its target. Needs `file.write`.
5578
+
5579
+ ### Example
5580
+
5581
+ ```ts
5582
+ import {
5583
+ Configuration,
5584
+ BoatApi,
5585
+ } from '@boatdev/sdk';
5586
+ import type { MoveFileRequest } from '@boatdev/sdk';
5587
+
5588
+ async function example() {
5589
+ console.log("🚀 Testing @boatdev/sdk SDK...");
5590
+ const config = new Configuration({
5591
+ // Configure HTTP bearer authorization: BoatBearerAuth
5592
+ accessToken: "YOUR BEARER TOKEN",
5593
+ });
5594
+ const api = new BoatApi(config);
5595
+
5596
+ const body = {
5597
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
5598
+ sandboxId: sandboxId_example,
5599
+ // FileMoveRequest
5600
+ fileMoveRequest: ...,
5601
+ } satisfies MoveFileRequest;
5602
+
5603
+ try {
5604
+ const data = await api.moveFile(body);
5605
+ console.log(data);
5606
+ } catch (error) {
5607
+ console.error(error);
5608
+ }
5609
+ }
5610
+
5611
+ // Run the test
5612
+ example().catch(console.error);
5613
+ ```
5614
+
5615
+ ### Parameters
5616
+
5617
+
5618
+ | Name | Type | Description | Notes |
5619
+ |------------- | ------------- | ------------- | -------------|
5620
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
5621
+ | **fileMoveRequest** | [FileMoveRequest](FileMoveRequest.md) | | |
5622
+
5623
+ ### Return type
5624
+
5625
+ [**FileMoveResponse**](FileMoveResponse.md)
5626
+
5627
+ ### Authorization
5628
+
5629
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
5630
+
5631
+ ### HTTP request headers
5632
+
5633
+ - **Content-Type**: `application/json`
5634
+ - **Accept**: `application/json`
5635
+
5636
+
5637
+ ### HTTP response details
5638
+ | Status code | Description | Response headers |
5639
+ |-------------|-------------|------------------|
5640
+ | **200** | Moved. | - |
5641
+ | **400** | Invalid request body or parameters. | - |
5642
+
5643
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5644
+
5645
+
5178
5646
  ## processes
5179
5647
 
5180
5648
  > ProcessListResponse processes(sandboxId)
@@ -5409,7 +5877,7 @@ example().catch(console.error);
5409
5877
 
5410
5878
  Read a file from a sandbox
5411
5879
 
5412
- Files up to 5 MiB. For a larger file, use `POST /sandboxes/{sandboxId}/files/download-url`.
5880
+ Files up to 5 MiB. For a larger file, use `POST /sandboxes/{sandboxId}/files/download-url`. On a sandbox that is still starting, the call waits until it is ready (up to 60 s, like a command), so it reads the sandbox\'s own disk and never the machine\'s stock one.
5413
5881
 
5414
5882
  ### Example
5415
5883
 
@@ -5555,6 +6023,81 @@ example().catch(console.error);
5555
6023
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
5556
6024
 
5557
6025
 
6026
+ ## replaceInFiles
6027
+
6028
+ > FileReplaceResponse replaceInFiles(sandboxId, fileReplaceRequest)
6029
+
6030
+ Replace text in sandbox files
6031
+
6032
+ Replaces every occurrence of `pattern` with `newValue` in each file. Needs `file.write`.
6033
+
6034
+ ### Example
6035
+
6036
+ ```ts
6037
+ import {
6038
+ Configuration,
6039
+ BoatApi,
6040
+ } from '@boatdev/sdk';
6041
+ import type { ReplaceInFilesRequest } from '@boatdev/sdk';
6042
+
6043
+ async function example() {
6044
+ console.log("🚀 Testing @boatdev/sdk SDK...");
6045
+ const config = new Configuration({
6046
+ // Configure HTTP bearer authorization: BoatBearerAuth
6047
+ accessToken: "YOUR BEARER TOKEN",
6048
+ });
6049
+ const api = new BoatApi(config);
6050
+
6051
+ const body = {
6052
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
6053
+ sandboxId: sandboxId_example,
6054
+ // FileReplaceRequest
6055
+ fileReplaceRequest: ...,
6056
+ } satisfies ReplaceInFilesRequest;
6057
+
6058
+ try {
6059
+ const data = await api.replaceInFiles(body);
6060
+ console.log(data);
6061
+ } catch (error) {
6062
+ console.error(error);
6063
+ }
6064
+ }
6065
+
6066
+ // Run the test
6067
+ example().catch(console.error);
6068
+ ```
6069
+
6070
+ ### Parameters
6071
+
6072
+
6073
+ | Name | Type | Description | Notes |
6074
+ |------------- | ------------- | ------------- | -------------|
6075
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
6076
+ | **fileReplaceRequest** | [FileReplaceRequest](FileReplaceRequest.md) | | |
6077
+
6078
+ ### Return type
6079
+
6080
+ [**FileReplaceResponse**](FileReplaceResponse.md)
6081
+
6082
+ ### Authorization
6083
+
6084
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
6085
+
6086
+ ### HTTP request headers
6087
+
6088
+ - **Content-Type**: `application/json`
6089
+ - **Accept**: `application/json`
6090
+
6091
+
6092
+ ### HTTP response details
6093
+ | Status code | Description | Response headers |
6094
+ |-------------|-------------|------------------|
6095
+ | **200** | Per-file results. | - |
6096
+ | **400** | Invalid request body or parameters. | - |
6097
+
6098
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6099
+
6100
+
5558
6101
  ## repos
5559
6102
 
5560
6103
  > ReposResponse repos(sync, limit, cursor, sort, q, selected)
@@ -5716,7 +6259,7 @@ example().catch(console.error);
5716
6259
  | **403** | `environment_forbidden`: the organization limits this environment to other members. Ask an owner or admin to add you. Other `403` codes can also apply. | - |
5717
6260
  | **404** | Resource not found. | - |
5718
6261
  | **409** | Request conflicts with current account or sandbox state. | - |
5719
- | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window you hit). A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
6262
+ | **429** | Machine start or concurrent-sandbox limit reached. Create, fork and resume each count as one machine start against your plan\'s start limits (see the Billing guide; `rate_limited`, naming the window and the `limit` that applied). With money in the wallet after the first payment, starts above a limit are paid, up to `startLimitsWithWallet`; the body carries `startLimitsWithWallet`, null when paid starts are not available. A sandbox that would exceed your plan\'s concurrent-sandbox cap is refused with `limit_reached`, or `member_limit_reached` when an organization owner has capped you below the plan. | - |
5720
6263
  | **503** | No capacity. `no_ready_machine`: a `failFast` create, fork or resume found no ready machine of that type; nothing was started, billed, or counted, and a resumed sandbox stays stopped. `out_of_capacity`: creates and forks are paused until the provisioning queue drains. | - |
5721
6264
 
5722
6265
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
@@ -5728,7 +6271,7 @@ example().catch(console.error);
5728
6271
 
5729
6272
  Revoke an API key
5730
6273
 
5731
- Revokes the key immediately. Requires a dashboard or CLI session.
6274
+ Revokes the key immediately. Requires a dashboard or CLI session, or an admin-scoped key. A key revokes itself or a key it could create (same or fewer actions, sandboxes and environments, no later expiry).
5732
6275
 
5733
6276
  ### Example
5734
6277
 
@@ -5878,7 +6421,7 @@ example().catch(console.error);
5878
6421
 
5879
6422
  Rotate an API key
5880
6423
 
5881
- Replaces the raw secret without changing expiry or scope. Requires a dashboard or CLI session.
6424
+ Replaces the raw secret without changing expiry or scope. Requires a dashboard or CLI session, or an admin-scoped key. A key rotates itself or a key it could create.
5882
6425
 
5883
6426
  ### Example
5884
6427
 
@@ -6180,7 +6723,7 @@ example().catch(console.error);
6180
6723
  | **400** | Invalid request body or parameters. | - |
6181
6724
  | **401** | Missing or invalid bearer token. | - |
6182
6725
  | **404** | Resource not found. | - |
6183
- | **402** | `credit_required`: the wallet already keeps 10 or more named snapshots and has no credit left. Each named snapshot above the free 10 costs $1.70 a month, charged daily. Add credit or remove one. | - |
6726
+ | **402** | `credit_required`: the wallet already keeps its included named snapshots and is empty. Each named snapshot above the included count costs $0.056 a day from the wallet. Add money to the wallet or remove one. | - |
6184
6727
  | **409** | `save_in_progress` when a save under this name is already running; wait for it to settle rather than retrying immediately. | - |
6185
6728
 
6186
6729
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
@@ -6256,12 +6799,90 @@ example().catch(console.error);
6256
6799
  | **400** | Invalid request body or parameters. | - |
6257
6800
  | **401** | Missing or invalid bearer token. | - |
6258
6801
  | **404** | Resource not found. | - |
6259
- | **402** | `credit_required`: the wallet already keeps 10 or more saved snapshots and has no credit left. Each saved snapshot above the plan\'s included count costs $1.70 a month, charged daily. Add credit or remove one. | - |
6802
+ | **402** | `credit_required`: the wallet already keeps its included saved snapshots and is empty. Each saved snapshot above the plan\'s included count costs $0.056 a day from the wallet. Add money to the wallet or remove one. | - |
6260
6803
  | **409** | `save_in_progress` when a save under this name is already running; wait for it to settle rather than retrying immediately. | - |
6261
6804
 
6262
6805
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6263
6806
 
6264
6807
 
6808
+ ## searchFiles
6809
+
6810
+ > FileSearchResponse searchFiles(sandboxId, pattern, path)
6811
+
6812
+ Search files by name in a sandbox
6813
+
6814
+ Every file and directory under `path` whose name matches the glob `pattern` (for example `*.py`). Symlinks are not followed. Needs `file.read`.
6815
+
6816
+ ### Example
6817
+
6818
+ ```ts
6819
+ import {
6820
+ Configuration,
6821
+ BoatApi,
6822
+ } from '@boatdev/sdk';
6823
+ import type { SearchFilesRequest } from '@boatdev/sdk';
6824
+
6825
+ async function example() {
6826
+ console.log("🚀 Testing @boatdev/sdk SDK...");
6827
+ const config = new Configuration({
6828
+ // Configure HTTP bearer authorization: BoatBearerAuth
6829
+ accessToken: "YOUR BEARER TOKEN",
6830
+ });
6831
+ const api = new BoatApi(config);
6832
+
6833
+ const body = {
6834
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
6835
+ sandboxId: sandboxId_example,
6836
+ // string
6837
+ pattern: pattern_example,
6838
+ // string (optional)
6839
+ path: path_example,
6840
+ } satisfies SearchFilesRequest;
6841
+
6842
+ try {
6843
+ const data = await api.searchFiles(body);
6844
+ console.log(data);
6845
+ } catch (error) {
6846
+ console.error(error);
6847
+ }
6848
+ }
6849
+
6850
+ // Run the test
6851
+ example().catch(console.error);
6852
+ ```
6853
+
6854
+ ### Parameters
6855
+
6856
+
6857
+ | Name | Type | Description | Notes |
6858
+ |------------- | ------------- | ------------- | -------------|
6859
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
6860
+ | **pattern** | `string` | | [Defaults to `undefined`] |
6861
+ | **path** | `string` | | [Optional] [Defaults to `'/home/user'`] |
6862
+
6863
+ ### Return type
6864
+
6865
+ [**FileSearchResponse**](FileSearchResponse.md)
6866
+
6867
+ ### Authorization
6868
+
6869
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
6870
+
6871
+ ### HTTP request headers
6872
+
6873
+ - **Content-Type**: Not defined
6874
+ - **Accept**: `application/json`
6875
+
6876
+
6877
+ ### HTTP response details
6878
+ | Status code | Description | Response headers |
6879
+ |-------------|-------------|------------------|
6880
+ | **200** | Matching paths. | - |
6881
+ | **400** | Invalid request body or parameters. | - |
6882
+
6883
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6884
+
6885
+
6265
6886
  ## secrets
6266
6887
 
6267
6888
  > SecretsResponse secrets()
@@ -6800,6 +7421,81 @@ example().catch(console.error);
6800
7421
  [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
6801
7422
 
6802
7423
 
7424
+ ## setFilePermissions
7425
+
7426
+ > FileInfoResponse setFilePermissions(sandboxId, filePermissionsRequest)
7427
+
7428
+ Set file permissions in a sandbox
7429
+
7430
+ Sets the permission bits. Files belong to the sandbox user; the owner and group do not change. Needs `file.write`.
7431
+
7432
+ ### Example
7433
+
7434
+ ```ts
7435
+ import {
7436
+ Configuration,
7437
+ BoatApi,
7438
+ } from '@boatdev/sdk';
7439
+ import type { SetFilePermissionsRequest } from '@boatdev/sdk';
7440
+
7441
+ async function example() {
7442
+ console.log("🚀 Testing @boatdev/sdk SDK...");
7443
+ const config = new Configuration({
7444
+ // Configure HTTP bearer authorization: BoatBearerAuth
7445
+ accessToken: "YOUR BEARER TOKEN",
7446
+ });
7447
+ const api = new BoatApi(config);
7448
+
7449
+ const body = {
7450
+ // string | Public Sandbox id returned by create/list/get sandbox calls.
7451
+ sandboxId: sandboxId_example,
7452
+ // FilePermissionsRequest
7453
+ filePermissionsRequest: ...,
7454
+ } satisfies SetFilePermissionsRequest;
7455
+
7456
+ try {
7457
+ const data = await api.setFilePermissions(body);
7458
+ console.log(data);
7459
+ } catch (error) {
7460
+ console.error(error);
7461
+ }
7462
+ }
7463
+
7464
+ // Run the test
7465
+ example().catch(console.error);
7466
+ ```
7467
+
7468
+ ### Parameters
7469
+
7470
+
7471
+ | Name | Type | Description | Notes |
7472
+ |------------- | ------------- | ------------- | -------------|
7473
+ | **sandboxId** | `string` | Public Sandbox id returned by create/list/get sandbox calls. | [Defaults to `undefined`] |
7474
+ | **filePermissionsRequest** | [FilePermissionsRequest](FilePermissionsRequest.md) | | |
7475
+
7476
+ ### Return type
7477
+
7478
+ [**FileInfoResponse**](FileInfoResponse.md)
7479
+
7480
+ ### Authorization
7481
+
7482
+ [BoatBearerAuth](../README.md#BoatBearerAuth)
7483
+
7484
+ ### HTTP request headers
7485
+
7486
+ - **Content-Type**: `application/json`
7487
+ - **Accept**: `application/json`
7488
+
7489
+
7490
+ ### HTTP response details
7491
+ | Status code | Description | Response headers |
7492
+ |-------------|-------------|------------------|
7493
+ | **200** | Permissions set. | - |
7494
+ | **400** | Invalid request body or parameters. | - |
7495
+
7496
+ [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
7497
+
7498
+
6803
7499
  ## setSandboxAiAccess
6804
7500
 
6805
7501
  > SandboxAiAccessResponse setSandboxAiAccess(sandboxId, setSandboxAiAccessRequest)
@@ -7578,7 +8274,7 @@ example().catch(console.error);
7578
8274
 
7579
8275
  Turn the AI credentials proxy on or off
7580
8276
 
7581
- With the proxy on, sandboxes get placeholder keys and base URLs that point at Boat. Boat swaps in the real key on each request. Real keys never enter the sandbox. Running sandboxes switch at their next start. While on, the account pays $1 of Boat time for each UTC day, plus $1 per 1,000 proxied requests, charged to the wallet each sandbox bills. For an organization, only its owner can change the switch. Needs an API key with `account.admin`.
8277
+ With the proxy on, sandboxes get placeholder keys and base URLs that point at Boat. Boat swaps in the real key on each request. Real keys never enter the sandbox. Running sandboxes switch at their next start. While on, the wallet of the account pays $1 for each UTC day, plus $1 per 1,000 proxied requests, charged to the wallet each sandbox bills. For an organization, only its owner can change the switch. Needs an API key with `account.admin`.
7582
8278
 
7583
8279
  ### Example
7584
8280
 
@@ -8276,7 +8972,7 @@ example().catch(console.error);
8276
8972
 
8277
8973
  Write a file in a sandbox
8278
8974
 
8279
- Files up to 5 MiB after decoding. For a larger file, use `POST /sandboxes/{sandboxId}/files/upload-url`.
8975
+ Files up to 5 MiB after decoding. For a larger file, use `POST /sandboxes/{sandboxId}/files/upload-url`. On a sandbox that is still starting, the call waits until it is ready (up to 60 s, like a command): a sandbox\'s files are in place only once it is ready, so a write any earlier would not stay. A `200` always means the file is on the sandbox\'s disk.
8280
8976
 
8281
8977
  ### Example
8282
8978