@tangle-network/sandbox 0.9.4-develop.20260627151756.06a2afc → 0.9.4-develop.20260627212650.d82a250

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.
@@ -1,4 +1,4 @@
1
- import { f as encodePromptForWire, l as exportTraceBundle, p as parseSSEStream, s as normalizeConnection, t as SandboxInstance } from "./sandbox-DgWaRMlI.js";
1
+ import { f as encodePromptForWire, l as exportTraceBundle, m as parseSSEStream, s as normalizeConnection, t as SandboxInstance } from "./sandbox-C4TLW3Ue.js";
2
2
  import { d as ValidationError, f as parseErrorResponse, i as NotFoundError, r as NetworkError, t as AuthError, u as TimeoutError } from "./errors-DZsfJUuc.js";
3
3
  //#region src/resources.ts
4
4
  /**
package/dist/core.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as SandboxInstance } from "./sandbox-DgWaRMlI.js";
1
+ import { t as SandboxInstance } from "./sandbox-C4TLW3Ue.js";
2
2
  import { a as PartialFailureError, c as ServerError, d as ValidationError, i as NotFoundError, l as StateError, n as CapabilityError, o as QuotaError, r as NetworkError, s as SandboxError, t as AuthError, u as TimeoutError } from "./errors-DZsfJUuc.js";
3
- import { n as SandboxClient } from "./client-B8iqCNnm.js";
3
+ import { n as SandboxClient } from "./client-vx9ze5bL.js";
4
4
  export { AuthError, CapabilityError, NetworkError, NotFoundError, PartialFailureError, QuotaError, SandboxClient as Sandbox, SandboxClient, SandboxError, SandboxInstance, ServerError, StateError, TimeoutError, ValidationError };
package/dist/index.d.ts CHANGED
@@ -606,6 +606,31 @@ declare const MANAGE_SANDBOXES_PARAMETERS: {
606
606
  };
607
607
  };
608
608
  //#endregion
609
+ //#region src/profile-file-mounts.d.ts
610
+ interface SplitInlineProfileFileMountsResult {
611
+ leanProfile: AgentProfile;
612
+ deferredFiles: AgentProfileFileMount[];
613
+ }
614
+ interface MaterializeProfileFileMountsOptions extends WriteManyOptions {
615
+ /** Hard timeout per exec fallback command. */
616
+ execTimeoutMs?: number;
617
+ /**
618
+ * Absolute sandbox paths the file API may write directly. Relative paths are
619
+ * file API eligible when safe; `~/...` and other absolute paths use exec.
620
+ */
621
+ fileApiAbsolutePrefixes?: readonly string[];
622
+ }
623
+ interface MaterializeProfileFileMountsResult {
624
+ written: number;
625
+ viaFileApi: number;
626
+ viaExec: number;
627
+ }
628
+ type ProfileFileMountBox = Pick<SandboxInstance, "exec"> & {
629
+ fs?: Pick<SandboxInstance["fs"], "supportsWriteMode" | "writeMany">;
630
+ };
631
+ declare function splitInlineProfileFileMounts(profile: AgentProfile): SplitInlineProfileFileMountsResult;
632
+ declare function materializeProfileFileMounts(box: ProfileFileMountBox, files: readonly AgentProfileFileMount[], options?: MaterializeProfileFileMountsOptions): Promise<MaterializeProfileFileMountsResult>;
633
+ //#endregion
609
634
  //#region src/resources.d.ts
