@alienplatform/sdk 3.3.20 → 3.3.22

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.
package/dist/dist.js CHANGED
@@ -6714,8 +6714,8 @@ const SandboxHeartbeatStatusSchema = object({
6714
6714
  * @description AWS: the image a sandbox runs from, and the lifecycle state AWS reports for it.
6715
6715
  */
6716
6716
  const AwsMicrovmSandboxHeartbeatDataSchema = object({
6717
- "imageIdentifier": string().describe("Image the sessions belong to."),
6718
- "imageState": string().describe("The image's own lifecycle state, which is where AWS surfaces base-image deprecation.\n\nNo session count sits beside it: counting means `lambda:ListMicrovms`, which authorizes\nagainst no resource type and so cannot be granted without an account-wide reach the\npermission sets refuse. A field only an over-broad grant could fill is a field whose\nimplementer ships AccessDenied into a customer's account.").nullish(),
6717
+ "imageIdentifier": string().describe("Image the sandboxes belong to."),
6718
+ "imageState": string().describe("The image's own lifecycle state, which is where AWS surfaces base-image deprecation.\n\nNo sandbox count sits beside it: counting means `lambda:ListMicrovms`, which authorizes\nagainst no resource type and so cannot be granted without an account-wide reach the\npermission sets refuse. A field only an over-broad grant could fill is a field whose\nimplementer ships AccessDenied into a customer's account.").nullish(),
6719
6719
  get "status"() {
6720
6720
  return SandboxHeartbeatStatusSchema;
6721
6721
  }
@@ -6988,9 +6988,9 @@ object({
6988
6988
  "egressConnectorArns": optional(array(string()).describe("Egress network connectors. Deleting one while MicroVMs still reference it breaks their\nnetworking, so teardown needs them named rather than rediscovered.")),
6989
6989
  "imageArn": string().describe("MicroVM image ARN. Absent until a runtime-provisioned image has been built.").nullish(),
6990
6990
  "imageIdentifier": string().describe("MicroVM image identifier. Absent until a runtime-provisioned image has been built.").nullish(),
6991
- "imageVersion": string().describe("Image version the sessions are scoped to. Re-imported on every image roll, and absent\nuntil a runtime-provisioned image has been built.").nullish(),
6991
+ "imageVersion": string().describe("Image version the sandboxes are scoped to. Re-imported on every image roll, and absent\nuntil a runtime-provisioned image has been built.").nullish(),
6992
6992
  "previewPorts": optional(array(int().min(0)).describe("Ports a preview capability may be minted for; empty means preview is not offered."))
6993
- }).describe("AWS Sandbox ImportData.\n\nCarries the sandbox's parent from the setup emitter to the runtime controller. The image\n**version** is not decoration: `RunMicrovm` has no `tags`, so image plus version is the only\nsession identity there is, and a controller holding a stale version would enumerate the wrong\nset and orphan every session started on the previous one.\n\nTwo shapes arrive here, and which fields are present says which. A Frozen sandbox is built by\nstack creation and names its image; a Live one is built by the controller after the deployment\nregisters, so it names the build role and bundle instead, leaving the image fields empty.");
6993
+ }).describe("AWS Sandbox ImportData.\n\nCarries the sandbox's parent from the setup emitter to the runtime controller. The image\n**version** is not decoration: `RunMicrovm` has no `tags`, so image plus version is the only\nsandbox identity there is, and a controller holding a stale version would enumerate the wrong\nset and orphan every sandbox started on the previous one.\n\nTwo shapes arrive here, and which fields are present says which. A Frozen sandbox is built by\nstack creation and names its image; a Live one is built by the controller after the deployment\nregisters, so it names the build role and bundle instead, leaving the image fields empty.");
6994
6994
  object({
6995
6995
  "roleArn": string().describe("IAM role ARN."),
6996
6996
  "roleName": string().describe("IAM role name."),
@@ -7589,7 +7589,7 @@ const AzureResourceProviderActivationHeartbeatDataSchema = object({
7589
7589
  * Do not edit manually.
7590
7590
  */
7591
7591
  /**
7592
- * @description Azure: the sandbox group\'s ARM state. The data plane has no list operation, so a session count\nis not available here.
7592
+ * @description Azure: the sandbox group\'s ARM state. The data plane has no list operation, so a sandbox count\nis not available here.
7593
7593
  */
7594
7594
  const AzureSandboxGroupHeartbeatDataSchema = object({
7595
7595
  "provisioningState": string().nullish(),
@@ -7597,7 +7597,7 @@ const AzureSandboxGroupHeartbeatDataSchema = object({
7597
7597
  get "status"() {
7598
7598
  return SandboxHeartbeatStatusSchema;
7599
7599
  }
7600
- }).describe("Azure: the sandbox group's ARM state. The data plane has no list operation, so a session count\nis not available here.");
7600
+ }).describe("Azure: the sandbox group's ARM state. The data plane has no list operation, so a sandbox count\nis not available here.");
7601
7601
  object({
7602
7602
  "region": string().describe("Region the group lives in; selects the ADC endpoint."),
7603
7603
  "resourceGroup": string().describe("Resource group containing the sandbox group."),
@@ -7613,9 +7613,9 @@ object({
7613
7613
  }).describe("Azure ServiceAccount ImportData — User-Assigned Managed Identity\n(UAMI) plus optional Federated Identity Credentials trusting Alien's\nOIDC issuer.");
7614
7614
  object({
7615
7615
  "providerNamespace": string().describe("Resource provider namespace (e.g. `Microsoft.App`)."),
7616
- "registered": boolean().describe("True once the provider is reported `Registered`."),
7616
+ "registered": boolean().describe("Whether setup established the registration. False from a Terraform package: it registers\nnothing, and the runtime reads the real state on its first refresh."),
7617
7617
  "subscriptionId": string().describe("Subscription ID the provider was registered on.")
7618
- }).describe("Azure ServiceActivation ImportData — registers an Azure resource\nprovider on the customer's subscription.\n\nAdded by the `AzureServiceActivationMutation` preflight when the\nstack contains resources that depend on a specific Azure RP\n(Microsoft.App, Microsoft.Storage, Microsoft.KeyVault, …).");
7618
+ }).describe("Azure ServiceActivation ImportData — names an Azure resource provider the\nsubscription must have registered.\n\nAdded by the `AzureServiceActivationMutation` preflight when the\nstack contains resources that depend on a specific Azure RP\n(Microsoft.App, Microsoft.Storage, Microsoft.KeyVault, …).");
7619
7619
  /**
7620
7620
  * Generated by Kubb (https://kubb.dev/).
7621
7621
  * Do not edit manually.
@@ -9381,20 +9381,21 @@ union([
9381
9381
  "updatedAt": datetime().describe("Timestamp when the state changed")
9382
9382
  })
9383
9383
  ]).describe("Represents a change to an event");
9384
+ object({ "engineId": string().describe("The engine's resource name, or the bare id it ends with.") }).describe("GCP Agent Platform reasoning-engine ImportData.\n\nEmitted only for a Frozen engine, which the setup stack creates. Vertex assigns the id, so it\nis read off the created resource rather than derived: the controller and the template beneath\nit address the engine by exactly this segment.");
9384
9385
  /**
9385
9386
  * Generated by Kubb (https://kubb.dev/).
9386
9387
  * Do not edit manually.
9387
9388
  */
9388
9389
  /**
9389
- * @description GCP: the Agent Platform template sessions are cut from, and the engine it hangs under.\n\nNo session count: that needs `aiplatform.sandboxEnvironments.list`, which only the management\npermission set holds. No template state either — emission is gated on reading it `ACTIVE`,\nwhich is what `status` already says.
9390
+ * @description GCP: the Agent Platform template sandboxes are cut from, and the engine it hangs under.\n\nNo sandbox count: that needs `aiplatform.sandboxEnvironments.list`, which only the management\npermission set holds. No template state either — emission is gated on reading it `ACTIVE`,\nwhich is what `status` already says.
9390
9391
  */
9391
9392
  const GcpAgentPlatformSandboxHeartbeatDataSchema = object({
9392
9393
  "engine": string().describe("Reasoning engine the template hangs under, without which the template id names nothing."),
9393
9394
  get "status"() {
9394
9395
  return SandboxHeartbeatStatusSchema;
9395
9396
  },
9396
- "templateId": string().describe("The template sessions are currently cut from.")
9397
- }).describe("GCP: the Agent Platform template sessions are cut from, and the engine it hangs under.\n\nNo session count: that needs `aiplatform.sandboxEnvironments.list`, which only the management\npermission set holds. No template state either — emission is gated on reading it `ACTIVE`,\nwhich is what `status` already says.");
9397
+ "templateId": string().describe("The template sandboxes are currently cut from.")
9398
+ }).describe("GCP: the Agent Platform template sandboxes are cut from, and the engine it hangs under.\n\nNo sandbox count: that needs `aiplatform.sandboxEnvironments.list`, which only the management\npermission set holds. No template state either — emission is gated on reading it `ACTIVE`,\nwhich is what `status` already says.");
9398
9399
  object({
9399
9400
  "projectId": string().describe("Project ID hosting the registry."),
9400
9401
  "pullServiceAccountEmail": string().describe("Service account email with pull-only access."),
@@ -9648,6 +9649,7 @@ object({
9648
9649
  "serviceAccountEmail": string().describe("Service account email the manager impersonates."),
9649
9650
  "serviceAccountUniqueId": string().describe("Stable unique id Google assigns to the service account.")
9650
9651
  }).describe("GCP RemoteStackManagement ImportData — cross-project service account\nthe manager impersonates.");
9652
+ object({ "region": string().describe("Region the setup stack applied in; selects the regional Agent Platform endpoint.") }).describe("GCP Agent Platform sandbox ImportData.\n\nThe sandbox is the environment template, which is release-owned under either lifecycle: setup\ncreates no template, so this carries only the region the stack applied in. The engine registers\nits own id, and the template controller reads it from that dependency.");
9651
9653
  /**
9652
9654
  * Generated by Kubb (https://kubb.dev/).
9653
9655
  * Do not edit manually.
@@ -10582,6 +10584,36 @@ object({
10582
10584
  * Do not edit manually.
10583
10585
  */
10584
10586
  /**
10587
+ * @description One bundle the Operator needs to download to reach `targetBundleHash`.\nThe manager mints a short-lived presigned GET URL per bundle — the\nOperator never holds real cloud storage credentials, mirroring the OCI\nregistry proxy\'s credential-injection pattern.
10588
+ */
10589
+ const OperationsBundleDownloadSchema = object({
10590
+ "plugin": string().describe("Plugin name this bundle provides."),
10591
+ "pluginVersion": string().describe("Plugin version this bundle provides."),
10592
+ "url": string().describe("Presigned URL to GET the bundle ZIP from. Short-lived.")
10593
+ }).describe("One bundle the Operator needs to download to reach `targetBundleHash`.\nThe manager mints a short-lived presigned GET URL per bundle — the\nOperator never holds real cloud storage credentials, mirroring the OCI\nregistry proxy's credential-injection pattern.");
10594
+ /**
10595
+ * Generated by Kubb (https://kubb.dev/).
10596
+ * Do not edit manually.
10597
+ */
10598
+ /**
10599
+ * @description A single operation the Operator currently has loaded. Opaque identifiers\nonly — no tier, description, or other plugin business logic crosses into\nthis public crate.
10600
+ */
10601
+ const ReportedOperationSchema = object({
10602
+ "name": string().describe("Name of the operation within the plugin."),
10603
+ "plugin": string().describe("Name of the plugin that owns this operation."),
10604
+ "pluginVersion": string().describe("Version of the plugin that owns this operation.")
10605
+ }).describe("A single operation the Operator currently has loaded. Opaque identifiers\nonly — no tier, description, or other plugin business logic crosses into\nthis public crate.");
10606
+ object({
10607
+ "loadedBundleHash": string().describe("Hash of the enabled-plugin bundle set the Operator currently has\nloaded. Compared against the platform's target hash to detect drift.").nullish(),
10608
+ get "operations"() {
10609
+ return array(ReportedOperationSchema.describe("A single operation the Operator currently has loaded. Opaque identifiers\nonly — no tier, description, or other plugin business logic crosses into\nthis public crate.")).describe("Operations currently loaded and executable by the Operator.").optional();
10610
+ }
10611
+ }).describe("Report-only summary of the operations the Operator has loaded, used to\nconfirm a bundle sync actually took effect.");
10612
+ /**
10613
+ * Generated by Kubb (https://kubb.dev/).
10614
+ * Do not edit manually.
10615
+ */
10616
+ /**
10585
10617
  * @description Combined permissions configuration that contains both profiles and management
10586
10618
  */
10587
10619
  const PermissionsConfigSchema = object({
@@ -10719,15 +10751,15 @@ const ResourceEntrySchema = object({
10719
10751
  * Do not edit manually.
10720
10752
  */
10721
10753
  /**
10722
- * @description Content-free telemetry about a sandbox\'s sessions.\n\nNever anything from inside a session. A controller reaches only the cloud\'s management APIs,\nand the whole point of the resource is that the control plane cannot see what runs in it.
10754
+ * @description Content-free telemetry about what a sandbox resource is running.\n\nNever anything from inside a sandbox. A controller reaches only the cloud\'s management APIs,\nand the whole point of the resource is that the control plane cannot see what runs in it.
10723
10755
  */
10724
10756
  const SandboxHeartbeatDataSchema = union([
10725
10757
  lazy(() => AwsMicrovmSandboxHeartbeatDataSchema).and(object({ "backend": _enum(["awsMicrovm"]) })).describe("AWS: the image a sandbox runs from, and the lifecycle state AWS reports for it."),
10726
- lazy(() => AzureSandboxGroupHeartbeatDataSchema).and(object({ "backend": _enum(["azureSandboxGroup"]) })).describe("Azure: the sandbox group's ARM state. The data plane has no list operation, so a session count\nis not available here."),
10727
- lazy(() => GcpAgentPlatformSandboxHeartbeatDataSchema).and(object({ "backend": _enum(["gcpAgentPlatform"]) })).describe("GCP: the Agent Platform template sessions are cut from, and the engine it hangs under.\n\nNo session count: that needs `aiplatform.sandboxEnvironments.list`, which only the management\npermission set holds. No template state either — emission is gated on reading it `ACTIVE`,\nwhich is what `status` already says."),
10758
+ lazy(() => AzureSandboxGroupHeartbeatDataSchema).and(object({ "backend": _enum(["azureSandboxGroup"]) })).describe("Azure: the sandbox group's ARM state. The data plane has no list operation, so a sandbox count\nis not available here."),
10759
+ lazy(() => GcpAgentPlatformSandboxHeartbeatDataSchema).and(object({ "backend": _enum(["gcpAgentPlatform"]) })).describe("GCP: the Agent Platform template sandboxes are cut from, and the engine it hangs under.\n\nNo sandbox count: that needs `aiplatform.sandboxEnvironments.list`, which only the management\npermission set holds. No template state either — emission is gated on reading it `ACTIVE`,\nwhich is what `status` already says."),
10728
10760
  lazy(() => KubernetesSandboxHeartbeatDataSchema).and(object({ "backend": _enum(["kubernetesPods"]) })).describe("Kubernetes: pods carrying the sandbox label, in the deployment's namespace."),
10729
10761
  lazy(() => LocalSandboxHeartbeatDataSchema).and(object({ "backend": _enum(["local"]) })).describe("Local: containers Docker still holds for this sandbox.")
10730
- ]).describe("Content-free telemetry about a sandbox's sessions.\n\nNever anything from inside a session. A controller reaches only the cloud's management APIs,\nand the whole point of the resource is that the control plane cannot see what runs in it.");
10762
+ ]).describe("Content-free telemetry about what a sandbox resource is running.\n\nNever anything from inside a sandbox. A controller reaches only the cloud's management APIs,\nand the whole point of the resource is that the control plane cannot see what runs in it.");
10731
10763
  /**
10732
10764
  * Generated by Kubb (https://kubb.dev/).
10733
10765
  * Do not edit manually.
@@ -10914,7 +10946,7 @@ const ResourceHeartbeatDataSchema = union([
10914
10946
  }),
10915
10947
  object({
10916
10948
  get "data"() {
10917
- return SandboxHeartbeatDataSchema.describe("Content-free telemetry about a sandbox's sessions.\n\nNever anything from inside a session. A controller reaches only the cloud's management APIs,\nand the whole point of the resource is that the control plane cannot see what runs in it.");
10949
+ return SandboxHeartbeatDataSchema.describe("Content-free telemetry about what a sandbox resource is running.\n\nNever anything from inside a sandbox. A controller reaches only the cloud's management APIs,\nand the whole point of the resource is that the control plane cannot see what runs in it.");
10918
10950
  },
10919
10951
  "resourceType": _enum(["sandbox"])
10920
10952
  })
@@ -10943,27 +10975,29 @@ object({
10943
10975
  "domainEgressRules": boolean().describe("Egress can be restricted to a hostname allowlist"),
10944
10976
  "egressDeny": boolean().describe("Whether a declared `deny` is actually enforced, rather than accepted and dropped"),
10945
10977
  "enforcedLimits": boolean().describe("The platform enforces the declared cpu, memory and disk ceilings"),
10946
- "files": boolean().describe("Files can be moved in and out of a session"),
10978
+ "files": boolean().describe("Files can be moved in and out of a sandbox"),
10979
+ "jobs": boolean().describe("A command can be started, polled and cancelled across separate calls, so it outlives the\none that started it. False where nothing inside the sandbox owns the process in between."),
10980
+ "pauseResume": boolean().describe("Sandbox state can be paused and resumed"),
10947
10981
  "preview": boolean().describe("An authenticated, port-scoped capability to reach a service inside the sandbox"),
10948
- "processLimit": boolean().describe("The platform can cap how many processes a session runs"),
10949
- "reconnect": boolean().describe("A later call can reach a session created by an earlier one"),
10950
- "sessionLifetime": boolean().describe("The platform terminates a session at a declared wall-clock deadline"),
10951
- "snapshot": boolean().describe("A session's full state can be captured and used to create another"),
10982
+ "processLimit": boolean().describe("The platform can cap how many processes a sandbox runs"),
10983
+ "reconnect": boolean().describe("A later call can reach a sandbox created by an earlier one"),
10984
+ "sandboxLifetime": boolean().describe("The platform terminates a sandbox at a declared wall-clock deadline"),
10985
+ "snapshot": boolean().describe("A sandbox's full state can be captured and used to create another"),
10952
10986
  "supervisorIsolation": boolean().describe("The process supervising a command is a different identity from the command.\n\nFalse where a command runs as the agent's own user: it can then read the supervisor's\nenvironment and signal it. Separate from `supervisorPidNamespace`, which is about\nvisibility rather than identity — a backend can have one without the other."),
10953
- "supervisorPidNamespace": boolean().describe("A command runs in its own PID namespace and cannot see or signal the agent's processes.\n\nOnly where an agent runs as root. Creating the namespace needs `CAP_SYS_ADMIN`, and the\nKubernetes sandbox pod drops every capability — which is also what denies `ptrace` by\nconstruction, so granting it there would remove a lock to add one."),
10954
- "suspendResume": boolean().describe("Session state can be suspended and resumed")
10987
+ "supervisorPidNamespace": boolean().describe("A command runs in its own PID namespace and cannot see or signal the agent's processes.\n\nOnly where an agent runs as root. Creating the namespace needs `CAP_SYS_ADMIN`, and the\nKubernetes sandbox pod drops every capability — which is also what denies `ptrace` by\nconstruction, so granting it there would remove a lock to add one.")
10955
10988
  }).describe("What a platform's sandbox backend can actually do.\n\nPublished so portable code can branch before calling rather than discovering a gap through\nan error. Every field here corresponds to a capability that at least one platform lacks;\ncreate, exec and terminate are the guaranteed floor and are therefore not listed.");
10956
10989
  _enum([
10957
10990
  "files",
10958
10991
  "reconnect",
10992
+ "jobs",
10959
10993
  "preview",
10960
- "suspendResume",
10994
+ "pauseResume",
10961
10995
  "snapshot",
10962
10996
  "domainEgressRules",
10963
10997
  "egressDeny",
10964
10998
  "enforcedLimits",
10965
10999
  "processLimit",
10966
- "sessionLifetime",
11000
+ "sandboxLifetime",
10967
11001
  "supervisorPidNamespace",
10968
11002
  "supervisorIsolation"
10969
11003
  ]).describe("Names a single sandbox capability, so an unsupported call can report which one it needed.");
@@ -11004,30 +11038,30 @@ const SandboxEgressSchema = union([
11004
11038
  * Do not edit manually.
11005
11039
  */
11006
11040
  /**
11007
- * @description Hard ceilings enforced on a sandbox session.\n\nThese are limits, not scheduling requests. Untrusted code does not respect a hint, so every\nfield is enforced by the platform and a platform that cannot enforce one is rejected at plan\ntime rather than silently ignoring it.
11041
+ * @description How long a sandbox may live and when it is paused.\n\nDeclaration-time ceilings, not per-request values: every sandbox created through this\ndeclaration\'s binding is held to them, whatever a caller asks for at runtime.
11042
+ */
11043
+ const SandboxLifecyclePolicySchema = object({
11044
+ "idlePauseSeconds": int().min(0).describe("Idle period after which the sandbox is paused, where the platform supports it").nullish(),
11045
+ "maxLifetimeSeconds": int().min(0).describe("Wall-clock ceiling on a single sandbox, after which the platform terminates it.\n\nOptional because not every backend has the primitive: Kubernetes has\n`activeDeadlineSeconds` and AWS `maximumDurationInSeconds`, while neither Azure nor Local\nexpose one, so declaring a ceiling there is refused at plan time rather than accepted and\nnever applied. AWS caps it at 8 hours.").nullish()
11046
+ }).describe("How long a sandbox may live and when it is paused.\n\nDeclaration-time ceilings, not per-request values: every sandbox created through this\ndeclaration's binding is held to them, whatever a caller asks for at runtime.");
11047
+ /**
11048
+ * Generated by Kubb (https://kubb.dev/).
11049
+ * Do not edit manually.
11050
+ */
11051
+ /**
11052
+ * @description Hard ceilings enforced on a sandbox.\n\nThese are limits, not scheduling requests. Untrusted code does not respect a hint, so every\nfield is enforced by the platform and a platform that cannot enforce one is rejected at plan\ntime rather than silently ignoring it.
11008
11053
  */
11009
11054
  const SandboxLimitsSchema = object({
11010
11055
  "cpu": string().describe("CPU ceiling in cores or millicores (e.g. `\"1\"`, `\"500m\"`)"),
11011
11056
  "disk": string().describe("Disk ceiling (e.g. `\"20Gi\"`)"),
11012
11057
  "maxProcesses": int().min(0).describe("Maximum number of processes, which bounds fork bombs.\n\nOptional because only a container runtime has the primitive: Kubernetes sets a pid ceiling\nper node, not per pod, and neither AWS MicroVMs nor Azure sandboxes expose one. Declaring\nit on a platform that cannot apply it is refused at plan time.").nullish(),
11013
11058
  "memory": string().describe("Memory ceiling (e.g. `\"2Gi\"`, `\"512Mi\"`)")
11014
- }).describe("Hard ceilings enforced on a sandbox session.\n\nThese are limits, not scheduling requests. Untrusted code does not respect a hint, so every\nfield is enforced by the platform and a platform that cannot enforce one is rejected at plan\ntime rather than silently ignoring it.");
11059
+ }).describe("Hard ceilings enforced on a sandbox.\n\nThese are limits, not scheduling requests. Untrusted code does not respect a hint, so every\nfield is enforced by the platform and a platform that cannot enforce one is rejected at plan\ntime rather than silently ignoring it.");
11015
11060
  object({
11016
- "endpoint": string().describe("Data-plane endpoint sessions are created through, where the platform has one").nullish(),
11061
+ "endpoint": string().describe("Data-plane endpoint sandboxes are created through, where the platform has one").nullish(),
11017
11062
  "identifier": string().describe("Platform-specific identifier for the parent (image ARN, sandbox group id, namespace)").nullish(),
11018
- "parentName": string().describe("Name of the durable parent that sessions are created inside")
11063
+ "parentName": string().describe("Name of the durable parent that sandboxes are created inside")
11019
11064
  }).describe("Outputs generated by a successfully provisioned Sandbox parent.");
11020
- /**
11021
- * Generated by Kubb (https://kubb.dev/).
11022
- * Do not edit manually.
11023
- */
11024
- /**
11025
- * @description How long a session may live and when it is suspended.
11026
- */
11027
- const SandboxSessionPolicySchema = object({
11028
- "idleSuspendSeconds": int().min(0).describe("Idle period after which the session is suspended, where the platform supports it").nullish(),
11029
- "maxLifetimeSeconds": int().min(0).describe("Wall-clock ceiling on a single session, after which the platform terminates it.\n\nOptional because not every backend has the primitive: Kubernetes has\n`activeDeadlineSeconds` and AWS `maximumDurationInSeconds`, while neither Azure nor Local\nexpose one, so declaring a ceiling there is refused at plan time rather than accepted and\nnever applied. AWS caps it at 8 hours.").nullish()
11030
- }).describe("How long a session may live and when it is suspended.");
11031
11065
  object({
11032
11066
  get "code"() {
11033
11067
  return SandboxCodeSchema.describe("Specifies where the sandbox's root filesystem comes from.");
@@ -11036,14 +11070,14 @@ object({
11036
11070
  return SandboxEgressSchema.describe("Outbound network policy for a sandbox.");
11037
11071
  },
11038
11072
  "id": string().describe("Identifier for the sandbox. Must contain only alphanumeric characters, hyphens, and\nunderscores ([A-Za-z0-9-_]). Maximum 64 characters."),
11073
+ get "lifecycle"() {
11074
+ return SandboxLifecyclePolicySchema.describe("How long a sandbox may live and when it is paused.\n\nDeclaration-time ceilings, not per-request values: every sandbox created through this\ndeclaration's binding is held to them, whatever a caller asks for at runtime.");
11075
+ },
11039
11076
  get "limits"() {
11040
11077
  return union([SandboxLimitsSchema, _null()]).optional();
11041
11078
  },
11042
- "previewPorts": optional(array(int().min(0)).describe("Ports eligible for a preview capability. An application reaches its sandbox through the\nprovider, so it cannot widen its own ingress at runtime; a holder of a remote binding's\ncredentials is bounded by no port condition, which is why a remote sandbox declares none.")),
11043
- get "session"() {
11044
- return SandboxSessionPolicySchema.describe("How long a session may live and when it is suspended.");
11045
- }
11046
- }).describe("An isolated environment for running untrusted code, created per session at runtime.");
11079
+ "previewPorts": optional(array(int().min(0)).describe("Ports eligible for a preview capability. An application reaches its sandbox through the\nprovider, so it cannot widen its own ingress at runtime; a holder of a remote binding's\ncredentials is bounded by no port condition, which is why a remote sandbox declares none."))
11080
+ }).describe("An isolated environment for running untrusted code, created at runtime.");
11047
11081
  object({ "timestamp": datetime().describe("The timestamp when the event was scheduled or triggered.") }).describe("Represents a scheduled event trigger, typically from a cron job or timer.\n\nThis struct aims to provide a common representation for scheduled events\nacross different providers like AWS CloudWatch Events, Google Cloud Scheduler,\nand Azure Timer Triggers.");
11048
11082
  object({
11049
11083
  "identity": string().describe("The platform-specific identifier of the service account\n- AWS: Role ARN\n- GCP: Service Account email\n- Azure: Managed Identity client ID"),
@@ -11348,6 +11382,12 @@ object({
11348
11382
  "versioning": optional(boolean().describe("Enables object versioning.\nDefault: `false`"))
11349
11383
  }).describe("Represents an object storage bucket.");
11350
11384
  lazy(() => CommandResponseSchema).describe("Command response from deployment").describe("Request to submit a command response (from deployment)");
11385
+ object({
11386
+ get "bundles"() {
11387
+ return array(OperationsBundleDownloadSchema.describe("One bundle the Operator needs to download to reach `targetBundleHash`.\nThe manager mints a short-lived presigned GET URL per bundle — the\nOperator never holds real cloud storage credentials, mirroring the OCI\nregistry proxy's credential-injection pattern.")).describe("Presigned downloads for every bundle in the target set. The Operator\nfetches only the ones it doesn't already have loaded at the right\nversion; already-loaded bundles are harmless to re-download.").optional();
11388
+ },
11389
+ "hash": string().describe("Hash identifying this exact enabled-plugin set. Compare against\n`OperationsReport.loadedBundleHash` to detect drift.")
11390
+ }).describe("Target operations-bundle set for the Operator to converge its loaded\nplugin registry toward, independent of any release/config target — a\nplugin can be enabled with no release change, so this is not nested under\n`TargetDeployment`.");
11351
11391
  object({ "size": int().min(0).describe("Size of uploaded data") }).describe("Request to mark upload as complete");
11352
11392
  object({
11353
11393
  "commandId": string().describe("Command identifier"),
package/dist/index.d.ts CHANGED
@@ -28,7 +28,7 @@
28
28
  */
29
29
  export type { CronEvent, QueueMessage, QueueMessageEvent, ScheduledEvent, StandardSchema, StandardSchemaOutput, StorageEvent, StorageEventType, WorkerCommandContext, } from "./worker-runtime/registry.js";
30
30
  export { command, onCronEvent, onQueueMessage, onStorageEvent, waitUntil, } from "./worker-runtime/registry.js";
31
- export type { CommandFrame, Container, Kv, Postgres, PostgresConnection, PostgresSslMode, Queue, RunCommandOptions, Sandbox, SandboxSession, Storage, Vault, } from "@alienplatform/bindings";
31
+ export type { CommandFrame, Container, CreateSandboxOptions, JobError, JobExit, JobPoll, Kv, Postgres, PostgresConnection, PostgresSslMode, Queue, ResolvedSandbox, RunCommandOptions, Sandbox, SandboxInstance, Storage, Vault, } from "@alienplatform/bindings";
32
32
  export { container, kv, postgres, queue, sandbox, storage, vault } from "@alienplatform/bindings";
33
33
  export type { AiBinding, AiConnection, AiModel, AmbientAiBinding, ChatCompletionCreateParams, ExternalAiBinding, ResponseCreateParams, } from "@alienplatform/ai-gateway";
34
34
  export { Ai, ai, getAiConnection, isExternalAiBinding, parseAiBinding, startAiGateway, } from "@alienplatform/ai-gateway";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAOH,YAAY,EACV,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,OAAO,EACP,WAAW,EACX,cAAc,EACd,cAAc,EACd,SAAS,GACV,MAAM,8BAA8B,CAAA;AAMrC,YAAY,EACV,YAAY,EACZ,SAAS,EACT,EAAE,EACF,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,KAAK,EACL,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,OAAO,EACP,KAAK,GACN,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAMjG,YAAY,EACV,SAAS,EACT,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,EAAE,EACF,EAAE,EACF,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,cAAc,GACf,MAAM,2BAA2B,CAAA;AAMlC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAOH,YAAY,EACV,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,OAAO,EACP,WAAW,EACX,cAAc,EACd,cAAc,EACd,SAAS,GACV,MAAM,8BAA8B,CAAA;AAMrC,YAAY,EACV,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,QAAQ,EACR,OAAO,EACP,OAAO,EACP,EAAE,EACF,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,KAAK,EACL,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,eAAe,EACf,OAAO,EACP,KAAK,GACN,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAMjG,YAAY,EACV,SAAS,EACT,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,EAAE,EACF,EAAE,EACF,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,cAAc,GACf,MAAM,2BAA2B,CAAA;AAMlC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alienplatform/sdk",
3
- "version": "3.3.20",
3
+ "version": "3.3.22",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -57,9 +57,9 @@
57
57
  "nice-grpc": "^2.1.11",
58
58
  "nice-grpc-common": "^2.0.2",
59
59
  "zod": "4.5.2",
60
- "@alienplatform/ai-gateway": "^3.3.20",
61
- "@alienplatform/bindings": "^3.3.20",
62
- "@alienplatform/core": "^3.3.20"
60
+ "@alienplatform/ai-gateway": "^3.3.22",
61
+ "@alienplatform/bindings": "^3.3.22",
62
+ "@alienplatform/core": "^3.3.22"
63
63
  },
64
64
  "scripts": {
65
65
  "build": "tsdown && tsc --emitDeclarationOnly",