@opengeni/core 3.0.1 → 3.1.2

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 (257) hide show
  1. package/README.md +4 -4
  2. package/dist/access/index.d.ts +131 -7
  3. package/dist/access/service-initiator.d.ts +3 -0
  4. package/dist/application/archived-session-imports.d.ts +6 -0
  5. package/dist/application/composer-submit.d.ts +1 -1
  6. package/dist/application/connect-operation.d.ts +6 -0
  7. package/dist/application/external-workspace-members.d.ts +13 -1
  8. package/dist/application/modal-native-live-declaration-join.d.ts +37 -0
  9. package/dist/application/modal-native-original-configuration.d.ts +79 -0
  10. package/dist/application/modal-native-worker-host-transport.d.ts +297 -0
  11. package/dist/application/new-session-drafts.d.ts +29 -2
  12. package/dist/application/organization-privacy.d.ts +57 -0
  13. package/dist/application/prepared-mcp-connection.d.ts +31 -0
  14. package/dist/application/sandbox-recovery.d.ts +58 -0
  15. package/dist/application/session-commands.d.ts +3 -0
  16. package/dist/application/session-tenancy.d.ts +13 -4
  17. package/dist/billing/agent-run-admission.d.ts +21 -0
  18. package/dist/billing/limits.d.ts +27 -1
  19. package/dist/billing/model-call-admission.d.ts +34 -0
  20. package/dist/billing/model-usage-settlement.d.ts +112 -0
  21. package/dist/canonical-human-identities.js +1 -1
  22. package/dist/{chunk-VCZFFEPB.js → chunk-7T2SZ7BI.js} +16 -2
  23. package/dist/chunk-7T2SZ7BI.js.map +1 -0
  24. package/dist/{chunk-ZYCNLYGH.js → chunk-OMJFIIWK.js} +178 -12
  25. package/dist/chunk-OMJFIIWK.js.map +1 -0
  26. package/dist/{chunk-H7X52RI2.js → chunk-QI2M2B2K.js} +83 -8
  27. package/dist/chunk-QI2M2B2K.js.map +1 -0
  28. package/dist/{chunk-OF65T3PM.js → chunk-TTWTXQB2.js} +94 -6
  29. package/dist/chunk-TTWTXQB2.js.map +1 -0
  30. package/dist/codex-model-availability.d.ts +55 -0
  31. package/dist/default-session-model.d.ts +192 -0
  32. package/dist/dependencies.d.ts +41 -7
  33. package/dist/developer-setup-credential-ceiling.d.ts +10 -0
  34. package/dist/domain/agent-config-resolution.d.ts +49 -0
  35. package/dist/domain/automations.d.ts +8 -1
  36. package/dist/domain/capabilities.d.ts +112 -8
  37. package/dist/domain/connection-account-selection-error.d.ts +8 -0
  38. package/dist/domain/connector-tool-permissions.d.ts +62 -0
  39. package/dist/domain/direct-model-provider.d.ts +3 -0
  40. package/dist/domain/editable-artifacts/agent-application.d.ts +10 -1
  41. package/dist/domain/editable-artifacts/durable-export.d.ts +22 -1
  42. package/dist/domain/editable-artifacts/ports.d.ts +10 -0
  43. package/dist/domain/editable-artifacts/service.d.ts +3 -1
  44. package/dist/domain/editable-artifacts/types.d.ts +1 -1
  45. package/dist/domain/encryption-key.d.ts +12 -0
  46. package/dist/domain/insights-timing.d.ts +16 -0
  47. package/dist/domain/insights-usage.d.ts +27 -0
  48. package/dist/domain/insights.d.ts +21 -3
  49. package/dist/domain/knowledge-files.d.ts +1 -1
  50. package/dist/domain/knowledge-preparation.d.ts +10 -0
  51. package/dist/domain/knowledge-preparation.test.d.ts +1 -0
  52. package/dist/domain/knowledge-search.d.ts +15 -76
  53. package/dist/domain/mcp-account-bindings.d.ts +17 -0
  54. package/dist/domain/mcp-account-routes.d.ts +21 -0
  55. package/dist/domain/native-mcp-connection-admission.d.ts +3 -0
  56. package/dist/domain/organization-integration-catalog.d.ts +15 -0
  57. package/dist/domain/personal-connection-delegations.d.ts +73 -12
  58. package/dist/domain/pr-review.d.ts +121 -6
  59. package/dist/domain/realtime-voice-billing.d.ts +103 -0
  60. package/dist/domain/resources.d.ts +17 -1
  61. package/dist/domain/scheduled-task-access.d.ts +265 -0
  62. package/dist/domain/scheduled-task-account-audit.d.ts +27 -0
  63. package/dist/domain/scheduled-task-audience.d.ts +70 -0
  64. package/dist/domain/scheduled-tasks.d.ts +61 -18
  65. package/dist/domain/session-connection-accounts.d.ts +53 -0
  66. package/dist/domain/session-file-access.d.ts +4 -0
  67. package/dist/domain/session-native-connection-replacement.d.ts +14 -0
  68. package/dist/domain/session-start-timing.d.ts +7 -0
  69. package/dist/domain/session-tool-policy.d.ts +102 -4
  70. package/dist/domain/sessions.d.ts +179 -15
  71. package/dist/domain/site-audience.d.ts +52 -0
  72. package/dist/domain/skills.d.ts +29 -1
  73. package/dist/domain/slack-bot.d.ts +46 -1
  74. package/dist/domain/slack-publication-secret-safety.d.ts +1 -1
  75. package/dist/domain/vaults/index.d.ts +7 -0
  76. package/dist/domain/vaults/mapping.d.ts +25 -0
  77. package/dist/domain/vaults/provider-registry.d.ts +72 -0
  78. package/dist/domain/vaults/provider-sync.d.ts +176 -0
  79. package/dist/domain/vaults/provider-writes.d.ts +57 -0
  80. package/dist/domain/vaults/secret-resolver.d.ts +34 -0
  81. package/dist/domain/vaults/types.d.ts +24 -0
  82. package/dist/domain/vaults/vault-service.d.ts +35 -0
  83. package/dist/domain/voice-input-billing.d.ts +77 -0
  84. package/dist/domain/web-search-billing.d.ts +51 -0
  85. package/dist/domain/workspace-credits.d.ts +7 -0
  86. package/dist/editable-artifact-live/application.d.ts +2 -1
  87. package/dist/editable-artifact-live/server.d.ts +5 -1
  88. package/dist/editable-artifact-live/ticket.d.ts +2 -1
  89. package/dist/editable-artifact-live/types.d.ts +9 -0
  90. package/dist/editable-artifact-live.js +2 -2
  91. package/dist/editable-artifacts.js +10 -2
  92. package/dist/goal-admission.d.ts +627 -0
  93. package/dist/host-session-usage-limit.d.ts +15 -0
  94. package/dist/index.d.ts +43 -8
  95. package/dist/index.js +22682 -11743
  96. package/dist/index.js.map +1 -1
  97. package/dist/managed-session.d.ts +110 -7
  98. package/dist/model-call.d.ts +58 -0
  99. package/dist/model-catalog.d.ts +29 -3
  100. package/dist/model-provider-credentials.d.ts +43 -0
  101. package/dist/product-usage-metrics.d.ts +30 -0
  102. package/dist/rigs/index.d.ts +1 -13
  103. package/dist/sandbox/fleet.d.ts +58 -4
  104. package/dist/sandbox/routing.d.ts +42 -2
  105. package/dist/sandbox/runtime-settings.d.ts +27 -17
  106. package/dist/session-authorization.d.ts +10 -0
  107. package/dist/session-usage-limit-metrics.d.ts +60 -0
  108. package/dist/session-usage-limits.d.ts +89 -0
  109. package/dist/site-agent-clamp.d.ts +71 -0
  110. package/dist/site-session-origin.d.ts +39 -2
  111. package/dist/transcription.d.ts +120 -3
  112. package/dist/turn-surface.d.ts +20 -0
  113. package/dist/user-presence.d.ts +32 -0
  114. package/dist/workflow-wake-contract.d.ts +13 -1
  115. package/package.json +15 -22
  116. package/src/access/index.ts +961 -38
  117. package/src/access/service-initiator.ts +50 -0
  118. package/src/application/api-integration-servers.ts +9 -0
  119. package/src/application/archived-session-imports.ts +161 -0
  120. package/src/application/composer-submit.ts +3 -2
  121. package/src/application/connect-authority.ts +3 -3
  122. package/src/application/connect-operation.ts +37 -3
  123. package/src/application/external-continuation.ts +20 -3
  124. package/src/application/external-link-work-admission.ts +3 -0
  125. package/src/application/external-workspace-members.ts +51 -3
  126. package/src/application/modal-native-live-declaration-join.ts +196 -0
  127. package/src/application/modal-native-original-configuration.ts +261 -0
  128. package/src/application/modal-native-worker-host-transport.ts +263 -0
  129. package/src/application/new-session-drafts.ts +172 -55
  130. package/src/application/organization-privacy.ts +161 -0
  131. package/src/application/prepared-mcp-connection.ts +133 -0
  132. package/src/application/sandbox-recovery.ts +78 -0
  133. package/src/application/session-commands.ts +73 -1
  134. package/src/application/session-mcp-credential-rotation.ts +61 -18
  135. package/src/application/session-tenancy.ts +262 -44
  136. package/src/application/user-resource-grants.ts +1 -29
  137. package/src/billing/agent-run-admission.ts +117 -0
  138. package/src/billing/limits.ts +138 -14
  139. package/src/billing/model-call-admission.ts +118 -0
  140. package/src/billing/model-usage-settlement.ts +472 -0
  141. package/src/codex-model-availability.ts +264 -0
  142. package/src/default-session-model.ts +692 -0
  143. package/src/dependencies.ts +48 -6
  144. package/src/developer-setup-credential-ceiling.ts +60 -0
  145. package/src/domain/agent-config-resolution.ts +148 -0
  146. package/src/domain/automations.ts +76 -2
  147. package/src/domain/capabilities.ts +830 -181
  148. package/src/domain/connection-account-selection-error.ts +19 -0
  149. package/src/domain/connector-tool-permissions.ts +572 -0
  150. package/src/domain/direct-model-provider.ts +62 -0
  151. package/src/domain/editable-artifacts/agent-application.ts +44 -6
  152. package/src/domain/editable-artifacts/durable-export.ts +100 -5
  153. package/src/domain/editable-artifacts/in-memory.ts +6 -0
  154. package/src/domain/editable-artifacts/ports.ts +11 -0
  155. package/src/domain/editable-artifacts/service.ts +20 -0
  156. package/src/domain/editable-artifacts/types.ts +1 -1
  157. package/src/domain/encryption-key.ts +26 -0
  158. package/src/domain/file-owner.ts +16 -1
  159. package/src/domain/github-action-policies.ts +1 -1
  160. package/src/domain/github-skill-source.ts +3 -1
  161. package/src/domain/insights-timing.ts +95 -0
  162. package/src/domain/insights-usage.ts +67 -0
  163. package/src/domain/insights.ts +167 -43
  164. package/src/domain/knowledge-files.ts +10 -3
  165. package/src/domain/knowledge-messages.ts +1 -0
  166. package/src/domain/knowledge-preparation.test.ts +276 -0
  167. package/src/domain/knowledge-preparation.ts +147 -0
  168. package/src/domain/knowledge-search.test.ts +617 -5
  169. package/src/domain/knowledge-search.ts +240 -23
  170. package/src/domain/mcp-account-bindings.ts +169 -0
  171. package/src/domain/mcp-account-routes.ts +152 -0
  172. package/src/domain/native-mcp-connection-admission.ts +14 -0
  173. package/src/domain/organization-integration-catalog.ts +88 -0
  174. package/src/domain/personal-connection-delegations.ts +399 -257
  175. package/src/domain/pr-review.ts +24 -8
  176. package/src/domain/realtime-voice-billing.ts +425 -0
  177. package/src/domain/resources.ts +50 -4
  178. package/src/domain/scheduled-task-access.ts +1089 -0
  179. package/src/domain/scheduled-task-account-audit.ts +90 -0
  180. package/src/domain/scheduled-task-audience.ts +249 -0
  181. package/src/domain/scheduled-tasks.ts +1313 -374
  182. package/src/domain/session-connection-accounts.ts +239 -0
  183. package/src/domain/session-file-access.ts +47 -0
  184. package/src/domain/session-native-connection-replacement.ts +64 -0
  185. package/src/domain/session-start-timing.ts +60 -0
  186. package/src/domain/session-tool-policy.ts +489 -14
  187. package/src/domain/sessions.ts +2254 -717
  188. package/src/domain/site-audience.ts +130 -0
  189. package/src/domain/skills.ts +9 -0
  190. package/src/domain/slack-bot.ts +141 -4
  191. package/src/domain/slack-publication-secret-safety.ts +1 -1
  192. package/src/domain/vaults/index.ts +19 -0
  193. package/src/domain/vaults/mapping.ts +190 -0
  194. package/src/domain/vaults/provider-registry.ts +201 -0
  195. package/src/domain/vaults/provider-sync.ts +531 -0
  196. package/src/domain/vaults/provider-writes.ts +288 -0
  197. package/src/domain/vaults/secret-resolver.ts +464 -0
  198. package/src/domain/vaults/types.ts +26 -0
  199. package/src/domain/vaults/vault-service.ts +1316 -0
  200. package/src/domain/voice-input-billing.ts +330 -0
  201. package/src/domain/web-search-billing.ts +169 -0
  202. package/src/domain/workspace-credits.ts +13 -0
  203. package/src/editable-artifact-live/application.ts +8 -1
  204. package/src/editable-artifact-live/server.ts +154 -6
  205. package/src/editable-artifact-live/ticket.ts +86 -1
  206. package/src/editable-artifact-live/types.ts +10 -0
  207. package/src/goal-admission.ts +220 -0
  208. package/src/host-session-usage-limit.ts +25 -0
  209. package/src/index.ts +75 -11
  210. package/src/managed-session.ts +137 -6
  211. package/src/model-call.ts +79 -0
  212. package/src/model-catalog.ts +345 -91
  213. package/src/model-provider-credentials.ts +394 -0
  214. package/src/product-usage-metrics.ts +101 -0
  215. package/src/rigs/index.ts +23 -111
  216. package/src/sandbox/fleet.ts +253 -28
  217. package/src/sandbox/routing.ts +204 -43
  218. package/src/sandbox/runtime-settings.ts +159 -85
  219. package/src/session-authorization.ts +172 -23
  220. package/src/session-usage-limit-metrics.ts +95 -0
  221. package/src/session-usage-limits.ts +415 -0
  222. package/src/site-agent-clamp.ts +226 -0
  223. package/src/site-session-origin.ts +84 -5
  224. package/src/transcription.ts +123 -4
  225. package/src/turn-surface.ts +47 -0
  226. package/src/user-presence.ts +134 -0
  227. package/src/workflow-wake-contract.ts +14 -1
  228. package/dist/application/host-mcp-owner.d.ts +0 -6
  229. package/dist/application/host-mcp-resolvers.d.ts +0 -13
  230. package/dist/chunk-5WZYFL45.js +0 -266
  231. package/dist/chunk-5WZYFL45.js.map +0 -1
  232. package/dist/chunk-H7X52RI2.js.map +0 -1
  233. package/dist/chunk-OF65T3PM.js.map +0 -1
  234. package/dist/chunk-VCZFFEPB.js.map +0 -1
  235. package/dist/chunk-ZYCNLYGH.js.map +0 -1
  236. package/dist/domain/connection-authority.d.ts +0 -97
  237. package/dist/domain/connection-authority.js +0 -169
  238. package/dist/domain/connection-authority.js.map +0 -1
  239. package/dist/domain/environments.d.ts +0 -33
  240. package/dist/domain/host-mcp-authority-source-admission.d.ts +0 -10
  241. package/dist/domain/host-mcp-task-admission.d.ts +0 -18
  242. package/dist/domain/packs.d.ts +0 -59
  243. package/dist/domain/product-integration-pack.d.ts +0 -44
  244. package/dist/domain/product-integration-skill.gen.d.ts +0 -5
  245. package/dist/remote-mcp-credentials.d.ts +0 -23
  246. package/dist/remote-mcp-credentials.js +0 -11
  247. package/dist/remote-mcp-credentials.js.map +0 -1
  248. package/src/application/host-mcp-owner.ts +0 -41
  249. package/src/application/host-mcp-resolvers.ts +0 -84
  250. package/src/domain/connection-authority.ts +0 -329
  251. package/src/domain/environments.ts +0 -120
  252. package/src/domain/host-mcp-authority-source-admission.ts +0 -25
  253. package/src/domain/host-mcp-task-admission.ts +0 -121
  254. package/src/domain/packs.ts +0 -699
  255. package/src/domain/product-integration-pack.ts +0 -42
  256. package/src/domain/product-integration-skill.gen.ts +0 -52
  257. package/src/remote-mcp-credentials.ts +0 -361