610
635
  /**
611
636
  * Compute tiers, ordered smallest → largest. Defined HERE (not imported from
@@ -907,4 +932,4 @@ interface RouterEvalMatrixCaseResult {
907
932
  }
908
933
  declare function runTangleRouterEvalMatrixInSandbox(options: RunTangleRouterEvalMatrixInSandboxOptions): Promise<RunTangleRouterEvalMatrixInSandboxResult>;
909
934
  //#endregion
910
- export { type AcceleratorKind, type AccessPolicyRule, type AddUserOptions, type AgentProfile, type AgentProfileCapabilities, type AgentProfileConnection, type AgentProfileFileMount, type AgentProfileMcpServer, type AgentProfileModelHints, type AgentProfilePermissionValue, type AgentProfilePrompt, type AgentProfileResourceRef, type AgentProfileResources, type AgentProfileValidationIssue, type AgentProfileValidationResult, type AgentSubagentProfile, type AnyTokenPayload, type AttachSandboxFleetMachineOptions, AuthError, type BackendCapabilities, type BackendConfig, type BackendInfo, type BackendManager, type BackendStatus, type BackendType, type BatchEvent, type BatchOptions, type BatchResult, type BatchTask, type BatchTaskResult, type BuildControlPlaneMcpConfigOptions, type BuildProgressEvent, type BuildSandboxMcpConfigOptions, CONTROL_PLANE_MCP_SERVER_NAME, CapabilityError, type CheckpointInfo, type CheckpointOptions, type CheckpointResult, type CodeResult, type CollaborationAccess, type CollaborationBootstrapRequest, type CollaborationBootstrapResponse, CollaborationClient, type CollaborationClientConfig, type CollaborationDocumentAdapter, type CollaborationDocumentChange, type CollaborationDocumentRef, CollaborationFileBridge, type CollaborationFileBridgeOptions, type CollaborationFileEvent, type CollaborationPermissions, type CollaborationTokenPayload, type CollaborationTokenRefreshRequest, type CollaborationTokenRefreshResponse, type CollaborationTransportConfig, type CompletedTurnResult, type ConfidentialSandboxResult, type ConfidentialTeeType, type CreateConfidentialSandboxOptions, type CreateIntelligenceReportOptions, type CreateSandboxFleetOptions, type CreateSandboxFleetWithCoordinatorOptions, type CreateSandboxOptions, type CreateTeamOptions, DEFAULT_SANDBOX_SIZE, type DeleteOptions, type DirectoryPermission, type DispatchPromptOptions, type DispatchedSession, type DownloadOptions, type DownloadProgress, type DriveTurnOptions, type DriverConfig, type DriverInfo, type DriverType, type EgressManager, type EgressPolicy, type EventStreamOptions, type ExecOptions, type ExecResult, type FileInfo, type FileSystem, type FleetDispatchCancelResult, type FleetDispatchResultBuffer, type FleetDispatchResultBufferOptions, type FleetDispatchStreamOptions, type FleetExecDispatchOptions, type FleetMachineId, type FleetPromptDispatchOptions, type ForkOptions, type ForkResult, type GitAuth, type GitBranch, type GitCommit, type GitConfig, type GitDiff, type GitStatus, type GpuType, type HostAgentDriverConfig, type HostAgentRuntimeBackend, Image, type ImageBuildClient, type ImageBuildClientConfig, type ImageBuildFetchClient, type ImageBuildOptions, type ImageBuildResult, ImageBuilder, type ImageSpec, type InstalledTool, IntelligenceClient, type IntelligenceReport, type IntelligenceReportBudget, type IntelligenceReportCompareTo, type IntelligenceReportSubjectType, type IntelligenceReportWindow, type InteractiveAuthFile, InteractiveSessionHandle, type InteractiveSessionHost, type InteractiveSessionInfo, type InterruptResult, type InviteTeamMemberOptions, type IssueCollaborationTokenOptions, type ListMessagesOptions, type ListOptions, type ListSandboxFleetOptions, type ListSandboxOptions, MANAGE_SANDBOXES_PARAMETERS, MANAGE_SANDBOXES_TOOL_NAME, type ManageSandboxesInput, type ManageSandboxesTool, type ManageSandboxesToolOptions, type McpServerConfig, type MintScopedTokenOptions, type MkdirOptions, type NetworkConfig, NetworkError, type NetworkManager, type NonHostAgentDriverConfig, NotFoundError, type ParseSSEStreamOptions, type ParsedSSEEvent, PartialFailureError, type PermissionLevel, type PermissionsManager, type PreviewLinkInfo, type PreviewLinkManager, type Process, type ProcessInfo, type ProcessLogEntry, type ProcessManager, type ProcessSignal, type ProcessSpawnOptions, type ProcessStatus, type PromptOptions, type PromptResult, type ProvisionEvent, type ProvisionResult, type ProvisionStatus, type ProvisionStep, type PublicTemplateInfo, type PublicTemplateVersionInfo, type PublishPublicTemplateOptions, type PublishPublicTemplateVersionOptions, QuotaError, type ReapExpiredSandboxFleetsOptions, type ReapExpiredSandboxFleetsResult, type ReconcileSandboxFleetsOptions, type ReconcileSandboxFleetsResult, type RespondToPermissionOptions, type RouterEvalMatrixAgentProfile, type RouterEvalMatrixCaseResult, type RouterEvalMatrixHarness, type RouterEvalMatrixPayload, type RouterEvalMatrixSandboxBox, type RouterEvalMatrixSandboxClient, type RouterEvalMatrixScenario, type RouterEvalMatrixSuiteResponse, type RouterImportedRunResponse, type RouterSearchConfig, type RouterSearchConfigOptions, type RunCodeOptions, type RunTangleRouterEvalMatrixInSandboxOptions, type RunTangleRouterEvalMatrixInSandboxResult, SANDBOX_MCP_SERVER_NAME, SANDBOX_SIZE_PRESETS, SANDBOX_SIZE_PRESET_NAMES, type SSHCommandDescriptor, type SSHCredentials, SandboxClient as Sandbox, SandboxClient, type SandboxClientConfig, type SandboxConnection, type SandboxEnvironment, SandboxError, type SandboxErrorJson, type SandboxEvent, type SandboxFailureDetail, SandboxFleet, type SandboxFleetArtifact, type SandboxFleetArtifactSpec, SandboxFleetClient, type SandboxFleetCostEstimate, type SandboxFleetDispatchFailureClass, type SandboxFleetDispatchResponse, type SandboxFleetDriverCapability, type SandboxFleetDriverTimings, type SandboxFleetInfo, type SandboxFleetIntelligenceEnvelope, type SandboxFleetMachine, type SandboxFleetMachineMeteredUsage, type SandboxFleetMachineRecord, type SandboxFleetMachineSpec, type SandboxFleetManifest, type SandboxFleetManifestMachine, type SandboxFleetOperationsSummary, type SandboxFleetPolicy, type SandboxFleetToken, type SandboxFleetTraceBundle, type SandboxFleetTraceEvent, type SandboxFleetTraceExport, type SandboxFleetTraceOptions, type SandboxFleetUsage, type SandboxFleetWorkspace, type SandboxFleetWorkspaceReconcileResult, type SandboxFleetWorkspaceRestoreResult, type SandboxFleetWorkspaceSnapshotResult, type SandboxInfo, SandboxInstance, type SandboxIntelligenceEnvelope, type SandboxMcpConfig, type SandboxMcpEndpoint, type SandboxMcpServerEntry, type SandboxPermissionsConfig, type SandboxResourceUsage, type SandboxResources, SandboxSession, type SandboxSizePreset, type SandboxStatus, type SandboxTraceBundle, type SandboxTraceEvent, type SandboxTraceExport, type SandboxTraceOptions, type SandboxUser, type SaveCollaborationSnapshotRequest, type SaveCollaborationSnapshotResponse, type ScopedToken, type ScopedTokenScope, type SearchMatch, type SearchOptions, type SecretInfo, type SecretsManager, ServerError, type SessionEventStreamOptions, type SessionInfo, type SessionListOptions, type SessionMessage, type SessionStatus, type SnapshotInfo, type SnapshotOptions, type SnapshotResult, type StartInteractiveOptions, type StartupDiagnostics, type StartupOperation, StateError, type StorageConfig, type SubscriptionInfo, TangleSandboxClient, type TangleSandboxClientConfig, type TangleSearchProvider, type TaskOptions, type TaskResult, type Team, type TeamInvitation, type TeamMember, type TeeAttestationHeartbeat, type TeeAttestationHeartbeatOptions, type TeeAttestationHeartbeatSample, type TeeAttestationOptions, type TeeAttestationReport, type TeeAttestationResponse, type TeePublicKey, type TeePublicKeyResponse, TimeoutError, type TokenRefreshHandler, type ToolsConfig, type TraceExportFormat, type TraceExportResult, type TraceExportSink, type TurnDriveResult, type UpdateUserOptions, type UploadOptions, type UploadProgress, type UsageInfo, ValidationError, type WaitForOptions, type WriteFileOptions, type WriteManyFile, type WriteManyOptions, applySandboxEventText, buildCollaborationDocumentId, buildControlPlaneMcpConfig, buildSandboxMcpConfig, buildTangleRouterEvalMatrixRequest, buildTangleRouterResponsesWebSearchRequest, buildTangleRouterSearchBackend, buildTangleRouterSearchProfile, buildTraceExportPayload, collectAgentResponseText, createConfidentialSandbox, createManageSandboxesTool, defineAgentProfile, defineGitHubResource, defineInlineResource, exportTraceBundle, fetchTangleRouterSearchConfig, generateAttestationNonce, generateDockerfile, getSandboxEventText, mergeAgentProfiles, normalizeCollaborationPath, normalizeRuntimeBackendConfig, otelTraceIdForTangleTrace, parseCollaborationDocumentId, parseSSEStream, resolveSandboxResources, runTangleRouterEvalMatrixInSandbox, sandboxResourcesForSize, serializeForSidecar, startTeeAttestationHeartbeat, toOtelJson };
935
+ export { type AcceleratorKind, type AccessPolicyRule, type AddUserOptions, type AgentProfile, type AgentProfileCapabilities, type AgentProfileConnection, type AgentProfileFileMount, type AgentProfileMcpServer, type AgentProfileModelHints, type AgentProfilePermissionValue, type AgentProfilePrompt, type AgentProfileResourceRef, type AgentProfileResources, type AgentProfileValidationIssue, type AgentProfileValidationResult, type AgentSubagentProfile, type AnyTokenPayload, type AttachSandboxFleetMachineOptions, AuthError, type BackendCapabilities, type BackendConfig, type BackendInfo, type BackendManager, type BackendStatus, type BackendType, type BatchEvent, type BatchOptions, type BatchResult, type BatchTask, type BatchTaskResult, type BuildControlPlaneMcpConfigOptions, type BuildProgressEvent, type BuildSandboxMcpConfigOptions, CONTROL_PLANE_MCP_SERVER_NAME, CapabilityError, type CheckpointInfo, type CheckpointOptions, type CheckpointResult, type CodeResult, type CollaborationAccess, type CollaborationBootstrapRequest, type CollaborationBootstrapResponse, CollaborationClient, type CollaborationClientConfig, type CollaborationDocumentAdapter, type CollaborationDocumentChange, type CollaborationDocumentRef, CollaborationFileBridge, type CollaborationFileBridgeOptions, type CollaborationFileEvent, type CollaborationPermissions, type CollaborationTokenPayload, type CollaborationTokenRefreshRequest, type CollaborationTokenRefreshResponse, type CollaborationTransportConfig, type CompletedTurnResult, type ConfidentialSandboxResult, type ConfidentialTeeType, type CreateConfidentialSandboxOptions, type CreateIntelligenceReportOptions, type CreateSandboxFleetOptions, type CreateSandboxFleetWithCoordinatorOptions, type CreateSandboxOptions, type CreateTeamOptions, DEFAULT_SANDBOX_SIZE, type DeleteOptions, type DirectoryPermission, type DispatchPromptOptions, type DispatchedSession, type DownloadOptions, type DownloadProgress, type DriveTurnOptions, type DriverConfig, type DriverInfo, type DriverType, type EgressManager, type EgressPolicy, type EventStreamOptions, type ExecOptions, type ExecResult, type FileInfo, type FileSystem, type FleetDispatchCancelResult, type FleetDispatchResultBuffer, type FleetDispatchResultBufferOptions, type FleetDispatchStreamOptions, type FleetExecDispatchOptions, type FleetMachineId, type FleetPromptDispatchOptions, type ForkOptions, type ForkResult, type GitAuth, type GitBranch, type GitCommit, type GitConfig, type GitDiff, type GitStatus, type GpuType, type HostAgentDriverConfig, type HostAgentRuntimeBackend, Image, type ImageBuildClient, type ImageBuildClientConfig, type ImageBuildFetchClient, type ImageBuildOptions, type ImageBuildResult, ImageBuilder, type ImageSpec, type InstalledTool, IntelligenceClient, type IntelligenceReport, type IntelligenceReportBudget, type IntelligenceReportCompareTo, type IntelligenceReportSubjectType, type IntelligenceReportWindow, type InteractiveAuthFile, InteractiveSessionHandle, type InteractiveSessionHost, type InteractiveSessionInfo, type InterruptResult, type InviteTeamMemberOptions, type IssueCollaborationTokenOptions, type ListMessagesOptions, type ListOptions, type ListSandboxFleetOptions, type ListSandboxOptions, MANAGE_SANDBOXES_PARAMETERS, MANAGE_SANDBOXES_TOOL_NAME, type ManageSandboxesInput, type ManageSandboxesTool, type ManageSandboxesToolOptions, type MaterializeProfileFileMountsOptions, type MaterializeProfileFileMountsResult, type McpServerConfig, type MintScopedTokenOptions, type MkdirOptions, type NetworkConfig, NetworkError, type NetworkManager, type NonHostAgentDriverConfig, NotFoundError, type ParseSSEStreamOptions, type ParsedSSEEvent, PartialFailureError, type PermissionLevel, type PermissionsManager, type PreviewLinkInfo, type PreviewLinkManager, type Process, type ProcessInfo, type ProcessLogEntry, type ProcessManager, type ProcessSignal, type ProcessSpawnOptions, type ProcessStatus, type PromptOptions, type PromptResult, type ProvisionEvent, type ProvisionResult, type ProvisionStatus, type ProvisionStep, type PublicTemplateInfo, type PublicTemplateVersionInfo, type PublishPublicTemplateOptions, type PublishPublicTemplateVersionOptions, QuotaError, type ReapExpiredSandboxFleetsOptions, type ReapExpiredSandboxFleetsResult, type ReconcileSandboxFleetsOptions, type ReconcileSandboxFleetsResult, type RespondToPermissionOptions, type RouterEvalMatrixAgentProfile, type RouterEvalMatrixCaseResult, type RouterEvalMatrixHarness, type RouterEvalMatrixPayload, type RouterEvalMatrixSandboxBox, type RouterEvalMatrixSandboxClient, type RouterEvalMatrixScenario, type RouterEvalMatrixSuiteResponse, type RouterImportedRunResponse, type RouterSearchConfig, type RouterSearchConfigOptions, type RunCodeOptions, type RunTangleRouterEvalMatrixInSandboxOptions, type RunTangleRouterEvalMatrixInSandboxResult, SANDBOX_MCP_SERVER_NAME, SANDBOX_SIZE_PRESETS, SANDBOX_SIZE_PRESET_NAMES, type SSHCommandDescriptor, type SSHCredentials, SandboxClient as Sandbox, SandboxClient, type SandboxClientConfig, type SandboxConnection, type SandboxEnvironment, SandboxError, type SandboxErrorJson, type SandboxEvent, type SandboxFailureDetail, SandboxFleet, type SandboxFleetArtifact, type SandboxFleetArtifactSpec, SandboxFleetClient, type SandboxFleetCostEstimate, type SandboxFleetDispatchFailureClass, type SandboxFleetDispatchResponse, type SandboxFleetDriverCapability, type SandboxFleetDriverTimings, type SandboxFleetInfo, type SandboxFleetIntelligenceEnvelope, type SandboxFleetMachine, type SandboxFleetMachineMeteredUsage, type SandboxFleetMachineRecord, type SandboxFleetMachineSpec, type SandboxFleetManifest, type SandboxFleetManifestMachine, type SandboxFleetOperationsSummary, type SandboxFleetPolicy, type SandboxFleetToken, type SandboxFleetTraceBundle, type SandboxFleetTraceEvent, type SandboxFleetTraceExport, type SandboxFleetTraceOptions, type SandboxFleetUsage, type SandboxFleetWorkspace, type SandboxFleetWorkspaceReconcileResult, type SandboxFleetWorkspaceRestoreResult, type SandboxFleetWorkspaceSnapshotResult, type SandboxInfo, SandboxInstance, type SandboxIntelligenceEnvelope, type SandboxMcpConfig, type SandboxMcpEndpoint, type SandboxMcpServerEntry, type SandboxPermissionsConfig, type SandboxResourceUsage, type SandboxResources, SandboxSession, type SandboxSizePreset, type SandboxStatus, type SandboxTraceBundle, type SandboxTraceEvent, type SandboxTraceExport, type SandboxTraceOptions, type SandboxUser, type SaveCollaborationSnapshotRequest, type SaveCollaborationSnapshotResponse, type ScopedToken, type ScopedTokenScope, type SearchMatch, type SearchOptions, type SecretInfo, type SecretsManager, ServerError, type SessionEventStreamOptions, type SessionInfo, type SessionListOptions, type SessionMessage, type SessionStatus, type SnapshotInfo, type SnapshotOptions, type SnapshotResult, type SplitInlineProfileFileMountsResult, type StartInteractiveOptions, type StartupDiagnostics, type StartupOperation, StateError, type StorageConfig, type SubscriptionInfo, TangleSandboxClient, type TangleSandboxClientConfig, type TangleSearchProvider, type TaskOptions, type TaskResult, type Team, type TeamInvitation, type TeamMember, type TeeAttestationHeartbeat, type TeeAttestationHeartbeatOptions, type TeeAttestationHeartbeatSample, type TeeAttestationOptions, type TeeAttestationReport, type TeeAttestationResponse, type TeePublicKey, type TeePublicKeyResponse, TimeoutError, type TokenRefreshHandler, type ToolsConfig, type TraceExportFormat, type TraceExportResult, type TraceExportSink, type TurnDriveResult, type UpdateUserOptions, type UploadOptions, type UploadProgress, type UsageInfo, ValidationError, type WaitForOptions, type WriteFileOptions, type WriteManyFile, type WriteManyOptions, applySandboxEventText, buildCollaborationDocumentId, buildControlPlaneMcpConfig, buildSandboxMcpConfig, buildTangleRouterEvalMatrixRequest, buildTangleRouterResponsesWebSearchRequest, buildTangleRouterSearchBackend, buildTangleRouterSearchProfile, buildTraceExportPayload, collectAgentResponseText, createConfidentialSandbox, createManageSandboxesTool, defineAgentProfile, defineGitHubResource, defineInlineResource, exportTraceBundle, fetchTangleRouterSearchConfig, generateAttestationNonce, generateDockerfile, getSandboxEventText, materializeProfileFileMounts, mergeAgentProfiles, normalizeCollaborationPath, normalizeRuntimeBackendConfig, otelTraceIdForTangleTrace, parseCollaborationDocumentId, parseSSEStream, resolveSandboxResources, runTangleRouterEvalMatrixInSandbox, sandboxResourcesForSize, serializeForSidecar, splitInlineProfileFileMounts, startTeeAttestationHeartbeat, toOtelJson };
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { a as collectAgentResponseText, c as buildTraceExportPayload, d as toOtelJson, h as serializeForSidecar, i as applySandboxEventText, l as exportTraceBundle, m as normalizeRuntimeBackendConfig, n as SandboxSession, o as getSandboxEventText, p as parseSSEStream, r as InteractiveSessionHandle, t as SandboxInstance, u as otelTraceIdForTangleTrace } from "./sandbox-DgWaRMlI.js";
1
+ import { a as collectAgentResponseText, c as buildTraceExportPayload, d as toOtelJson, g as serializeForSidecar, h as normalizeRuntimeBackendConfig, i as applySandboxEventText, l as exportTraceBundle, m as parseSSEStream, n as SandboxSession, o as getSandboxEventText, p as encodeTextForWire, r as InteractiveSessionHandle, t as SandboxInstance, u as otelTraceIdForTangleTrace } from "./sandbox-C4TLW3Ue.js";
2
2
  import { a as PartialFailureError, c as ServerError, d as ValidationError, i as NotFoundError, l as StateError, n as CapabilityError, o as QuotaError, r as NetworkError, s as SandboxError, t as AuthError, u as TimeoutError } from "./errors-DZsfJUuc.js";
3
- import { a as DEFAULT_SANDBOX_SIZE, c as resolveSandboxResources, i as SandboxFleetClient, l as sandboxResourcesForSize, n as SandboxClient, o as SANDBOX_SIZE_PRESETS, r as SandboxFleet, s as SANDBOX_SIZE_PRESET_NAMES, t as IntelligenceClient } from "./client-B8iqCNnm.js";
3
+ import { a as DEFAULT_SANDBOX_SIZE, c as resolveSandboxResources, i as SandboxFleetClient, l as sandboxResourcesForSize, n as SandboxClient, o as SANDBOX_SIZE_PRESETS, r as SandboxFleet, s as SANDBOX_SIZE_PRESET_NAMES, t as IntelligenceClient } from "./client-vx9ze5bL.js";
4
4
  import { a as CollaborationClient, i as parseCollaborationDocumentId, n as buildCollaborationDocumentId, r as normalizeCollaborationPath, t as CollaborationFileBridge } from "./collaboration-BxlfZ2Uh.js";
5
- import { t as TangleSandboxClient } from "./tangle-C2uTDxJ0.js";
5
+ import { t as TangleSandboxClient } from "./tangle-BNRnUKEO.js";
6
6
  import { defineAgentProfile, defineGitHubResource, defineInlineResource, mergeAgentProfiles } from "@tangle-network/agent-interface";
7
7
  //#region src/confidential.ts
8
8
  function generateAttestationNonce(bytes = 32) {
@@ -784,6 +784,281 @@ function buildControlPlaneMcpConfig(options) {
784
784
  };
785
785
  }
786
786
  //#endregion
787
+ //#region src/profile-file-mounts.ts
788
+ const PROFILE_FILE_MOUNT_B64_CHUNK_CHARS = 3e3;
789
+ const PROFILE_FILE_MOUNT_MAX_RETRIES = 4;
790
+ const PROFILE_FILE_MOUNT_RETRY_BASE_MS = 250;
791
+ const PROFILE_FILE_MOUNT_RETRY_MAX_MS = 2e3;
792
+ const PROFILE_FILE_MOUNT_EXEC_TIMEOUT_MS = 3e4;
793
+ const PROFILE_FILE_MOUNT_PACE_MS = 150;
794
+ const PROFILE_BIN_DIR_RE = /(^|\/)(s?bin)\//;
795
+ const DEFAULT_PROFILE_FILE_API_ABSOLUTE_PREFIXES = [
796
+ ["/home", "agent"].join("/"),
797
+ ["/home", "user"].join("/"),
798
+ "/tmp",
799
+ "/output"
800
+ ];
801
+ function inlineContent(mount) {
802
+ const resource = mount.resource;
803
+ if (resource.kind !== "inline") throw new Error(`materializeProfileFileMounts: ${mount.path} requires an inline resource`);
804
+ if (typeof resource.content !== "string") throw new Error(`materializeProfileFileMounts: ${mount.path} inline resource requires string content`);
805
+ return resource.content;
806
+ }
807
+ function splitInlineProfileFileMounts(profile) {
808
+ const files = profile.resources?.files ?? [];
809
+ const deferredFiles = [];
810
+ const keptFiles = [];
811
+ for (const mount of files) if (mount.resource.kind === "inline") deferredFiles.push(mount);
812
+ else keptFiles.push(mount);
813
+ if (deferredFiles.length === 0) return {
814
+ leanProfile: profile,
815
+ deferredFiles
816
+ };
817
+ return {
818
+ leanProfile: {
819
+ ...profile,
820
+ resources: {
821
+ ...profile.resources ?? {},
822
+ files: keptFiles
823
+ }
824
+ },
825
+ deferredFiles
826
+ };
827
+ }
828
+ function shellSingleQuote(value) {
829
+ return `'${value.replace(/'/g, `'\\''`)}'`;
830
+ }
831
+ function shellPath(path) {
832
+ if (path === "~") return "\"$HOME\"";
833
+ if (path.startsWith("~/")) {
834
+ const rest = path.slice(2);
835
+ return rest ? `"$HOME"/${shellSingleQuote(rest)}` : "\"$HOME\"";
836
+ }
837
+ return shellSingleQuote(path);
838
+ }
839
+ function validateProfileFilePath(path) {
840
+ if (!path) throw new Error("materializeProfileFileMounts: file path is required");
841
+ if (path.endsWith("/")) throw new Error(`materializeProfileFileMounts: refusing directory-shaped file path ${path}`);
842
+ if (hasControlCharacter(path)) throw new Error(`materializeProfileFileMounts: refusing unsafe file path ${JSON.stringify(path)}`);
843
+ if (path === "~" || /^~[^/]/.test(path)) throw new Error(`materializeProfileFileMounts: refusing unsupported home path ${path}`);
844
+ if (hasUnsafeFileApiSegment(path)) throw new Error(`materializeProfileFileMounts: refusing unsafe file path ${path}`);
845
+ }
846
+ function hasUnsafeFileApiSegment(path) {
847
+ return path.split("/").some((segment) => segment === "." || segment === ".." || segment === ".sidecar");
848
+ }
849
+ function hasControlCharacter(value) {
850
+ for (let i = 0; i < value.length; i++) {
851
+ const code = value.charCodeAt(i);
852
+ if (code < 32 || code === 127) return true;
853
+ }
854
+ return false;
855
+ }
856
+ function normalizeAbsolutePrefixes(prefixes) {
857
+ return prefixes.map((prefix) => {
858
+ const normalized = prefix.trim().replace(/\/+$/, "");
859
+ if (!normalized.startsWith("/") || hasControlCharacter(normalized)) throw new Error(`materializeProfileFileMounts: fileApiAbsolutePrefixes must contain absolute paths; received ${JSON.stringify(prefix)}`);
860
+ if (hasUnsafeFileApiSegment(normalized)) throw new Error(`materializeProfileFileMounts: fileApiAbsolutePrefixes contains unsafe path ${JSON.stringify(prefix)}`);
861
+ return normalized;
862
+ });
863
+ }
864
+ function isAllowedAbsoluteFileApiPath(path, prefixes) {
865
+ for (const prefix of prefixes) if (path === prefix || path.startsWith(`${prefix}/`)) return true;
866
+ return false;
867
+ }
868
+ function fileApiTarget(mount, absolutePrefixes) {
869
+ if (mount.path.startsWith("~/")) return null;
870
+ if (mount.path.startsWith("/")) return isAllowedAbsoluteFileApiPath(mount.path, absolutePrefixes) ? mount.path : null;
871
+ if (mount.path.startsWith("~")) return null;
872
+ if (mount.path.length === 0) return null;
873
+ return mount.path;
874
+ }
875
+ function isExecutableProfileFile(mount) {
876
+ return mount.executable ?? PROFILE_BIN_DIR_RE.test(mount.path);
877
+ }
878
+ function profileFileMode(mount) {
879
+ return isExecutableProfileFile(mount) ? 493 : void 0;
880
+ }
881
+ function fileApiSupportsMode(box) {
882
+ return box.fs?.supportsWriteMode === true;
883
+ }
884
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
885
+ var ProfileFileMountExecTimeoutError = class extends Error {
886
+ constructor(timeoutMs) {
887
+ super(`exec exceeded ${timeoutMs}ms`);
888
+ this.name = "ProfileFileMountExecTimeoutError";
889
+ }
890
+ };
891
+ function execWithTimeout(box, cmd, timeoutMs) {
892
+ return new Promise((resolve, reject) => {
893
+ let settled = false;
894
+ const timer = setTimeout(() => {
895
+ if (settled) return;
896
+ settled = true;
897
+ reject(new ProfileFileMountExecTimeoutError(timeoutMs));
898
+ }, timeoutMs);
899
+ box.exec(cmd, { timeoutMs }).then((res) => {
900
+ if (settled) return;
901
+ settled = true;
902
+ clearTimeout(timer);
903
+ resolve(res);
904
+ }, (err) => {
905
+ if (settled) return;
906
+ settled = true;
907
+ clearTimeout(timer);
908
+ reject(err);
909
+ });
910
+ });
911
+ }
912
+ const TRANSIENT_EXEC_STATUS_CODES = new Set([
913
+ 408,
914
+ 409,
915
+ 425,
916
+ 429,
917
+ 500,
918
+ 502,
919
+ 503,
920
+ 504
921
+ ]);
922
+ const TRANSIENT_EXEC_CODE_RE = /^(ECONNRESET|ECONNREFUSED|ETIMEDOUT|EPIPE|ECONNABORTED)$/i;
923
+ const TRANSIENT_EXEC_MESSAGE_RE = /\b(408|409|425|429|500|502|503|504)\b|rate.?limit|too many requests|\bfetch failed\b|network error|connection reset|socket hang up|timed? out|service unavailable|bad gateway|gateway timeout|internal server error|\b(?:sidecar|runtime|exec(?:ution)?|terminal|sandbox|service|command(?:s)?|proxy)\b.{0,80}\bnot ready\b|\bnot ready\b.{0,80}\b(?:sidecar|runtime|exec(?:ution)?|terminal|sandbox|service|command(?:s)?|proxy)\b/i;
924
+ function errorStatus(err) {
925
+ const rawStatus = err.status ?? err.statusCode ?? (err.response && typeof err.response === "object" ? err.response.status : void 0);
926
+ if (typeof rawStatus === "number") return rawStatus;
927
+ if (typeof rawStatus === "string" && /^\d+$/.test(rawStatus)) return Number(rawStatus);
928
+ }
929
+ function retryAfterMs(err, seen = /* @__PURE__ */ new Set()) {
930
+ if (!err || typeof err !== "object") return void 0;
931
+ if (seen.has(err)) return void 0;
932
+ seen.add(err);
933
+ const e = err;
934
+ if (typeof e.retryAfterMs === "number") return e.retryAfterMs;
935
+ return retryAfterMs(e.cause, seen);
936
+ }
937
+ function isTransientExecError(err, seen = /* @__PURE__ */ new Set()) {
938
+ if (!err || typeof err !== "object") return false;
939
+ if (seen.has(err)) return false;
940
+ seen.add(err);
941
+ const e = err;
942
+ const status = errorStatus(e);
943
+ if (status !== void 0 && TRANSIENT_EXEC_STATUS_CODES.has(status)) return true;
944
+ if (typeof e.code === "string") {
945
+ if (TRANSIENT_EXEC_CODE_RE.test(e.code)) return true;
946
+ if (/rate.?limit|too.?many.?requests|429|server.?error|service.?unavailable/i.test(e.code)) return true;
947
+ }
948
+ if (typeof e.message === "string" && TRANSIENT_EXEC_MESSAGE_RE.test(e.message)) return true;
949
+ return isTransientExecError(e.cause, seen);
950
+ }
951
+ function transientExecError(err) {
952
+ if (err instanceof ProfileFileMountExecTimeoutError) return { retryable: false };
953
+ if (isTransientExecError(err)) return {
954
+ retryable: true,
955
+ retryAfterMs: retryAfterMs(err)
956
+ };
957
+ return { retryable: false };
958
+ }
959
+ async function sha256Hex(content) {
960
+ const bytes = new TextEncoder().encode(content);
961
+ const webSubtle = globalThis.crypto?.subtle;
962
+ if (webSubtle) {
963
+ const digest = await webSubtle.digest("SHA-256", bytes);
964
+ return Array.from(new Uint8Array(digest)).map((byte) => byte.toString(16).padStart(2, "0")).join("");
965
+ }
966
+ const { createHash } = await import("node:crypto");
967
+ return createHash("sha256").update(content, "utf8").digest("hex");
968
+ }
969
+ async function execProfileFileMount(box, mount, content, options, execState) {
970
+ const maxRetries = options.maxRetries ?? PROFILE_FILE_MOUNT_MAX_RETRIES;
971
+ const path = mount.path;
972
+ const b64 = encodeTextForWire(content);
973
+ const b64Chunks = [];
974
+ for (let i = 0; i < b64.length; i += PROFILE_FILE_MOUNT_B64_CHUNK_CHARS) b64Chunks.push(b64.slice(i, i + PROFILE_FILE_MOUNT_B64_CHUNK_CHARS));
975
+ const expectedSha256 = await sha256Hex(content);
976
+ const dir = path.replace(/\/[^/]*$/, "");
977
+ const executable = isExecutableProfileFile(mount);
978
+ const q = shellPath(path);
979
+ const qb64 = shellPath(`${path}.b64`);
980
+ const qtmp = shellPath(`${path}.tmp`);
981
+ const qpartPrefix = shellPath(`${path}.b64.part.`);
982
+ const homeGuard = path.startsWith("~/") ? `[ -n "$HOME" ] || { echo ${shellSingleQuote(`materializeProfileFileMounts: HOME is unset for ${path}`)} >&2; exit 1; }; ` : "";
983
+ const run = async (cmd) => {
984
+ for (let attempt = 0;; attempt++) {
985
+ if (execState.started && options.paceMs > 0) await sleep(options.paceMs);
986
+ execState.started = true;
987
+ try {
988
+ return await execWithTimeout(box, cmd, options.execTimeoutMs);
989
+ } catch (err) {
990
+ const { retryable, retryAfterMs: retryAfter } = transientExecError(err);
991
+ if (retryable && attempt < maxRetries) {
992
+ const backoff = Math.min(PROFILE_FILE_MOUNT_RETRY_BASE_MS * 2 ** attempt, PROFILE_FILE_MOUNT_RETRY_MAX_MS);
993
+ await sleep(Math.min(retryAfter ?? backoff, PROFILE_FILE_MOUNT_RETRY_MAX_MS));
994
+ continue;
995
+ }
996
+ throw new Error(`materializeProfileFileMounts: exec failed for ${path}`, { cause: err });
997
+ }
998
+ }
999
+ };
1000
+ const step = async (cmd) => {
1001
+ const result = await run(`${homeGuard}${cmd}`);
1002
+ if (result.exitCode !== 0) throw new Error(`materializeProfileFileMounts: failed to write ${path} (exit ${result.exitCode}): ${result.stderr.slice(0, 500)}`);
1003
+ };
1004
+ await step(dir ? `mkdir -p ${shellPath(dir)}` : ":");
1005
+ for (let i = 0; i < b64Chunks.length; i++) {
1006
+ const slice = b64Chunks[i];
1007
+ if (slice === void 0) continue;
1008
+ await step(`printf '%s' '${slice}' > ${shellPath(`${path}.b64.part.${i}`)}`);
1009
+ }
1010
+ const chmod = executable ? `chmod +x ${q} || exit 1; ` : "";
1011
+ const checksumMismatch = shellSingleQuote(`materializeProfileFileMounts: checksum mismatch for ${path}`);
1012
+ await step(`cleanup() { ${`rm -f ${qb64} ${qtmp}; i=0; while [ "$i" -lt ${b64Chunks.length} ]; do rm -f ${qpartPrefix}$i; i=$((i+1)); done`}; }; trap cleanup EXIT; expected='${expectedSha256}'; if [ -f ${q} ] && [ "$(sha256sum ${q} | awk '{print $1}')" = "$expected" ]; then ${chmod}exit 0; fi; : > ${qb64} && i=0; while [ "$i" -lt ${b64Chunks.length} ]; do cat ${qpartPrefix}$i >> ${qb64} || exit 1; i=$((i+1)); done && base64 -d ${qb64} > ${qtmp} && [ "$(sha256sum ${qtmp} | awk '{print $1}')" = "$expected" ] || { echo ${checksumMismatch} >&2; exit 1; }; mv ${qtmp} ${q} && ${executable ? `chmod +x ${q} && ` : ""}[ "$(sha256sum ${q} | awk '{print $1}')" = "$expected" ] || { echo ${checksumMismatch} >&2; exit 1; }`);
1013
+ }
1014
+ async function materializeProfileFileMounts(box, files, options = {}) {
1015
+ const execTimeoutMs = options.execTimeoutMs ?? PROFILE_FILE_MOUNT_EXEC_TIMEOUT_MS;
1016
+ const paceMs = options.paceMs ?? PROFILE_FILE_MOUNT_PACE_MS;
1017
+ const maxRetries = options.maxRetries ?? PROFILE_FILE_MOUNT_MAX_RETRIES;
1018
+ const absolutePrefixes = normalizeAbsolutePrefixes(options.fileApiAbsolutePrefixes ?? DEFAULT_PROFILE_FILE_API_ABSOLUTE_PREFIXES);
1019
+ const fs = box.fs;
1020
+ const fileApiAvailable = typeof fs?.writeMany === "function";
1021
+ const modeAwareFileApi = fileApiSupportsMode(box);
1022
+ const viaFileApi = [];
1023
+ const viaExec = [];
1024
+ for (const mount of files) {
1025
+ const content = inlineContent(mount);
1026
+ validateProfileFilePath(mount.path);
1027
+ const target = fileApiAvailable ? fileApiTarget(mount, absolutePrefixes) : null;
1028
+ const executable = isExecutableProfileFile(mount);
1029
+ if (target !== null && (!executable || modeAwareFileApi)) {
1030
+ const mode = profileFileMode(mount);
1031
+ viaFileApi.push({
1032
+ path: target,
1033
+ content,
1034
+ ...mode !== void 0 ? { mode } : {}
1035
+ });
1036
+ } else viaExec.push({
1037
+ mount,
1038
+ content
1039
+ });
1040
+ }
1041
+ if (viaFileApi.length > 0) try {
1042
+ await fs?.writeMany(viaFileApi, {
1043
+ paceMs,
1044
+ maxRetries
1045
+ });
1046
+ } catch (err) {
1047
+ throw new Error("materializeProfileFileMounts: file API batch write failed", { cause: err });
1048
+ }
1049
+ const execState = { started: false };
1050
+ for (const item of viaExec) await execProfileFileMount(box, item.mount, item.content, {
1051
+ execTimeoutMs,
1052
+ paceMs,
1053
+ maxRetries
1054
+ }, execState);
1055
+ return {
1056
+ written: viaFileApi.length + viaExec.length,
1057
+ viaFileApi: viaFileApi.length,
1058
+ viaExec: viaExec.length
1059
+ };
1060
+ }
1061
+ //#endregion
787
1062
  //#region src/router-search.ts
788
1063
  const DEFAULT_ROUTER_URL = "https://router.tangle.tools";
789
1064
  async function fetchTangleRouterSearchConfig(options = {}) {
@@ -1177,4 +1452,4 @@ function stripUndefined(value) {
1177
1452
  return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== void 0).map(([k, v]) => [k, stripUndefined(v)]));
1178
1453
  }
1179
1454
  //#endregion
1180
- export { AuthError, CONTROL_PLANE_MCP_SERVER_NAME, CapabilityError, CollaborationClient, CollaborationFileBridge, DEFAULT_SANDBOX_SIZE, Image, ImageBuilder, IntelligenceClient, InteractiveSessionHandle, MANAGE_SANDBOXES_PARAMETERS, MANAGE_SANDBOXES_TOOL_NAME, NetworkError, NotFoundError, PartialFailureError, QuotaError, SANDBOX_MCP_SERVER_NAME, SANDBOX_SIZE_PRESETS, SANDBOX_SIZE_PRESET_NAMES, SandboxClient as Sandbox, SandboxClient, SandboxError, SandboxFleet, SandboxFleetClient, SandboxInstance, SandboxSession, ServerError, StateError, TangleSandboxClient, TimeoutError, ValidationError, applySandboxEventText, buildCollaborationDocumentId, buildControlPlaneMcpConfig, buildSandboxMcpConfig, buildTangleRouterEvalMatrixRequest, buildTangleRouterResponsesWebSearchRequest, buildTangleRouterSearchBackend, buildTangleRouterSearchProfile, buildTraceExportPayload, collectAgentResponseText, createConfidentialSandbox, createManageSandboxesTool, defineAgentProfile, defineGitHubResource, defineInlineResource, exportTraceBundle, fetchTangleRouterSearchConfig, generateAttestationNonce, generateDockerfile, getSandboxEventText, mergeAgentProfiles, normalizeCollaborationPath, normalizeRuntimeBackendConfig, otelTraceIdForTangleTrace, parseCollaborationDocumentId, parseSSEStream, resolveSandboxResources, runTangleRouterEvalMatrixInSandbox, sandboxResourcesForSize, serializeForSidecar, startTeeAttestationHeartbeat, toOtelJson };
1455
+ export { AuthError, CONTROL_PLANE_MCP_SERVER_NAME, CapabilityError, CollaborationClient, CollaborationFileBridge, DEFAULT_SANDBOX_SIZE, Image, ImageBuilder, IntelligenceClient, InteractiveSessionHandle, MANAGE_SANDBOXES_PARAMETERS, MANAGE_SANDBOXES_TOOL_NAME, NetworkError, NotFoundError, PartialFailureError, QuotaError, SANDBOX_MCP_SERVER_NAME, SANDBOX_SIZE_PRESETS, SANDBOX_SIZE_PRESET_NAMES, SandboxClient as Sandbox, SandboxClient, SandboxError, SandboxFleet, SandboxFleetClient, SandboxInstance, SandboxSession, ServerError, StateError, TangleSandboxClient, TimeoutError, ValidationError, applySandboxEventText, buildCollaborationDocumentId, buildControlPlaneMcpConfig, buildSandboxMcpConfig, buildTangleRouterEvalMatrixRequest, buildTangleRouterResponsesWebSearchRequest, buildTangleRouterSearchBackend, buildTangleRouterSearchProfile, buildTraceExportPayload, collectAgentResponseText, createConfidentialSandbox, createManageSandboxesTool, defineAgentProfile, defineGitHubResource, defineInlineResource, exportTraceBundle, fetchTangleRouterSearchConfig, generateAttestationNonce, generateDockerfile, getSandboxEventText, materializeProfileFileMounts, mergeAgentProfiles, normalizeCollaborationPath, normalizeRuntimeBackendConfig, otelTraceIdForTangleTrace, parseCollaborationDocumentId, parseSSEStream, resolveSandboxResources, runTangleRouterEvalMatrixInSandbox, sandboxResourcesForSize, serializeForSidecar, splitInlineProfileFileMounts, startTeeAttestationHeartbeat, toOtelJson };
@@ -4500,4 +4500,4 @@ function quoteForShell(value) {
4500
4500
  return `'${value.replace(/'/g, "'\\''")}'`;
4501
4501
  }