package/src/rigs/index.ts CHANGED
@@ -11,7 +11,6 @@ import type {
11
11
  ProposeRigChangeRequest,
12
12
  Rig,
13
13
  RigChange,
14
- ResourceAuthorityScope,
15
14
  RigVersion,
16
15
  UpdateRigRequest,
17
16
  } from "@opengeni/contracts";
@@ -26,7 +25,6 @@ import {
26
25
  getRigByName,
27
26
  getRigChange,
28
27
  getRigVersion,
29
- getVariableSet,
30
28
  listRigChanges,
31
29
  listRigVersions,
32
30
  recordAuditEvent,
@@ -37,8 +35,7 @@ import {
37
35
  type Database,
38
36
  } from "@opengeni/db";
39
37
  import { HTTPException } from "hono/http-exception";
40
- import { boundedParallelMap } from "@opengeni/runtime/mcp-network";
41
- import { requirePermission } from "../access";
38
+ import { variableSetsRemovedError } from "../domain/encryption-key";
42
39
  import { rigProviderImagesFromVerification } from "./provider-images";
43
40
 
44
41
  export * from "./provider-images";
@@ -46,34 +43,9 @@ export * from "./provider-images";
46
43
  export const MAX_RIGS_PER_WORKSPACE = 50;
47
44
  export const MAX_CHECKS_PER_RIG = 100;
48
45
  export const MAX_CREDENTIAL_HOOKS_PER_RIG = 50;
49
- export const MAX_DEFAULT_VARIABLE_SETS_PER_RIG = 25;
50
- export const RIG_DEFAULT_VARIABLE_SET_LOAD_CONCURRENCY = 4;
51
-
52
- type VariableSetEnvironment = { values: Record<string, string> } | null;
53
-
54
- /** Load complete rig defaults concurrently while preserving listed precedence. */
55
- export async function loadRigDefaultVariableSetEnvironment(
56
- variableSetIds: readonly string[],
57
- load: (variableSetId: string) => Promise<VariableSetEnvironment>,
58
- ): Promise<Record<string, string>> {
59
- const variableSets = await boundedParallelMap(
60
- variableSetIds,
61
- RIG_DEFAULT_VARIABLE_SET_LOAD_CONCURRENCY,
62
- load,
63
- );
64
- const values: Record<string, string> = {};
65
- for (const variableSet of variableSets) {
66
- Object.assign(values, variableSet?.values ?? {});
67
- }
68
- return values;
69
- }
70
-
71
- /** Rig defaults layer below the session's explicitly selected variable set. */
72
- export function mergeRigDefaultVariableSetEnvironment(
73
- rigDefaultValues: Record<string, string>,
74
- sessionValues: Record<string, string>,
75
- ): Record<string, string> {
76
- return { ...rigDefaultValues, ...sessionValues };
46
+ /** Rig default Variable Sets were removed with Variable Sets (RM-1). */
47
+ function assertNoDefaultVariableSets(ids: ReadonlyArray<string> | null | undefined): void {
48
+ if (ids?.length) throw variableSetsRemovedError("defaultVariableSetIds");
77
49
  }
78
50
 
79
51
  export type RigServices = {
@@ -128,7 +100,7 @@ export async function requireRigForApi(
128
100
  ): Promise<Rig> {
129
101
  const rig = await getRig(db, grant, rigId);
130
102
  if (!rig) {
131
- throw new HTTPException(404, { message: "rig not found" });
103
+ throw new HTTPException(404, { message: "sandbox environment not found" });
132
104
  }
133
105
  return rig;
134
106
  }
@@ -143,7 +115,7 @@ export async function requireRigChangeForApi(
143
115
  // RLS + the workspace clause make a cross-workspace id indistinguishable from
144
116
  // missing; the rigId clause keeps the change addressable only under its rig.
145
117
  if (!change || change.rigId !== rigId) {
146
- throw new HTTPException(404, { message: "rig change not found" });
118
+ throw new HTTPException(404, { message: "sandbox environment change not found" });
147
119
  }
148
120
  return change;
149
121
  }
@@ -151,7 +123,7 @@ export async function requireRigChangeForApi(
151
123
  function trimmedRigName(name: string): string {
152
124
  const trimmed = name.trim();
153
125
  if (!trimmed) {
154
- throw new HTTPException(422, { message: "rig name is required" });
126
+ throw new HTTPException(422, { message: "sandbox environment name is required" });
155
127
  }
156
128
  return trimmed;
157
129
  }
@@ -165,58 +137,13 @@ function assertUniqueCheckNames(checks: ReadonlyArray<{ name: string }> | undefi
165
137
  for (const check of checks) {
166
138
  if (seen.has(check.name)) {
167
139
  throw new HTTPException(422, {
168
- message: `duplicate rig check name: ${check.name}`,
140
+ message: `duplicate sandbox environment check name: ${check.name}`,
169
141
  });
170
142
  }
171
143
  seen.add(check.name);
172
144
  }
173
145
  }
174
146
 
175
- // Every referenced default variable set must exist in the workspace. RLS makes a
176
- // cross-workspace id indistinguishable from a missing one, so both map to 422.
177
- async function assertVariableSetsExist(
178
- db: Database,
179
- access: AccessGrant,
180
- rigScope: ResourceAuthorityScope,
181
- ids: ReadonlyArray<string> | undefined,
182
- ): Promise<void> {
183
- if (ids === undefined) {
184
- return;
185
- }
186
- requirePermission(access, "variable-sets:attach");
187
- if (ids.length === 0) {
188
- return;
189
- }
190
- requirePermission(access, "variable-sets:use");
191
- const unique = [...new Set(ids)];
192
- for (const id of unique) {
193
- const variableSet = await getVariableSet(db, access, id);
194
- if (!variableSet) {
195
- throw new HTTPException(422, {
196
- message: `unknown defaultVariableSetId: ${id}`,
197
- });
198
- }
199
- if (!variableSetScopeAllowedForRig(rigScope, variableSet.scope)) {
200
- throw new HTTPException(422, {
201
- message: `${rigScope}-scoped rigs cannot use ${variableSet.scope}-scoped variable sets`,
202
- });
203
- }
204
- }
205
- }
206
-
207
- /** A resource may depend only on Variable Sets whose audience is no narrower
208
- * than its own. User-owned rigs may use anything visible to their owner. */
209
- export function variableSetScopeAllowedForRig(
210
- rigScope: ResourceAuthorityScope,
211
- variableSetScope: ResourceAuthorityScope,
212
- ): boolean {
213
- return (
214
- rigScope === "user" ||
215
- variableSetScope === "organization" ||
216
- (rigScope === "workspace" && variableSetScope === "workspace")
217
- );
218
- }
219
-
220
147
  export async function createRigForApi(
221
148
  deps: RigServices,
222
149
  grant: AccessGrant,
@@ -225,20 +152,15 @@ export async function createRigForApi(
225
152
  ): Promise<Rig> {
226
153
  const name = trimmedRigName(payload.name);
227
154
  assertUniqueCheckNames(payload.checks);
228
- await assertVariableSetsExist(
229
- deps.db,
230
- grant,
231
- payload.scope,
232
- payload.defaultVariableSetIds.length > 0 ? payload.defaultVariableSetIds : undefined,
233
- );
155
+ assertNoDefaultVariableSets(payload.defaultVariableSetIds);
234
156
  if ((await countRigs(deps.db, grant, payload.scope)) >= MAX_RIGS_PER_WORKSPACE) {
235
157
  throw new HTTPException(422, {
236
- message: `a workspace supports at most ${MAX_RIGS_PER_WORKSPACE} rigs`,
158
+ message: `a workspace supports at most ${MAX_RIGS_PER_WORKSPACE} sandbox environments`,
237
159
  });
238
160
  }
239
161
  if (await getRigByName(deps.db, grant, name, payload.scope)) {
240
162
  throw new HTTPException(409, {
241
- message: `rig name is already in use: ${name}`,
163
+ message: `sandbox environment name is already in use: ${name}`,
242
164
  });
243
165
  }
244
166
  const createdBy = rigActorForGrant(grant);
@@ -281,7 +203,7 @@ export async function updateRigForApi(
281
203
  const existing = await getRigByName(deps.db, grant, name, rig.scope);
282
204
  if (existing && existing.id !== rig.id) {
283
205
  throw new HTTPException(409, {
284
- message: `rig name is already in use: ${name}`,
206
+ message: `sandbox environment name is already in use: ${name}`,
285
207
  });
286
208
  }
287
209
  }
@@ -339,17 +261,12 @@ export async function proposeRigChangeForApi(
339
261
  const workspaceId = rig.workspaceId;
340
262
  if (!rig.activeVersion) {
341
263
  throw new HTTPException(422, {
342
- message: "rig has no active version to base a change on",
264
+ message: "sandbox environment has no active version to base a change on",
343
265
  });
344
266
  }
345
267
  if (request.kind === "definition_edit") {
346
268
  assertUniqueCheckNames(request.payload.checks);
347
- await assertVariableSetsExist(
348
- deps.db,
349
- grant,
350
- rig.scope,
351
- request.payload.defaultVariableSetIds ?? undefined,
352
- );
269
+ assertNoDefaultVariableSets(request.payload.defaultVariableSetIds);
353
270
  }
354
271
  const change = await createRigChange(deps.db, {
355
272
  accountId: grant.accountId,
@@ -412,7 +329,7 @@ async function promoteChangeWithActiveCas(
412
329
  } catch (error) {
413
330
  if (error instanceof RigActiveVersionChangedError) {
414
331
  throw new HTTPException(409, {
415
- message: `rig moved since this change was verified (base ${error.expectedVersionId}, now ${error.actualVersionId ?? "none"}); re-verify before promoting`,
332
+ message: `sandbox environment moved since this change was verified (base ${error.expectedVersionId}, now ${error.actualVersionId ?? "none"}); re-verify before promoting`,
416
333
  });
417
334
  }
418
335
  if (error instanceof RigChangeTransitionError) {
@@ -435,15 +352,15 @@ export async function promoteSetupAppendChange(
435
352
  }
436
353
  if (change.status !== "proposed" && change.status !== "verifying") {
437
354
  throw new HTTPException(409, {
438
- message: `rig change is ${change.status}; cannot promote`,
355
+ message: `sandbox environment change is ${change.status}; cannot promote`,
439
356
  });
440
357
  }
441
358
  if (!change.baseVersionId) {
442
- throw new HTTPException(422, { message: "rig change has no base version" });
359
+ throw new HTTPException(422, { message: "sandbox environment change has no base version" });
443
360
  }
444
361
  const base = await getRigVersion(deps.db, rig.workspaceId, rig.id, change.baseVersionId);
445
362
  if (!base) {
446
- throw new HTTPException(404, { message: "base rig version not found" });
363
+ throw new HTTPException(404, { message: "base sandbox environment version not found" });
447
364
  }
448
365
  const payload = change.payload as { command?: unknown; note?: unknown };
449
366
  if (typeof payload.command !== "string" || !payload.command.trim()) {
@@ -510,7 +427,7 @@ export async function promoteVerifiedDefinitionEditChangeForApi(
510
427
  }
511
428
  if (change.status !== "proposed") {
512
429
  throw new HTTPException(409, {
513
- message: `rig change is ${change.status}; cannot promote`,
430
+ message: `sandbox environment change is ${change.status}; cannot promote`,
514
431
  });
515
432
  }
516
433
  if (change.verification?.passed !== true) {
@@ -519,11 +436,11 @@ export async function promoteVerifiedDefinitionEditChangeForApi(
519
436
  });
520
437
  }
521
438
  if (!change.baseVersionId) {
522
- throw new HTTPException(422, { message: "rig change has no base version" });
439
+ throw new HTTPException(422, { message: "sandbox environment change has no base version" });
523
440
  }
524
441
  const base = await getRigVersion(deps.db, rig.workspaceId, rig.id, change.baseVersionId);
525
442
  if (!base) {
526
- throw new HTTPException(404, { message: "base rig version not found" });
443
+ throw new HTTPException(404, { message: "base sandbox environment version not found" });
527
444
  }
528
445
  const payload = change.payload as {
529
446
  setupScript?: unknown;
@@ -590,15 +507,10 @@ export async function createRigVersionForApi(
590
507
  payload: RigDefinitionEditPayload,
591
508
  ): Promise<RigVersion> {
592
509
  if (!rig.activeVersion) {
593
- throw new HTTPException(422, { message: "rig has no active version" });
510
+ throw new HTTPException(422, { message: "sandbox environment has no active version" });
594
511
  }
595
512
  assertUniqueCheckNames(payload.checks);
596
- await assertVariableSetsExist(
597
- deps.db,
598
- grant,
599
- rig.scope,
600
- payload.defaultVariableSetIds ?? undefined,
601
- );
513
+ assertNoDefaultVariableSets(payload.defaultVariableSetIds);
602
514
  const base = rig.activeVersion;
603
515
  const version = await createRigVersion(
604
516
  deps.db,