4502
4502
  //#endregion
4503
- export { collectAgentResponseText as a, buildTraceExportPayload as c, toOtelJson as d, encodePromptForWire as f, serializeForSidecar as h, applySandboxEventText as i, exportTraceBundle as l, normalizeRuntimeBackendConfig as m, SandboxSession as n, getSandboxEventText as o, parseSSEStream as p, InteractiveSessionHandle as r, normalizeConnection as s, SandboxInstance as t, otelTraceIdForTangleTrace as u };
4503
+ export { collectAgentResponseText as a, buildTraceExportPayload as c, toOtelJson as d, encodePromptForWire as f, serializeForSidecar as g, normalizeRuntimeBackendConfig as h, applySandboxEventText as i, exportTraceBundle as l, parseSSEStream as m, SandboxSession as n, getSandboxEventText as o, encodeTextForWire as p, InteractiveSessionHandle as r, normalizeConnection as s, SandboxInstance as t, otelTraceIdForTangleTrace as u };
@@ -1,2 +1,2 @@
1
- import { a as TANGLE_JOBS_CONTRACT, c as ITangleJobsAbi, d as SandboxCreateResponseParamTypes, f as SandboxIdParamTypes, i as TANGLE_CHAIN_ID, l as JsonResponseParamTypes, n as JOB_SANDBOX_CREATE, o as TANGLE_MAINNET_RPC, r as JOB_SANDBOX_DELETE, s as AgentSandboxBlueprintAbi, t as TangleSandboxClient, u as SandboxCreateParamTypes } from "../tangle-C2uTDxJ0.js";
1
+ import { a as TANGLE_JOBS_CONTRACT, c as ITangleJobsAbi, d as SandboxCreateResponseParamTypes, f as SandboxIdParamTypes, i as TANGLE_CHAIN_ID, l as JsonResponseParamTypes, n as JOB_SANDBOX_CREATE, o as TANGLE_MAINNET_RPC, r as JOB_SANDBOX_DELETE, s as AgentSandboxBlueprintAbi, t as TangleSandboxClient, u as SandboxCreateParamTypes } from "../tangle-BNRnUKEO.js";
2
2
  export { AgentSandboxBlueprintAbi, ITangleJobsAbi, JOB_SANDBOX_CREATE, JOB_SANDBOX_DELETE, JsonResponseParamTypes, SandboxCreateParamTypes, SandboxCreateResponseParamTypes, SandboxIdParamTypes, TANGLE_CHAIN_ID, TANGLE_JOBS_CONTRACT, TANGLE_MAINNET_RPC, TangleSandboxClient };
@@ -1,4 +1,4 @@
1
- import { t as SandboxInstance } from "./sandbox-DgWaRMlI.js";
1
+ import { t as SandboxInstance } from "./sandbox-C4TLW3Ue.js";
2
2
  //#region src/tangle/abi.ts
3
3
  /**
4
4
  * Tangle Contract ABI Definitions
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox",
3
- "version": "0.9.4-develop.20260627151756.06a2afc",
3
+ "version": "0.9.4-develop.20260627212650.d82a250",
4
4
  "description": "Client SDK for the Tangle Sandbox platform - build AI agent applications with dev containers",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",