Copy disabled (too large)
Download .txt
Showing preview only (16,585K chars total). Download the full file to get everything.
Repository: daytonaio/daytona
Branch: main
Commit: 0d0f3f921cd6
Files: 3949
Total size: 27.7 MB
Directory structure:
gitextract_07rnwxyw/
├── .devcontainer/
│ ├── Dockerfile
│ ├── buildkitd.toml
│ ├── devcontainer.build.json
│ ├── devcontainer.json
│ ├── dex/
│ │ └── config.yaml
│ ├── docker-compose.yaml
│ ├── otel/
│ │ └── otel-collector-config.yaml
│ ├── pgadmin4/
│ │ ├── pgpass
│ │ └── servers.json
│ └── tools-feature/
│ ├── devcontainer-feature.json
│ └── install.sh
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── actions/
│ │ └── setup-toolchain/
│ │ └── action.yml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── build_devcontainer.yaml
│ ├── default_image_publish.yaml
│ ├── pr_checks.yaml
│ ├── prepare-release.yaml
│ ├── release.yaml
│ ├── sdk_publish.yaml
│ └── translate.yaml
├── .gitignore
├── .golangci.yaml
├── .husky/
│ ├── .gitignore
│ └── pre-commit
├── .licenserc-clients.yaml
├── .licenserc.yaml
├── .markdownlint-cli2.jsonc
├── .npmrc
├── .nxignore
├── .prettierignore
├── .prettierrc
├── .rubocop.yml
├── .verdaccio/
│ └── config.yml
├── .vscode/
│ ├── launch.json
│ ├── settings.json
│ └── tasks.json
├── .yarnrc.yml
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── COPYRIGHT
├── Gemfile
├── Gemfile.lock
├── LICENSE
├── NOTICE
├── PACKAGING.md
├── PREPARING_YOUR_CHANGES.md
├── PUBLISHING.md
├── README.md
├── SECURITY.md
├── apps/
│ ├── api/
│ │ ├── Dockerfile
│ │ ├── eslint.config.mjs
│ │ ├── jest.config.ts
│ │ ├── project.json
│ │ ├── scripts/
│ │ │ └── validate-migration-paths.sh
│ │ ├── src/
│ │ │ ├── admin/
│ │ │ │ ├── admin.module.ts
│ │ │ │ ├── controllers/
│ │ │ │ │ ├── runner.controller.ts
│ │ │ │ │ └── sandbox.controller.ts
│ │ │ │ └── dto/
│ │ │ │ └── create-runner.dto.ts
│ │ │ ├── analytics/
│ │ │ │ ├── analytics.module.ts
│ │ │ │ └── services/
│ │ │ │ └── analytics.service.ts
│ │ │ ├── api-key/
│ │ │ │ ├── api-key.controller.ts
│ │ │ │ ├── api-key.entity.ts
│ │ │ │ ├── api-key.module.ts
│ │ │ │ ├── api-key.service.ts
│ │ │ │ └── dto/
│ │ │ │ ├── api-key-list.dto.ts
│ │ │ │ ├── api-key-response.dto.ts
│ │ │ │ └── create-api-key.dto.ts
│ │ │ ├── app.module.ts
│ │ │ ├── app.service.ts
│ │ │ ├── assets/
│ │ │ │ ├── .gitkeep
│ │ │ │ └── templates/
│ │ │ │ └── organization-invitation.template.ejs
│ │ │ ├── audit/
│ │ │ │ ├── adapters/
│ │ │ │ │ ├── audit-opensearch.adapter.ts
│ │ │ │ │ └── audit-typeorm.adapter.ts
│ │ │ │ ├── audit.module.ts
│ │ │ │ ├── constants/
│ │ │ │ │ ├── audit-log-events.constant.ts
│ │ │ │ │ └── audit-tokens.ts
│ │ │ │ ├── controllers/
│ │ │ │ │ └── audit.controller.ts
│ │ │ │ ├── decorators/
│ │ │ │ │ └── audit.decorator.ts
│ │ │ │ ├── dto/
│ │ │ │ │ ├── audit-log.dto.ts
│ │ │ │ │ ├── create-audit-log-internal.dto.ts
│ │ │ │ │ ├── create-audit-log.dto.ts
│ │ │ │ │ ├── list-audit-logs-query.dto.ts
│ │ │ │ │ ├── paginated-audit-logs.dto.ts
│ │ │ │ │ └── update-audit-log-internal.dto.ts
│ │ │ │ ├── entities/
│ │ │ │ │ └── audit-log.entity.ts
│ │ │ │ ├── enums/
│ │ │ │ │ ├── audit-action.enum.ts
│ │ │ │ │ └── audit-target.enum.ts
│ │ │ │ ├── events/
│ │ │ │ │ ├── audit-log-created.event.ts
│ │ │ │ │ └── audit-log-updated.event.ts
│ │ │ │ ├── interceptors/
│ │ │ │ │ └── audit.interceptor.ts
│ │ │ │ ├── interfaces/
│ │ │ │ │ ├── audit-filter.interface.ts
│ │ │ │ │ ├── audit-publisher.interface.ts
│ │ │ │ │ └── audit-storage.interface.ts
│ │ │ │ ├── providers/
│ │ │ │ │ ├── audit-publisher.provider.ts
│ │ │ │ │ └── audit-storage.provider.ts
│ │ │ │ ├── publishers/
│ │ │ │ │ ├── audit-direct-publisher.ts
│ │ │ │ │ └── kafka/
│ │ │ │ │ ├── audit-kafka-consumer.controller.ts
│ │ │ │ │ └── audit-kafka-publisher.ts
│ │ │ │ ├── services/
│ │ │ │ │ └── audit.service.ts
│ │ │ │ └── subscribers/
│ │ │ │ └── audit-log.subscriber.ts
│ │ │ ├── auth/
│ │ │ │ ├── api-key.strategy.ts
│ │ │ │ ├── auth.module.ts
│ │ │ │ ├── combined-auth.guard.ts
│ │ │ │ ├── constants/
│ │ │ │ │ └── jwt-regex.constant.ts
│ │ │ │ ├── failed-auth-tracker.service.ts
│ │ │ │ ├── get-auth-context.ts
│ │ │ │ ├── health-check.guard.ts
│ │ │ │ ├── jwt.strategy.ts
│ │ │ │ ├── or.guard.ts
│ │ │ │ ├── otel-collector.guard.ts
│ │ │ │ ├── runner-auth.guard.ts
│ │ │ │ └── system-action.guard.ts
│ │ │ ├── clickhouse/
│ │ │ │ ├── clickhouse.module.ts
│ │ │ │ ├── clickhouse.service.ts
│ │ │ │ └── index.ts
│ │ │ ├── common/
│ │ │ │ ├── constants/
│ │ │ │ │ ├── constants.ts
│ │ │ │ │ ├── error-messages.ts
│ │ │ │ │ ├── feature-flags.ts
│ │ │ │ │ └── header.constants.ts
│ │ │ │ ├── decorators/
│ │ │ │ │ ├── auth-context.decorator.ts
│ │ │ │ │ ├── autocommit-offset.decorator.ts
│ │ │ │ │ ├── distributed-lock.decorator.ts
│ │ │ │ │ ├── log-execution.decorator.ts
│ │ │ │ │ ├── on-async-event.decorator.ts
│ │ │ │ │ ├── otel.decorator.ts
│ │ │ │ │ ├── page-limit.decorator.ts
│ │ │ │ │ ├── page-number.decorator.ts
│ │ │ │ │ ├── required-role.decorator.ts
│ │ │ │ │ ├── runner-context.decorator.ts
│ │ │ │ │ ├── throttler-scope.decorator.ts
│ │ │ │ │ ├── to-array.decorator.ts
│ │ │ │ │ └── track-job-execution.decorator.ts
│ │ │ │ ├── dto/
│ │ │ │ │ └── url.dto.ts
│ │ │ │ ├── guards/
│ │ │ │ │ ├── anonymous-rate-limit.guard.ts
│ │ │ │ │ └── authenticated-rate-limit.guard.ts
│ │ │ │ ├── interceptors/
│ │ │ │ │ └── content-type.interceptors.ts
│ │ │ │ ├── interfaces/
│ │ │ │ │ ├── auth-context.interface.ts
│ │ │ │ │ ├── health-check-context.interface.ts
│ │ │ │ │ ├── otel-collector-context.interface.ts
│ │ │ │ │ ├── otel-config.interface.ts
│ │ │ │ │ ├── paginated-list.interface.ts
│ │ │ │ │ ├── proxy-context.interface.ts
│ │ │ │ │ ├── region-proxy.interface.ts
│ │ │ │ │ ├── region-ssh-gateway.interface.ts
│ │ │ │ │ ├── runner-context.interface.ts
│ │ │ │ │ ├── ssh-gateway-context.interface.ts
│ │ │ │ │ └── trackable-job-executions.ts
│ │ │ │ ├── middleware/
│ │ │ │ │ ├── failed-auth-rate-limit.middleware.ts
│ │ │ │ │ ├── maintenance.middleware.ts
│ │ │ │ │ └── version-header.middleware.ts
│ │ │ │ ├── modules/
│ │ │ │ │ └── body-parser-error.module.ts
│ │ │ │ ├── providers/
│ │ │ │ │ └── openfeature-posthog.provider.ts
│ │ │ │ ├── repositories/
│ │ │ │ │ └── base.repository.ts
│ │ │ │ └── utils/
│ │ │ │ ├── api-key.ts
│ │ │ │ ├── app-mode.ts
│ │ │ │ ├── delete-s3-bucket.ts
│ │ │ │ ├── docker-image.util.ts
│ │ │ │ ├── email.util.ts
│ │ │ │ ├── from-axios-error.ts
│ │ │ │ ├── naming-strategy.util.ts
│ │ │ │ ├── pino.util.ts
│ │ │ │ ├── range-filter.ts
│ │ │ │ ├── rate-limit-headers.util.ts
│ │ │ │ └── uuid.ts
│ │ │ ├── config/
│ │ │ │ ├── config.controller.ts
│ │ │ │ ├── configuration.ts
│ │ │ │ ├── dto/
│ │ │ │ │ └── configuration.dto.ts
│ │ │ │ ├── typed-config.module.ts
│ │ │ │ └── typed-config.service.ts
│ │ │ ├── docker-registry/
│ │ │ │ ├── controllers/
│ │ │ │ │ └── docker-registry.controller.ts
│ │ │ │ ├── decorators/
│ │ │ │ │ └── docker-registry.decorator.ts
│ │ │ │ ├── docker-registry.module.ts
│ │ │ │ ├── dto/
│ │ │ │ │ ├── create-docker-registry-internal.dto.ts
│ │ │ │ │ ├── create-docker-registry.dto.ts
│ │ │ │ │ ├── docker-registry.dto.ts
│ │ │ │ │ └── update-docker-registry.dto.ts
│ │ │ │ ├── entities/
│ │ │ │ │ └── docker-registry.entity.ts
│ │ │ │ ├── enums/
│ │ │ │ │ └── registry-type.enum.ts
│ │ │ │ ├── guards/
│ │ │ │ │ └── docker-registry-access.guard.ts
│ │ │ │ ├── providers/
│ │ │ │ │ ├── docker-registry.provider.interface.ts
│ │ │ │ │ ├── docker-registry.provider.ts
│ │ │ │ │ └── mock-docker-registry.provider.ts
│ │ │ │ └── services/
│ │ │ │ └── docker-registry.service.ts
│ │ │ ├── email/
│ │ │ │ ├── constants.ts
│ │ │ │ ├── email.module.ts
│ │ │ │ └── services/
│ │ │ │ └── email.service.ts
│ │ │ ├── encryption/
│ │ │ │ ├── encryption.module.ts
│ │ │ │ └── encryption.service.ts
│ │ │ ├── exceptions/
│ │ │ │ ├── bad-request.exception.ts
│ │ │ │ ├── forbidden-operation.exception.ts
│ │ │ │ ├── not-found.exception.ts
│ │ │ │ └── sandbox-error.exception.ts
│ │ │ ├── filters/
│ │ │ │ ├── all-exceptions.filter.ts
│ │ │ │ └── kafka-exception.filter.ts
│ │ │ ├── generate-openapi.ts
│ │ │ ├── health/
│ │ │ │ ├── health.controller.ts
│ │ │ │ ├── health.module.ts
│ │ │ │ └── redis.health.ts
│ │ │ ├── interceptors/
│ │ │ │ └── metrics.interceptor.ts
│ │ │ ├── main.ts
│ │ │ ├── migrations/
│ │ │ │ ├── 1741087887225-migration.ts
│ │ │ │ ├── 1741088165704-migration.ts
│ │ │ │ ├── 1741088883000-migration.ts
│ │ │ │ ├── 1741088883001-migration.ts
│ │ │ │ ├── 1741088883002-migration.ts
│ │ │ │ ├── 1741877019888-migration.ts
│ │ │ │ ├── 1742215525714-migration.ts
│ │ │ │ ├── 1742475055353-migration.ts
│ │ │ │ ├── 1742831092942-migration.ts
│ │ │ │ ├── 1743593463168-migration.ts
│ │ │ │ ├── 1743683015304-migration.ts
│ │ │ │ ├── 1744028841133-migration.ts
│ │ │ │ ├── 1744114341077-migration.ts
│ │ │ │ ├── 1744378115901-migration.ts
│ │ │ │ ├── 1744808444807-migration.ts
│ │ │ │ ├── 1744868914148-migration.ts
│ │ │ │ ├── 1744971114480-migration.ts
│ │ │ │ ├── 1745393243334-migration.ts
│ │ │ │ ├── 1745494761360-migration.ts
│ │ │ │ ├── 1745574377029-migration.ts
│ │ │ │ ├── 1745840296260-migration.ts
│ │ │ │ ├── 1745864972652-migration.ts
│ │ │ │ ├── 1746354231722-migration.ts
│ │ │ │ ├── 1746604150910-migration.ts
│ │ │ │ ├── 1747658203010-migration.ts
│ │ │ │ ├── 1748006546552-migration.ts
│ │ │ │ ├── 1748866194353-migration.ts
│ │ │ │ ├── 1749474791343-migration.ts
│ │ │ │ ├── 1749474791344-migration.ts
│ │ │ │ ├── 1749474791345-migration.ts
│ │ │ │ ├── 1750077343089-migration.ts
│ │ │ │ ├── 1750436374899-migration.ts
│ │ │ │ ├── 1750668569562-migration.ts
│ │ │ │ ├── 1750751712412-migration.ts
│ │ │ │ ├── 1751456907334-migration.ts
│ │ │ │ ├── 1752494676200-migration.ts
│ │ │ │ ├── 1752494676205-migration.ts
│ │ │ │ ├── 1752848014862-migration.ts
│ │ │ │ ├── 1753099115783-migration.ts
│ │ │ │ ├── 1753100751730-migration.ts
│ │ │ │ ├── 1753100751731-migration.ts
│ │ │ │ ├── 1753185133351-migration.ts
│ │ │ │ ├── 1753274135567-migration.ts
│ │ │ │ ├── 1753430929609-migration.ts
│ │ │ │ ├── 1753717830378-migration.ts
│ │ │ │ ├── 1754042247109-migration.ts
│ │ │ │ ├── 1755003696741-migration.ts
│ │ │ │ ├── 1755356869493-migration.ts
│ │ │ │ ├── 1755464957487-migration.ts
│ │ │ │ ├── 1755521645207-migration.ts
│ │ │ │ ├── 1755860619921-migration.ts
│ │ │ │ ├── 1757513754037-migration.ts
│ │ │ │ ├── 1757513754038-migration.ts
│ │ │ │ ├── 1759241690773-migration.ts
│ │ │ │ ├── 1759768058397-migration.ts
│ │ │ │ ├── 1761912147638-migration.ts
│ │ │ │ ├── 1761912147639-migration.ts
│ │ │ │ ├── 1763561822000-migration.ts
│ │ │ │ ├── 1764073472179-migration.ts
│ │ │ │ ├── 1764073472180-migration.ts
│ │ │ │ ├── 1764844895057-migration.ts
│ │ │ │ ├── 1764844895058-migration.ts
│ │ │ │ ├── 1765282546000-migration.ts
│ │ │ │ ├── 1765366773736-migration.ts
│ │ │ │ ├── 1765400000000-migration.ts
│ │ │ │ ├── 1765806205881-migration.ts
│ │ │ │ ├── 1766415256696-migration.ts
│ │ │ │ ├── 1767830400000-migration.ts
│ │ │ │ ├── 1768306129179-migration.ts
│ │ │ │ ├── 1768461678804-migration.ts
│ │ │ │ ├── 1768475454675-migration.ts
│ │ │ │ ├── 1768485728153-migration.ts
│ │ │ │ ├── 1768583941244-migration.ts
│ │ │ │ ├── 1769516172576-migration.ts
│ │ │ │ ├── 1769516172577-migration.ts
│ │ │ │ ├── 1770043707083-migration.ts
│ │ │ │ ├── 1770212429837-migration.ts
│ │ │ │ ├── 1770823569571-migration.ts
│ │ │ │ ├── 1770880371265-migration.ts
│ │ │ │ ├── README.md
│ │ │ │ ├── data-source.ts
│ │ │ │ ├── post-deploy/
│ │ │ │ │ └── data-source.ts
│ │ │ │ └── pre-deploy/
│ │ │ │ ├── 1770900000000-migration.ts
│ │ │ │ ├── 1773744656413-migration.ts
│ │ │ │ ├── 1773916204375-migration.ts
│ │ │ │ └── data-source.ts
│ │ │ ├── notification/
│ │ │ │ ├── emitters/
│ │ │ │ │ └── notification-redis.emitter.ts
│ │ │ │ ├── gateways/
│ │ │ │ │ ├── notification-emitter.abstract.ts
│ │ │ │ │ └── notification.gateway.ts
│ │ │ │ ├── notification.module.ts
│ │ │ │ └── services/
│ │ │ │ └── notification.service.ts
│ │ │ ├── object-storage/
│ │ │ │ ├── controllers/
│ │ │ │ │ └── object-storage.controller.ts
│ │ │ │ ├── object-storage.module.ts
│ │ │ │ └── services/
│ │ │ │ └── object-storage.service.ts
│ │ │ ├── openapi-webhooks.ts
│ │ │ ├── openapi.config.ts
│ │ │ ├── organization/
│ │ │ │ ├── constants/
│ │ │ │ │ ├── global-organization-roles.constant.ts
│ │ │ │ │ ├── organization-events.constant.ts
│ │ │ │ │ ├── sandbox-states-consuming-compute.constant.ts
│ │ │ │ │ ├── sandbox-states-consuming-disk.constant.ts
│ │ │ │ │ ├── snapshot-states-consuming-resources.constant.ts
│ │ │ │ │ └── volume-states-consuming-resources.constant.ts
│ │ │ │ ├── controllers/
│ │ │ │ │ ├── organization-invitation.controller.ts
│ │ │ │ │ ├── organization-region.controller.ts
│ │ │ │ │ ├── organization-role.controller.ts
│ │ │ │ │ ├── organization-user.controller.ts
│ │ │ │ │ └── organization.controller.ts
│ │ │ │ ├── decorators/
│ │ │ │ │ ├── required-organization-member-role.decorator.ts
│ │ │ │ │ └── required-organization-resource-permissions.decorator.ts
│ │ │ │ ├── dto/
│ │ │ │ │ ├── create-organization-invitation.dto.ts
│ │ │ │ │ ├── create-organization-quota.dto.ts
│ │ │ │ │ ├── create-organization-role.dto.ts
│ │ │ │ │ ├── create-organization.dto.ts
│ │ │ │ │ ├── create-organization.internal.dto.ts
│ │ │ │ │ ├── organization-invitation.dto.ts
│ │ │ │ │ ├── organization-role.dto.ts
│ │ │ │ │ ├── organization-sandbox-default-limited-network-egress.dto.ts
│ │ │ │ │ ├── organization-suspension.dto.ts
│ │ │ │ │ ├── organization-usage-overview.dto.ts
│ │ │ │ │ ├── organization-user.dto.ts
│ │ │ │ │ ├── organization.dto.ts
│ │ │ │ │ ├── otel-config.dto.ts
│ │ │ │ │ ├── region-quota.dto.ts
│ │ │ │ │ ├── sandbox-usage-overview-internal.dto.ts
│ │ │ │ │ ├── snapshot-usage-overview-internal.dto.ts
│ │ │ │ │ ├── update-organization-default-region.dto.ts
│ │ │ │ │ ├── update-organization-invitation.dto.ts
│ │ │ │ │ ├── update-organization-member-access.dto.ts
│ │ │ │ │ ├── update-organization-quota.dto.ts
│ │ │ │ │ ├── update-organization-region-quota.dto.ts
│ │ │ │ │ ├── update-organization-role.dto.ts
│ │ │ │ │ └── volume-usage-overview-internal.dto.ts
│ │ │ │ ├── entities/
│ │ │ │ │ ├── organization-invitation.entity.ts
│ │ │ │ │ ├── organization-role.entity.ts
│ │ │ │ │ ├── organization-user.entity.ts
│ │ │ │ │ ├── organization.entity.ts
│ │ │ │ │ └── region-quota.entity.ts
│ │ │ │ ├── enums/
│ │ │ │ │ ├── organization-invitation-status.enum.ts
│ │ │ │ │ ├── organization-member-role.enum.ts
│ │ │ │ │ └── organization-resource-permission.enum.ts
│ │ │ │ ├── events/
│ │ │ │ │ ├── organization-invitation-accepted.event.ts
│ │ │ │ │ ├── organization-invitation-created.event.ts
│ │ │ │ │ ├── organization-resource-permissions-unassigned.event.ts
│ │ │ │ │ ├── organization-suspended-sandbox-stopped.event.ts
│ │ │ │ │ └── organization-suspended-snapshot-deactivated.event.ts
│ │ │ │ ├── exceptions/
│ │ │ │ │ └── DefaultRegionRequiredException.ts
│ │ │ │ ├── guards/
│ │ │ │ │ ├── organization-access.guard.ts
│ │ │ │ │ ├── organization-action.guard.ts
│ │ │ │ │ └── organization-resource-action.guard.ts
│ │ │ │ ├── helpers/
│ │ │ │ │ └── organization-usage.helper.ts
│ │ │ │ ├── organization.module.ts
│ │ │ │ └── services/
│ │ │ │ ├── organization-invitation.service.ts
│ │ │ │ ├── organization-role.service.ts
│ │ │ │ ├── organization-usage.service.ts
│ │ │ │ ├── organization-user.service.ts
│ │ │ │ └── organization.service.ts
│ │ │ ├── region/
│ │ │ │ ├── constants/
│ │ │ │ │ ├── region-events.constant.ts
│ │ │ │ │ └── region-name-regex.constant.ts
│ │ │ │ ├── controllers/
│ │ │ │ │ └── region.controller.ts
│ │ │ │ ├── dto/
│ │ │ │ │ ├── create-region-internal.dto.ts
│ │ │ │ │ ├── create-region.dto.ts
│ │ │ │ │ ├── create-region.internal.dto.ts
│ │ │ │ │ ├── regenerate-api-key.dto.ts
│ │ │ │ │ ├── region.dto.ts
│ │ │ │ │ ├── snapshot-manager-credentials.dto.ts
│ │ │ │ │ └── update-region.dto.ts
│ │ │ │ ├── entities/
│ │ │ │ │ └── region.entity.ts
│ │ │ │ ├── enums/
│ │ │ │ │ └── region-type.enum.ts
│ │ │ │ ├── events/
│ │ │ │ │ ├── region-created.event.ts
│ │ │ │ │ ├── region-deleted.event.ts
│ │ │ │ │ └── region-snapshot-manager-creds.event.ts
│ │ │ │ ├── guards/
│ │ │ │ │ └── region-access.guard.ts
│ │ │ │ ├── region.module.ts
│ │ │ │ └── services/
│ │ │ │ └── region.service.ts
│ │ │ ├── sandbox/
│ │ │ │ ├── common/
│ │ │ │ │ ├── redis-lock.provider.ts
│ │ │ │ │ └── runner-service-info.ts
│ │ │ │ ├── constants/
│ │ │ │ │ ├── errors-for-recovery.ts
│ │ │ │ │ ├── runner-events.ts
│ │ │ │ │ ├── runner-name-regex.constant.ts
│ │ │ │ │ ├── sandbox-events.constants.ts
│ │ │ │ │ ├── sandbox.constants.ts
│ │ │ │ │ ├── snapshot-events.ts
│ │ │ │ │ ├── volume-events.ts
│ │ │ │ │ └── warmpool-events.constants.ts
│ │ │ │ ├── controllers/
│ │ │ │ │ ├── job.controller.ts
│ │ │ │ │ ├── preview.controller.ts
│ │ │ │ │ ├── runner.controller.ts
│ │ │ │ │ ├── sandbox.controller.ts
│ │ │ │ │ ├── snapshot.controller.ts
│ │ │ │ │ ├── toolbox.deprecated.controller.ts
│ │ │ │ │ ├── volume.controller.ts
│ │ │ │ │ └── workspace.deprecated.controller.ts
│ │ │ │ ├── dto/
│ │ │ │ │ ├── build-info.dto.ts
│ │ │ │ │ ├── create-build-info.dto.ts
│ │ │ │ │ ├── create-runner-internal.dto.ts
│ │ │ │ │ ├── create-runner-response.dto.ts
│ │ │ │ │ ├── create-runner.dto.ts
│ │ │ │ │ ├── create-sandbox.dto.ts
│ │ │ │ │ ├── create-snapshot.dto.ts
│ │ │ │ │ ├── create-volume.dto.ts
│ │ │ │ │ ├── create-workspace.deprecated.dto.ts
│ │ │ │ │ ├── download-files.dto.ts
│ │ │ │ │ ├── job-type-map.dto.ts
│ │ │ │ │ ├── job.dto.ts
│ │ │ │ │ ├── list-sandboxes-query.dto.ts
│ │ │ │ │ ├── list-snapshots-query.dto.ts
│ │ │ │ │ ├── lsp.dto.ts
│ │ │ │ │ ├── paginated-sandboxes.dto.ts
│ │ │ │ │ ├── paginated-snapshots.dto.ts
│ │ │ │ │ ├── port-preview-url.dto.ts
│ │ │ │ │ ├── registry-push-access-dto.ts
│ │ │ │ │ ├── resize-sandbox.dto.ts
│ │ │ │ │ ├── runner-full.dto.ts
│ │ │ │ │ ├── runner-health.dto.ts
│ │ │ │ │ ├── runner-snapshot.dto.ts
│ │ │ │ │ ├── runner-status.dto.ts
│ │ │ │ │ ├── runner.dto.ts
│ │ │ │ │ ├── sandbox.dto.ts
│ │ │ │ │ ├── snapshot.dto.ts
│ │ │ │ │ ├── ssh-access.dto.ts
│ │ │ │ │ ├── storage-access-dto.ts
│ │ │ │ │ ├── toolbox-proxy-url.dto.ts
│ │ │ │ │ ├── toolbox.deprecated.dto.ts
│ │ │ │ │ ├── update-sandbox-network-settings.dto.ts
│ │ │ │ │ ├── update-sandbox-state.dto.ts
│ │ │ │ │ ├── update-snapshot.dto.ts
│ │ │ │ │ ├── upload-file.dto.ts
│ │ │ │ │ ├── volume.dto.ts
│ │ │ │ │ ├── workspace-port-preview-url.deprecated.dto.ts
│ │ │ │ │ └── workspace.deprecated.dto.ts
│ │ │ │ ├── entities/
│ │ │ │ │ ├── build-info.entity.ts
│ │ │ │ │ ├── job.entity.ts
│ │ │ │ │ ├── runner.entity.ts
│ │ │ │ │ ├── sandbox.entity.ts
│ │ │ │ │ ├── snapshot-region.entity.ts
│ │ │ │ │ ├── snapshot-runner.entity.ts
│ │ │ │ │ ├── snapshot.entity.ts
│ │ │ │ │ ├── ssh-access.entity.ts
│ │ │ │ │ ├── volume.entity.ts
│ │ │ │ │ └── warm-pool.entity.ts
│ │ │ │ ├── enums/
│ │ │ │ │ ├── backup-state.enum.ts
│ │ │ │ │ ├── job-status.enum.ts
│ │ │ │ │ ├── job-type.enum.ts
│ │ │ │ │ ├── resource-type.enum.ts
│ │ │ │ │ ├── runner-state.enum.ts
│ │ │ │ │ ├── sandbox-class.enum.ts
│ │ │ │ │ ├── sandbox-desired-state.enum.ts
│ │ │ │ │ ├── sandbox-state.enum.ts
│ │ │ │ │ ├── snapshot-runner-state.enum.ts
│ │ │ │ │ ├── snapshot-state.enum.ts
│ │ │ │ │ └── volume-state.enum.ts
│ │ │ │ ├── errors/
│ │ │ │ │ ├── runner-api-error.ts
│ │ │ │ │ ├── runner-not-ready.error.ts
│ │ │ │ │ └── snapshot-state-error.ts
│ │ │ │ ├── events/
│ │ │ │ │ ├── runner-created.event.ts
│ │ │ │ │ ├── runner-deleted.event.ts
│ │ │ │ │ ├── runner-state-updated.event.ts
│ │ │ │ │ ├── runner-unschedulable-updated.event.ts
│ │ │ │ │ ├── sandbox-archived.event.ts
│ │ │ │ │ ├── sandbox-backup-created.event.ts
│ │ │ │ │ ├── sandbox-create.event.ts
│ │ │ │ │ ├── sandbox-desired-state-updated.event.ts
│ │ │ │ │ ├── sandbox-destroyed.event.ts
│ │ │ │ │ ├── sandbox-organization-updated.event.ts
│ │ │ │ │ ├── sandbox-public-status-updated.event.ts
│ │ │ │ │ ├── sandbox-started.event.ts
│ │ │ │ │ ├── sandbox-state-updated.event.ts
│ │ │ │ │ ├── sandbox-stopped.event.ts
│ │ │ │ │ ├── snapshot-activated.event.ts
│ │ │ │ │ ├── snapshot-created.event.ts
│ │ │ │ │ ├── snapshot-removed.event.ts
│ │ │ │ │ ├── snapshot-state-updated.event.ts
│ │ │ │ │ ├── volume-created.event.ts
│ │ │ │ │ ├── volume-last-used-at-updated.event.ts
│ │ │ │ │ ├── volume-state-updated.event.ts
│ │ │ │ │ └── warmpool-topup-requested.event.ts
│ │ │ │ ├── guards/
│ │ │ │ │ ├── job-access.guard.ts
│ │ │ │ │ ├── proxy.guard.ts
│ │ │ │ │ ├── region-runner-access.guard.ts
│ │ │ │ │ ├── region-sandbox-access.guard.ts
│ │ │ │ │ ├── runner-access.guard.ts
│ │ │ │ │ ├── sandbox-access.guard.ts
│ │ │ │ │ ├── snapshot-access.guard.ts
│ │ │ │ │ ├── snapshot-read-access.guard.ts
│ │ │ │ │ ├── ssh-gateway.guard.ts
│ │ │ │ │ └── volume-access.guard.ts
│ │ │ │ ├── managers/
│ │ │ │ │ ├── backup.manager.ts
│ │ │ │ │ ├── sandbox-actions/
│ │ │ │ │ │ ├── sandbox-archive.action.ts
│ │ │ │ │ │ ├── sandbox-destroy.action.ts
│ │ │ │ │ │ ├── sandbox-start.action.ts
│ │ │ │ │ │ ├── sandbox-stop.action.ts
│ │ │ │ │ │ └── sandbox.action.ts
│ │ │ │ │ ├── sandbox.manager.ts
│ │ │ │ │ ├── snapshot.manager.ts
│ │ │ │ │ └── volume.manager.ts
│ │ │ │ ├── proxy/
│ │ │ │ │ └── log-proxy.ts
│ │ │ │ ├── repositories/
│ │ │ │ │ └── sandbox.repository.ts
│ │ │ │ ├── runner-adapter/
│ │ │ │ │ ├── runnerAdapter.ts
│ │ │ │ │ ├── runnerAdapter.v0.ts
│ │ │ │ │ └── runnerAdapter.v2.ts
│ │ │ │ ├── sandbox.module.ts
│ │ │ │ ├── services/
│ │ │ │ │ ├── job-state-handler.service.ts
│ │ │ │ │ ├── job.service.ts
│ │ │ │ │ ├── proxy-cache-invalidation.service.ts
│ │ │ │ │ ├── runner.service.ts
│ │ │ │ │ ├── sandbox-lookup-cache-invalidation.service.ts
│ │ │ │ │ ├── sandbox-warm-pool.service.ts
│ │ │ │ │ ├── sandbox.service.ts
│ │ │ │ │ ├── snapshot.service.ts
│ │ │ │ │ ├── toolbox.deprecated.service.ts
│ │ │ │ │ └── volume.service.ts
│ │ │ │ ├── subscribers/
│ │ │ │ │ ├── runner.subscriber.ts
│ │ │ │ │ ├── snapshot.subscriber.ts
│ │ │ │ │ └── volume.subscriber.ts
│ │ │ │ └── utils/
│ │ │ │ ├── lock-key.util.ts
│ │ │ │ ├── network-validation.util.ts
│ │ │ │ ├── runner-lookup-cache.util.ts
│ │ │ │ ├── sandbox-lookup-cache.util.ts
│ │ │ │ ├── sanitize-error.util.ts
│ │ │ │ └── volume-mount-path-validation.util.ts
│ │ │ ├── sandbox-telemetry/
│ │ │ │ ├── controllers/
│ │ │ │ │ └── sandbox-telemetry.controller.ts
│ │ │ │ ├── dto/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── log-entry.dto.ts
│ │ │ │ │ ├── metrics-response.dto.ts
│ │ │ │ │ ├── paginated-logs.dto.ts
│ │ │ │ │ ├── paginated-traces.dto.ts
│ │ │ │ │ ├── telemetry-query-params.dto.ts
│ │ │ │ │ ├── trace-span.dto.ts
│ │ │ │ │ └── trace-summary.dto.ts
│ │ │ │ ├── guards/
│ │ │ │ │ └── analytics-api-disabled.guard.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── sandbox-telemetry.module.ts
│ │ │ │ └── services/
│ │ │ │ └── sandbox-telemetry.service.ts
│ │ │ ├── tracing.ts
│ │ │ ├── usage/
│ │ │ │ ├── entities/
│ │ │ │ │ ├── sandbox-usage-period-archive.entity.ts
│ │ │ │ │ └── sandbox-usage-period.entity.ts
│ │ │ │ ├── services/
│ │ │ │ │ └── usage.service.ts
│ │ │ │ └── usage.module.ts
│ │ │ ├── user/
│ │ │ │ ├── constants/
│ │ │ │ │ ├── acount-provider-display-name.constant.ts
│ │ │ │ │ └── user-events.constant.ts
│ │ │ │ ├── dto/
│ │ │ │ │ ├── account-provider.dto.ts
│ │ │ │ │ ├── create-linked-account.dto.ts
│ │ │ │ │ ├── create-user.dto.ts
│ │ │ │ │ ├── update-user.dto.ts
│ │ │ │ │ ├── user-public-key.dto.ts
│ │ │ │ │ └── user.dto.ts
│ │ │ │ ├── enums/
│ │ │ │ │ ├── account-provider.enum.ts
│ │ │ │ │ └── system-role.enum.ts
│ │ │ │ ├── events/
│ │ │ │ │ ├── user-created.event.ts
│ │ │ │ │ ├── user-deleted.event.ts
│ │ │ │ │ └── user-email-verified.event.ts
│ │ │ │ ├── user.controller.ts
│ │ │ │ ├── user.entity.ts
│ │ │ │ ├── user.module.ts
│ │ │ │ └── user.service.ts
│ │ │ └── webhook/
│ │ │ ├── README.md
│ │ │ ├── constants/
│ │ │ │ └── webhook-events.constants.ts
│ │ │ ├── controllers/
│ │ │ │ └── webhook.controller.ts
│ │ │ ├── dto/
│ │ │ │ ├── send-webhook.dto.ts
│ │ │ │ ├── webhook-app-portal-access.dto.ts
│ │ │ │ ├── webhook-event-payloads.dto.ts
│ │ │ │ └── webhook-initialization-status.dto.ts
│ │ │ ├── entities/
│ │ │ │ └── webhook-initialization.entity.ts
│ │ │ ├── index.ts
│ │ │ ├── services/
│ │ │ │ ├── webhook-event-handler.service.ts
│ │ │ │ └── webhook.service.ts
│ │ │ └── webhook.module.ts
│ │ ├── tsconfig.app.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.spec.json
│ │ └── webpack.config.js
│ ├── cli/
│ │ ├── apiclient/
│ │ │ ├── api_client.go
│ │ │ └── error_handler.go
│ │ ├── auth/
│ │ │ ├── auth.go
│ │ │ └── auth_success.html
│ │ ├── cmd/
│ │ │ ├── auth/
│ │ │ │ ├── login.go
│ │ │ │ └── logout.go
│ │ │ ├── autocomplete.go
│ │ │ ├── common/
│ │ │ │ ├── aliases.go
│ │ │ │ ├── build.go
│ │ │ │ ├── format.go
│ │ │ │ ├── logs.go
│ │ │ │ ├── organization.go
│ │ │ │ ├── sandbox.go
│ │ │ │ ├── ssh.go
│ │ │ │ ├── ssh_unix.go
│ │ │ │ ├── ssh_windows.go
│ │ │ │ ├── state.go
│ │ │ │ └── validate.go
│ │ │ ├── docs.go
│ │ │ ├── generatedocs.go
│ │ │ ├── mcp/
│ │ │ │ ├── agents/
│ │ │ │ │ ├── claude.go
│ │ │ │ │ ├── common.go
│ │ │ │ │ ├── cursor.go
│ │ │ │ │ └── windsurf.go
│ │ │ │ ├── config.go
│ │ │ │ ├── init.go
│ │ │ │ ├── mcp.go
│ │ │ │ └── start.go
│ │ │ ├── organization/
│ │ │ │ ├── create.go
│ │ │ │ ├── delete.go
│ │ │ │ ├── list.go
│ │ │ │ ├── organization.go
│ │ │ │ └── use.go
│ │ │ ├── sandbox/
│ │ │ │ ├── archive.go
│ │ │ │ ├── create.go
│ │ │ │ ├── delete.go
│ │ │ │ ├── exec.go
│ │ │ │ ├── info.go
│ │ │ │ ├── list.go
│ │ │ │ ├── preview_url.go
│ │ │ │ ├── sandbox.go
│ │ │ │ ├── ssh.go
│ │ │ │ ├── start.go
│ │ │ │ └── stop.go
│ │ │ ├── snapshot/
│ │ │ │ ├── create.go
│ │ │ │ ├── delete.go
│ │ │ │ ├── list.go
│ │ │ │ ├── push.go
│ │ │ │ └── snapshot.go
│ │ │ ├── version.go
│ │ │ └── volume/
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── get.go
│ │ │ ├── list.go
│ │ │ └── volume.go
│ │ ├── config/
│ │ │ └── config.go
│ │ ├── docker/
│ │ │ └── build.go
│ │ ├── docs/
│ │ │ ├── daytona.md
│ │ │ ├── daytona_archive.md
│ │ │ ├── daytona_autocomplete.md
│ │ │ ├── daytona_create.md
│ │ │ ├── daytona_delete.md
│ │ │ ├── daytona_docs.md
│ │ │ ├── daytona_exec.md
│ │ │ ├── daytona_info.md
│ │ │ ├── daytona_list.md
│ │ │ ├── daytona_login.md
│ │ │ ├── daytona_logout.md
│ │ │ ├── daytona_mcp.md
│ │ │ ├── daytona_mcp_config.md
│ │ │ ├── daytona_mcp_init.md
│ │ │ ├── daytona_mcp_start.md
│ │ │ ├── daytona_organization.md
│ │ │ ├── daytona_organization_create.md
│ │ │ ├── daytona_organization_delete.md
│ │ │ ├── daytona_organization_list.md
│ │ │ ├── daytona_organization_use.md
│ │ │ ├── daytona_preview-url.md
│ │ │ ├── daytona_snapshot.md
│ │ │ ├── daytona_snapshot_create.md
│ │ │ ├── daytona_snapshot_delete.md
│ │ │ ├── daytona_snapshot_list.md
│ │ │ ├── daytona_snapshot_push.md
│ │ │ ├── daytona_ssh.md
│ │ │ ├── daytona_start.md
│ │ │ ├── daytona_stop.md
│ │ │ ├── daytona_version.md
│ │ │ ├── daytona_volume.md
│ │ │ ├── daytona_volume_create.md
│ │ │ ├── daytona_volume_delete.md
│ │ │ ├── daytona_volume_get.md
│ │ │ └── daytona_volume_list.md
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── hack/
│ │ │ ├── build.sh
│ │ │ ├── docs/
│ │ │ │ ├── daytona.yaml
│ │ │ │ ├── daytona_archive.yaml
│ │ │ │ ├── daytona_autocomplete.yaml
│ │ │ │ ├── daytona_create.yaml
│ │ │ │ ├── daytona_delete.yaml
│ │ │ │ ├── daytona_docs.yaml
│ │ │ │ ├── daytona_exec.yaml
│ │ │ │ ├── daytona_info.yaml
│ │ │ │ ├── daytona_list.yaml
│ │ │ │ ├── daytona_login.yaml
│ │ │ │ ├── daytona_logout.yaml
│ │ │ │ ├── daytona_mcp.yaml
│ │ │ │ ├── daytona_mcp_config.yaml
│ │ │ │ ├── daytona_mcp_init.yaml
│ │ │ │ ├── daytona_mcp_start.yaml
│ │ │ │ ├── daytona_organization.yaml
│ │ │ │ ├── daytona_organization_create.yaml
│ │ │ │ ├── daytona_organization_delete.yaml
│ │ │ │ ├── daytona_organization_list.yaml
│ │ │ │ ├── daytona_organization_use.yaml
│ │ │ │ ├── daytona_preview-url.yaml
│ │ │ │ ├── daytona_snapshot.yaml
│ │ │ │ ├── daytona_snapshot_create.yaml
│ │ │ │ ├── daytona_snapshot_delete.yaml
│ │ │ │ ├── daytona_snapshot_list.yaml
│ │ │ │ ├── daytona_snapshot_push.yaml
│ │ │ │ ├── daytona_ssh.yaml
│ │ │ │ ├── daytona_start.yaml
│ │ │ │ ├── daytona_stop.yaml
│ │ │ │ ├── daytona_version.yaml
│ │ │ │ ├── daytona_volume.yaml
│ │ │ │ ├── daytona_volume_create.yaml
│ │ │ │ ├── daytona_volume_delete.yaml
│ │ │ │ ├── daytona_volume_get.yaml
│ │ │ │ └── daytona_volume_list.yaml
│ │ │ └── generate-cli-docs.sh
│ │ ├── internal/
│ │ │ ├── buildinfo.go
│ │ │ └── cmd.go
│ │ ├── main.go
│ │ ├── mcp/
│ │ │ ├── README.md
│ │ │ ├── server.go
│ │ │ └── tools/
│ │ │ ├── common.go
│ │ │ ├── create_folder.go
│ │ │ ├── create_sandbox.go
│ │ │ ├── delete_file.go
│ │ │ ├── destroy_sandbox.go
│ │ │ ├── download_file.go
│ │ │ ├── execute_command.go
│ │ │ ├── file_info.go
│ │ │ ├── git_clone.go
│ │ │ ├── list_files.go
│ │ │ ├── move_file.go
│ │ │ ├── preview_link.go
│ │ │ └── upload_file.go
│ │ ├── pkg/
│ │ │ └── minio/
│ │ │ └── minio.go
│ │ ├── project.json
│ │ ├── toolbox/
│ │ │ └── toolbox.go
│ │ ├── util/
│ │ │ └── pointer.go
│ │ └── views/
│ │ ├── common/
│ │ │ ├── common.go
│ │ │ ├── prompt.go
│ │ │ ├── select.go
│ │ │ └── styles.go
│ │ ├── organization/
│ │ │ ├── info.go
│ │ │ ├── list.go
│ │ │ └── select.go
│ │ ├── sandbox/
│ │ │ ├── info.go
│ │ │ └── list.go
│ │ ├── snapshot/
│ │ │ ├── info.go
│ │ │ └── list.go
│ │ ├── util/
│ │ │ ├── empty_list.go
│ │ │ ├── info.go
│ │ │ ├── spinner.go
│ │ │ ├── table.go
│ │ │ └── time.go
│ │ └── volume/
│ │ ├── info.go
│ │ └── list.go
│ ├── daemon/
│ │ ├── .gitignore
│ │ ├── cmd/
│ │ │ └── daemon/
│ │ │ ├── config/
│ │ │ │ └── config.go
│ │ │ └── main.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal/
│ │ │ ├── buildinfo.go
│ │ │ └── util/
│ │ │ ├── entrypoint_logs.go
│ │ │ ├── entrypoint_session.go
│ │ │ ├── log_reader.go
│ │ │ ├── pointer.go
│ │ │ ├── sandbox.go
│ │ │ ├── shell_quote.go
│ │ │ ├── version.go
│ │ │ ├── websocket.go
│ │ │ └── ws_keepalive.go
│ │ ├── pkg/
│ │ │ ├── common/
│ │ │ │ ├── errors.go
│ │ │ │ ├── get_shell.go
│ │ │ │ └── spawn_tty.go
│ │ │ ├── git/
│ │ │ │ ├── add.go
│ │ │ │ ├── branch.go
│ │ │ │ ├── checkout.go
│ │ │ │ ├── clone.go
│ │ │ │ ├── commit.go
│ │ │ │ ├── config.go
│ │ │ │ ├── log.go
│ │ │ │ ├── pull.go
│ │ │ │ ├── push.go
│ │ │ │ ├── service.go
│ │ │ │ ├── service_test.go
│ │ │ │ ├── status.go
│ │ │ │ └── types.go
│ │ │ ├── gitprovider/
│ │ │ │ └── types.go
│ │ │ ├── recording/
│ │ │ │ ├── delete.go
│ │ │ │ ├── get.go
│ │ │ │ ├── list.go
│ │ │ │ ├── service.go
│ │ │ │ ├── start.go
│ │ │ │ ├── stop.go
│ │ │ │ └── types.go
│ │ │ ├── recordingdashboard/
│ │ │ │ ├── assets.go
│ │ │ │ ├── server.go
│ │ │ │ └── static/
│ │ │ │ └── index.html
│ │ │ ├── session/
│ │ │ │ ├── command.go
│ │ │ │ ├── common.go
│ │ │ │ ├── create.go
│ │ │ │ ├── delete.go
│ │ │ │ ├── execute.go
│ │ │ │ ├── get.go
│ │ │ │ ├── input.go
│ │ │ │ ├── list.go
│ │ │ │ ├── log.go
│ │ │ │ ├── service.go
│ │ │ │ └── types.go
│ │ │ ├── ssh/
│ │ │ │ ├── config/
│ │ │ │ │ └── config.go
│ │ │ │ ├── server.go
│ │ │ │ └── unix_forward.go
│ │ │ ├── terminal/
│ │ │ │ ├── assets.go
│ │ │ │ ├── decoder.go
│ │ │ │ ├── server.go
│ │ │ │ └── static/
│ │ │ │ └── index.html
│ │ │ └── toolbox/
│ │ │ ├── computeruse/
│ │ │ │ ├── disabled_middleware.go
│ │ │ │ ├── handler.go
│ │ │ │ ├── interface.go
│ │ │ │ ├── lazy.go
│ │ │ │ ├── manager/
│ │ │ │ │ └── manager.go
│ │ │ │ ├── recording/
│ │ │ │ │ ├── controller.go
│ │ │ │ │ ├── download.go
│ │ │ │ │ ├── recording.go
│ │ │ │ │ ├── start.go
│ │ │ │ │ ├── stop.go
│ │ │ │ │ └── types.go
│ │ │ │ ├── rpc_client.go
│ │ │ │ └── rpc_server.go
│ │ │ ├── config/
│ │ │ │ └── config.go
│ │ │ ├── controller.go
│ │ │ ├── docs/
│ │ │ │ ├── docs.go
│ │ │ │ ├── swagger.json
│ │ │ │ └── swagger.yaml
│ │ │ ├── fs/
│ │ │ │ ├── create_folder.go
│ │ │ │ ├── delete_file.go
│ │ │ │ ├── download_file.go
│ │ │ │ ├── download_files.go
│ │ │ │ ├── find_in_files.go
│ │ │ │ ├── get_file_info.go
│ │ │ │ ├── list_files.go
│ │ │ │ ├── move_file.go
│ │ │ │ ├── replace_in_files.go
│ │ │ │ ├── search_files.go
│ │ │ │ ├── set_file_permissions.go
│ │ │ │ ├── types.go
│ │ │ │ ├── upload_file.go
│ │ │ │ └── upload_files.go
│ │ │ ├── git/
│ │ │ │ ├── add.go
│ │ │ │ ├── checkout.go
│ │ │ │ ├── clone_repository.go
│ │ │ │ ├── commit.go
│ │ │ │ ├── create_branch.go
│ │ │ │ ├── delete_branch.go
│ │ │ │ ├── history.go
│ │ │ │ ├── list_branches.go
│ │ │ │ ├── pull.go
│ │ │ │ ├── push.go
│ │ │ │ ├── status.go
│ │ │ │ └── types.go
│ │ │ ├── lsp/
│ │ │ │ ├── client.go
│ │ │ │ ├── lsp.go
│ │ │ │ ├── python_lsp.go
│ │ │ │ ├── server.go
│ │ │ │ ├── service.go
│ │ │ │ ├── types.go
│ │ │ │ └── typescript_lsp.go
│ │ │ ├── middlewares/
│ │ │ │ └── error.go
│ │ │ ├── port/
│ │ │ │ ├── detector.go
│ │ │ │ └── types.go
│ │ │ ├── process/
│ │ │ │ ├── execute.go
│ │ │ │ ├── interpreter/
│ │ │ │ │ ├── controller.go
│ │ │ │ │ ├── manager.go
│ │ │ │ │ ├── repl_client.go
│ │ │ │ │ ├── repl_worker.py
│ │ │ │ │ ├── types.go
│ │ │ │ │ └── websocket.go
│ │ │ │ ├── pty/
│ │ │ │ │ ├── controller.go
│ │ │ │ │ ├── manager.go
│ │ │ │ │ ├── session.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ ├── websocket.go
│ │ │ │ │ └── ws_client.go
│ │ │ │ ├── session/
│ │ │ │ │ ├── controller.go
│ │ │ │ │ ├── execute.go
│ │ │ │ │ ├── input.go
│ │ │ │ │ ├── log.go
│ │ │ │ │ ├── session.go
│ │ │ │ │ └── types.go
│ │ │ │ └── types.go
│ │ │ ├── proxy/
│ │ │ │ └── proxy.go
│ │ │ ├── server.go
│ │ │ ├── telemetry.go
│ │ │ ├── types.go
│ │ │ └── validator.go
│ │ ├── project.json
│ │ └── tools/
│ │ └── xterm.go
│ ├── dashboard/
│ │ ├── .prettierignore
│ │ ├── .storybook/
│ │ │ ├── main.ts
│ │ │ ├── preview.tsx
│ │ │ └── tsconfig.json
│ │ ├── eslint.config.mjs
│ │ ├── index.html
│ │ ├── postcss.config.js
│ │ ├── project.json
│ │ ├── public/
│ │ │ └── mockServiceWorker.js
│ │ ├── src/
│ │ │ ├── App.css
│ │ │ ├── App.tsx
│ │ │ ├── api/
│ │ │ │ ├── apiClient.ts
│ │ │ │ └── errors.ts
│ │ │ ├── assets/
│ │ │ │ └── Logo.tsx
│ │ │ ├── billing-api/
│ │ │ │ ├── billingApiClient.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── types/
│ │ │ │ ├── Invoice.ts
│ │ │ │ ├── OrganizationEmail.ts
│ │ │ │ ├── OrganizationTier.ts
│ │ │ │ ├── OrganizationUsage.ts
│ │ │ │ ├── OrganizationWallet.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── tier.ts
│ │ │ ├── components/
│ │ │ │ ├── AccountProviderIcon.tsx
│ │ │ │ ├── AnnouncementBanner.tsx
│ │ │ │ ├── ApiKeyTable.tsx
│ │ │ │ ├── AuditLogTable.tsx
│ │ │ │ ├── Banner.tsx
│ │ │ │ ├── CodeBlock.tsx
│ │ │ │ ├── CommandPalette.tsx
│ │ │ │ ├── ComparisonTable.tsx
│ │ │ │ ├── CopyButton.tsx
│ │ │ │ ├── CreateApiKeyDialog.tsx
│ │ │ │ ├── CreateRegionDialog.tsx
│ │ │ │ ├── CreateRunnerDialog.tsx
│ │ │ │ ├── DebouncedInput.tsx
│ │ │ │ ├── EllipsisWithTooltip.tsx
│ │ │ │ ├── ErrorBoundaryFallback.tsx
│ │ │ │ ├── Invoices/
│ │ │ │ │ ├── InvoicesTableActions.tsx
│ │ │ │ │ ├── InvoicesTableHeader.tsx
│ │ │ │ │ ├── columns.tsx
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── useInvoicesTable.ts
│ │ │ │ ├── LimitUsageChart.tsx
│ │ │ │ ├── LiveIndicator.tsx
│ │ │ │ ├── LoadingFallback.tsx
│ │ │ │ ├── OrganizationMembers/
│ │ │ │ │ ├── CancelOrganizationInvitationDialog.tsx
│ │ │ │ │ ├── CreateOrganizationInvitationDialog.tsx
│ │ │ │ │ ├── OrganizationInvitationTable.tsx
│ │ │ │ │ ├── OrganizationMemberTable.tsx
│ │ │ │ │ ├── RemoveOrganizationMemberDialog.tsx
│ │ │ │ │ ├── UpdateOrganizationInvitationDialog.tsx
│ │ │ │ │ ├── UpdateOrganizationMemberAccessDialog.tsx
│ │ │ │ │ └── ViewerOrganizationRoleCheckbox.tsx
│ │ │ │ ├── OrganizationRoles/
│ │ │ │ │ ├── CreateOrganizationRoleDialog.tsx
│ │ │ │ │ ├── DeleteOrganizationRoleDialog.tsx
│ │ │ │ │ ├── OrganizationRoleTable.tsx
│ │ │ │ │ └── UpdateOrganizationRoleDialog.tsx
│ │ │ │ ├── Organizations/
│ │ │ │ │ ├── CreateOrganizationDialog.tsx
│ │ │ │ │ ├── DeleteOrganizationDialog.tsx
│ │ │ │ │ ├── LeaveOrganizationDialog.tsx
│ │ │ │ │ ├── OrganizationPicker.tsx
│ │ │ │ │ └── SetDefaultRegionDialog.tsx
│ │ │ │ ├── PageLayout.tsx
│ │ │ │ ├── Pagination.tsx
│ │ │ │ ├── Playground/
│ │ │ │ │ ├── ActionForm.tsx
│ │ │ │ │ ├── ActionRunButton.tsx
│ │ │ │ │ ├── Inputs/
│ │ │ │ │ │ ├── CheckboxInput.tsx
│ │ │ │ │ │ ├── InlineInputFormControl.tsx
│ │ │ │ │ │ ├── Label.tsx
│ │ │ │ │ │ ├── NumberInput.tsx
│ │ │ │ │ │ ├── SelectInput.tsx
│ │ │ │ │ │ ├── StackedInputFormControl.tsx
│ │ │ │ │ │ └── TextInput.tsx
│ │ │ │ │ ├── PlaygroundLayout.tsx
│ │ │ │ │ ├── ResponseCard.tsx
│ │ │ │ │ ├── Sandbox/
│ │ │ │ │ │ ├── CodeSnippets/
│ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ ├── python.ts
│ │ │ │ │ │ │ ├── types.ts
│ │ │ │ │ │ │ ├── typescript.ts
│ │ │ │ │ │ │ └── utils.ts
│ │ │ │ │ │ ├── CodeSnippetsResponse.tsx
│ │ │ │ │ │ └── Parameters/
│ │ │ │ │ │ ├── FileSystem.tsx
│ │ │ │ │ │ ├── GitOperations.tsx
│ │ │ │ │ │ ├── Management.tsx
│ │ │ │ │ │ ├── ProcessCodeExecution.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── Terminal/
│ │ │ │ │ │ ├── Description.tsx
│ │ │ │ │ │ └── WebTerminal.tsx
│ │ │ │ │ ├── VNC/
│ │ │ │ │ │ ├── DesktopWindowResponse.tsx
│ │ │ │ │ │ └── Interaction/
│ │ │ │ │ │ ├── Display.tsx
│ │ │ │ │ │ ├── Keyboard.tsx
│ │ │ │ │ │ ├── Mouse.tsx
│ │ │ │ │ │ ├── Screenshot.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── Window.tsx
│ │ │ │ ├── PostHogProviderWrapper.tsx
│ │ │ │ ├── PrivacyBanner.tsx
│ │ │ │ ├── PrivacyPreferencesDialog.tsx
│ │ │ │ ├── QuotaLine.tsx
│ │ │ │ ├── RegionDetailsSheet.tsx
│ │ │ │ ├── RegionTable.tsx
│ │ │ │ ├── RegistryTable.tsx
│ │ │ │ ├── ResourceChip.tsx
│ │ │ │ ├── RunnerDetailsSheet.tsx
│ │ │ │ ├── RunnerTable.tsx
│ │ │ │ ├── Sandbox/
│ │ │ │ │ └── CreateSandboxSheet.tsx
│ │ │ │ ├── SandboxDetailsSheet.tsx
│ │ │ │ ├── SandboxTable/
│ │ │ │ │ ├── BulkActionAlertDialog.tsx
│ │ │ │ │ ├── SandboxState.tsx
│ │ │ │ │ ├── SandboxTableActions.tsx
│ │ │ │ │ ├── SandboxTableHeader.tsx
│ │ │ │ │ ├── columns.tsx
│ │ │ │ │ ├── constants.ts
│ │ │ │ │ ├── filters/
│ │ │ │ │ │ ├── LabelFilter.tsx
│ │ │ │ │ │ ├── LastEventFilter.tsx
│ │ │ │ │ │ ├── RegionFilter.tsx
│ │ │ │ │ │ ├── ResourceFilter.tsx
│ │ │ │ │ │ ├── SnapshotFilter.tsx
│ │ │ │ │ │ └── StateFilter.tsx
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── state-icons.tsx
│ │ │ │ │ ├── types.ts
│ │ │ │ │ ├── useSandboxCommands.tsx
│ │ │ │ │ └── useSandboxTable.ts
│ │ │ │ ├── SelectionToast.tsx
│ │ │ │ ├── Sidebar.tsx
│ │ │ │ ├── SortIcon.tsx
│ │ │ │ ├── TableColumnVisibilityToggle.tsx
│ │ │ │ ├── TableEmptyState.tsx
│ │ │ │ ├── TierComparisonTable.tsx
│ │ │ │ ├── TierUpgradeCard.tsx
│ │ │ │ ├── TimestampTooltip.tsx
│ │ │ │ ├── Tooltip.tsx
│ │ │ │ ├── TooltipButton.tsx
│ │ │ │ ├── UpdateRegionDialog.tsx
│ │ │ │ ├── UsageOverview.tsx
│ │ │ │ ├── UsageOverviewIndicator.tsx
│ │ │ │ ├── UserOrganizationInvitations/
│ │ │ │ │ ├── DeclineOrganizationInvitationDialog.tsx
│ │ │ │ │ ├── OrganizationInvitationActionDialog.tsx
│ │ │ │ │ └── UserOrganizationInvitationTable.tsx
│ │ │ │ ├── VerifyEmailDialog.tsx
│ │ │ │ ├── VolumeTable.tsx
│ │ │ │ ├── Webhooks/
│ │ │ │ │ ├── CreateEndpointDialog.tsx
│ │ │ │ │ ├── DeliveryStatsLine.tsx
│ │ │ │ │ ├── EditEndpointDialog.tsx
│ │ │ │ │ ├── EndpointEventsTable/
│ │ │ │ │ │ ├── EndpointEventsTable.tsx
│ │ │ │ │ │ ├── EventDetailsSheet.tsx
│ │ │ │ │ │ ├── columns.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── MessageAttemptsTable.tsx
│ │ │ │ │ ├── WebhooksEndpointTable/
│ │ │ │ │ │ ├── WebhooksEndpointTable.tsx
│ │ │ │ │ │ ├── columns.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── WebhooksMessagesTable/
│ │ │ │ │ ├── MessageDetailsSheet.tsx
│ │ │ │ │ ├── WebhooksMessagesTable.tsx
│ │ │ │ │ └── columns.tsx
│ │ │ │ ├── sandboxes/
│ │ │ │ │ ├── CreateSshAccessDialog.tsx
│ │ │ │ │ ├── RevokeSshAccessDialog.tsx
│ │ │ │ │ ├── SandboxContentTabs.tsx
│ │ │ │ │ ├── SandboxDetails.tsx
│ │ │ │ │ ├── SandboxHeader.tsx
│ │ │ │ │ ├── SandboxInfoPanel.tsx
│ │ │ │ │ ├── SandboxLogsTab.tsx
│ │ │ │ │ ├── SandboxMetricsTab.tsx
│ │ │ │ │ ├── SandboxSpendingTab.tsx
│ │ │ │ │ ├── SandboxTerminalTab.tsx
│ │ │ │ │ ├── SandboxTracesTab.tsx
│ │ │ │ │ ├── SandboxVncTab.tsx
│ │ │ │ │ ├── SearchParams.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── snapshots/
│ │ │ │ │ ├── CreateSnapshotDialog.tsx
│ │ │ │ │ └── SnapshotTable/
│ │ │ │ │ ├── BulkActionAlertDialog.tsx
│ │ │ │ │ ├── SnapshotTable.tsx
│ │ │ │ │ ├── columns.tsx
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── useSnapshotsCommands.tsx
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── spending/
│ │ │ │ │ ├── AggregatedUsageChart.tsx
│ │ │ │ │ ├── CostBreakdown.tsx
│ │ │ │ │ ├── ResourceUsageChart.tsx
│ │ │ │ │ ├── SandboxSpendingTab.tsx
│ │ │ │ │ ├── SandboxUsageTable.tsx
│ │ │ │ │ ├── UsageTimelineChart.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── telemetry/
│ │ │ │ │ ├── LogsTab.tsx
│ │ │ │ │ ├── MetricsTab.tsx
│ │ │ │ │ ├── SeverityBadge.tsx
│ │ │ │ │ ├── TimeRangeSelector.tsx
│ │ │ │ │ ├── TraceDetailsSheet.tsx
│ │ │ │ │ ├── TracesTab.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ └── ui/
│ │ │ │ ├── accordion.tsx
│ │ │ │ ├── alert-dialog.tsx
│ │ │ │ ├── alert.tsx
│ │ │ │ ├── badge.tsx
│ │ │ │ ├── button-group.tsx
│ │ │ │ ├── button.tsx
│ │ │ │ ├── calendar.tsx
│ │ │ │ ├── card.tsx
│ │ │ │ ├── chart.tsx
│ │ │ │ ├── checkbox.tsx
│ │ │ │ ├── command.tsx
│ │ │ │ ├── data-table-faceted-filter.tsx
│ │ │ │ ├── date-picker.tsx
│ │ │ │ ├── date-range-picker.tsx
│ │ │ │ ├── dialog.tsx
│ │ │ │ ├── drawer.tsx
│ │ │ │ ├── dropdown-menu.tsx
│ │ │ │ ├── empty.tsx
│ │ │ │ ├── facet-filter.tsx
│ │ │ │ ├── field.tsx
│ │ │ │ ├── input-group.tsx
│ │ │ │ ├── input.tsx
│ │ │ │ ├── kbd.tsx
│ │ │ │ ├── label.tsx
│ │ │ │ ├── popover.tsx
│ │ │ │ ├── radio-group.tsx
│ │ │ │ ├── scroll-area.tsx
│ │ │ │ ├── select.tsx
│ │ │ │ ├── separator.tsx
│ │ │ │ ├── sheet.tsx
│ │ │ │ ├── sidebar.tsx
│ │ │ │ ├── skeleton.tsx
│ │ │ │ ├── slider.tsx
│ │ │ │ ├── sonner.tsx
│ │ │ │ ├── spinner.tsx
│ │ │ │ ├── stories/
│ │ │ │ │ ├── accordion.stories.tsx
│ │ │ │ │ ├── alert-dialog.stories.tsx
│ │ │ │ │ ├── alert.stories.tsx
│ │ │ │ │ ├── badge.stories.tsx
│ │ │ │ │ ├── button.stories.tsx
│ │ │ │ │ ├── calendar.stories.tsx
│ │ │ │ │ ├── card.stories.tsx
│ │ │ │ │ ├── chart.stories.tsx
│ │ │ │ │ ├── checkbox.stories.tsx
│ │ │ │ │ ├── colors.stories.tsx
│ │ │ │ │ ├── command.stories.tsx
│ │ │ │ │ ├── date-picker.stories.tsx
│ │ │ │ │ ├── dialog.stories.tsx
│ │ │ │ │ ├── drawer.stories.tsx
│ │ │ │ │ ├── dropdown-menu.stories.tsx
│ │ │ │ │ ├── facet-filter.stories.tsx
│ │ │ │ │ ├── field.stories.tsx
│ │ │ │ │ ├── input-group.stories.tsx
│ │ │ │ │ ├── input.stories.tsx
│ │ │ │ │ ├── kbd.stories.tsx
│ │ │ │ │ ├── label.stories.tsx
│ │ │ │ │ ├── popover.stories.tsx
│ │ │ │ │ ├── radio-group.stories.tsx
│ │ │ │ │ ├── scroll-area.stories.tsx
│ │ │ │ │ ├── select.stories.tsx
│ │ │ │ │ ├── separator.stories.tsx
│ │ │ │ │ ├── sheet.stories.tsx
│ │ │ │ │ ├── sidebar.stories.tsx
│ │ │ │ │ ├── skeleton.stories.tsx
│ │ │ │ │ ├── slider.stories.tsx
│ │ │ │ │ ├── sonner.stories.tsx
│ │ │ │ │ ├── spinner.stories.tsx
│ │ │ │ │ ├── switch.stories.tsx
│ │ │ │ │ ├── table.stories.tsx
│ │ │ │ │ ├── tabs.stories.tsx
│ │ │ │ │ ├── textarea.stories.tsx
│ │ │ │ │ ├── toggle-group.stories.tsx
│ │ │ │ │ ├── toggle.stories.tsx
│ │ │ │ │ └── tooltip.stories.tsx
│ │ │ │ ├── switch.tsx
│ │ │ │ ├── table.tsx
│ │ │ │ ├── tabs.tsx
│ │ │ │ ├── textarea.tsx
│ │ │ │ ├── toggle-group.tsx
│ │ │ │ ├── toggle.tsx
│ │ │ │ └── tooltip.tsx
│ │ │ ├── constants/
│ │ │ │ ├── CreateApiKeyPermissionsGroups.ts
│ │ │ │ ├── ExternalLinks.ts
│ │ │ │ ├── OrganizationPermissionsGroups.ts
│ │ │ │ ├── Pagination.ts
│ │ │ │ ├── Playground.ts
│ │ │ │ ├── limits.ts
│ │ │ │ ├── metrics.ts
│ │ │ │ └── webhook-events.ts
│ │ │ ├── contexts/
│ │ │ │ ├── ApiContext.tsx
│ │ │ │ ├── ConfigContext.tsx
│ │ │ │ ├── NotificationSocketContext.tsx
│ │ │ │ ├── OrganizationsContext.tsx
│ │ │ │ ├── PlaygroundContext.tsx
│ │ │ │ ├── RegionsContext.tsx
│ │ │ │ ├── SandboxSessionContext.tsx
│ │ │ │ ├── SelectedOrganizationContext.tsx
│ │ │ │ ├── ThemeContext.tsx
│ │ │ │ └── UserOrganizationInvitationsContext.tsx
│ │ │ ├── enums/
│ │ │ │ ├── FeatureFlags.ts
│ │ │ │ ├── LocalStorageKey.ts
│ │ │ │ ├── Playground.ts
│ │ │ │ └── RoutePath.ts
│ │ │ ├── hooks/
│ │ │ │ ├── mutations/
│ │ │ │ │ ├── useArchiveSandboxMutation.ts
│ │ │ │ │ ├── useCreateApiKeyMutation.ts
│ │ │ │ │ ├── useCreateInvoicePaymentUrlMutation.ts
│ │ │ │ │ ├── useCreateSandboxMutation.tsx
│ │ │ │ │ ├── useCreateSnapshotMutation.tsx
│ │ │ │ │ ├── useCreateSshAccessMutation.ts
│ │ │ │ │ ├── useDeleteOrganizationMutation.ts
│ │ │ │ │ ├── useDeleteSandboxMutation.ts
│ │ │ │ │ ├── useDeleteWebhookEndpointMutation.ts
│ │ │ │ │ ├── useDowngradeTierMutation.ts
│ │ │ │ │ ├── useEnrollInSmsMfaMutation.ts
│ │ │ │ │ ├── useLeaveOrganizationMutation.ts
│ │ │ │ │ ├── useRecoverSandboxMutation.ts
│ │ │ │ │ ├── useRedeemCouponMutation.ts
│ │ │ │ │ ├── useReplayWebhookEventMutation.tsx
│ │ │ │ │ ├── useRevokeApiKeyMutation.ts
│ │ │ │ │ ├── useRevokeSshAccessMutation.ts
│ │ │ │ │ ├── useRotateWebhookSecretMutation.ts
│ │ │ │ │ ├── useSetAutomaticTopUpMutation.ts
│ │ │ │ │ ├── useSetOrganizationDefaultRegionMutation.ts
│ │ │ │ │ ├── useStartSandboxMutation.ts
│ │ │ │ │ ├── useStartVncMutation.ts
│ │ │ │ │ ├── useStopSandboxMutation.ts
│ │ │ │ │ ├── useTopUpWalletMutation.ts
│ │ │ │ │ ├── useUnlinkAccountMutation.ts
│ │ │ │ │ ├── useUpdateWebhookEndpointMutation.ts
│ │ │ │ │ ├── useUpgradeTierMutation.ts
│ │ │ │ │ └── useVoidInvoiceMutation.ts
│ │ │ │ ├── queries/
│ │ │ │ │ ├── billingQueries.ts
│ │ │ │ │ ├── queryKeys.ts
│ │ │ │ │ ├── useAccountProvidersQuery.ts
│ │ │ │ │ ├── useAnalyticsUsage.ts
│ │ │ │ │ ├── useApiKeysQuery.ts
│ │ │ │ │ ├── useOrganizationBillingPortalUrlQuery.ts
│ │ │ │ │ ├── useOrganizationCheckoutUrlQuery.ts
│ │ │ │ │ ├── useOrganizationInvoicesQuery.ts
│ │ │ │ │ ├── useOrganizationTierQuery.ts
│ │ │ │ │ ├── useOrganizationUsageOverviewQuery.ts
│ │ │ │ │ ├── useOrganizationUsageQuery.ts
│ │ │ │ │ ├── useOrganizationWalletQuery.ts
│ │ │ │ │ ├── usePastOrganizationUsageQuery.ts
│ │ │ │ │ ├── useSandboxQuery.ts
│ │ │ │ │ ├── useSnapshotsQuery.ts
│ │ │ │ │ ├── useTerminalSessionQuery.ts
│ │ │ │ │ ├── useTiersQuery.ts
│ │ │ │ │ ├── useVncSessionQuery.ts
│ │ │ │ │ ├── useVncStatusQuery.ts
│ │ │ │ │ ├── useWebhookAppPortalAccessQuery.ts
│ │ │ │ │ └── useWebhookInitializationStatusQuery.ts
│ │ │ │ ├── use-mobile.tsx
│ │ │ │ ├── useApi.tsx
│ │ │ │ ├── useConfig.ts
│ │ │ │ ├── useCopyToClipboard.tsx
│ │ │ │ ├── useDeepCompareMemo.ts
│ │ │ │ ├── useDocsSearchCommands.tsx
│ │ │ │ ├── useMatchMedia.ts
│ │ │ │ ├── useNotificationSocket.ts
│ │ │ │ ├── useOrganizationRoles.ts
│ │ │ │ ├── useOrganizations.ts
│ │ │ │ ├── usePlayground.ts
│ │ │ │ ├── usePlaygroundSandbox.tsx
│ │ │ │ ├── useQueryCountdown.ts
│ │ │ │ ├── useRegions.ts
│ │ │ │ ├── useSandboxLogs.ts
│ │ │ │ ├── useSandboxMetrics.ts
│ │ │ │ ├── useSandboxSession.ts
│ │ │ │ ├── useSandboxSessionContext.ts
│ │ │ │ ├── useSandboxTraceSpans.ts
│ │ │ │ ├── useSandboxTraces.ts
│ │ │ │ ├── useSandboxWsSync.ts
│ │ │ │ ├── useSandboxes.ts
│ │ │ │ ├── useSelectedOrganization.ts
│ │ │ │ ├── useSuspensionBanner.tsx
│ │ │ │ ├── useUserOrganizationInvitations.ts
│ │ │ │ └── useWebhooks.ts
│ │ │ ├── index.css
│ │ │ ├── lib/
│ │ │ │ ├── bulk-action-toast.tsx
│ │ │ │ ├── env.ts
│ │ │ │ ├── error-handling.ts
│ │ │ │ ├── local-storage.ts
│ │ │ │ ├── playground.tsx
│ │ │ │ ├── schema.ts
│ │ │ │ ├── suspended-fetch.ts
│ │ │ │ └── utils/
│ │ │ │ ├── index.ts
│ │ │ │ └── sandbox.ts
│ │ │ ├── main.tsx
│ │ │ ├── mocks/
│ │ │ │ ├── browser.ts
│ │ │ │ └── handlers.ts
│ │ │ ├── pages/
│ │ │ │ ├── AccountSettings.tsx
│ │ │ │ ├── AuditLogs.tsx
│ │ │ │ ├── Callback.tsx
│ │ │ │ ├── Dashboard.tsx
│ │ │ │ ├── EmailVerify.tsx
│ │ │ │ ├── Experimental.tsx
│ │ │ │ ├── Keys.tsx
│ │ │ │ ├── LandingPage.tsx
│ │ │ │ ├── Limits.tsx
│ │ │ │ ├── LinkedAccounts.tsx
│ │ │ │ ├── Logout.tsx
│ │ │ │ ├── NotFound.tsx
│ │ │ │ ├── Onboarding.tsx
│ │ │ │ ├── OrganizationMembers.tsx
│ │ │ │ ├── OrganizationRoles.tsx
│ │ │ │ ├── OrganizationSettings.tsx
│ │ │ │ ├── Playground.tsx
│ │ │ │ ├── Regions.tsx
│ │ │ │ ├── Registries.tsx
│ │ │ │ ├── Runners.tsx
│ │ │ │ ├── Sandboxes.tsx
│ │ │ │ ├── Snapshots.tsx
│ │ │ │ ├── Spending.tsx
│ │ │ │ ├── UserOrganizationInvitations.tsx
│ │ │ │ ├── Volumes.tsx
│ │ │ │ ├── Wallet.tsx
│ │ │ │ ├── WebhookEndpointDetails.tsx
│ │ │ │ └── Webhooks.tsx
│ │ │ ├── providers/
│ │ │ │ ├── ApiProvider.tsx
│ │ │ │ ├── ConfigProvider.tsx
│ │ │ │ ├── NotificationSocketProvider.tsx
│ │ │ │ ├── OrganizationsProvider.tsx
│ │ │ │ ├── PlaygroundProvider.tsx
│ │ │ │ ├── PlaygroundSandboxProvider.tsx
│ │ │ │ ├── QueryProvider.tsx
│ │ │ │ ├── RegionsProvider.tsx
│ │ │ │ ├── SandboxSessionProvider.tsx
│ │ │ │ ├── SelectedOrganizationProvider.tsx
│ │ │ │ ├── SvixProvider.tsx
│ │ │ │ └── UserOrganizationInvitationsProvider.tsx
│ │ │ ├── services/
│ │ │ │ └── webhookService.ts
│ │ │ ├── types/
│ │ │ │ ├── CreateApiKeyPermissionGroup.ts
│ │ │ │ ├── DashboardConfig.ts
│ │ │ │ ├── OrganizationRolePermissionGroup.ts
│ │ │ │ ├── sandbox.ts
│ │ │ │ └── window.d.ts
│ │ │ ├── vendor/
│ │ │ │ └── pylon/
│ │ │ │ ├── addPylonWidget.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── usePylon.ts
│ │ │ │ └── usePylonCommands.tsx
│ │ │ └── vite-env.d.ts
│ │ ├── tailwind.config.js
│ │ ├── tsconfig.app.json
│ │ ├── tsconfig.json
│ │ └── vite.config.mts
│ ├── docs/
│ │ ├── .dockerignore
│ │ ├── .gitignore
│ │ ├── .markdownlint-cli2.jsonc
│ │ ├── .nvmrc
│ │ ├── .prettierrc
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── CONTRIBUTING.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── SECURITY.md
│ │ ├── astro.config.mjs
│ │ ├── gt.config.json
│ │ ├── project.json
│ │ ├── server/
│ │ │ ├── index.mjs
│ │ │ └── util/
│ │ │ ├── environment.mjs
│ │ │ └── redirects.mjs
│ │ ├── src/
│ │ │ ├── assets/
│ │ │ │ ├── docs/
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── sandbox-states.drawio.xml
│ │ │ │ └── themes/
│ │ │ │ ├── daytona-code-dark.json
│ │ │ │ └── daytona-code-light.json
│ │ │ ├── components/
│ │ │ │ ├── ApiBackButton.astro
│ │ │ │ ├── ApiReference.astro
│ │ │ │ ├── ArchitectureDiagram.astro
│ │ │ │ ├── Aside.astro
│ │ │ │ ├── ContentPanel.astro
│ │ │ │ ├── EditLink.astro
│ │ │ │ ├── ExploreMore.astro
│ │ │ │ ├── Footer.astro
│ │ │ │ ├── GuidesList.astro
│ │ │ │ ├── Head.astro
│ │ │ │ ├── Header.astro
│ │ │ │ ├── Hero.astro
│ │ │ │ ├── Image.astro
│ │ │ │ ├── Keyboard.astro
│ │ │ │ ├── Label.astro
│ │ │ │ ├── MarkdownContent.astro
│ │ │ │ ├── MobileMenuToggle.astro
│ │ │ │ ├── OpenPageDropdown/
│ │ │ │ │ ├── OpenPageDropdown.module.scss
│ │ │ │ │ └── OpenPageDropdown.tsx
│ │ │ │ ├── PageFrame.astro
│ │ │ │ ├── PageSidebar.astro
│ │ │ │ ├── PageTitle.astro
│ │ │ │ ├── Pagination.astro
│ │ │ │ ├── PostHog.astro
│ │ │ │ ├── SandboxDiagram.astro
│ │ │ │ ├── Search.jsx
│ │ │ │ ├── Sidebar.astro
│ │ │ │ ├── SidebarSublist.astro
│ │ │ │ ├── TableOfContent/
│ │ │ │ │ ├── constants.ts
│ │ │ │ │ └── starlight-toc.ts
│ │ │ │ ├── TableOfContents.astro
│ │ │ │ ├── TableOfContentsList.astro
│ │ │ │ ├── ThemeProvider.astro
│ │ │ │ ├── ThemeSelect.astro
│ │ │ │ ├── TwoColumnContent.astro
│ │ │ │ ├── Version.astro
│ │ │ │ ├── buttons/
│ │ │ │ │ ├── Button.module.scss
│ │ │ │ │ ├── CopyButton.tsx
│ │ │ │ │ └── LinkButton.tsx
│ │ │ │ ├── cards/
│ │ │ │ │ ├── Card.astro
│ │ │ │ │ ├── CardGrid.astro
│ │ │ │ │ ├── ImageCard.astro
│ │ │ │ │ ├── LinkCard.astro
│ │ │ │ │ └── TitleCard.astro
│ │ │ │ ├── menu/
│ │ │ │ │ ├── LocaleSelector.module.scss
│ │ │ │ │ ├── LocaleSelector.tsx
│ │ │ │ │ └── SideNavLinks.tsx
│ │ │ │ └── table/
│ │ │ │ ├── Table.astro
│ │ │ │ └── TableRow.astro
│ │ │ ├── content/
│ │ │ │ ├── config.ts
│ │ │ │ ├── docs/
│ │ │ │ │ ├── en/
│ │ │ │ │ │ ├── 404.md
│ │ │ │ │ │ ├── api-keys.mdx
│ │ │ │ │ │ ├── architecture.mdx
│ │ │ │ │ │ ├── audit-logs.mdx
│ │ │ │ │ │ ├── billing.mdx
│ │ │ │ │ │ ├── computer-use.mdx
│ │ │ │ │ │ ├── configuration.mdx
│ │ │ │ │ │ ├── custom-preview-proxy.mdx
│ │ │ │ │ │ ├── declarative-builder.mdx
│ │ │ │ │ │ ├── experimental/
│ │ │ │ │ │ │ └── otel-collection.mdx
│ │ │ │ │ │ ├── file-system-operations.mdx
│ │ │ │ │ │ ├── getting-started.mdx
│ │ │ │ │ │ ├── git-operations.mdx
│ │ │ │ │ │ ├── go-sdk/
│ │ │ │ │ │ │ ├── daytona.mdx
│ │ │ │ │ │ │ ├── errors.mdx
│ │ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ │ ├── options.mdx
│ │ │ │ │ │ │ └── types.mdx
│ │ │ │ │ │ ├── guides/
│ │ │ │ │ │ │ ├── agentkit/
│ │ │ │ │ │ │ │ └── inngest-agentkit-coding-agent.mdx
│ │ │ │ │ │ │ ├── claude/
│ │ │ │ │ │ │ │ ├── claude-agent-sdk-connect-service-sandbox.mdx
│ │ │ │ │ │ │ │ ├── claude-agent-sdk-interactive-terminal-sandbox.mdx
│ │ │ │ │ │ │ │ ├── claude-code-run-cli-sandbox.mdx
│ │ │ │ │ │ │ │ ├── claude-code-run-tasks-stream-logs-sandbox.mdx
│ │ │ │ │ │ │ │ └── index.mdx
│ │ │ │ │ │ │ ├── codex/
│ │ │ │ │ │ │ │ └── codex-sdk-interactive-terminal-sandbox.mdx
│ │ │ │ │ │ │ ├── data-analysis-with-ai.mdx
│ │ │ │ │ │ │ ├── google-adk-code-generator.mdx
│ │ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ │ ├── langchain/
│ │ │ │ │ │ │ │ └── langchain-data-analysis.mdx
│ │ │ │ │ │ │ ├── letta-code/
│ │ │ │ │ │ │ │ └── letta-code-agent.mdx
│ │ │ │ │ │ │ ├── mastra/
│ │ │ │ │ │ │ │ └── mastra-coding-agent.mdx
│ │ │ │ │ │ │ ├── openclaw/
│ │ │ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ │ │ ├── openclaw-run-secure-sandbox.mdx
│ │ │ │ │ │ │ │ └── openclaw-sdk-sandbox.mdx
│ │ │ │ │ │ │ ├── opencode/
│ │ │ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ │ │ ├── opencode-plugin.mdx
│ │ │ │ │ │ │ │ ├── opencode-sdk-agent.mdx
│ │ │ │ │ │ │ │ └── opencode-web-agent.mdx
│ │ │ │ │ │ │ ├── reinforcement-learning/
│ │ │ │ │ │ │ │ └── trl-grpo-training.mdx
│ │ │ │ │ │ │ └── rlm/
│ │ │ │ │ │ │ ├── dspy-rlms.mdx
│ │ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ │ └── recursive-language-models.mdx
│ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ ├── language-server-protocol.mdx
│ │ │ │ │ │ ├── limits.mdx
│ │ │ │ │ │ ├── linked-accounts.mdx
│ │ │ │ │ │ ├── log-streaming.mdx
│ │ │ │ │ │ ├── mcp.mdx
│ │ │ │ │ │ ├── network-limits.mdx
│ │ │ │ │ │ ├── organizations.mdx
│ │ │ │ │ │ ├── oss-deployment.mdx
│ │ │ │ │ │ ├── playground.mdx
│ │ │ │ │ │ ├── preview.mdx
│ │ │ │ │ │ ├── process-code-execution.mdx
│ │ │ │ │ │ ├── pty.mdx
│ │ │ │ │ │ ├── python-sdk/
│ │ │ │ │ │ │ ├── async/
│ │ │ │ │ │ │ │ ├── async-code-interpreter.mdx
│ │ │ │ │ │ │ │ ├── async-computer-use.mdx
│ │ │ │ │ │ │ │ ├── async-daytona.mdx
│ │ │ │ │ │ │ │ ├── async-file-system.mdx
│ │ │ │ │ │ │ │ ├── async-git.mdx
│ │ │ │ │ │ │ │ ├── async-lsp-server.mdx
│ │ │ │ │ │ │ │ ├── async-object-storage.mdx
│ │ │ │ │ │ │ │ ├── async-process.mdx
│ │ │ │ │ │ │ │ ├── async-sandbox.mdx
│ │ │ │ │ │ │ │ ├── async-snapshot.mdx
│ │ │ │ │ │ │ │ └── async-volume.mdx
│ │ │ │ │ │ │ ├── common/
│ │ │ │ │ │ │ │ ├── charts.mdx
│ │ │ │ │ │ │ │ ├── errors.mdx
│ │ │ │ │ │ │ │ └── image.mdx
│ │ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ │ └── sync/
│ │ │ │ │ │ │ ├── code-interpreter.mdx
│ │ │ │ │ │ │ ├── computer-use.mdx
│ │ │ │ │ │ │ ├── daytona.mdx
│ │ │ │ │ │ │ ├── file-system.mdx
│ │ │ │ │ │ │ ├── git.mdx
│ │ │ │ │ │ │ ├── lsp-server.mdx
│ │ │ │ │ │ │ ├── object-storage.mdx
│ │ │ │ │ │ │ ├── process.mdx
│ │ │ │ │ │ │ ├── sandbox.mdx
│ │ │ │ │ │ │ ├── snapshot.mdx
│ │ │ │ │ │ │ └── volume.mdx
│ │ │ │ │ │ ├── regions.mdx
│ │ │ │ │ │ ├── ruby-sdk/
│ │ │ │ │ │ │ ├── computer-use.mdx
│ │ │ │ │ │ │ ├── config.mdx
│ │ │ │ │ │ │ ├── daytona.mdx
│ │ │ │ │ │ │ ├── file-system.mdx
│ │ │ │ │ │ │ ├── git.mdx
│ │ │ │ │ │ │ ├── image.mdx
│ │ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ │ ├── lsp-server.mdx
│ │ │ │ │ │ │ ├── object-storage.mdx
│ │ │ │ │ │ │ ├── process.mdx
│ │ │ │ │ │ │ ├── sandbox.mdx
│ │ │ │ │ │ │ ├── snapshot.mdx
│ │ │ │ │ │ │ ├── volume-service.mdx
│ │ │ │ │ │ │ └── volume.mdx
│ │ │ │ │ │ ├── runners.mdx
│ │ │ │ │ │ ├── sandboxes.mdx
│ │ │ │ │ │ ├── security-exhibit.mdx
│ │ │ │ │ │ ├── snapshots.mdx
│ │ │ │ │ │ ├── ssh-access.mdx
│ │ │ │ │ │ ├── tools/
│ │ │ │ │ │ │ ├── api.mdx
│ │ │ │ │ │ │ └── cli.mdx
│ │ │ │ │ │ ├── typescript-sdk/
│ │ │ │ │ │ │ ├── charts.mdx
│ │ │ │ │ │ │ ├── code-interpreter.mdx
│ │ │ │ │ │ │ ├── computer-use.mdx
│ │ │ │ │ │ │ ├── daytona.mdx
│ │ │ │ │ │ │ ├── errors.mdx
│ │ │ │ │ │ │ ├── execute-response.mdx
│ │ │ │ │ │ │ ├── file-system.mdx
│ │ │ │ │ │ │ ├── git.mdx
│ │ │ │ │ │ │ ├── image.mdx
│ │ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ │ ├── lsp-server.mdx
│ │ │ │ │ │ │ ├── object-storage.mdx
│ │ │ │ │ │ │ ├── process.mdx
│ │ │ │ │ │ │ ├── pty-handle.mdx
│ │ │ │ │ │ │ ├── pty.mdx
│ │ │ │ │ │ │ ├── sandbox.mdx
│ │ │ │ │ │ │ ├── snapshot.mdx
│ │ │ │ │ │ │ └── volume.mdx
│ │ │ │ │ │ ├── vnc-access.mdx
│ │ │ │ │ │ ├── volumes.mdx
│ │ │ │ │ │ ├── vpn-connections.mdx
│ │ │ │ │ │ ├── web-terminal.mdx
│ │ │ │ │ │ └── webhooks.mdx
│ │ │ │ │ └── ja/
│ │ │ │ │ ├── 404.md
│ │ │ │ │ ├── api-keys.mdx
│ │ │ │ │ ├── audit-logs.mdx
│ │ │ │ │ ├── billing.mdx
│ │ │ │ │ ├── configuration.mdx
│ │ │ │ │ ├── custom-domain-authentication.mdx
│ │ │ │ │ ├── data-analysis-with-ai.mdx
│ │ │ │ │ ├── declarative-builder.mdx
│ │ │ │ │ ├── file-system-operations.mdx
│ │ │ │ │ ├── getting-started.mdx
│ │ │ │ │ ├── git-operations.mdx
│ │ │ │ │ ├── index.mdx
│ │ │ │ │ ├── language-server-protocol.mdx
│ │ │ │ │ ├── limits.mdx
│ │ │ │ │ ├── linked-accounts.mdx
│ │ │ │ │ ├── log-streaming.mdx
│ │ │ │ │ ├── mcp.mdx
│ │ │ │ │ ├── organizations.mdx
│ │ │ │ │ ├── preview-and-authentication.mdx
│ │ │ │ │ ├── process-code-execution.mdx
│ │ │ │ │ ├── python-sdk/
│ │ │ │ │ │ ├── async/
│ │ │ │ │ │ │ ├── async-computer-use.mdx
│ │ │ │ │ │ │ ├── async-daytona.mdx
│ │ │ │ │ │ │ ├── async-file-system.mdx
│ │ │ │ │ │ │ ├── async-git.mdx
│ │ │ │ │ │ │ ├── async-lsp-server.mdx
│ │ │ │ │ │ │ ├── async-object-storage.mdx
│ │ │ │ │ │ │ ├── async-sandbox.mdx
│ │ │ │ │ │ │ ├── async-snapshot.mdx
│ │ │ │ │ │ │ └── async-volume.mdx
│ │ │ │ │ │ ├── common/
│ │ │ │ │ │ │ ├── charts.mdx
│ │ │ │ │ │ │ ├── errors.mdx
│ │ │ │ │ │ │ └── image.mdx
│ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ └── sync/
│ │ │ │ │ │ ├── computer-use.mdx
│ │ │ │ │ │ ├── daytona.mdx
│ │ │ │ │ │ ├── file-system.mdx
│ │ │ │ │ │ ├── git.mdx
│ │ │ │ │ │ ├── lsp-server.mdx
│ │ │ │ │ │ ├── object-storage.mdx
│ │ │ │ │ │ ├── process.mdx
│ │ │ │ │ │ ├── sandbox.mdx
│ │ │ │ │ │ ├── snapshot.mdx
│ │ │ │ │ │ └── volume.mdx
│ │ │ │ │ ├── regions.mdx
│ │ │ │ │ ├── sandbox-management.mdx
│ │ │ │ │ ├── snapshots.mdx
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ ├── api.mdx
│ │ │ │ │ │ └── cli.mdx
│ │ │ │ │ ├── typescript-sdk/
│ │ │ │ │ │ ├── charts.mdx
│ │ │ │ │ │ ├── computer-use.mdx
│ │ │ │ │ │ ├── daytona.mdx
│ │ │ │ │ │ ├── errors.mdx
│ │ │ │ │ │ ├── execute-response.mdx
│ │ │ │ │ │ ├── file-system.mdx
│ │ │ │ │ │ ├── git.mdx
│ │ │ │ │ │ ├── image.mdx
│ │ │ │ │ │ ├── index.mdx
│ │ │ │ │ │ ├── lsp-server.mdx
│ │ │ │ │ │ ├── object-storage.mdx
│ │ │ │ │ │ ├── process.mdx
│ │ │ │ │ │ ├── sandbox.mdx
│ │ │ │ │ │ ├── snapshot.mdx
│ │ │ │ │ │ └── volume.mdx
│ │ │ │ │ ├── volumes.mdx
│ │ │ │ │ ├── web-terminal.mdx
│ │ │ │ │ └── webhooks.mdx
│ │ │ │ └── i18n/
│ │ │ │ ├── en.json
│ │ │ │ └── ja.json
│ │ │ ├── data/
│ │ │ │ └── i18n/
│ │ │ │ └── ja.json
│ │ │ ├── env.d.ts
│ │ │ ├── fonts/
│ │ │ │ ├── BerkeleyMono-Regular.otf
│ │ │ │ └── font-face.css
│ │ │ ├── i18n/
│ │ │ │ ├── generateI18nConfig.ts
│ │ │ │ ├── generateI18nSchema.ts
│ │ │ │ ├── loadTranslations.ts
│ │ │ │ ├── routing.ts
│ │ │ │ └── utils.ts
│ │ │ ├── middleware.ts
│ │ │ ├── pages/
│ │ │ │ ├── [...slug].astro
│ │ │ │ └── index.astro
│ │ │ ├── styles/
│ │ │ │ ├── _color.scss
│ │ │ │ ├── _typography.scss
│ │ │ │ ├── _variables.scss
│ │ │ │ ├── components/
│ │ │ │ │ ├── burger-menu.scss
│ │ │ │ │ ├── cards.scss
│ │ │ │ │ ├── docs-footer.scss
│ │ │ │ │ ├── markdown.scss
│ │ │ │ │ ├── navbar.scss
│ │ │ │ │ ├── page-frame.scss
│ │ │ │ │ └── search.scss
│ │ │ │ ├── init.scss
│ │ │ │ ├── mixins.scss
│ │ │ │ └── style.scss
│ │ │ └── utils/
│ │ │ ├── md.js
│ │ │ ├── navigation.ts
│ │ │ └── redirects.ts
│ │ ├── tailwind.config.js
│ │ ├── tools/
│ │ │ ├── update-api-reference.js
│ │ │ ├── update-cli-reference.js
│ │ │ ├── update-llms.js
│ │ │ └── update-search.js
│ │ ├── tsconfig.json
│ │ ├── vite-env.d.ts
│ │ └── vite.config.js
│ ├── otel-collector/
│ │ ├── Dockerfile
│ │ ├── builder-config.dev.yaml
│ │ ├── builder-config.yaml
│ │ ├── config.dev.yaml
│ │ ├── config.yaml
│ │ ├── exporter/
│ │ │ ├── config.go
│ │ │ ├── exporter.go
│ │ │ ├── factory.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── internal/
│ │ │ └── config/
│ │ │ └── resolver.go
│ │ └── project.json
│ ├── proxy/
│ │ ├── Dockerfile
│ │ ├── cmd/
│ │ │ └── proxy/
│ │ │ ├── config/
│ │ │ │ └── config.go
│ │ │ └── main.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal/
│ │ │ └── buildinfo.go
│ │ ├── pkg/
│ │ │ └── proxy/
│ │ │ ├── auth.go
│ │ │ ├── auth_callback.go
│ │ │ ├── get_sandbox_build_target.go
│ │ │ ├── get_sandbox_target.go
│ │ │ ├── get_snapshot_target.go
│ │ │ ├── proxy.go
│ │ │ ├── retry.go
│ │ │ └── warning_page.go
│ │ └── project.json
│ ├── runner/
│ │ ├── .gitignore
│ │ ├── Dockerfile
│ │ ├── cmd/
│ │ │ └── runner/
│ │ │ ├── config/
│ │ │ │ └── config.go
│ │ │ └── main.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal/
│ │ │ ├── buildinfo.go
│ │ │ ├── constants/
│ │ │ │ └── auth.go
│ │ │ ├── metrics/
│ │ │ │ └── collector.go
│ │ │ └── util/
│ │ │ └── error_extract.go
│ │ ├── packaging/
│ │ │ ├── deb/
│ │ │ │ └── DEBIAN/
│ │ │ │ ├── control
│ │ │ │ ├── postinst
│ │ │ │ ├── postrm
│ │ │ │ └── prerm
│ │ │ └── systemd/
│ │ │ └── daytona-runner.service
│ │ ├── pkg/
│ │ │ ├── api/
│ │ │ │ ├── controllers/
│ │ │ │ │ ├── command_logs.go
│ │ │ │ │ ├── health.go
│ │ │ │ │ ├── info.go
│ │ │ │ │ ├── proxy.go
│ │ │ │ │ ├── sandbox.go
│ │ │ │ │ └── snapshot.go
│ │ │ │ ├── docs/
│ │ │ │ │ ├── docs.go
│ │ │ │ │ ├── swagger.json
│ │ │ │ │ └── swagger.yaml
│ │ │ │ ├── dto/
│ │ │ │ │ ├── backup.go
│ │ │ │ │ ├── image.go
│ │ │ │ │ ├── info.go
│ │ │ │ │ ├── registry.go
│ │ │ │ │ ├── sandbox.go
│ │ │ │ │ ├── snapshot.go
│ │ │ │ │ └── volume.go
│ │ │ │ ├── middlewares/
│ │ │ │ │ ├── auth.go
│ │ │ │ │ └── recoverable_errors.go
│ │ │ │ ├── server.go
│ │ │ │ └── validator.go
│ │ │ ├── apiclient/
│ │ │ │ └── api_client.go
│ │ │ ├── cache/
│ │ │ │ ├── backup_info_cache.go
│ │ │ │ └── snapshot_error_cache.go
│ │ │ ├── common/
│ │ │ │ ├── container.go
│ │ │ │ ├── daemon.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── metrics.go
│ │ │ │ ├── recovery.go
│ │ │ │ ├── rsync.go
│ │ │ │ └── storage.go
│ │ │ ├── daemon/
│ │ │ │ ├── assets.go
│ │ │ │ ├── static/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── util.go
│ │ │ ├── docker/
│ │ │ │ ├── backup.go
│ │ │ │ ├── client.go
│ │ │ │ ├── container_commit.go
│ │ │ │ ├── container_configs.go
│ │ │ │ ├── container_exec.go
│ │ │ │ ├── container_inspect.go
│ │ │ │ ├── create.go
│ │ │ │ ├── daemon.go
│ │ │ │ ├── daemon_version.go
│ │ │ │ ├── destroy.go
│ │ │ │ ├── image_build.go
│ │ │ │ ├── image_exists.go
│ │ │ │ ├── image_info.go
│ │ │ │ ├── image_pull.go
│ │ │ │ ├── image_push.go
│ │ │ │ ├── image_remove.go
│ │ │ │ ├── monitor.go
│ │ │ │ ├── network.go
│ │ │ │ ├── ping.go
│ │ │ │ ├── recover.go
│ │ │ │ ├── recover_from_storage_limit.go
│ │ │ │ ├── registry_manifest.go
│ │ │ │ ├── resize.go
│ │ │ │ ├── snapshot_build.go
│ │ │ │ ├── snapshot_pull.go
│ │ │ │ ├── start.go
│ │ │ │ ├── state.go
│ │ │ │ ├── stop.go
│ │ │ │ ├── tag_image.go
│ │ │ │ ├── volumes_cleanup.go
│ │ │ │ └── volumes_mountpaths.go
│ │ │ ├── models/
│ │ │ │ ├── backup_info.go
│ │ │ │ ├── enums/
│ │ │ │ │ ├── sandbox_state.go
│ │ │ │ │ └── snapshot_state.go
│ │ │ │ ├── recovery_type.go
│ │ │ │ ├── sandbox_info.go
│ │ │ │ └── service_info.go
│ │ │ ├── netrules/
│ │ │ │ ├── assign.go
│ │ │ │ ├── delete.go
│ │ │ │ ├── limiter.go
│ │ │ │ ├── netrules.go
│ │ │ │ ├── set.go
│ │ │ │ ├── unassign.go
│ │ │ │ └── utils.go
│ │ │ ├── runner/
│ │ │ │ ├── runner.go
│ │ │ │ └── v2/
│ │ │ │ ├── executor/
│ │ │ │ │ ├── backup.go
│ │ │ │ │ ├── executor.go
│ │ │ │ │ ├── sandbox.go
│ │ │ │ │ ├── snapshot.go
│ │ │ │ │ └── types.go
│ │ │ │ ├── healthcheck/
│ │ │ │ │ └── healthcheck.go
│ │ │ │ └── poller/
│ │ │ │ └── poller.go
│ │ │ ├── services/
│ │ │ │ ├── sandbox.go
│ │ │ │ └── sandbox_sync.go
│ │ │ ├── sshgateway/
│ │ │ │ ├── config.go
│ │ │ │ └── service.go
│ │ │ ├── storage/
│ │ │ │ ├── client.go
│ │ │ │ └── minio_client.go
│ │ │ └── telemetry/
│ │ │ └── filters/
│ │ │ └── not_found.go
│ │ └── project.json
│ ├── snapshot-manager/
│ │ ├── .gitignore
│ │ ├── Dockerfile
│ │ ├── cmd/
│ │ │ └── main.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal/
│ │ │ ├── buildinfo.go
│ │ │ ├── config/
│ │ │ │ └── config.go
│ │ │ ├── logger/
│ │ │ │ └── logger.go
│ │ │ └── server/
│ │ │ ├── config.go
│ │ │ └── server.go
│ │ └── project.json
│ └── ssh-gateway/
│ ├── Dockerfile
│ ├── README.md
│ ├── go.mod
│ ├── go.sum
│ ├── main.go
│ └── project.json
├── components.json
├── docker/
│ ├── README.md
│ ├── dex/
│ │ └── config.yaml
│ ├── docker-compose.build.override.yaml
│ ├── docker-compose.yaml
│ ├── otel/
│ │ └── otel-collector-config.yaml
│ └── pgadmin4/
│ ├── pgpass
│ └── servers.json
├── ecosystem.config.js
├── eslint.config.mjs
├── examples/
│ ├── go/
│ │ ├── auto_archive/
│ │ │ └── main.go
│ │ ├── auto_delete/
│ │ │ └── main.go
│ │ ├── build_logs/
│ │ │ └── main.go
│ │ ├── code_interpreter/
│ │ │ └── main.go
│ │ ├── computer_use/
│ │ │ └── main.go
│ │ ├── exec_sessions/
│ │ │ └── main.go
│ │ ├── filesystem/
│ │ │ └── main.go
│ │ ├── fromimage/
│ │ │ └── main.go
│ │ ├── git_operations/
│ │ │ └── main.go
│ │ ├── lifecycle/
│ │ │ └── main.go
│ │ ├── lsp_usage/
│ │ │ └── main.go
│ │ ├── network_settings/
│ │ │ └── main.go
│ │ ├── pagination/
│ │ │ └── main.go
│ │ ├── pty_channel/
│ │ │ └── main.go
│ │ ├── run_examples.sh
│ │ ├── sandbox/
│ │ │ └── main.go
│ │ ├── snapshots_simple/
│ │ │ └── main.go
│ │ ├── snapshots_withlogstreaming/
│ │ │ └── main.go
│ │ ├── stream_logs/
│ │ │ └── main.go
│ │ ├── volumes/
│ │ │ └── main.go
│ │ └── volumes_with_sandbox/
│ │ └── main.go
│ ├── jupyter/
│ │ └── daytona.ipynb
│ ├── otel-dashboards/
│ │ ├── grafana/
│ │ │ ├── README.md
│ │ │ └── dashboard.json
│ │ └── new-relic/
│ │ ├── README.md
│ │ └── dashboard.json
│ ├── python/
│ │ ├── auto-archive/
│ │ │ ├── _async/
│ │ │ │ └── auto_archive.py
│ │ │ └── auto_archive.py
│ │ ├── auto-delete/
│ │ │ ├── _async/
│ │ │ │ └── auto_delete.py
│ │ │ └── auto_delete.py
│ │ ├── charts/
│ │ │ ├── _async/
│ │ │ │ └── main.py
│ │ │ └── main.py
│ │ ├── declarative-image/
│ │ │ ├── _async/
│ │ │ │ └── main.py
│ │ │ └── main.py
│ │ ├── exec-command/
│ │ │ ├── _async/
│ │ │ │ ├── exec.py
│ │ │ │ ├── exec_logs_async.py
│ │ │ │ └── exec_session.py
│ │ │ ├── exec.py
│ │ │ ├── exec_logs_async.py
│ │ │ └── exec_session.py
│ │ ├── file-operations/
│ │ │ ├── _async/
│ │ │ │ └── main.py
│ │ │ └── main.py
│ │ ├── git-lsp/
│ │ │ ├── _async/
│ │ │ │ └── main.py
│ │ │ └── main.py
│ │ ├── lifecycle/
│ │ │ ├── _async/
│ │ │ │ └── lifecycle.py
│ │ │ └── lifecycle.py
│ │ ├── network-settings/
│ │ │ ├── _async/
│ │ │ │ └── main.py
│ │ │ └── main.py
│ │ ├── pagination/
│ │ │ ├── _async/
│ │ │ │ ├── sandbox.py
│ │ │ │ └── snapshot.py
│ │ │ ├── sandbox.py
│ │ │ └── snapshot.py
│ │ ├── pty/
│ │ │ ├── _async/
│ │ │ │ └── main.py
│ │ │ └── main.py
│ │ ├── region/
│ │ │ ├── _async/
│ │ │ │ └── main.py
│ │ │ └── main.py
│ │ └── volumes/
│ │ ├── _async/
│ │ │ └── volume.py
│ │ └── volume.py
│ ├── ruby/
│ │ ├── README.md
│ │ ├── auto-archive/
│ │ │ └── auto_archive.rb
│ │ ├── auto-delete/
│ │ │ └── auto_delete.rb
│ │ ├── charts/
│ │ │ └── main.rb
│ │ ├── declarative-image/
│ │ │ └── main.rb
│ │ ├── exec-command/
│ │ │ ├── exec.rb
│ │ │ └── exec_session.rb
│ │ ├── file-operations/
│ │ │ └── main.rb
│ │ ├── git-lsp/
│ │ │ └── main.rb
│ │ ├── lifecycle/
│ │ │ └── lifecycle.rb
│ │ ├── network-settings/
│ │ │ └── main.rb
│ │ ├── pagination/
│ │ │ ├── sandbox.rb
│ │ │ └── snapshot.rb
│ │ ├── pty/
│ │ │ └── main.rb
│ │ └── volumes/
│ │ └── volume.rb
│ └── typescript/
│ ├── auto-archive/
│ │ └── index.ts
│ ├── auto-delete/
│ │ └── index.ts
│ ├── charts/
│ │ └── index.ts
│ ├── declarative-image/
│ │ └── index.ts
│ ├── exec-command/
│ │ └── index.ts
│ ├── file-operations/
│ │ └── index.ts
│ ├── git-lsp/
│ │ └── index.ts
│ ├── lifecycle/
│ │ └── index.ts
│ ├── network-settings/
│ │ └── index.ts
│ ├── pagination/
│ │ ├── sandbox.ts
│ │ └── snapshot.ts
│ ├── pty/
│ │ └── index.ts
│ ├── region/
│ │ └── index.tsx
│ └── volumes/
│ └── index.ts
├── functions/
│ └── auth0/
│ ├── setCustomClaims.onExecutePostLogin.js
│ ├── validateEmailUnused.onExecutePostLogin.js
│ ├── validateEmailUnused.onExecutePreRegister.js
│ └── verifyAliasEmail.onExecutePreRegister.js
├── go.work
├── guides/
│ ├── python/
│ │ ├── ai-data-analyst/
│ │ │ ├── litellm/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── ai_data_analyst.py
│ │ │ │ ├── cafe_sales_data.csv
│ │ │ │ └── pyproject.toml
│ │ │ └── openai/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── ai_data_analyst.py
│ │ │ ├── cafe_sales_data.csv
│ │ │ └── pyproject.toml
│ │ ├── dspy-rlms/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── daytona_interpreter.py
│ │ │ ├── demo.py
│ │ │ └── pyproject.toml
│ │ ├── google-adk/
│ │ │ └── code-generator-agent/
│ │ │ └── gemini/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ └── main.py
│ │ ├── langchain/
│ │ │ └── data-analysis/
│ │ │ └── anthropic/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ └── data_analysis.py
│ │ ├── recursive-language-models/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── config.yaml
│ │ │ ├── output_logging/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── console.py
│ │ │ │ └── tree_logger.py
│ │ │ ├── pyproject.toml
│ │ │ ├── rlm/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agent.py
│ │ │ │ ├── budget.py
│ │ │ │ ├── client.py
│ │ │ │ ├── prompts.py
│ │ │ │ ├── repl.py
│ │ │ │ ├── sandbox.py
│ │ │ │ └── types.py
│ │ │ ├── run.py
│ │ │ └── viewer/
│ │ │ └── index.html
│ │ └── reinforcement-learning/
│ │ └── trl/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── pyproject.toml
│ │ └── train.py
│ └── typescript/
│ ├── agentkit-inngest/
│ │ └── coding-agent/
│ │ └── anthropic/
│ │ ├── .gitignore
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ ├── ai-data-analyst/
│ │ └── openai/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── cafe_sales_data.csv
│ │ ├── index.ts
│ │ └── package.json
│ ├── anthropic/
│ │ ├── multi-agent-claude-sdk/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── coding_agent.py
│ │ │ │ ├── index.ts
│ │ │ │ └── utils.ts
│ │ │ └── tsconfig.json
│ │ └── single-claude-agent-sdk/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── coding_agent.py
│ │ │ ├── index.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ ├── letta-code/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ ├── letta-session.ts
│ │ │ ├── types.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ ├── mastra/
│ │ └── coding-agent/
│ │ └── openai/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── mastra/
│ │ │ ├── agents/
│ │ │ │ └── coding-agent.ts
│ │ │ ├── index.ts
│ │ │ └── tools/
│ │ │ ├── daytona/
│ │ │ │ ├── tools.ts
│ │ │ │ └── utils.ts
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── openai/
│ │ └── codex-sdk/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── agent/
│ │ │ ├── index.ts
│ │ │ └── package.json
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ ├── openclaw/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── openclaw.json
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ └── opencode/
│ ├── opencode-sdk/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ ├── server.ts
│ │ │ └── session.ts
│ │ └── tsconfig.json
│ └── opencode-web/
│ ├── .gitignore
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ └── index.ts
│ └── tsconfig.json
├── hack/
│ ├── computer-use/
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ └── build-computer-use-amd64.sh
│ └── python-client/
│ ├── openapi-templates/
│ │ ├── __init__package.mustache
│ │ ├── model_generic.mustache
│ │ └── og__init__package.mustache
│ └── postprocess.sh
├── images/
│ ├── sandbox/
│ │ ├── Dockerfile
│ │ └── README.md
│ └── sandbox-slim/
│ ├── Dockerfile
│ └── README.md
├── jest.config.ts
├── jest.preset.js
├── libs/
│ ├── analytics-api-client/
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── src/
│ │ │ ├── .gitignore
│ │ │ ├── .npmignore
│ │ │ ├── .openapi-generator/
│ │ │ │ ├── FILES
│ │ │ │ └── VERSION
│ │ │ ├── .openapi-generator-ignore
│ │ │ ├── api/
│ │ │ │ ├── telemetry-api.ts
│ │ │ │ └── usage-api.ts
│ │ │ ├── api.ts
│ │ │ ├── base.ts
│ │ │ ├── common.ts
│ │ │ ├── configuration.ts
│ │ │ ├── git_push.sh
│ │ │ ├── index.ts
│ │ │ └── models/
│ │ │ ├── index.ts
│ │ │ ├── models-aggregated-usage.ts
│ │ │ ├── models-log-entry.ts
│ │ │ ├── models-metric-point.ts
│ │ │ ├── models-sandbox-usage.ts
│ │ │ ├── models-span.ts
│ │ │ ├── models-trace-summary.ts
│ │ │ ├── models-usage-chart-point.ts
│ │ │ └── models-usage-period.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── api-client/
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── src/
│ │ │ ├── .gitignore
│ │ │ ├── .npmignore
│ │ │ ├── .openapi-generator/
│ │ │ │ ├── FILES
│ │ │ │ └── VERSION
│ │ │ ├── .openapi-generator-ignore
│ │ │ ├── api/
│ │ │ │ ├── admin-api.ts
│ │ │ │ ├── api-keys-api.ts
│ │ │ │ ├── audit-api.ts
│ │ │ │ ├── config-api.ts
│ │ │ │ ├── docker-registry-api.ts
│ │ │ │ ├── health-api.ts
│ │ │ │ ├── jobs-api.ts
│ │ │ │ ├── object-storage-api.ts
│ │ │ │ ├── organizations-api.ts
│ │ │ │ ├── preview-api.ts
│ │ │ │ ├── regions-api.ts
│ │ │ │ ├── runners-api.ts
│ │ │ │ ├── sandbox-api.ts
│ │ │ │ ├── snapshots-api.ts
│ │ │ │ ├── toolbox-api.ts
│ │ │ │ ├── users-api.ts
│ │ │ │ ├── volumes-api.ts
│ │ │ │ ├── webhooks-api.ts
│ │ │ │ └── workspace-api.ts
│ │ │ ├── api.ts
│ │ │ ├── base.ts
│ │ │ ├── common.ts
│ │ │ ├── configuration.ts
│ │ │ ├── git_push.sh
│ │ │ ├── index.ts
│ │ │ └── models/
│ │ │ ├── account-provider.ts
│ │ │ ├── admin-create-runner.ts
│ │ │ ├── announcement.ts
│ │ │ ├── api-key-list.ts
│ │ │ ├── api-key-response.ts
│ │ │ ├── audit-log.ts
│ │ │ ├── build-info.ts
│ │ │ ├── command.ts
│ │ │ ├── completion-context.ts
│ │ │ ├── completion-item.ts
│ │ │ ├── completion-list.ts
│ │ │ ├── compressed-screenshot-response.ts
│ │ │ ├── computer-use-start-response.ts
│ │ │ ├── computer-use-status-response.ts
│ │ │ ├── computer-use-stop-response.ts
│ │ │ ├── create-api-key.ts
│ │ │ ├── create-build-info.ts
│ │ │ ├── create-docker-registry.ts
│ │ │ ├── create-linked-account.ts
│ │ │ ├── create-organization-invitation.ts
│ │ │ ├── create-organization-quota.ts
│ │ │ ├── create-organization-role.ts
│ │ │ ├── create-organization.ts
│ │ │ ├── create-region-response.ts
│ │ │ ├── create-region.ts
│ │ │ ├── create-runner-response.ts
│ │ │ ├── create-runner.ts
│ │ │ ├── create-sandbox.ts
│ │ │ ├── create-session-request.ts
│ │ │ ├── create-snapshot.ts
│ │ │ ├── create-user.ts
│ │ │ ├── create-volume.ts
│ │ │ ├── create-workspace.ts
│ │ │ ├── daytona-configuration.ts
│ │ │ ├── display-info-response.ts
│ │ │ ├── docker-registry.ts
│ │ │ ├── download-files.ts
│ │ │ ├── execute-request.ts
│ │ │ ├── execute-response.ts
│ │ │ ├── file-info.ts
│ │ │ ├── file-status.ts
│ │ │ ├── git-add-request.ts
│ │ │ ├── git-branch-request.ts
│ │ │ ├── git-checkout-request.ts
│ │ │ ├── git-clone-request.ts
│ │ │ ├── git-commit-info.ts
│ │ │ ├── git-commit-request.ts
│ │ │ ├── git-commit-response.ts
│ │ │ ├── git-delete-branch-request.ts
│ │ │ ├── git-repo-request.ts
│ │ │ ├── git-status.ts
│ │ │ ├── health-controller-check200-response-info-value.ts
│ │ │ ├── health-controller-check200-response.ts
│ │ │ ├── health-controller-check503-response.ts
│ │ │ ├── index.ts
│ │ │ ├── job-status.ts
│ │ │ ├── job-type.ts
│ │ │ ├── job.ts
│ │ │ ├── keyboard-hotkey-request.ts
│ │ │ ├── keyboard-press-request.ts
│ │ │ ├── keyboard-type-request.ts
│ │ │ ├── list-branch-response.ts
│ │ │ ├── log-entry.ts
│ │ │ ├── lsp-completion-params.ts
│ │ │ ├── lsp-document-request.ts
│ │ │ ├── lsp-location.ts
│ │ │ ├── lsp-server-request.ts
│ │ │ ├── lsp-symbol.ts
│ │ │ ├── match.ts
│ │ │ ├── metric-data-point.ts
│ │ │ ├── metric-series.ts
│ │ │ ├── metrics-response.ts
│ │ │ ├── mouse-click-request.ts
│ │ │ ├── mouse-click-response.ts
│ │ │ ├── mouse-drag-request.ts
│ │ │ ├── mouse-drag-response.ts
│ │ │ ├── mouse-move-request.ts
│ │ │ ├── mouse-move-response.ts
│ │ │ ├── mouse-position.ts
│ │ │ ├── mouse-scroll-request.ts
│ │ │ ├── mouse-scroll-response.ts
│ │ │ ├── oidc-config.ts
│ │ │ ├── organization-invitation.ts
│ │ │ ├── organization-role.ts
│ │ │ ├── organization-sandbox-default-limited-network-egress.ts
│ │ │ ├── organization-suspension.ts
│ │ │ ├── organization-usage-overview.ts
│ │ │ ├── organization-user.ts
│ │ │ ├── organization.ts
│ │ │ ├── otel-config.ts
│ │ │ ├── paginated-audit-logs.ts
│ │ │ ├── paginated-jobs.ts
│ │ │ ├── paginated-logs.ts
│ │ │ ├── paginated-sandboxes.ts
│ │ │ ├── paginated-snapshots.ts
│ │ │ ├── paginated-traces.ts
│ │ │ ├── poll-jobs-response.ts
│ │ │ ├── port-preview-url.ts
│ │ │ ├── position.ts
│ │ │ ├── posthog-config.ts
│ │ │ ├── process-errors-response.ts
│ │ │ ├── process-logs-response.ts
│ │ │ ├── process-restart-response.ts
│ │ │ ├── process-status-response.ts
│ │ │ ├── project-dir-response.ts
│ │ │ ├── pty-create-request.ts
│ │ │ ├── pty-create-response.ts
│ │ │ ├── pty-list-response.ts
│ │ │ ├── pty-resize-request.ts
│ │ │ ├── pty-session-info.ts
│ │ │ ├── range.ts
│ │ │ ├── rate-limit-config.ts
│ │ │ ├── rate-limit-entry.ts
│ │ │ ├── regenerate-api-key-response.ts
│ │ │ ├── region-quota.ts
│ │ │ ├── region-screenshot-response.ts
│ │ │ ├── region-type.ts
│ │ │ ├── region-usage-overview.ts
│ │ │ ├── region.ts
│ │ │ ├── registry-push-access-dto.ts
│ │ │ ├── replace-request.ts
│ │ │ ├── replace-result.ts
│ │ │ ├── resize-sandbox.ts
│ │ │ ├── runner-full.ts
│ │ │ ├── runner-health-metrics.ts
│ │ │ ├── runner-healthcheck.ts
│ │ │ ├── runner-service-health.ts
│ │ │ ├── runner-snapshot-dto.ts
│ │ │ ├── runner-state.ts
│ │ │ ├── runner.ts
│ │ │ ├── sandbox-class.ts
│ │ │ ├── sandbox-desired-state.ts
│ │ │ ├── sandbox-info.ts
│ │ │ ├── sandbox-labels.ts
│ │ │ ├── sandbox-state.ts
│ │ │ ├── sandbox-volume.ts
│ │ │ ├── sandbox.ts
│ │ │ ├── screenshot-response.ts
│ │ │ ├── search-files-response.ts
│ │ │ ├── send-webhook-dto.ts
│ │ │ ├── session-execute-request.ts
│ │ │ ├── session-execute-response.ts
│ │ │ ├── session.ts
│ │ │ ├── set-snapshot-general-status-dto.ts
│ │ │ ├── signed-port-preview-url.ts
│ │ │ ├── snapshot-dto.ts
│ │ │ ├── snapshot-manager-credentials.ts
│ │ │ ├── snapshot-state.ts
│ │ │ ├── ssh-access-dto.ts
│ │ │ ├── ssh-access-validation-dto.ts
│ │ │ ├── storage-access-dto.ts
│ │ │ ├── toolbox-proxy-url.ts
│ │ │ ├── trace-span.ts
│ │ │ ├── trace-summary.ts
│ │ │ ├── update-docker-registry.ts
│ │ │ ├── update-job-status.ts
│ │ │ ├── update-organization-default-region.ts
│ │ │ ├── update-organization-invitation.ts
│ │ │ ├── update-organization-member-access.ts
│ │ │ ├── update-organization-quota.ts
│ │ │ ├── update-organization-region-quota.ts
│ │ │ ├── update-organization-role.ts
│ │ │ ├── update-region.ts
│ │ │ ├── update-sandbox-state-dto.ts
│ │ │ ├── url.ts
│ │ │ ├── user-home-dir-response.ts
│ │ │ ├── user-public-key.ts
│ │ │ ├── user.ts
│ │ │ ├── volume-dto.ts
│ │ │ ├── volume-state.ts
│ │ │ ├── webhook-app-portal-access.ts
│ │ │ ├── webhook-controller-get-status200-response.ts
│ │ │ ├── webhook-event.ts
│ │ │ ├── webhook-initialization-status.ts
│ │ │ ├── windows-response.ts
│ │ │ ├── work-dir-response.ts
│ │ │ ├── workspace-port-preview-url.ts
│ │ │ └── workspace.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── api-client-go/
│ │ ├── .gitignore
│ │ ├── .openapi-generator/
│ │ │ ├── FILES
│ │ │ └── VERSION
│ │ ├── .openapi-generator-ignore
│ │ ├── LICENSE
│ │ ├── api/
│ │ │ └── openapi.yaml
│ │ ├── api_admin.go
│ │ ├── api_api_keys.go
│ │ ├── api_audit.go
│ │ ├── api_config.go
│ │ ├── api_docker_registry.go
│ │ ├── api_health.go
│ │ ├── api_jobs.go
│ │ ├── api_object_storage.go
│ │ ├── api_organizations.go
│ │ ├── api_preview.go
│ │ ├── api_regions.go
│ │ ├── api_runners.go
│ │ ├── api_sandbox.go
│ │ ├── api_snapshots.go
│ │ ├── api_toolbox.go
│ │ ├── api_users.go
│ │ ├── api_volumes.go
│ │ ├── api_webhooks.go
│ │ ├── api_workspace.go
│ │ ├── client.go
│ │ ├── configuration.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── model_account_provider.go
│ │ ├── model_admin_create_runner.go
│ │ ├── model_announcement.go
│ │ ├── model_api_key_list.go
│ │ ├── model_api_key_response.go
│ │ ├── model_audit_log.go
│ │ ├── model_build_info.go
│ │ ├── model_command.go
│ │ ├── model_completion_context.go
│ │ ├── model_completion_item.go
│ │ ├── model_completion_list.go
│ │ ├── model_compressed_screenshot_response.go
│ │ ├── model_computer_use_start_response.go
│ │ ├── model_computer_use_status_response.go
│ │ ├── model_computer_use_stop_response.go
│ │ ├── model_create_api_key.go
│ │ ├── model_create_build_info.go
│ │ ├── model_create_docker_registry.go
│ │ ├── model_create_linked_account.go
│ │ ├── model_create_organization.go
│ │ ├── model_create_organization_invitation.go
│ │ ├── model_create_organization_quota.go
│ │ ├── model_create_organization_role.go
│ │ ├── model_create_region.go
│ │ ├── model_create_region_response.go
│ │ ├── model_create_runner.go
│ │ ├── model_create_runner_response.go
│ │ ├── model_create_sandbox.go
│ │ ├── model_create_session_request.go
│ │ ├── model_create_snapshot.go
│ │ ├── model_create_user.go
│ │ ├── model_create_volume.go
│ │ ├── model_create_workspace.go
│ │ ├── model_daytona_configuration.go
│ │ ├── model_display_info_response.go
│ │ ├── model_docker_registry.go
│ │ ├── model_download_files.go
│ │ ├── model_execute_request.go
│ │ ├── model_execute_response.go
│ │ ├── model_file_info.go
│ │ ├── model_file_status.go
│ │ ├── model_git_add_request.go
│ │ ├── model_git_branch_request.go
│ │ ├── model_git_checkout_request.go
│ │ ├── model_git_clone_request.go
│ │ ├── model_git_commit_info.go
│ │ ├── model_git_commit_request.go
│ │ ├── model_git_commit_response.go
│ │ ├── model_git_delete_branch_request.go
│ │ ├── model_git_repo_request.go
│ │ ├── model_git_status.go
│ │ ├── model_health_controller_check_200_response.go
│ │ ├── model_health_controller_check_200_response_info_value.go
│ │ ├── model_health_controller_check_503_response.go
│ │ ├── model_job.go
│ │ ├── model_job_status.go
│ │ ├── model_job_type.go
│ │ ├── model_keyboard_hotkey_request.go
│ │ ├── model_keyboard_press_request.go
│ │ ├── model_keyboard_type_request.go
│ │ ├── model_list_branch_response.go
│ │ ├── model_log_entry.go
│ │ ├── model_lsp_completion_params.go
│ │ ├── model_lsp_document_request.go
│ │ ├── model_lsp_location.go
│ │ ├── model_lsp_server_request.go
│ │ ├── model_lsp_symbol.go
│ │ ├── model_match.go
│ │ ├── model_metric_data_point.go
│ │ ├── model_metric_series.go
│ │ ├── model_metrics_response.go
│ │ ├── model_mouse_click_request.go
│ │ ├── model_mouse_click_response.go
│ │ ├── model_mouse_drag_request.go
│ │ ├── model_mouse_drag_response.go
│ │ ├── model_mouse_move_request.go
│ │ ├── model_mouse_move_response.go
│ │ ├── model_mouse_position.go
│ │ ├── model_mouse_scroll_request.go
│ │ ├── model_mouse_scroll_response.go
│ │ ├── model_oidc_config.go
│ │ ├── model_organization.go
│ │ ├── model_organization_invitation.go
│ │ ├── model_organization_role.go
│ │ ├── model_organization_sandbox_default_limited_network_egress.go
│ │ ├── model_organization_suspension.go
│ │ ├── model_organization_usage_overview.go
│ │ ├── model_organization_user.go
│ │ ├── model_otel_config.go
│ │ ├── model_paginated_audit_logs.go
│ │ ├── model_paginated_jobs.go
│ │ ├── model_paginated_logs.go
│ │ ├── model_paginated_sandboxes.go
│ │ ├── model_paginated_snapshots.go
│ │ ├── model_paginated_traces.go
│ │ ├── model_poll_jobs_response.go
│ │ ├── model_port_preview_url.go
│ │ ├── model_position.go
│ │ ├── model_posthog_config.go
│ │ ├── model_process_errors_response.go
│ │ ├── model_process_logs_response.go
│ │ ├── model_process_restart_response.go
│ │ ├── model_process_status_response.go
│ │ ├── model_project_dir_response.go
│ │ ├── model_pty_create_request.go
│ │ ├── model_pty_create_response.go
│ │ ├── model_pty_list_response.go
│ │ ├── model_pty_resize_request.go
│ │ ├── model_pty_session_info.go
│ │ ├── model_range.go
│ │ ├── model_rate_limit_config.go
│ │ ├── model_rate_limit_entry.go
│ │ ├── model_regenerate_api_key_response.go
│ │ ├── model_region.go
│ │ ├── model_region_quota.go
│ │ ├── model_region_screenshot_response.go
│ │ ├── model_region_type.go
│ │ ├── model_region_usage_overview.go
│ │ ├── model_registry_push_access_dto.go
│ │ ├── model_replace_request.go
│ │ ├── model_replace_result.go
│ │ ├── model_resize_sandbox.go
│ │ ├── model_runner.go
│ │ ├── model_runner_full.go
│ │ ├── model_runner_health_metrics.go
│ │ ├── model_runner_healthcheck.go
│ │ ├── model_runner_service_health.go
│ │ ├── model_runner_snapshot_dto.go
│ │ ├── model_runner_state.go
│ │ ├── model_sandbox.go
│ │ ├── model_sandbox_class.go
│ │ ├── model_sandbox_desired_state.go
│ │ ├── model_sandbox_info.go
│ │ ├── model_sandbox_labels.go
│ │ ├── model_sandbox_state.go
│ │ ├── model_sandbox_volume.go
│ │ ├── model_screenshot_response.go
│ │ ├── model_search_files_response.go
│ │ ├── model_send_webhook_dto.go
│ │ ├── model_session.go
│ │ ├── model_session_execute_request.go
│ │ ├── model_session_execute_response.go
│ │ ├── model_set_snapshot_general_status_dto.go
│ │ ├── model_signed_port_preview_url.go
│ │ ├── model_snapshot_dto.go
│ │ ├── model_snapshot_manager_credentials.go
│ │ ├── model_snapshot_state.go
│ │ ├── model_ssh_access_dto.go
│ │ ├── model_ssh_access_validation_dto.go
│ │ ├── model_storage_access_dto.go
│ │ ├── model_toolbox_proxy_url.go
│ │ ├── model_trace_span.go
│ │ ├── model_trace_summary.go
│ │ ├── model_update_docker_registry.go
│ │ ├── model_update_job_status.go
│ │ ├── model_update_organization_default_region.go
│ │ ├── model_update_organization_invitation.go
│ │ ├── model_update_organization_member_access.go
│ │ ├── model_update_organization_quota.go
│ │ ├── model_update_organization_region_quota.go
│ │ ├── model_update_organization_role.go
│ │ ├── model_update_region.go
│ │ ├── model_update_sandbox_state_dto.go
│ │ ├── model_url.go
│ │ ├── model_user.go
│ │ ├── model_user_home_dir_response.go
│ │ ├── model_user_public_key.go
│ │ ├── model_volume_dto.go
│ │ ├── model_volume_state.go
│ │ ├── model_webhook_app_portal_access.go
│ │ ├── model_webhook_controller_get_status_200_response.go
│ │ ├── model_webhook_event.go
│ │ ├── model_webhook_initialization_status.go
│ │ ├── model_windows_response.go
│ │ ├── model_work_dir_response.go
│ │ ├── model_workspace.go
│ │ ├── model_workspace_port_preview_url.go
│ │ ├── project.json
│ │ ├── response.go
│ │ └── utils.go
│ ├── api-client-python/
│ │ ├── .gitignore
│ │ ├── .openapi-generator/
│ │ │ ├── FILES
│ │ │ └── VERSION
│ │ ├── .openapi-generator-ignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── daytona_api_client/
│ │ │ ├── __init__.py
│ │ │ ├── api/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── admin_api.py
│ │ │ │ ├── api_keys_api.py
│ │ │ │ ├── audit_api.py
│ │ │ │ ├── config_api.py
│ │ │ │ ├── docker_registry_api.py
│ │ │ │ ├── health_api.py
│ │ │ │ ├── jobs_api.py
│ │ │ │ ├── object_storage_api.py
│ │ │ │ ├── organizations_api.py
│ │ │ │ ├── preview_api.py
│ │ │ │ ├── regions_api.py
│ │ │ │ ├── runners_api.py
│ │ │ │ ├── sandbox_api.py
│ │ │ │ ├── snapshots_api.py
│ │ │ │ ├── toolbox_api.py
│ │ │ │ ├── users_api.py
│ │ │ │ ├── volumes_api.py
│ │ │ │ ├── webhooks_api.py
│ │ │ │ └── workspace_api.py
│ │ │ ├── api_client.py
│ │ │ ├── api_response.py
│ │ │ ├── configuration.py
│ │ │ ├── exceptions.py
│ │ │ ├── models/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── account_provider.py
│ │ │ │ ├── admin_create_runner.py
│ │ │ │ ├── announcement.py
│ │ │ │ ├── api_key_list.py
│ │ │ │ ├── api_key_response.py
│ │ │ │ ├── audit_log.py
│ │ │ │ ├── build_info.py
│ │ │ │ ├── command.py
│ │ │ │ ├── completion_context.py
│ │ │ │ ├── completion_item.py
│ │ │ │ ├── completion_list.py
│ │ │ │ ├── compressed_screenshot_response.py
│ │ │ │ ├── computer_use_start_response.py
│ │ │ │ ├── computer_use_status_response.py
│ │ │ │ ├── computer_use_stop_response.py
│ │ │ │ ├── create_api_key.py
│ │ │ │ ├── create_build_info.py
│ │ │ │ ├── create_docker_registry.py
│ │ │ │ ├── create_linked_account.py
│ │ │ │ ├── create_organization.py
│ │ │ │ ├── create_organization_invitation.py
│ │ │ │ ├── create_organization_quota.py
│ │ │ │ ├── create_organization_role.py
│ │ │ │ ├── create_region.py
│ │ │ │ ├── create_region_response.py
│ │ │ │ ├── create_runner.py
│ │ │ │ ├── create_runner_response.py
│ │ │ │ ├── create_sandbox.py
│ │ │ │ ├── create_session_request.py
│ │ │ │ ├── create_snapshot.py
│ │ │ │ ├── create_user.py
│ │ │ │ ├── create_volume.py
│ │ │ │ ├── create_workspace.py
│ │ │ │ ├── daytona_configuration.py
│ │ │ │ ├── display_info_response.py
│ │ │ │ ├── docker_registry.py
│ │ │ │ ├── download_files.py
│ │ │ │ ├── execute_request.py
│ │ │ │ ├── execute_response.py
│ │ │ │ ├── file_info.py
│ │ │ │ ├── file_status.py
│ │ │ │ ├── git_add_request.py
│ │ │ │ ├── git_branch_request.py
│ │ │ │ ├── git_checkout_request.py
│ │ │ │ ├── git_clone_request.py
│ │ │ │ ├── git_commit_info.py
│ │ │ │ ├── git_commit_request.py
│ │ │ │ ├── git_commit_response.py
│ │ │ │ ├── git_delete_branch_request.py
│ │ │ │ ├── git_repo_request.py
│ │ │ │ ├── git_status.py
│ │ │ │ ├── health_controller_check200_response.py
│ │ │ │ ├── health_controller_check200_response_info_value.py
│ │ │ │ ├── health_controller_check503_response.py
│ │ │ │ ├── job.py
│ │ │ │ ├── job_status.py
│ │ │ │ ├── job_type.py
│ │ │ │ ├── keyboard_hotkey_request.py
│ │ │ │ ├── keyboard_press_request.py
│ │ │ │ ├── keyboard_type_request.py
│ │ │ │ ├── list_branch_response.py
│ │ │ │ ├── log_entry.py
│ │ │ │ ├── lsp_completion_params.py
│ │ │ │ ├── lsp_document_request.py
│ │ │ │ ├── lsp_location.py
│ │ │ │ ├── lsp_server_request.py
│ │ │ │ ├── lsp_symbol.py
│ │ │ │ ├── match.py
│ │ │ │ ├── metric_data_point.py
│ │ │ │ ├── metric_series.py
│ │ │ │ ├── metrics_response.py
│ │ │ │ ├── mouse_click_request.py
│ │ │ │ ├── mouse_click_response.py
│ │ │ │ ├── mouse_drag_request.py
│ │ │ │ ├── mouse_drag_response.py
│ │ │ │ ├── mouse_move_request.py
│ │ │ │ ├── mouse_move_response.py
│ │ │ │ ├── mouse_position.py
│ │ │ │ ├── mouse_scroll_request.py
│ │ │ │ ├── mouse_scroll_response.py
│ │ │ │ ├── oidc_config.py
│ │ │ │ ├── organization.py
│ │ │ │ ├── organization_invitation.py
│ │ │ │ ├── organization_role.py
│ │ │ │ ├── organization_sandbox_default_limited_network_egress.py
│ │ │ │ ├── organization_suspension.py
│ │ │ │ ├── organization_usage_overview.py
│ │ │ │ ├── organization_user.py
│ │ │ │ ├── otel_config.py
│ │ │ │ ├── paginated_audit_logs.py
│ │ │ │ ├── paginated_jobs.py
│ │ │ │ ├── paginated_logs.py
│ │ │ │ ├── paginated_sandboxes.py
│ │ │ │ ├── paginated_snapshots.py
│ │ │ │ ├── paginated_traces.py
│ │ │ │ ├── poll_jobs_response.py
│ │ │ │ ├── port_preview_url.py
│ │ │ │ ├── position.py
│ │ │ │ ├── posthog_config.py
│ │ │ │ ├── process_errors_response.py
│ │ │ │ ├── process_logs_response.py
│ │ │ │ ├── process_restart_response.py
│ │ │ │ ├── process_status_response.py
│ │ │ │ ├── project_dir_response.py
│ │ │ │ ├── pty_create_request.py
│ │ │ │ ├── pty_create_response.py
│ │ │ │ ├── pty_list_response.py
│ │ │ │ ├── pty_resize_request.py
│ │ │ │ ├── pty_session_info.py
│ │ │ │ ├── range.py
│ │ │ │ ├── rate_limit_config.py
│ │ │ │ ├── rate_limit_entry.py
│ │ │ │ ├── regenerate_api_key_response.py
│ │ │ │ ├── region.py
│ │ │ │ ├── region_quota.py
│ │ │ │ ├── region_screenshot_response.py
│ │ │ │ ├── region_type.py
│ │ │ │ ├── region_usage_overview.py
│ │ │ │ ├── registry_push_access_dto.py
│ │ │ │ ├── replace_request.py
│ │ │ │ ├── replace_result.py
│ │ │ │ ├── resize_sandbox.py
│ │ │ │ ├── runner.py
│ │ │ │ ├── runner_full.py
│ │ │ │ ├── runner_health_metrics.py
│ │ │ │ ├── runner_healthcheck.py
│ │ │ │ ├── runner_service_health.py
│ │ │ │ ├── runner_snapshot_dto.py
│ │ │ │ ├── runner_state.py
│ │ │ │ ├── sandbox.py
│ │ │ │ ├── sandbox_class.py
│ │ │ │ ├── sandbox_desired_state.py
│ │ │ │ ├── sandbox_info.py
│ │ │ │ ├── sandbox_labels.py
│ │ │ │ ├── sandbox_state.py
│ │ │ │ ├── sandbox_volume.py
│ │ │ │ ├── screenshot_response.py
│ │ │ │ ├── search_files_response.py
│ │ │ │ ├── send_webhook_dto.py
│ │ │ │ ├── session.py
│ │ │ │ ├── session_execute_request.py
│ │ │ │ ├── session_execute_response.py
│ │ │ │ ├── set_snapshot_general_status_dto.py
│ │ │ │ ├── signed_port_preview_url.py
│ │ │ │ ├── snapshot_dto.py
│ │ │ │ ├── snapshot_manager_credentials.py
│ │ │ │ ├── snapshot_state.py
│ │ │ │ ├── ssh_access_dto.py
│ │ │ │ ├── ssh_access_validation_dto.py
│ │ │ │ ├── storage_access_dto.py
│ │ │ │ ├── toolbox_proxy_url.py
│ │ │ │ ├── trace_span.py
│ │ │ │ ├── trace_summary.py
│ │ │ │ ├── update_docker_registry.py
│ │ │ │ ├── update_job_status.py
│ │ │ │ ├── update_organization_default_region.py
│ │ │ │ ├── update_organization_invitation.py
│ │ │ │ ├── update_organization_member_access.py
│ │ │ │ ├── update_organization_quota.py
│ │ │ │ ├── update_organization_region_quota.py
│ │ │ │ ├── update_organization_role.py
│ │ │ │ ├── update_region.py
│ │ │ │ ├── update_sandbox_state_dto.py
│ │ │ │ ├── url.py
│ │ │ │ ├── user.py
│ │ │ │ ├── user_home_dir_response.py
│ │ │ │ ├── user_public_key.py
│ │ │ │ ├── volume_dto.py
│ │ │ │ ├── volume_state.py
│ │ │ │ ├── webhook_app_portal_access.py
│ │ │ │ ├── webhook_controller_get_status200_response.py
│ │ │ │ ├── webhook_event.py
│ │ │ │ ├── webhook_initialization_status.py
│ │ │ │ ├── windows_response.py
│ │ │ │ ├── work_dir_response.py
│ │ │ │ ├── workspace.py
│ │ │ │ └── workspace_port_preview_url.py
│ │ │ ├── py.typed
│ │ │ └── rest.py
│ │ ├── project.json
│ │ ├── pyproject.toml
│ │ ├── requirements.txt
│ │ ├── setup.cfg
│ │ ├── setup.py
│ │ ├── test-requirements.txt
│ │ └── tox.ini
│ ├── api-client-python-async/
│ │ ├── .gitignore
│ │ ├── .openapi-generator/
│ │ │ ├── FILES
│ │ │ └── VERSION
│ │ ├── .openapi-generator-ignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── daytona_api_client_async/
│ │ │ ├── __init__.py
│ │ │ ├── api/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── admin_api.py
│ │ │ │ ├── api_keys_api.py
│ │ │ │ ├── audit_api.py
│ │ │ │ ├── config_api.py
│ │ │ │ ├── docker_registry_api.py
│ │ │ │ ├── health_api.py
│ │ │ │ ├── jobs_api.py
│ │ │ │ ├── object_storage_api.py
│ │ │ │ ├── organizations_api.py
│ │ │ │ ├── preview_api.py
│ │ │ │ ├── regions_api.py
│ │ │ │ ├── runners_api.py
│ │ │ │ ├── sandbox_api.py
│ │ │ │ ├── snapshots_api.py
│ │ │ │ ├── toolbox_api.py
│ │ │ │ ├── users_api.py
│ │ │ │ ├── volumes_api.py
│ │ │ │ ├── webhooks_api.py
│ │ │ │ └── workspace_api.py
│ │ │ ├── api_client.py
│ │ │ ├── api_response.py
│ │ │ ├── configuration.py
│ │ │ ├── exceptions.py
│ │ │ ├── models/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── account_provider.py
│ │ │ │ ├── admin_create_runner.py
│ │ │ │ ├── announcement.py
│ │ │ │ ├── api_key_list.py
│ │ │ │ ├── api_key_response.py
│ │ │ │ ├── audit_log.py
│ │ │ │ ├── build_info.py
│ │ │ │ ├── command.py
│ │ │ │ ├── completion_context.py
│ │ │ │ ├── completion_item.py
│ │ │ │ ├── completion_list.py
│ │ │ │ ├── compressed_screenshot_response.py
│ │ │ │ ├── computer_use_start_response.py
│ │ │ │ ├── computer_use_status_response.py
│ │ │ │ ├── computer_use_stop_response.py
│ │ │ │ ├── create_api_key.py
│ │ │ │ ├── create_build_info.py
│ │ │ │ ├── create_docker_registry.py
│ │ │ │ ├── create_linked_account.py
│ │ │ │ ├── create_organization.py
│ │ │ │ ├── create_organization_invitation.py
│ │ │ │ ├── create_organization_quota.py
│ │ │ │ ├── create_organization_role.py
│ │ │ │ ├── create_region.py
│ │ │ │ ├── create_region_response.py
│ │ │ │ ├── create_runner.py
│ │ │ │ ├── create_runner_response.py
│ │ │ │ ├── create_sandbox.py
│ │ │ │ ├── create_session_request.py
│ │ │ │ ├── create_snapshot.py
│ │ │ │ ├── create_user.py
│ │ │ │ ├── create_volume.py
│ │ │ │ ├── create_workspace.py
│ │ │ │ ├── daytona_configuration.py
│ │ │ │ ├── display_info_response.py
│ │ │ │ ├── docker_registry.py
│ │ │ │ ├── download_files.py
│ │ │ │ ├── execute_request.py
│ │ │ │ ├── execute_response.py
│ │ │ │ ├── file_info.py
│ │ │ │ ├── file_status.py
│ │ │ │ ├── git_add_request.py
│ │ │ │ ├── git_branch_request.py
│ │ │ │ ├── git_checkout_request.py
│ │ │ │ ├── git_clone_request.py
│ │ │ │ ├── git_commit_info.py
│ │ │ │ ├── git_commit_request.py
│ │ │ │ ├── git_commit_response.py
│ │ │ │ ├── git_delete_branch_request.py
│ │ │ │ ├── git_repo_request.py
│ │ │ │ ├── git_status.py
│ │ │ │ ├── health_controller_check200_response.py
│ │ │ │ ├── health_controller_check200_response_info_value.py
│ │ │ │ ├── health_controller_check503_response.py
│ │ │ │ ├── job.py
│ │ │ │ ├── job_status.py
│ │ │ │ ├── job_type.py
│ │ │ │ ├── keyboard_hotkey_request.py
│ │ │ │ ├── keyboard_press_request.py
│ │ │ │ ├── keyboard_type_request.py
│ │ │ │ ├── list_branch_response.py
│ │ │ │ ├── log_entry.py
│ │ │ │ ├── lsp_completion_params.py
│ │ │ │ ├── lsp_document_request.py
│ │ │ │ ├── lsp_location.py
│ │ │ │ ├── lsp_server_request.py
│ │ │ │ ├── lsp_symbol.py
│ │ │ │ ├── match.py
│ │ │ │ ├── metric_data_point.py
│ │ │ │ ├── metric_series.py
│ │ │ │ ├── metrics_response.py
│ │ │ │ ├── mouse_click_request.py
│ │ │ │ ├── mouse_click_response.py
│ │ │ │ ├── mouse_drag_request.py
│ │ │ │ ├── mouse_drag_response.py
│ │ │ │ ├── mouse_move_request.py
│ │ │ │ ├── mouse_move_response.py
│ │ │ │ ├── mouse_position.py
│ │ │ │ ├── mouse_scroll_request.py
│ │ │ │ ├── mouse_scroll_response.py
│ │ │ │ ├── oidc_config.py
│ │ │ │ ├── organization.py
│ │ │ │ ├── organization_invitation.py
│ │ │ │ ├── organization_role.py
│ │ │ │ ├── organization_sandbox_default_limited_network_egress.py
│ │ │ │ ├── organization_suspension.py
│ │ │ │ ├── organization_usage_overview.py
│ │ │ │ ├── organization_user.py
│ │ │ │ ├── otel_config.py
│ │ │ │ ├── paginated_audit_logs.py
│ │ │ │ ├── paginated_jobs.py
│ │ │ │ ├── paginated_logs.py
│ │ │ │ ├── paginated_sandboxes.py
│ │ │ │ ├── paginated_snapshots.py
│ │ │ │ ├── paginated_traces.py
│ │ │ │ ├── poll_jobs_response.py
│ │ │ │ ├── port_preview_url.py
│ │ │ │ ├── position.py
│ │ │ │ ├── posthog_config.py
│ │ │ │ ├── process_errors_response.py
│ │ │ │ ├── process_logs_response.py
│ │ │ │ ├── process_restart_response.py
│ │ │ │ ├── process_status_response.py
│ │ │ │ ├── project_dir_response.py
│ │ │ │ ├── pty_create_request.py
│ │ │ │ ├── pty_create_response.py
│ │ │ │ ├── pty_list_response.py
│ │ │ │ ├── pty_resize_request.py
│ │ │ │ ├── pty_session_info.py
│ │ │ │ ├── range.py
│ │ │ │ ├── rate_limit_config.py
│ │ │ │ ├── rate_limit_entry.py
│ │ │ │ ├── regenerate_api_key_response.py
│ │ │ │ ├── region.py
│ │ │ │ ├── region_quota.py
│ │ │ │ ├── region_screenshot_response.py
│ │ │ │ ├── region_type.py
│ │ │ │ ├── region_usage_overview.py
│ │ │ │ ├── registry_push_access_dto.py
│ │ │ │ ├── replace_request.py
│ │ │ │ ├── replace_result.py
│ │ │ │ ├── resize_sandbox.py
│ │ │ │ ├── runner.py
│ │ │ │ ├── runner_full.py
│ │ │ │ ├── runner_health_metrics.py
│ │ │ │ ├── runner_healthcheck.py
│ │ │ │ ├── runner_service_health.py
│ │ │ │ ├── runner_snapshot_dto.py
│ │ │ │ ├── runner_state.py
│ │ │ │ ├── sandbox.py
│ │ │ │ ├── sandbox_class.py
│ │ │ │ ├── sandbox_desired_state.py
│ │ │ │ ├── sandbox_info.py
│ │ │ │ ├── sandbox_labels.py
│ │ │ │ ├── sandbox_state.py
│ │ │ │ ├── sandbox_volume.py
│ │ │ │ ├── screenshot_response.py
│ │ │ │ ├── search_files_response.py
│ │ │ │ ├── send_webhook_dto.py
│ │ │ │ ├── session.py
│ │ │ │ ├── session_execute_request.py
│ │ │ │ ├── session_execute_response.py
│ │ │ │ ├── set_snapshot_general_status_dto.py
│ │ │ │ ├── signed_port_preview_url.py
│ │ │ │ ├── snapshot_dto.py
│ │ │ │ ├── snapshot_manager_credentials.py
│ │ │ │ ├── snapshot_state.py
│ │ │ │ ├── ssh_access_dto.py
│ │ │ │ ├── ssh_access_validation_dto.py
│ │ │ │ ├── storage_access_dto.py
│ │ │ │ ├── toolbox_proxy_url.py
│ │ │ │ ├── trace_span.py
│ │ │ │ ├── trace_summary.py
│ │ │ │ ├── update_docker_registry.py
│ │ │ │ ├── update_job_status.py
│ │ │ │ ├── update_organization_default_region.py
│ │ │ │ ├── update_organization_invitation.py
│ │ │ │ ├── update_organization_member_access.py
│ │ │ │ ├── update_organization_quota.py
│ │ │ │ ├── update_organization_region_quota.py
│ │ │ │ ├── update_organization_role.py
│ │ │ │ ├── update_region.py
│ │ │ │ ├── update_sandbox_state_dto.py
│ │ │ │ ├── url.py
│ │ │ │ ├── user.py
│ │ │ │ ├── user_home_dir_response.py
│ │ │ │ ├── user_public_key.py
│ │ │ │ ├── volume_dto.py
│ │ │ │ ├── volume_state.py
│ │ │ │ ├── webhook_app_portal_access.py
│ │ │ │ ├── webhook_controller_get_status200_response.py
│ │ │ │ ├── webhook_event.py
│ │ │ │ ├── webhook_initialization_status.py
│ │ │ │ ├── windows_response.py
│ │ │ │ ├── work_dir_response.py
│ │ │ │ ├── workspace.py
│ │ │ │ └── workspace_port_preview_url.py
│ │ │ ├── py.typed
│ │ │ └── rest.py
│ │ ├── project.json
│ │ ├── pyproject.toml
│ │ ├── requirements.txt
│ │ ├── setup.cfg
│ │ ├── setup.py
│ │ ├── test-requirements.txt
│ │ └── tox.ini
│ ├── api-client-ruby/
│ │ ├── .gitignore
│ │ ├── .openapi-generator/
│ │ │ ├── FILES
│ │ │ └── VERSION
│ │ ├── .openapi-generator-ignore
│ │ ├── .rspec
│ │ ├── .rubocop.yml
│ │ ├── Gemfile
│ │ ├── Rakefile
│ │ ├── daytona_api_client.gemspec
│ │ ├── fix-gemspec.sh
│ │ ├── lib/
│ │ │ ├── daytona_api_client/
│ │ │ │ ├── api/
│ │ │ │ │ ├── admin_api.rb
│ │ │ │ │ ├── api_keys_api.rb
│ │ │ │ │ ├── audit_api.rb
│ │ │ │ │ ├── config_api.rb
│ │ │ │ │ ├── docker_registry_api.rb
│ │ │ │ │ ├── health_api.rb
│ │ │ │ │ ├── jobs_api.rb
│ │ │ │ │ ├── object_storage_api.rb
│ │ │ │ │ ├── organizations_api.rb
│ │ │ │ │ ├── preview_api.rb
│ │ │ │ │ ├── regions_api.rb
│ │ │ │ │ ├── runners_api.rb
│ │ │ │ │ ├── sandbox_api.rb
│ │ │ │ │ ├── snapshots_api.rb
│ │ │ │ │ ├── toolbox_api.rb
│ │ │ │ │ ├── users_api.rb
│ │ │ │ │ ├── volumes_api.rb
│ │ │ │ │ ├── webhooks_api.rb
│ │ │ │ │ └── workspace_api.rb
│ │ │ │ ├── api_client.rb
│ │ │ │ ├── api_error.rb
│ │ │ │ ├── configuration.rb
│ │ │ │ ├── models/
│ │ │ │ │ ├── account_provider.rb
│ │ │ │ │ ├── admin_create_runner.rb
│ │ │ │ │ ├── announcement.rb
│ │ │ │ │ ├── api_key_list.rb
│ │ │ │ │ ├── api_key_response.rb
│ │ │ │ │ ├── audit_log.rb
│ │ │ │ │ ├── build_info.rb
│ │ │ │ │ ├── command.rb
│ │ │ │ │ ├── completion_context.rb
│ │ │ │ │ ├── completion_item.rb
│ │ │ │ │ ├── completion_list.rb
│ │ │ │ │ ├── compressed_screenshot_response.rb
│ │ │ │ │ ├── computer_use_start_response.rb
│ │ │ │ │ ├── computer_use_status_response.rb
│ │ │ │ │ ├── computer_use_stop_response.rb
│ │ │ │ │ ├── create_api_key.rb
│ │ │ │ │ ├── create_build_info.rb
│ │ │ │ │ ├── create_docker_registry.rb
│ │ │ │ │ ├── create_linked_account.rb
│ │ │ │ │ ├── create_organization.rb
│ │ │ │ │ ├── create_organization_invitation.rb
│ │ │ │ │ ├── create_organization_quota.rb
│ │ │ │ │ ├── create_organization_role.rb
│ │ │ │ │ ├── create_region.rb
│ │ │ │ │ ├── create_region_response.rb
│ │ │ │ │ ├── create_runner.rb
│ │ │ │ │ ├── create_runner_response.rb
│ │ │ │ │ ├── create_sandbox.rb
│ │ │ │ │ ├── create_session_request.rb
│ │ │ │ │ ├── create_snapshot.rb
│ │ │ │ │ ├── create_user.rb
│ │ │ │ │ ├── create_volume.rb
│ │ │ │ │ ├── create_workspace.rb
│ │ │ │ │ ├── daytona_configuration.rb
│ │ │ │ │ ├── display_info_response.rb
│ │ │ │ │ ├── docker_registry.rb
│ │ │ │ │ ├── download_files.rb
│ │ │ │ │ ├── execute_request.rb
│ │ │ │ │ ├── execute_response.rb
│ │ │ │ │ ├── file_info.rb
│ │ │ │ │ ├── file_status.rb
│ │ │ │ │ ├── git_add_request.rb
│ │ │ │ │ ├── git_branch_request.rb
│ │ │ │ │ ├── git_checkout_request.rb
│ │ │ │ │ ├── git_clone_request.rb
│ │ │ │ │ ├── git_commit_info.rb
│ │ │ │ │ ├── git_commit_request.rb
│ │ │ │ │ ├── git_commit_response.rb
│ │ │ │ │ ├── git_delete_branch_request.rb
│ │ │ │ │ ├── git_repo_request.rb
│ │ │ │ │ ├── git_status.rb
│ │ │ │ │ ├── health_controller_check200_response.rb
│ │ │ │ │ ├── health_controller_check200_response_info_value.rb
│ │ │ │ │ ├── health_controller_check503_response.rb
│ │ │ │ │ ├── job.rb
│ │ │ │ │ ├── job_status.rb
│ │ │ │ │ ├── job_type.rb
│ │ │ │ │ ├── keyboard_hotkey_request.rb
│ │ │ │ │ ├── keyboard_press_request.rb
│ │ │ │ │ ├── keyboard_type_request.rb
│ │ │ │ │ ├── list_branch_response.rb
│ │ │ │ │ ├── log_entry.rb
│ │ │ │ │ ├── lsp_completion_params.rb
│ │ │ │ │ ├── lsp_document_request.rb
│ │ │ │ │ ├── lsp_location.rb
│ │ │ │ │ ├── lsp_server_request.rb
│ │ │ │ │ ├── lsp_symbol.rb
│ │ │ │ │ ├── match.rb
│ │ │ │ │ ├── metric_data_point.rb
│ │ │ │ │ ├── metric_series.rb
│ │ │ │ │ ├── metrics_response.rb
│ │ │ │ │ ├── mouse_click_request.rb
│ │ │ │ │ ├── mouse_click_response.rb
│ │ │ │ │ ├── mouse_drag_request.rb
│ │ │ │ │ ├── mouse_drag_response.rb
│ │ │ │ │ ├── mouse_move_request.rb
│ │ │ │ │ ├── mouse_move_response.rb
│ │ │ │ │ ├── mouse_position.rb
│ │ │ │ │ ├── mouse_scroll_request.rb
│ │ │ │ │ ├── mouse_scroll_response.rb
│ │ │ │ │ ├── oidc_config.rb
│ │ │ │ │ ├── organization.rb
│ │ │ │ │ ├── organization_invitation.rb
│ │ │ │ │ ├── organization_role.rb
│ │ │ │ │ ├── organization_sandbox_default_limited_network_egress.rb
│ │ │ │ │ ├── organization_suspension.rb
│ │ │ │ │ ├── organization_usage_overview.rb
│ │ │ │ │ ├── organization_user.rb
│ │ │ │ │ ├── otel_config.rb
│ │ │ │ │ ├── paginated_audit_logs.rb
│ │ │ │ │ ├── paginated_jobs.rb
│ │ │ │ │ ├── paginated_logs.rb
│ │ │ │ │ ├── paginated_sandboxes.rb
│ │ │ │ │ ├── paginated_snapshots.rb
│ │ │ │ │ ├── paginated_traces.rb
│ │ │ │ │ ├── poll_jobs_response.rb
│ │ │ │ │ ├── port_preview_url.rb
│ │ │ │ │ ├── position.rb
│ │ │ │ │ ├── posthog_config.rb
│ │ │ │ │ ├── process_errors_response.rb
│ │ │ │ │ ├── process_logs_response.rb
│ │ │ │ │ ├── process_restart_response.rb
│ │ │ │ │ ├── process_status_response.rb
│ │ │ │ │ ├── project_dir_response.rb
│ │ │ │ │ ├── pty_create_request.rb
│ │ │ │ │ ├── pty_create_response.rb
│ │ │ │ │ ├── pty_list_response.rb
│ │ │ │ │ ├── pty_resize_request.rb
│ │ │ │ │ ├── pty_session_info.rb
│ │ │ │ │ ├── range.rb
│ │ │ │ │ ├── rate_limit_config.rb
│ │ │ │ │ ├── rate_limit_entry.rb
│ │ │ │ │ ├── regenerate_api_key_response.rb
│ │ │ │ │ ├── region.rb
│ │ │ │ │ ├── region_quota.rb
│ │ │ │ │ ├── region_screenshot_response.rb
│ │ │ │ │ ├── region_type.rb
│ │ │ │ │ ├── region_usage_overview.rb
│ │ │ │ │ ├── registry_push_access_dto.rb
│ │ │ │ │ ├── replace_request.rb
│ │ │ │ │ ├── replace_result.rb
│ │ │ │ │ ├── resize_sandbox.rb
│ │ │ │ │ ├── runner.rb
│ │ │ │ │ ├── runner_full.rb
│ │ │ │ │ ├── runner_health_metrics.rb
│ │ │ │ │ ├── runner_healthcheck.rb
│ │ │ │ │ ├── runner_service_health.rb
│ │ │ │ │ ├── runner_snapshot_dto.rb
│ │ │ │ │ ├── runner_state.rb
│ │ │ │ │ ├── sandbox.rb
│ │ │ │ │ ├── sandbox_class.rb
│ │ │ │ │ ├── sandbox_desired_state.rb
│ │ │ │ │ ├── sandbox_info.rb
│ │ │ │ │ ├── sandbox_labels.rb
│ │ │ │ │ ├── sandbox_state.rb
│ │ │ │ │ ├── sandbox_volume.rb
│ │ │ │ │ ├── screenshot_response.rb
│ │ │ │ │ ├── search_files_response.rb
│ │ │ │ │ ├── send_webhook_dto.rb
│ │ │ │ │ ├── session.rb
│ │ │ │ │ ├── session_execute_request.rb
│ │ │ │ │ ├── session_execute_response.rb
│ │ │ │ │ ├── set_snapshot_general_status_dto.rb
│ │ │ │ │ ├── signed_port_preview_url.rb
│ │ │ │ │ ├── snapshot_dto.rb
│ │ │ │ │ ├── snapshot_manager_credentials.rb
│ │ │ │ │ ├── snapshot_state.rb
│ │ │ │ │ ├── ssh_access_dto.rb
│ │ │ │ │ ├── ssh_access_validation_dto.rb
│ │ │ │ │ ├── storage_access_dto.rb
│ │ │ │ │ ├── toolbox_proxy_url.rb
│ │ │ │ │ ├── trace_span.rb
│ │ │ │ │ ├── trace_summary.rb
│ │ │ │ │ ├── update_docker_registry.rb
│ │ │ │ │ ├── update_job_status.rb
│ │ │ │ │ ├── update_organization_default_region.rb
│ │ │ │ │ ├── update_organization_invitation.rb
│ │ │ │ │ ├── update_organization_member_access.rb
│ │ │ │ │ ├── update_organization_quota.rb
│ │ │ │ │ ├── update_organization_region_quota.rb
│ │ │ │ │ ├── update_organization_role.rb
│ │ │ │ │ ├── update_region.rb
│ │ │ │ │ ├── update_sandbox_state_dto.rb
│ │ │ │ │ ├── url.rb
│ │ │ │ │ ├── user.rb
│ │ │ │ │ ├── user_home_dir_response.rb
│ │ │ │ │ ├── user_public_key.rb
│ │ │ │ │ ├── volume_dto.rb
│ │ │ │ │ ├── volume_state.rb
│ │ │ │ │ ├── webhook_app_portal_access.rb
│ │ │ │ │ ├── webhook_controller_get_status200_response.rb
│ │ │ │ │ ├── webhook_event.rb
│ │ │ │ │ ├── webhook_initialization_status.rb
│ │ │ │ │ ├── windows_response.rb
│ │ │ │ │ ├── work_dir_response.rb
│ │ │ │ │ ├── workspace.rb
│ │ │ │ │ └── workspace_port_preview_url.rb
│ │ │ │ └── version.rb
│ │ │ └── daytona_api_client.rb
│ │ └── project.json
│ ├── common-go/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── pkg/
│ │ ├── cache/
│ │ │ ├── interface.go
│ │ │ ├── map_cache.go
│ │ │ └── redis_cache.go
│ │ ├── errors/
│ │ │ ├── convert_openapi_error.go
│ │ │ ├── http.go
│ │ │ └── middleware.go
│ │ ├── log/
│ │ │ ├── handlers.go
│ │ │ ├── level.go
│ │ │ ├── prefix_writer.go
│ │ │ ├── read_multiplex_log.go
│ │ │ └── writer.go
│ │ ├── proxy/
│ │ │ ├── conn_monitor.go
│ │ │ └── proxy.go
│ │ ├── telemetry/
│ │ │ ├── common.go
│ │ │ ├── logging.go
│ │ │ ├── metrics.go
│ │ │ └── tracing.go
│ │ ├── timer/
│ │ │ └── timer.go
│ │ └── utils/
│ │ └── exponential_backoff.go
│ ├── computer-use/
│ │ ├── README.md
│ │ ├── computer_use_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ ├── pkg/
│ │ │ └── computeruse/
│ │ │ ├── computeruse.go
│ │ │ ├── display.go
│ │ │ ├── keyboard.go
│ │ │ ├── mouse.go
│ │ │ └── screenshot.go
│ │ └── project.json
│ ├── opencode-plugin/
│ │ ├── .gitignore
│ │ ├── .npmignore
│ │ ├── .opencode/
│ │ │ └── plugin/
│ │ │ ├── daytona/
│ │ │ │ ├── core/
│ │ │ │ │ ├── logger.ts
│ │ │ │ │ ├── project-data-storage.ts
│ │ │ │ │ ├── session-manager.ts
│ │ │ │ │ ├── toast.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── git/
│ │ │ │ │ ├── host-git-manager.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── sandbox-git-manager.ts
│ │ │ │ │ └── session-git-manager.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── plugins/
│ │ │ │ │ ├── custom-tools.ts
│ │ │ │ │ ├── session-events.ts
│ │ │ │ │ └── system-transform.ts
│ │ │ │ ├── tools/
│ │ │ │ │ ├── bash.ts
│ │ │ │ │ ├── edit.ts
│ │ │ │ │ ├── get-preview-url.ts
│ │ │ │ │ ├── glob.ts
│ │ │ │ │ ├── grep.ts
│ │ │ │ │ ├── ls.ts
│ │ │ │ │ ├── lsp.ts
│ │ │ │ │ ├── multiedit.ts
│ │ │ │ │ ├── patch.ts
│ │ │ │ │ ├── read.ts
│ │ │ │ │ └── write.ts
│ │ │ │ └── tools.ts
│ │ │ └── index.ts
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── runner-api-client/
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── src/
│ │ │ ├── .gitignore
│ │ │ ├── .npmignore
│ │ │ ├── .openapi-generator/
│ │ │ │ ├── FILES
│ │ │ │ └── VERSION
│ │ │ ├── .openapi-generator-ignore
│ │ │ ├── api/
│ │ │ │ ├── default-api.ts
│ │ │ │ ├── sandbox-api.ts
│ │ │ │ ├── snapshots-api.ts
│ │ │ │ └── toolbox-api.ts
│ │ │ ├── api.ts
│ │ │ ├── base.ts
│ │ │ ├── common.ts
│ │ │ ├── configuration.ts
│ │ │ ├── git_push.sh
│ │ │ ├── index.ts
│ │ │ └── models/
│ │ │ ├── build-snapshot-request-dto.ts
│ │ │ ├── create-backup-dto.ts
│ │ │ ├── create-sandbox-dto.ts
│ │ │ ├── dto-volume-dto.ts
│ │ │ ├── enums-backup-state.ts
│ │ │ ├── enums-sandbox-state.ts
│ │ │ ├── error-response.ts
│ │ │ ├── index.ts
│ │ │ ├── inspect-snapshot-in-registry-request.ts
│ │ │ ├── is-recoverable-dto.ts
│ │ │ ├── is-recoverable-response.ts
│ │ │ ├── pull-snapshot-request-dto.ts
│ │ │ ├── recover-sandbox-dto.ts
│ │ │ ├── registry-dto.ts
│ │ │ ├── resize-sandbox-dto.ts
│ │ │ ├── runner-info-response-dto.ts
│ │ │ ├── runner-metrics.ts
│ │ │ ├── runner-service-info.ts
│ │ │ ├── sandbox-info-response.ts
│ │ │ ├── snapshot-digest-response.ts
│ │ │ ├── snapshot-exists-response.ts
│ │ │ ├── snapshot-info-response.ts
│ │ │ ├── start-sandbox-response.ts
│ │ │ ├── tag-image-request-dto.ts
│ │ │ └── update-network-settings-dto.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── sdk-go/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── pkg/
│ │ │ ├── common/
│ │ │ │ └── url_helpers.go
│ │ │ ├── daytona/
│ │ │ │ ├── VERSION
│ │ │ │ ├── client.go
│ │ │ │ ├── client_test.go
│ │ │ │ ├── code_interpreter.go
│ │ │ │ ├── computer_use.go
│ │ │ │ ├── filesystem.go
│ │ │ │ ├── git.go
│ │ │ │ ├── image.go
│ │ │ │ ├── lsp_server.go
│ │ │ │ ├── object_storage.go
│ │ │ │ ├── otel.go
│ │ │ │ ├── process.go
│ │ │ │ ├── process_test.go
│ │ │ │ ├── pty_handle.go
│ │ │ │ ├── sandbox.go
│ │ │ │ ├── snapshot.go
│ │ │ │ ├── version.go
│ │ │ │ └── volume.go
│ │ │ ├── errors/
│ │ │ │ └── errors.go
│ │ │ ├── options/
│ │ │ │ ├── client.go
│ │ │ │ ├── code_interpreter.go
│ │ │ │ ├── filesystem.go
│ │ │ │ ├── git.go
│ │ │ │ ├── image.go
│ │ │ │ └── process.go
│ │ │ └── types/
│ │ │ └── types.go
│ │ ├── project.json
│ │ └── templates/
│ │ ├── example.gotxt
│ │ ├── file.gotxt
│ │ ├── func.gotxt
│ │ └── type.gotxt
│ ├── sdk-python/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── pydoc-markdown.yml
│ │ ├── pyproject.toml
│ │ ├── scripts/
│ │ │ ├── add-api-clients.sh
│ │ │ ├── build-sdk.sh
│ │ │ ├── chart_data_extractor_wrapper.py
│ │ │ ├── docs-code-block-indentation.sh
│ │ │ └── docs-reorder-sections.sh
│ │ └── src/
│ │ └── daytona/
│ │ ├── __init__.py
│ │ ├── _async/
│ │ │ ├── __init__.py
│ │ │ ├── code_interpreter.py
│ │ │ ├── computer_use.py
│ │ │ ├── daytona.py
│ │ │ ├── filesystem.py
│ │ │ ├── git.py
│ │ │ ├── lsp_server.py
│ │ │ ├── object_storage.py
│ │ │ ├── process.py
│ │ │ ├── sandbox.py
│ │ │ ├── snapshot.py
│ │ │ └── volume.py
│ │ ├── _sync/
│ │ │ ├── __init__.py
│ │ │ ├── code_interpreter.py
│ │ │ ├── computer_use.py
│ │ │ ├── daytona.py
│ │ │ ├── filesystem.py
│ │ │ ├── git.py
│ │ │ ├── lsp_server.py
│ │ │ ├── object_storage.py
│ │ │ ├── process.py
│ │ │ ├── sandbox.py
│ │ │ ├── snapshot.py
│ │ │ └── volume.py
│ │ ├── _utils/
│ │ │ ├── __init__.py
│ │ │ ├── deprecation.py
│ │ │ ├── docs_ignore.py
│ │ │ ├── enum.py
│ │ │ ├── environment.py
│ │ │ ├── errors.py
│ │ │ ├── otel_decorator.py
│ │ │ ├── stream.py
│ │ │ ├── timeout.py
│ │ │ └── types.py
│ │ ├── code_toolbox/
│ │ │ ├── __init__.py
│ │ │ ├── sandbox_js_code_toolbox.py
│ │ │ ├── sandbox_python_code_toolbox.py
│ │ │ └── sandbox_ts_code_toolbox.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── charts.py
│ │ │ ├── code_interpreter.py
│ │ │ ├── computer_use.py
│ │ │ ├── daytona.py
│ │ │ ├── errors.py
│ │ │ ├── filesystem.py
│ │ │ ├── git.py
│ │ │ ├── image.py
│ │ │ ├── lsp_server.py
│ │ │ ├── process.py
│ │ │ ├── protocols.py
│ │ │ ├── pty.py
│ │ │ ├── sandbox.py
│ │ │ ├── snapshot.py
│ │ │ └── volume.py
│ │ ├── handle/
│ │ │ ├── async_pty_handle.py
│ │ │ └── pty_handle.py
│ │ ├── internal/
│ │ │ ├── __init__.py
│ │ │ └── toolbox_api_client_proxy.py
│ │ └── py.typed
│ ├── sdk-ruby/
│ │ ├── .gitignore
│ │ ├── .rubocop.yml
│ │ ├── .ruby-version
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── Gemfile
│ │ ├── README.md
│ │ ├── Rakefile
│ │ ├── bin/
│ │ │ ├── console
│ │ │ └── setup
│ │ ├── daytona.gemspec
│ │ ├── lib/
│ │ │ ├── daytona/
│ │ │ │ ├── code_interpreter.rb
│ │ │ │ ├── code_toolbox/
│ │ │ │ │ ├── sandbox_js_code_toolbox.rb
│ │ │ │ │ ├── sandbox_python_code_toolbox.rb
│ │ │ │ │ └── sandbox_ts_code_toolbox.rb
│ │ │ │ ├── common/
│ │ │ │ │ ├── charts.rb
│ │ │ │ │ ├── code_interpreter.rb
│ │ │ │ │ ├── code_language.rb
│ │ │ │ │ ├── daytona.rb
│ │ │ │ │ ├── file_system.rb
│ │ │ │ │ ├── git.rb
│ │ │ │ │ ├── image.rb
│ │ │ │ │ ├── process.rb
│ │ │ │ │ ├── pty.rb
│ │ │ │ │ ├── resources.rb
│ │ │ │ │ ├── response.rb
│ │ │ │ │ └── snapshot.rb
│ │ │ │ ├── computer_use.rb
│ │ │ │ ├── config.rb
│ │ │ │ ├── daytona.rb
│ │ │ │ ├── file_system.rb
│ │ │ │ ├── git.rb
│ │ │ │ ├── lsp_server.rb
│ │ │ │ ├── object_storage.rb
│ │ │ │ ├── otel.rb
│ │ │ │ ├── process.rb
│ │ │ │ ├── sandbox.rb
│ │ │ │ ├── sdk/
│ │ │ │ │ └── version.rb
│ │ │ │ ├── sdk.rb
│ │ │ │ ├── snapshot_service.rb
│ │ │ │ ├── util.rb
│ │ │ │ ├── volume.rb
│ │ │ │ └── volume_service.rb
│ │ │ └── daytona.rb
│ │ ├── project.json
│ │ ├── scripts/
│ │ │ └── generate-docs.rb
│ │ └── sig/
│ │ └── daytona/
│ │ └── sdk.rbs
│ ├── sdk-typescript/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── hooks/
│ │ │ └── typedoc-custom.mjs
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── src/
│ │ │ ├── CodeInterpreter.ts
│ │ │ ├── ComputerUse.ts
│ │ │ ├── Daytona.ts
│ │ │ ├── FileSystem.ts
│ │ │ ├── Git.ts
│ │ │ ├── Image.ts
│ │ │ ├── LspServer.ts
│ │ │ ├── ObjectStorage.ts
│ │ │ ├── Process.ts
│ │ │ ├── PtyHandle.ts
│ │ │ ├── Sandbox.ts
│ │ │ ├── Snapshot.ts
│ │ │ ├── Volume.ts
│ │ │ ├── code-toolbox/
│ │ │ │ ├── SandboxJsCodeToolbox.ts
│ │ │ │ ├── SandboxPythonCodeToolbox.ts
│ │ │ │ └── SandboxTsCodeToolbox.ts
│ │ │ ├── errors/
│ │ │ │ └── DaytonaError.ts
│ │ │ ├── index.ts
│ │ │ ├── types/
│ │ │ │ ├── Charts.ts
│ │ │ │ ├── CodeInterpreter.ts
│ │ │ │ ├── ExecuteResponse.ts
│ │ │ │ └── Pty.ts
│ │ │ └── utils/
│ │ │ ├── ArtifactParser.ts
│ │ │ ├── Binary.ts
│ │ │ ├── FileTransfer.ts
│ │ │ ├── Import.ts
│ │ │ ├── Multipart.ts
│ │ │ ├── Runtime.ts
│ │ │ ├── Stream.ts
│ │ │ ├── WebSocket.ts
│ │ │ └── otel.decorator.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.lib.json
│ │ ├── tsconfig.spec.json
│ │ └── typedoc.json
│ ├── toolbox-api-client/
│ │ ├── LICENSE
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── src/
│ │ │ ├── .gitignore
│ │ │ ├── .npmignore
│ │ │ ├── .openapi-generator/
│ │ │ │ ├── FILES
│ │ │ │ └── VERSION
│ │ │ ├── .openapi-generator-ignore
│ │ │ ├── api/
│ │ │ │ ├── computer-use-api.ts
│ │ │ │ ├── file-system-api.ts
│ │ │ │ ├── git-api.ts
│ │ │ │ ├── info-api.ts
│ │ │ │ ├── interpreter-api.ts
│ │ │ │ ├── lsp-api.ts
│ │ │ │ ├── port-api.ts
│ │ │ │ ├── process-api.ts
│ │ │ │ └── server-api.ts
│ │ │ ├── api.ts
│ │ │ ├── base.ts
│ │ │ ├── common.ts
│ │ │ ├── configuration.ts
│ │ │ ├── git_push.sh
│ │ │ ├── index.ts
│ │ │ └── models/
│ │ │ ├── command.ts
│ │ │ ├── completion-context.ts
│ │ │ ├── completion-item.ts
│ │ │ ├── completion-list.ts
│ │ │ ├── computer-use-start-response.ts
│ │ │ ├── computer-use-status-response.ts
│ │ │ ├── computer-use-stop-response.ts
│ │ │ ├── create-context-request.ts
│ │ │ ├── create-session-request.ts
│ │ │ ├── display-info-response.ts
│ │ │ ├── display-info.ts
│ │ │ ├── execute-request.ts
│ │ │ ├── execute-response.ts
│ │ │ ├── file-info.ts
│ │ │ ├── file-status.ts
│ │ │ ├── files-download-request.ts
│ │ │ ├── git-add-request.ts
│ │ │ ├── git-branch-request.ts
│ │ │ ├── git-checkout-request.ts
│ │ │ ├── git-clone-request.ts
│ │ │ ├── git-commit-info.ts
│ │ │ ├── git-commit-request.ts
│ │ │ ├── git-commit-response.ts
│ │ │ ├── git-git-delete-branch-request.ts
│ │ │ ├── git-repo-request.ts
│ │ │ ├── git-status.ts
│ │ │ ├── index.ts
│ │ │ ├── initialize-request.ts
│ │ │ ├── interpreter-context.ts
│ │ │ ├── is-port-in-use-response.ts
│ │ │ ├── keyboard-hotkey-request.ts
│ │ │ ├── keyboard-press-request.ts
│ │ │ ├── keyboard-type-request.ts
│ │ │ ├── list-branch-response.ts
│ │ │ ├── list-contexts-response.ts
│ │ │ ├── list-recordings-response.ts
│ │ │ ├── lsp-completion-params.ts
│ │ │ ├── lsp-document-request.ts
│ │ │ ├── lsp-location.ts
│ │ │ ├── lsp-position.ts
│ │ │ ├── lsp-range.ts
│ │ │ ├── lsp-server-request.ts
│ │ │ ├── lsp-symbol.ts
│ │ │ ├── match.ts
│ │ │ ├── mouse-click-request.ts
│ │ │ ├── mouse-click-response.ts
│ │ │ ├── mouse-drag-request.ts
│ │ │ ├── mouse-drag-response.ts
│ │ │ ├── mouse-move-request.ts
│ │ │ ├── mouse-position-response.ts
│ │ │ ├── mouse-scroll-request.ts
│ │ │ ├── port-list.ts
│ │ │ ├── position.ts
│ │ │ ├── process-errors-response.ts
│ │ │ ├── process-logs-response.ts
│ │ │ ├── process-restart-response.ts
│ │ │ ├── process-status-response.ts
│ │ │ ├── process-status.ts
│ │ │ ├── pty-create-request.ts
│ │ │ ├── pty-create-response.ts
│ │ │ ├── pty-list-response.ts
│ │ │ ├── pty-resize-request.ts
│ │ │ ├── pty-session-info.ts
│ │ │ ├── recording.ts
│ │ │ ├── replace-request.ts
│ │ │ ├── replace-result.ts
│ │ │ ├── screenshot-response.ts
│ │ │ ├── scroll-response.ts
│ │ │ ├── search-files-response.ts
│ │ │ ├── session-execute-request.ts
│ │ │ ├── session-execute-response.ts
│ │ │ ├── session-send-input-request.ts
│ │ │ ├── session.ts
│ │ │ ├── start-recording-request.ts
│ │ │ ├── status.ts
│ │ │ ├── stop-recording-request.ts
│ │ │ ├── user-home-dir-response.ts
│ │ │ ├── window-info.ts
│ │ │ ├── windows-response.ts
│ │ │ └── work-dir-response.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── toolbox-api-client-go/
│ │ ├── .gitignore
│ │ ├── .openapi-generator/
│ │ │ ├── FILES
│ │ │ └── VERSION
│ │ ├── .openapi-generator-ignore
│ │ ├── LICENSE
│ │ ├── api/
│ │ │ └── openapi.yaml
│ │ ├── api_computer_use.go
│ │ ├── api_file_system.go
│ │ ├── api_git.go
│ │ ├── api_info.go
│ │ ├── api_interpreter.go
│ │ ├── api_lsp.go
│ │ ├── api_port.go
│ │ ├── api_process.go
│ │ ├── api_server.go
│ │ ├── client.go
│ │ ├── configuration.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── model_command.go
│ │ ├── model_completion_context.go
│ │ ├── model_completion_item.go
│ │ ├── model_completion_list.go
│ │ ├── model_computer_use_start_response.go
│ │ ├── model_computer_use_status_response.go
│ │ ├── model_computer_use_stop_response.go
│ │ ├── model_create_context_request.go
│ │ ├── model_create_session_request.go
│ │ ├── model_display_info.go
│ │ ├── model_display_info_response.go
│ │ ├── model_execute_request.go
│ │ ├── model_execute_response.go
│ │ ├── model_file_info.go
│ │ ├── model_file_status.go
│ │ ├── model_files_download_request.go
│ │ ├── model_git_add_request.go
│ │ ├── model_git_branch_request.go
│ │ ├── model_git_checkout_request.go
│ │ ├── model_git_clone_request.go
│ │ ├── model_git_commit_info.go
│ │ ├── model_git_commit_request.go
│ │ ├── model_git_commit_response.go
│ │ ├── model_git_git_delete_branch_request.go
│ │ ├── model_git_repo_request.go
│ │ ├── model_git_status.go
│ │ ├── model_initialize_request.go
│ │ ├── model_interpreter_context.go
│ │ ├── model_is_port_in_use_response.go
│ │ ├── model_keyboard_hotkey_request.go
│ │ ├── model_keyboard_press_request.go
│ │ ├── model_keyboard_type_request.go
│ │ ├── model_list_branch_response.go
│ │ ├── model_list_contexts_response.go
│ │ ├── model_list_recordings_response.go
│ │ ├── model_lsp_completion_params.go
│ │ ├── model_lsp_document_request.go
│ │ ├── model_lsp_location.go
│ │ ├── model_lsp_position.go
│ │ ├── model_lsp_range.go
│ │ ├── model_lsp_server_request.go
│ │ ├── model_lsp_symbol.go
│ │ ├── model_match.go
│ │ ├── model_mouse_click_request.go
│ │ ├── model_mouse_click_response.go
│ │ ├── model_mouse_drag_request.go
│ │ ├── model_mouse_drag_response.go
│ │ ├── model_mouse_move_request.go
│ │ ├── model_mouse_position_response.go
│ │ ├── model_mouse_scroll_request.go
│ │ ├── model_port_list.go
│ │ ├── model_position.go
│ │ ├── model_process_errors_response.go
│ │ ├── model_process_logs_response.go
│ │ ├── model_process_restart_response.go
│ │ ├── model_process_status.go
│ │ ├── model_process_status_response.go
│ │ ├── model_pty_create_request.go
│ │ ├── model_pty_create_response.go
│ │ ├── model_pty_list_response.go
│ │ ├── model_pty_resize_request.go
│ │ ├── model_pty_session_info.go
│ │ ├── model_recording.go
│ │ ├── model_replace_request.go
│ │ ├── model_replace_result.go
│ │ ├── model_screenshot_response.go
│ │ ├── model_scroll_response.go
│ │ ├── model_search_files_response.go
│ │ ├── model_session.go
│ │ ├── model_session_execute_request.go
│ │ ├── model_session_execute_response.go
│ │ ├── model_session_send_input_request.go
│ │ ├── model_start_recording_request.go
│ │ ├── model_status.go
│ │ ├── model_stop_recording_request.go
│ │ ├── model_user_home_dir_response.go
│ │ ├── model_window_info.go
│ │ ├── model_windows_response.go
│ │ ├── model_work_dir_response.go
│ │ ├── openapitools.json
│ │ ├── project.json
│ │ ├── response.go
│ │ └── utils.go
│ ├── toolbox-api-client-python/
│ │ ├── .gitignore
│ │ ├── .openapi-generator/
│ │ │ ├── FILES
│ │ │ └── VERSION
│ │ ├── .openapi-generator-ignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── daytona_toolbox_api_client/
│ │ │ ├── __init__.py
│ │ │ ├── api/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── computer_use_api.py
│ │ │ │ ├── file_system_api.py
│ │ │ │ ├── git_api.py
│ │ │ │ ├── info_api.py
│ │ │ │ ├── interpreter_api.py
│ │ │ │ ├── lsp_api.py
│ │ │ │ ├── port_api.py
│ │ │ │ ├── process_api.py
│ │ │ │ └── server_api.py
│ │ │ ├── api_client.py
│ │ │ ├── api_response.py
│ │ │ ├── configuration.py
│ │ │ ├── exceptions.py
│ │ │ ├── models/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── command.py
│ │ │ │ ├── completion_context.py
│ │ │ │ ├── completion_item.py
│ │ │ │ ├── completion_list.py
│ │ │ │ ├── computer_use_start_response.py
│ │ │ │ ├── computer_use_status_response.py
│ │ │ │ ├── computer_use_stop_response.py
│ │ │ │ ├── create_context_request.py
│ │ │ │ ├── create_session_request.py
│ │ │ │ ├── display_info.py
│ │ │ │ ├── display_info_response.py
│ │ │ │ ├── execute_request.py
│ │ │ │ ├── execute_response.py
│ │ │ │ ├── file_info.py
│ │ │ │ ├── file_status.py
│ │ │ │ ├── files_download_request.py
│ │ │ │ ├── git_add_request.py
│ │ │ │ ├── git_branch_request.py
│ │ │ │ ├── git_checkout_request.py
│ │ │ │ ├── git_clone_request.py
│ │ │ │ ├── git_commit_info.py
│ │ │ │ ├── git_commit_request.py
│ │ │ │ ├── git_commit_response.py
│ │ │ │ ├── git_git_delete_branch_request.py
│ │ │ │ ├── git_repo_request.py
│ │ │ │ ├── git_status.py
│ │ │ │ ├── initialize_request.py
│ │ │ │ ├── interpreter_context.py
│ │ │ │ ├── is_port_in_use_response.py
│ │ │ │ ├── keyboard_hotkey_request.py
│ │ │ │ ├── keyboard_press_request.py
│ │ │ │ ├── keyboard_type_request.py
│ │ │ │ ├── list_branch_response.py
│ │ │ │ ├── list_contexts_response.py
│ │ │ │ ├── list_recordings_response.py
│ │ │ │ ├── lsp_completion_params.py
│ │ │ │ ├── lsp_document_request.py
│ │ │ │ ├── lsp_location.py
│ │ │ │ ├── lsp_position.py
│ │ │ │ ├── lsp_range.py
│ │ │ │ ├── lsp_server_request.py
│ │ │ │ ├── lsp_symbol.py
│ │ │ │ ├── match.py
│ │ │ │ ├── mouse_click_request.py
│ │ │ │ ├── mouse_click_response.py
│ │ │ │ ├── mouse_drag_request.py
│ │ │ │ ├── mouse_drag_response.py
│ │ │ │ ├── mouse_move_request.py
│ │ │ │ ├── mouse_position_response.py
│ │ │ │ ├── mouse_scroll_request.py
│ │ │ │ ├── port_list.py
│ │ │ │ ├── position.py
│ │ │ │ ├── process_errors_response.py
│ │ │ │ ├── process_logs_response.py
│ │ │ │ ├── process_restart_response.py
│ │ │ │ ├── process_status.py
│ │ │ │ ├── process_status_response.py
│ │ │ │ ├── pty_create_request.py
│ │ │ │ ├── pty_create_response.py
│ │ │ │ ├── pty_list_response.py
│ │ │ │ ├── pty_resize_request.py
│ │ │ │ ├── pty_session_info.py
│ │ │ │ ├── recording.py
│ │ │ │ ├── replace_request.py
│ │ │ │ ├── replace_result.py
│ │ │ │ ├── screenshot_response.py
│ │ │ │ ├── scroll_response.py
│ │ │ │ ├── search_files_response.py
│ │ │ │ ├── session.py
│ │ │ │ ├── session_execute_request.py
│ │ │ │ ├── session_execute_response.py
│ │ │ │ ├── session_send_input_request.py
│ │ │ │ ├── start_recording_request.py
│ │ │ │ ├── status.py
│ │ │ │ ├── stop_recording_request.py
│ │ │ │ ├── user_home_dir_response.py
│ │ │ │ ├── window_info.py
│ │ │ │ ├── windows_response.py
│ │ │ │ └── work_dir_response.py
│ │ │ ├── py.typed
│ │ │ └── rest.py
│ │ ├── project.json
│ │ ├── pyproject.toml
│ │ ├── requirements.txt
│ │ ├── setup.cfg
│ │ ├── setup.py
│ │ ├── test-requirements.txt
│ │ └── tox.ini
│ ├── toolbox-api-client-python-async/
│ │ ├── .gitignore
│ │ ├── .openapi-generator/
│ │ │ ├── FILES
│ │ │ └── VERSION
│ │ ├── .openapi-generator-ignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── daytona_toolbox_api_client_async/
│ │ │ ├── __init__.py
│ │ │ ├── api/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── computer_use_api.py
│ │ │ │ ├── file_system_api.py
│ │ │ │ ├── git_api.py
│ │ │ │ ├── info_api.py
│ │ │ │ ├── interpreter_api.py
│ │ │ │ ├── lsp_api.py
│ │ │ │ ├── port_api.py
│ │ │ │ ├── process_api.py
│ │ │ │ └── server_api.py
│ │ │ ├── api_client.py
│ │ │ ├── api_response.py
│ │ │ ├── configuration.py
│ │ │ ├── exceptions.py
│ │ │ ├── models/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── command.py
│ │ │ │ ├── completion_context.py
│ │ │ │ ├── completion_item.py
│ │ │ │ ├── completion_list.py
│ │ │ │ ├── computer_use_start_response.py
│ │ │ │ ├── computer_use_status_response.py
│ │ │ │ ├── computer_use_stop_response.py
│ │ │ │ ├── create_context_request.py
│ │ │ │ ├── create_session_request.py
│ │ │ │ ├── display_info.py
│ │ │ │ ├── display_info_response.py
│ │ │ │ ├── execute_request.py
│ │ │ │ ├── execute_response.py
│ │ │ │ ├── file_info.py
│ │ │ │ ├── file_status.py
│ │ │ │ ├── files_download_request.py
│ │ │ │ ├── git_add_request.py
│ │ │ │ ├── git_branch_request.py
│ │ │ │ ├── git_checkout_request.py
│ │ │ │ ├── git_clone_request.py
│ │ │ │ ├── git_commit_info.py
│ │ │ │ ├── git_commit_request.py
│ │ │ │ ├── git_commit_response.py
│ │ │ │ ├── git_git_delete_branch_request.py
│ │ │ │ ├── git_repo_request.py
│ │ │ │ ├── git_status.py
│ │ │ │ ├── initialize_request.py
│ │ │ │ ├── interpreter_context.py
│ │ │ │ ├── is_port_in_use_response.py
│ │ │ │ ├── keyboard_hotkey_request.py
│ │ │ │ ├── keyboard_press_request.py
│ │ │ │ ├── keyboard_type_request.py
│ │ │ │ ├── list_branch_response.py
│ │ │ │ ├── list_contexts_response.py
│ │ │ │ ├── list_recordings_response.py
│ │ │ │ ├── lsp_completion_params.py
│ │ │ │ ├── lsp_document_request.py
│ │ │ │ ├── lsp_location.py
│ │ │ │ ├── lsp_position.py
│ │ │ │ ├── lsp_range.py
│ │ │ │ ├── lsp_server_request.py
│ │ │ │ ├── lsp_symbol.py
│ │ │ │ ├── match.py
│ │ │ │ ├── mouse_click_request.py
│ │ │ │ ├── mouse_click_response.py
│ │ │ │ ├── mouse_drag_request.py
│ │ │ │ ├── mouse_drag_response.py
│ │ │ │ ├── mouse_move_request.py
│ │ │ │ ├── mouse_position_response.py
│ │ │ │ ├── mouse_scroll_request.py
│ │ │ │ ├── port_list.py
│ │ │ │ ├── position.py
│ │ │ │ ├── process_errors_response.py
│ │ │ │ ├── process_logs_response.py
│ │ │ │ ├── process_restart_response.py
│ │ │ │ ├── process_status.py
│ │ │ │ ├── process_status_response.py
│ │ │ │ ├── pty_create_request.py
│ │ │ │ ├── pty_create_response.py
│ │ │ │ ├── pty_list_response.py
│ │ │ │ ├── pty_resize_request.py
│ │ │ │ ├── pty_session_info.py
│ │ │ │ ├── recording.py
│ │ │ │ ├── replace_request.py
│ │ │ │ ├── replace_result.py
│ │ │ │ ├── screenshot_response.py
│ │ │ │ ├── scroll_response.py
│ │ │ │ ├── search_files_response.py
│ │ │ │ ├── session.py
│ │ │ │ ├── session_execute_request.py
│ │ │ │ ├── session_execute_response.py
│ │ │ │ ├── session_send_input_request.py
│ │ │ │ ├── start_recording_request.py
│ │ │ │ ├── status.py
│ │ │ │ ├── stop_recording_request.py
│ │ │ │ ├── user_home_dir_response.py
│ │ │ │ ├── window_info.py
│ │ │ │ ├── windows_response.py
│ │ │ │ └── work_dir_response.py
│ │ │ ├── py.typed
│ │ │ └── rest.py
│ │ ├── project.json
│ │ ├── pyproject.toml
│ │ ├── requirements.txt
│ │ ├── setup.cfg
│ │ ├── setup.py
│ │ ├── test-requirements.txt
│ │ └── tox.ini
│ └── toolbox-api-client-ruby/
│ ├── .gitignore
│ ├── .openapi-generator/
│ │ ├── FILES
│ │ └── VERSION
│ ├── .openapi-generator-ignore
│ ├── .rspec
│ ├── .rubocop.yml
│ ├── Gemfile
│ ├── Rakefile
│ ├── daytona_toolbox_api_client.gemspec
│ ├── fix-gemspec.sh
│ ├── lib/
│ │ ├── daytona_toolbox_api_client/
│ │ │ ├── api/
│ │ │ │ ├── computer_use_api.rb
│ │ │ │ ├── file_system_api.rb
│ │ │ │ ├── git_api.rb
│ │ │ │ ├── info_api.rb
│ │ │ │ ├── interpreter_api.rb
│ │ │ │ ├── lsp_api.rb
│ │ │ │ ├── port_api.rb
│ │ │ │ ├── process_api.rb
│ │ │ │ └── server_api.rb
│ │ │ ├── api_client.rb
│ │ │ ├── api_error.rb
│ │ │ ├── configuration.rb
│ │ │ ├── models/
│ │ │ │ ├── command.rb
│ │ │ │ ├── completion_context.rb
│ │ │ │ ├── completion_item.rb
│ │ │ │ ├── completion_list.rb
│ │ │ │ ├── computer_use_start_response.rb
│ │ │ │ ├── computer_use_status_response.rb
│ │ │ │ ├── computer_use_stop_response.rb
│ │ │ │ ├── create_context_request.rb
│ │ │ │ ├── create_session_request.rb
│ │ │ │ ├── display_info.rb
│ │ │ │ ├── display_info_response.rb
│ │ │ │ ├── execute_request.rb
│ │ │ │ ├── execute_response.rb
│ │ │ │ ├── file_info.rb
│ │ │ │ ├── file_status.rb
│ │ │ │ ├── files_download_request.rb
│ │ │ │ ├── git_add_request.rb
│ │ │ │ ├── git_branch_request.rb
│ │ │ │ ├── git_checkout_request.rb
│ │ │ │ ├── git_clone_request.rb
│ │ │ │ ├── git_commit_info.rb
│ │ │ │ ├── git_commit_request.rb
│ │ │ │ ├── git_commit_response.rb
│ │ │ │ ├── git_git_delete_branch_request.rb
│ │ │ │ ├── git_repo_request.rb
│ │ │ │ ├── git_status.rb
│ │ │ │ ├── initialize_request.rb
│ │ │ │ ├── interpreter_context.rb
│ │ │ │ ├── is_port_in_use_response.rb
│ │ │ │ ├── keyboard_hotkey_request.rb
│ │ │ │ ├── keyboard_press_request.rb
│ │ │ │ ├── keyboard_type_request.rb
│ │ │ │ ├── list_branch_response.rb
│ │ │ │ ├── list_contexts_response.rb
│ │ │ │ ├── list_recordings_response.rb
│ │ │ │ ├── lsp_completion_params.rb
│ │ │ │ ├── lsp_document_request.rb
│ │ │ │ ├── lsp_location.rb
│ │ │ │ ├── lsp_position.rb
│ │ │ │ ├── lsp_range.rb
│ │ │ │ ├── lsp_server_request.rb
│ │ │ │ ├── lsp_symbol.rb
│ │ │ │ ├── match.rb
│ │ │ │ ├── mouse_click_request.rb
│ │ │ │ ├── mouse_click_response.rb
│ │ │ │ ├── mouse_drag_request.rb
│ │ │ │ ├── mouse_drag_response.rb
│ │ │ │ ├── mouse_move_request.rb
│ │ │ │ ├── mouse_position_response.rb
│ │ │ │ ├── mouse_scroll_request.rb
│ │ │ │ ├── port_list.rb
│ │ │ │ ├── position.rb
│ │ │ │ ├── process_errors_response.rb
│ │ │ │ ├── process_logs_response.rb
│ │ │ │ ├── process_restart_response.rb
│ │ │ │ ├── process_status.rb
│ │ │ │ ├── process_status_response.rb
│ │ │ │ ├── pty_create_request.rb
│ │ │ │ ├── pty_create_response.rb
│ │ │ │ ├── pty_list_response.rb
│ │ │ │ ├── pty_resize_request.rb
│ │ │ │ ├── pty_session_info.rb
│ │ │ │ ├── recording.rb
│ │ │ │ ├── replace_request.rb
│ │ │ │ ├── replace_result.rb
│ │ │ │ ├── screenshot_response.rb
│ │ │ │ ├── scroll_response.rb
│ │ │ │ ├── search_files_response.rb
│ │ │ │ ├── session.rb
│ │ │ │ ├── session_execute_request.rb
│ │ │ │ ├── session_execute_response.rb
│ │ │ │ ├── session_send_input_request.rb
│ │ │ │ ├── start_recording_request.rb
│ │ │ │ ├── status.rb
│ │ │ │ ├── stop_recording_request.rb
│ │ │ │ ├── user_home_dir_response.rb
│ │ │ │ ├── window_info.rb
│ │ │ │ ├── windows_response.rb
│ │ │ │ └── work_dir_response.rb
│ │ │ └── version.rb
│ │ └── daytona_toolbox_api_client.rb
│ └── project.json
├── nx.json
├── openapitools.json
├── package.json
├── poetry.lock
├── project.json
├── pyproject.toml
├── scripts/
│ └── setup-proxy-dns.sh
├── tsconfig.base.json
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .devcontainer/Dockerfile
================================================
FROM buildpack-deps:jammy-curl
ARG TARGETARCH
# common tools
RUN apt update && export DEBIAN_FRONTEND=noninteractive \
&& apt -y install --no-install-recommends apt-utils vim htop telnet socat expect-dev tini psmisc libgit2-dev \
python3 python3-pip libx11-dev libxtst-dev libxext-dev libxrandr-dev libxinerama-dev libxi-dev \
libx11-6 libxrandr2 libxext6 libxrender1 libxfixes3 libxss1 libxtst6 libxi6 \
xvfb x11vnc novnc xfce4 xfce4-terminal dbus-x11 dnsmasq gettext-base
# build tools
RUN apt update && export DEBIAN_FRONTEND=noninteractive \
&& apt -y install --no-install-recommends openjdk-11-jdk protobuf-compiler libprotobuf-dev
# Mount-s3 (AWS S3 FUSE driver)
RUN /bin/bash -c 'apt update && export DEBIAN_FRONTEND=noninteractive \
&& apt -y install --no-install-recommends fuse libfuse2 \
&& MOUNT_S3_ARCH=$([ "$TARGETARCH" = "amd64" ] && echo "x86_64" || echo "arm64") \
&& wget https://s3.amazonaws.com/mountpoint-s3-release/1.20.0/${MOUNT_S3_ARCH}/mount-s3-1.20.0-${MOUNT_S3_ARCH}.deb \
&& apt install -y ./mount-s3-1.20.0-${MOUNT_S3_ARCH}.deb \
&& rm -f mount-s3-1.20.0-${MOUNT_S3_ARCH}.deb'
# Telepresence
RUN curl -fL https://app.getambassador.io/download/tel2oss/releases/download/v2.17.0/telepresence-linux-${TARGETARCH} -o /usr/local/bin/telepresence && \
chmod a+x /usr/local/bin/telepresence
RUN echo "address=/proxy.localhost/127.0.0.1" >> /etc/dnsmasq.conf
CMD ["sh", "-c", "service dnsmasq start && echo 'nameserver 127.0.0.1' > /etc/resolv.conf && tail -f /dev/null"]
================================================
FILE: .devcontainer/buildkitd.toml
================================================
insecure-entitlements = [ "network.host", "security.insecure" ]
[registry."registry:5000"]
http = true
insecure = true
================================================
FILE: .devcontainer/devcontainer.build.json
================================================
{
// Duplicate of devcontainer.json but without docker compose
// Docker compose is not supported for building and pushing the devcontainer image
"name": "Daytona",
"build": {
"dockerfile": "Dockerfile",
"context": "."
},
"workspaceFolder": "/workspaces/daytona",
// Configure tool-specific properties.
"containerEnv": {
"COREPACK_ENABLE_DOWNLOAD_PROMPT": "0"
},
"remoteEnv": {
"NX_DAEMON": "true",
"NODE_ENV": "development",
"POETRY_VIRTUALENVS_IN_PROJECT": "true"
},
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"nrwl.angular-console",
"astro-build.astro-vscode",
"unifiedjs.vscode-mdx",
"timonwong.shellcheck",
"foxundermoon.shell-format",
"cschlosser.doxdocgen",
"ms-python.python",
"ms-toolsai.jupyter",
"bradlc.vscode-tailwindcss",
"shopify.ruby-lsp",
"castwide.solargraph"
],
"settings": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"python.defaultInterpreterPath": "${containerWorkspaceFolder}/.venv/bin/python",
"python.terminal.activateEnvironment": true,
"python.terminal.activateEnvInCurrentTerminal": true
}
}
},
"features": {
"ghcr.io/devcontainers/features/common-utils:2.5.3": {
"installZsh": "true",
"username": "daytona",
"uid": "1000",
"gid": "1000",
"upgradePackages": "false"
},
"ghcr.io/devcontainers/features/docker-in-docker:2.12.2": {
"version": "24.0.7",
"moby": false,
"dockerDashComposeVersion": "v2"
},
"ghcr.io/devcontainers/features/go:1.3.2": {
"version": "1.23.5",
"golangciLintVersion": "1.63.4"
},
"ghcr.io/devcontainers/features/node:1.6.2": {
"version": "22.14.0",
"installYarnUsingApt": false
},
"ghcr.io/devcontainers/features/ruby:1": {
"version": "3.4.5"
},
"./tools-feature": {
"pipPackages": ["poetry==2.1.3"],
"goTools": ["github.com/swaggo/swag/cmd/swag@v1.16.4", "github.com/mitranim/gow@latest"]
}
},
"onCreateCommand": {
// "install-deps": "git config --global --add safe.directory ${containerWorkspaceFolder} && yarn",
"env": "test -f .env.local || touch .env.local"
},
"postStartCommand": "yarn && poetry lock && poetry install && bundle install",
"postAttachCommand": "",
"forwardPorts": [5556, "pgadmin:80", "registry-ui:5100", "maildev:1080", "minio:9000", "minio:9001", "jaeger:16686"],
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "daytona"
}
================================================
FILE: .devcontainer/devcontainer.json
================================================
{
"name": "Daytona",
"dockerComposeFile": "docker-compose.yaml",
"service": "app",
"workspaceFolder": "/workspaces/daytona",
// Configure tool-specific properties.
"containerEnv": {
"COREPACK_ENABLE_DOWNLOAD_PROMPT": "0"
},
"remoteEnv": {
"NX_DAEMON": "true",
"NODE_ENV": "development",
"POETRY_VIRTUALENVS_IN_PROJECT": "true",
"RUBYLIB": "${containerWorkspaceFolder}/libs/sdk-ruby/lib:${containerWorkspaceFolder}/libs/api-client-ruby/lib:${containerWorkspaceFolder}/libs/toolbox-api-client-ruby/lib",
"BUNDLE_GEMFILE": "${containerWorkspaceFolder}/Gemfile"
},
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"nrwl.angular-console",
"astro-build.astro-vscode",
"unifiedjs.vscode-mdx",
"timonwong.shellcheck",
"foxundermoon.shell-format",
"cschlosser.doxdocgen",
"ms-python.python",
"ms-toolsai.jupyter",
"bradlc.vscode-tailwindcss",
"shopify.ruby-lsp",
"castwide.solargraph"
],
"settings": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"python.defaultInterpreterPath": "${containerWorkspaceFolder}/.venv/bin/python",
"python.terminal.activateEnvironment": true,
"python.terminal.activateEnvInCurrentTerminal": true
}
}
},
"features": {
"ghcr.io/devcontainers/features/common-utils:2.5.3": {
"installZsh": "true",
"username": "daytona",
"uid": "1000",
"gid": "1000",
"upgradePackages": "false"
},
"ghcr.io/devcontainers/features/docker-in-docker:2.12.2": {
"version": "28.4.0",
"moby": false,
"dockerDashComposeVersion": "v2"
},
"ghcr.io/devcontainers/features/go:1.3.2": {
"version": "1.25.4",
"golangciLintVersion": "2.6.2"
},
"ghcr.io/devcontainers/features/node:1.6.2": {
"version": "22.14.0",
"installYarnUsingApt": false
},
"ghcr.io/devcontainers/features/ruby:1": {
"version": "3.4.5"
},
"./tools-feature": {
"pipPackages": [
"poetry==2.1.3"
],
"goTools": [
"github.com/swaggo/swag/cmd/swag@v1.16.4",
"github.com/mitranim/gow@latest",
"github.com/princjef/gomarkdoc/cmd/gomarkdoc@v1.1.0"
]
}
},
"onCreateCommand": {
// "install-deps": "git config --global --add safe.directory ${containerWorkspaceFolder} && yarn",
"env": "test -f .env.local || touch .env.local"
},
"postStartCommand": "yarn && poetry lock && poetry install && bundle install && docker buildx create --name builder --driver-opt network=host --config .devcontainer/buildkitd.toml --driver docker-container --use",
"postAttachCommand": "",
"forwardPorts": [
5556,
"pgadmin:80",
"registry-ui:5100",
"maildev:1080",
"minio:9000",
"minio:9001",
"jaeger:16686"
],
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "daytona"
}
================================================
FILE: .devcontainer/dex/config.yaml
================================================
# config.yaml
issuer: http://localhost:5556/dex
storage:
type: memory
web:
http: 0.0.0.0:5556
allowedOrigins: ['*']
allowedHeaders: ['x-requested-with']
staticClients:
- id: daytona
redirectURIs:
- 'http://localhost:3000'
- 'http://localhost:3000/api/oauth2-redirect.html'
- 'http://localhost:3009/callback'
- 'http://proxy.localhost:4000/callback'
name: 'Daytona'
public: true
enablePasswordDB: true
staticPasswords:
- email: 'dev@daytona.io'
# password generated with:
# echo password | htpasswd -BinC 10 admin | cut -d: -f2
hash: '$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W'
username: 'admin'
userID: '1234'
================================================
FILE: .devcontainer/docker-compose.yaml
================================================
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
privileged: true
volumes:
- ..:/workspaces/daytona
dex:
image: dexidp/dex:v2.42.0
volumes:
- ./dex/config.yaml:/etc/dex/config.yaml
command: ['dex', 'serve', '/etc/dex/config.yaml']
network_mode: service:app
db:
image: postgres:18
environment:
- POSTGRES_PASSWORD=pass
- POSTGRES_USER=user
- POSTGRES_DB=application_ctx
pgadmin:
image: dpage/pgadmin4:9.2.0
entrypoint: ['sh', '-c', 'chmod 600 /pgpass && exec /entrypoint.sh']
environment:
PGADMIN_DEFAULT_EMAIL: dev@daytona.io
PGADMIN_DEFAULT_PASSWORD: pgadmin
PGADMIN_CONFIG_SERVER_MODE: 'False'
PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False'
user: root
volumes:
- ./pgadmin4/servers.json:/pgadmin4/servers.json
- ./pgadmin4/pgpass:/pgpass
depends_on:
- db
redis:
image: redis:latest
registry-ui:
image: joxit/docker-registry-ui:main
restart: always
environment:
- SINGLE_REGISTRY=true
- REGISTRY_TITLE=Docker Registry UI
- DELETE_IMAGES=true
- SHOW_CONTENT_DIGEST=true
- NGINX_PROXY_PASS_URL=http://registry:5000
- SHOW_CATALOG_NB_TAGS=true
- CATALOG_MIN_BRANCHES=1
- CATALOG_MAX_BRANCHES=1
- TAGLIST_PAGE_SIZE=100
- REGISTRY_SECURED=false
- CATALOG_ELEMENTS_LIMIT=1000
registry:
image: registry:2.8.2
restart: always
environment:
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin: '[http://registry-ui.example.com]'
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods: '[HEAD,GET,OPTIONS,DELETE]'
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials: '[true]'
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers: '[Authorization,Accept,Cache-Control]'
REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers: '[Docker-Content-Digest]'
REGISTRY_STORAGE_DELETE_ENABLED: 'true'
volumes:
- registry:/var/lib/registry
maildev:
image: maildev/maildev
minio:
image: minio/minio:latest
environment:
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=minioadmin
- MINIO_IDENTITY_STS_EXPIRY="24h"
volumes:
- minio_data:/data
command: server /data --console-address ":9001"
jaeger:
image: jaegertracing/all-in-one:1.74.0
otel-collector:
image: otel/opentelemetry-collector-contrib:0.138.0
volumes:
- ./otel/otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml
volumes:
registry: {}
minio_data: {}
================================================
FILE: .devcontainer/otel/otel-collector-config.yaml
================================================
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
exporters:
# Logs to console
debug:
verbosity: detailed
# Metrics to Prometheus endpoint
prometheus:
endpoint: 0.0.0.0:9090
namespace: otel
# Traces to Jaeger
otlp/jaeger:
endpoint: jaeger:4317
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp/jaeger]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus]
logs:
receivers: [otlp]
processors: [batch]
exporters: [debug]
================================================
FILE: .devcontainer/pgadmin4/pgpass
================================================
db:5432:*:user:pass
================================================
FILE: .devcontainer/pgadmin4/servers.json
================================================
{
"Servers": {
"1": {
"Name": "Daytona",
"Group": "Servers",
"Host": "db",
"Port": 5432,
"MaintenanceDB": "postgres",
"Username": "user",
"PassFile": "/pgpass"
}
}
}
================================================
FILE: .devcontainer/tools-feature/devcontainer-feature.json
================================================
{
"name": "Development tools",
"id": "tools",
"version": "1.0.0",
"description": "Installs development tools.",
"options": {
"pipPackages": {
"type": "array",
"description": "List of pip packages to install",
"items": {
"type": "string"
}
},
"goTools": {
"type": "array",
"description": "List of Go tools to install",
"items": {
"type": "string"
}
}
},
"installsAfter": [
"ghcr.io/devcontainers/features/go",
"ghcr.io/devcontainers/features/python",
"ghcr.io/devcontainers/features/ruby",
"ghcr.io/devcontainers/features/docker-in-docker"
]
}
================================================
FILE: .devcontainer/tools-feature/install.sh
================================================
#!/bin/bash
# Copyright 2025 Daytona Platforms Inc.
# SPDX-License-Identifier: AGPL-3.0
set -e
echo "Installing Python packages and Go tools..."
USERNAME="${USERNAME:-"${_REMOTE_USER:-"automatic"}"}"
# Determine the appropriate non-root user
if [ "${USERNAME}" = "auto" ] || [ "${USERNAME}" = "automatic" ]; then
USERNAME=""
POSSIBLE_USERS=("vscode" "node" "codespace" "$(awk -v val=1000 -F ":" '$3==val{print $1}' /etc/passwd)")
for CURRENT_USER in "${POSSIBLE_USERS[@]}"; do
if id -u "${CURRENT_USER}" > /dev/null 2>&1; then
USERNAME=${CURRENT_USER}
break
fi
done
if [ "${USERNAME}" = "" ]; then
USERNAME=root
fi
elif [ "${USERNAME}" = "none" ] || ! id -u "${USERNAME}" > /dev/null 2>&1; then
USERNAME=root
fi
export GOROOT="${TARGET_GOROOT:-"/usr/local/go"}"
export GOPATH="${TARGET_GOPATH:-"/go"}"
export GOCACHE=/tmp/gotools/cache
sudo -E -u "${USERNAME}" bash -c '
export PATH=$GOROOT/bin:$PATH
export HOME=/home/${USER}
# Install pip packages
if [ -n "$PIPPACKAGES" ]; then
echo "Installing pip packages: $PIPPACKAGES"
IFS=',' read -ra PACKAGES <<< "${PIPPACKAGES}"
pip3 install --no-cache-dir "${PACKAGES[@]}"
else
echo "No pip packages specified. Skipping."
fi
# Install Go tools
if [ -n "$GOTOOLS" ]; then
echo "Installing Go tools: $GOTOOLS"
IFS=',' read -ra TOOLS <<< "${GOTOOLS}"
for tool in "${TOOLS[@]}"; do
go install $tool
done
else
echo "No Go tools specified. Skipping."
fi
'
# Set insecure registry
cat > /etc/docker/daemon.json <<EOF
{
"insecure-registries": ["registry:5000"]
}
EOF
================================================
FILE: .dockerignore
================================================
.claude
.devcontainer
.github
.husky
.vscode
.nx
examples
functions
images
node_modules
.env.local
dist
!dist/libs/computer-use-amd64
!dist/apps/runner-amd64
!dist/apps/snapshot-manager
docker
.tmp
libs
!libs/sdk-typescript
!libs/computer-use
!libs/common-go
!libs/api-client
!libs/analytics-api-client
!libs/runner-api-client
!libs/api-client-go
!libs/toolbox-api-client-go
!libs/toolbox-api-client
!libs/sdk-go
Dockerfile
================================================
FILE: .editorconfig
================================================
# Editor configuration, see http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false
================================================
FILE: .gitattributes
================================================
apps/runner/pkg/api/docs/** linguist-generated=true
apps/daemon/pkg/toolbox/docs/** linguist-generated=true
libs/api-client/** linguist-generated=true
libs/api-client-go/** linguist-generated=true
libs/api-client-python/** linguist-generated=true
libs/api-client-python-async/** linguist-generated=true
libs/api-client-ruby/** linguist-generated=true
libs/runner-api-client/** linguist-generated=true
libs/toolbox-api-client/** linguist-generated=true
libs/toolbox-api-client-go/** linguist-generated=true
libs/toolbox-api-client-python/** linguist-generated=true
libs/toolbox-api-client-python-async/** linguist-generated=true
libs/toolbox-api-client-ruby/** linguist-generated=true
================================================
FILE: .github/CODEOWNERS
================================================
# CODEOWNERS — Daytona
# These owners are automatically requested for review on PRs that modify the listed files.
# Security and compliance policies
SECURITY.md @aprojic
CODE_OF_CONDUCT.md @aprojic
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
type: Bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Use these parameters '...'
2. Click on '...'
3. Execute the following command '...'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Environment (required fields):**
- Deployment: [Production/OSS]
- Daytona client: [e.g. Python SDK v0.0.1 or Daytona CLI v0.0.1]
- Daytona Version: [Found in the dashboard]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
type: Feature
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/actions/setup-toolchain/action.yml
================================================
name: Setup Toolchain
description: Shared setup for Go, Node, Python, Ruby, Java and project dependencies
inputs:
install-go:
description: Install Go
default: 'true'
go-cache:
description: Enable Go module caching via actions/setup-go
default: 'true'
install-node:
description: Install Node.js
default: 'true'
install-python:
description: Install Python
default: 'true'
install-ruby:
description: Install Ruby
default: 'true'
install-java:
description: Install Java
default: 'true'
install-poetry:
description: Install Poetry
default: 'true'
install-swag:
description: Install swag CLI
default: 'true'
run-yarn-install:
description: Run yarn install --immutable
default: 'true'
run-poetry-install:
description: Run poetry lock && poetry install
default: 'true'
run-go-work-sync:
description: Run go work sync
default: 'true'
runs:
using: composite
steps:
- name: Validate toolchain inputs
shell: bash
run: |
if [ "${{ inputs.install-poetry }}" = "true" ] && [ "${{ inputs.install-python }}" != "true" ]; then
echo "Error: install-poetry is 'true' but install-python is not 'true'. Please enable install-python when using install-poetry." >&2
exit 1
fi
if [ "${{ inputs.install-swag }}" = "true" ] && [ "${{ inputs.install-go }}" != "true" ]; then
echo "Error: install-swag is 'true' but install-go is not 'true'. Please enable install-go when using install-swag." >&2
exit 1
fi
- uses: actions/setup-go@v5
if: inputs.install-go == 'true'
with:
go-version-file: go.work
cache: ${{ inputs.go-cache }}
cache-dependency-path: |
**/go.sum
- uses: actions/setup-java@v4
if: inputs.install-java == 'true'
with:
java-version: 21
distribution: 'temurin'
- uses: actions/setup-python@v5
if: inputs.install-python == 'true'
with:
python-version: '3.12'
- uses: ruby/setup-ruby@v1
if: inputs.install-ruby == 'true'
with:
ruby-version: '3.4.5'
bundler-cache: false
- name: Bundle install
if: inputs.install-ruby == 'true'
shell: bash
run: |
bundle install
- uses: actions/setup-node@v4
if: inputs.install-node == 'true'
with:
node-version: 22
- name: System dependencies
shell: bash
run: |
sudo apt-get update && sudo apt-get install -y gcc libx11-dev libxtst-dev
if [[ "${{ inputs.install-node }}" == 'true' || "${{ inputs.run-yarn-install }}" == 'true' ]]; then
corepack enable
fi
- name: Install Poetry
if: inputs.install-poetry == 'true' && inputs.install-python == 'true'
shell: bash
run: |
python3 -m pip install --upgrade pip
python3 -m pip install "poetry==2.1.3"
- name: Install swag
if: inputs.install-swag == 'true' && inputs.install-go == 'true'
shell: bash
run: go install github.com/swaggo/swag/cmd/swag@v1.16.4
- name: Get yarn cache directory
if: inputs.run-yarn-install == 'true'
id: yarn-cache
shell: bash
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
if: inputs.run-yarn-install == 'true'
with:
path: ${{ steps.yarn-cache.outputs.dir }}
key: yarn-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('yarn.lock') }}
restore-keys: yarn-${{ runner.os }}-${{ runner.arch }}-
- name: Yarn install
if: inputs.run-yarn-install == 'true'
shell: bash
run: yarn install --immutable
- name: Cache Poetry virtualenv
if: inputs.run-poetry-install == 'true'
uses: actions/cache@v4
with:
path: .venv
key: poetry-venv-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('poetry.lock') }}
restore-keys: poetry-venv-${{ runner.os }}-${{ runner.arch }}-
- name: Poetry install
if: inputs.run-poetry-install == 'true'
shell: bash
run: |
poetry lock
poetry install
- name: Go work sync
if: inputs.run-go-work-sync == 'true'
shell: bash
run: |
GONOSUMDB=github.com/daytonaio/daytona go work sync
go env -w GOFLAGS="-buildvcs=false"
================================================
FILE: .github/pull_request_template.md
================================================
## Description
Please include a summary of the change or the feature being introduced. Include relevant motivation and context. List any dependencies that are required for this change.
## Documentation
- [ ] This change requires a documentation update
- [ ] I have made corresponding changes to the documentation
## Related Issue(s)
This PR addresses issue #X
## Screenshots
If relevant, please add screenshots.
## Notes
Please add any relevant notes if necessary.
================================================
FILE: .github/workflows/build_devcontainer.yaml
================================================
name: 'Build devcontainer image'
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout (GitHub)
uses: actions/checkout@v4
- name: Set up QEMU for multi-architecture builds
uses: docker/setup-qemu-action@v3
- name: Setup Docker buildx for multi-architecture builds
uses: docker/setup-buildx-action@v3
with:
use: true
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and release devcontainer Multi-Platform
uses: devcontainers/ci@v0.3
env:
# see: https://github.com/devcontainers/ci/issues/191#issuecomment-1603857155
BUILDX_NO_DEFAULT_ATTESTATIONS: true
with:
imageName: ghcr.io/daytonaio/daytona-devcontainer
cacheFrom: ghcr.io/daytonaio/daytona-devcontainer
platform: linux/amd64,linux/arm64
imageTag: main,latest
configFile: .devcontainer/devcontainer.build.json
================================================
FILE: .github/workflows/default_image_publish.yaml
================================================
name: Default Snapshot Images Publish
on:
workflow_dispatch:
inputs:
version:
description: Version to release (e.g., "0.1.2")
required: true
default: '0.0.0-dev'
push_latest:
description: Push latest tags (disable for rc/pre-release)
type: boolean
default: true
env:
VERSION: ${{ inputs.version }}
BUILDX_NO_DEFAULT_ATTESTATIONS: 1
REGISTRY_IMAGE: daytonaio/sandbox
jobs:
docker_build:
strategy:
fail-fast: false
matrix:
include:
- runner: [self-hosted, Linux, ARM64, github-actions-runner-arm]
platform: linux/arm64
- runner: [self-hosted, Linux, X64, github-actions-runner-amd64]
platform: linux/amd64
runs-on: ${{ matrix.runner }}
steps:
- name: Prepare
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
registry: docker.io
username: daytonaio
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push sandbox by digest
id: build-sandbox
uses: docker/build-push-action@v6
with:
context: ./images/sandbox
file: ./images/sandbox/Dockerfile
platforms: ${{ matrix.platform }}
tags: ${{ env.REGISTRY_IMAGE }}
outputs: type=image,push-by-digest=true,name-canonical=true,push=true
cache-from: type=registry,ref=daytonaio/sandbox:buildcache-${{ env.PLATFORM_PAIR }}
cache-to: type=registry,ref=daytonaio/sandbox:buildcache-${{ env.PLATFORM_PAIR }},mode=max
- name: Export sandbox digest
run: |
mkdir -p ${{ runner.temp }}/digests/sandbox
digest="${{ steps.build-sandbox.outputs.digest }}"
touch "${{ runner.temp }}/digests/sandbox/${digest#sha256:}"
- name: Build and push sandbox-slim by digest
id: build-sandbox-slim
uses: docker/build-push-action@v6
with:
context: ./images/sandbox-slim
file: ./images/sandbox-slim/Dockerfile
platforms: ${{ matrix.platform }}
tags: ${{ env.REGISTRY_IMAGE }}
outputs: type=image,push-by-digest=true,name-canonical=true,push=true
cache-from: type=registry,ref=daytonaio/sandbox:buildcache-slim-${{ env.PLATFORM_PAIR }}
cache-to: type=registry,ref=daytonaio/sandbox:buildcache-slim-${{ env.PLATFORM_PAIR }},mode=max
- name: Export sandbox-slim digest
run: |
mkdir -p ${{ runner.temp }}/digests/sandbox-slim
digest="${{ steps.build-sandbox-slim.outputs.digest }}"
touch "${{ runner.temp }}/digests/sandbox-slim/${digest#sha256:}"
- name: Upload sandbox digest
uses: actions/upload-artifact@v4
with:
name: digests-default-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/sandbox/*
if-no-files-found: error
retention-days: 1
- name: Upload sandbox-slim digest
uses: actions/upload-artifact@v4
with:
name: digests-slim-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/sandbox-slim/*
if-no-files-found: error
retention-days: 1
docker_manifest:
needs: docker_build
runs-on: [self-hosted, Linux, X64, github-actions-runner-amd64]
steps:
- name: Download sandbox digests
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/digests/sandbox
pattern: digests-default-*
merge-multiple: true
- name: Download sandbox-slim digests
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/digests/sandbox-slim
pattern: digests-slim-*
merge-multiple: true
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
registry: docker.io
username: daytonaio
password: ${{ secrets.DOCKER_TOKEN }}
- name: Create and push sandbox manifest
working-directory: ${{ runner.temp }}/digests/sandbox
run: |
TAGS="-t ${{ env.REGISTRY_IMAGE }}:${{ env.VERSION }}"
if [ "${{ inputs.push_latest }}" = "true" ]; then
TAGS="$TAGS -t ${{ env.REGISTRY_IMAGE }}:latest"
fi
docker buildx imagetools create $TAGS \
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
- name: Create and push sandbox-slim manifest
working-directory: ${{ runner.temp }}/digests/sandbox-slim
run: |
TAGS="-t ${{ env.REGISTRY_IMAGE }}:${{ env.VERSION }}-slim"
if [ "${{ inputs.push_latest }}" = "true" ]; then
TAGS="$TAGS -t ${{ env.REGISTRY_IMAGE }}:latest-slim"
fi
docker buildx imagetools create $TAGS \
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
- name: Inspect images
run: |
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ env.VERSION }}
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ env.VERSION }}-slim
================================================
FILE: .github/workflows/pr_checks.yaml
================================================
name: '[PR] Validate code'
on:
pull_request:
branches:
- main
permissions:
contents: read
concurrency:
# New commit on branch cancels running workflows of the same branch
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
POETRY_VIRTUALENVS_IN_PROJECT: true
jobs:
go-work:
name: Go work
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: go.work
cache: true
cache-dependency-path: '**/go.sum'
- name: go work
run: |
GONOSUMDB=github.com/daytonaio/daytona go work sync
git diff --exit-code -- 'go.work*' '*/go.mod' '*/go.sum' || (echo "Go workspace files are not up to date! Please run 'go work sync' and commit the changes." && exit 1)
cli-docs:
name: CLI docs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: corepack enable
- name: Get yarn cache directory
id: yarn-cache
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
with:
path: ${{ steps.yarn-cache.outputs.dir }}
key: yarn-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('yarn.lock') }}
restore-keys: yarn-${{ runner.os }}-${{ runner.arch }}-
- run: yarn install --immutable
- name: Check CLI reference docs are up to date
run: |
cd apps/docs
node tools/update-cli-reference.js --local
git diff --exit-code -- src/content/docs/en/tools/cli.mdx || (echo "CLI reference docs on the docs site are out of sync! Please run 'cd apps/docs && node tools/update-cli-reference.js --local' and commit the changes." && exit 1)
golangci:
name: Go lint
runs-on: ubuntu-latest
strategy:
matrix:
working-directory: [apps/daemon, apps/runner, apps/cli, apps/proxy, libs/sdk-go, apps/otel-collector/exporter]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: go.work
cache: true
cache-dependency-path: '**/go.sum'
- name: golangci-lint
uses: golangci/golangci-lint-action@v9
with:
version: v2.6.2
working-directory: ${{ matrix.working-directory }}
args: --timeout=5m ./...
- name: format
run: |
cd ${{ matrix.working-directory }}
go fmt ./...
git diff --exit-code '**/*.go' || (echo "Code is not formatted! Please run 'go fmt ./...' and commit" && exit 1)
lint-computer-use:
name: Go lint (Computer Use)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: go.work
cache: true
cache-dependency-path: '**/go.sum'
- name: format
run: |
sudo apt-get update && sudo apt-get install -y gcc libx11-dev libxtst-dev
cd libs/computer-use
go fmt ./...
git diff --exit-code '**/*.go' || (echo "Code is not formatted! Please run 'go fmt ./...' and commit" && exit 1)
- name: golangci-lint
uses: golangci/golangci-lint-action@v9
with:
version: v2.6.2
working-directory: libs/computer-use
args: --timeout=5m ./...
lint-python:
name: Python lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install Dependencies
run: |
corepack enable
python -m pip install --upgrade pip
pip install "poetry==2.1.3"
poetry install
- name: Get yarn cache directory
id: yarn-cache
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
with:
path: ${{ steps.yarn-cache.outputs.dir }}
key: yarn-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('yarn.lock') }}
restore-keys: yarn-${{ runner.os }}-${{ runner.arch }}-
- run: yarn install --immutable
- name: Lint Python Code
run: |
source "$(poetry env info --path)/bin/activate"
yarn lint:py
format-lint-api-clients:
name: Format, lint and generate API clients
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-toolchain
with:
run-go-work-sync: 'false'
- name: generate-api-clients
run: |
source "$(poetry env info --path)/bin/activate"
go install github.com/princjef/gomarkdoc/cmd/gomarkdoc@v1.1.0
echo -e 'DEFAULT_PACKAGE_VERSION=0.0.0-dev\nDEFAULT_GEM_VERSION=0.0.0.pre.dev\n\nPYPI_PKG_VERSION=\nNPM_PKG_VERSION=\nNPM_TAG=\nPYPI_TOKEN=\nNPM_TOKEN=' > .env
mkdir -p dist/apps/api
yarn generate:api-client
yarn lint:fix
yarn format
poetry lock
yarn docs
GONOSUMDB=github.com/daytonaio/daytona go work sync
git diff --exit-code || (echo "Code not formatted or linting errors! Hint: 'yarn generate:api-client', 'yarn lint:fix', 'yarn docs' and commit" && exit 1)
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-toolchain
- name: Build all
run: |
source "$(poetry env info --path)/bin/activate"
VERSION=0.0.0-dev yarn build --nxBail=true
license-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check AGPL License Headers
uses: apache/skywalking-eyes/header@main
with:
token: ${{ github.token }}
config: .licenserc.yaml
mode: 'check'
- name: Check Apache License Headers
uses: apache/skywalking-eyes/header@main
with:
token: ${{ github.token }}
config: .licenserc-clients.yaml
mode: 'check'
================================================
FILE: .github/workflows/prepare-release.yaml
================================================
name: Prepare Release
on:
workflow_dispatch:
inputs:
version:
description: Version to release (start with "v")
required: true
default: 'v0.0.0-dev'
env:
VERSION: ${{ inputs.version }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
prepare:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-tags: true
fetch-depth: 0
- uses: ./.github/actions/setup-toolchain
- uses: dev-hanz-ops/install-gh-cli-action@v0.2.1
- name: Configure git
run: |
git config --global --add safe.directory $GITHUB_WORKSPACE
git config --global user.name "Daytona Release Bot"
git config --global user.email "daytona-release@users.noreply.github.com"
- name: Create release branch
run: |
git checkout -b prepare-release-${{ inputs.version }}
- name: Prepare release
run: |
VERSION=${{ inputs.version }} yarn prepare-release
- name: Push branch and create PR
run: |
git push origin prepare-release-${{ inputs.version }}
gh pr create \
--title "chore: prepare release ${{ inputs.version }}" \
--body "Automated PR to prepare release ${{ inputs.version }}" \
--base main \
--head prepare-release-${{ inputs.version }}
================================================
FILE: .github/workflows/release.yaml
================================================
name: Release
on:
workflow_dispatch:
inputs:
version:
description: Version to release (start with "v")
required: true
default: 'v0.0.0-dev'
env:
VERSION: ${{ inputs.version }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUILDX_NO_DEFAULT_ATTESTATIONS: 1
DAYTONA_API_URL: ${{ secrets.DAYTONA_API_URL }}
DAYTONA_AUTH0_DOMAIN: ${{ secrets.DAYTONA_AUTH0_DOMAIN }}
DAYTONA_AUTH0_CLIENT_ID: ${{ secrets.DAYTONA_AUTH0_CLIENT_ID }}
DAYTONA_AUTH0_CALLBACK_PORT: ${{ secrets.DAYTONA_AUTH0_CALLBACK_PORT }}
DAYTONA_AUTH0_CLIENT_SECRET: ${{ secrets.DAYTONA_AUTH0_CLIENT_SECRET }}
DAYTONA_AUTH0_AUDIENCE: ${{ secrets.DAYTONA_AUTH0_AUDIENCE }}
POETRY_VIRTUALENVS_IN_PROJECT: true
GONOSUMDB: github.com/daytonaio/daytona
jobs:
publish:
runs-on: [self-hosted, Linux, X64, github-actions-runner-amd64]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-tags: true
fetch-depth: 0
- uses: ./.github/actions/setup-toolchain
with:
run-go-work-sync: 'false'
- uses: dev-hanz-ops/install-gh-cli-action@v0.2.1
- name: Configure git
run: |
git config --global --add safe.directory $GITHUB_WORKSPACE
git config --global user.name "Daytona Release Bot"
git config --global user.email "daytona-release@users.noreply.github.com"
- name: Tag Go modules
run: |
git tag libs/api-client-go/${{ inputs.version }}
git tag libs/toolbox-api-client-go/${{ inputs.version }}
git tag libs/sdk-go/${{ inputs.version }}
git push origin libs/api-client-go/${{ inputs.version }} libs/toolbox-api-client-go/${{ inputs.version }} libs/sdk-go/${{ inputs.version }}
- name: Go work sync
run: |
GONOSUMDB=github.com/daytonaio/daytona go work sync
go env -w GOFLAGS="-buildvcs=false"
# Write version to required folders so nx release can run
- name: Write package.json to required folders
run: |
mkdir dist
echo '{
"name": "api",
"version": "0.0.0"
}' > dist/package.json
echo '{
"name": "api",
"version": "0.0.0"
}' > apps/api/package.json
echo '{
"name": "dashboard",
"version": "0.0.0"
}' > apps/dashboard/package.json
echo '{
"name": "docs",
"version": "0.0.0"
}' > apps/docs/package.json
echo '{
"name": "runner",
"version": "0.0.0"
}' > apps/runner/package.json
- name: Create release
run: yarn nx release ${{ inputs.version }} --skip-publish --verbose
build_projects:
needs: publish
runs-on: [self-hosted, Linux, X64, github-actions-runner-amd64]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-tags: true
fetch-depth: 0
- uses: ./.github/actions/setup-toolchain
- uses: dev-hanz-ops/install-gh-cli-action@v0.2.1
- name: Install gettext
run: sudo apt-get install -y gettext
- name: Configure git
run: |
git config --global --add safe.directory $GITHUB_WORKSPACE
git config --global user.name "Daytona Release Bot"
git config --global user.email "daytona-release@users.noreply.github.com"
- name: Build projects
run: |
source "$(poetry env info --path)/bin/activate"
yarn build:production
yarn nx build-amd64 runner --configuration=production --nxBail=true
- name: Build runner .deb package
run: VERSION="${VERSION#v}" yarn nx package-deb runner
- name: Build CLI
run: |
cd ./apps/cli
GOOS=linux GOARCH=amd64 ./hack/build.sh --skip-env-file
GOOS=linux GOARCH=arm64 ./hack/build.sh --skip-env-file
GOOS=darwin GOARCH=amd64 ./hack/build.sh --skip-env-file
GOOS=darwin GOARCH=arm64 ./hack/build.sh --skip-env-file
GOOS=windows GOARCH=amd64 ./hack/build.sh --skip-env-file
GOOS=windows GOARCH=arm64 ./hack/build.sh --skip-env-file
cd ../..
- name: Upload runner to release assets
run: |
gh release upload ${{ inputs.version }} dist/apps/runner-amd64#daytona-runner-${{ inputs.version }}-amd64 --clobber
- name: Upload runner .deb to release assets
run: |
DEB_VERSION="${VERSION#v}"
gh release upload ${{ inputs.version }} "dist/apps/runner-deb/daytona-runner_${DEB_VERSION}_amd64.deb#daytona-runner-${DEB_VERSION}-amd64.deb" --clobber
- name: Upload daemon to release assets
run: |
gh release upload ${{ inputs.version }} dist/apps/daemon-amd64#daytona-daemon-${{ inputs.version }}-amd64 --clobber
- name: Upload CLI to release assets
run: |
gh release upload ${{ inputs.version }} dist/apps/cli/daytona-linux-amd64#daytona-cli-${{ inputs.version }}-linux-amd64 --clobber
gh release upload ${{ inputs.version }} dist/apps/cli/daytona-linux-arm64#daytona-cli-${{ inputs.version }}-linux-arm64 --clobber
gh release upload ${{ inputs.version }} dist/apps/cli/daytona-darwin-amd64#daytona-cli-${{ inputs.version }}-darwin-amd64 --clobber
gh release upload ${{ inputs.version }} dist/apps/cli/daytona-darwin-arm64#daytona-cli-${{ inputs.version }}-darwin-arm64 --clobber
gh release upload ${{ inputs.version }} dist/apps/cli/daytona-windows-amd64.exe#daytona-cli-${{ inputs.version }}-windows-amd64.exe --clobber
gh release upload ${{ inputs.version }} dist/apps/cli/daytona-windows-arm64.exe#daytona-cli-${{ inputs.version }}-windows-arm64.exe --clobber
- name: Upload computer-use artifact
uses: actions/upload-artifact@v4
with:
name: computer-use-amd64
path: dist/libs/computer-use-amd64
retention-days: 1
overwrite: true
- name: Upload runner artifact
uses: actions/upload-artifact@v4
with:
name: runner-amd64
path: dist/apps/runner-amd64
retention-days: 1
overwrite: true
# Separately build docker images for AMD64 and ARM64
docker_build:
needs: build_projects
runs-on: ${{ matrix.runner }}
strategy:
matrix:
include:
- runner: [self-hosted, Linux, X64, github-actions-runner-amd64]
arch: amd64
- runner: [self-hosted, Linux, ARM64, github-actions-runner-arm]
arch: arm64
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-tags: true
fetch-depth: 0
- name: Download computer-use artifact
uses: actions/download-artifact@v4
with:
name: computer-use-amd64
path: dist/libs/
- name: Download runner artifact
uses: actions/download-artifact@v4
with:
name: runner-amd64
path: dist/apps/
- name: Check artifacts
run: |
ls -la dist/libs/
ls -la dist/apps/
- uses: actions/setup-go@v5
with:
go-version-file: go.work
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Generate go.work.sum
run: GONOSUMDB=github.com/daytonaio/daytona go work sync
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: docker.io
username: daytonaio
password: ${{ secrets.DOCKER_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Project dependencies
run: corepack enable
- name: Get yarn cache directory
id: yarn-cache
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
with:
path: ${{ steps.yarn-cache.outputs.dir }}
key: yarn-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('yarn.lock') }}
restore-keys: yarn-${{ runner.os }}-${{ runner.arch }}-
- run: yarn install --immutable
- name: Publish docker images
run: |
VERSION=${{ inputs.version }} ARCH="-${{ matrix.arch }}" yarn docker:production
# Push combined manifest
docker_push_manifest:
needs: docker_build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Project dependencies
run: corepack enable
- name: Get yarn cache directory
id: yarn-cache
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
with:
path: ${{ steps.yarn-cache.outputs.dir }}
key: yarn-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('yarn.lock') }}
restore-keys: yarn-${{ runner.os }}-${{ runner.arch }}-
- run: yarn install --immutable
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: docker.io
username: daytonaio
password: ${{ secrets.DOCKER_TOKEN }}
- name: Push manifest
run: |
VERSION=${{ inputs.version }} yarn push-manifest
sync_gosum:
needs: build_projects
runs-on: [self-hosted, Linux, X64, github-actions-runner-amd64]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-tags: true
fetch-depth: 0
- uses: actions/setup-go@v5
with:
go-version-file: go.work
- uses: actions/setup-node@v4
with:
node-version: 22
- uses: dev-hanz-ops/install-gh-cli-action@v0.2.1
- name: Configure git
run: |
git config --global user.name "Daytona Release Bot"
git config --global user.email "daytona-release@users.noreply.github.com"
- name: Project dependencies
run: corepack enable
- name: Get yarn cache directory
id: yarn-cache
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
with:
path: ${{ steps.yarn-cache.outputs.dir }}
key: yarn-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('yarn.lock') }}
restore-keys: yarn-${{ runner.os }}-${{ runner.arch }}-
- run: yarn install --immutable
- name: Sync go.sum and create PR
run: |
git checkout -b sync-gosum-${{ inputs.version }}
GONOSUMDB=github.com/daytonaio/daytona go work sync
if git diff --quiet -- **/go.sum; then
echo "No go.sum changes detected; skipping commit and PR creation."
else
git add **/go.sum
git commit -s -m "chore: sync go.sum for ${{ inputs.version }}"
git push origin sync-gosum-${{ inputs.version }}
gh pr create \
--title "chore: sync go.sum for ${{ inputs.version }}" \
--body "Automated PR to sync go.sum after release ${{ inputs.version }}" \
--base main \
--head sync-gosum-${{ inputs.version }}
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/sdk_publish.yaml
================================================
name: SDK and CLI Publish
on:
workflow_dispatch:
inputs:
version:
description: Version to release (start with "v")
required: true
default: 'v0.0.0-dev'
pypi_pkg_version:
description: 'PyPI package version (default: version)'
required: false
npm_pkg_version:
description: 'NPM package version (default: version)'
required: false
npm_tag:
description: 'NPM tag (default: latest)'
required: false
default: 'latest'
rubygems_pkg_version:
description: 'RubyGems package version (default: version)'
required: false
env:
VERSION: ${{ inputs.version }}
PYPI_PKG_VERSION: ${{ inputs.pypi_pkg_version || inputs.version}}
NPM_PKG_VERSION: ${{ inputs.npm_pkg_version || inputs.version}}
RUBYGEMS_PKG_VERSION: ${{ inputs.rubygems_pkg_version || inputs.version}}
NPM_TAG: ${{ inputs.npm_tag }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
POETRY_VIRTUALENVS_IN_PROJECT: true
jobs:
publish:
runs-on: [self-hosted, Linux, X64, github-actions-runner-amd64]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-tags: true
fetch-depth: 0
- uses: ./.github/actions/setup-toolchain
with:
install-swag: 'false'
- uses: dev-hanz-ops/install-gh-cli-action@v0.2.1
- name: Configure git
run: |
git config --global --add safe.directory $GITHUB_WORKSPACE
git config --global user.name "Daytona Release Bot"
git config --global user.email "daytona-release@users.noreply.github.com"
- name: Configure RubyGems credentials
run: |
mkdir -p ~/.gem
echo "---" > ~/.gem/credentials
echo ":rubygems_api_key: $RUBYGEMS_API_KEY" >> ~/.gem/credentials
chmod 0600 ~/.gem/credentials
- name: Publish projects
run: |
source "$(poetry env info --path)/bin/activate"
yarn publish
update-homebrew-tap:
if: ${{ inputs.npm_tag == 'latest' }}
needs: publish
runs-on: [self-hosted, Linux, X64, github-actions-runner-amd64]
name: Update Homebrew CLI tap
steps:
- name: Update version
run: |
curl -f -X POST -H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.GITHUBBOT_TOKEN }}" \
https://api.github.com/repos/daytonaio/homebrew-cli/dispatches \
-d "{\"event_type\": \"update-version\", \"client_payload\": {\"version\": \"${{ env.VERSION }}\"}}"
================================================
FILE: .github/workflows/translate.yaml
================================================
name: GT Translate
on:
push:
branches: [main]
jobs:
translate:
runs-on: ubuntu-latest
if: ${{ github.event.head_commit.author.name != 'github-actions[bot]' && !contains(github.event.head_commit.message, 'gt-translate/') }}
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: generaltranslation/translate@v0
with:
gt_api_key: ${{ secrets.GT_API_KEY }}
gt_project_id: ${{ secrets.GT_PROJECT_ID }}
config: 'apps/docs/gt.config.json'
inline: true
timeout: 3600
pr_branch: 'gt-translate/${{ github.ref_name }}'
================================================
FILE: .gitignore
================================================
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
dist
tmp
out-tsc
# dependencies
node_modules
package-lock.json
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
.cursor
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings
# System Files
.DS_Store
Thumbs.db
.nx/cache
.nx/workspace-data
vite.config.*.timestamp*
vitest.config.*.timestamp*
# yarn
# https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
.eslintcache
.tmp/
.env.local
# Python package metadata
*.egg-info/
*.egg
*.pyc
__pycache__/
# Ruby gem artifacts
*.gem
**/.bundle/
**/vendor/bundle
**/Gemfile.lock
!/Gemfile.lock
examples/**/*.png
**/.venv
**/poetry.lock
!/poetry.lock
.astro
.github/instructions/nx.instructions.md
go.work.sum
.claude/worktrees
================================================
FILE: .golangci.yaml
================================================
version: '2'
run:
build-tags:
- testing
linters:
settings:
errcheck:
exclude-functions:
- (*github.com/gin-gonic/gin.Context).AbortWithError
- (*github.com/gin-gonic/gin.Context).Error
- io.Copy
- syscall.Syscall
- (github.com/gliderlabs/ssh.Session).Exit
- (io.Writer).Write
exclusions:
generated: lax
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
paths:
- third_party$
- builtin$
- examples$
formatters:
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$
================================================
FILE: .husky/.gitignore
================================================
_
================================================
FILE: .husky/pre-commit
================================================
#!/bin/sh
yarn lint-staged
================================================
FILE: .licenserc-clients.yaml
================================================
header:
license:
spdx-id: Apache-2.0
copyright-owner: Daytona Platforms Inc.
content: |
Copyright Daytona Platforms Inc.
SPDX-License-Identifier: Apache-2.0
pattern: |
Copyright (\d{4} )?Daytona Platforms Inc\.
SPDX-License-Identifier: Apache-2\.0
paths:
- 'libs/**/*.go'
- 'libs/**/*.sh'
- 'libs/**/*.js'
- 'libs/**/*.ts'
- 'libs/**/*.tsx'
- 'libs/**/*.py'
- 'guides/**/*.py'
- 'guides/**/*.ts'
- 'guides/**/*.go'
- 'guides/**/*.js'
paths-ignore:
- 'libs/analytics-api-client/**'
- 'libs/api-client/**'
- 'libs/runner-api-client/**'
- 'libs/api-client-go/**'
- 'libs/api-client-python/**'
- 'libs/api-client-python-async/**'
- 'libs/api-client-ruby/**'
- 'apps/docs/**'
- 'libs/computer-use/**'
- 'hack/**'
- 'libs/toolbox-api-client/**'
- 'libs/toolbox-api-client-python/**'
- 'libs/toolbox-api-client-python-async/**'
- 'libs/toolbox-api-client-ruby/**'
- 'libs/toolbox-api-client-go/**'
comment: on-failure
================================================
FILE: .licenserc.yaml
================================================
header:
license:
spdx-id: AGPL-3.0
copyright-owner: Daytona Platforms Inc.
content: |
Copyright Daytona Platforms Inc.
SPDX-License-Identifier: AGPL-3.0
pattern: |
Copyright (\d{4} )?Daytona Platforms Inc\.
SPDX-License-Identifier: AGPL-3\.0
paths:
- '**/*.go'
- '**/*.sh'
- '**/*.js'
- '**/*.ts'
- '**/*.tsx'
- '**/*.py'
paths-ignore:
- 'libs/**'
- '!libs/computer-use/**'
- 'apps/api/src/generate-openapi.ts'
- 'apps/runner/pkg/api/docs/docs.go'
- 'examples/**'
- 'apps/docs/**'
- 'hack/**'
- 'guides/**'
- 'apps/daemon/pkg/toolbox/docs/docs.go'
- 'apps/dashboard/public/mockServiceWorker.js'
comment: on-failure
================================================
FILE: .markdownlint-cli2.jsonc
================================================
{
"$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint-cli2/24eb4dce508ab81398d14d75179123fca425f12d/schema/markdownlint-cli2-config-schema.json",
"config": {
"no-emphasis-as-heading": false,
"line-length": false,
"no-inline-html": false,
"first-line-h1": false,
"no-bare-urls": false,
"no-duplicate-heading": false,
"emphasis-style": {
"style": "underscore",
},
"ol-prefix": false,
"fenced-code-language": false,
"single-title": false,
"heading-increment": false,
"table-column-count": false,
"table-pipe-style": false,
"no-empty-links": false,
},
"ignores": [
"**/node_modules/**",
"**/apps/docs/**",
"**/.venv/**",
"**/libs/toolbox-api-client-go/**"
],
}
================================================
FILE: .npmrc
================================================
# Expose Astro dependencies for \`pnpm\` users
shamefully-hoist=true
================================================
FILE: .nxignore
================================================
.claude/
examples/
================================================
FILE: .prettierignore
================================================
# Add files here to ignore them from prettier formatting
/dist
/coverage
/.nx/cache
/.nx/workspace-data
*.md
libs/*api-client*/**
================================================
FILE: .prettierrc
================================================
{
"singleQuote": true,
"semi": false,
"tabWidth": 2,
"printWidth": 120
}
================================================
FILE: .rubocop.yml
================================================
AllCops:
NewCops: enable
TargetRubyVersion: 3.2
Layout/LineLength:
AllowedPatterns: ['\A\s*#']
AllowCopDirectives: true
Style/Documentation:
Enabled: false
Style/AccessorGrouping:
EnforcedStyle: separated
# Relax some metrics for examples
Metrics/MethodLength:
Max: 25
Exclude:
- 'examples/**/*'
Metrics/AbcSize:
Max: 25
Exclude:
- 'examples/**/*'
Metrics/CyclomaticComplexity:
Exclude:
- 'examples/**/*'
Metrics/PerceivedComplexity:
Exclude:
- 'examples/**/*'
Metrics/BlockLength:
Exclude:
- 'examples/**/*'
Metrics/ClassLength:
Exclude:
- 'examples/**/*'
# Examples can use any style for string concatenation
Style/StringConcatenation:
Exclude:
- 'examples/**/*'
# Examples don't need execute permissions
Lint/ScriptPermission:
Exclude:
- 'examples/**/*'
================================================
FILE: .verdaccio/config.yml
================================================
# path to a directory with all packages
storage: ../tmp/local-registry/storage
# a list of other known repositories we can talk to
uplinks:
npmjs:
url: https://registry.npmjs.org/
maxage: 60m
packages:
'**':
# give all users (including non-authenticated users) full access
# because it is a local registry
access: $all
publish: $all
unpublish: $all
# if package is not available locally, proxy requests to npm registry
proxy: npmjs
# log settings
log:
type: stdout
format: pretty
level: warn
publish:
allow_offline: true # set offline to true to allow publish offline
================================================
FILE: .vscode/launch.json
================================================
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"command": "yarn serve",
"name": "Debug",
"request": "launch",
"type": "node-terminal"
},
{
"command": "yarn serve:skip-runner",
"name": "Debug - Skip Runner",
"request": "launch",
"type": "node-terminal"
},
{
"command": "yarn serve:skip-proxy",
"name": "Debug - Skip Proxy",
"request": "launch",
"type": "node-terminal"
},
{
"name": "Runner",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}/apps/runner/cmd/runner",
"console": "integratedTerminal",
"envFile": "${workspaceFolder}/apps/runner/.env",
"output": "${workspaceFolder}/dist/apps/runner",
"preLaunchTask": "debug-build-runner"
},
{
"name": "Daemon",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}/apps/daemon/cmd/daemon",
"console": "integratedTerminal",
"output": "${workspaceFolder}/dist/apps/daemon"
},
{
"name": "Proxy",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}/apps/proxy/cmd/proxy",
"console": "integratedTerminal",
"envFile": [
"${workspaceFolder}/apps/proxy/.env",
"${workspaceFolder}/apps/proxy/.env.local"
],
"output": "${workspaceFolder}/dist/apps/proxy"
}
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"files.watcherExclude": {
"**/libs/api-client*/**": true
}
}
================================================
FILE: .vscode/tasks.json
================================================
{
"version": "2.0.0",
"tasks": [
{
"label": "debug-build-runner",
"type": "shell",
"command": "yarn nx build runner --output-style=stream",
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "silent"
},
"problemMatcher": ["$go"]
}
]
}
================================================
FILE: .yarnrc.yml
================================================
enableInlineHunks: true
nodeLinker: node-modules
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official email address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
codeofconduct@daytona.io.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Daytona
The team at Daytona welcomes contributions from the community. There are many ways to get involved!
Thanks for taking the time to contribute! ❤️
> And if you like the project but don't have time to contribute, that's perfectly okay. There are other simple ways to support the project and show your appreciation, which we would greatly appreciate:
>
> - Star the project
> - Tweet about it
> - Contribute to our [Docs](https://github.com/daytonaio/docs/)
> - Refer this project in your project's readme
> - Mention the project at local meetups and tell your friends/colleagues
## Code of Conduct
This project and everyone participating in it is governed by the
[Daytona Code of Conduct](https://github.com/daytonaio/daytona?tab=coc-ov-file#readme).
By participating, you are expected to uphold this code. Please report unacceptable behavior
to [info@daytona.io](mailto:info@daytona.io).
## Provide Feedback
You might find things that can be improved while you are using Daytona. You can help by [submitting an issue](https://github.com/daytonaio/daytona/issues/new) when:
- A new feature or an enhancement to an existing feature will improve the utility or usability of Daytona.
- Daytona crashes, or you encounter a bug that can only be resolved by restarting Daytona.
- An error occurs that is unrecoverable, causes Sandbox integrity problems or loss, or generally prevents you from using a Sandbox.
Before creating a new issue, please confirm that an existing issue doesn't already exist.
We will then take care of the issue as soon as possible.
## Participate in the Community
You can engage with our community by:
- Helping other users on [Daytona Community Slack](https://go.daytona.io/slack).
- Improving [documentation](https://github.com/daytonaio/docs/)
- Participating in general discussions about development and DevOps
- Authoring new Daytona Plugins and sharing those Plugins
- Authoring new dev containers and sharing examples
## Contributing Code
You can contribute to Daytona by:
- Enhancing current functionality
- Fixing bugs
- Adding new features and capabilities
Before starting your contribution, especially for core features, we encourage you to reach out to us on [Slack](https://go.daytona.io/slack). This allows us to ensure that your proposed feature aligns with the project's roadmap and goals. Developers are the key to making Daytona the best tool it can be, and we value input from the community.
We look forward to working with you to improve Daytona and make development environments as easy as possible for developers everywhere.
### Steps to Contribute Code
Follow the following steps to ensure your contribution goes smoothly.
1. Read and follow the steps outlined in the [Daytona Contributing Policy](README.md#contributing).
1. Configure your development environment by either following the guide below.
1. [Fork](https://help.github.com/articles/working-with-forks/) the GitHub Repository allowing you to make the changes in your own copy of the repository.
1. Create a [GitHub issue](https://github.com/daytonaio/daytona/issues) if one doesn't exist already.
1. [Prepare your changes](/PREPARING_YOUR_CHANGES.md) and ensure your commits are descriptive. The document contains an optional commit template, if desired.
1. Ensure that you sign off on all your commits to comply with the DCO v1.1. We have more details in [Prepare your changes](/PREPARING_YOUR_CHANGES.md).
1. Ensure to generate new docs after making command related changes, by running `./hack/generate-cli-docs.sh` in the daytona root directory.
1. Ensure to generate a new API client after making changes related to the API spec, by running `./hack/swagger.sh` in the daytona root directory.
1. Ensure that you are using `yarn` as the package manager for any Node.js dependencies.
1. Ensure that you have no lint errors. We use `golangci-lint` as our linter which you can install by following instructions found [here](https://golangci-lint.run/welcome/install/#local-installation) (or simply open Daytona in a Dev Container). You can check for linting errors by running `golangci-lint run` in the root of the project.
1. Create a pull request on GitHub. If you're new to GitHub, read about [pull requests](https://help.github.com/articles/about-pull-requests/). You are welcome to submit your pull request for commentary or review before it is complete by creating a [draft pull request](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests). Please include specific questions or items you'd like feedback on.
1. A member of the Daytona team will review your PR within three business days (excluding any holidays) and either merge, comment, and/or assign someone for review.
1. Work with the reviewer to complete a code review. For each change, create a new commit and push it to make changes to your pull request. When necessary, the reviewer can trigger CI to run tests prior to merging.
1. Once you believe your pull request is ready to be reviewed, ensure the pull request is no longer a draft by [marking it ready for review](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request).
1. The reviewer will look over your contribution and either approve it or provide comments letting you know if there is anything left to do. We try to give you the opportunity to make the required changes yourself, but in some cases, we may perform the changes ourselves if it makes sense to (minor changes or for urgent issues). We do our best to review PRs promptly, but complex changes could require more time.
1. After completing your review, a Daytona team member will trigger merge to run all tests. Upon passing, your change will be merged into `main`, and your pull requests will be closed. All merges to `main` create a new release, and all final changes are attributed to you.
Note: In some cases, we might decide that a PR should be closed without merging. We'll make sure to provide clear reasoning when this happens.
### Coding Style and Conventions
To make the code base consistent, we follow a few guidelines and conventions listed below.
It is possible that the code base does not currently comply with all these guidelines.
While working on a PR, if you see something that can be refactored to comply, go ahead, but keep in mind that we are not looking for massive PRs that only address that.
API and service method conventions:
1. Avoid using model names in service methods
- e.g. `Create` instead of `CreateSandbox`, `Find` instead of `FindSandbox`
1. Use appropriate verbs in the UI
- e.g. `Create API Key` instead of `Generate API Key` since the method is called `Create`
1. Refer to the table below for a connection between API and service methods
| HTTP Method | Controller / Service / Store |
| ----------- | ---------------------------- |
| POST | Create or Update |
| DELETE | Delete |
| PUT | Save |
| GET | Find or List |
#### What Does Contributing Mean for You?
Here is what being a contributor means for you:
- License all our contributions to the project under the AGPL 3.0 License or the Apache 2.0 License
- Have the legal rights to license our contributions ourselves, or get permission to license them from our employers, clients, or others who may have them
For more information, see the [README](README.md) and feel free to reach out to us on [Slack](https://go.daytona.io/slack).
================================================
FILE: COPYRIGHT
================================================
Copyrights in the Daytona software are retained by their contributors.
No copyright assignment is required to contribute to Daytona software.
When we refer to the 'Daytona software authors', we mean anyone who
has contributed to this repository.
Unless otherwise noted, such as with a LICENSE file in a directory, or a
specific copyright notice on a file, all files in this repository are
licensed under the AGPL 3.0 license.
================================================
FILE: Gemfile
================================================
# frozen_string_literal: true
source 'https://rubygems.org'
# Local gems from libs
gem 'daytona_api_client', '>= 0.0.0.pre.dev', path: 'libs/api-client-ruby'
gem 'daytona_toolbox_api_client', '>= 0.0.0.pre.dev', path: 'libs/toolbox-api-client-ruby'
gem 'daytona', '>= 0.0.0.pre.dev', path: 'libs/sdk-ruby'
# Shared development dependencies
group :development do
gem 'pry', '~> 0.15'
gem 'pry-byebug'
gem 'rake', '~> 13.0'
gem 'rspec', '~> 3.6', '>= 3.6.0'
gem 'rubocop', '1.84.2'
gem 'rubocop-rake', '~> 0.7'
gem 'solargraph', '~> 0.57'
gem 'webmock', '~> 3.25'
gem 'yard-markdown', '~> 0.5.0'
end
================================================
FILE: Gemfile.lock
================================================
PATH
remote: libs/api-client-ruby
specs:
daytona_api_client (0.0.0.pre.dev)
typhoeus (~> 1.0, >= 1.0.1)
PATH
remote: libs/sdk-ruby
specs:
daytona (0.0.0.pre.dev)
aws-sdk-s3 (~> 1.0)
daytona_api_client (= 0.0.0.pre.dev)
daytona_toolbox_api_client (= 0.0.0.pre.dev)
dotenv (~> 2.0)
opentelemetry-exporter-otlp (~> 0.29)
opentelemetry-exporter-otlp-metrics (~> 0.1)
opentelemetry-metrics-sdk (~> 0.2)
opentelemetry-sdk (~> 1.4)
toml (~> 0.3)
websocket-client-simple (~> 0.6)
PATH
remote: libs/toolbox-api-client-ruby
specs:
daytona_toolbox_api_client (0.0.0.pre.dev)
typhoeus (~> 1.0, >= 1.0.1)
GEM
remote: https://rubygems.org/
specs:
addressable (2.8.8)
public_suffix (>= 2.0.2, < 8.0)
ast (2.4.3)
aws-eventstream (1.4.0)
aws-partitions (1.1209.0)
aws-sdk-core (3.241.4)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
base64
bigdecimal
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.121.0)
aws-sdk-core (~> 3, >= 3.241.4)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.212.0)
aws-sdk-core (~> 3, >= 3.241.4)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
backport (1.2.0)
base64 (0.3.0)
benchmark (0.5.0)
bigdecimal (4.0.1)
byebug (13.0.0)
reline (>= 0.6.0)
coderay (1.1.3)
crack (1.0.1)
bigdecimal
rexml
csv (3.3.5)
diff-lcs (1.6.2)
dotenv (2.8.1)
ethon (0.15.0)
ffi (>= 1.15.0)
event_emitter (0.2.6)
ffi (1.17.3-aarch64-linux-gnu)
ffi (1.17.3-aarch64-linux-musl)
ffi (1.17.3-arm-linux-gnu)
ffi (1.17.3-arm-linux-musl)
ffi (1.17.3-arm64-darwin)
ffi (1.17.3-x86_64-darwin)
ffi (1.17.3-x86_64-linux-gnu)
ffi (1.17.3-x86_64-linux-musl)
google-protobuf (4.33.5)
bigdecimal
rake (>= 13)
google-protobuf (4.33.5-aarch64-linux-gnu)
bigdecimal
rake (>= 13)
google-protobuf (4.33.5-aarch64-linux-musl)
bigdecimal
rake (>= 13)
google-protobuf (4.33.5-arm64-darwin)
bigdecimal
rake (>= 13)
google-protobuf (4.33.5-x86_64-darwin)
bigdecimal
rake (>= 13)
google-protobuf (4.33.5-x86_64-linux-gnu)
bigdecimal
rake (>= 13)
google-protobuf (4.33.5-x86_64-linux-musl)
bigdecimal
rake (>= 13)
googleapis-common-protos-types (1.22.0)
google-protobuf (~> 4.26)
hashdiff (1.2.1)
io-console (0.8.2)
jaro_winkler (1.6.1)
jmespath (1.6.2)
json (2.18.0)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
language_server-protocol (3.17.0.5)
lint_roller (1.1.0)
logger (1.7.0)
method_source (1.1.0)
mutex_m (0.3.0)
nokogiri (1.19.1-aarch64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.1-aarch64-linux-musl)
racc (~> 1.4)
nokogiri (1.19.1-arm-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.1-arm-linux-musl)
racc (~> 1.4)
nokogiri (1.19.1-arm64-darwin)
racc (~> 1.4)
nokogiri (1.19.1-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.19.1-x86_64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.1-x86_64-linux-musl)
racc (~> 1.4)
observer (0.1.2)
open3 (0.2.1)
opentelemetry-api (1.7.0)
opentelemetry-common (0.23.0)
opentelemetry-api (~> 1.0)
opentelemetry-exporter-otlp (0.31.1)
google-protobuf (>= 3.18)
googleapis-common-protos-types (~> 1.3)
opentelemetry-api (~> 1.1)
opentelemetry-common (~> 0.20)
opentelemetry-sdk (~> 1.10)
opentelemetry-semantic_conventions
opentelemetry-exporter-otlp-metrics (0.6.1)
google-protobuf (>= 3.18, < 5.0)
googleapis-common-protos-types (~> 1.3)
opentelemetry-api (~> 1.1)
opentelemetry-common (~> 0.20)
opentelemetry-metrics-api (~> 0.2)
opentelemetry-metrics-sdk (~> 0.5)
opentelemetry-sdk (~> 1.2)
opentelemetry-semantic_conventions
opentelemetry-metrics-api (0.4.0)
opentelemetry-api (~> 1.0)
opentelemetry-metrics-sdk (0.11.2)
opentelemetry-api (~> 1.1)
opentelemetry-metrics-api (~> 0.2)
opentelemetry-sdk (~> 1.2)
opentelemetry-registry (0.4.0)
opentelemetry-api (~> 1.1)
opentelemetry-sdk (1.10.0)
opentelemetry-api (~> 1.1)
opentelemetry-common (~> 0.20)
opentelemetry-registry (~> 0.2)
opentelemetry-semantic_conventions
opentelemetry-semantic_conventions (1.36.0)
opentelemetry-api (~> 1.0)
ostruct (0.6.3)
parallel (1.27.0)
parser (3.3.10.1)
ast (~> 2.4.1)
racc
parslet (2.0.0)
prism (1.8.0)
pry (0.16.0)
coderay (~> 1.1)
method_source (~> 1.0)
reline (>= 0.6.0)
pry-byebug (3.12.0)
byebug (~> 13.0)
pry (>= 0.13, < 0.17)
public_suffix (7.0.2)
racc (1.8.1)
rainbow (3.1.1)
rake (13.3.1)
rbs (3.10.2)
logger
regexp_parser (2.11.3)
reline (0.6.3)
io-console (~> 0.5)
reverse_markdown (3.0.2)
nokogiri
rexml (3.4.4)
rspec (3.13.2)
rspec-core (~> 3.13.0)
rspec-expectations (~> 3.13.0)
rspec-mocks (~> 3.13.0)
rspec-core (3.13.6)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.5)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-mocks (3.13.7)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-support (3.13.6)
rubocop (1.84.2)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.49.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.49.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
rubocop-rake (0.7.1)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
ruby-progressbar (1.13.0)
solargraph (0.58.2)
ast (~> 2.4.3)
backport (~> 1.2)
benchmark (~> 0.4)
bundler (>= 2.0)
diff-lcs (~> 1.4)
jaro_winkler (~> 1.6, >= 1.6.1)
kramdown (~> 2.3)
kramdown-parser-gfm (~> 1.1)
logger (~> 1.6)
observer (~> 0.1)
open3 (~> 0.2.1)
ostruct (~> 0.6)
parser (~> 3.0)
prism (~> 1.4)
rbs (>= 3.6.1, <= 4.0.0.dev.4)
reverse_markdown (~> 3.0)
rubocop (~> 1.76)
thor (~> 1.0)
tilt (~> 2.0)
yard (~> 0.9, >= 0.9.24)
yard-activesupport-concern (~> 0.0)
yard-solargraph (~> 0.1)
thor (1.5.0)
tilt (2.7.0)
toml (0.3.0)
parslet (>= 1.8.0, < 3.0.0)
typhoeus (1.5.0)
ethon (>= 0.9.0, < 0.16.0)
unicode-display_width (3.2.0)
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
webmock (3.26.1)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
websocket (1.2.11)
websocket-client-simple (0.9.0)
base64
event_emitter
mutex_m
websocket
yard (0.9.38)
yard-activesupport-concern (0.0.1)
yard (>= 0.8)
yard-markdown (0.5.0)
csv
yard
yard-solargraph (0.1.0)
yard (~> 0.9)
PLATFORMS
aarch64-linux
aarch64-linux-gnu
aarch64-linux-musl
arm-linux-gnu
arm-linux-musl
arm64-darwin
x86_64-darwin
x86_64-linux-gnu
x86_64-linux-musl
DEPENDENCIES
daytona (>= 0.0.0.pre.dev)!
daytona_api_client (>= 0.0.0.pre.dev)!
daytona_toolbox_api_client (>= 0.0.0.pre.dev)!
pry (~> 0.15)
pry-byebug
rake (~> 13.0)
rspec (~> 3.6, >= 3.6.0)
rubocop (= 1.84.2)
rubocop-rake (~> 0.7)
solargraph (~> 0.57)
webmock (~> 3.25)
yard-markdown (~> 0.5.0)
BUNDLED WITH
2.6.9
================================================
FILE: LICENSE
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
================================================
FILE: NOTICE
================================================
Daytona
Copyright the various Daytona software authors.
The initial developer of the software is Daytona Platforms, Inc. (https://daytona.io).
Copyright 2025 Daytona Platforms, Inc. All Rights Reserved.
================================================
FILE: PACKAGING.md
================================================
# Packaging Guidelines for Daytona
The Daytona team appreciates any efforts to make our software more accessible to users on various platforms.
While we encourage packaging and distribution of our open-source project, we have some important guidelines, particularly regarding naming.
## Critical Naming Guideline
**Important**: While you are free to package and distribute our software, you **MUST NOT** name your package `daytona` or, in any way, suggest that, the package you distribute, is an official distribution of `daytona`. This restriction is to prevent confusion and maintain the integrity of our project identity.
- Acceptable: "unofficial-daytona-package", "unofficial-daytona-distribution", etc.
- Not Acceptable: "daytona", "official-daytona", etc.
## General Guidelines
1. **License Compliance**: Ensure that the AGPL 3.0/Apache 2.0 license is included with the package and that all copyright notices are preserved.
2. **Version Accuracy**: Use the exact version number of Daytona that you are packaging. Do not modify the version number or add custom suffixes without explicit permission.
3. **Dependencies**: Include all necessary dependencies as specified in our project documentation. Do not add extra dependencies without consulting the project maintainers.
4. **Modifications**: If you need to make any modifications to the source code for packaging purposes, please document these changes clearly and consider submitting them as pull requests to the main project.
5. **Standard Note**: Please include the following standard note in your package description or metadata:
```
This package contains an unofficial distribution of Daytona, an open source project
developed by Daytona Platforms Inc. This package is not officially supported or endorsed
by the Daytona project. For the official version, please visit https://github.com/daytonaio/daytona.
```
## Feedback and Questions
If you have any questions about packaging Daytona or need clarification on these guidelines, especially regarding naming conventions, please open an issue in our GitHub repository.
We appreciate your contribution to making Daytona more accessible to users across different platforms, while respecting our project's identity!
================================================
FILE: PREPARING_YOUR_CHANGES.md
================================================
# Preparing Your Changes
This document contains information related to preparing changes for a pull request. Here's a quick checklist for a good PR, more details below:
1. A discussion around the change on [Slack](https://go.daytona.io/slack) or in an issue.
1. A GitHub Issue with a good description associated with the PR
1. One feature/change per PR
1. One commit per PR
1. PR rebased on main (git rebase, not git pull)
1. Good descriptive commit message, with link to issue
1. No changes to code not directly related to your PR
1. Includes functional/integration test
1. Includes documentation
## Commit Message Format
We do not require a particular commit message format of any kind, but we do require that individual commits be descriptive, relative to size and impact.
For example, if a descriptive title covers what the commit does in practice, then an additional description below the title is not required.
However, if the commit has an out-sized impact relative to other commits, its description will need to reflect that.
Reviewers may ask you to amend your commits if they are not descriptive enough.
Since the descriptiveness of a commit is subjective, please feel free to talk to us on [Slack](https://go.daytona.io/slack) if you have any questions.
### Optional Commit Template
If you would like an optional commit template, see the following:
```text
<present-tense-verb-with-capitalized-first-letter> <everything-else-without-punctuation-at-the-end>
<sentences-in-paragraph-format-or-bullet-points>
```
## Squashed Commits
We require that you squash all changes to a single commit. You can do this with the `git rebase -i HEAD~X` command where X is the number of commits you want to squash. See the [Git Documentation](https://git-scm.com/book/en/v2/Git-Branching-Rebasing) for more details.
## Developer's Certificate of Origin
Any contributions to Daytona must only contain code that can legally be contributed to Daytona, and which the Daytona project can distribute under its license.
Prior to contributing to Daytona please read the [Developer's Certificate of Origin](https://developercertificate.org/) and sign-off all commits with the `--signoff` option provided by `git commit`. For example:
```
git commit --signoff --message "This is the commit message"
```
This option adds a `Signed-off-by` trailer at the end of the commit log message.
## DCO Policy on Real Names
The DCO is a representation by someone stating they have the right to contribute the code they have proposed and is important for legal purposes. We have adopted the CNCF DCO Guidelines (https://github.com/cncf/foundation/blob/main/dco-guidelines.md). Which for simplicity we will include here in full:
### DCO Guidelines v1.1
The DCO is a representation by someone stating they have the right to contribute the code they have proposed for acceptance into a project: https://developercertificate.org
That representation is important for legal purposes and was the community-developed outcome after a $1 billion [lawsuit](https://en.wikipedia.org/wiki/SCO%E2%80%93Linux_disputes) by SCO against IBM. The representation is designed to prevent issues but also keep the burden on contributors low. It has proven very adaptable to other projects, is built into git itself (and now also GitHub), and is in use by thousands of projects to avoid more burdensome requirements to contribute (such as a CLA).
### DCO and Real Names
The DCO requires the use of a real name that can be used to identify someone in case there is an issue about a contribution they made.
**A real name does not require a legal name, nor a birth name, nor any name that appears on an official ID (e.g. a passport). Your real name is the name you convey to people in the community for them to use to identify you as you. The key concern is that your identification is sufficient enough to contact you if an issue were to arise in the future about your contribution.**
Your real name should not be an anonymous id or false name that misrepresents who you are.
================================================
FILE: PUBLISHING.md
================================================
# Publishing Daytona SDKs
This document describes how to publish the Daytona SDKs (Python, TypeScript, and Ruby) to their respective package registries.
## Table of Contents
- [Prerequisites](#prerequisites)
- [Python SDK (PyPI)](#python-sdk-pypi)
- [TypeScript SDK (npm)](#typescript-sdk-npm)
- [Ruby SDK (RubyGems)](#ruby-sdk-rubygems)
- [Automated Publishing (CI/CD)](#automated-publishing-cicd)
- [Version Management](#version-management)
## Prerequisites
Before publishing any SDK, ensure you have:
1. **Maintainer Access**: Write access to the Daytona repository
2. **Package Registry Credentials**:
- PyPI: Token with upload permissions
- npm: Token with publish permissions
- RubyGems: API key with push permissions
3. **Local Development Setup**:
- All dependencies installed (`yarn install`)
- SDKs built successfully
- Tests passing
## Python SDK (PyPI)
### Using Nx
```bash
# From repository root
export PYPI_TOKEN="your-pypi-token"
export PYPI_PKG_VERSION="X.Y.Z" # pre-release format example: "X.Y.Za1"
yarn nx publish sdk-python
```
**Note**: [Guide](https://packaging.python.org/en/latest/discussions/versioning/) for versioning Python packages.
## TypeScript SDK (npm)
### Using Nx
```bash
# From repository root
export NPM_TOKEN="your-npm-token"
export NPM_PKG_VERSION="X.Y.Z" # pre-release format example: "X.Y.Z-alpha.1"
export NPM_TAG="latest" # or "beta", "alpha", etc.
yarn nx publish sdk-typescript
```
**Note**: NPM packages must have [SemVer-aligned formats](https://semver.org/).
## Ruby SDK (RubyGems)
### Using Nx
```bash
# From repository root
export RUBYGEMS_API_KEY="your-rubygems-api-key"
export RUBYGEMS_PKG_VERSION="X.Y.Z" # pre-release format example: "X.Y.Z.alpha.1"
yarn nx publish sdk-ruby
```
**Note**: [Guide](https://guides.rubygems.org/patterns/#prerelease-gems) for versioning Ruby gems.
## Automated Publishing (CI/CD)
### GitHub Actions Workflow
The repository includes a GitHub Actions workflow for automated publishing: `.github/workflows/sdk_publish.yaml`
#### Triggering a Release
1. Go to **Actions** → **SDK and CLI Publish** in the GitHub repository
2. Click **Run workflow**
3. Fill in the parameters:
- **version**: The version to release (e.g., `v0.126.0`)
- **pypi_pkg_version**: (Optional) Override PyPI version
- **npm_pkg_version**: (Optional) Override npm version
- **rubygems_pkg_version**: (Optional) Override RubyGems version
- **npm_tag**: npm dist-tag (default: `latest`)
#### Required Secrets
Ensure these secrets are configured in GitHub repository settings:
- `PYPI_TOKEN`: PyPI API token
- `NPM_TOKEN`: npm access token
- `RUBYGEMS_API_KEY`: RubyGems API key
- `GITHUBBOT_TOKEN`: GitHub token for Homebrew tap updates
### What the Workflow Does
1. Checks out the code
2. Sets up all required environments (Go, Java, Python, Node.js, Ruby)
3. Installs dependencies
4. Configures credentials for all package registries
5. Runs `yarn publish` which uses Nx to publish all SDKs in the correct order
6. Updates the Homebrew tap (for the CLI)
## Version Management
### Version Format
`MAJOR.MINOR.PATCH` releases follow semantics:
- **MAJOR**: Breaking changes
- **MINOR**: New features (backward compatible)
- **PATCH**: Bug fixes (backward compatible)
Prerelease formats depend on SDK language:
1. For **Typescript** (npm) follow semantic versioning ([SemVer](https://semver.org/)): `MAJOR.MINOR.PATCH`
For pre-releases, use:
- `0.126.0-alpha.1` - Alpha release
- `0.126.0-beta.1` - Beta release
- `0.126.0-rc.1` - Release candidate
2. For **Python** (PyPI) follow Python packages versioning [guide](https://packaging.python.org/en/latest/discussions/versioning/):
For pre-releases, use:
- `1.2.0a1` - Alpha release
- `1.2.0b1` - Beta release
- `1.2.0rc1` - Release candidate
3. For **Ruby** (gem) follow Ruby gems versioning [guide](https://guides.rubygems.org/patterns/#prerelease-gems):
For pre-releases, use:
- `0.126.0.alpha.1` - Alpha release
- `0.126.0.beta.1` - Beta release
- `0.126.0.rc.1` - Release candidate
### Checking Published Versions
#### PyPI
```bash
pip index versions daytona
# or
curl -s https://pypi.org/pypi/daytona/json | jq -r .info.version
```
#### npm
```bash
npm view @daytonaio/sdk version
# or
npm info @daytonaio/sdk
```
#### RubyGems
```bash
gem search daytona --remote --exact
# or
gem info daytona --remote
```
## References
- [Semantic Versioning](https://semver.org/)
- [Python packages versioning](https://packaging.python.org/en/latest/discussions/versioning/)
- [Ruby gems versioning guide](https://guides.rubygems.org/patterns/#prerelease-gems)
================================================
FILE: README.md
================================================
<div align="center">
[](https://www.daytona.io/docs)

[](https://goreportcard.com/report/github.com/daytonaio/daytona)
[](https://github.com/daytonaio/daytona/issues)

</div>
<div align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/daytonaio/daytona/raw/main/assets/images/Daytona-logotype-white.png">
<source media="(prefers-color-scheme: light)" srcset="https://github.com/daytonaio/daytona/raw/main/assets/images/Daytona-logotype-black.png">
<img alt="Daytona logo" src="https://github.com/daytonaio/daytona/raw/main/assets/images/Daytona-logotype-black.png" width="50%">
</picture>
</div>
<h3 align="center">
Run AI Code.
<br/>
Secure and Elastic Infrastructure for
Running Your AI-Generated Code.
</h3>
<p align="center">
<a href="https://www.daytona.io/docs"> Documentation </a>·
<a href="https://github.com/daytonaio/daytona/issues/new?assignees=&labels=bug&projects=&template=bug_report.md&title=%F0%9F%90%9B+Bug+Report%3A+"> Report Bug </a>·
<a href="https://github.com/daytonaio/daytona/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title=%F0%9F%9A%80+Feature%3A+"> Request Feature </a>·
<a href="https://go.daytona.io/slack"> Join our Slack </a>·
<a href="https://x.com/daytonaio"> Connect on X </a>
</p>
<p align="center">
<a href="https://www.producthunt.com/posts/daytona-2?embed=true&utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-daytona-2" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=957617&theme=neutral&period=daily&t=1746176740150" alt="Daytona  - Secure and elastic infra for running your AI-generated code. | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
<a href="https://www.producthunt.com/posts/daytona-2?embed=true&utm_source=badge-top-post-topic-badge&utm_medium=badge&utm_souce=badge-daytona-2" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-topic-badge.svg?post_id=957617&theme=neutral&period=monthly&topic_id=237&t=1746176740150" alt="Daytona  - Secure and elastic infra for running your AI-generated code. | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
</p>
---
## Installation
### Python SDK
```bash
pip install daytona
```
### TypeScript SDK
```bash
npm install @daytonaio/sdk
```
---
## Features
- **Lightning-Fast Infrastructure**: Sub-90ms Sandbox creation from code to execution.
- **Separated & Isolated Runtime**: Execute AI-generated code with zero risk to your infrastructure.
- **Massive Parallelization for Concurrent AI Workflows**: Fork Sandbox filesystem and memory state (Coming soon!)
- **Programmatic Control**: File, Git, LSP, and Execute API
- **Unlimited Persistence**: Your Sandboxes can live forever
- **OCI/Docker Compatibility**: Use any OCI/Docker image to create a Sandbox
---
## Quick Start
1. Create an account at https://app.daytona.io
1. Generate a [new API key](https://app.daytona.io/dashboard/keys)
1. Follow the [Getting Started docs](https://www.daytona.io/docs/getting-started/) to start using the Daytona SDK
## Creating your first Sandbox
### Python SDK
```py
from daytona import Daytona, DaytonaConfig, CreateSandboxBaseParams
# Initialize the Daytona client
daytona = Daytona(DaytonaConfig(api_key="YOUR_API_KEY"))
# Create the Sandbox instance
sandbox = daytona.create(CreateSandboxBaseParams(language="python"))
# Run code securely inside the Sandbox
response = sandbox.process.code_run('print("Sum of 3 and 4 is " + str(3 + 4))')
if response.exit_code != 0:
print(f"Error running code: {response.exit_code} {response.result}")
else:
print(response.result)
# Clean up the Sandbox
daytona.delete(sandbox)
```
### Typescript SDK
```jsx
import { Daytona } from '@daytonaio/sdk'
async function main() {
// Initialize the Daytona client
const daytona = new Daytona({
apiKey: 'YOUR_API_KEY',
})
let sandbox
try {
// Create the Sandbox instance
sandbox = await daytona.create({
language: 'typescript',
})
// Run code securely inside the Sandbox
const response = await sandbox.process.codeRun('console.log("Sum of 3 and 4 is " + (3 + 4))')
if (response.exitCode !== 0) {
console.error('Error running code:', response.exitCode, response.result)
} else {
console.log(response.result)
}
} catch (error) {
console.error('Sandbox flow error:', error)
} finally {
if (sandbox) await daytona.delete(sandbox)
}
}
main().catch(console.error)
```
### Go SDK
```go
package main
import (
"context"
"fmt"
"log"
"time"
"github.com/daytonaio/daytona/libs/sdk-go/pkg/daytona"
"github.com/daytonaio/daytona/libs/sdk-go/pkg/types"
)
func main() {
// Initialize the Daytona client with DAYTONA_API_KEY in env
// Alternative is to use daytona.NewClientWithConfig(...) for more specific config
client, err := daytona.NewClient()
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
ctx := context.Background()
// Create the Sandbox instance
params := types.SnapshotParams{
SandboxBaseParams: types.SandboxBaseParams{
Language: types.CodeLanguagePython,
},
}
sandbox, err := client.Create(ctx, params, daytona.WithTimeout(90*time.Second))
if err != nil {
log.Fatalf("Failed to create sandbox: %v", err)
}
// Run code securely inside the Sandbox
response, err := sandbox.Process.ExecuteCommand(ctx, `python3 -c "print('Sum of 3 and 4 is', 3 + 4)"`)
if err != nil {
log.Fatalf("Failed to execute command: %v", err)
}
if response.ExitCode != 0 {
fmt.Printf("Error running code: %d %s\n", response.ExitCode, response.Result)
} else {
fmt.Println(response.Result)
}
// Clean up the Sandbox
if err := sandbox.Delete(ctx); err != nil {
log.Fatalf("Failed to delete sandbox: %v", err)
}
}
```
---
## Contributing
Daytona is Open Source under the [GNU AFFERO GENERAL PUBLIC LICENSE](LICENSE), and is the [copyright of its contributors](NOTICE). If you would like to contribute to the software, read the Developer Certificate of Origin Version 1.1 (https://developercertificate.org/). Afterwards, navigate to the [contributing guide](CONTRIBUTING.md) to get started.
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Reporting a Vulnerability
At Daytona, we take security seriously. If you believe you have found a security vulnerability in any Daytona-owned repository or service, please report it responsibly.
**Please do NOT report security vulnerabilities through public GitHub issues.**
Instead, please email us at: **security@daytona.io**
You can also report vulnerabilities privately through [GitHub's security advisory feature](https://github.com/daytonaio/daytona/security/advisories/new).
Please include:
- Description of the vulnerability
- Steps to reproduce
- Impact assessment
- Any relevant screenshots or proof-of-concept
We will acknowledge receipt within 2 business days and provide an initial assessment within 5 business days.
## Scope
The following assets and areas are in scope for vulnerability reports:
- **Daytona platform** — app.daytona.io, including the web application and management interfaces
- **API and SDK** — all documented and undocumented API endpoints, client SDKs
- **Sandbox runtime isolation** — escape from sandbox to host, cross-tenant access, isolation boundary bypasses
- **Authentication and authorization** — SSO, API key management, session handling, privilege escalation across accounts or organizations
- **Secrets management** — scoped secret injection, unauthorized access to secrets, leakage across sandbox boundaries
- **Public GitHub repositories** — any repository under the [daytonaio](https://github.com/daytonaio) organization
## Excluded Submission Types
The following categories are excluded from this program. Reports in these categories will be closed without further assessment unless they demonstrate impact beyond what is described.
1. **In-sandbox privilege escalation, root access, or capability use** — Daytona sandboxes provide full root access within user-namespace isolation by design. Findings that chain to host escape or cross-sandbox access remain in scope.
2. **Findings within the reporter's own sandbox** that do not demonstrate impact beyond that sandbox's isolation boundary.
3. **Denial of service** — DoS, DDoS, resource exhaustion, volumetric testing, or network flooding.
4. **Rate limiting observations** that do not demonstrate resource exhaustion, financial impact, or abuse potential.
5. **Social engineering** — phishing, vishing, pretexting, or any form of social engineering targeting Daytona employees or users.
6. **Physical security testing** of offices, data centers, or personnel.
7. **Marketing and documentation sites** — findings against daytona.io or docs.daytona.io, excluding subdomain takeover vulnerabilities.
8. **Third-party services** — vulnerabilities in services or platforms not owned or operated by Daytona.
9. **Known public files or directories** — e.g., robots.txt, .well-known, or other intentionally public resources.
10. **DNSSEC or TLS cipher suite configuration suggestions** without a demonstrated exploit path.
11. **Missing Secure/HTTPOnly flags** on non-sensitive cookies.
12. **CSRF on unauthenticated or public-facing forms.**
13. **Outdated browsers and platforms** — vulnerabilities only affecting unpatched or end-of-life software.
14. **Automated scan output** — reports generated solely by automated tools without validated proof of impact.
15. **Best practice recommendations** without demonstrable security impact.
16. **Spam or service degradation** — testing that results in sending unsolicited messages or degradation of service to other users.
## Supported Versions
We accept vulnerability reports for the latest stable release of Daytona.
## Safe Harbor
Daytona supports safe harbor for security researchers who act in good faith and in accordance with this policy.
We will not pursue legal action against researchers who:
- Make a good-faith effort to avoid privacy violations, data destruction, and service disruption
- Only access data to the extent necessary to demonstrate the vulnerability
- Do not exfiltrate, retain, or disclose any user data encountered during research
- Report findings promptly through the channels listed above
- Do not disclose findings publicly before coordinated resolution (see Disclosure Timeline below)
- Comply with all applicable laws
If legal action is initiated by a third party against a researcher for activities conducted in accordance with this policy, we will take steps to make it known that the research was authorized.
This safe harbor applies to all Daytona services and assets listed in the Scope section.
## Disclosure Timeline
We follow a coordinated disclosure process:
- **90 days** — We target remediation within 90 days of a validated report. Complex issues may require additional time, and we will communicate timelines transparently.
- **30 days post-patch** — After a fix is released, we ask that researchers wait 30 days before public disclosure to allow users to update.
- **No response** — If we fail to acknowledge or respond to a report within 90 days, the researcher may proceed with public disclosure after providing 14 days advance written notice to security@daytona.io.
## Rewards
We offer rewards from $100 to $1,000 for valid, original findings that demonstrate real security impact. Severity, exploitability, and report quality are all considered. Duplicate reports are credited to the first submission.
================================================
FILE: apps/api/Dockerfile
================================================
FROM node:24-slim AS daytona
ENV CI=true
# Install dependencies (apt instead of apk)
RUN apt-get update && apt-get install -y --no-install-recommends bash curl && \
rm -rf /var/lib/apt/lists/*
RUN npm install -g corepack && corepack enable
WORKDIR /daytona
# Yarn caching layer
COPY package.json yarn.lock .yarnrc.yml ./
RUN yarn install --immutable
# Nx + TS config
COPY nx.json tsconfig.base.json ./
# App source
COPY apps/api/ apps/api/
COPY apps/dashboard/ apps/dashboard/
# Lib dependencies
COPY libs/runner-api-client/ libs/runner-api-client/
COPY libs/api-client/ libs/api-client/
COPY libs/analytics-api-client/ libs/analytics-api-client/
COPY libs/toolbox-api-client/ libs/toolbox-api-client/
COPY libs/sdk-typescript/ libs/sdk-typescript/
ENV NX_DAEMON=false
RUN yarn nx build api --configuration=production --nxBail=true
RUN VITE_BASE_API_URL=%DAYTONA_BASE_API_URL% yarn nx build dashboard --configuration=production --nxBail=true --output-style=stream
ARG VERSION=0.0.1
ENV VERSION=${VERSION}
HEALTHCHECK CMD [ "curl", "-f", "http://localhost:3000/api/config" ]
ENTRYPOINT ["node", "dist/apps/api/main.js"]
================================================
FILE: apps/api/eslint.config.mjs
================================================
import baseConfig from '../../eslint.config.mjs'
export default [
...baseConfig,
{
files: ['**/*.ts'],
rules: {
'no-restricted-syntax': [
'error',
{
selector:
'Decorator[expression.callee.name="InjectRepository"] > CallExpression > Identifier[name="Sandbox"]',
message: 'Do not use @InjectRepository(Sandbox). Use the custom SandboxRepository instead.',
},
],
},
},
]
================================================
FILE: apps/api/jest.config.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
export default {
displayName: 'daytona',
preset: '../../jest.preset.js',
testEnvironment: 'node',
transform: {
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
},
moduleFileExtensions: ['ts', 'js', 'html'],
coverageDirectory: '../../coverage/apps/daytona',
}
================================================
FILE: apps/api/project.json
================================================
{
"name": "api",
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "apps/api/src",
"projectType": "application",
"tags": [],
"targets": {
"build": {
"executor": "@nx/webpack:webpack",
"options": {
"outputPath": "dist/apps/api",
"deleteOutputPath": false,
"main": "apps/api/src/main.ts",
"tsConfig": "apps/api/tsconfig.app.json",
"generatePackageJson": true,
"target": "node",
"compiler": "tsc",
"sourceMap": true,
"webpackConfig": "apps/api/webpack.config.js",
"assets": [
{
"input": "apps/api/src/assets",
"glob": "**/*",
"output": "./assets/"
}
]
},
"configurations": {
"production": {
"optimization": true,
"extractLicenses": true,
"inspect": false
}
}
},
"openapi": {
"executor": "nx:run-commands",
"cache": true,
"inputs": [
"{projectRoot}/src/**/*.ts",
"!{projectRoot}/src/**/*.spec.ts",
"{projectRoot}/tsconfig.app.json",
{
"dependentTasksOutputFiles": "**/*",
"transitive": true
}
],
"outputs": ["{workspaceRoot}/dist/apps/api/openapi.json", "{workspaceRoot}/dist/apps/api/openapi.3.1.0.json"],
"options": {
"commands": [
"mkdir -p dist/apps/api",
"yarn ts-node apps/api/src/generate-openapi.ts -o dist/apps/api/openapi.json"
],
"parallel": false,
"env": {
"TS_NODE_PROJECT": "apps/api/tsconfig.app.json",
"NODE_OPTIONS": "--require tsconfig-paths/register",
"SKIP_CONNECTIONS": "true"
}
}
},
"serve": {
"executor": "@nx/js:node",
"defaultConfiguration": "development",
"dependsOn": ["build"],
"options": {
"buildTarget": "api:build",
"runBuildTargetDependencies": false,
"watch": true
},
"configurations": {
"development": {
"buildTarget": "api:build:development"
},
"production": {
"buildTarget": "api:build:production"
}
}
},
"format": {
"executor": "nx:run-commands",
"options": {
"command": "cd {projectRoot} && prettier --write \"**/*.{ts,json,mjs}\" --config ../../.prettierrc"
}
},
"test": {
"options": {
"passWithNoTests": true
}
},
"check-version-env": {},
"docker": {
"options": {
"target": "daytona"
},
"dependsOn": [
{
"target": "build-amd64",
"projects": "runner"
}
]
},
"push-manifest": {},
"lint": {
"executor": "nx:run-commands",
"options": {
"command": "bash apps/api/scripts/validate-migration-paths.sh $(find apps/api/src/migrations -name '*-migration.ts' -type f)"
}
}
}
}
================================================
FILE: apps/api/scripts/validate-migration-paths.sh
================================================
#!/bin/bash
# Copyright Daytona Platforms Inc.
# SPDX-License-Identifier: AGPL-3.0
# Fails if any migration file is placed directly under
# apps/api/src/migrations/ instead of pre-deploy/ or post-deploy/.
# Legacy migrations (timestamp <= LEGACY_CUTOFF) are excluded.
# Exit on error
set -e
LEGACY_CUTOFF=1770880371265
forbidden=()
for f in "$@"; do
rel="$(realpath --relative-to="$PWD" "$f")"
case "$rel" in
apps/api/src/migrations/pre-deploy/*-migration.ts) ;;
apps/api/src/migrations/post-deploy/*-migration.ts) ;;
apps/api/src/migrations/*/*-migration.ts)
forbidden+=("$rel")
;;
apps/api/src/migrations/*-migration.ts)
timestamp=$(basename "$rel" | grep -oP '^\d+')
if [ -n "$timestamp" ] && [ "$timestamp" -le "$LEGACY_CUTOFF" ]; then
continue
fi
forbidden+=("$rel")
;;
esac
done
if [ ${#forbidden[@]} -gt 0 ]; then
echo "Migration files must be placed in one of:" >&2
echo " - apps/api/src/migrations/pre-deploy/" >&2
echo " - apps/api/src/migrations/post-deploy/" >&2
echo "" >&2
echo "Invalid paths:" >&2
for p in "${forbidden[@]}"; do
echo " - $p" >&2
done
echo "" >&2
echo "See apps/api/src/migrations/README.md for more information." >&2
exit 1
fi
================================================
FILE: apps/api/src/admin/admin.module.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { Module } from '@nestjs/common'
import { AdminRunnerController } from './controllers/runner.controller'
import { AdminSandboxController } from './controllers/sandbox.controller'
import { SandboxModule } from '../sandbox/sandbox.module'
import { RegionModule } from '../region/region.module'
import { OrganizationModule } from '../organization/organization.module'
@Module({
imports: [SandboxModule, RegionModule, OrganizationModule],
controllers: [AdminRunnerController, AdminSandboxController],
})
export class AdminModule {}
================================================
FILE: apps/api/src/admin/controllers/runner.controller.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import {
Body,
Controller,
Delete,
Get,
HttpCode,
NotFoundException,
Param,
ParseUUIDPipe,
Patch,
Post,
Query,
UseGuards,
} from '@nestjs/common'
import { ApiBearerAuth, ApiOAuth2, ApiOperation, ApiParam, ApiQuery, ApiResponse, ApiTags } from '@nestjs/swagger'
import { AdminCreateRunnerDto } from '../dto/create-runner.dto'
import { Audit, MASKED_AUDIT_VALUE, TypedRequest } from '../../audit/decorators/audit.decorator'
import { AuditAction } from '../../audit/enums/audit-action.enum'
import { AuditTarget } from '../../audit/enums/audit-target.enum'
import { CombinedAuthGuard } from '../../auth/combined-auth.guard'
import { SystemActionGuard } from '../../auth/system-action.guard'
import { RequiredApiRole } from '../../common/decorators/required-role.decorator'
import { RegionService } from '../../region/services/region.service'
import { CreateRunnerResponseDto } from '../../sandbox/dto/create-runner-response.dto'
import { RunnerFullDto } from '../../sandbox/dto/runner-full.dto'
import { RunnerDto } from '../../sandbox/dto/runner.dto'
import { RunnerService } from '../../sandbox/services/runner.service'
import { SystemRole } from '../../user/enums/system-role.enum'
@ApiTags('admin')
@Controller('admin/runners')
@UseGuards(CombinedAuthGuard, SystemActionGuard)
@RequiredApiRole([SystemRole.ADMIN])
@ApiOAuth2(['openid', 'profile', 'email'])
@ApiBearerAuth()
export class AdminRunnerController {
constructor(
private readonly runnerService: RunnerService,
private readonly regionService: RegionService,
) {}
@Post()
@HttpCode(201)
@ApiOperation({
summary: 'Create runner',
operationId: 'adminCreateRunner',
})
@ApiResponse({
status: 201,
type: CreateRunnerResponseDto,
})
@Audit({
action: AuditAction.CREATE,
targetType: AuditTarget.RUNNER,
targetIdFromResult: (result: RunnerDto) => result?.id,
requestMetadata: {
body: (req: TypedRequest<AdminCreateRunnerDto>) => ({
domain: req.body?.domain,
apiUrl: req.body?.apiUrl,
proxyUrl: req.body?.proxyUrl,
regionId: req.body?.regionId,
name: req.body?.name,
apiKey: MASKED_AUDIT_VALUE,
apiVersion: req.body?.apiVersion,
}),
},
})
async create(@Body() createRunnerDto: AdminCreateRunnerDto): Promise<CreateRunnerResponseDto> {
const region = await this.regionService.findOne(createRunnerDto.regionId)
if (!region) {
throw new NotFoundException('Region not found')
}
const { runner, apiKey } = await this.runnerService.create({
domain: createRunnerDto.domain,
apiUrl: createRunnerDto.apiUrl,
proxyUrl: createRunnerDto.proxyUrl,
regionId: createRunnerDto.regionId,
name: createRunnerDto.name,
apiKey: createRunnerDto.apiKey,
apiVersion: createRunnerDto.apiVersion,
cpu: createRunnerDto.cpu,
memoryGiB: createRunnerDto.memoryGiB,
diskGiB: createRunnerDto.diskGiB,
})
return CreateRunnerResponseDto.fromRunner(runner, apiKey)
}
@Get(':id')
@HttpCode(200)
@ApiOperation({
summary: 'Get runner by ID',
operationId: 'adminGetRunnerById',
})
@ApiResponse({
status: 200,
type: RunnerFullDto,
})
@ApiParam({
name: 'id',
description: 'Runner ID',
type: String,
})
async getRunnerById(@Param('id', ParseUUIDPipe) id: string): Promise<RunnerFullDto> {
return this.runnerService.findOneFullOrFail(id)
}
@Get()
@HttpCode(200)
@ApiOperation({
summary: 'List all runners',
operationId: 'adminListRunners',
})
@ApiResponse({
status: 200,
type: [RunnerFullDto],
})
@ApiQuery({
name: 'regionId',
description: 'Filter runners by region ID',
type: String,
required: false,
})
async findAll(@Query('regionId') regionId?: string): Promise<RunnerFullDto[]> {
if (regionId) {
return this.runnerService.findAllByRegionFull(regionId)
}
return this.runnerService.findAllFull()
}
@Patch(':id/scheduling')
@HttpCode(200)
@ApiOperation({
summary: 'Update runner scheduling status',
operationId: 'adminUpdateRunnerScheduling',
})
@ApiResponse({
status: 204,
})
@Audit({
action: AuditAction.UPDATE_SCHEDULING,
targetType: AuditTarget.RUNNER,
targetIdFromRequest: (req) => req.params.id,
requestMetadata: {
body: (req: TypedRequest<{ unschedulable: boolean }>) => ({
unschedulable: req.body?.unschedulable,
}),
},
})
async updateSchedulingStatus(
@Param('id', ParseUUIDPipe) id: string,
@Body('unschedulable') unschedulable: boolean,
): Promise<void> {
await this.runnerService.updateSchedulingStatus(id, unschedulable)
}
@Delete(':id')
@HttpCode(204)
@ApiOperation({
summary: 'Delete runner',
operationId: 'adminDeleteRunner',
})
@ApiResponse({
status: 204,
})
@ApiParam({
name: 'id',
description: 'Runner ID',
type: String,
})
@Audit({
action: AuditAction.DELETE,
targetType: AuditTarget.RUNNER,
targetIdFromRequest: (req) => req.params.id,
})
async delete(@Param('id', ParseUUIDPipe) id: string): Promise<void> {
return this.runnerService.remove(id)
}
}
================================================
FILE: apps/api/src/admin/controllers/sandbox.controller.ts
================================================
/*
* Copyright Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { Controller, HttpCode, NotFoundException, Param, Post, UseGuards } from '@nestjs/common'
import { ApiBearerAuth, ApiOAuth2, ApiOperation, ApiParam, ApiResponse, ApiTags } from '@nestjs/swagger'
import { Audit } from '../../audit/decorators/audit.decorator'
import { AuditAction } from '../../audit/enums/audit-action.enum'
import { AuditTarget } from '../../audit/enums/audit-target.enum'
import { CombinedAuthGuard } from '../../auth/combined-auth.guard'
import { SystemActionGuard } from '../../auth/system-action.guard'
import { RequiredApiRole } from '../../common/decorators/required-role.decorator'
import { OrganizationService } from '../../organization/services/organization.service'
import { SandboxDto } from '../../sandbox/dto/sandbox.dto'
import { SandboxService } from '../../sandbox/services/sandbox.service'
import { SystemRole } from '../../user/enums/system-role.enum'
@ApiTags('admin')
@Controller('admin/sandbox')
@UseGuards(CombinedAuthGuard, SystemActionGuard)
@RequiredApiRole([SystemRole.ADMIN])
@ApiOAuth2(['openid', 'profile', 'email'])
@ApiBearerAuth()
export class AdminSandboxController {
constructor(
private readonly sandboxService: SandboxService,
private readonly organizationService: OrganizationService,
) {}
@Post(':sandboxId/recover')
@HttpCode(200)
@ApiOperation({
summary: 'Recover sandbox from error state as an admin',
operationId: 'adminRecoverSandbox',
})
@ApiParam({
name: 'sandboxId',
description: 'ID of the sandbox',
type: 'string',
})
@ApiResponse({
status: 200,
description: 'Recovery initiated',
type: SandboxDto,
})
@Audit({
action: AuditAction.RECOVER,
targetType: AuditTarget.SANDBOX,
targetIdFromRequest: (req) => req.params.sandboxId,
targetIdFromResult: (result: SandboxDto) => result?.id,
})
async recoverSandbox(@Param('sandboxId') sandboxId: string): Promise<SandboxDto> {
const organization = await this.organizationService.findBySandboxId(sandboxId)
if (!organization) {
throw new NotFoundException('Sandbox not found')
}
const recoveredSandbox = await this.sandboxService.recover(sandboxId, organization)
return this.sandboxService.toSandboxDto(recoveredSandbox)
}
}
================================================
FILE: apps/api/src/admin/dto/create-runner.dto.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { IsNumber, IsOptional, IsString } from 'class-validator'
import { ApiProperty, ApiSchema } from '@nestjs/swagger'
import { CreateRunnerDto } from '../../sandbox/dto/create-runner.dto'
@ApiSchema({ name: 'AdminCreateRunner' })
export class AdminCreateRunnerDto extends CreateRunnerDto {
@IsString()
@ApiProperty()
apiKey: string
@IsString()
@ApiProperty({
description: 'The api version of the runner to create',
pattern: '^(0|2)$',
example: '2',
})
apiVersion: '0' | '2'
@ApiProperty({
required: false,
description: 'The domain of the runner',
example: 'runner1.example.com',
})
@IsString()
@IsOptional()
domain?: string
@IsString()
@ApiProperty({
description: 'The API URL of the runner',
example: 'https://api.runner1.example.com',
required: false,
})
@IsOptional()
apiUrl?: string
@IsString()
@ApiProperty({
description: 'The proxy URL of the runner',
example: 'https://proxy.runner1.example.com',
required: false,
})
@IsOptional()
proxyUrl?: string
@IsNumber()
@ApiProperty({
description: 'The CPU capacity of the runner',
example: 8,
required: false,
})
@IsOptional()
cpu?: number
@IsNumber()
@ApiProperty({
description: 'The memory capacity of the runner in GiB',
example: 16,
required: false,
})
@IsOptional()
memoryGiB?: number
@IsNumber()
@ApiProperty({
description: 'The disk capacity of the runner in GiB',
example: 100,
required: false,
})
@IsOptional()
diskGiB?: number
}
================================================
FILE: apps/api/src/analytics/analytics.module.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { Module } from '@nestjs/common'
import { TypeOrmModule } from '@nestjs/typeorm'
import { AnalyticsService } from './services/analytics.service'
@Module({
imports: [TypeOrmModule.forFeature([AnalyticsService])],
providers: [AnalyticsService],
exports: [AnalyticsService],
})
export class AnalyticsModule {}
================================================
FILE: apps/api/src/analytics/services/analytics.service.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { Injectable, Logger } from '@nestjs/common'
import { OnEvent } from '@nestjs/event-emitter'
import { SandboxEvents } from '../../sandbox/constants/sandbox-events.constants'
import { SandboxCreatedEvent } from '../../sandbox/events/sandbox-create.event'
import { SandboxDesiredStateUpdatedEvent } from '../../sandbox/events/sandbox-desired-state-updated.event'
import { SandboxDestroyedEvent } from '../../sandbox/events/sandbox-destroyed.event'
import { SandboxPublicStatusUpdatedEvent } from '../../sandbox/events/sandbox-public-status-updated.event'
import { SandboxStartedEvent } from '../../sandbox/events/sandbox-started.event'
import { SandboxStateUpdatedEvent } from '../../sandbox/events/sandbox-state-updated.event'
import { SandboxStoppedEvent } from '../../sandbox/events/sandbox-stopped.event'
import { PostHog } from 'posthog-node'
import { OnAsyncEvent } from '../../common/decorators/on-async-event.decorator'
import { Organization } from '../../organization/entities/organization.entity'
import { OrganizationEvents } from '../../organization/constants/organization-events.constant'
import { TypedConfigService } from '../../config/typed-config.service'
@Injectable()
export class AnalyticsService {
private readonly logger = new Logger(AnalyticsService.name)
private readonly posthog?: PostHog
constructor(private readonly configService: TypedConfigService) {
if (!this.configService.get('posthog.apiKey')) {
return
}
if (!this.configService.get('posthog.host')) {
return
}
// Initialize PostHog client
this.posthog = new PostHog(this.configService.get('posthog.apiKey'), {
host: this.configService.get('posthog.host'),
})
}
@OnEvent(SandboxEvents.CREATED)
async handleSandboxCreatedEvent(event: SandboxCreatedEvent) {
this.logger.debug(`Sandbox created: ${JSON.stringify(event)}`)
}
@OnEvent(SandboxEvents.STARTED)
async handleSandboxStartedEvent(event: SandboxStartedEvent) {
this.logger.debug(`Sandbox started: ${JSON.stringify(event)}`)
}
@OnEvent(SandboxEvents.STOPPED)
async handleSandboxStoppedEvent(event: SandboxStoppedEvent) {
this.logger.debug(`Sandbox stopped: ${JSON.stringify(event)}`)
}
@OnEvent(SandboxEvents.DESTROYED)
async handleSandboxDestroyedEvent(event: SandboxDestroyedEvent) {
this.logger.debug(`Sandbox destroyed: ${JSON.stringify(event)}`)
}
@OnEvent(SandboxEvents.PUBLIC_STATUS_UPDATED)
async handleSandboxPublicStatusUpdatedEvent(event: SandboxPublicStatusUpdatedEvent) {
this.logger.debug(`Sandbox public status updated: ${JSON.stringify(event)}`)
}
@OnEvent(SandboxEvents.DESIRED_STATE_UPDATED)
async handleSandboxDesiredStateUpdatedEvent(event: SandboxDesiredStateUpdatedEvent) {
this.logger.debug(`Sandbox desired state updated: ${JSON.stringify(event)}`)
}
@OnEvent(SandboxEvents.STATE_UPDATED)
async handleSandboxStateUpdatedEvent(event: SandboxStateUpdatedEvent) {
this.logger.debug(`Sandbox state updated: ${JSON.stringify(event)}`)
}
@OnAsyncEvent({
event: OrganizationEvents.CREATED,
})
async handlePersonalOrganizationCreatedEvent(payload: Organization) {
if (!payload.personal) {
return
}
if (!this.posthog) {
return
}
this.posthog.groupIdentify({
groupType: 'organization',
groupKey: payload.id,
properties: {
name: `Personal - ${payload.createdBy}`,
created_at: payload.createdAt,
created_by: payload.createdBy,
personal: payload.personal,
environment: this.configService.get('posthog.environment'),
},
})
}
}
================================================
FILE: apps/api/src/api-key/api-key.controller.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { Controller, Post, Get, Delete, Param, Body, UseGuards, ForbiddenException, HttpCode } from '@nestjs/common'
import { ApiKeyService } from './api-key.service'
import { CreateApiKeyDto } from './dto/create-api-key.dto'
import { ApiHeader, ApiOAuth2, ApiOperation, ApiResponse, ApiTags, ApiBearerAuth } from '@nestjs/swagger'
import { ApiKeyResponseDto } from './dto/api-key-response.dto'
import { ApiKeyListDto } from './dto/api-key-list.dto'
import { CombinedAuthGuard } from '../auth/combined-auth.guard'
import { CustomHeaders } from '../common/constants/header.constants'
import { AuthContext } from '../common/decorators/auth-context.decorator'
import { AuthContext as IAuthContext } from '../common/interfaces/auth-context.interface'
import { OrganizationAuthContext } from '../common/interfaces/auth-context.interface'
import { OrganizationMemberRole } from '../organization/enums/organization-member-role.enum'
import { OrganizationResourcePermission } from '../organization/enums/organization-resource-permission.enum'
import { OrganizationResourceActionGuard } from '../organization/guards/organization-resource-action.guard'
import { SystemRole } from '../user/enums/system-role.enum'
import { Audit, TypedRequest } from '../audit/decorators/audit.decorator'
import { AuditAction } from '../audit/enums/audit-action.enum'
import { AuditTarget } from '../audit/enums/audit-target.enum'
import { ApiKey } from './api-key.entity'
import { AuthenticatedRateLimitGuard } from '../common/guards/authenticated-rate-limit.guard'
@ApiTags('api-keys')
@Controller('api-keys')
@ApiHeader(CustomHeaders.ORGANIZATION_ID)
@UseGuards(CombinedAuthGuard, OrganizationResourceActionGuard, AuthenticatedRateLimitGuard)
@ApiOAuth2(['openid', 'profile', 'email'])
@ApiBearerAuth()
export class ApiKeyController {
constructor(private readonly apiKeyService: ApiKeyService) {}
@Post()
@ApiOperation({
summary: 'Create API key',
operationId: 'createApiKey',
})
@ApiResponse({
status: 201,
description: 'API key created successfully.',
type: ApiKeyResponseDto,
})
@Audit({
action: AuditAction.CREATE,
targetType: AuditTarget.API_KEY,
targetIdFromResult: (result: ApiKeyResponseDto) => result?.name,
requestMetadata: {
body: (req: TypedRequest<CreateApiKeyDto>) => ({
name: req.body?.name,
permissions: req.body?.permissions,
expiresAt: req.body?.expiresAt,
}),
},
})
async createApiKey(
@AuthContext() authContext: OrganizationAuthContext,
@Body() createApiKeyDto: CreateApiKeyDto,
): Promise<ApiKeyResponseDto> {
this.validateRequestedApiKeyPermissions(authContext, createApiKeyDto.permissions)
const { apiKey, value } = await this.apiKeyService.createApiKey(
authContext.organizationId,
authContext.userId,
createApiKeyDto.name,
createApiKeyDto.permissions,
createApiKeyDto.expiresAt,
)
return ApiKeyResponseDto.fromApiKey(apiKey, value)
}
@Get()
@ApiOperation({
summary: 'List API keys',
operationId: 'listApiKeys',
})
@ApiResponse({
status: 200,
description: 'API keys retrieved successfully.',
type: [ApiKeyListDto],
})
@ApiResponse({ status: 500, description: 'Error fetching API keys.' })
async getApiKeys(@AuthContext() authContext: OrganizationAuthContext): Promise<ApiKeyListDto[]> {
let apiKeys: ApiKey[] = []
if (authContext.role === SystemRole.ADMIN || authContext.organizationUser?.role === OrganizationMemberRole.OWNER) {
apiKeys = await this.apiKeyService.getApiKeys(authContext.organizationId)
} else {
apiKeys = await this.apiKeyService.getApiKeys(authContext.organizationId, authContext.userId)
}
return apiKeys.map((apiKey) => ApiKeyListDto.fromApiKey(apiKey))
}
@Get('current')
@ApiOperation({
summary: "Get current API key's details",
operationId: 'getCurrentApiKey',
})
@ApiResponse({
status: 200,
description: 'API key retrieved successfully.',
type: ApiKeyListDto,
})
async getCurrentApiKey(@AuthContext() authContext: IAuthContext): Promise<ApiKeyListDto> {
if (!authContext.apiKey) {
throw new ForbiddenException('Authenticate with an API key to use this endpoint')
}
return ApiKeyListDto.fromApiKey(authContext.apiKey)
}
@Get(':name')
@ApiOperation({
summary: 'Get API key',
operationId: 'getApiKey',
})
@ApiResponse({
status: 200,
description: 'API key retrieved successfully.',
type: ApiKeyListDto,
})
async getApiKey(
@AuthContext() authContext: OrganizationAuthContext,
@Param('name') name: string,
): Promise<ApiKeyListDto> {
const apiKey = await this.apiKeyService.getApiKeyByName(authContext.organizationId, authContext.userId, name)
return ApiKeyListDto.fromApiKey(apiKey)
}
@Delete(':name')
@ApiOperation({
summary: 'Delete API key',
operationId: 'deleteApiKey',
})
@ApiResponse({ status: 204, description: 'API key deleted successfully.' })
@HttpCode(204)
@Audit({
action: AuditAction.DELETE,
targetType: AuditTarget.API_KEY,
targetIdFromRequest: (req) => req.params.name,
})
async deleteApiKey(@AuthContext() authContext: OrganizationAuthContext, @Param('name') name: string) {
await this.apiKeyService.deleteApiKey(authContext.organizationId, authContext.userId, name)
}
@Delete(':userId/:name')
@ApiOperation({
summary: 'Delete API key for user',
operationId: 'deleteApiKeyForUser',
})
@ApiResponse({ status: 204, description: 'API key deleted successfully.' })
@HttpCode(204)
@Audit({
action: AuditAction.DELETE,
targetType: AuditTarget.API_KEY,
targetIdFromRequest: (req) => req.params.name,
requestMetadata: {
params: (req) => ({
userId: req.params.userId,
}),
},
})
async deleteApiKeyForUser(
@AuthContext() authContext: OrganizationAuthContext,
@Param('userId') userId: string,
@Param('name') name: string,
) {
if (
userId !== authContext.userId &&
authContext.role !== SystemRole.ADMIN &&
authContext.organizationUser?.role !== OrganizationMemberRole.OWNER
) {
throw new ForbiddenException('Incorrect user ID provided')
}
await this.apiKeyService.deleteApiKey(authContext.organizationId, userId, name)
}
private validateRequestedApiKeyPermissions(
authContext: OrganizationAuthContext,
requestedPermissions: OrganizationResourcePermission[],
): void {
if (authContext.role === SystemRole.ADMIN) {
return
}
if (!authContext.organizationUser) {
throw new ForbiddenException(`Insufficient permissions for assigning: ${requestedPermissions.join(', ')}`)
}
if (authContext.organizationUser.role === OrganizationMemberRole.OWNER) {
return
}
const organizationUserPermissions = new Set(
authContext.organizationUser.assignedRoles.flatMap((role) => role.permissions),
)
const forbiddenPermissions = requestedPermissions.filter(
(permission) => !organizationUserPermissions.has(permission),
)
if (forbiddenPermissions.length) {
throw new ForbiddenException(`Insufficient permissions for assigning: ${forbiddenPermissions.join(', ')}`)
}
}
}
================================================
FILE: apps/api/src/api-key/api-key.entity.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { Column, Entity, Index, PrimaryColumn } from 'typeorm'
import { OrganizationResourcePermission } from '../organization/enums/organization-resource-permission.enum'
@Entity()
@Index('api_key_org_user_idx', ['organizationId', 'userId'])
export class ApiKey {
@PrimaryColumn({
type: 'uuid',
})
organizationId: string
@PrimaryColumn()
userId: string
@PrimaryColumn()
name: string
@Column({ unique: true, default: '' })
keyHash: string
@Column({
default: '',
})
keyPrefix: string
@Column({
default: '',
})
keySuffix: string
@Column({
type: 'enum',
enum: OrganizationResourcePermission,
array: true,
})
permissions: OrganizationResourcePermission[]
@Column()
createdAt: Date
@Column({ nullable: true })
lastUsedAt?: Date
@Column({ nullable: true })
expiresAt?: Date
}
================================================
FILE: apps/api/src/api-key/api-key.module.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { Module } from '@nestjs/common'
import { ApiKeyController } from './api-key.controller'
import { ApiKeyService } from './api-key.service'
import { ApiKey } from './api-key.entity'
import { TypeOrmModule } from '@nestjs/typeorm'
import { OrganizationModule } from '../organization/organization.module'
import { RedisLockProvider } from '../sandbox/common/redis-lock.provider'
@Module({
imports: [OrganizationModule, TypeOrmModule.forFeature([ApiKey])],
controllers: [ApiKeyController],
providers: [ApiKeyService, RedisLockProvider],
exports: [ApiKeyService],
})
export class ApiKeyModule {}
================================================
FILE: apps/api/src/api-key/api-key.service.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { ConflictException, Injectable, Logger, NotFoundException } from '@nestjs/common'
import { InjectRepository } from '@nestjs/typeorm'
import { EntityManager, Repository, ArrayOverlap } from 'typeorm'
import { ApiKey } from './api-key.entity'
import { OrganizationResourcePermission } from '../organization/enums/organization-resource-permission.enum'
import { RedisLockProvider } from '../sandbox/common/redis-lock.provider'
import { OnAsyncEvent } from '../common/decorators/on-async-event.decorator'
import { OrganizationEvents } from '../organization/constants/organization-events.constant'
import { OrganizationResourcePermissionsUnassignedEvent } from '../organization/events/organization-resource-permissions-unassigned.event'
import { InjectRedis } from '@nestjs-modules/ioredis'
import Redis from 'ioredis'
import { generateApiKeyHash, generateApiKeyValue } from '../common/utils/api-key'
@Injectable()
export class ApiKeyService {
private readonly logger = new Logger(ApiKeyService.name)
constructor(
@InjectRepository(ApiKey)
private apiKeyRepository: Repository<ApiKey>,
private readonly redisLockProvider: RedisLockProvider,
@InjectRedis() private readonly redis: Redis,
) {}
private getApiKeyPrefix(value: string): string {
return value.substring(0, 3)
}
private getApiKeySuffix(value: string): string {
return value.slice(-3)
}
async createApiKey(
organizationId: string,
userId: string,
name: string,
permissions: OrganizationResourcePermission[],
expiresAt?: Date,
apiKeyValue?: string,
): Promise<{ apiKey: ApiKey; value: string }> {
const existingKey = await this.apiKeyRepository.findOne({ where: { organizationId, userId, name } })
if (existingKey) {
throw new ConflictException('API key with this name already exists')
}
const value = apiKeyValue || generateApiKeyValue()
const apiKey = await this.apiKeyRepository.save({
organizationId,
userId,
name,
keyHash: generateApiKeyHash(value),
keyPrefix: this.getApiKeyPrefix(value),
keySuffix: this.getApiKeySuffix(value),
permissions,
createdAt: new Date(),
expiresAt,
})
return { apiKey, value }
}
async getApiKeys(organizationId: string, userId?: string): Promise<ApiKey[]> {
const apiKeys = await this.apiKeyRepository.find({
where: { organizationId, userId },
order: {
lastUsedAt: {
direction: 'DESC',
nulls: 'LAST',
},
createdAt: 'DESC',
},
})
return apiKeys
}
async getApiKeyByName(organizationId: string, userId: string, name: string): Promise<ApiKey> {
const apiKey = await this.apiKeyRepository.findOne({
where: {
organizationId,
userId,
name,
},
})
if (!apiKey) {
throw new NotFoundException('API key not found')
}
return apiKey
}
async getApiKeyByValue(value: string): Promise<ApiKey> {
const apiKey = await this.apiKeyRepository.findOne({
where: {
keyHash: generateApiKeyHash(value),
},
})
if (!apiKey) {
throw new NotFoundException('API key not found')
}
return apiKey
}
async deleteApiKey(organizationId: string, userId: string, name: string): Promise<void> {
const apiKey = await this.apiKeyRepository.findOne({ where: { organizationId, userId, name } })
if (!apiKey) {
throw new NotFoundException('API key not found')
}
await this.deleteWithEntityManager(this.apiKeyRepository.manager, apiKey)
}
async updateLastUsedAt(organizationId: string, userId: string, name: string, lastUsedAt: Date): Promise<void> {
const cooldownKey = `api-key-last-used-update-${organizationId}-${userId}-${name}`
const aquired = await this.redisLockProvider.lock(cooldownKey, 10)
// redis for cooldown period - 10 seconds
// prevents database flooding when multiple requests are made at the same time
if (!aquired) {
return
}
await this.apiKeyRepository.update(
{
organizationId,
userId,
name,
},
{ lastUsedAt },
)
}
private async deleteWithEntityManager(entityManager: EntityManager, apiKey: ApiKey): Promise<void> {
await entityManager.remove(apiKey)
// Invalidate cache when API key is deleted
await this.invalidateApiKeyCache(apiKey.keyHash)
}
private async invalidateApiKeyCache(keyHash: string): Promise<void> {
try {
const cacheKey = `api-key:validation:${keyHash}`
await this.redis.del(cacheKey)
this.logger.debug(`Invalidated cache for API key: ${cacheKey}`)
} catch (error) {
this.logger.error('Error invalidating API key cache:', error)
}
}
@OnAsyncEvent({
event: OrganizationEvents.PERMISSIONS_UNASSIGNED,
})
async handleOrganizationResourcePermissionsUnassignedEvent(
payload: OrganizationResourcePermissionsUnassignedEvent,
): Promise<void> {
const apiKeysToRevoke = await this.apiKeyRepository.find({
where: {
organizationId: payload.organizationId,
userId: payload.userId,
permissions: ArrayOverlap(payload.unassignedPermissions),
},
})
await Promise.all(apiKeysToRevoke.map((apiKey) => this.deleteWithEntityManager(payload.entityManager, apiKey)))
}
}
================================================
FILE: apps/api/src/api-key/dto/api-key-list.dto.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { ApiProperty, ApiSchema } from '@nestjs/swagger'
import { OrganizationResourcePermission } from '../../organization/enums/organization-resource-permission.enum'
import { ApiKey } from '../api-key.entity'
@ApiSchema({ name: 'ApiKeyList' })
export class ApiKeyListDto {
@ApiProperty({
description: 'The name of the API key',
example: 'My API Key',
})
name: string
@ApiProperty({
description: 'The masked API key value',
example: 'bb_********************def',
})
value: string
@ApiProperty({
description: 'When the API key was created',
example: '2024-03-14T12:00:00.000Z',
})
createdAt: Date
@ApiProperty({
description: 'The list of organization resource permissions assigned to the API key',
enum: OrganizationResourcePermission,
isArray: true,
})
permissions: OrganizationResourcePermission[]
@ApiProperty({
description: 'When the API key was last used',
example: '2024-03-14T12:00:00.000Z',
nullable: true,
})
lastUsedAt?: Date
@ApiProperty({
description: 'When the API key expires',
example: '2024-03-14T12:00:00.000Z',
nullable: true,
})
expiresAt?: Date
@ApiProperty({
description: 'The user ID of the user who created the API key',
example: '123',
})
userId: string
constructor(partial: Partial<ApiKeyListDto>) {
Object.assign(this, partial)
}
static fromApiKey(apiKey: ApiKey): ApiKeyListDto {
const maskedValue = `${apiKey.keyPrefix}********************${apiKey.keySuffix}`
return new ApiKeyListDto({
name: apiKey.name,
value: maskedValue,
createdAt: apiKey.createdAt,
permissions: apiKey.permissions,
lastUsedAt: apiKey.lastUsedAt,
expiresAt: apiKey.expiresAt,
userId: apiKey.userId,
})
}
}
================================================
FILE: apps/api/src/api-key/dto/api-key-response.dto.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { ApiProperty, ApiSchema } from '@nestjs/swagger'
import { OrganizationResourcePermission } from '../../organization/enums/organization-resource-permission.enum'
import { ApiKey } from '../api-key.entity'
@ApiSchema({ name: 'ApiKeyResponse' })
export class ApiKeyResponseDto {
@ApiProperty({
description: 'The name of the API key',
example: 'My API Key',
})
name: string
@ApiProperty({
description: 'The API key value',
example: 'bb_sk_1234567890abcdef',
})
value: string
@ApiProperty({
description: 'When the API key was created',
example: '2024-03-14T12:00:00.000Z',
})
createdAt: Date
@ApiProperty({
description: 'The list of organization resource permissions assigned to the API key',
enum: OrganizationResourcePermission,
isArray: true,
})
permissions: OrganizationResourcePermission[]
@ApiProperty({
description: 'When the API key expires',
example: '2025-06-09T12:00:00.000Z',
nullable: true,
})
expiresAt?: Date
static fromApiKey(apiKey: ApiKey, value: string): ApiKeyResponseDto {
return {
name: apiKey.name,
value,
createdAt: apiKey.createdAt,
permissions: apiKey.permissions,
expiresAt: apiKey.expiresAt,
}
}
}
================================================
FILE: apps/api/src/api-key/dto/create-api-key.dto.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { IsArray, IsDate, IsEnum, IsNotEmpty, IsOptional, IsString } from 'class-validator'
import { ApiProperty, ApiPropertyOptional, ApiSchema } from '@nestjs/swagger'
import { OrganizationResourcePermission } from '../../organization/enums/organization-resource-permission.enum'
import { Type } from 'class-transformer'
@ApiSchema({ name: 'CreateApiKey' })
export class CreateApiKeyDto {
@ApiProperty({
description: 'The name of the API key',
example: 'My API Key',
required: true,
})
@IsNotEmpty()
@IsString()
name: string
@ApiProperty({
description: 'The list of organization resource permissions explicitly assigned to the API key',
enum: OrganizationResourcePermission,
isArray: true,
required: true,
})
@IsArray()
@IsEnum(OrganizationResourcePermission, { each: true })
permissions: OrganizationResourcePermission[]
@ApiPropertyOptional({
description: 'When the API key expires',
example: '2025-06-09T12:00:00.000Z',
nullable: true,
})
@IsOptional()
@Type(() => Date)
@IsDate()
expiresAt?: Date
}
================================================
FILE: apps/api/src/app.module.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { Module, NestModule, MiddlewareConsumer, RequestMethod, ExecutionContext } from '@nestjs/common'
import { VersionHeaderMiddleware } from './common/middleware/version-header.middleware'
import { FailedAuthRateLimitMiddleware } from './common/middleware/failed-auth-rate-limit.middleware'
import { AppService } from './app.service'
import { UserModule } from './user/user.module'
import { TypeOrmModule } from '@nestjs/typeorm'
import { SandboxModule } from './sandbox/sandbox.module'
import { AuthModule } from './auth/auth.module'
import { ServeStaticModule } from '@nestjs/serve-static'
import { join } from 'path'
import { ApiKeyModule } from './api-key/api-key.module'
import { seconds, ThrottlerModule } from '@nestjs/throttler'
import { DockerRegistryModule } from './docker-registry/docker-registry.module'
import { RedisModule, getRedisConnectionToken } from '@nestjs-modules/ioredis'
import { ScheduleModule } from '@nestjs/schedule'
import { EventEmitterModule } from '@nestjs/event-emitter'
import { UsageModule } from './usage/usage.module'
import { AnalyticsModule } from './analytics/analytics.module'
import { OrganizationModule } from './organization/organization.module'
import { EmailModule } from './email/email.module'
import { TypedConfigService } from './config/typed-config.service'
import { TypedConfigModule } from './config/typed-config.module'
import { NotificationModule } from './notification/notification.module'
import { WebhookModule } from './webhook/webhook.module'
import { ObjectStorageModule } from './object-storage/object-storage.module'
import { CustomNamingStrategy } from './common/utils/naming-strategy.util'
import { MaintenanceMiddleware } from './common/middleware/maintenance.middleware'
import { AuditModule } from './audit/audit.module'
import { HealthModule } from './health/health.module'
import { OpenFeatureModule } from '@openfeature/nestjs-sdk'
import { OpenFeaturePostHogProvider } from './common/providers/openfeature-posthog.provider'
import { LoggerModule } from 'nestjs-pino'
import { getPinoTransport, swapMessageAndObject } from './common/utils/pino.util'
import { Redis } from 'ioredis'
import { ThrottlerStorageRedisService } from '@nest-lab/throttler-storage-redis'
import { RegionModule } from './region/region.module'
import { BodyParserErrorModule } from './common/modules/body-parser-error.module'
import { AdminModule } from './admin/admin.module'
import { ClickHouseModule } from './clickhouse/clickhouse.module'
import { SandboxTelemetryModule } from './sandbox-telemetry/sandbox-telemetry.module'
@Module({
imports: [
LoggerModule.forRootAsync({
useFactory: (configService: TypedConfigService) => {
const logConfig = configService.get('log')
const isProduction = configService.get('production')
return {
pinoHttp: {
autoLogging: logConfig.requests.enabled,
level: logConfig.level,
hooks: {
logMethod: swapMessageAndObject,
},
quietReqLogger: true,
transport: getPinoTransport(isProduction, logConfig),
},
}
},
inject: [TypedConfigService],
}),
TypedConfigModule.forRoot({
isGlobal: true,
}),
TypeOrmModule.forRootAsync({
inject: [TypedConfigService],
useFactory: (configService: TypedConfigService) => {
return {
type: 'postgres',
host: configService.getOrThrow('database.host'),
port: configService.getOrThrow('database.port'),
username: configService.getOrThrow('database.username'),
password: configService.getOrThrow('database.password'),
database: configService.getOrThrow('database.database'),
autoLoadEntities: true,
migrations: [join(__dirname, 'migrations/**/*-migration.{ts,js}')],
migrationsRun: configService.get('runMigrations') || !configService.getOrThrow('production'),
namingStrategy: new CustomNamingStrategy(),
manualInitialization: configService.get('skipConnections'),
ssl: configService.get('database.tls.enabled')
? {
rejectUnauthorized: configService.get('database.tls.rejectUnauthorized'),
}
: undefined,
extra: {
max: configService.get('database.pool.max'),
min: configService.get('database.pool.min'),
idleTimeoutMillis: configService.get('database.pool.idleTimeoutMillis'),
connectionTimeoutMillis: configService.get('database.pool.connectionTimeoutMillis'),
},
cache: {
type: 'ioredis',
ignoreErrors: true,
options: configService.getRedisConfig({ keyPrefix: 'typeorm:' }),
},
entitySkipConstructor: true,
}
},
}),
BodyParserErrorModule,
ServeStaticModule.forRoot({
rootPath: join(__dirname, '..'),
exclude: ['/api/{*path}'],
renderPath: '/runner-amd64',
serveStaticOptions: {
cacheControl: false,
},
}),
ServeStaticModule.forRoot({
rootPath: join(__dirname, '..', 'dashboard'),
exclude: ['/api/{*path}'],
renderPath: '/',
serveStaticOptions: {
cacheControl: false,
},
}),
RedisModule.forRootAsync({
inject: [TypedConfigService],
useFactory: (configService: TypedConfigService) => ({
type: 'single',
options: configService.getRedisConfig(),
}),
}),
RedisModule.forRootAsync(
{
inject: [TypedConfigService],
useFactory: (configService: TypedConfigService) => ({
type: 'single',
options: configService.getRedisConfig({ db: 1 }),
}),
},
'throttler',
),
ThrottlerModule.forRootAsync({
useFactory: async (redis: Redis, configService: TypedConfigService) => {
const rateLimit = configService.get('rateLimit')
const throttlers = [
{ name: 'anonymous', config: rateLimit.anonymous },
{ name: 'failed-auth', config: rateLimit.failedAuth },
{ name: 'authenticated', config: rateLimit.authenticated },
{ name: 'sandbox-create', config: rateLimit.sandboxCreate },
{ name: 'sandbox-lifecycle', config: rateLimit.sandboxLifecycle },
]
.filter(({ config }) => config.ttl !== undefined && config.limit !== undefined)
.map(({ name, config }) => ({
name,
ttl: seconds(config.ttl),
limit: config.limit,
}))
return {
throttlers,
storage: new ThrottlerStorageRedisService(redis),
}
},
inject: [getRedisConnectionToken('throttler'), TypedConfigService],
}),
EventEmitterModule.forRoot({
maxListeners: 100,
}),
ApiKeyModule,
AuthModule,
UserModule,
SandboxModule,
DockerRegistryModule,
ScheduleModule.forRoot(),
UsageModule,
AnalyticsModule,
OrganizationModule,
RegionModule,
AdminModule,
EmailModule.forRootAsync({
inject: [TypedConfigService],
useFactory: (configService: TypedConfigService) => {
return {
host: configService.get('smtp.host'),
port: configService.get('smtp.port'),
user: configService.get('smtp.user'),
password: configService.get('smtp.password'),
secure: configService.get('smtp.secure'),
from: configService.get('smtp.from'),
dashboardUrl: configService.getOrThrow('dashboardUrl'),
}
},
}),
NotificationModule,
WebhookModule,
ObjectStorageModule,
AuditModule,
HealthModule,
ClickHouseModule,
SandboxTelemetryModule,
OpenFeatureModule.forRoot({
contextFactory: (request: ExecutionContext) => {
const req = request.switchToHttp().getRequest()
return {
targetingKey: req.user?.userId,
organizationId: req.user?.organizationId,
}
},
defaultProvider: new OpenFeaturePostHogProvider({
clientOptions: {
host: process.env.POSTHOG_HOST,
},
apiKey: process.env.POSTHOG_API_KEY,
}),
}),
],
controllers: [],
providers: [AppService],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(VersionHeaderMiddleware).forRoutes({ path: '{*path}', method: RequestMethod.ALL })
consumer.apply(FailedAuthRateLimitMiddleware).forRoutes({ path: '{*path}', method: RequestMethod.ALL })
consumer.apply(MaintenanceMiddleware).forRoutes({ path: '{*path}', method: RequestMethod.ALL })
}
}
================================================
FILE: apps/api/src/app.service.ts
================================================
/*
* Copyright 2025 Daytona Platforms Inc.
* SPDX-License-Identifier: AGPL-3.0
*/
import { Injectable, Logger, OnApplicationBootstrap, OnApplicationShutdown } from '@nestjs/common'
import { DockerRegistryService } from './docker-registry/services/docker-registry.service'
import { RegistryType } from './docker-registry/enums/registry-type.enum'
import { OrganizationService } from './organization/services/organization.service'
import { UserService } from './user/user.service'
import { ApiKeyService } from './api-key/api-key.service'
import { EventEmitterReadinessWatcher } from '@nestjs/event-emitter'
import { SnapshotService } from './sandbox/services/snapshot.service'
import { SystemRole } from './user/enums/system-role.enum'
import { TypedConfigService } from './config/typed-config.service'
import { SchedulerRegistry } from '@nestjs/schedule'
import { RegionService } from './region/services/region.service'
import { RunnerService } from './sandbox/services/runner.service'
import { RunnerAdapterFactory } from './sandbox/runner-adapter/runnerAdapter'
import { RegionType } from './region/enums/region-type.enum'
import { RunnerState } from './sandbox/enums/runner-state.enum'
export const DAYTONA_ADMIN_USER_ID = 'daytona-admin'
@Injectable()
export class AppService implements OnApplicationBootstrap, OnApplicationShutdown {
private readonly logger = new Logger(AppService.name)
constructor(
private readonly dockerRegistryService: DockerRegistryService,
private readonly configService: TypedConfigService,
private readonly userService: UserService,
private readonly organizationService: OrganizationService,
private readonly apiKeyService: ApiKeyService,
private readonly eventEmitterReadinessWatcher: EventEmitterReadinessWatcher,
private readonly snapshotService: SnapshotService,
private readonly schedulerRegistry: SchedulerRegistry,
private readonly regionService: RegionService,
private readonly runnerService: RunnerService,
private readonly runnerAdapterFactory: RunnerAdapterFactory,
) {}
async onApplicationShutdown(signal?: string) {
this.logger.log(`Received shutdown signal: ${signal}. Shutting down gracefully...`)
await this.stopAllCronJobs()
}
async onApplicationBootstrap() {
if (this.configService.get('disableCronJobs') || this.configService.get('maintananceMode')) {
await this.stopAllCronJobs()
}
await this.eventEmitterReadinessWatcher.waitUntilReady()
await this.initializeDefaultRegion()
await this.initializeAdminUser()
await this.initializeTransientRegistry()
await this.initializeBackupRegistry()
await this.initializeInternalRegistry()
await this.initializeBackupRegistry()
// Default runner init is not awaited because v2 runners depend on the API to be ready
this.initializeDefaultRunner()
.then(() => this.initializeDefaultSnapshot())
.catch((error) => {
this.logger.error('Error initi
gitextract_07rnwxyw/ ├── .devcontainer/ │ ├── Dockerfile │ ├── buildkitd.toml │ ├── devcontainer.build.json │ ├── devcontainer.json │ ├── dex/ │ │ └── config.yaml │ ├── docker-compose.yaml │ ├── otel/ │ │ └── otel-collector-config.yaml │ ├── pgadmin4/ │ │ ├── pgpass │ │ └── servers.json │ └── tools-feature/ │ ├── devcontainer-feature.json │ └── install.sh ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── actions/ │ │ └── setup-toolchain/ │ │ └── action.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── build_devcontainer.yaml │ ├── default_image_publish.yaml │ ├── pr_checks.yaml │ ├── prepare-release.yaml │ ├── release.yaml │ ├── sdk_publish.yaml │ └── translate.yaml ├── .gitignore ├── .golangci.yaml ├── .husky/ │ ├── .gitignore │ └── pre-commit ├── .licenserc-clients.yaml ├── .licenserc.yaml ├── .markdownlint-cli2.jsonc ├── .npmrc ├── .nxignore ├── .prettierignore ├── .prettierrc ├── .rubocop.yml ├── .verdaccio/ │ └── config.yml ├── .vscode/ │ ├── launch.json │ ├── settings.json │ └── tasks.json ├── .yarnrc.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── COPYRIGHT ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── NOTICE ├── PACKAGING.md ├── PREPARING_YOUR_CHANGES.md ├── PUBLISHING.md ├── README.md ├── SECURITY.md ├── apps/ │ ├── api/ │ │ ├── Dockerfile │ │ ├── eslint.config.mjs │ │ ├── jest.config.ts │ │ ├── project.json │ │ ├── scripts/ │ │ │ └── validate-migration-paths.sh │ │ ├── src/ │ │ │ ├── admin/ │ │ │ │ ├── admin.module.ts │ │ │ │ ├── controllers/ │ │ │ │ │ ├── runner.controller.ts │ │ │ │ │ └── sandbox.controller.ts │ │ │ │ └── dto/ │ │ │ │ └── create-runner.dto.ts │ │ │ ├── analytics/ │ │ │ │ ├── analytics.module.ts │ │ │ │ └── services/ │ │ │ │ └── analytics.service.ts │ │ │ ├── api-key/ │ │ │ │ ├── api-key.controller.ts │ │ │ │ ├── api-key.entity.ts │ │ │ │ ├── api-key.module.ts │ │ │ │ ├── api-key.service.ts │ │ │ │ └── dto/ │ │ │ │ ├── api-key-list.dto.ts │ │ │ │ ├── api-key-response.dto.ts │ │ │ │ └── create-api-key.dto.ts │ │ │ ├── app.module.ts │ │ │ ├── app.service.ts │ │ │ ├── assets/ │ │ │ │ ├── .gitkeep │ │ │ │ └── templates/ │ │ │ │ └── organization-invitation.template.ejs │ │ │ ├── audit/ │ │ │ │ ├── adapters/ │ │ │ │ │ ├── audit-opensearch.adapter.ts │ │ │ │ │ └── audit-typeorm.adapter.ts │ │ │ │ ├── audit.module.ts │ │ │ │ ├── constants/ │ │ │ │ │ ├── audit-log-events.constant.ts │ │ │ │ │ └── audit-tokens.ts │ │ │ │ ├── controllers/ │ │ │ │ │ └── audit.controller.ts │ │ │ │ ├── decorators/ │ │ │ │ │ └── audit.decorator.ts │ │ │ │ ├── dto/ │ │ │ │ │ ├── audit-log.dto.ts │ │ │ │ │ ├── create-audit-log-internal.dto.ts │ │ │ │ │ ├── create-audit-log.dto.ts │ │ │ │ │ ├── list-audit-logs-query.dto.ts │ │ │ │ │ ├── paginated-audit-logs.dto.ts │ │ │ │ │ └── update-audit-log-internal.dto.ts │ │ │ │ ├── entities/ │ │ │ │ │ └── audit-log.entity.ts │ │ │ │ ├── enums/ │ │ │ │ │ ├── audit-action.enum.ts │ │ │ │ │ └── audit-target.enum.ts │ │ │ │ ├── events/ │ │ │ │ │ ├── audit-log-created.event.ts │ │ │ │ │ └── audit-log-updated.event.ts │ │ │ │ ├── interceptors/ │ │ │ │ │ └── audit.interceptor.ts │ │ │ │ ├── interfaces/ │ │ │ │ │ ├── audit-filter.interface.ts │ │ │ │ │ ├── audit-publisher.interface.ts │ │ │ │ │ └── audit-storage.interface.ts │ │ │ │ ├── providers/ │ │ │ │ │ ├── audit-publisher.provider.ts │ │ │ │ │ └── audit-storage.provider.ts │ │ │ │ ├── publishers/ │ │ │ │ │ ├── audit-direct-publisher.ts │ │ │ │ │ └── kafka/ │ │ │ │ │ ├── audit-kafka-consumer.controller.ts │ │ │ │ │ └── audit-kafka-publisher.ts │ │ │ │ ├── services/ │ │ │ │ │ └── audit.service.ts │ │ │ │ └── subscribers/ │ │ │ │ └── audit-log.subscriber.ts │ │ │ ├── auth/ │ │ │ │ ├── api-key.strategy.ts │ │ │ │ ├── auth.module.ts │ │ │ │ ├── combined-auth.guard.ts │ │ │ │ ├── constants/ │ │ │ │ │ └── jwt-regex.constant.ts │ │ │ │ ├── failed-auth-tracker.service.ts │ │ │ │ ├── get-auth-context.ts │ │ │ │ ├── health-check.guard.ts │ │ │ │ ├── jwt.strategy.ts │ │ │ │ ├── or.guard.ts │ │ │ │ ├── otel-collector.guard.ts │ │ │ │ ├── runner-auth.guard.ts │ │ │ │ └── system-action.guard.ts │ │ │ ├── clickhouse/ │ │ │ │ ├── clickhouse.module.ts │ │ │ │ ├── clickhouse.service.ts │ │ │ │ └── index.ts │ │ │ ├── common/ │ │ │ │ ├── constants/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── error-messages.ts │ │ │ │ │ ├── feature-flags.ts │ │ │ │ │ └── header.constants.ts │ │ │ │ ├── decorators/ │ │ │ │ │ ├── auth-context.decorator.ts │ │ │ │ │ ├── autocommit-offset.decorator.ts │ │ │ │ │ ├── distributed-lock.decorator.ts │ │ │ │ │ ├── log-execution.decorator.ts │ │ │ │ │ ├── on-async-event.decorator.ts │ │ │ │ │ ├── otel.decorator.ts │ │ │ │ │ ├── page-limit.decorator.ts │ │ │ │ │ ├── page-number.decorator.ts │ │ │ │ │ ├── required-role.decorator.ts │ │ │ │ │ ├── runner-context.decorator.ts │ │ │ │ │ ├── throttler-scope.decorator.ts │ │ │ │ │ ├── to-array.decorator.ts │ │ │ │ │ └── track-job-execution.decorator.ts │ │ │ │ ├── dto/ │ │ │ │ │ └── url.dto.ts │ │ │ │ ├── guards/ │ │ │ │ │ ├── anonymous-rate-limit.guard.ts │ │ │ │ │ └── authenticated-rate-limit.guard.ts │ │ │ │ ├── interceptors/ │ │ │ │ │ └── content-type.interceptors.ts │ │ │ │ ├── interfaces/ │ │ │ │ │ ├── auth-context.interface.ts │ │ │ │ │ ├── health-check-context.interface.ts │ │ │ │ │ ├── otel-collector-context.interface.ts │ │ │ │ │ ├── otel-config.interface.ts │ │ │ │ │ ├── paginated-list.interface.ts │ │ │ │ │ ├── proxy-context.interface.ts │ │ │ │ │ ├── region-proxy.interface.ts │ │ │ │ │ ├── region-ssh-gateway.interface.ts │ │ │ │ │ ├── runner-context.interface.ts │ │ │ │ │ ├── ssh-gateway-context.interface.ts │ │ │ │ │ └── trackable-job-executions.ts │ │ │ │ ├── middleware/ │ │ │ │ │ ├── failed-auth-rate-limit.middleware.ts │ │ │ │ │ ├── maintenance.middleware.ts │ │ │ │ │ └── version-header.middleware.ts │ │ │ │ ├── modules/ │ │ │ │ │ └── body-parser-error.module.ts │ │ │ │ ├── providers/ │ │ │ │ │ └── openfeature-posthog.provider.ts │ │ │ │ ├── repositories/ │ │ │ │ │ └── base.repository.ts │ │ │ │ └── utils/ │ │ │ │ ├── api-key.ts │ │ │ │ ├── app-mode.ts │ │ │ │ ├── delete-s3-bucket.ts │ │ │ │ ├── docker-image.util.ts │ │ │ │ ├── email.util.ts │ │ │ │ ├── from-axios-error.ts │ │ │ │ ├── naming-strategy.util.ts │ │ │ │ ├── pino.util.ts │ │ │ │ ├── range-filter.ts │ │ │ │ ├── rate-limit-headers.util.ts │ │ │ │ └── uuid.ts │ │ │ ├── config/ │ │ │ │ ├── config.controller.ts │ │ │ │ ├── configuration.ts │ │ │ │ ├── dto/ │ │ │ │ │ └── configuration.dto.ts │ │ │ │ ├── typed-config.module.ts │ │ │ │ └── typed-config.service.ts │ │ │ ├── docker-registry/ │ │ │ │ ├── controllers/ │ │ │ │ │ └── docker-registry.controller.ts │ │ │ │ ├── decorators/ │ │ │ │ │ └── docker-registry.decorator.ts │ │ │ │ ├── docker-registry.module.ts │ │ │ │ ├── dto/ │ │ │ │ │ ├── create-docker-registry-internal.dto.ts │ │ │ │ │ ├── create-docker-registry.dto.ts │ │ │ │ │ ├── docker-registry.dto.ts │ │ │ │ │ └── update-docker-registry.dto.ts │ │ │ │ ├── entities/ │ │ │ │ │ └── docker-registry.entity.ts │ │ │ │ ├── enums/ │ │ │ │ │ └── registry-type.enum.ts │ │ │ │ ├── guards/ │ │ │ │ │ └── docker-registry-access.guard.ts │ │ │ │ ├── providers/ │ │ │ │ │ ├── docker-registry.provider.interface.ts │ │ │ │ │ ├── docker-registry.provider.ts │ │ │ │ │ └── mock-docker-registry.provider.ts │ │ │ │ └── services/ │ │ │ │ └── docker-registry.service.ts │ │ │ ├── email/ │ │ │ │ ├── constants.ts │ │ │ │ ├── email.module.ts │ │ │ │ └── services/ │ │ │ │ └── email.service.ts │ │ │ ├── encryption/ │ │ │ │ ├── encryption.module.ts │ │ │ │ └── encryption.service.ts │ │ │ ├── exceptions/ │ │ │ │ ├── bad-request.exception.ts │ │ │ │ ├── forbidden-operation.exception.ts │ │ │ │ ├── not-found.exception.ts │ │ │ │ └── sandbox-error.exception.ts │ │ │ ├── filters/ │ │ │ │ ├── all-exceptions.filter.ts │ │ │ │ └── kafka-exception.filter.ts │ │ │ ├── generate-openapi.ts │ │ │ ├── health/ │ │ │ │ ├── health.controller.ts │ │ │ │ ├── health.module.ts │ │ │ │ └── redis.health.ts │ │ │ ├── interceptors/ │ │ │ │ └── metrics.interceptor.ts │ │ │ ├── main.ts │ │ │ ├── migrations/ │ │ │ │ ├── 1741087887225-migration.ts │ │ │ │ ├── 1741088165704-migration.ts │ │ │ │ ├── 1741088883000-migration.ts │ │ │ │ ├── 1741088883001-migration.ts │ │ │ │ ├── 1741088883002-migration.ts │ │ │ │ ├── 1741877019888-migration.ts │ │ │ │ ├── 1742215525714-migration.ts │ │ │ │ ├── 1742475055353-migration.ts │ │ │ │ ├── 1742831092942-migration.ts │ │ │ │ ├── 1743593463168-migration.ts │ │ │ │ ├── 1743683015304-migration.ts │ │ │ │ ├── 1744028841133-migration.ts │ │ │ │ ├── 1744114341077-migration.ts │ │ │ │ ├── 1744378115901-migration.ts │ │ │ │ ├── 1744808444807-migration.ts │ │ │ │ ├── 1744868914148-migration.ts │ │ │ │ ├── 1744971114480-migration.ts │ │ │ │ ├── 1745393243334-migration.ts │ │ │ │ ├── 1745494761360-migration.ts │ │ │ │ ├── 1745574377029-migration.ts │ │ │ │ ├── 1745840296260-migration.ts │ │ │ │ ├── 1745864972652-migration.ts │ │ │ │ ├── 1746354231722-migration.ts │ │ │ │ ├── 1746604150910-migration.ts │ │ │ │ ├── 1747658203010-migration.ts │ │ │ │ ├── 1748006546552-migration.ts │ │ │ │ ├── 1748866194353-migration.ts │ │ │ │ ├── 1749474791343-migration.ts │ │ │ │ ├── 1749474791344-migration.ts │ │ │ │ ├── 1749474791345-migration.ts │ │ │ │ ├── 1750077343089-migration.ts │ │ │ │ ├── 1750436374899-migration.ts │ │ │ │ ├── 1750668569562-migration.ts │ │ │ │ ├── 1750751712412-migration.ts │ │ │ │ ├── 1751456907334-migration.ts │ │ │ │ ├── 1752494676200-migration.ts │ │ │ │ ├── 1752494676205-migration.ts │ │ │ │ ├── 1752848014862-migration.ts │ │ │ │ ├── 1753099115783-migration.ts │ │ │ │ ├── 1753100751730-migration.ts │ │ │ │ ├── 1753100751731-migration.ts │ │ │ │ ├── 1753185133351-migration.ts │ │ │ │ ├── 1753274135567-migration.ts │ │ │ │ ├── 1753430929609-migration.ts │ │ │ │ ├── 1753717830378-migration.ts │ │ │ │ ├── 1754042247109-migration.ts │ │ │ │ ├── 1755003696741-migration.ts │ │ │ │ ├── 1755356869493-migration.ts │ │ │ │ ├── 1755464957487-migration.ts │ │ │ │ ├── 1755521645207-migration.ts │ │ │ │ ├── 1755860619921-migration.ts │ │ │ │ ├── 1757513754037-migration.ts │ │ │ │ ├── 1757513754038-migration.ts │ │ │ │ ├── 1759241690773-migration.ts │ │ │ │ ├── 1759768058397-migration.ts │ │ │ │ ├── 1761912147638-migration.ts │ │ │ │ ├── 1761912147639-migration.ts │ │ │ │ ├── 1763561822000-migration.ts │ │ │ │ ├── 1764073472179-migration.ts │ │ │ │ ├── 1764073472180-migration.ts │ │ │ │ ├── 1764844895057-migration.ts │ │ │ │ ├── 1764844895058-migration.ts │ │ │ │ ├── 1765282546000-migration.ts │ │ │ │ ├── 1765366773736-migration.ts │ │ │ │ ├── 1765400000000-migration.ts │ │ │ │ ├── 1765806205881-migration.ts │ │ │ │ ├── 1766415256696-migration.ts │ │ │ │ ├── 1767830400000-migration.ts │ │ │ │ ├── 1768306129179-migration.ts │ │ │ │ ├── 1768461678804-migration.ts │ │ │ │ ├── 1768475454675-migration.ts │ │ │ │ ├── 1768485728153-migration.ts │ │ │ │ ├── 1768583941244-migration.ts │ │ │ │ ├── 1769516172576-migration.ts │ │ │ │ ├── 1769516172577-migration.ts │ │ │ │ ├── 1770043707083-migration.ts │ │ │ │ ├── 1770212429837-migration.ts │ │ │ │ ├── 1770823569571-migration.ts │ │ │ │ ├── 1770880371265-migration.ts │ │ │ │ ├── README.md │ │ │ │ ├── data-source.ts │ │ │ │ ├── post-deploy/ │ │ │ │ │ └── data-source.ts │ │ │ │ └── pre-deploy/ │ │ │ │ ├── 1770900000000-migration.ts │ │ │ │ ├── 1773744656413-migration.ts │ │ │ │ ├── 1773916204375-migration.ts │ │ │ │ └── data-source.ts │ │ │ ├── notification/ │ │ │ │ ├── emitters/ │ │ │ │ │ └── notification-redis.emitter.ts │ │ │ │ ├── gateways/ │ │ │ │ │ ├── notification-emitter.abstract.ts │ │ │ │ │ └── notification.gateway.ts │ │ │ │ ├── notification.module.ts │ │ │ │ └── services/ │ │ │ │ └── notification.service.ts │ │ │ ├── object-storage/ │ │ │ │ ├── controllers/ │ │ │ │ │ └── object-storage.controller.ts │ │ │ │ ├── object-storage.module.ts │ │ │ │ └── services/ │ │ │ │ └── object-storage.service.ts │ │ │ ├── openapi-webhooks.ts │ │ │ ├── openapi.config.ts │ │ │ ├── organization/ │ │ │ │ ├── constants/ │ │ │ │ │ ├── global-organization-roles.constant.ts │ │ │ │ │ ├── organization-events.constant.ts │ │ │ │ │ ├── sandbox-states-consuming-compute.constant.ts │ │ │ │ │ ├── sandbox-states-consuming-disk.constant.ts │ │ │ │ │ ├── snapshot-states-consuming-resources.constant.ts │ │ │ │ │ └── volume-states-consuming-resources.constant.ts │ │ │ │ ├── controllers/ │ │ │ │ │ ├── organization-invitation.controller.ts │ │ │ │ │ ├── organization-region.controller.ts │ │ │ │ │ ├── organization-role.controller.ts │ │ │ │ │ ├── organization-user.controller.ts │ │ │ │ │ └── organization.controller.ts │ │ │ │ ├── decorators/ │ │ │ │ │ ├── required-organization-member-role.decorator.ts │ │ │ │ │ └── required-organization-resource-permissions.decorator.ts │ │ │ │ ├── dto/ │ │ │ │ │ ├── create-organization-invitation.dto.ts │ │ │ │ │ ├── create-organization-quota.dto.ts │ │ │ │ │ ├── create-organization-role.dto.ts │ │ │ │ │ ├── create-organization.dto.ts │ │ │ │ │ ├── create-organization.internal.dto.ts │ │ │ │ │ ├── organization-invitation.dto.ts │ │ │ │ │ ├── organization-role.dto.ts │ │ │ │ │ ├── organization-sandbox-default-limited-network-egress.dto.ts │ │ │ │ │ ├── organization-suspension.dto.ts │ │ │ │ │ ├── organization-usage-overview.dto.ts │ │ │ │ │ ├── organization-user.dto.ts │ │ │ │ │ ├── organization.dto.ts │ │ │ │ │ ├── otel-config.dto.ts │ │ │ │ │ ├── region-quota.dto.ts │ │ │ │ │ ├── sandbox-usage-overview-internal.dto.ts │ │ │ │ │ ├── snapshot-usage-overview-internal.dto.ts │ │ │ │ │ ├── update-organization-default-region.dto.ts │ │ │ │ │ ├── update-organization-invitation.dto.ts │ │ │ │ │ ├── update-organization-member-access.dto.ts │ │ │ │ │ ├── update-organization-quota.dto.ts │ │ │ │ │ ├── update-organization-region-quota.dto.ts │ │ │ │ │ ├── update-organization-role.dto.ts │ │ │ │ │ └── volume-usage-overview-internal.dto.ts │ │ │ │ ├── entities/ │ │ │ │ │ ├── organization-invitation.entity.ts │ │ │ │ │ ├── organization-role.entity.ts │ │ │ │ │ ├── organization-user.entity.ts │ │ │ │ │ ├── organization.entity.ts │ │ │ │ │ └── region-quota.entity.ts │ │ │ │ ├── enums/ │ │ │ │ │ ├── organization-invitation-status.enum.ts │ │ │ │ │ ├── organization-member-role.enum.ts │ │ │ │ │ └── organization-resource-permission.enum.ts │ │ │ │ ├── events/ │ │ │ │ │ ├── organization-invitation-accepted.event.ts │ │ │ │ │ ├── organization-invitation-created.event.ts │ │ │ │ │ ├── organization-resource-permissions-unassigned.event.ts │ │ │ │ │ ├── organization-suspended-sandbox-stopped.event.ts │ │ │ │ │ └── organization-suspended-snapshot-deactivated.event.ts │ │ │ │ ├── exceptions/ │ │ │ │ │ └── DefaultRegionRequiredException.ts │ │ │ │ ├── guards/ │ │ │ │ │ ├── organization-access.guard.ts │ │ │ │ │ ├── organization-action.guard.ts │ │ │ │ │ └── organization-resource-action.guard.ts │ │ │ │ ├── helpers/ │ │ │ │ │ └── organization-usage.helper.ts │ │ │ │ ├── organization.module.ts │ │ │ │ └── services/ │ │ │ │ ├── organization-invitation.service.ts │ │ │ │ ├── organization-role.service.ts │ │ │ │ ├── organization-usage.service.ts │ │ │ │ ├── organization-user.service.ts │ │ │ │ └── organization.service.ts │ │ │ ├── region/ │ │ │ │ ├── constants/ │ │ │ │ │ ├── region-events.constant.ts │ │ │ │ │ └── region-name-regex.constant.ts │ │ │ │ ├── controllers/ │ │ │ │ │ └── region.controller.ts │ │ │ │ ├── dto/ │ │ │ │ │ ├── create-region-internal.dto.ts │ │ │ │ │ ├── create-region.dto.ts │ │ │ │ │ ├── create-region.internal.dto.ts │ │ │ │ │ ├── regenerate-api-key.dto.ts │ │ │ │ │ ├── region.dto.ts │ │ │ │ │ ├── snapshot-manager-credentials.dto.ts │ │ │ │ │ └── update-region.dto.ts │ │ │ │ ├── entities/ │ │ │ │ │ └── region.entity.ts │ │ │ │ ├── enums/ │ │ │ │ │ └── region-type.enum.ts │ │ │ │ ├── events/ │ │ │ │ │ ├── region-created.event.ts │ │ │ │ │ ├── region-deleted.event.ts │ │ │ │ │ └── region-snapshot-manager-creds.event.ts │ │ │ │ ├── guards/ │ │ │ │ │ └── region-access.guard.ts │ │ │ │ ├── region.module.ts │ │ │ │ └── services/ │ │ │ │ └── region.service.ts │ │ │ ├── sandbox/ │ │ │ │ ├── common/ │ │ │ │ │ ├── redis-lock.provider.ts │ │ │ │ │ └── runner-service-info.ts │ │ │ │ ├── constants/ │ │ │ │ │ ├── errors-for-recovery.ts │ │ │ │ │ ├── runner-events.ts │ │ │ │ │ ├── runner-name-regex.constant.ts │ │ │ │ │ ├── sandbox-events.constants.ts │ │ │ │ │ ├── sandbox.constants.ts │ │ │ │ │ ├── snapshot-events.ts │ │ │ │ │ ├── volume-events.ts │ │ │ │ │ └── warmpool-events.constants.ts │ │ │ │ ├── controllers/ │ │ │ │ │ ├── job.controller.ts │ │ │ │ │ ├── preview.controller.ts │ │ │ │ │ ├── runner.controller.ts │ │ │ │ │ ├── sandbox.controller.ts │ │ │ │ │ ├── snapshot.controller.ts │ │ │ │ │ ├── toolbox.deprecated.controller.ts │ │ │ │ │ ├── volume.controller.ts │ │ │ │ │ └── workspace.deprecated.controller.ts │ │ │ │ ├── dto/ │ │ │ │ │ ├── build-info.dto.ts │ │ │ │ │ ├── create-build-info.dto.ts │ │ │ │ │ ├── create-runner-internal.dto.ts │ │ │ │ │ ├── create-runner-response.dto.ts │ │ │ │ │ ├── create-runner.dto.ts │ │ │ │ │ ├── create-sandbox.dto.ts │ │ │ │ │ ├── create-snapshot.dto.ts │ │ │ │ │ ├── create-volume.dto.ts │ │ │ │ │ ├── create-workspace.deprecated.dto.ts │ │ │ │ │ ├── download-files.dto.ts │ │ │ │ │ ├── job-type-map.dto.ts │ │ │ │ │ ├── job.dto.ts │ │ │ │ │ ├── list-sandboxes-query.dto.ts │ │ │ │ │ ├── list-snapshots-query.dto.ts │ │ │ │ │ ├── lsp.dto.ts │ │ │ │ │ ├── paginated-sandboxes.dto.ts │ │ │ │ │ ├── paginated-snapshots.dto.ts │ │ │ │ │ ├── port-preview-url.dto.ts │ │ │ │ │ ├── registry-push-access-dto.ts │ │ │ │ │ ├── resize-sandbox.dto.ts │ │ │ │ │ ├── runner-full.dto.ts │ │ │ │ │ ├── runner-health.dto.ts │ │ │ │ │ ├── runner-snapshot.dto.ts │ │ │ │ │ ├── runner-status.dto.ts │ │ │ │ │ ├── runner.dto.ts │ │ │ │ │ ├── sandbox.dto.ts │ │ │ │ │ ├── snapshot.dto.ts │ │ │ │ │ ├── ssh-access.dto.ts │ │ │ │ │ ├── storage-access-dto.ts │ │ │ │ │ ├── toolbox-proxy-url.dto.ts │ │ │ │ │ ├── toolbox.deprecated.dto.ts │ │ │ │ │ ├── update-sandbox-network-settings.dto.ts │ │ │ │ │ ├── update-sandbox-state.dto.ts │ │ │ │ │ ├── update-snapshot.dto.ts │ │ │ │ │ ├── upload-file.dto.ts │ │ │ │ │ ├── volume.dto.ts │ │ │ │ │ ├── workspace-port-preview-url.deprecated.dto.ts │ │ │ │ │ └── workspace.deprecated.dto.ts │ │ │ │ ├── entities/ │ │ │ │ │ ├── build-info.entity.ts │ │ │ │ │ ├── job.entity.ts │ │ │ │ │ ├── runner.entity.ts │ │ │ │ │ ├── sandbox.entity.ts │ │ │ │ │ ├── snapshot-region.entity.ts │ │ │ │ │ ├── snapshot-runner.entity.ts │ │ │ │ │ ├── snapshot.entity.ts │ │ │ │ │ ├── ssh-access.entity.ts │ │ │ │ │ ├── volume.entity.ts │ │ │ │ │ └── warm-pool.entity.ts │ │ │ │ ├── enums/ │ │ │ │ │ ├── backup-state.enum.ts │ │ │ │ │ ├── job-status.enum.ts │ │ │ │ │ ├── job-type.enum.ts │ │ │ │ │ ├── resource-type.enum.ts │ │ │ │ │ ├── runner-state.enum.ts │ │ │ │ │ ├── sandbox-class.enum.ts │ │ │ │ │ ├── sandbox-desired-state.enum.ts │ │ │ │ │ ├── sandbox-state.enum.ts │ │ │ │ │ ├── snapshot-runner-state.enum.ts │ │ │ │ │ ├── snapshot-state.enum.ts │ │ │ │ │ └── volume-state.enum.ts │ │ │ │ ├── errors/ │ │ │ │ │ ├── runner-api-error.ts │ │ │ │ │ ├── runner-not-ready.error.ts │ │ │ │ │ └── snapshot-state-error.ts │ │ │ │ ├── events/ │ │ │ │ │ ├── runner-created.event.ts │ │ │ │ │ ├── runner-deleted.event.ts │ │ │ │ │ ├── runner-state-updated.event.ts │ │ │ │ │ ├── runner-unschedulable-updated.event.ts │ │ │ │ │ ├── sandbox-archived.event.ts │ │ │ │ │ ├── sandbox-backup-created.event.ts │ │ │ │ │ ├── sandbox-create.event.ts │ │ │ │ │ ├── sandbox-desired-state-updated.event.ts │ │ │ │ │ ├── sandbox-destroyed.event.ts │ │ │ │ │ ├── sandbox-organization-updated.event.ts │ │ │ │ │ ├── sandbox-public-status-updated.event.ts │ │ │ │ │ ├── sandbox-started.event.ts │ │ │ │ │ ├── sandbox-state-updated.event.ts │ │ │ │ │ ├── sandbox-stopped.event.ts │ │ │ │ │ ├── snapshot-activated.event.ts │ │ │ │ │ ├── snapshot-created.event.ts │ │ │ │ │ ├── snapshot-removed.event.ts │ │ │ │ │ ├── snapshot-state-updated.event.ts │ │ │ │ │ ├── volume-created.event.ts │ │ │ │ │ ├── volume-last-used-at-updated.event.ts │ │ │ │ │ ├── volume-state-updated.event.ts │ │ │ │ │ └── warmpool-topup-requested.event.ts │ │ │ │ ├── guards/ │ │ │ │ │ ├── job-access.guard.ts │ │ │ │ │ ├── proxy.guard.ts │ │ │ │ │ ├── region-runner-access.guard.ts │ │ │ │ │ ├── region-sandbox-access.guard.ts │ │ │ │ │ ├── runner-access.guard.ts │ │ │ │ │ ├── sandbox-access.guard.ts │ │ │ │ │ ├── snapshot-access.guard.ts │ │ │ │ │ ├── snapshot-read-access.guard.ts │ │ │ │ │ ├── ssh-gateway.guard.ts │ │ │ │ │ └── volume-access.guard.ts │ │ │ │ ├── managers/ │ │ │ │ │ ├── backup.manager.ts │ │ │ │ │ ├── sandbox-actions/ │ │ │ │ │ │ ├── sandbox-archive.action.ts │ │ │ │ │ │ ├── sandbox-destroy.action.ts │ │ │ │ │ │ ├── sandbox-start.action.ts │ │ │ │ │ │ ├── sandbox-stop.action.ts │ │ │ │ │ │ └── sandbox.action.ts │ │ │ │ │ ├── sandbox.manager.ts │ │ │ │ │ ├── snapshot.manager.ts │ │ │ │ │ └── volume.manager.ts │ │ │ │ ├── proxy/ │ │ │ │ │ └── log-proxy.ts │ │ │ │ ├── repositories/ │ │ │ │ │ └── sandbox.repository.ts │ │ │ │ ├── runner-adapter/ │ │ │ │ │ ├── runnerAdapter.ts │ │ │ │ │ ├── runnerAdapter.v0.ts │ │ │ │ │ └── runnerAdapter.v2.ts │ │ │ │ ├── sandbox.module.ts │ │ │ │ ├── services/ │ │ │ │ │ ├── job-state-handler.service.ts │ │ │ │ │ ├── job.service.ts │ │ │ │ │ ├── proxy-cache-invalidation.service.ts │ │ │ │ │ ├── runner.service.ts │ │ │ │ │ ├── sandbox-lookup-cache-invalidation.service.ts │ │ │ │ │ ├── sandbox-warm-pool.service.ts │ │ │ │ │ ├── sandbox.service.ts │ │ │ │ │ ├── snapshot.service.ts │ │ │ │ │ ├── toolbox.deprecated.service.ts │ │ │ │ │ └── volume.service.ts │ │ │ │ ├── subscribers/ │ │ │ │ │ ├── runner.subscriber.ts │ │ │ │ │ ├── snapshot.subscriber.ts │ │ │ │ │ └── volume.subscriber.ts │ │ │ │ └── utils/ │ │ │ │ ├── lock-key.util.ts │ │ │ │ ├── network-validation.util.ts │ │ │ │ ├── runner-lookup-cache.util.ts │ │ │ │ ├── sandbox-lookup-cache.util.ts │ │ │ │ ├── sanitize-error.util.ts │ │ │ │ └── volume-mount-path-validation.util.ts │ │ │ ├── sandbox-telemetry/ │ │ │ │ ├── controllers/ │ │ │ │ │ └── sandbox-telemetry.controller.ts │ │ │ │ ├── dto/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── log-entry.dto.ts │ │ │ │ │ ├── metrics-response.dto.ts │ │ │ │ │ ├── paginated-logs.dto.ts │ │ │ │ │ ├── paginated-traces.dto.ts │ │ │ │ │ ├── telemetry-query-params.dto.ts │ │ │ │ │ ├── trace-span.dto.ts │ │ │ │ │ └── trace-summary.dto.ts │ │ │ │ ├── guards/ │ │ │ │ │ └── analytics-api-disabled.guard.ts │ │ │ │ ├── index.ts │ │ │ │ ├── sandbox-telemetry.module.ts │ │ │ │ └── services/ │ │ │ │ └── sandbox-telemetry.service.ts │ │ │ ├── tracing.ts │ │ │ ├── usage/ │ │ │ │ ├── entities/ │ │ │ │ │ ├── sandbox-usage-period-archive.entity.ts │ │ │ │ │ └── sandbox-usage-period.entity.ts │ │ │ │ ├── services/ │ │ │ │ │ └── usage.service.ts │ │ │ │ └── usage.module.ts │ │ │ ├── user/ │ │ │ │ ├── constants/ │ │ │ │ │ ├── acount-provider-display-name.constant.ts │ │ │ │ │ └── user-events.constant.ts │ │ │ │ ├── dto/ │ │ │ │ │ ├── account-provider.dto.ts │ │ │ │ │ ├── create-linked-account.dto.ts │ │ │ │ │ ├── create-user.dto.ts │ │ │ │ │ ├── update-user.dto.ts │ │ │ │ │ ├── user-public-key.dto.ts │ │ │ │ │ └── user.dto.ts │ │ │ │ ├── enums/ │ │ │ │ │ ├── account-provider.enum.ts │ │ │ │ │ └── system-role.enum.ts │ │ │ │ ├── events/ │ │ │ │ │ ├── user-created.event.ts │ │ │ │ │ ├── user-deleted.event.ts │ │ │ │ │ └── user-email-verified.event.ts │ │ │ │ ├── user.controller.ts │ │ │ │ ├── user.entity.ts │ │ │ │ ├── user.module.ts │ │ │ │ └── user.service.ts │ │ │ └── webhook/ │ │ │ ├── README.md │ │ │ ├── constants/ │ │ │ │ └── webhook-events.constants.ts │ │ │ ├── controllers/ │ │ │ │ └── webhook.controller.ts │ │ │ ├── dto/ │ │ │ │ ├── send-webhook.dto.ts │ │ │ │ ├── webhook-app-portal-access.dto.ts │ │ │ │ ├── webhook-event-payloads.dto.ts │ │ │ │ └── webhook-initialization-status.dto.ts │ │ │ ├── entities/ │ │ │ │ └── webhook-initialization.entity.ts │ │ │ ├── index.ts │ │ │ ├── services/ │ │ │ │ ├── webhook-event-handler.service.ts │ │ │ │ └── webhook.service.ts │ │ │ └── webhook.module.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── webpack.config.js │ ├── cli/ │ │ ├── apiclient/ │ │ │ ├── api_client.go │ │ │ └── error_handler.go │ │ ├── auth/ │ │ │ ├── auth.go │ │ │ └── auth_success.html │ │ ├── cmd/ │ │ │ ├── auth/ │ │ │ │ ├── login.go │ │ │ │ └── logout.go │ │ │ ├── autocomplete.go │ │ │ ├── common/ │ │ │ │ ├── aliases.go │ │ │ │ ├── build.go │ │ │ │ ├── format.go │ │ │ │ ├── logs.go │ │ │ │ ├── organization.go │ │ │ │ ├── sandbox.go │ │ │ │ ├── ssh.go │ │ │ │ ├── ssh_unix.go │ │ │ │ ├── ssh_windows.go │ │ │ │ ├── state.go │ │ │ │ └── validate.go │ │ │ ├── docs.go │ │ │ ├── generatedocs.go │ │ │ ├── mcp/ │ │ │ │ ├── agents/ │ │ │ │ │ ├── claude.go │ │ │ │ │ ├── common.go │ │ │ │ │ ├── cursor.go │ │ │ │ │ └── windsurf.go │ │ │ │ ├── config.go │ │ │ │ ├── init.go │ │ │ │ ├── mcp.go │ │ │ │ └── start.go │ │ │ ├── organization/ │ │ │ │ ├── create.go │ │ │ │ ├── delete.go │ │ │ │ ├── list.go │ │ │ │ ├── organization.go │ │ │ │ └── use.go │ │ │ ├── sandbox/ │ │ │ │ ├── archive.go │ │ │ │ ├── create.go │ │ │ │ ├── delete.go │ │ │ │ ├── exec.go │ │ │ │ ├── info.go │ │ │ │ ├── list.go │ │ │ │ ├── preview_url.go │ │ │ │ ├── sandbox.go │ │ │ │ ├── ssh.go │ │ │ │ ├── start.go │ │ │ │ └── stop.go │ │ │ ├── snapshot/ │ │ │ │ ├── create.go │ │ │ │ ├── delete.go │ │ │ │ ├── list.go │ │ │ │ ├── push.go │ │ │ │ └── snapshot.go │ │ │ ├── version.go │ │ │ └── volume/ │ │ │ ├── create.go │ │ │ ├── delete.go │ │ │ ├── get.go │ │ │ ├── list.go │ │ │ └── volume.go │ │ ├── config/ │ │ │ └── config.go │ │ ├── docker/ │ │ │ └── build.go │ │ ├── docs/ │ │ │ ├── daytona.md │ │ │ ├── daytona_archive.md │ │ │ ├── daytona_autocomplete.md │ │ │ ├── daytona_create.md │ │ │ ├── daytona_delete.md │ │ │ ├── daytona_docs.md │ │ │ ├── daytona_exec.md │ │ │ ├── daytona_info.md │ │ │ ├── daytona_list.md │ │ │ ├── daytona_login.md │ │ │ ├── daytona_logout.md │ │ │ ├── daytona_mcp.md │ │ │ ├── daytona_mcp_config.md │ │ │ ├── daytona_mcp_init.md │ │ │ ├── daytona_mcp_start.md │ │ │ ├── daytona_organization.md │ │ │ ├── daytona_organization_create.md │ │ │ ├── daytona_organization_delete.md │ │ │ ├── daytona_organization_list.md │ │ │ ├── daytona_organization_use.md │ │ │ ├── daytona_preview-url.md │ │ │ ├── daytona_snapshot.md │ │ │ ├── daytona_snapshot_create.md │ │ │ ├── daytona_snapshot_delete.md │ │ │ ├── daytona_snapshot_list.md │ │ │ ├── daytona_snapshot_push.md │ │ │ ├── daytona_ssh.md │ │ │ ├── daytona_start.md │ │ │ ├── daytona_stop.md │ │ │ ├── daytona_version.md │ │ │ ├── daytona_volume.md │ │ │ ├── daytona_volume_create.md │ │ │ ├── daytona_volume_delete.md │ │ │ ├── daytona_volume_get.md │ │ │ └── daytona_volume_list.md │ │ ├── go.mod │ │ ├── go.sum │ │ ├── hack/ │ │ │ ├── build.sh │ │ │ ├── docs/ │ │ │ │ ├── daytona.yaml │ │ │ │ ├── daytona_archive.yaml │ │ │ │ ├── daytona_autocomplete.yaml │ │ │ │ ├── daytona_create.yaml │ │ │ │ ├── daytona_delete.yaml │ │ │ │ ├── daytona_docs.yaml │ │ │ │ ├── daytona_exec.yaml │ │ │ │ ├── daytona_info.yaml │ │ │ │ ├── daytona_list.yaml │ │ │ │ ├── daytona_login.yaml │ │ │ │ ├── daytona_logout.yaml │ │ │ │ ├── daytona_mcp.yaml │ │ │ │ ├── daytona_mcp_config.yaml │ │ │ │ ├── daytona_mcp_init.yaml │ │ │ │ ├── daytona_mcp_start.yaml │ │ │ │ ├── daytona_organization.yaml │ │ │ │ ├── daytona_organization_create.yaml │ │ │ │ ├── daytona_organization_delete.yaml │ │ │ │ ├── daytona_organization_list.yaml │ │ │ │ ├── daytona_organization_use.yaml │ │ │ │ ├── daytona_preview-url.yaml │ │ │ │ ├── daytona_snapshot.yaml │ │ │ │ ├── daytona_snapshot_create.yaml │ │ │ │ ├── daytona_snapshot_delete.yaml │ │ │ │ ├── daytona_snapshot_list.yaml │ │ │ │ ├── daytona_snapshot_push.yaml │ │ │ │ ├── daytona_ssh.yaml │ │ │ │ ├── daytona_start.yaml │ │ │ │ ├── daytona_stop.yaml │ │ │ │ ├── daytona_version.yaml │ │ │ │ ├── daytona_volume.yaml │ │ │ │ ├── daytona_volume_create.yaml │ │ │ │ ├── daytona_volume_delete.yaml │ │ │ │ ├── daytona_volume_get.yaml │ │ │ │ └── daytona_volume_list.yaml │ │ │ └── generate-cli-docs.sh │ │ ├── internal/ │ │ │ ├── buildinfo.go │ │ │ └── cmd.go │ │ ├── main.go │ │ ├── mcp/ │ │ │ ├── README.md │ │ │ ├── server.go │ │ │ └── tools/ │ │ │ ├── common.go │ │ │ ├── create_folder.go │ │ │ ├── create_sandbox.go │ │ │ ├── delete_file.go │ │ │ ├── destroy_sandbox.go │ │ │ ├── download_file.go │ │ │ ├── execute_command.go │ │ │ ├── file_info.go │ │ │ ├── git_clone.go │ │ │ ├── list_files.go │ │ │ ├── move_file.go │ │ │ ├── preview_link.go │ │ │ └── upload_file.go │ │ ├── pkg/ │ │ │ └── minio/ │ │ │ └── minio.go │ │ ├── project.json │ │ ├── toolbox/ │ │ │ └── toolbox.go │ │ ├── util/ │ │ │ └── pointer.go │ │ └── views/ │ │ ├── common/ │ │ │ ├── common.go │ │ │ ├── prompt.go │ │ │ ├── select.go │ │ │ └── styles.go │ │ ├── organization/ │ │ │ ├── info.go │ │ │ ├── list.go │ │ │ └── select.go │ │ ├── sandbox/ │ │ │ ├── info.go │ │ │ └── list.go │ │ ├── snapshot/ │ │ │ ├── info.go │ │ │ └── list.go │ │ ├── util/ │ │ │ ├── empty_list.go │ │ │ ├── info.go │ │ │ ├── spinner.go │ │ │ ├── table.go │ │ │ └── time.go │ │ └── volume/ │ │ ├── info.go │ │ └── list.go │ ├── daemon/ │ │ ├── .gitignore │ │ ├── cmd/ │ │ │ └── daemon/ │ │ │ ├── config/ │ │ │ │ └── config.go │ │ │ └── main.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── internal/ │ │ │ ├── buildinfo.go │ │ │ └── util/ │ │ │ ├── entrypoint_logs.go │ │ │ ├── entrypoint_session.go │ │ │ ├── log_reader.go │ │ │ ├── pointer.go │ │ │ ├── sandbox.go │ │ │ ├── shell_quote.go │ │ │ ├── version.go │ │ │ ├── websocket.go │ │ │ └── ws_keepalive.go │ │ ├── pkg/ │ │ │ ├── common/ │ │ │ │ ├── errors.go │ │ │ │ ├── get_shell.go │ │ │ │ └── spawn_tty.go │ │ │ ├── git/ │ │ │ │ ├── add.go │ │ │ │ ├── branch.go │ │ │ │ ├── checkout.go │ │ │ │ ├── clone.go │ │ │ │ ├── commit.go │ │ │ │ ├── config.go │ │ │ │ ├── log.go │ │ │ │ ├── pull.go │ │ │ │ ├── push.go │ │ │ │ ├── service.go │ │ │ │ ├── service_test.go │ │ │ │ ├── status.go │ │ │ │ └── types.go │ │ │ ├── gitprovider/ │ │ │ │ └── types.go │ │ │ ├── recording/ │ │ │ │ ├── delete.go │ │ │ │ ├── get.go │ │ │ │ ├── list.go │ │ │ │ ├── service.go │ │ │ │ ├── start.go │ │ │ │ ├── stop.go │ │ │ │ └── types.go │ │ │ ├── recordingdashboard/ │ │ │ │ ├── assets.go │ │ │ │ ├── server.go │ │ │ │ └── static/ │ │ │ │ └── index.html │ │ │ ├── session/ │ │ │ │ ├── command.go │ │ │ │ ├── common.go │ │ │ │ ├── create.go │ │ │ │ ├── delete.go │ │ │ │ ├── execute.go │ │ │ │ ├── get.go │ │ │ │ ├── input.go │ │ │ │ ├── list.go │ │ │ │ ├── log.go │ │ │ │ ├── service.go │ │ │ │ └── types.go │ │ │ ├── ssh/ │ │ │ │ ├── config/ │ │ │ │ │ └── config.go │ │ │ │ ├── server.go │ │ │ │ └── unix_forward.go │ │ │ ├── terminal/ │ │ │ │ ├── assets.go │ │ │ │ ├── decoder.go │ │ │ │ ├── server.go │ │ │ │ └── static/ │ │ │ │ └── index.html │ │ │ └── toolbox/ │ │ │ ├── computeruse/ │ │ │ │ ├── disabled_middleware.go │ │ │ │ ├── handler.go │ │ │ │ ├── interface.go │ │ │ │ ├── lazy.go │ │ │ │ ├── manager/ │ │ │ │ │ └── manager.go │ │ │ │ ├── recording/ │ │ │ │ │ ├── controller.go │ │ │ │ │ ├── download.go │ │ │ │ │ ├── recording.go │ │ │ │ │ ├── start.go │ │ │ │ │ ├── stop.go │ │ │ │ │ └── types.go │ │ │ │ ├── rpc_client.go │ │ │ │ └── rpc_server.go │ │ │ ├── config/ │ │ │ │ └── config.go │ │ │ ├── controller.go │ │ │ ├── docs/ │ │ │ │ ├── docs.go │ │ │ │ ├── swagger.json │ │ │ │ └── swagger.yaml │ │ │ ├── fs/ │ │ │ │ ├── create_folder.go │ │ │ │ ├── delete_file.go │ │ │ │ ├── download_file.go │ │ │ │ ├── download_files.go │ │ │ │ ├── find_in_files.go │ │ │ │ ├── get_file_info.go │ │ │ │ ├── list_files.go │ │ │ │ ├── move_file.go │ │ │ │ ├── replace_in_files.go │ │ │ │ ├── search_files.go │ │ │ │ ├── set_file_permissions.go │ │ │ │ ├── types.go │ │ │ │ ├── upload_file.go │ │ │ │ └── upload_files.go │ │ │ ├── git/ │ │ │ │ ├── add.go │ │ │ │ ├── checkout.go │ │ │ │ ├── clone_repository.go │ │ │ │ ├── commit.go │ │ │ │ ├── create_branch.go │ │ │ │ ├── delete_branch.go │ │ │ │ ├── history.go │ │ │ │ ├── list_branches.go │ │ │ │ ├── pull.go │ │ │ │ ├── push.go │ │ │ │ ├── status.go │ │ │ │ └── types.go │ │ │ ├── lsp/ │ │ │ │ ├── client.go │ │ │ │ ├── lsp.go │ │ │ │ ├── python_lsp.go │ │ │ │ ├── server.go │ │ │ │ ├── service.go │ │ │ │ ├── types.go │ │ │ │ └── typescript_lsp.go │ │ │ ├── middlewares/ │ │ │ │ └── error.go │ │ │ ├── port/ │ │ │ │ ├── detector.go │ │ │ │ └── types.go │ │ │ ├── process/ │ │ │ │ ├── execute.go │ │ │ │ ├── interpreter/ │ │ │ │ │ ├── controller.go │ │ │ │ │ ├── manager.go │ │ │ │ │ ├── repl_client.go │ │ │ │ │ ├── repl_worker.py │ │ │ │ │ ├── types.go │ │ │ │ │ └── websocket.go │ │ │ │ ├── pty/ │ │ │ │ │ ├── controller.go │ │ │ │ │ ├── manager.go │ │ │ │ │ ├── session.go │ │ │ │ │ ├── types.go │ │ │ │ │ ├── websocket.go │ │ │ │ │ └── ws_client.go │ │ │ │ ├── session/ │ │ │ │ │ ├── controller.go │ │ │ │ │ ├── execute.go │ │ │ │ │ ├── input.go │ │ │ │ │ ├── log.go │ │ │ │ │ ├── session.go │ │ │ │ │ └── types.go │ │ │ │ └── types.go │ │ │ ├── proxy/ │ │ │ │ └── proxy.go │ │ │ ├── server.go │ │ │ ├── telemetry.go │ │ │ ├── types.go │ │ │ └── validator.go │ │ ├── project.json │ │ └── tools/ │ │ └── xterm.go │ ├── dashboard/ │ │ ├── .prettierignore │ │ ├── .storybook/ │ │ │ ├── main.ts │ │ │ ├── preview.tsx │ │ │ └── tsconfig.json │ │ ├── eslint.config.mjs │ │ ├── index.html │ │ ├── postcss.config.js │ │ ├── project.json │ │ ├── public/ │ │ │ └── mockServiceWorker.js │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.tsx │ │ │ ├── api/ │ │ │ │ ├── apiClient.ts │ │ │ │ └── errors.ts │ │ │ ├── assets/ │ │ │ │ └── Logo.tsx │ │ │ ├── billing-api/ │ │ │ │ ├── billingApiClient.ts │ │ │ │ ├── index.ts │ │ │ │ └── types/ │ │ │ │ ├── Invoice.ts │ │ │ │ ├── OrganizationEmail.ts │ │ │ │ ├── OrganizationTier.ts │ │ │ │ ├── OrganizationUsage.ts │ │ │ │ ├── OrganizationWallet.ts │ │ │ │ ├── index.ts │ │ │ │ └── tier.ts │ │ │ ├── components/ │ │ │ │ ├── AccountProviderIcon.tsx │ │ │ │ ├── AnnouncementBanner.tsx │ │ │ │ ├── ApiKeyTable.tsx │ │ │ │ ├── AuditLogTable.tsx │ │ │ │ ├── Banner.tsx │ │ │ │ ├── CodeBlock.tsx │ │ │ │ ├── CommandPalette.tsx │ │ │ │ ├── ComparisonTable.tsx │ │ │ │ ├── CopyButton.tsx │ │ │ │ ├── CreateApiKeyDialog.tsx │ │ │ │ ├── CreateRegionDialog.tsx │ │ │ │ ├── CreateRunnerDialog.tsx │ │ │ │ ├── DebouncedInput.tsx │ │ │ │ ├── EllipsisWithTooltip.tsx │ │ │ │ ├── ErrorBoundaryFallback.tsx │ │ │ │ ├── Invoices/ │ │ │ │ │ ├── InvoicesTableActions.tsx │ │ │ │ │ ├── InvoicesTableHeader.tsx │ │ │ │ │ ├── columns.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ └── useInvoicesTable.ts │ │ │ │ ├── LimitUsageChart.tsx │ │ │ │ ├── LiveIndicator.tsx │ │ │ │ ├── LoadingFallback.tsx │ │ │ │ ├── OrganizationMembers/ │ │ │ │ │ ├── CancelOrganizationInvitationDialog.tsx │ │ │ │ │ ├── CreateOrganizationInvitationDialog.tsx │ │ │ │ │ ├── OrganizationInvitationTable.tsx │ │ │ │ │ ├── OrganizationMemberTable.tsx │ │ │ │ │ ├── RemoveOrganizationMemberDialog.tsx │ │ │ │ │ ├── UpdateOrganizationInvitationDialog.tsx │ │ │ │ │ ├── UpdateOrganizationMemberAccessDialog.tsx │ │ │ │ │ └── ViewerOrganizationRoleCheckbox.tsx │ │ │ │ ├── OrganizationRoles/ │ │ │ │ │ ├── CreateOrganizationRoleDialog.tsx │ │ │ │ │ ├── DeleteOrganizationRoleDialog.tsx │ │ │ │ │ ├── OrganizationRoleTable.tsx │ │ │ │ │ └── UpdateOrganizationRoleDialog.tsx │ │ │ │ ├── Organizations/ │ │ │ │ │ ├── CreateOrganizationDialog.tsx │ │ │ │ │ ├── DeleteOrganizationDialog.tsx │ │ │ │ │ ├── LeaveOrganizationDialog.tsx │ │ │ │ │ ├── OrganizationPicker.tsx │ │ │ │ │ └── SetDefaultRegionDialog.tsx │ │ │ │ ├── PageLayout.tsx │ │ │ │ ├── Pagination.tsx │ │ │ │ ├── Playground/ │ │ │ │ │ ├── ActionForm.tsx │ │ │ │ │ ├── ActionRunButton.tsx │ │ │ │ │ ├── Inputs/ │ │ │ │ │ │ ├── CheckboxInput.tsx │ │ │ │ │ │ ├── InlineInputFormControl.tsx │ │ │ │ │ │ ├── Label.tsx │ │ │ │ │ │ ├── NumberInput.tsx │ │ │ │ │ │ ├── SelectInput.tsx │ │ │ │ │ │ ├── StackedInputFormControl.tsx │ │ │ │ │ │ └── TextInput.tsx │ │ │ │ │ ├── PlaygroundLayout.tsx │ │ │ │ │ ├── ResponseCard.tsx │ │ │ │ │ ├── Sandbox/ │ │ │ │ │ │ ├── CodeSnippets/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── python.ts │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ ├── typescript.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── CodeSnippetsResponse.tsx │ │ │ │ │ │ └── Parameters/ │ │ │ │ │ │ ├── FileSystem.tsx │ │ │ │ │ │ ├── GitOperations.tsx │ │ │ │ │ │ ├── Management.tsx │ │ │ │ │ │ ├── ProcessCodeExecution.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Terminal/ │ │ │ │ │ │ ├── Description.tsx │ │ │ │ │ │ └── WebTerminal.tsx │ │ │ │ │ ├── VNC/ │ │ │ │ │ │ ├── DesktopWindowResponse.tsx │ │ │ │ │ │ └── Interaction/ │ │ │ │ │ │ ├── Display.tsx │ │ │ │ │ │ ├── Keyboard.tsx │ │ │ │ │ │ ├── Mouse.tsx │ │ │ │ │ │ ├── Screenshot.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── Window.tsx │ │ │ │ ├── PostHogProviderWrapper.tsx │ │ │ │ ├── PrivacyBanner.tsx │ │ │ │ ├── PrivacyPreferencesDialog.tsx │ │ │ │ ├── QuotaLine.tsx │ │ │ │ ├── RegionDetailsSheet.tsx │ │ │ │ ├── RegionTable.tsx │ │ │ │ ├── RegistryTable.tsx │ │ │ │ ├── ResourceChip.tsx │ │ │ │ ├── RunnerDetailsSheet.tsx │ │ │ │ ├── RunnerTable.tsx │ │ │ │ ├── Sandbox/ │ │ │ │ │ └── CreateSandboxSheet.tsx │ │ │ │ ├── SandboxDetailsSheet.tsx │ │ │ │ ├── SandboxTable/ │ │ │ │ │ ├── BulkActionAlertDialog.tsx │ │ │ │ │ ├── SandboxState.tsx │ │ │ │ │ ├── SandboxTableActions.tsx │ │ │ │ │ ├── SandboxTableHeader.tsx │ │ │ │ │ ├── columns.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── filters/ │ │ │ │ │ │ ├── LabelFilter.tsx │ │ │ │ │ │ ├── LastEventFilter.tsx │ │ │ │ │ │ ├── RegionFilter.tsx │ │ │ │ │ │ ├── ResourceFilter.tsx │ │ │ │ │ │ ├── SnapshotFilter.tsx │ │ │ │ │ │ └── StateFilter.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── state-icons.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── useSandboxCommands.tsx │ │ │ │ │ └── useSandboxTable.ts │ │ │ │ ├── SelectionToast.tsx │ │ │ │ ├── Sidebar.tsx │ │ │ │ ├── SortIcon.tsx │ │ │ │ ├── TableColumnVisibilityToggle.tsx │ │ │ │ ├── TableEmptyState.tsx │ │ │ │ ├── TierComparisonTable.tsx │ │ │ │ ├── TierUpgradeCard.tsx │ │ │ │ ├── TimestampTooltip.tsx │ │ │ │ ├── Tooltip.tsx │ │ │ │ ├── TooltipButton.tsx │ │ │ │ ├── UpdateRegionDialog.tsx │ │ │ │ ├── UsageOverview.tsx │ │ │ │ ├── UsageOverviewIndicator.tsx │ │ │ │ ├── UserOrganizationInvitations/ │ │ │ │ │ ├── DeclineOrganizationInvitationDialog.tsx │ │ │ │ │ ├── OrganizationInvitationActionDialog.tsx │ │ │ │ │ └── UserOrganizationInvitationTable.tsx │ │ │ │ ├── VerifyEmailDialog.tsx │ │ │ │ ├── VolumeTable.tsx │ │ │ │ ├── Webhooks/ │ │ │ │ │ ├── CreateEndpointDialog.tsx │ │ │ │ │ ├── DeliveryStatsLine.tsx │ │ │ │ │ ├── EditEndpointDialog.tsx │ │ │ │ │ ├── EndpointEventsTable/ │ │ │ │ │ │ ├── EndpointEventsTable.tsx │ │ │ │ │ │ ├── EventDetailsSheet.tsx │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── MessageAttemptsTable.tsx │ │ │ │ │ ├── WebhooksEndpointTable/ │ │ │ │ │ │ ├── WebhooksEndpointTable.tsx │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── WebhooksMessagesTable/ │ │ │ │ │ ├── MessageDetailsSheet.tsx │ │ │ │ │ ├── WebhooksMessagesTable.tsx │ │ │ │ │ └── columns.tsx │ │ │ │ ├── sandboxes/ │ │ │ │ │ ├── CreateSshAccessDialog.tsx │ │ │ │ │ ├── RevokeSshAccessDialog.tsx │ │ │ │ │ ├── SandboxContentTabs.tsx │ │ │ │ │ ├── SandboxDetails.tsx │ │ │ │ │ ├── SandboxHeader.tsx │ │ │ │ │ ├── SandboxInfoPanel.tsx │ │ │ │ │ ├── SandboxLogsTab.tsx │ │ │ │ │ ├── SandboxMetricsTab.tsx │ │ │ │ │ ├── SandboxSpendingTab.tsx │ │ │ │ │ ├── SandboxTerminalTab.tsx │ │ │ │ │ ├── SandboxTracesTab.tsx │ │ │ │ │ ├── SandboxVncTab.tsx │ │ │ │ │ ├── SearchParams.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── snapshots/ │ │ │ │ │ ├── CreateSnapshotDialog.tsx │ │ │ │ │ └── SnapshotTable/ │ │ │ │ │ ├── BulkActionAlertDialog.tsx │ │ │ │ │ ├── SnapshotTable.tsx │ │ │ │ │ ├── columns.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── useSnapshotsCommands.tsx │ │ │ │ │ └── utils.ts │ │ │ │ ├── spending/ │ │ │ │ │ ├── AggregatedUsageChart.tsx │ │ │ │ │ ├── CostBreakdown.tsx │ │ │ │ │ ├── ResourceUsageChart.tsx │ │ │ │ │ ├── SandboxSpendingTab.tsx │ │ │ │ │ ├── SandboxUsageTable.tsx │ │ │ │ │ ├── UsageTimelineChart.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── telemetry/ │ │ │ │ │ ├── LogsTab.tsx │ │ │ │ │ ├── MetricsTab.tsx │ │ │ │ │ ├── SeverityBadge.tsx │ │ │ │ │ ├── TimeRangeSelector.tsx │ │ │ │ │ ├── TraceDetailsSheet.tsx │ │ │ │ │ ├── TracesTab.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── accordion.tsx │ │ │ │ ├── alert-dialog.tsx │ │ │ │ ├── alert.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button-group.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── chart.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── data-table-faceted-filter.tsx │ │ │ │ ├── date-picker.tsx │ │ │ │ ├── date-range-picker.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── drawer.tsx │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ ├── empty.tsx │ │ │ │ ├── facet-filter.tsx │ │ │ │ ├── field.tsx │ │ │ │ ├── input-group.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── kbd.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── radio-group.tsx │ │ │ │ ├── scroll-area.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── sheet.tsx │ │ │ │ ├── sidebar.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── sonner.tsx │ │ │ │ ├── spinner.tsx │ │ │ │ ├── stories/ │ │ │ │ │ ├── accordion.stories.tsx │ │ │ │ │ ├── alert-dialog.stories.tsx │ │ │ │ │ ├── alert.stories.tsx │ │ │ │ │ ├── badge.stories.tsx │ │ │ │ │ ├── button.stories.tsx │ │ │ │ │ ├── calendar.stories.tsx │ │ │ │ │ ├── card.stories.tsx │ │ │ │ │ ├── chart.stories.tsx │ │ │ │ │ ├── checkbox.stories.tsx │ │ │ │ │ ├── colors.stories.tsx │ │ │ │ │ ├── command.stories.tsx │ │ │ │ │ ├── date-picker.stories.tsx │ │ │ │ │ ├── dialog.stories.tsx │ │ │ │ │ ├── drawer.stories.tsx │ │ │ │ │ ├── dropdown-menu.stories.tsx │ │ │ │ │ ├── facet-filter.stories.tsx │ │ │ │ │ ├── field.stories.tsx │ │ │ │ │ ├── input-group.stories.tsx │ │ │ │ │ ├── input.stories.tsx │ │ │ │ │ ├── kbd.stories.tsx │ │ │ │ │ ├── label.stories.tsx │ │ │ │ │ ├── popover.stories.tsx │ │ │ │ │ ├── radio-group.stories.tsx │ │ │ │ │ ├── scroll-area.stories.tsx │ │ │ │ │ ├── select.stories.tsx │ │ │ │ │ ├── separator.stories.tsx │ │ │ │ │ ├── sheet.stories.tsx │ │ │ │ │ ├── sidebar.stories.tsx │ │ │ │ │ ├── skeleton.stories.tsx │ │ │ │ │ ├── slider.stories.tsx │ │ │ │ │ ├── sonner.stories.tsx │ │ │ │ │ ├── spinner.stories.tsx │ │ │ │ │ ├── switch.stories.tsx │ │ │ │ │ ├── table.stories.tsx │ │ │ │ │ ├── tabs.stories.tsx │ │ │ │ │ ├── textarea.stories.tsx │ │ │ │ │ ├── toggle-group.stories.tsx │ │ │ │ │ ├── toggle.stories.tsx │ │ │ │ │ └── tooltip.stories.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── toggle-group.tsx │ │ │ │ ├── toggle.tsx │ │ │ │ └── tooltip.tsx │ │ │ ├── constants/ │ │ │ │ ├── CreateApiKeyPermissionsGroups.ts │ │ │ │ ├── ExternalLinks.ts │ │ │ │ ├── OrganizationPermissionsGroups.ts │ │ │ │ ├── Pagination.ts │ │ │ │ ├── Playground.ts │ │ │ │ ├── limits.ts │ │ │ │ ├── metrics.ts │ │ │ │ └── webhook-events.ts │ │ │ ├── contexts/ │ │ │ │ ├── ApiContext.tsx │ │ │ │ ├── ConfigContext.tsx │ │ │ │ ├── NotificationSocketContext.tsx │ │ │ │ ├── OrganizationsContext.tsx │ │ │ │ ├── PlaygroundContext.tsx │ │ │ │ ├── RegionsContext.tsx │ │ │ │ ├── SandboxSessionContext.tsx │ │ │ │ ├── SelectedOrganizationContext.tsx │ │ │ │ ├── ThemeContext.tsx │ │ │ │ └── UserOrganizationInvitationsContext.tsx │ │ │ ├── enums/ │ │ │ │ ├── FeatureFlags.ts │ │ │ │ ├── LocalStorageKey.ts │ │ │ │ ├── Playground.ts │ │ │ │ └── RoutePath.ts │ │ │ ├── hooks/ │ │ │ │ ├── mutations/ │ │ │ │ │ ├── useArchiveSandboxMutation.ts │ │ │ │ │ ├── useCreateApiKeyMutation.ts │ │ │ │ │ ├── useCreateInvoicePaymentUrlMutation.ts │ │ │ │ │ ├── useCreateSandboxMutation.tsx │ │ │ │ │ ├── useCreateSnapshotMutation.tsx │ │ │ │ │ ├── useCreateSshAccessMutation.ts │ │ │ │ │ ├── useDeleteOrganizationMutation.ts │ │ │ │ │ ├── useDeleteSandboxMutation.ts │ │ │ │ │ ├── useDeleteWebhookEndpointMutation.ts │ │ │ │ │ ├── useDowngradeTierMutation.ts │ │ │ │ │ ├── useEnrollInSmsMfaMutation.ts │ │ │ │ │ ├── useLeaveOrganizationMutation.ts │ │ │ │ │ ├── useRecoverSandboxMutation.ts │ │ │ │ │ ├── useRedeemCouponMutation.ts │ │ │ │ │ ├── useReplayWebhookEventMutation.tsx │ │ │ │ │ ├── useRevokeApiKeyMutation.ts │ │ │ │ │ ├── useRevokeSshAccessMutation.ts │ │ │ │ │ ├── useRotateWebhookSecretMutation.ts │ │ │ │ │ ├── useSetAutomaticTopUpMutation.ts │ │ │ │ │ ├── useSetOrganizationDefaultRegionMutation.ts │ │ │ │ │ ├── useStartSandboxMutation.ts │ │ │ │ │ ├── useStartVncMutation.ts │ │ │ │ │ ├── useStopSandboxMutation.ts │ │ │ │ │ ├── useTopUpWalletMutation.ts │ │ │ │ │ ├── useUnlinkAccountMutation.ts │ │ │ │ │ ├── useUpdateWebhookEndpointMutation.ts │ │ │ │ │ ├── useUpgradeTierMutation.ts │ │ │ │ │ └── useVoidInvoiceMutation.ts │ │ │ │ ├── queries/ │ │ │ │ │ ├── billingQueries.ts │ │ │ │ │ ├── queryKeys.ts │ │ │ │ │ ├── useAccountProvidersQuery.ts │ │ │ │ │ ├── useAnalyticsUsage.ts │ │ │ │ │ ├── useApiKeysQuery.ts │ │ │ │ │ ├── useOrganizationBillingPortalUrlQuery.ts │ │ │ │ │ ├── useOrganizationCheckoutUrlQuery.ts │ │ │ │ │ ├── useOrganizationInvoicesQuery.ts │ │ │ │ │ ├── useOrganizationTierQuery.ts │ │ │ │ │ ├── useOrganizationUsageOverviewQuery.ts │ │ │ │ │ ├── useOrganizationUsageQuery.ts │ │ │ │ │ ├── useOrganizationWalletQuery.ts │ │ │ │ │ ├── usePastOrganizationUsageQuery.ts │ │ │ │ │ ├── useSandboxQuery.ts │ │ │ │ │ ├── useSnapshotsQuery.ts │ │ │ │ │ ├── useTerminalSessionQuery.ts │ │ │ │ │ ├── useTiersQuery.ts │ │ │ │ │ ├── useVncSessionQuery.ts │ │ │ │ │ ├── useVncStatusQuery.ts │ │ │ │ │ ├── useWebhookAppPortalAccessQuery.ts │ │ │ │ │ └── useWebhookInitializationStatusQuery.ts │ │ │ │ ├── use-mobile.tsx │ │ │ │ ├── useApi.tsx │ │ │ │ ├── useConfig.ts │ │ │ │ ├── useCopyToClipboard.tsx │ │ │ │ ├── useDeepCompareMemo.ts │ │ │ │ ├── useDocsSearchCommands.tsx │ │ │ │ ├── useMatchMedia.ts │ │ │ │ ├── useNotificationSocket.ts │ │ │ │ ├── useOrganizationRoles.ts │ │ │ │ ├── useOrganizations.ts │ │ │ │ ├── usePlayground.ts │ │ │ │ ├── usePlaygroundSandbox.tsx │ │ │ │ ├── useQueryCountdown.ts │ │ │ │ ├── useRegions.ts │ │ │ │ ├── useSandboxLogs.ts │ │ │ │ ├── useSandboxMetrics.ts │ │ │ │ ├── useSandboxSession.ts │ │ │ │ ├── useSandboxSessionContext.ts │ │ │ │ ├── useSandboxTraceSpans.ts │ │ │ │ ├── useSandboxTraces.ts │ │ │ │ ├── useSandboxWsSync.ts │ │ │ │ ├── useSandboxes.ts │ │ │ │ ├── useSelectedOrganization.ts │ │ │ │ ├── useSuspensionBanner.tsx │ │ │ │ ├── useUserOrganizationInvitations.ts │ │ │ │ └── useWebhooks.ts │ │ │ ├── index.css │ │ │ ├── lib/ │ │ │ │ ├── bulk-action-toast.tsx │ │ │ │ ├── env.ts │ │ │ │ ├── error-handling.ts │ │ │ │ ├── local-storage.ts │ │ │ │ ├── playground.tsx │ │ │ │ ├── schema.ts │ │ │ │ ├── suspended-fetch.ts │ │ │ │ └── utils/ │ │ │ │ ├── index.ts │ │ │ │ └── sandbox.ts │ │ │ ├── main.tsx │ │ │ ├── mocks/ │ │ │ │ ├── browser.ts │ │ │ │ └── handlers.ts │ │ │ ├── pages/ │ │ │ │ ├── AccountSettings.tsx │ │ │ │ ├── AuditLogs.tsx │ │ │ │ ├── Callback.tsx │ │ │ │ ├── Dashboard.tsx │ │ │ │ ├── EmailVerify.tsx │ │ │ │ ├── Experimental.tsx │ │ │ │ ├── Keys.tsx │ │ │ │ ├── LandingPage.tsx │ │ │ │ ├── Limits.tsx │ │ │ │ ├── LinkedAccounts.tsx │ │ │ │ ├── Logout.tsx │ │ │ │ ├── NotFound.tsx │ │ │ │ ├── Onboarding.tsx │ │ │ │ ├── OrganizationMembers.tsx │ │ │ │ ├── OrganizationRoles.tsx │ │ │ │ ├── OrganizationSettings.tsx │ │ │ │ ├── Playground.tsx │ │ │ │ ├── Regions.tsx │ │ │ │ ├── Registries.tsx │ │ │ │ ├── Runners.tsx │ │ │ │ ├── Sandboxes.tsx │ │ │ │ ├── Snapshots.tsx │ │ │ │ ├── Spending.tsx │ │ │ │ ├── UserOrganizationInvitations.tsx │ │ │ │ ├── Volumes.tsx │ │ │ │ ├── Wallet.tsx │ │ │ │ ├── WebhookEndpointDetails.tsx │ │ │ │ └── Webhooks.tsx │ │ │ ├── providers/ │ │ │ │ ├── ApiProvider.tsx │ │ │ │ ├── ConfigProvider.tsx │ │ │ │ ├── NotificationSocketProvider.tsx │ │ │ │ ├── OrganizationsProvider.tsx │ │ │ │ ├── PlaygroundProvider.tsx │ │ │ │ ├── PlaygroundSandboxProvider.tsx │ │ │ │ ├── QueryProvider.tsx │ │ │ │ ├── RegionsProvider.tsx │ │ │ │ ├── SandboxSessionProvider.tsx │ │ │ │ ├── SelectedOrganizationProvider.tsx │ │ │ │ ├── SvixProvider.tsx │ │ │ │ └── UserOrganizationInvitationsProvider.tsx │ │ │ ├── services/ │ │ │ │ └── webhookService.ts │ │ │ ├── types/ │ │ │ │ ├── CreateApiKeyPermissionGroup.ts │ │ │ │ ├── DashboardConfig.ts │ │ │ │ ├── OrganizationRolePermissionGroup.ts │ │ │ │ ├── sandbox.ts │ │ │ │ └── window.d.ts │ │ │ ├── vendor/ │ │ │ │ └── pylon/ │ │ │ │ ├── addPylonWidget.ts │ │ │ │ ├── index.ts │ │ │ │ ├── usePylon.ts │ │ │ │ └── usePylonCommands.tsx │ │ │ └── vite-env.d.ts │ │ ├── tailwind.config.js │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ └── vite.config.mts │ ├── docs/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── .markdownlint-cli2.jsonc │ │ ├── .nvmrc │ │ ├── .prettierrc │ │ ├── CODE_OF_CONDUCT.md │ │ ├── CONTRIBUTING.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── README.md │ │ ├── SECURITY.md │ │ ├── astro.config.mjs │ │ ├── gt.config.json │ │ ├── project.json │ │ ├── server/ │ │ │ ├── index.mjs │ │ │ └── util/ │ │ │ ├── environment.mjs │ │ │ └── redirects.mjs │ │ ├── src/ │ │ │ ├── assets/ │ │ │ │ ├── docs/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── sandbox-states.drawio.xml │ │ │ │ └── themes/ │ │ │ │ ├── daytona-code-dark.json │ │ │ │ └── daytona-code-light.json │ │ │ ├── components/ │ │ │ │ ├── ApiBackButton.astro │ │ │ │ ├── ApiReference.astro │ │ │ │ ├── ArchitectureDiagram.astro │ │ │ │ ├── Aside.astro │ │ │ │ ├── ContentPanel.astro │ │ │ │ ├── EditLink.astro │ │ │ │ ├── ExploreMore.astro │ │ │ │ ├── Footer.astro │ │ │ │ ├── GuidesList.astro │ │ │ │ ├── Head.astro │ │ │ │ ├── Header.astro │ │ │ │ ├── Hero.astro │ │ │ │ ├── Image.astro │ │ │ │ ├── Keyboard.astro │ │ │ │ ├── Label.astro │ │ │ │ ├── MarkdownContent.astro │ │ │ │ ├── MobileMenuToggle.astro │ │ │ │ ├── OpenPageDropdown/ │ │ │ │ │ ├── OpenPageDropdown.module.scss │ │ │ │ │ └── OpenPageDropdown.tsx │ │ │ │ ├── PageFrame.astro │ │ │ │ ├── PageSidebar.astro │ │ │ │ ├── PageTitle.astro │ │ │ │ ├── Pagination.astro │ │ │ │ ├── PostHog.astro │ │ │ │ ├── SandboxDiagram.astro │ │ │ │ ├── Search.jsx │ │ │ │ ├── Sidebar.astro │ │ │ │ ├── SidebarSublist.astro │ │ │ │ ├── TableOfContent/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ └── starlight-toc.ts │ │ │ │ ├── TableOfContents.astro │ │ │ │ ├── TableOfContentsList.astro │ │ │ │ ├── ThemeProvider.astro │ │ │ │ ├── ThemeSelect.astro │ │ │ │ ├── TwoColumnContent.astro │ │ │ │ ├── Version.astro │ │ │ │ ├── buttons/ │ │ │ │ │ ├── Button.module.scss │ │ │ │ │ ├── CopyButton.tsx │ │ │ │ │ └── LinkButton.tsx │ │ │ │ ├── cards/ │ │ │ │ │ ├── Card.astro │ │ │ │ │ ├── CardGrid.astro │ │ │ │ │ ├── ImageCard.astro │ │ │ │ │ ├── LinkCard.astro │ │ │ │ │ └── TitleCard.astro │ │ │ │ ├── menu/ │ │ │ │ │ ├── LocaleSelector.module.scss │ │ │ │ │ ├── LocaleSelector.tsx │ │ │ │ │ └── SideNavLinks.tsx │ │ │ │ └── table/ │ │ │ │ ├── Table.astro │ │ │ │ └── TableRow.astro │ │ │ ├── content/ │ │ │ │ ├── config.ts │ │ │ │ ├── docs/ │ │ │ │ │ ├── en/ │ │ │ │ │ │ ├── 404.md │ │ │ │ │ │ ├── api-keys.mdx │ │ │ │ │ │ ├── architecture.mdx │ │ │ │ │ │ ├── audit-logs.mdx │ │ │ │ │ │ ├── billing.mdx │ │ │ │ │ │ ├── computer-use.mdx │ │ │ │ │ │ ├── configuration.mdx │ │ │ │ │ │ ├── custom-preview-proxy.mdx │ │ │ │ │ │ ├── declarative-builder.mdx │ │ │ │ │ │ ├── experimental/ │ │ │ │ │ │ │ └── otel-collection.mdx │ │ │ │ │ │ ├── file-system-operations.mdx │ │ │ │ │ │ ├── getting-started.mdx │ │ │ │ │ │ ├── git-operations.mdx │ │ │ │ │ │ ├── go-sdk/ │ │ │ │ │ │ │ ├── daytona.mdx │ │ │ │ │ │ │ ├── errors.mdx │ │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ │ ├── options.mdx │ │ │ │ │ │ │ └── types.mdx │ │ │ │ │ │ ├── guides/ │ │ │ │ │ │ │ ├── agentkit/ │ │ │ │ │ │ │ │ └── inngest-agentkit-coding-agent.mdx │ │ │ │ │ │ │ ├── claude/ │ │ │ │ │ │ │ │ ├── claude-agent-sdk-connect-service-sandbox.mdx │ │ │ │ │ │ │ │ ├── claude-agent-sdk-interactive-terminal-sandbox.mdx │ │ │ │ │ │ │ │ ├── claude-code-run-cli-sandbox.mdx │ │ │ │ │ │ │ │ ├── claude-code-run-tasks-stream-logs-sandbox.mdx │ │ │ │ │ │ │ │ └── index.mdx │ │ │ │ │ │ │ ├── codex/ │ │ │ │ │ │ │ │ └── codex-sdk-interactive-terminal-sandbox.mdx │ │ │ │ │ │ │ ├── data-analysis-with-ai.mdx │ │ │ │ │ │ │ ├── google-adk-code-generator.mdx │ │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ │ ├── langchain/ │ │ │ │ │ │ │ │ └── langchain-data-analysis.mdx │ │ │ │ │ │ │ ├── letta-code/ │ │ │ │ │ │ │ │ └── letta-code-agent.mdx │ │ │ │ │ │ │ ├── mastra/ │ │ │ │ │ │ │ │ └── mastra-coding-agent.mdx │ │ │ │ │ │ │ ├── openclaw/ │ │ │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ │ │ ├── openclaw-run-secure-sandbox.mdx │ │ │ │ │ │ │ │ └── openclaw-sdk-sandbox.mdx │ │ │ │ │ │ │ ├── opencode/ │ │ │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ │ │ ├── opencode-plugin.mdx │ │ │ │ │ │ │ │ ├── opencode-sdk-agent.mdx │ │ │ │ │ │ │ │ └── opencode-web-agent.mdx │ │ │ │ │ │ │ ├── reinforcement-learning/ │ │ │ │ │ │ │ │ └── trl-grpo-training.mdx │ │ │ │ │ │ │ └── rlm/ │ │ │ │ │ │ │ ├── dspy-rlms.mdx │ │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ │ └── recursive-language-models.mdx │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ ├── language-server-protocol.mdx │ │ │ │ │ │ ├── limits.mdx │ │ │ │ │ │ ├── linked-accounts.mdx │ │ │ │ │ │ ├── log-streaming.mdx │ │ │ │ │ │ ├── mcp.mdx │ │ │ │ │ │ ├── network-limits.mdx │ │ │ │ │ │ ├── organizations.mdx │ │ │ │ │ │ ├── oss-deployment.mdx │ │ │ │ │ │ ├── playground.mdx │ │ │ │ │ │ ├── preview.mdx │ │ │ │ │ │ ├── process-code-execution.mdx │ │ │ │ │ │ ├── pty.mdx │ │ │ │ │ │ ├── python-sdk/ │ │ │ │ │ │ │ ├── async/ │ │ │ │ │ │ │ │ ├── async-code-interpreter.mdx │ │ │ │ │ │ │ │ ├── async-computer-use.mdx │ │ │ │ │ │ │ │ ├── async-daytona.mdx │ │ │ │ │ │ │ │ ├── async-file-system.mdx │ │ │ │ │ │ │ │ ├── async-git.mdx │ │ │ │ │ │ │ │ ├── async-lsp-server.mdx │ │ │ │ │ │ │ │ ├── async-object-storage.mdx │ │ │ │ │ │ │ │ ├── async-process.mdx │ │ │ │ │ │ │ │ ├── async-sandbox.mdx │ │ │ │ │ │ │ │ ├── async-snapshot.mdx │ │ │ │ │ │ │ │ └── async-volume.mdx │ │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ │ ├── charts.mdx │ │ │ │ │ │ │ │ ├── errors.mdx │ │ │ │ │ │ │ │ └── image.mdx │ │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ │ └── sync/ │ │ │ │ │ │ │ ├── code-interpreter.mdx │ │ │ │ │ │ │ ├── computer-use.mdx │ │ │ │ │ │ │ ├── daytona.mdx │ │ │ │ │ │ │ ├── file-system.mdx │ │ │ │ │ │ │ ├── git.mdx │ │ │ │ │ │ │ ├── lsp-server.mdx │ │ │ │ │ │ │ ├── object-storage.mdx │ │ │ │ │ │ │ ├── process.mdx │ │ │ │ │ │ │ ├── sandbox.mdx │ │ │ │ │ │ │ ├── snapshot.mdx │ │ │ │ │ │ │ └── volume.mdx │ │ │ │ │ │ ├── regions.mdx │ │ │ │ │ │ ├── ruby-sdk/ │ │ │ │ │ │ │ ├── computer-use.mdx │ │ │ │ │ │ │ ├── config.mdx │ │ │ │ │ │ │ ├── daytona.mdx │ │ │ │ │ │ │ ├── file-system.mdx │ │ │ │ │ │ │ ├── git.mdx │ │ │ │ │ │ │ ├── image.mdx │ │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ │ ├── lsp-server.mdx │ │ │ │ │ │ │ ├── object-storage.mdx │ │ │ │ │ │ │ ├── process.mdx │ │ │ │ │ │ │ ├── sandbox.mdx │ │ │ │ │ │ │ ├── snapshot.mdx │ │ │ │ │ │ │ ├── volume-service.mdx │ │ │ │ │ │ │ └── volume.mdx │ │ │ │ │ │ ├── runners.mdx │ │ │ │ │ │ ├── sandboxes.mdx │ │ │ │ │ │ ├── security-exhibit.mdx │ │ │ │ │ │ ├── snapshots.mdx │ │ │ │ │ │ ├── ssh-access.mdx │ │ │ │ │ │ ├── tools/ │ │ │ │ │ │ │ ├── api.mdx │ │ │ │ │ │ │ └── cli.mdx │ │ │ │ │ │ ├── typescript-sdk/ │ │ │ │ │ │ │ ├── charts.mdx │ │ │ │ │ │ │ ├── code-interpreter.mdx │ │ │ │ │ │ │ ├── computer-use.mdx │ │ │ │ │ │ │ ├── daytona.mdx │ │ │ │ │ │ │ ├── errors.mdx │ │ │ │ │ │ │ ├── execute-response.mdx │ │ │ │ │ │ │ ├── file-system.mdx │ │ │ │ │ │ │ ├── git.mdx │ │ │ │ │ │ │ ├── image.mdx │ │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ │ ├── lsp-server.mdx │ │ │ │ │ │ │ ├── object-storage.mdx │ │ │ │ │ │ │ ├── process.mdx │ │ │ │ │ │ │ ├── pty-handle.mdx │ │ │ │ │ │ │ ├── pty.mdx │ │ │ │ │ │ │ ├── sandbox.mdx │ │ │ │ │ │ │ ├── snapshot.mdx │ │ │ │ │ │ │ └── volume.mdx │ │ │ │ │ │ ├── vnc-access.mdx │ │ │ │ │ │ ├── volumes.mdx │ │ │ │ │ │ ├── vpn-connections.mdx │ │ │ │ │ │ ├── web-terminal.mdx │ │ │ │ │ │ └── webhooks.mdx │ │ │ │ │ └── ja/ │ │ │ │ │ ├── 404.md │ │ │ │ │ ├── api-keys.mdx │ │ │ │ │ ├── audit-logs.mdx │ │ │ │ │ ├── billing.mdx │ │ │ │ │ ├── configuration.mdx │ │ │ │ │ ├── custom-domain-authentication.mdx │ │ │ │ │ ├── data-analysis-with-ai.mdx │ │ │ │ │ ├── declarative-builder.mdx │ │ │ │ │ ├── file-system-operations.mdx │ │ │ │ │ ├── getting-started.mdx │ │ │ │ │ ├── git-operations.mdx │ │ │ │ │ ├── index.mdx │ │ │ │ │ ├── language-server-protocol.mdx │ │ │ │ │ ├── limits.mdx │ │ │ │ │ ├── linked-accounts.mdx │ │ │ │ │ ├── log-streaming.mdx │ │ │ │ │ ├── mcp.mdx │ │ │ │ │ ├── organizations.mdx │ │ │ │ │ ├── preview-and-authentication.mdx │ │ │ │ │ ├── process-code-execution.mdx │ │ │ │ │ ├── python-sdk/ │ │ │ │ │ │ ├── async/ │ │ │ │ │ │ │ ├── async-computer-use.mdx │ │ │ │ │ │ │ ├── async-daytona.mdx │ │ │ │ │ │ │ ├── async-file-system.mdx │ │ │ │ │ │ │ ├── async-git.mdx │ │ │ │ │ │ │ ├── async-lsp-server.mdx │ │ │ │ │ │ │ ├── async-object-storage.mdx │ │ │ │ │ │ │ ├── async-sandbox.mdx │ │ │ │ │ │ │ ├── async-snapshot.mdx │ │ │ │ │ │ │ └── async-volume.mdx │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ ├── charts.mdx │ │ │ │ │ │ │ ├── errors.mdx │ │ │ │ │ │ │ └── image.mdx │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ └── sync/ │ │ │ │ │ │ ├── computer-use.mdx │ │ │ │ │ │ ├── daytona.mdx │ │ │ │ │ │ ├── file-system.mdx │ │ │ │ │ │ ├── git.mdx │ │ │ │ │ │ ├── lsp-server.mdx │ │ │ │ │ │ ├── object-storage.mdx │ │ │ │ │ │ ├── process.mdx │ │ │ │ │ │ ├── sandbox.mdx │ │ │ │ │ │ ├── snapshot.mdx │ │ │ │ │ │ └── volume.mdx │ │ │ │ │ ├── regions.mdx │ │ │ │ │ ├── sandbox-management.mdx │ │ │ │ │ ├── snapshots.mdx │ │ │ │ │ ├── tools/ │ │ │ │ │ │ ├── api.mdx │ │ │ │ │ │ └── cli.mdx │ │ │ │ │ ├── typescript-sdk/ │ │ │ │ │ │ ├── charts.mdx │ │ │ │ │ │ ├── computer-use.mdx │ │ │ │ │ │ ├── daytona.mdx │ │ │ │ │ │ ├── errors.mdx │ │ │ │ │ │ ├── execute-response.mdx │ │ │ │ │ │ ├── file-system.mdx │ │ │ │ │ │ ├── git.mdx │ │ │ │ │ │ ├── image.mdx │ │ │ │ │ │ ├── index.mdx │ │ │ │ │ │ ├── lsp-server.mdx │ │ │ │ │ │ ├── object-storage.mdx │ │ │ │ │ │ ├── process.mdx │ │ │ │ │ │ ├── sandbox.mdx │ │ │ │ │ │ ├── snapshot.mdx │ │ │ │ │ │ └── volume.mdx │ │ │ │ │ ├── volumes.mdx │ │ │ │ │ ├── web-terminal.mdx │ │ │ │ │ └── webhooks.mdx │ │ │ │ └── i18n/ │ │ │ │ ├── en.json │ │ │ │ └── ja.json │ │ │ ├── data/ │ │ │ │ └── i18n/ │ │ │ │ └── ja.json │ │ │ ├── env.d.ts │ │ │ ├── fonts/ │ │ │ │ ├── BerkeleyMono-Regular.otf │ │ │ │ └── font-face.css │ │ │ ├── i18n/ │ │ │ │ ├── generateI18nConfig.ts │ │ │ │ ├── generateI18nSchema.ts │ │ │ │ ├── loadTranslations.ts │ │ │ │ ├── routing.ts │ │ │ │ └── utils.ts │ │ │ ├── middleware.ts │ │ │ ├── pages/ │ │ │ │ ├── [...slug].astro │ │ │ │ └── index.astro │ │ │ ├── styles/ │ │ │ │ ├── _color.scss │ │ │ │ ├── _typography.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── components/ │ │ │ │ │ ├── burger-menu.scss │ │ │ │ │ ├── cards.scss │ │ │ │ │ ├── docs-footer.scss │ │ │ │ │ ├── markdown.scss │ │ │ │ │ ├── navbar.scss │ │ │ │ │ ├── page-frame.scss │ │ │ │ │ └── search.scss │ │ │ │ ├── init.scss │ │ │ │ ├── mixins.scss │ │ │ │ └── style.scss │ │ │ └── utils/ │ │ │ ├── md.js │ │ │ ├── navigation.ts │ │ │ └── redirects.ts │ │ ├── tailwind.config.js │ │ ├── tools/ │ │ │ ├── update-api-reference.js │ │ │ ├── update-cli-reference.js │ │ │ ├── update-llms.js │ │ │ └── update-search.js │ │ ├── tsconfig.json │ │ ├── vite-env.d.ts │ │ └── vite.config.js │ ├── otel-collector/ │ │ ├── Dockerfile │ │ ├── builder-config.dev.yaml │ │ ├── builder-config.yaml │ │ ├── config.dev.yaml │ │ ├── config.yaml │ │ ├── exporter/ │ │ │ ├── config.go │ │ │ ├── exporter.go │ │ │ ├── factory.go │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── internal/ │ │ │ └── config/ │ │ │ └── resolver.go │ │ └── project.json │ ├── proxy/ │ │ ├── Dockerfile │ │ ├── cmd/ │ │ │ └── proxy/ │ │ │ ├── config/ │ │ │ │ └── config.go │ │ │ └── main.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── internal/ │ │ │ └── buildinfo.go │ │ ├── pkg/ │ │ │ └── proxy/ │ │ │ ├── auth.go │ │ │ ├── auth_callback.go │ │ │ ├── get_sandbox_build_target.go │ │ │ ├── get_sandbox_target.go │ │ │ ├── get_snapshot_target.go │ │ │ ├── proxy.go │ │ │ ├── retry.go │ │ │ └── warning_page.go │ │ └── project.json │ ├── runner/ │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── cmd/ │ │ │ └── runner/ │ │ │ ├── config/ │ │ │ │ └── config.go │ │ │ └── main.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── internal/ │ │ │ ├── buildinfo.go │ │ │ ├── constants/ │ │ │ │ └── auth.go │ │ │ ├── metrics/ │ │ │ │ └── collector.go │ │ │ └── util/ │ │ │ └── error_extract.go │ │ ├── packaging/ │ │ │ ├── deb/ │ │ │ │ └── DEBIAN/ │ │ │ │ ├── control │ │ │ │ ├── postinst │ │ │ │ ├── postrm │ │ │ │ └── prerm │ │ │ └── systemd/ │ │ │ └── daytona-runner.service │ │ ├── pkg/ │ │ │ ├── api/ │ │ │ │ ├── controllers/ │ │ │ │ │ ├── command_logs.go │ │ │ │ │ ├── health.go │ │ │ │ │ ├── info.go │ │ │ │ │ ├── proxy.go │ │ │ │ │ ├── sandbox.go │ │ │ │ │ └── snapshot.go │ │ │ │ ├── docs/ │ │ │ │ │ ├── docs.go │ │ │ │ │ ├── swagger.json │ │ │ │ │ └── swagger.yaml │ │ │ │ ├── dto/ │ │ │ │ │ ├── backup.go │ │ │ │ │ ├── image.go │ │ │ │ │ ├── info.go │ │ │ │ │ ├── registry.go │ │ │ │ │ ├── sandbox.go │ │ │ │ │ ├── snapshot.go │ │ │ │ │ └── volume.go │ │ │ │ ├── middlewares/ │ │ │ │ │ ├── auth.go │ │ │ │ │ └── recoverable_errors.go │ │ │ │ ├── server.go │ │ │ │ └── validator.go │ │ │ ├── apiclient/ │ │ │ │ └── api_client.go │ │ │ ├── cache/ │ │ │ │ ├── backup_info_cache.go │ │ │ │ └── snapshot_error_cache.go │ │ │ ├── common/ │ │ │ │ ├── container.go │ │ │ │ ├── daemon.go │ │ │ │ ├── errors.go │ │ │ │ ├── metrics.go │ │ │ │ ├── recovery.go │ │ │ │ ├── rsync.go │ │ │ │ └── storage.go │ │ │ ├── daemon/ │ │ │ │ ├── assets.go │ │ │ │ ├── static/ │ │ │ │ │ └── .gitkeep │ │ │ │ └── util.go │ │ │ ├── docker/ │ │ │ │ ├── backup.go │ │ │ │ ├── client.go │ │ │ │ ├── container_commit.go │ │ │ │ ├── container_configs.go │ │ │ │ ├── container_exec.go │ │ │ │ ├── container_inspect.go │ │ │ │ ├── create.go │ │ │ │ ├── daemon.go │ │ │ │ ├── daemon_version.go │ │ │ │ ├── destroy.go │ │ │ │ ├── image_build.go │ │ │ │ ├── image_exists.go │ │ │ │ ├── image_info.go │ │ │ │ ├── image_pull.go │ │ │ │ ├── image_push.go │ │ │ │ ├── image_remove.go │ │ │ │ ├── monitor.go │ │ │ │ ├── network.go │ │ │ │ ├── ping.go │ │ │ │ ├── recover.go │ │ │ │ ├── recover_from_storage_limit.go │ │ │ │ ├── registry_manifest.go │ │ │ │ ├── resize.go │ │ │ │ ├── snapshot_build.go │ │ │ │ ├── snapshot_pull.go │ │ │ │ ├── start.go │ │ │ │ ├── state.go │ │ │ │ ├── stop.go │ │ │ │ ├── tag_image.go │ │ │ │ ├── volumes_cleanup.go │ │ │ │ └── volumes_mountpaths.go │ │ │ ├── models/ │ │ │ │ ├── backup_info.go │ │ │ │ ├── enums/ │ │ │ │ │ ├── sandbox_state.go │ │ │ │ │ └── snapshot_state.go │ │ │ │ ├── recovery_type.go │ │ │ │ ├── sandbox_info.go │ │ │ │ └── service_info.go │ │ │ ├── netrules/ │ │ │ │ ├── assign.go │ │ │ │ ├── delete.go │ │ │ │ ├── limiter.go │ │ │ │ ├── netrules.go │ │ │ │ ├── set.go │ │ │ │ ├── unassign.go │ │ │ │ └── utils.go │ │ │ ├── runner/ │ │ │ │ ├── runner.go │ │ │ │ └── v2/ │ │ │ │ ├── executor/ │ │ │ │ │ ├── backup.go │ │ │ │ │ ├── executor.go │ │ │ │ │ ├── sandbox.go │ │ │ │ │ ├── snapshot.go │ │ │ │ │ └── types.go │ │ │ │ ├── healthcheck/ │ │ │ │ │ └── healthcheck.go │ │ │ │ └── poller/ │ │ │ │ └── poller.go │ │ │ ├── services/ │ │ │ │ ├── sandbox.go │ │ │ │ └── sandbox_sync.go │ │ │ ├── sshgateway/ │ │ │ │ ├── config.go │ │ │ │ └── service.go │ │ │ ├── storage/ │ │ │ │ ├── client.go │ │ │ │ └── minio_client.go │ │ │ └── telemetry/ │ │ │ └── filters/ │ │ │ └── not_found.go │ │ └── project.json │ ├── snapshot-manager/ │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── cmd/ │ │ │ └── main.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── internal/ │ │ │ ├── buildinfo.go │ │ │ ├── config/ │ │ │ │ └── config.go │ │ │ ├── logger/ │ │ │ │ └── logger.go │ │ │ └── server/ │ │ │ ├── config.go │ │ │ └── server.go │ │ └── project.json │ └── ssh-gateway/ │ ├── Dockerfile │ ├── README.md │ ├── go.mod │ ├── go.sum │ ├── main.go │ └── project.json ├── components.json ├── docker/ │ ├── README.md │ ├── dex/ │ │ └── config.yaml │ ├── docker-compose.build.override.yaml │ ├── docker-compose.yaml │ ├── otel/ │ │ └── otel-collector-config.yaml │ └── pgadmin4/ │ ├── pgpass │ └── servers.json ├── ecosystem.config.js ├── eslint.config.mjs ├── examples/ │ ├── go/ │ │ ├── auto_archive/ │ │ │ └── main.go │ │ ├── auto_delete/ │ │ │ └── main.go │ │ ├── build_logs/ │ │ │ └── main.go │ │ ├── code_interpreter/ │ │ │ └── main.go │ │ ├── computer_use/ │ │ │ └── main.go │ │ ├── exec_sessions/ │ │ │ └── main.go │ │ ├── filesystem/ │ │ │ └── main.go │ │ ├── fromimage/ │ │ │ └── main.go │ │ ├── git_operations/ │ │ │ └── main.go │ │ ├── lifecycle/ │ │ │ └── main.go │ │ ├── lsp_usage/ │ │ │ └── main.go │ │ ├── network_settings/ │ │ │ └── main.go │ │ ├── pagination/ │ │ │ └── main.go │ │ ├── pty_channel/ │ │ │ └── main.go │ │ ├── run_examples.sh │ │ ├── sandbox/ │ │ │ └── main.go │ │ ├── snapshots_simple/ │ │ │ └── main.go │ │ ├── snapshots_withlogstreaming/ │ │ │ └── main.go │ │ ├── stream_logs/ │ │ │ └── main.go │ │ ├── volumes/ │ │ │ └── main.go │ │ └── volumes_with_sandbox/ │ │ └── main.go │ ├── jupyter/ │ │ └── daytona.ipynb │ ├── otel-dashboards/ │ │ ├── grafana/ │ │ │ ├── README.md │ │ │ └── dashboard.json │ │ └── new-relic/ │ │ ├── README.md │ │ └── dashboard.json │ ├── python/ │ │ ├── auto-archive/ │ │ │ ├── _async/ │ │ │ │ └── auto_archive.py │ │ │ └── auto_archive.py │ │ ├── auto-delete/ │ │ │ ├── _async/ │ │ │ │ └── auto_delete.py │ │ │ └── auto_delete.py │ │ ├── charts/ │ │ │ ├── _async/ │ │ │ │ └── main.py │ │ │ └── main.py │ │ ├── declarative-image/ │ │ │ ├── _async/ │ │ │ │ └── main.py │ │ │ └── main.py │ │ ├── exec-command/ │ │ │ ├── _async/ │ │ │ │ ├── exec.py │ │ │ │ ├── exec_logs_async.py │ │ │ │ └── exec_session.py │ │ │ ├── exec.py │ │ │ ├── exec_logs_async.py │ │ │ └── exec_session.py │ │ ├── file-operations/ │ │ │ ├── _async/ │ │ │ │ └── main.py │ │ │ └── main.py │ │ ├── git-lsp/ │ │ │ ├── _async/ │ │ │ │ └── main.py │ │ │ └── main.py │ │ ├── lifecycle/ │ │ │ ├── _async/ │ │ │ │ └── lifecycle.py │ │ │ └── lifecycle.py │ │ ├── network-settings/ │ │ │ ├── _async/ │ │ │ │ └── main.py │ │ │ └── main.py │ │ ├── pagination/ │ │ │ ├── _async/ │ │ │ │ ├── sandbox.py │ │ │ │ └── snapshot.py │ │ │ ├── sandbox.py │ │ │ └── snapshot.py │ │ ├── pty/ │ │ │ ├── _async/ │ │ │ │ └── main.py │ │ │ └── main.py │ │ ├── region/ │ │ │ ├── _async/ │ │ │ │ └── main.py │ │ │ └── main.py │ │ └── volumes/ │ │ ├── _async/ │ │ │ └── volume.py │ │ └── volume.py │ ├── ruby/ │ │ ├── README.md │ │ ├── auto-archive/ │ │ │ └── auto_archive.rb │ │ ├── auto-delete/ │ │ │ └── auto_delete.rb │ │ ├── charts/ │ │ │ └── main.rb │ │ ├── declarative-image/ │ │ │ └── main.rb │ │ ├── exec-command/ │ │ │ ├── exec.rb │ │ │ └── exec_session.rb │ │ ├── file-operations/ │ │ │ └── main.rb │ │ ├── git-lsp/ │ │ │ └── main.rb │ │ ├── lifecycle/ │ │ │ └── lifecycle.rb │ │ ├── network-settings/ │ │ │ └── main.rb │ │ ├── pagination/ │ │ │ ├── sandbox.rb │ │ │ └── snapshot.rb │ │ ├── pty/ │ │ │ └── main.rb │ │ └── volumes/ │ │ └── volume.rb │ └── typescript/ │ ├── auto-archive/ │ │ └── index.ts │ ├── auto-delete/ │ │ └── index.ts │ ├── charts/ │ │ └── index.ts │ ├── declarative-image/ │ │ └── index.ts │ ├── exec-command/ │ │ └── index.ts │ ├── file-operations/ │ │ └── index.ts │ ├── git-lsp/ │ │ └── index.ts │ ├── lifecycle/ │ │ └── index.ts │ ├── network-settings/ │ │ └── index.ts │ ├── pagination/ │ │ ├── sandbox.ts │ │ └── snapshot.ts │ ├── pty/ │ │ └── index.ts │ ├── region/ │ │ └── index.tsx │ └── volumes/ │ └── index.ts ├── functions/ │ └── auth0/ │ ├── setCustomClaims.onExecutePostLogin.js │ ├── validateEmailUnused.onExecutePostLogin.js │ ├── validateEmailUnused.onExecutePreRegister.js │ └── verifyAliasEmail.onExecutePreRegister.js ├── go.work ├── guides/ │ ├── python/ │ │ ├── ai-data-analyst/ │ │ │ ├── litellm/ │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── ai_data_analyst.py │ │ │ │ ├── cafe_sales_data.csv │ │ │ │ └── pyproject.toml │ │ │ └── openai/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── ai_data_analyst.py │ │ │ ├── cafe_sales_data.csv │ │ │ └── pyproject.toml │ │ ├── dspy-rlms/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── daytona_interpreter.py │ │ │ ├── demo.py │ │ │ └── pyproject.toml │ │ ├── google-adk/ │ │ │ └── code-generator-agent/ │ │ │ └── gemini/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ └── main.py │ │ ├── langchain/ │ │ │ └── data-analysis/ │ │ │ └── anthropic/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ └── data_analysis.py │ │ ├── recursive-language-models/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── config.yaml │ │ │ ├── output_logging/ │ │ │ │ ├── __init__.py │ │ │ │ ├── console.py │ │ │ │ └── tree_logger.py │ │ │ ├── pyproject.toml │ │ │ ├── rlm/ │ │ │ │ ├── __init__.py │ │ │ │ ├── agent.py │ │ │ │ ├── budget.py │ │ │ │ ├── client.py │ │ │ │ ├── prompts.py │ │ │ │ ├── repl.py │ │ │ │ ├── sandbox.py │ │ │ │ └── types.py │ │ │ ├── run.py │ │ │ └── viewer/ │ │ │ └── index.html │ │ └── reinforcement-learning/ │ │ └── trl/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── pyproject.toml │ │ └── train.py │ └── typescript/ │ ├── agentkit-inngest/ │ │ └── coding-agent/ │ │ └── anthropic/ │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── ai-data-analyst/ │ │ └── openai/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── cafe_sales_data.csv │ │ ├── index.ts │ │ └── package.json │ ├── anthropic/ │ │ ├── multi-agent-claude-sdk/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── coding_agent.py │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ │ └── tsconfig.json │ │ └── single-claude-agent-sdk/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── coding_agent.py │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── letta-code/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── letta-session.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── mastra/ │ │ └── coding-agent/ │ │ └── openai/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── mastra/ │ │ │ ├── agents/ │ │ │ │ └── coding-agent.ts │ │ │ ├── index.ts │ │ │ └── tools/ │ │ │ ├── daytona/ │ │ │ │ ├── tools.ts │ │ │ │ └── utils.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── openai/ │ │ └── codex-sdk/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── agent/ │ │ │ ├── index.ts │ │ │ └── package.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── openclaw/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── openclaw.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ └── opencode/ │ ├── opencode-sdk/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── server.ts │ │ │ └── session.ts │ │ └── tsconfig.json │ └── opencode-web/ │ ├── .gitignore │ ├── README.md │ ├── package.json │ ├── src/ │ │ └── index.ts │ └── tsconfig.json ├── hack/ │ ├── computer-use/ │ │ ├── .dockerignore │ │ ├── Dockerfile │ │ └── build-computer-use-amd64.sh │ └── python-client/ │ ├── openapi-templates/ │ │ ├── __init__package.mustache │ │ ├── model_generic.mustache │ │ └── og__init__package.mustache │ └── postprocess.sh ├── images/ │ ├── sandbox/ │ │ ├── Dockerfile │ │ └── README.md │ └── sandbox-slim/ │ ├── Dockerfile │ └── README.md ├── jest.config.ts ├── jest.preset.js ├── libs/ │ ├── analytics-api-client/ │ │ ├── LICENSE │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .openapi-generator/ │ │ │ │ ├── FILES │ │ │ │ └── VERSION │ │ │ ├── .openapi-generator-ignore │ │ │ ├── api/ │ │ │ │ ├── telemetry-api.ts │ │ │ │ └── usage-api.ts │ │ │ ├── api.ts │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── configuration.ts │ │ │ ├── git_push.sh │ │ │ ├── index.ts │ │ │ └── models/ │ │ │ ├── index.ts │ │ │ ├── models-aggregated-usage.ts │ │ │ ├── models-log-entry.ts │ │ │ ├── models-metric-point.ts │ │ │ ├── models-sandbox-usage.ts │ │ │ ├── models-span.ts │ │ │ ├── models-trace-summary.ts │ │ │ ├── models-usage-chart-point.ts │ │ │ └── models-usage-period.ts │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ ├── api-client/ │ │ ├── LICENSE │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .openapi-generator/ │ │ │ │ ├── FILES │ │ │ │ └── VERSION │ │ │ ├── .openapi-generator-ignore │ │ │ ├── api/ │ │ │ │ ├── admin-api.ts │ │ │ │ ├── api-keys-api.ts │ │ │ │ ├── audit-api.ts │ │ │ │ ├── config-api.ts │ │ │ │ ├── docker-registry-api.ts │ │ │ │ ├── health-api.ts │ │ │ │ ├── jobs-api.ts │ │ │ │ ├── object-storage-api.ts │ │ │ │ ├── organizations-api.ts │ │ │ │ ├── preview-api.ts │ │ │ │ ├── regions-api.ts │ │ │ │ ├── runners-api.ts │ │ │ │ ├── sandbox-api.ts │ │ │ │ ├── snapshots-api.ts │ │ │ │ ├── toolbox-api.ts │ │ │ │ ├── users-api.ts │ │ │ │ ├── volumes-api.ts │ │ │ │ ├── webhooks-api.ts │ │ │ │ └── workspace-api.ts │ │ │ ├── api.ts │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── configuration.ts │ │ │ ├── git_push.sh │ │ │ ├── index.ts │ │ │ └── models/ │ │ │ ├── account-provider.ts │ │ │ ├── admin-create-runner.ts │ │ │ ├── announcement.ts │ │ │ ├── api-key-list.ts │ │ │ ├── api-key-response.ts │ │ │ ├── audit-log.ts │ │ │ ├── build-info.ts │ │ │ ├── command.ts │ │ │ ├── completion-context.ts │ │ │ ├── completion-item.ts │ │ │ ├── completion-list.ts │ │ │ ├── compressed-screenshot-response.ts │ │ │ ├── computer-use-start-response.ts │ │ │ ├── computer-use-status-response.ts │ │ │ ├── computer-use-stop-response.ts │ │ │ ├── create-api-key.ts │ │ │ ├── create-build-info.ts │ │ │ ├── create-docker-registry.ts │ │ │ ├── create-linked-account.ts │ │ │ ├── create-organization-invitation.ts │ │ │ ├── create-organization-quota.ts │ │ │ ├── create-organization-role.ts │ │ │ ├── create-organization.ts │ │ │ ├── create-region-response.ts │ │ │ ├── create-region.ts │ │ │ ├── create-runner-response.ts │ │ │ ├── create-runner.ts │ │ │ ├── create-sandbox.ts │ │ │ ├── create-session-request.ts │ │ │ ├── create-snapshot.ts │ │ │ ├── create-user.ts │ │ │ ├── create-volume.ts │ │ │ ├── create-workspace.ts │ │ │ ├── daytona-configuration.ts │ │ │ ├── display-info-response.ts │ │ │ ├── docker-registry.ts │ │ │ ├── download-files.ts │ │ │ ├── execute-request.ts │ │ │ ├── execute-response.ts │ │ │ ├── file-info.ts │ │ │ ├── file-status.ts │ │ │ ├── git-add-request.ts │ │ │ ├── git-branch-request.ts │ │ │ ├── git-checkout-request.ts │ │ │ ├── git-clone-request.ts │ │ │ ├── git-commit-info.ts │ │ │ ├── git-commit-request.ts │ │ │ ├── git-commit-response.ts │ │ │ ├── git-delete-branch-request.ts │ │ │ ├── git-repo-request.ts │ │ │ ├── git-status.ts │ │ │ ├── health-controller-check200-response-info-value.ts │ │ │ ├── health-controller-check200-response.ts │ │ │ ├── health-controller-check503-response.ts │ │ │ ├── index.ts │ │ │ ├── job-status.ts │ │ │ ├── job-type.ts │ │ │ ├── job.ts │ │ │ ├── keyboard-hotkey-request.ts │ │ │ ├── keyboard-press-request.ts │ │ │ ├── keyboard-type-request.ts │ │ │ ├── list-branch-response.ts │ │ │ ├── log-entry.ts │ │ │ ├── lsp-completion-params.ts │ │ │ ├── lsp-document-request.ts │ │ │ ├── lsp-location.ts │ │ │ ├── lsp-server-request.ts │ │ │ ├── lsp-symbol.ts │ │ │ ├── match.ts │ │ │ ├── metric-data-point.ts │ │ │ ├── metric-series.ts │ │ │ ├── metrics-response.ts │ │ │ ├── mouse-click-request.ts │ │ │ ├── mouse-click-response.ts │ │ │ ├── mouse-drag-request.ts │ │ │ ├── mouse-drag-response.ts │ │ │ ├── mouse-move-request.ts │ │ │ ├── mouse-move-response.ts │ │ │ ├── mouse-position.ts │ │ │ ├── mouse-scroll-request.ts │ │ │ ├── mouse-scroll-response.ts │ │ │ ├── oidc-config.ts │ │ │ ├── organization-invitation.ts │ │ │ ├── organization-role.ts │ │ │ ├── organization-sandbox-default-limited-network-egress.ts │ │ │ ├── organization-suspension.ts │ │ │ ├── organization-usage-overview.ts │ │ │ ├── organization-user.ts │ │ │ ├── organization.ts │ │ │ ├── otel-config.ts │ │ │ ├── paginated-audit-logs.ts │ │ │ ├── paginated-jobs.ts │ │ │ ├── paginated-logs.ts │ │ │ ├── paginated-sandboxes.ts │ │ │ ├── paginated-snapshots.ts │ │ │ ├── paginated-traces.ts │ │ │ ├── poll-jobs-response.ts │ │ │ ├── port-preview-url.ts │ │ │ ├── position.ts │ │ │ ├── posthog-config.ts │ │ │ ├── process-errors-response.ts │ │ │ ├── process-logs-response.ts │ │ │ ├── process-restart-response.ts │ │ │ ├── process-status-response.ts │ │ │ ├── project-dir-response.ts │ │ │ ├── pty-create-request.ts │ │ │ ├── pty-create-response.ts │ │ │ ├── pty-list-response.ts │ │ │ ├── pty-resize-request.ts │ │ │ ├── pty-session-info.ts │ │ │ ├── range.ts │ │ │ ├── rate-limit-config.ts │ │ │ ├── rate-limit-entry.ts │ │ │ ├── regenerate-api-key-response.ts │ │ │ ├── region-quota.ts │ │ │ ├── region-screenshot-response.ts │ │ │ ├── region-type.ts │ │ │ ├── region-usage-overview.ts │ │ │ ├── region.ts │ │ │ ├── registry-push-access-dto.ts │ │ │ ├── replace-request.ts │ │ │ ├── replace-result.ts │ │ │ ├── resize-sandbox.ts │ │ │ ├── runner-full.ts │ │ │ ├── runner-health-metrics.ts │ │ │ ├── runner-healthcheck.ts │ │ │ ├── runner-service-health.ts │ │ │ ├── runner-snapshot-dto.ts │ │ │ ├── runner-state.ts │ │ │ ├── runner.ts │ │ │ ├── sandbox-class.ts │ │ │ ├── sandbox-desired-state.ts │ │ │ ├── sandbox-info.ts │ │ │ ├── sandbox-labels.ts │ │ │ ├── sandbox-state.ts │ │ │ ├── sandbox-volume.ts │ │ │ ├── sandbox.ts │ │ │ ├── screenshot-response.ts │ │ │ ├── search-files-response.ts │ │ │ ├── send-webhook-dto.ts │ │ │ ├── session-execute-request.ts │ │ │ ├── session-execute-response.ts │ │ │ ├── session.ts │ │ │ ├── set-snapshot-general-status-dto.ts │ │ │ ├── signed-port-preview-url.ts │ │ │ ├── snapshot-dto.ts │ │ │ ├── snapshot-manager-credentials.ts │ │ │ ├── snapshot-state.ts │ │ │ ├── ssh-access-dto.ts │ │ │ ├── ssh-access-validation-dto.ts │ │ │ ├── storage-access-dto.ts │ │ │ ├── toolbox-proxy-url.ts │ │ │ ├── trace-span.ts │ │ │ ├── trace-summary.ts │ │ │ ├── update-docker-registry.ts │ │ │ ├── update-job-status.ts │ │ │ ├── update-organization-default-region.ts │ │ │ ├── update-organization-invitation.ts │ │ │ ├── update-organization-member-access.ts │ │ │ ├── update-organization-quota.ts │ │ │ ├── update-organization-region-quota.ts │ │ │ ├── update-organization-role.ts │ │ │ ├── update-region.ts │ │ │ ├── update-sandbox-state-dto.ts │ │ │ ├── url.ts │ │ │ ├── user-home-dir-response.ts │ │ │ ├── user-public-key.ts │ │ │ ├── user.ts │ │ │ ├── volume-dto.ts │ │ │ ├── volume-state.ts │ │ │ ├── webhook-app-portal-access.ts │ │ │ ├── webhook-controller-get-status200-response.ts │ │ │ ├── webhook-event.ts │ │ │ ├── webhook-initialization-status.ts │ │ │ ├── windows-response.ts │ │ │ ├── work-dir-response.ts │ │ │ ├── workspace-port-preview-url.ts │ │ │ └── workspace.ts │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ ├── api-client-go/ │ │ ├── .gitignore │ │ ├── .openapi-generator/ │ │ │ ├── FILES │ │ │ └── VERSION │ │ ├── .openapi-generator-ignore │ │ ├── LICENSE │ │ ├── api/ │ │ │ └── openapi.yaml │ │ ├── api_admin.go │ │ ├── api_api_keys.go │ │ ├── api_audit.go │ │ ├── api_config.go │ │ ├── api_docker_registry.go │ │ ├── api_health.go │ │ ├── api_jobs.go │ │ ├── api_object_storage.go │ │ ├── api_organizations.go │ │ ├── api_preview.go │ │ ├── api_regions.go │ │ ├── api_runners.go │ │ ├── api_sandbox.go │ │ ├── api_snapshots.go │ │ ├── api_toolbox.go │ │ ├── api_users.go │ │ ├── api_volumes.go │ │ ├── api_webhooks.go │ │ ├── api_workspace.go │ │ ├── client.go │ │ ├── configuration.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── model_account_provider.go │ │ ├── model_admin_create_runner.go │ │ ├── model_announcement.go │ │ ├── model_api_key_list.go │ │ ├── model_api_key_response.go │ │ ├── model_audit_log.go │ │ ├── model_build_info.go │ │ ├── model_command.go │ │ ├── model_completion_context.go │ │ ├── model_completion_item.go │ │ ├── model_completion_list.go │ │ ├── model_compressed_screenshot_response.go │ │ ├── model_computer_use_start_response.go │ │ ├── model_computer_use_status_response.go │ │ ├── model_computer_use_stop_response.go │ │ ├── model_create_api_key.go │ │ ├── model_create_build_info.go │ │ ├── model_create_docker_registry.go │ │ ├── model_create_linked_account.go │ │ ├── model_create_organization.go │ │ ├── model_create_organization_invitation.go │ │ ├── model_create_organization_quota.go │ │ ├── model_create_organization_role.go │ │ ├── model_create_region.go │ │ ├── model_create_region_response.go │ │ ├── model_create_runner.go │ │ ├── model_create_runner_response.go │ │ ├── model_create_sandbox.go │ │ ├── model_create_session_request.go │ │ ├── model_create_snapshot.go │ │ ├── model_create_user.go │ │ ├── model_create_volume.go │ │ ├── model_create_workspace.go │ │ ├── model_daytona_configuration.go │ │ ├── model_display_info_response.go │ │ ├── model_docker_registry.go │ │ ├── model_download_files.go │ │ ├── model_execute_request.go │ │ ├── model_execute_response.go │ │ ├── model_file_info.go │ │ ├── model_file_status.go │ │ ├── model_git_add_request.go │ │ ├── model_git_branch_request.go │ │ ├── model_git_checkout_request.go │ │ ├── model_git_clone_request.go │ │ ├── model_git_commit_info.go │ │ ├── model_git_commit_request.go │ │ ├── model_git_commit_response.go │ │ ├── model_git_delete_branch_request.go │ │ ├── model_git_repo_request.go │ │ ├── model_git_status.go │ │ ├── model_health_controller_check_200_response.go │ │ ├── model_health_controller_check_200_response_info_value.go │ │ ├── model_health_controller_check_503_response.go │ │ ├── model_job.go │ │ ├── model_job_status.go │ │ ├── model_job_type.go │ │ ├── model_keyboard_hotkey_request.go │ │ ├── model_keyboard_press_request.go │ │ ├── model_keyboard_type_request.go │ │ ├── model_list_branch_response.go │ │ ├── model_log_entry.go │ │ ├── model_lsp_completion_params.go │ │ ├── model_lsp_document_request.go │ │ ├── model_lsp_location.go │ │ ├── model_lsp_server_request.go │ │ ├── model_lsp_symbol.go │ │ ├── model_match.go │ │ ├── model_metric_data_point.go │ │ ├── model_metric_series.go │ │ ├── model_metrics_response.go │ │ ├── model_mouse_click_request.go │ │ ├── model_mouse_click_response.go │ │ ├── model_mouse_drag_request.go │ │ ├── model_mouse_drag_response.go │ │ ├── model_mouse_move_request.go │ │ ├── model_mouse_move_response.go │ │ ├── model_mouse_position.go │ │ ├── model_mouse_scroll_request.go │ │ ├── model_mouse_scroll_response.go │ │ ├── model_oidc_config.go │ │ ├── model_organization.go │ │ ├── model_organization_invitation.go │ │ ├── model_organization_role.go │ │ ├── model_organization_sandbox_default_limited_network_egress.go │ │ ├── model_organization_suspension.go │ │ ├── model_organization_usage_overview.go │ │ ├── model_organization_user.go │ │ ├── model_otel_config.go │ │ ├── model_paginated_audit_logs.go │ │ ├── model_paginated_jobs.go │ │ ├── model_paginated_logs.go │ │ ├── model_paginated_sandboxes.go │ │ ├── model_paginated_snapshots.go │ │ ├── model_paginated_traces.go │ │ ├── model_poll_jobs_response.go │ │ ├── model_port_preview_url.go │ │ ├── model_position.go │ │ ├── model_posthog_config.go │ │ ├── model_process_errors_response.go │ │ ├── model_process_logs_response.go │ │ ├── model_process_restart_response.go │ │ ├── model_process_status_response.go │ │ ├── model_project_dir_response.go │ │ ├── model_pty_create_request.go │ │ ├── model_pty_create_response.go │ │ ├── model_pty_list_response.go │ │ ├── model_pty_resize_request.go │ │ ├── model_pty_session_info.go │ │ ├── model_range.go │ │ ├── model_rate_limit_config.go │ │ ├── model_rate_limit_entry.go │ │ ├── model_regenerate_api_key_response.go │ │ ├── model_region.go │ │ ├── model_region_quota.go │ │ ├── model_region_screenshot_response.go │ │ ├── model_region_type.go │ │ ├── model_region_usage_overview.go │ │ ├── model_registry_push_access_dto.go │ │ ├── model_replace_request.go │ │ ├── model_replace_result.go │ │ ├── model_resize_sandbox.go │ │ ├── model_runner.go │ │ ├── model_runner_full.go │ │ ├── model_runner_health_metrics.go │ │ ├── model_runner_healthcheck.go │ │ ├── model_runner_service_health.go │ │ ├── model_runner_snapshot_dto.go │ │ ├── model_runner_state.go │ │ ├── model_sandbox.go │ │ ├── model_sandbox_class.go │ │ ├── model_sandbox_desired_state.go │ │ ├── model_sandbox_info.go │ │ ├── model_sandbox_labels.go │ │ ├── model_sandbox_state.go │ │ ├── model_sandbox_volume.go │ │ ├── model_screenshot_response.go │ │ ├── model_search_files_response.go │ │ ├── model_send_webhook_dto.go │ │ ├── model_session.go │ │ ├── model_session_execute_request.go │ │ ├── model_session_execute_response.go │ │ ├── model_set_snapshot_general_status_dto.go │ │ ├── model_signed_port_preview_url.go │ │ ├── model_snapshot_dto.go │ │ ├── model_snapshot_manager_credentials.go │ │ ├── model_snapshot_state.go │ │ ├── model_ssh_access_dto.go │ │ ├── model_ssh_access_validation_dto.go │ │ ├── model_storage_access_dto.go │ │ ├── model_toolbox_proxy_url.go │ │ ├── model_trace_span.go │ │ ├── model_trace_summary.go │ │ ├── model_update_docker_registry.go │ │ ├── model_update_job_status.go │ │ ├── model_update_organization_default_region.go │ │ ├── model_update_organization_invitation.go │ │ ├── model_update_organization_member_access.go │ │ ├── model_update_organization_quota.go │ │ ├── model_update_organization_region_quota.go │ │ ├── model_update_organization_role.go │ │ ├── model_update_region.go │ │ ├── model_update_sandbox_state_dto.go │ │ ├── model_url.go │ │ ├── model_user.go │ │ ├── model_user_home_dir_response.go │ │ ├── model_user_public_key.go │ │ ├── model_volume_dto.go │ │ ├── model_volume_state.go │ │ ├── model_webhook_app_portal_access.go │ │ ├── model_webhook_controller_get_status_200_response.go │ │ ├── model_webhook_event.go │ │ ├── model_webhook_initialization_status.go │ │ ├── model_windows_response.go │ │ ├── model_work_dir_response.go │ │ ├── model_workspace.go │ │ ├── model_workspace_port_preview_url.go │ │ ├── project.json │ │ ├── response.go │ │ └── utils.go │ ├── api-client-python/ │ │ ├── .gitignore │ │ ├── .openapi-generator/ │ │ │ ├── FILES │ │ │ └── VERSION │ │ ├── .openapi-generator-ignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── daytona_api_client/ │ │ │ ├── __init__.py │ │ │ ├── api/ │ │ │ │ ├── __init__.py │ │ │ │ ├── admin_api.py │ │ │ │ ├── api_keys_api.py │ │ │ │ ├── audit_api.py │ │ │ │ ├── config_api.py │ │ │ │ ├── docker_registry_api.py │ │ │ │ ├── health_api.py │ │ │ │ ├── jobs_api.py │ │ │ │ ├── object_storage_api.py │ │ │ │ ├── organizations_api.py │ │ │ │ ├── preview_api.py │ │ │ │ ├── regions_api.py │ │ │ │ ├── runners_api.py │ │ │ │ ├── sandbox_api.py │ │ │ │ ├── snapshots_api.py │ │ │ │ ├── toolbox_api.py │ │ │ │ ├── users_api.py │ │ │ │ ├── volumes_api.py │ │ │ │ ├── webhooks_api.py │ │ │ │ └── workspace_api.py │ │ │ ├── api_client.py │ │ │ ├── api_response.py │ │ │ ├── configuration.py │ │ │ ├── exceptions.py │ │ │ ├── models/ │ │ │ │ ├── __init__.py │ │ │ │ ├── account_provider.py │ │ │ │ ├── admin_create_runner.py │ │ │ │ ├── announcement.py │ │ │ │ ├── api_key_list.py │ │ │ │ ├── api_key_response.py │ │ │ │ ├── audit_log.py │ │ │ │ ├── build_info.py │ │ │ │ ├── command.py │ │ │ │ ├── completion_context.py │ │ │ │ ├── completion_item.py │ │ │ │ ├── completion_list.py │ │ │ │ ├── compressed_screenshot_response.py │ │ │ │ ├── computer_use_start_response.py │ │ │ │ ├── computer_use_status_response.py │ │ │ │ ├── computer_use_stop_response.py │ │ │ │ ├── create_api_key.py │ │ │ │ ├── create_build_info.py │ │ │ │ ├── create_docker_registry.py │ │ │ │ ├── create_linked_account.py │ │ │ │ ├── create_organization.py │ │ │ │ ├── create_organization_invitation.py │ │ │ │ ├── create_organization_quota.py │ │ │ │ ├── create_organization_role.py │ │ │ │ ├── create_region.py │ │ │ │ ├── create_region_response.py │ │ │ │ ├── create_runner.py │ │ │ │ ├── create_runner_response.py │ │ │ │ ├── create_sandbox.py │ │ │ │ ├── create_session_request.py │ │ │ │ ├── create_snapshot.py │ │ │ │ ├── create_user.py │ │ │ │ ├── create_volume.py │ │ │ │ ├── create_workspace.py │ │ │ │ ├── daytona_configuration.py │ │ │ │ ├── display_info_response.py │ │ │ │ ├── docker_registry.py │ │ │ │ ├── download_files.py │ │ │ │ ├── execute_request.py │ │ │ │ ├── execute_response.py │ │ │ │ ├── file_info.py │ │ │ │ ├── file_status.py │ │ │ │ ├── git_add_request.py │ │ │ │ ├── git_branch_request.py │ │ │ │ ├── git_checkout_request.py │ │ │ │ ├── git_clone_request.py │ │ │ │ ├── git_commit_info.py │ │ │ │ ├── git_commit_request.py │ │ │ │ ├── git_commit_response.py │ │ │ │ ├── git_delete_branch_request.py │ │ │ │ ├── git_repo_request.py │ │ │ │ ├── git_status.py │ │ │ │ ├── health_controller_check200_response.py │ │ │ │ ├── health_controller_check200_response_info_value.py │ │ │ │ ├── health_controller_check503_response.py │ │ │ │ ├── job.py │ │ │ │ ├── job_status.py │ │ │ │ ├── job_type.py │ │ │ │ ├── keyboard_hotkey_request.py │ │ │ │ ├── keyboard_press_request.py │ │ │ │ ├── keyboard_type_request.py │ │ │ │ ├── list_branch_response.py │ │ │ │ ├── log_entry.py │ │ │ │ ├── lsp_completion_params.py │ │ │ │ ├── lsp_document_request.py │ │ │ │ ├── lsp_location.py │ │ │ │ ├── lsp_server_request.py │ │ │ │ ├── lsp_symbol.py │ │ │ │ ├── match.py │ │ │ │ ├── metric_data_point.py │ │ │ │ ├── metric_series.py │ │ │ │ ├── metrics_response.py │ │ │ │ ├── mouse_click_request.py │ │ │ │ ├── mouse_click_response.py │ │ │ │ ├── mouse_drag_request.py │ │ │ │ ├── mouse_drag_response.py │ │ │ │ ├── mouse_move_request.py │ │ │ │ ├── mouse_move_response.py │ │ │ │ ├── mouse_position.py │ │ │ │ ├── mouse_scroll_request.py │ │ │ │ ├── mouse_scroll_response.py │ │ │ │ ├── oidc_config.py │ │ │ │ ├── organization.py │ │ │ │ ├── organization_invitation.py │ │ │ │ ├── organization_role.py │ │ │ │ ├── organization_sandbox_default_limited_network_egress.py │ │ │ │ ├── organization_suspension.py │ │ │ │ ├── organization_usage_overview.py │ │ │ │ ├── organization_user.py │ │ │ │ ├── otel_config.py │ │ │ │ ├── paginated_audit_logs.py │ │ │ │ ├── paginated_jobs.py │ │ │ │ ├── paginated_logs.py │ │ │ │ ├── paginated_sandboxes.py │ │ │ │ ├── paginated_snapshots.py │ │ │ │ ├── paginated_traces.py │ │ │ │ ├── poll_jobs_response.py │ │ │ │ ├── port_preview_url.py │ │ │ │ ├── position.py │ │ │ │ ├── posthog_config.py │ │ │ │ ├── process_errors_response.py │ │ │ │ ├── process_logs_response.py │ │ │ │ ├── process_restart_response.py │ │ │ │ ├── process_status_response.py │ │ │ │ ├── project_dir_response.py │ │ │ │ ├── pty_create_request.py │ │ │ │ ├── pty_create_response.py │ │ │ │ ├── pty_list_response.py │ │ │ │ ├── pty_resize_request.py │ │ │ │ ├── pty_session_info.py │ │ │ │ ├── range.py │ │ │ │ ├── rate_limit_config.py │ │ │ │ ├── rate_limit_entry.py │ │ │ │ ├── regenerate_api_key_response.py │ │ │ │ ├── region.py │ │ │ │ ├── region_quota.py │ │ │ │ ├── region_screenshot_response.py │ │ │ │ ├── region_type.py │ │ │ │ ├── region_usage_overview.py │ │ │ │ ├── registry_push_access_dto.py │ │ │ │ ├── replace_request.py │ │ │ │ ├── replace_result.py │ │ │ │ ├── resize_sandbox.py │ │ │ │ ├── runner.py │ │ │ │ ├── runner_full.py │ │ │ │ ├── runner_health_metrics.py │ │ │ │ ├── runner_healthcheck.py │ │ │ │ ├── runner_service_health.py │ │ │ │ ├── runner_snapshot_dto.py │ │ │ │ ├── runner_state.py │ │ │ │ ├── sandbox.py │ │ │ │ ├── sandbox_class.py │ │ │ │ ├── sandbox_desired_state.py │ │ │ │ ├── sandbox_info.py │ │ │ │ ├── sandbox_labels.py │ │ │ │ ├── sandbox_state.py │ │ │ │ ├── sandbox_volume.py │ │ │ │ ├── screenshot_response.py │ │ │ │ ├── search_files_response.py │ │ │ │ ├── send_webhook_dto.py │ │ │ │ ├── session.py │ │ │ │ ├── session_execute_request.py │ │ │ │ ├── session_execute_response.py │ │ │ │ ├── set_snapshot_general_status_dto.py │ │ │ │ ├── signed_port_preview_url.py │ │ │ │ ├── snapshot_dto.py │ │ │ │ ├── snapshot_manager_credentials.py │ │ │ │ ├── snapshot_state.py │ │ │ │ ├── ssh_access_dto.py │ │ │ │ ├── ssh_access_validation_dto.py │ │ │ │ ├── storage_access_dto.py │ │ │ │ ├── toolbox_proxy_url.py │ │ │ │ ├── trace_span.py │ │ │ │ ├── trace_summary.py │ │ │ │ ├── update_docker_registry.py │ │ │ │ ├── update_job_status.py │ │ │ │ ├── update_organization_default_region.py │ │ │ │ ├── update_organization_invitation.py │ │ │ │ ├── update_organization_member_access.py │ │ │ │ ├── update_organization_quota.py │ │ │ │ ├── update_organization_region_quota.py │ │ │ │ ├── update_organization_role.py │ │ │ │ ├── update_region.py │ │ │ │ ├── update_sandbox_state_dto.py │ │ │ │ ├── url.py │ │ │ │ ├── user.py │ │ │ │ ├── user_home_dir_response.py │ │ │ │ ├── user_public_key.py │ │ │ │ ├── volume_dto.py │ │ │ │ ├── volume_state.py │ │ │ │ ├── webhook_app_portal_access.py │ │ │ │ ├── webhook_controller_get_status200_response.py │ │ │ │ ├── webhook_event.py │ │ │ │ ├── webhook_initialization_status.py │ │ │ │ ├── windows_response.py │ │ │ │ ├── work_dir_response.py │ │ │ │ ├── workspace.py │ │ │ │ └── workspace_port_preview_url.py │ │ │ ├── py.typed │ │ │ └── rest.py │ │ ├── project.json │ │ ├── pyproject.toml │ │ ├── requirements.txt │ │ ├── setup.cfg │ │ ├── setup.py │ │ ├── test-requirements.txt │ │ └── tox.ini │ ├── api-client-python-async/ │ │ ├── .gitignore │ │ ├── .openapi-generator/ │ │ │ ├── FILES │ │ │ └── VERSION │ │ ├── .openapi-generator-ignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── daytona_api_client_async/ │ │ │ ├── __init__.py │ │ │ ├── api/ │ │ │ │ ├── __init__.py │ │ │ │ ├── admin_api.py │ │ │ │ ├── api_keys_api.py │ │ │ │ ├── audit_api.py │ │ │ │ ├── config_api.py │ │ │ │ ├── docker_registry_api.py │ │ │ │ ├── health_api.py │ │ │ │ ├── jobs_api.py │ │ │ │ ├── object_storage_api.py │ │ │ │ ├── organizations_api.py │ │ │ │ ├── preview_api.py │ │ │ │ ├── regions_api.py │ │ │ │ ├── runners_api.py │ │ │ │ ├── sandbox_api.py │ │ │ │ ├── snapshots_api.py │ │ │ │ ├── toolbox_api.py │ │ │ │ ├── users_api.py │ │ │ │ ├── volumes_api.py │ │ │ │ ├── webhooks_api.py │ │ │ │ └── workspace_api.py │ │ │ ├── api_client.py │ │ │ ├── api_response.py │ │ │ ├── configuration.py │ │ │ ├── exceptions.py │ │ │ ├── models/ │ │ │ │ ├── __init__.py │ │ │ │ ├── account_provider.py │ │ │ │ ├── admin_create_runner.py │ │ │ │ ├── announcement.py │ │ │ │ ├── api_key_list.py │ │ │ │ ├── api_key_response.py │ │ │ │ ├── audit_log.py │ │ │ │ ├── build_info.py │ │ │ │ ├── command.py │ │ │ │ ├── completion_context.py │ │ │ │ ├── completion_item.py │ │ │ │ ├── completion_list.py │ │ │ │ ├── compressed_screenshot_response.py │ │ │ │ ├── computer_use_start_response.py │ │ │ │ ├── computer_use_status_response.py │ │ │ │ ├── computer_use_stop_response.py │ │ │ │ ├── create_api_key.py │ │ │ │ ├── create_build_info.py │ │ │ │ ├── create_docker_registry.py │ │ │ │ ├── create_linked_account.py │ │ │ │ ├── create_organization.py │ │ │ │ ├── create_organization_invitation.py │ │ │ │ ├── create_organization_quota.py │ │ │ │ ├── create_organization_role.py │ │ │ │ ├── create_region.py │ │ │ │ ├── create_region_response.py │ │ │ │ ├── create_runner.py │ │ │ │ ├── create_runner_response.py │ │ │ │ ├── create_sandbox.py │ │ │ │ ├── create_session_request.py │ │ │ │ ├── create_snapshot.py │ │ │ │ ├── create_user.py │ │ │ │ ├── create_volume.py │ │ │ │ ├── create_workspace.py │ │ │ │ ├── daytona_configuration.py │ │ │ │ ├── display_info_response.py │ │ │ │ ├── docker_registry.py │ │ │ │ ├── download_files.py │ │ │ │ ├── execute_request.py │ │ │ │ ├── execute_response.py │ │ │ │ ├── file_info.py │ │ │ │ ├── file_status.py │ │ │ │ ├── git_add_request.py │ │ │ │ ├── git_branch_request.py │ │ │ │ ├── git_checkout_request.py │ │ │ │ ├── git_clone_request.py │ │ │ │ ├── git_commit_info.py │ │ │ │ ├── git_commit_request.py │ │ │ │ ├── git_commit_response.py │ │ │ │ ├── git_delete_branch_request.py │ │ │ │ ├── git_repo_request.py │ │ │ │ ├── git_status.py │ │ │ │ ├── health_controller_check200_response.py │ │ │ │ ├── health_controller_check200_response_info_value.py │ │ │ │ ├── health_controller_check503_response.py │ │ │ │ ├── job.py │ │ │ │ ├── job_status.py │ │ │ │ ├── job_type.py │ │ │ │ ├── keyboard_hotkey_request.py │ │ │ │ ├── keyboard_press_request.py │ │ │ │ ├── keyboard_type_request.py │ │ │ │ ├── list_branch_response.py │ │ │ │ ├── log_entry.py │ │ │ │ ├── lsp_completion_params.py │ │ │ │ ├── lsp_document_request.py │ │ │ │ ├── lsp_location.py │ │ │ │ ├── lsp_server_request.py │ │ │ │ ├── lsp_symbol.py │ │ │ │ ├── match.py │ │ │ │ ├── metric_data_point.py │ │ │ │ ├── metric_series.py │ │ │ │ ├── metrics_response.py │ │ │ │ ├── mouse_click_request.py │ │ │ │ ├── mouse_click_response.py │ │ │ │ ├── mouse_drag_request.py │ │ │ │ ├── mouse_drag_response.py │ │ │ │ ├── mouse_move_request.py │ │ │ │ ├── mouse_move_response.py │ │ │ │ ├── mouse_position.py │ │ │ │ ├── mouse_scroll_request.py │ │ │ │ ├── mouse_scroll_response.py │ │ │ │ ├── oidc_config.py │ │ │ │ ├── organization.py │ │ │ │ ├── organization_invitation.py │ │ │ │ ├── organization_role.py │ │ │ │ ├── organization_sandbox_default_limited_network_egress.py │ │ │ │ ├── organization_suspension.py │ │ │ │ ├── organization_usage_overview.py │ │ │ │ ├── organization_user.py │ │ │ │ ├── otel_config.py │ │ │ │ ├── paginated_audit_logs.py │ │ │ │ ├── paginated_jobs.py │ │ │ │ ├── paginated_logs.py │ │ │ │ ├── paginated_sandboxes.py │ │ │ │ ├── paginated_snapshots.py │ │ │ │ ├── paginated_traces.py │ │ │ │ ├── poll_jobs_response.py │ │ │ │ ├── port_preview_url.py │ │ │ │ ├── position.py │ │ │ │ ├── posthog_config.py │ │ │ │ ├── process_errors_response.py │ │ │ │ ├── process_logs_response.py │ │ │ │ ├── process_restart_response.py │ │ │ │ ├── process_status_response.py │ │ │ │ ├── project_dir_response.py │ │ │ │ ├── pty_create_request.py │ │ │ │ ├── pty_create_response.py │ │ │ │ ├── pty_list_response.py │ │ │ │ ├── pty_resize_request.py │ │ │ │ ├── pty_session_info.py │ │ │ │ ├── range.py │ │ │ │ ├── rate_limit_config.py │ │ │ │ ├── rate_limit_entry.py │ │ │ │ ├── regenerate_api_key_response.py │ │ │ │ ├── region.py │ │ │ │ ├── region_quota.py │ │ │ │ ├── region_screenshot_response.py │ │ │ │ ├── region_type.py │ │ │ │ ├── region_usage_overview.py │ │ │ │ ├── registry_push_access_dto.py │ │ │ │ ├── replace_request.py │ │ │ │ ├── replace_result.py │ │ │ │ ├── resize_sandbox.py │ │ │ │ ├── runner.py │ │ │ │ ├── runner_full.py │ │ │ │ ├── runner_health_metrics.py │ │ │ │ ├── runner_healthcheck.py │ │ │ │ ├── runner_service_health.py │ │ │ │ ├── runner_snapshot_dto.py │ │ │ │ ├── runner_state.py │ │ │ │ ├── sandbox.py │ │ │ │ ├── sandbox_class.py │ │ │ │ ├── sandbox_desired_state.py │ │ │ │ ├── sandbox_info.py │ │ │ │ ├── sandbox_labels.py │ │ │ │ ├── sandbox_state.py │ │ │ │ ├── sandbox_volume.py │ │ │ │ ├── screenshot_response.py │ │ │ │ ├── search_files_response.py │ │ │ │ ├── send_webhook_dto.py │ │ │ │ ├── session.py │ │ │ │ ├── session_execute_request.py │ │ │ │ ├── session_execute_response.py │ │ │ │ ├── set_snapshot_general_status_dto.py │ │ │ │ ├── signed_port_preview_url.py │ │ │ │ ├── snapshot_dto.py │ │ │ │ ├── snapshot_manager_credentials.py │ │ │ │ ├── snapshot_state.py │ │ │ │ ├── ssh_access_dto.py │ │ │ │ ├── ssh_access_validation_dto.py │ │ │ │ ├── storage_access_dto.py │ │ │ │ ├── toolbox_proxy_url.py │ │ │ │ ├── trace_span.py │ │ │ │ ├── trace_summary.py │ │ │ │ ├── update_docker_registry.py │ │ │ │ ├── update_job_status.py │ │ │ │ ├── update_organization_default_region.py │ │ │ │ ├── update_organization_invitation.py │ │ │ │ ├── update_organization_member_access.py │ │ │ │ ├── update_organization_quota.py │ │ │ │ ├── update_organization_region_quota.py │ │ │ │ ├── update_organization_role.py │ │ │ │ ├── update_region.py │ │ │ │ ├── update_sandbox_state_dto.py │ │ │ │ ├── url.py │ │ │ │ ├── user.py │ │ │ │ ├── user_home_dir_response.py │ │ │ │ ├── user_public_key.py │ │ │ │ ├── volume_dto.py │ │ │ │ ├── volume_state.py │ │ │ │ ├── webhook_app_portal_access.py │ │ │ │ ├── webhook_controller_get_status200_response.py │ │ │ │ ├── webhook_event.py │ │ │ │ ├── webhook_initialization_status.py │ │ │ │ ├── windows_response.py │ │ │ │ ├── work_dir_response.py │ │ │ │ ├── workspace.py │ │ │ │ └── workspace_port_preview_url.py │ │ │ ├── py.typed │ │ │ └── rest.py │ │ ├── project.json │ │ ├── pyproject.toml │ │ ├── requirements.txt │ │ ├── setup.cfg │ │ ├── setup.py │ │ ├── test-requirements.txt │ │ └── tox.ini │ ├── api-client-ruby/ │ │ ├── .gitignore │ │ ├── .openapi-generator/ │ │ │ ├── FILES │ │ │ └── VERSION │ │ ├── .openapi-generator-ignore │ │ ├── .rspec │ │ ├── .rubocop.yml │ │ ├── Gemfile │ │ ├── Rakefile │ │ ├── daytona_api_client.gemspec │ │ ├── fix-gemspec.sh │ │ ├── lib/ │ │ │ ├── daytona_api_client/ │ │ │ │ ├── api/ │ │ │ │ │ ├── admin_api.rb │ │ │ │ │ ├── api_keys_api.rb │ │ │ │ │ ├── audit_api.rb │ │ │ │ │ ├── config_api.rb │ │ │ │ │ ├── docker_registry_api.rb │ │ │ │ │ ├── health_api.rb │ │ │ │ │ ├── jobs_api.rb │ │ │ │ │ ├── object_storage_api.rb │ │ │ │ │ ├── organizations_api.rb │ │ │ │ │ ├── preview_api.rb │ │ │ │ │ ├── regions_api.rb │ │ │ │ │ ├── runners_api.rb │ │ │ │ │ ├── sandbox_api.rb │ │ │ │ │ ├── snapshots_api.rb │ │ │ │ │ ├── toolbox_api.rb │ │ │ │ │ ├── users_api.rb │ │ │ │ │ ├── volumes_api.rb │ │ │ │ │ ├── webhooks_api.rb │ │ │ │ │ └── workspace_api.rb │ │ │ │ ├── api_client.rb │ │ │ │ ├── api_error.rb │ │ │ │ ├── configuration.rb │ │ │ │ ├── models/ │ │ │ │ │ ├── account_provider.rb │ │ │ │ │ ├── admin_create_runner.rb │ │ │ │ │ ├── announcement.rb │ │ │ │ │ ├── api_key_list.rb │ │ │ │ │ ├── api_key_response.rb │ │ │ │ │ ├── audit_log.rb │ │ │ │ │ ├── build_info.rb │ │ │ │ │ ├── command.rb │ │ │ │ │ ├── completion_context.rb │ │ │ │ │ ├── completion_item.rb │ │ │ │ │ ├── completion_list.rb │ │ │ │ │ ├── compressed_screenshot_response.rb │ │ │ │ │ ├── computer_use_start_response.rb │ │ │ │ │ ├── computer_use_status_response.rb │ │ │ │ │ ├── computer_use_stop_response.rb │ │ │ │ │ ├── create_api_key.rb │ │ │ │ │ ├── create_build_info.rb │ │ │ │ │ ├── create_docker_registry.rb │ │ │ │ │ ├── create_linked_account.rb │ │ │ │ │ ├── create_organization.rb │ │ │ │ │ ├── create_organization_invitation.rb │ │ │ │ │ ├── create_organization_quota.rb │ │ │ │ │ ├── create_organization_role.rb │ │ │ │ │ ├── create_region.rb │ │ │ │ │ ├── create_region_response.rb │ │ │ │ │ ├── create_runner.rb │ │ │ │ │ ├── create_runner_response.rb │ │ │ │ │ ├── create_sandbox.rb │ │ │ │ │ ├── create_session_request.rb │ │ │ │ │ ├── create_snapshot.rb │ │ │ │ │ ├── create_user.rb │ │ │ │ │ ├── create_volume.rb │ │ │ │ │ ├── create_workspace.rb │ │ │ │ │ ├── daytona_configuration.rb │ │ │ │ │ ├── display_info_response.rb │ │ │ │ │ ├── docker_registry.rb │ │ │ │ │ ├── download_files.rb │ │ │ │ │ ├── execute_request.rb │ │ │ │ │ ├── execute_response.rb │ │ │ │ │ ├── file_info.rb │ │ │ │ │ ├── file_status.rb │ │ │ │ │ ├── git_add_request.rb │ │ │ │ │ ├── git_branch_request.rb │ │ │ │ │ ├── git_checkout_request.rb │ │ │ │ │ ├── git_clone_request.rb │ │ │ │ │ ├── git_commit_info.rb │ │ │ │ │ ├── git_commit_request.rb │ │ │ │ │ ├── git_commit_response.rb │ │ │ │ │ ├── git_delete_branch_request.rb │ │ │ │ │ ├── git_repo_request.rb │ │ │ │ │ ├── git_status.rb │ │ │ │ │ ├── health_controller_check200_response.rb │ │ │ │ │ ├── health_controller_check200_response_info_value.rb │ │ │ │ │ ├── health_controller_check503_response.rb │ │ │ │ │ ├── job.rb │ │ │ │ │ ├── job_status.rb │ │ │ │ │ ├── job_type.rb │ │ │ │ │ ├── keyboard_hotkey_request.rb │ │ │ │ │ ├── keyboard_press_request.rb │ │ │ │ │ ├── keyboard_type_request.rb │ │ │ │ │ ├── list_branch_response.rb │ │ │ │ │ ├── log_entry.rb │ │ │ │ │ ├── lsp_completion_params.rb │ │ │ │ │ ├── lsp_document_request.rb │ │ │ │ │ ├── lsp_location.rb │ │ │ │ │ ├── lsp_server_request.rb │ │ │ │ │ ├── lsp_symbol.rb │ │ │ │ │ ├── match.rb │ │ │ │ │ ├── metric_data_point.rb │ │ │ │ │ ├── metric_series.rb │ │ │ │ │ ├── metrics_response.rb │ │ │ │ │ ├── mouse_click_request.rb │ │ │ │ │ ├── mouse_click_response.rb │ │ │ │ │ ├── mouse_drag_request.rb │ │ │ │ │ ├── mouse_drag_response.rb │ │ │ │ │ ├── mouse_move_request.rb │ │ │ │ │ ├── mouse_move_response.rb │ │ │ │ │ ├── mouse_position.rb │ │ │ │ │ ├── mouse_scroll_request.rb │ │ │ │ │ ├── mouse_scroll_response.rb │ │ │ │ │ ├── oidc_config.rb │ │ │ │ │ ├── organization.rb │ │ │ │ │ ├── organization_invitation.rb │ │ │ │ │ ├── organization_role.rb │ │ │ │ │ ├── organization_sandbox_default_limited_network_egress.rb │ │ │ │ │ ├── organization_suspension.rb │ │ │ │ │ ├── organization_usage_overview.rb │ │ │ │ │ ├── organization_user.rb │ │ │ │ │ ├── otel_config.rb │ │ │ │ │ ├── paginated_audit_logs.rb │ │ │ │ │ ├── paginated_jobs.rb │ │ │ │ │ ├── paginated_logs.rb │ │ │ │ │ ├── paginated_sandboxes.rb │ │ │ │ │ ├── paginated_snapshots.rb │ │ │ │ │ ├── paginated_traces.rb │ │ │ │ │ ├── poll_jobs_response.rb │ │ │ │ │ ├── port_preview_url.rb │ │ │ │ │ ├── position.rb │ │ │ │ │ ├── posthog_config.rb │ │ │ │ │ ├── process_errors_response.rb │ │ │ │ │ ├── process_logs_response.rb │ │ │ │ │ ├── process_restart_response.rb │ │ │ │ │ ├── process_status_response.rb │ │ │ │ │ ├── project_dir_response.rb │ │ │ │ │ ├── pty_create_request.rb │ │ │ │ │ ├── pty_create_response.rb │ │ │ │ │ ├── pty_list_response.rb │ │ │ │ │ ├── pty_resize_request.rb │ │ │ │ │ ├── pty_session_info.rb │ │ │ │ │ ├── range.rb │ │ │ │ │ ├── rate_limit_config.rb │ │ │ │ │ ├── rate_limit_entry.rb │ │ │ │ │ ├── regenerate_api_key_response.rb │ │ │ │ │ ├── region.rb │ │ │ │ │ ├── region_quota.rb │ │ │ │ │ ├── region_screenshot_response.rb │ │ │ │ │ ├── region_type.rb │ │ │ │ │ ├── region_usage_overview.rb │ │ │ │ │ ├── registry_push_access_dto.rb │ │ │ │ │ ├── replace_request.rb │ │ │ │ │ ├── replace_result.rb │ │ │ │ │ ├── resize_sandbox.rb │ │ │ │ │ ├── runner.rb │ │ │ │ │ ├── runner_full.rb │ │ │ │ │ ├── runner_health_metrics.rb │ │ │ │ │ ├── runner_healthcheck.rb │ │ │ │ │ ├── runner_service_health.rb │ │ │ │ │ ├── runner_snapshot_dto.rb │ │ │ │ │ ├── runner_state.rb │ │ │ │ │ ├── sandbox.rb │ │ │ │ │ ├── sandbox_class.rb │ │ │ │ │ ├── sandbox_desired_state.rb │ │ │ │ │ ├── sandbox_info.rb │ │ │ │ │ ├── sandbox_labels.rb │ │ │ │ │ ├── sandbox_state.rb │ │ │ │ │ ├── sandbox_volume.rb │ │ │ │ │ ├── screenshot_response.rb │ │ │ │ │ ├── search_files_response.rb │ │ │ │ │ ├── send_webhook_dto.rb │ │ │ │ │ ├── session.rb │ │ │ │ │ ├── session_execute_request.rb │ │ │ │ │ ├── session_execute_response.rb │ │ │ │ │ ├── set_snapshot_general_status_dto.rb │ │ │ │ │ ├── signed_port_preview_url.rb │ │ │ │ │ ├── snapshot_dto.rb │ │ │ │ │ ├── snapshot_manager_credentials.rb │ │ │ │ │ ├── snapshot_state.rb │ │ │ │ │ ├── ssh_access_dto.rb │ │ │ │ │ ├── ssh_access_validation_dto.rb │ │ │ │ │ ├── storage_access_dto.rb │ │ │ │ │ ├── toolbox_proxy_url.rb │ │ │ │ │ ├── trace_span.rb │ │ │ │ │ ├── trace_summary.rb │ │ │ │ │ ├── update_docker_registry.rb │ │ │ │ │ ├── update_job_status.rb │ │ │ │ │ ├── update_organization_default_region.rb │ │ │ │ │ ├── update_organization_invitation.rb │ │ │ │ │ ├── update_organization_member_access.rb │ │ │ │ │ ├── update_organization_quota.rb │ │ │ │ │ ├── update_organization_region_quota.rb │ │ │ │ │ ├── update_organization_role.rb │ │ │ │ │ ├── update_region.rb │ │ │ │ │ ├── update_sandbox_state_dto.rb │ │ │ │ │ ├── url.rb │ │ │ │ │ ├── user.rb │ │ │ │ │ ├── user_home_dir_response.rb │ │ │ │ │ ├── user_public_key.rb │ │ │ │ │ ├── volume_dto.rb │ │ │ │ │ ├── volume_state.rb │ │ │ │ │ ├── webhook_app_portal_access.rb │ │ │ │ │ ├── webhook_controller_get_status200_response.rb │ │ │ │ │ ├── webhook_event.rb │ │ │ │ │ ├── webhook_initialization_status.rb │ │ │ │ │ ├── windows_response.rb │ │ │ │ │ ├── work_dir_response.rb │ │ │ │ │ ├── workspace.rb │ │ │ │ │ └── workspace_port_preview_url.rb │ │ │ │ └── version.rb │ │ │ └── daytona_api_client.rb │ │ └── project.json │ ├── common-go/ │ │ ├── go.mod │ │ ├── go.sum │ │ └── pkg/ │ │ ├── cache/ │ │ │ ├── interface.go │ │ │ ├── map_cache.go │ │ │ └── redis_cache.go │ │ ├── errors/ │ │ │ ├── convert_openapi_error.go │ │ │ ├── http.go │ │ │ └── middleware.go │ │ ├── log/ │ │ │ ├── handlers.go │ │ │ ├── level.go │ │ │ ├── prefix_writer.go │ │ │ ├── read_multiplex_log.go │ │ │ └── writer.go │ │ ├── proxy/ │ │ │ ├── conn_monitor.go │ │ │ └── proxy.go │ │ ├── telemetry/ │ │ │ ├── common.go │ │ │ ├── logging.go │ │ │ ├── metrics.go │ │ │ └── tracing.go │ │ ├── timer/ │ │ │ └── timer.go │ │ └── utils/ │ │ └── exponential_backoff.go │ ├── computer-use/ │ │ ├── README.md │ │ ├── computer_use_test.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── main.go │ │ ├── pkg/ │ │ │ └── computeruse/ │ │ │ ├── computeruse.go │ │ │ ├── display.go │ │ │ ├── keyboard.go │ │ │ ├── mouse.go │ │ │ └── screenshot.go │ │ └── project.json │ ├── opencode-plugin/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .opencode/ │ │ │ └── plugin/ │ │ │ ├── daytona/ │ │ │ │ ├── core/ │ │ │ │ │ ├── logger.ts │ │ │ │ │ ├── project-data-storage.ts │ │ │ │ │ ├── session-manager.ts │ │ │ │ │ ├── toast.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── git/ │ │ │ │ │ ├── host-git-manager.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── sandbox-git-manager.ts │ │ │ │ │ └── session-git-manager.ts │ │ │ │ ├── index.ts │ │ │ │ ├── plugins/ │ │ │ │ │ ├── custom-tools.ts │ │ │ │ │ ├── session-events.ts │ │ │ │ │ └── system-transform.ts │ │ │ │ ├── tools/ │ │ │ │ │ ├── bash.ts │ │ │ │ │ ├── edit.ts │ │ │ │ │ ├── get-preview-url.ts │ │ │ │ │ ├── glob.ts │ │ │ │ │ ├── grep.ts │ │ │ │ │ ├── ls.ts │ │ │ │ │ ├── lsp.ts │ │ │ │ │ ├── multiedit.ts │ │ │ │ │ ├── patch.ts │ │ │ │ │ ├── read.ts │ │ │ │ │ └── write.ts │ │ │ │ └── tools.ts │ │ │ └── index.ts │ │ ├── README.md │ │ ├── package.json │ │ ├── project.json │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ ├── runner-api-client/ │ │ ├── LICENSE │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .openapi-generator/ │ │ │ │ ├── FILES │ │ │ │ └── VERSION │ │ │ ├── .openapi-generator-ignore │ │ │ ├── api/ │ │ │ │ ├── default-api.ts │ │ │ │ ├── sandbox-api.ts │ │ │ │ ├── snapshots-api.ts │ │ │ │ └── toolbox-api.ts │ │ │ ├── api.ts │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── configuration.ts │ │ │ ├── git_push.sh │ │ │ ├── index.ts │ │ │ └── models/ │ │ │ ├── build-snapshot-request-dto.ts │ │ │ ├── create-backup-dto.ts │ │ │ ├── create-sandbox-dto.ts │ │ │ ├── dto-volume-dto.ts │ │ │ ├── enums-backup-state.ts │ │ │ ├── enums-sandbox-state.ts │ │ │ ├── error-response.ts │ │ │ ├── index.ts │ │ │ ├── inspect-snapshot-in-registry-request.ts │ │ │ ├── is-recoverable-dto.ts │ │ │ ├── is-recoverable-response.ts │ │ │ ├── pull-snapshot-request-dto.ts │ │ │ ├── recover-sandbox-dto.ts │ │ │ ├── registry-dto.ts │ │ │ ├── resize-sandbox-dto.ts │ │ │ ├── runner-info-response-dto.ts │ │ │ ├── runner-metrics.ts │ │ │ ├── runner-service-info.ts │ │ │ ├── sandbox-info-response.ts │ │ │ ├── snapshot-digest-response.ts │ │ │ ├── snapshot-exists-response.ts │ │ │ ├── snapshot-info-response.ts │ │ │ ├── start-sandbox-response.ts │ │ │ ├── tag-image-request-dto.ts │ │ │ └── update-network-settings-dto.ts │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ ├── sdk-go/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── go.mod │ │ ├── go.sum │ │ ├── pkg/ │ │ │ ├── common/ │ │ │ │ └── url_helpers.go │ │ │ ├── daytona/ │ │ │ │ ├── VERSION │ │ │ │ ├── client.go │ │ │ │ ├── client_test.go │ │ │ │ ├── code_interpreter.go │ │ │ │ ├── computer_use.go │ │ │ │ ├── filesystem.go │ │ │ │ ├── git.go │ │ │ │ ├── image.go │ │ │ │ ├── lsp_server.go │ │ │ │ ├── object_storage.go │ │ │ │ ├── otel.go │ │ │ │ ├── process.go │ │ │ │ ├── process_test.go │ │ │ │ ├── pty_handle.go │ │ │ │ ├── sandbox.go │ │ │ │ ├── snapshot.go │ │ │ │ ├── version.go │ │ │ │ └── volume.go │ │ │ ├── errors/ │ │ │ │ └── errors.go │ │ │ ├── options/ │ │ │ │ ├── client.go │ │ │ │ ├── code_interpreter.go │ │ │ │ ├── filesystem.go │ │ │ │ ├── git.go │ │ │ │ ├── image.go │ │ │ │ └── process.go │ │ │ └── types/ │ │ │ └── types.go │ │ ├── project.json │ │ └── templates/ │ │ ├── example.gotxt │ │ ├── file.gotxt │ │ ├── func.gotxt │ │ └── type.gotxt │ ├── sdk-python/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── project.json │ │ ├── pydoc-markdown.yml │ │ ├── pyproject.toml │ │ ├── scripts/ │ │ │ ├── add-api-clients.sh │ │ │ ├── build-sdk.sh │ │ │ ├── chart_data_extractor_wrapper.py │ │ │ ├── docs-code-block-indentation.sh │ │ │ └── docs-reorder-sections.sh │ │ └── src/ │ │ └── daytona/ │ │ ├── __init__.py │ │ ├── _async/ │ │ │ ├── __init__.py │ │ │ ├── code_interpreter.py │ │ │ ├── computer_use.py │ │ │ ├── daytona.py │ │ │ ├── filesystem.py │ │ │ ├── git.py │ │ │ ├── lsp_server.py │ │ │ ├── object_storage.py │ │ │ ├── process.py │ │ │ ├── sandbox.py │ │ │ ├── snapshot.py │ │ │ └── volume.py │ │ ├── _sync/ │ │ │ ├── __init__.py │ │ │ ├── code_interpreter.py │ │ │ ├── computer_use.py │ │ │ ├── daytona.py │ │ │ ├── filesystem.py │ │ │ ├── git.py │ │ │ ├── lsp_server.py │ │ │ ├── object_storage.py │ │ │ ├── process.py │ │ │ ├── sandbox.py │ │ │ ├── snapshot.py │ │ │ └── volume.py │ │ ├── _utils/ │ │ │ ├── __init__.py │ │ │ ├── deprecation.py │ │ │ ├── docs_ignore.py │ │ │ ├── enum.py │ │ │ ├── environment.py │ │ │ ├── errors.py │ │ │ ├── otel_decorator.py │ │ │ ├── stream.py │ │ │ ├── timeout.py │ │ │ └── types.py │ │ ├── code_toolbox/ │ │ │ ├── __init__.py │ │ │ ├── sandbox_js_code_toolbox.py │ │ │ ├── sandbox_python_code_toolbox.py │ │ │ └── sandbox_ts_code_toolbox.py │ │ ├── common/ │ │ │ ├── __init__.py │ │ │ ├── charts.py │ │ │ ├── code_interpreter.py │ │ │ ├── computer_use.py │ │ │ ├── daytona.py │ │ │ ├── errors.py │ │ │ ├── filesystem.py │ │ │ ├── git.py │ │ │ ├── image.py │ │ │ ├── lsp_server.py │ │ │ ├── process.py │ │ │ ├── protocols.py │ │ │ ├── pty.py │ │ │ ├── sandbox.py │ │ │ ├── snapshot.py │ │ │ └── volume.py │ │ ├── handle/ │ │ │ ├── async_pty_handle.py │ │ │ └── pty_handle.py │ │ ├── internal/ │ │ │ ├── __init__.py │ │ │ └── toolbox_api_client_proxy.py │ │ └── py.typed │ ├── sdk-ruby/ │ │ ├── .gitignore │ │ ├── .rubocop.yml │ │ ├── .ruby-version │ │ ├── CODE_OF_CONDUCT.md │ │ ├── Gemfile │ │ ├── README.md │ │ ├── Rakefile │ │ ├── bin/ │ │ │ ├── console │ │ │ └── setup │ │ ├── daytona.gemspec │ │ ├── lib/ │ │ │ ├── daytona/ │ │ │ │ ├── code_interpreter.rb │ │ │ │ ├── code_toolbox/ │ │ │ │ │ ├── sandbox_js_code_toolbox.rb │ │ │ │ │ ├── sandbox_python_code_toolbox.rb │ │ │ │ │ └── sandbox_ts_code_toolbox.rb │ │ │ │ ├── common/ │ │ │ │ │ ├── charts.rb │ │ │ │ │ ├── code_interpreter.rb │ │ │ │ │ ├── code_language.rb │ │ │ │ │ ├── daytona.rb │ │ │ │ │ ├── file_system.rb │ │ │ │ │ ├── git.rb │ │ │ │ │ ├── image.rb │ │ │ │ │ ├── process.rb │ │ │ │ │ ├── pty.rb │ │ │ │ │ ├── resources.rb │ │ │ │ │ ├── response.rb │ │ │ │ │ └── snapshot.rb │ │ │ │ ├── computer_use.rb │ │ │ │ ├── config.rb │ │ │ │ ├── daytona.rb │ │ │ │ ├── file_system.rb │ │ │ │ ├── git.rb │ │ │ │ ├── lsp_server.rb │ │ │ │ ├── object_storage.rb │ │ │ │ ├── otel.rb │ │ │ │ ├── process.rb │ │ │ │ ├── sandbox.rb │ │ │ │ ├── sdk/ │ │ │ │ │ └── version.rb │ │ │ │ ├── sdk.rb │ │ │ │ ├── snapshot_service.rb │ │ │ │ ├── util.rb │ │ │ │ ├── volume.rb │ │ │ │ └── volume_service.rb │ │ │ └── daytona.rb │ │ ├── project.json │ │ ├── scripts/ │ │ │ └── generate-docs.rb │ │ └── sig/ │ │ └── daytona/ │ │ └── sdk.rbs │ ├── sdk-typescript/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── hooks/ │ │ │ └── typedoc-custom.mjs │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── CodeInterpreter.ts │ │ │ ├── ComputerUse.ts │ │ │ ├── Daytona.ts │ │ │ ├── FileSystem.ts │ │ │ ├── Git.ts │ │ │ ├── Image.ts │ │ │ ├── LspServer.ts │ │ │ ├── ObjectStorage.ts │ │ │ ├── Process.ts │ │ │ ├── PtyHandle.ts │ │ │ ├── Sandbox.ts │ │ │ ├── Snapshot.ts │ │ │ ├── Volume.ts │ │ │ ├── code-toolbox/ │ │ │ │ ├── SandboxJsCodeToolbox.ts │ │ │ │ ├── SandboxPythonCodeToolbox.ts │ │ │ │ └── SandboxTsCodeToolbox.ts │ │ │ ├── errors/ │ │ │ │ └── DaytonaError.ts │ │ │ ├── index.ts │ │ │ ├── types/ │ │ │ │ ├── Charts.ts │ │ │ │ ├── CodeInterpreter.ts │ │ │ │ ├── ExecuteResponse.ts │ │ │ │ └── Pty.ts │ │ │ └── utils/ │ │ │ ├── ArtifactParser.ts │ │ │ ├── Binary.ts │ │ │ ├── FileTransfer.ts │ │ │ ├── Import.ts │ │ │ ├── Multipart.ts │ │ │ ├── Runtime.ts │ │ │ ├── Stream.ts │ │ │ ├── WebSocket.ts │ │ │ └── otel.decorator.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ └── typedoc.json │ ├── toolbox-api-client/ │ │ ├── LICENSE │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .openapi-generator/ │ │ │ │ ├── FILES │ │ │ │ └── VERSION │ │ │ ├── .openapi-generator-ignore │ │ │ ├── api/ │ │ │ │ ├── computer-use-api.ts │ │ │ │ ├── file-system-api.ts │ │ │ │ ├── git-api.ts │ │ │ │ ├── info-api.ts │ │ │ │ ├── interpreter-api.ts │ │ │ │ ├── lsp-api.ts │ │ │ │ ├── port-api.ts │ │ │ │ ├── process-api.ts │ │ │ │ └── server-api.ts │ │ │ ├── api.ts │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── configuration.ts │ │ │ ├── git_push.sh │ │ │ ├── index.ts │ │ │ └── models/ │ │ │ ├── command.ts │ │ │ ├── completion-context.ts │ │ │ ├── completion-item.ts │ │ │ ├── completion-list.ts │ │ │ ├── computer-use-start-response.ts │ │ │ ├── computer-use-status-response.ts │ │ │ ├── computer-use-stop-response.ts │ │ │ ├── create-context-request.ts │ │ │ ├── create-session-request.ts │ │ │ ├── display-info-response.ts │ │ │ ├── display-info.ts │ │ │ ├── execute-request.ts │ │ │ ├── execute-response.ts │ │ │ ├── file-info.ts │ │ │ ├── file-status.ts │ │ │ ├── files-download-request.ts │ │ │ ├── git-add-request.ts │ │ │ ├── git-branch-request.ts │ │ │ ├── git-checkout-request.ts │ │ │ ├── git-clone-request.ts │ │ │ ├── git-commit-info.ts │ │ │ ├── git-commit-request.ts │ │ │ ├── git-commit-response.ts │ │ │ ├── git-git-delete-branch-request.ts │ │ │ ├── git-repo-request.ts │ │ │ ├── git-status.ts │ │ │ ├── index.ts │ │ │ ├── initialize-request.ts │ │ │ ├── interpreter-context.ts │ │ │ ├── is-port-in-use-response.ts │ │ │ ├── keyboard-hotkey-request.ts │ │ │ ├── keyboard-press-request.ts │ │ │ ├── keyboard-type-request.ts │ │ │ ├── list-branch-response.ts │ │ │ ├── list-contexts-response.ts │ │ │ ├── list-recordings-response.ts │ │ │ ├── lsp-completion-params.ts │ │ │ ├── lsp-document-request.ts │ │ │ ├── lsp-location.ts │ │ │ ├── lsp-position.ts │ │ │ ├── lsp-range.ts │ │ │ ├── lsp-server-request.ts │ │ │ ├── lsp-symbol.ts │ │ │ ├── match.ts │ │ │ ├── mouse-click-request.ts │ │ │ ├── mouse-click-response.ts │ │ │ ├── mouse-drag-request.ts │ │ │ ├── mouse-drag-response.ts │ │ │ ├── mouse-move-request.ts │ │ │ ├── mouse-position-response.ts │ │ │ ├── mouse-scroll-request.ts │ │ │ ├── port-list.ts │ │ │ ├── position.ts │ │ │ ├── process-errors-response.ts │ │ │ ├── process-logs-response.ts │ │ │ ├── process-restart-response.ts │ │ │ ├── process-status-response.ts │ │ │ ├── process-status.ts │ │ │ ├── pty-create-request.ts │ │ │ ├── pty-create-response.ts │ │ │ ├── pty-list-response.ts │ │ │ ├── pty-resize-request.ts │ │ │ ├── pty-session-info.ts │ │ │ ├── recording.ts │ │ │ ├── replace-request.ts │ │ │ ├── replace-result.ts │ │ │ ├── screenshot-response.ts │ │ │ ├── scroll-response.ts │ │ │ ├── search-files-response.ts │ │ │ ├── session-execute-request.ts │ │ │ ├── session-execute-response.ts │ │ │ ├── session-send-input-request.ts │ │ │ ├── session.ts │ │ │ ├── start-recording-request.ts │ │ │ ├── status.ts │ │ │ ├── stop-recording-request.ts │ │ │ ├── user-home-dir-response.ts │ │ │ ├── window-info.ts │ │ │ ├── windows-response.ts │ │ │ └── work-dir-response.ts │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ ├── toolbox-api-client-go/ │ │ ├── .gitignore │ │ ├── .openapi-generator/ │ │ │ ├── FILES │ │ │ └── VERSION │ │ ├── .openapi-generator-ignore │ │ ├── LICENSE │ │ ├── api/ │ │ │ └── openapi.yaml │ │ ├── api_computer_use.go │ │ ├── api_file_system.go │ │ ├── api_git.go │ │ ├── api_info.go │ │ ├── api_interpreter.go │ │ ├── api_lsp.go │ │ ├── api_port.go │ │ ├── api_process.go │ │ ├── api_server.go │ │ ├── client.go │ │ ├── configuration.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── model_command.go │ │ ├── model_completion_context.go │ │ ├── model_completion_item.go │ │ ├── model_completion_list.go │ │ ├── model_computer_use_start_response.go │ │ ├── model_computer_use_status_response.go │ │ ├── model_computer_use_stop_response.go │ │ ├── model_create_context_request.go │ │ ├── model_create_session_request.go │ │ ├── model_display_info.go │ │ ├── model_display_info_response.go │ │ ├── model_execute_request.go │ │ ├── model_execute_response.go │ │ ├── model_file_info.go │ │ ├── model_file_status.go │ │ ├── model_files_download_request.go │ │ ├── model_git_add_request.go │ │ ├── model_git_branch_request.go │ │ ├── model_git_checkout_request.go │ │ ├── model_git_clone_request.go │ │ ├── model_git_commit_info.go │ │ ├── model_git_commit_request.go │ │ ├── model_git_commit_response.go │ │ ├── model_git_git_delete_branch_request.go │ │ ├── model_git_repo_request.go │ │ ├── model_git_status.go │ │ ├── model_initialize_request.go │ │ ├── model_interpreter_context.go │ │ ├── model_is_port_in_use_response.go │ │ ├── model_keyboard_hotkey_request.go │ │ ├── model_keyboard_press_request.go │ │ ├── model_keyboard_type_request.go │ │ ├── model_list_branch_response.go │ │ ├── model_list_contexts_response.go │ │ ├── model_list_recordings_response.go │ │ ├── model_lsp_completion_params.go │ │ ├── model_lsp_document_request.go │ │ ├── model_lsp_location.go │ │ ├── model_lsp_position.go │ │ ├── model_lsp_range.go │ │ ├── model_lsp_server_request.go │ │ ├── model_lsp_symbol.go │ │ ├── model_match.go │ │ ├── model_mouse_click_request.go │ │ ├── model_mouse_click_response.go │ │ ├── model_mouse_drag_request.go │ │ ├── model_mouse_drag_response.go │ │ ├── model_mouse_move_request.go │ │ ├── model_mouse_position_response.go │ │ ├── model_mouse_scroll_request.go │ │ ├── model_port_list.go │ │ ├── model_position.go │ │ ├── model_process_errors_response.go │ │ ├── model_process_logs_response.go │ │ ├── model_process_restart_response.go │ │ ├── model_process_status.go │ │ ├── model_process_status_response.go │ │ ├── model_pty_create_request.go │ │ ├── model_pty_create_response.go │ │ ├── model_pty_list_response.go │ │ ├── model_pty_resize_request.go │ │ ├── model_pty_session_info.go │ │ ├── model_recording.go │ │ ├── model_replace_request.go │ │ ├── model_replace_result.go │ │ ├── model_screenshot_response.go │ │ ├── model_scroll_response.go │ │ ├── model_search_files_response.go │ │ ├── model_session.go │ │ ├── model_session_execute_request.go │ │ ├── model_session_execute_response.go │ │ ├── model_session_send_input_request.go │ │ ├── model_start_recording_request.go │ │ ├── model_status.go │ │ ├── model_stop_recording_request.go │ │ ├── model_user_home_dir_response.go │ │ ├── model_window_info.go │ │ ├── model_windows_response.go │ │ ├── model_work_dir_response.go │ │ ├── openapitools.json │ │ ├── project.json │ │ ├── response.go │ │ └── utils.go │ ├── toolbox-api-client-python/ │ │ ├── .gitignore │ │ ├── .openapi-generator/ │ │ │ ├── FILES │ │ │ └── VERSION │ │ ├── .openapi-generator-ignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── daytona_toolbox_api_client/ │ │ │ ├── __init__.py │ │ │ ├── api/ │ │ │ │ ├── __init__.py │ │ │ │ ├── computer_use_api.py │ │ │ │ ├── file_system_api.py │ │ │ │ ├── git_api.py │ │ │ │ ├── info_api.py │ │ │ │ ├── interpreter_api.py │ │ │ │ ├── lsp_api.py │ │ │ │ ├── port_api.py │ │ │ │ ├── process_api.py │ │ │ │ └── server_api.py │ │ │ ├── api_client.py │ │ │ ├── api_response.py │ │ │ ├── configuration.py │ │ │ ├── exceptions.py │ │ │ ├── models/ │ │ │ │ ├── __init__.py │ │ │ │ ├── command.py │ │ │ │ ├── completion_context.py │ │ │ │ ├── completion_item.py │ │ │ │ ├── completion_list.py │ │ │ │ ├── computer_use_start_response.py │ │ │ │ ├── computer_use_status_response.py │ │ │ │ ├── computer_use_stop_response.py │ │ │ │ ├── create_context_request.py │ │ │ │ ├── create_session_request.py │ │ │ │ ├── display_info.py │ │ │ │ ├── display_info_response.py │ │ │ │ ├── execute_request.py │ │ │ │ ├── execute_response.py │ │ │ │ ├── file_info.py │ │ │ │ ├── file_status.py │ │ │ │ ├── files_download_request.py │ │ │ │ ├── git_add_request.py │ │ │ │ ├── git_branch_request.py │ │ │ │ ├── git_checkout_request.py │ │ │ │ ├── git_clone_request.py │ │ │ │ ├── git_commit_info.py │ │ │ │ ├── git_commit_request.py │ │ │ │ ├── git_commit_response.py │ │ │ │ ├── git_git_delete_branch_request.py │ │ │ │ ├── git_repo_request.py │ │ │ │ ├── git_status.py │ │ │ │ ├── initialize_request.py │ │ │ │ ├── interpreter_context.py │ │ │ │ ├── is_port_in_use_response.py │ │ │ │ ├── keyboard_hotkey_request.py │ │ │ │ ├── keyboard_press_request.py │ │ │ │ ├── keyboard_type_request.py │ │ │ │ ├── list_branch_response.py │ │ │ │ ├── list_contexts_response.py │ │ │ │ ├── list_recordings_response.py │ │ │ │ ├── lsp_completion_params.py │ │ │ │ ├── lsp_document_request.py │ │ │ │ ├── lsp_location.py │ │ │ │ ├── lsp_position.py │ │ │ │ ├── lsp_range.py │ │ │ │ ├── lsp_server_request.py │ │ │ │ ├── lsp_symbol.py │ │ │ │ ├── match.py │ │ │ │ ├── mouse_click_request.py │ │ │ │ ├── mouse_click_response.py │ │ │ │ ├── mouse_drag_request.py │ │ │ │ ├── mouse_drag_response.py │ │ │ │ ├── mouse_move_request.py │ │ │ │ ├── mouse_position_response.py │ │ │ │ ├── mouse_scroll_request.py │ │ │ │ ├── port_list.py │ │ │ │ ├── position.py │ │ │ │ ├── process_errors_response.py │ │ │ │ ├── process_logs_response.py │ │ │ │ ├── process_restart_response.py │ │ │ │ ├── process_status.py │ │ │ │ ├── process_status_response.py │ │ │ │ ├── pty_create_request.py │ │ │ │ ├── pty_create_response.py │ │ │ │ ├── pty_list_response.py │ │ │ │ ├── pty_resize_request.py │ │ │ │ ├── pty_session_info.py │ │ │ │ ├── recording.py │ │ │ │ ├── replace_request.py │ │ │ │ ├── replace_result.py │ │ │ │ ├── screenshot_response.py │ │ │ │ ├── scroll_response.py │ │ │ │ ├── search_files_response.py │ │ │ │ ├── session.py │ │ │ │ ├── session_execute_request.py │ │ │ │ ├── session_execute_response.py │ │ │ │ ├── session_send_input_request.py │ │ │ │ ├── start_recording_request.py │ │ │ │ ├── status.py │ │ │ │ ├── stop_recording_request.py │ │ │ │ ├── user_home_dir_response.py │ │ │ │ ├── window_info.py │ │ │ │ ├── windows_response.py │ │ │ │ └── work_dir_response.py │ │ │ ├── py.typed │ │ │ └── rest.py │ │ ├── project.json │ │ ├── pyproject.toml │ │ ├── requirements.txt │ │ ├── setup.cfg │ │ ├── setup.py │ │ ├── test-requirements.txt │ │ └── tox.ini │ ├── toolbox-api-client-python-async/ │ │ ├── .gitignore │ │ ├── .openapi-generator/ │ │ │ ├── FILES │ │ │ └── VERSION │ │ ├── .openapi-generator-ignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── daytona_toolbox_api_client_async/ │ │ │ ├── __init__.py │ │ │ ├── api/ │ │ │ │ ├── __init__.py │ │ │ │ ├── computer_use_api.py │ │ │ │ ├── file_system_api.py │ │ │ │ ├── git_api.py │ │ │ │ ├── info_api.py │ │ │ │ ├── interpreter_api.py │ │ │ │ ├── lsp_api.py │ │ │ │ ├── port_api.py │ │ │ │ ├── process_api.py │ │ │ │ └── server_api.py │ │ │ ├── api_client.py │ │ │ ├── api_response.py │ │ │ ├── configuration.py │ │ │ ├── exceptions.py │ │ │ ├── models/ │ │ │ │ ├── __init__.py │ │ │ │ ├── command.py │ │ │ │ ├── completion_context.py │ │ │ │ ├── completion_item.py │ │ │ │ ├── completion_list.py │ │ │ │ ├── computer_use_start_response.py │ │ │ │ ├── computer_use_status_response.py │ │ │ │ ├── computer_use_stop_response.py │ │ │ │ ├── create_context_request.py │ │ │ │ ├── create_session_request.py │ │ │ │ ├── display_info.py │ │ │ │ ├── display_info_response.py │ │ │ │ ├── execute_request.py │ │ │ │ ├── execute_response.py │ │ │ │ ├── file_info.py │ │ │ │ ├── file_status.py │ │ │ │ ├── files_download_request.py │ │ │ │ ├── git_add_request.py │ │ │ │ ├── git_branch_request.py │ │ │ │ ├── git_checkout_request.py │ │ │ │ ├── git_clone_request.py │ │ │ │ ├── git_commit_info.py │ │ │ │ ├── git_commit_request.py │ │ │ │ ├── git_commit_response.py │ │ │ │ ├── git_git_delete_branch_request.py │ │ │ │ ├── git_repo_request.py │ │ │ │ ├── git_status.py │ │ │ │ ├── initialize_request.py │ │ │ │ ├── interpreter_context.py │ │ │ │ ├── is_port_in_use_response.py │ │ │ │ ├── keyboard_hotkey_request.py │ │ │ │ ├── keyboard_press_request.py │ │ │ │ ├── keyboard_type_request.py │ │ │ │ ├── list_branch_response.py │ │ │ │ ├── list_contexts_response.py │ │ │ │ ├── list_recordings_response.py │ │ │ │ ├── lsp_completion_params.py │ │ │ │ ├── lsp_document_request.py │ │ │ │ ├── lsp_location.py │ │ │ │ ├── lsp_position.py │ │ │ │ ├── lsp_range.py │ │ │ │ ├── lsp_server_request.py │ │ │ │ ├── lsp_symbol.py │ │ │ │ ├── match.py │ │ │ │ ├── mouse_click_request.py │ │ │ │ ├── mouse_click_response.py │ │ │ │ ├── mouse_drag_request.py │ │ │ │ ├── mouse_drag_response.py │ │ │ │ ├── mouse_move_request.py │ │ │ │ ├── mouse_position_response.py │ │ │ │ ├── mouse_scroll_request.py │ │ │ │ ├── port_list.py │ │ │ │ ├── position.py │ │ │ │ ├── process_errors_response.py │ │ │ │ ├── process_logs_response.py │ │ │ │ ├── process_restart_response.py │ │ │ │ ├── process_status.py │ │ │ │ ├── process_status_response.py │ │ │ │ ├── pty_create_request.py │ │ │ │ ├── pty_create_response.py │ │ │ │ ├── pty_list_response.py │ │ │ │ ├── pty_resize_request.py │ │ │ │ ├── pty_session_info.py │ │ │ │ ├── recording.py │ │ │ │ ├── replace_request.py │ │ │ │ ├── replace_result.py │ │ │ │ ├── screenshot_response.py │ │ │ │ ├── scroll_response.py │ │ │ │ ├── search_files_response.py │ │ │ │ ├── session.py │ │ │ │ ├── session_execute_request.py │ │ │ │ ├── session_execute_response.py │ │ │ │ ├── session_send_input_request.py │ │ │ │ ├── start_recording_request.py │ │ │ │ ├── status.py │ │ │ │ ├── stop_recording_request.py │ │ │ │ ├── user_home_dir_response.py │ │ │ │ ├── window_info.py │ │ │ │ ├── windows_response.py │ │ │ │ └── work_dir_response.py │ │ │ ├── py.typed │ │ │ └── rest.py │ │ ├── project.json │ │ ├── pyproject.toml │ │ ├── requirements.txt │ │ ├── setup.cfg │ │ ├── setup.py │ │ ├── test-requirements.txt │ │ └── tox.ini │ └── toolbox-api-client-ruby/ │ ├── .gitignore │ ├── .openapi-generator/ │ │ ├── FILES │ │ └── VERSION │ ├── .openapi-generator-ignore │ ├── .rspec │ ├── .rubocop.yml │ ├── Gemfile │ ├── Rakefile │ ├── daytona_toolbox_api_client.gemspec │ ├── fix-gemspec.sh │ ├── lib/ │ │ ├── daytona_toolbox_api_client/ │ │ │ ├── api/ │ │ │ │ ├── computer_use_api.rb │ │ │ │ ├── file_system_api.rb │ │ │ │ ├── git_api.rb │ │ │ │ ├── info_api.rb │ │ │ │ ├── interpreter_api.rb │ │ │ │ ├── lsp_api.rb │ │ │ │ ├── port_api.rb │ │ │ │ ├── process_api.rb │ │ │ │ └── server_api.rb │ │ │ ├── api_client.rb │ │ │ ├── api_error.rb │ │ │ ├── configuration.rb │ │ │ ├── models/ │ │ │ │ ├── command.rb │ │ │ │ ├── completion_context.rb │ │ │ │ ├── completion_item.rb │ │ │ │ ├── completion_list.rb │ │ │ │ ├── computer_use_start_response.rb │ │ │ │ ├── computer_use_status_response.rb │ │ │ │ ├── computer_use_stop_response.rb │ │ │ │ ├── create_context_request.rb │ │ │ │ ├── create_session_request.rb │ │ │ │ ├── display_info.rb │ │ │ │ ├── display_info_response.rb │ │ │ │ ├── execute_request.rb │ │ │ │ ├── execute_response.rb │ │ │ │ ├── file_info.rb │ │ │ │ ├── file_status.rb │ │ │ │ ├── files_download_request.rb │ │ │ │ ├── git_add_request.rb │ │ │ │ ├── git_branch_request.rb │ │ │ │ ├── git_checkout_request.rb │ │ │ │ ├── git_clone_request.rb │ │ │ │ ├── git_commit_info.rb │ │ │ │ ├── git_commit_request.rb │ │ │ │ ├── git_commit_response.rb │ │ │ │ ├── git_git_delete_branch_request.rb │ │ │ │ ├── git_repo_request.rb │ │ │ │ ├── git_status.rb │ │ │ │ ├── initialize_request.rb │ │ │ │ ├── interpreter_context.rb │ │ │ │ ├── is_port_in_use_response.rb │ │ │ │ ├── keyboard_hotkey_request.rb │ │ │ │ ├── keyboard_press_request.rb │ │ │ │ ├── keyboard_type_request.rb │ │ │ │ ├── list_branch_response.rb │ │ │ │ ├── list_contexts_response.rb │ │ │ │ ├── list_recordings_response.rb │ │ │ │ ├── lsp_completion_params.rb │ │ │ │ ├── lsp_document_request.rb │ │ │ │ ├── lsp_location.rb │ │ │ │ ├── lsp_position.rb │ │ │ │ ├── lsp_range.rb │ │ │ │ ├── lsp_server_request.rb │ │ │ │ ├── lsp_symbol.rb │ │ │ │ ├── match.rb │ │ │ │ ├── mouse_click_request.rb │ │ │ │ ├── mouse_click_response.rb │ │ │ │ ├── mouse_drag_request.rb │ │ │ │ ├── mouse_drag_response.rb │ │ │ │ ├── mouse_move_request.rb │ │ │ │ ├── mouse_position_response.rb │ │ │ │ ├── mouse_scroll_request.rb │ │ │ │ ├── port_list.rb │ │ │ │ ├── position.rb │ │ │ │ ├── process_errors_response.rb │ │ │ │ ├── process_logs_response.rb │ │ │ │ ├── process_restart_response.rb │ │ │ │ ├── process_status.rb │ │ │ │ ├── process_status_response.rb │ │ │ │ ├── pty_create_request.rb │ │ │ │ ├── pty_create_response.rb │ │ │ │ ├── pty_list_response.rb │ │ │ │ ├── pty_resize_request.rb │ │ │ │ ├── pty_session_info.rb │ │ │ │ ├── recording.rb │ │ │ │ ├── replace_request.rb │ │ │ │ ├── replace_result.rb │ │ │ │ ├── screenshot_response.rb │ │ │ │ ├── scroll_response.rb │ │ │ │ ├── search_files_response.rb │ │ │ │ ├── session.rb │ │ │ │ ├── session_execute_request.rb │ │ │ │ ├── session_execute_response.rb │ │ │ │ ├── session_send_input_request.rb │ │ │ │ ├── start_recording_request.rb │ │ │ │ ├── status.rb │ │ │ │ ├── stop_recording_request.rb │ │ │ │ ├── user_home_dir_response.rb │ │ │ │ ├── window_info.rb │ │ │ │ ├── windows_response.rb │ │ │ │ └── work_dir_response.rb │ │ │ └── version.rb │ │ └── daytona_toolbox_api_client.rb │ └── project.json ├── nx.json ├── openapitools.json ├── package.json ├── poetry.lock ├── project.json ├── pyproject.toml ├── scripts/ │ └── setup-proxy-dns.sh ├── tsconfig.base.json └── tsconfig.json
Showing preview only (1,428K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (14266 symbols across 1817 files)
FILE: apps/api/src/admin/admin.module.ts
class AdminModule (line 17) | class AdminModule {}
FILE: apps/api/src/admin/controllers/runner.controller.ts
class AdminRunnerController (line 41) | class AdminRunnerController {
method constructor (line 42) | constructor(
method create (line 73) | async create(@Body() createRunnerDto: AdminCreateRunnerDto): Promise<C...
method getRunnerById (line 111) | async getRunnerById(@Param('id', ParseUUIDPipe) id: string): Promise<R...
method findAll (line 131) | async findAll(@Query('regionId') regionId?: string): Promise<RunnerFul...
method updateSchedulingStatus (line 157) | async updateSchedulingStatus(
method delete (line 183) | async delete(@Param('id', ParseUUIDPipe) id: string): Promise<void> {
FILE: apps/api/src/admin/controllers/sandbox.controller.ts
class AdminSandboxController (line 25) | class AdminSandboxController {
method constructor (line 26) | constructor(
method recoverSandbox (line 53) | async recoverSandbox(@Param('sandboxId') sandboxId: string): Promise<S...
FILE: apps/api/src/admin/dto/create-runner.dto.ts
class AdminCreateRunnerDto (line 11) | class AdminCreateRunnerDto extends CreateRunnerDto {
FILE: apps/api/src/analytics/analytics.module.ts
class AnalyticsModule (line 15) | class AnalyticsModule {}
FILE: apps/api/src/analytics/services/analytics.service.ts
class AnalyticsService (line 23) | class AnalyticsService {
method constructor (line 27) | constructor(private readonly configService: TypedConfigService) {
method handleSandboxCreatedEvent (line 43) | async handleSandboxCreatedEvent(event: SandboxCreatedEvent) {
method handleSandboxStartedEvent (line 48) | async handleSandboxStartedEvent(event: SandboxStartedEvent) {
method handleSandboxStoppedEvent (line 53) | async handleSandboxStoppedEvent(event: SandboxStoppedEvent) {
method handleSandboxDestroyedEvent (line 58) | async handleSandboxDestroyedEvent(event: SandboxDestroyedEvent) {
method handleSandboxPublicStatusUpdatedEvent (line 63) | async handleSandboxPublicStatusUpdatedEvent(event: SandboxPublicStatus...
method handleSandboxDesiredStateUpdatedEvent (line 68) | async handleSandboxDesiredStateUpdatedEvent(event: SandboxDesiredState...
method handleSandboxStateUpdatedEvent (line 73) | async handleSandboxStateUpdatedEvent(event: SandboxStateUpdatedEvent) {
method handlePersonalOrganizationCreatedEvent (line 80) | async handlePersonalOrganizationCreatedEvent(payload: Organization) {
FILE: apps/api/src/api-key/api-key.controller.ts
class ApiKeyController (line 33) | class ApiKeyController {
method constructor (line 34) | constructor(private readonly apiKeyService: ApiKeyService) {}
method createApiKey (line 58) | async createApiKey(
method getApiKeys (line 86) | async getApiKeys(@AuthContext() authContext: OrganizationAuthContext):...
method getCurrentApiKey (line 108) | async getCurrentApiKey(@AuthContext() authContext: IAuthContext): Prom...
method getApiKey (line 126) | async getApiKey(
method deleteApiKey (line 146) | async deleteApiKey(@AuthContext() authContext: OrganizationAuthContext...
method deleteApiKeyForUser (line 167) | async deleteApiKeyForUser(
method validateRequestedApiKeyPermissions (line 183) | private validateRequestedApiKeyPermissions(
FILE: apps/api/src/api-key/api-key.entity.ts
class ApiKey (line 11) | class ApiKey {
FILE: apps/api/src/api-key/api-key.module.ts
class ApiKeyModule (line 20) | class ApiKeyModule {}
FILE: apps/api/src/api-key/api-key.service.ts
class ApiKeyService (line 20) | class ApiKeyService {
method constructor (line 23) | constructor(
method getApiKeyPrefix (line 30) | private getApiKeyPrefix(value: string): string {
method getApiKeySuffix (line 34) | private getApiKeySuffix(value: string): string {
method createApiKey (line 38) | async createApiKey(
method getApiKeys (line 68) | async getApiKeys(organizationId: string, userId?: string): Promise<Api...
method getApiKeyByName (line 83) | async getApiKeyByName(organizationId: string, userId: string, name: st...
method getApiKeyByValue (line 99) | async getApiKeyByValue(value: string): Promise<ApiKey> {
method deleteApiKey (line 113) | async deleteApiKey(organizationId: string, userId: string, name: strin...
method updateLastUsedAt (line 123) | async updateLastUsedAt(organizationId: string, userId: string, name: s...
method deleteWithEntityManager (line 144) | private async deleteWithEntityManager(entityManager: EntityManager, ap...
method invalidateApiKeyCache (line 150) | private async invalidateApiKeyCache(keyHash: string): Promise<void> {
method handleOrganizationResourcePermissionsUnassignedEvent (line 163) | async handleOrganizationResourcePermissionsUnassignedEvent(
FILE: apps/api/src/api-key/dto/api-key-list.dto.ts
class ApiKeyListDto (line 11) | class ApiKeyListDto {
method constructor (line 57) | constructor(partial: Partial<ApiKeyListDto>) {
method fromApiKey (line 61) | static fromApiKey(apiKey: ApiKey): ApiKeyListDto {
FILE: apps/api/src/api-key/dto/api-key-response.dto.ts
class ApiKeyResponseDto (line 11) | class ApiKeyResponseDto {
method fromApiKey (line 44) | static fromApiKey(apiKey: ApiKey, value: string): ApiKeyResponseDto {
FILE: apps/api/src/api-key/dto/create-api-key.dto.ts
class CreateApiKeyDto (line 12) | class CreateApiKeyDto {
FILE: apps/api/src/app.module.ts
class AppModule (line 218) | class AppModule implements NestModule {
method configure (line 219) | configure(consumer: MiddlewareConsumer) {
FILE: apps/api/src/app.service.ts
constant DAYTONA_ADMIN_USER_ID (line 23) | const DAYTONA_ADMIN_USER_ID = 'daytona-admin'
class AppService (line 26) | class AppService implements OnApplicationBootstrap, OnApplicationShutdown {
method constructor (line 29) | constructor(
method onApplicationShutdown (line 43) | async onApplicationShutdown(signal?: string) {
method onApplicationBootstrap (line 48) | async onApplicationBootstrap() {
method stopAllCronJobs (line 70) | private async stopAllCronJobs(): Promise<void> {
method initializeDefaultRegion (line 77) | private async initializeDefaultRegion(): Promise<void> {
method initializeDefaultRunner (line 98) | private async initializeDefaultRunner(): Promise<void> {
method initializeAdminUser (line 168) | private async initializeAdminUser(): Promise<void> {
method initializeTransientRegistry (line 209) | private async initializeTransientRegistry(): Promise<void> {
method initializeInternalRegistry (line 242) | private async initializeInternalRegistry(): Promise<void> {
method initializeBackupRegistry (line 275) | private async initializeBackupRegistry(): Promise<void> {
method initializeDefaultSnapshot (line 312) | private async initializeDefaultSnapshot(): Promise<void> {
FILE: apps/api/src/audit/adapters/audit-opensearch.adapter.ts
constant MAX_OFFSET_PAGINATION_LIMIT (line 21) | const MAX_OFFSET_PAGINATION_LIMIT = 10000
class AuditOpenSearchStorageAdapter (line 23) | class AuditOpenSearchStorageAdapter implements AuditLogStorageAdapter, O...
method constructor (line 27) | constructor(
method onModuleInit (line 34) | async onModuleInit(): Promise<void> {
method write (line 42) | async write(auditLogs: AuditLog[]): Promise<void> {
method getAllLogs (line 82) | async getAllLogs(
method getOrganizationLogs (line 94) | async getOrganizationLogs(
method createDataStream (line 111) | private async createDataStream() {
method putIndexTemplate (line 124) | private async putIndexTemplate() {
method mapSourceToAuditLog (line 179) | private mapSourceToAuditLog(source: any): AuditLog {
method setupISM (line 198) | private async setupISM(): Promise<void> {
method createISMPolicy (line 215) | private async createISMPolicy(retentionDays: number): Promise<void> {
method applyISMPolicyToIndexTemplate (line 297) | private async applyISMPolicyToIndexTemplate(): Promise<void> {
method buildDateRangeQuery (line 341) | private buildDateRangeQuery(filters?: AuditLogFilter): QueryContainer {
method buildOrganizationQuery (line 358) | private buildOrganizationQuery(organizationId: string, filters?: Audit...
method buildSearchBody (line 378) | private buildSearchBody(
method executeSearch (line 416) | private async executeSearch(searchBody: Search_RequestBody) {
method processSearchResponse (line 424) | private async processSearchResponse(
FILE: apps/api/src/audit/adapters/audit-typeorm.adapter.ts
class AuditTypeormStorageAdapter (line 15) | class AuditTypeormStorageAdapter implements AuditLogStorageAdapter {
method constructor (line 18) | constructor(
method write (line 23) | async write(auditLogs: AuditLog[]): Promise<void> {
method getAllLogs (line 27) | async getAllLogs(page?: number, limit = 1000, filters?: AuditLogFilter...
method getOrganizationLogs (line 49) | async getOrganizationLogs(
FILE: apps/api/src/audit/audit.module.ts
class AuditModule (line 66) | class AuditModule {}
FILE: apps/api/src/audit/constants/audit-tokens.ts
constant AUDIT_STORAGE_ADAPTER (line 6) | const AUDIT_STORAGE_ADAPTER = 'AUDIT_STORAGE_ADAPTER'
constant AUDIT_LOG_PUBLISHER (line 7) | const AUDIT_LOG_PUBLISHER = 'AUDIT_LOG_PUBLISHER'
constant AUDIT_KAFKA_SERVICE (line 8) | const AUDIT_KAFKA_SERVICE = 'AUDIT_KAFKA_SERVICE'
constant AUDIT_KAFKA_TOPIC (line 9) | const AUDIT_KAFKA_TOPIC = 'audit-logs'
FILE: apps/api/src/audit/controllers/audit.controller.ts
class AuditController (line 26) | class AuditController {
method constructor (line 27) | constructor(private readonly auditService: AuditService) {}
method getAllLogs (line 40) | async getAllLogs(@Query() query: ListAuditLogsQueryDto): Promise<Pagin...
method getOrganizationLogs (line 75) | async getOrganizationLogs(
FILE: apps/api/src/audit/decorators/audit.decorator.ts
type TypedRequest (line 11) | type TypedRequest<T> = Omit<Request, 'body'> & { body: T }
constant MASKED_AUDIT_VALUE (line 13) | const MASKED_AUDIT_VALUE = '********'
type AuditContext (line 15) | interface AuditContext {
constant AUDIT_CONTEXT_KEY (line 23) | const AUDIT_CONTEXT_KEY = 'audit_context'
FILE: apps/api/src/audit/dto/audit-log.dto.ts
class AuditLogDto (line 10) | class AuditLogDto {
method fromAuditLog (line 56) | static fromAuditLog(auditLog: AuditLog): AuditLogDto {
FILE: apps/api/src/audit/dto/create-audit-log-internal.dto.ts
class CreateAuditLogInternalDto (line 10) | class CreateAuditLogInternalDto {
FILE: apps/api/src/audit/dto/create-audit-log.dto.ts
class CreateAuditLogDto (line 12) | class CreateAuditLogDto {
FILE: apps/api/src/audit/dto/list-audit-logs-query.dto.ts
class ListAuditLogsQueryDto (line 13) | class ListAuditLogsQueryDto {
FILE: apps/api/src/audit/dto/paginated-audit-logs.dto.ts
class PaginatedAuditLogsDto (line 10) | class PaginatedAuditLogsDto {
FILE: apps/api/src/audit/dto/update-audit-log-internal.dto.ts
class UpdateAuditLogInternalDto (line 6) | class UpdateAuditLogInternalDto {
FILE: apps/api/src/audit/entities/audit-log.entity.ts
type AuditLogMetadata (line 9) | type AuditLogMetadata = Record<string, any>
class AuditLog (line 14) | class AuditLog {
method constructor (line 61) | constructor(params: {
FILE: apps/api/src/audit/enums/audit-action.enum.ts
type AuditAction (line 6) | enum AuditAction {
FILE: apps/api/src/audit/enums/audit-target.enum.ts
type AuditTarget (line 6) | enum AuditTarget {
FILE: apps/api/src/audit/events/audit-log-created.event.ts
class AuditLogCreatedEvent (line 8) | class AuditLogCreatedEvent {
method constructor (line 9) | constructor(public readonly auditLog: AuditLog) {}
FILE: apps/api/src/audit/events/audit-log-updated.event.ts
class AuditLogUpdatedEvent (line 8) | class AuditLogUpdatedEvent {
method constructor (line 9) | constructor(public readonly auditLog: AuditLog) {}
FILE: apps/api/src/audit/interceptors/audit.interceptor.ts
type RequestWithUser (line 28) | type RequestWithUser = Request & {
class AuditInterceptor (line 33) | class AuditInterceptor implements NestInterceptor {
method constructor (line 36) | constructor(
method intercept (line 42) | intercept(context: ExecutionContext, next: CallHandler): Observable<an...
method handleAuditedRequest (line 70) | private async handleAuditedRequest(
method resolveOrganizationId (line 115) | private resolveOrganizationId(request: RequestWithUser, result?: any):...
method resolveTargetId (line 124) | private resolveTargetId(auditContext: AuditContext, request: RequestWi...
method resolveRequestMetadata (line 142) | private resolveRequestMetadata(auditContext: AuditContext, request: Re...
method isToolboxAction (line 161) | private isToolboxAction(action: AuditAction): boolean {
method recordHandlerSuccess (line 165) | private async recordHandlerSuccess(
method recordHandlerError (line 182) | private async recordHandlerError(auditLog: AuditLog, errorMessage: str...
method resolveErrorStatusCode (line 193) | private resolveErrorStatusCode(error: any): number {
FILE: apps/api/src/audit/interfaces/audit-filter.interface.ts
type AuditLogFilter (line 6) | interface AuditLogFilter {
FILE: apps/api/src/audit/interfaces/audit-publisher.interface.ts
type AuditLogPublisher (line 12) | interface AuditLogPublisher {
FILE: apps/api/src/audit/interfaces/audit-storage.interface.ts
type AuditLogStorageAdapter (line 14) | interface AuditLogStorageAdapter {
FILE: apps/api/src/audit/publishers/audit-direct-publisher.ts
class AuditDirectPublisher (line 13) | class AuditDirectPublisher implements AuditLogPublisher, OnModuleInit {
method constructor (line 16) | constructor(@Inject(AUDIT_STORAGE_ADAPTER) private readonly storageAda...
method onModuleInit (line 18) | async onModuleInit(): Promise<void> {
method write (line 22) | async write(auditLogs: AuditLog[]): Promise<void> {
FILE: apps/api/src/audit/publishers/kafka/audit-kafka-consumer.controller.ts
class AuditKafkaConsumerController (line 16) | class AuditKafkaConsumerController {
method constructor (line 19) | constructor(@Inject(AUDIT_STORAGE_ADAPTER) private readonly auditStora...
method handleAuditLogMessage (line 23) | public async handleAuditLogMessage(@Payload() message: AuditLog, @Ctx(...
FILE: apps/api/src/audit/publishers/kafka/audit-kafka-publisher.ts
class AuditKafkaPublisher (line 13) | class AuditKafkaPublisher implements AuditLogPublisher, OnModuleInit {
method constructor (line 16) | constructor(private readonly kafkaService: ClientKafkaProxy) {}
method onModuleInit (line 18) | async onModuleInit() {
method write (line 23) | async write(auditLogs: AuditLog[]): Promise<void> {
FILE: apps/api/src/audit/services/audit.service.ts
class AuditService (line 25) | class AuditService implements OnApplicationBootstrap {
method constructor (line 28) | constructor(
method onApplicationBootstrap (line 41) | onApplicationBootstrap() {
method createLog (line 62) | async createLog(createDto: CreateAuditLogInternalDto): Promise<AuditLo...
method updateLog (line 69) | async updateLog(id: string, updateDto: UpdateAuditLogInternalDto): Pro...
method getAllLogs (line 98) | async getAllLogs(
method getOrganizationLogs (line 107) | async getOrganizationLogs(
method cleanupOldAuditLogs (line 124) | async cleanupOldAuditLogs(): Promise<void> {
method resolveDanglingLogs (line 154) | async resolveDanglingLogs() {
method publishAuditLogs (line 181) | async publishAuditLogs() {
FILE: apps/api/src/audit/subscribers/audit-log.subscriber.ts
class AuditLogSubscriber (line 12) | class AuditLogSubscriber implements EntitySubscriberInterface<AuditLog> {
method constructor (line 18) | constructor(dataSource: DataSource) {
method listenTo (line 22) | listenTo() {
method beforeUpdate (line 26) | beforeUpdate(event: UpdateEvent<AuditLog>) {
FILE: apps/api/src/auth/api-key.strategy.ts
type UserCache (line 22) | type UserCache = {
class ApiKeyStrategy (line 29) | class ApiKeyStrategy extends PassportStrategy(Strategy, 'api-key') imple...
method constructor (line 32) | constructor(
method onModuleInit (line 44) | onModuleInit() {
method validate (line 48) | async validate(token: string): Promise<AuthContextType | null> {
method getUserCache (line 182) | private async getUserCache(userId: string): Promise<UserCache | null> {
method getApiKeyCache (line 195) | private async getApiKeyCache(token: string): Promise<ApiKey | null> {
method generateValidationCacheKey (line 221) | private generateValidationCacheKey(token: string): string {
method generateUserCacheKey (line 225) | private generateUserCacheKey(userId: string): string {
FILE: apps/api/src/auth/auth.module.ts
class AuthModule (line 80) | class AuthModule {}
FILE: apps/api/src/auth/combined-auth.guard.ts
class CombinedAuthGuard (line 19) | class CombinedAuthGuard extends AuthGuard(['api-key', 'jwt']) {
method handleRequest (line 22) | handleRequest(err: any, user: any) {
FILE: apps/api/src/auth/constants/jwt-regex.constant.ts
constant JWT_REGEX (line 15) | const JWT_REGEX = /^eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/
FILE: apps/api/src/auth/failed-auth-tracker.service.ts
class FailedAuthTrackerService (line 19) | class FailedAuthTrackerService {
method constructor (line 22) | constructor(
method incrementFailedAuth (line 27) | async incrementFailedAuth(request: Request, response: Response): Promi...
FILE: apps/api/src/auth/get-auth-context.ts
function getAuthContext (line 9) | function getAuthContext<T extends BaseAuthContext>(
FILE: apps/api/src/auth/health-check.guard.ts
class HealthCheckGuard (line 11) | class HealthCheckGuard implements CanActivate {
method canActivate (line 14) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/auth/jwt.strategy.ts
type JwtStrategyConfig (line 17) | interface JwtStrategyConfig {
class JwtStrategy (line 24) | class JwtStrategy extends PassportStrategy(Strategy) {
method constructor (line 28) | constructor(
method validate (line 50) | async validate(request: Request, payload: any): Promise<AuthContext> {
method verifyToken (line 99) | async verifyToken(token: string): Promise<JWTPayload> {
FILE: apps/api/src/auth/or.guard.ts
function OrGuard (line 19) | function OrGuard(guards: Type<CanActivate>[]): Type<CanActivate> {
FILE: apps/api/src/auth/otel-collector.guard.ts
class OtelCollectorGuard (line 11) | class OtelCollectorGuard implements CanActivate {
method canActivate (line 14) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/auth/runner-auth.guard.ts
class RunnerAuthGuard (line 11) | class RunnerAuthGuard implements CanActivate {
method canActivate (line 14) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/auth/system-action.guard.ts
class SystemActionGuard (line 13) | class SystemActionGuard implements CanActivate {
method constructor (line 16) | constructor(private readonly reflector: Reflector) {}
method canActivate (line 18) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/clickhouse/clickhouse.module.ts
class ClickHouseModule (line 14) | class ClickHouseModule {}
FILE: apps/api/src/clickhouse/clickhouse.service.ts
class ClickHouseService (line 11) | class ClickHouseService implements OnModuleDestroy {
method constructor (line 15) | constructor(private readonly configService: TypedConfigService) {}
method getClient (line 17) | private getClient(): ClickHouseClient | null {
method onModuleDestroy (line 37) | async onModuleDestroy() {
method isConfigured (line 43) | isConfigured(): boolean {
method query (line 47) | async query<T>(query: string, params?: Record<string, unknown>): Promi...
method queryOne (line 71) | async queryOne<T>(query: string, params?: Record<string, unknown>): Pr...
FILE: apps/api/src/common/constants/constants.ts
constant SANDBOX_EVENT_CHANNEL (line 6) | const SANDBOX_EVENT_CHANNEL = 'sandbox.event.channel'
FILE: apps/api/src/common/constants/error-messages.ts
constant ARCHIVE_SANDBOXES_MESSAGE (line 9) | const ARCHIVE_SANDBOXES_MESSAGE = 'Consider archiving your unused Sandbo...
constant PER_SANDBOX_LIMIT_MESSAGE (line 11) | const PER_SANDBOX_LIMIT_MESSAGE =
FILE: apps/api/src/common/decorators/autocommit-offset.decorator.ts
function AutoCommitOffset (line 12) | function AutoCommitOffset(): MethodDecorator {
FILE: apps/api/src/common/decorators/distributed-lock.decorator.ts
type DistributedLockOptions (line 8) | type DistributedLockOptions = {
function DistributedLock (line 21) | function DistributedLock(options?: DistributedLockOptions): MethodDecora...
FILE: apps/api/src/common/decorators/log-execution.decorator.ts
constant LOG_THRESHOLD (line 9) | let LOG_THRESHOLD = parseInt(process.env.LOG_EXECUTION_THRESHOLD_MILLISE...
function LogExecution (line 14) | function LogExecution(name?: string) {
FILE: apps/api/src/common/decorators/on-async-event.decorator.ts
function OnAsyncEvent (line 8) | function OnAsyncEvent({ event, options = {} }: OnEventMetadata): MethodD...
FILE: apps/api/src/common/decorators/otel.decorator.ts
type SpanConfig (line 18) | interface SpanConfig {
type MetricConfig (line 32) | interface MetricConfig {
type InstrumentationConfig (line 50) | interface InstrumentationConfig {
function toSnakeCase (line 76) | function toSnakeCase(str: string): string {
function WithSpan (line 90) | function WithSpan(config?: string | SpanConfig) {
function WithMetric (line 145) | function WithMetric(config?: string | MetricConfig) {
function WithInstrumentation (line 201) | function WithInstrumentation(config?: string | InstrumentationConfig): M...
FILE: apps/api/src/common/decorators/page-limit.decorator.ts
function PageLimit (line 11) | function PageLimit(defaultValue = 100) {
FILE: apps/api/src/common/decorators/page-number.decorator.ts
function PageNumber (line 11) | function PageNumber(defaultValue = 1) {
FILE: apps/api/src/common/decorators/throttler-scope.decorator.ts
constant THROTTLER_SCOPE_KEY (line 8) | const THROTTLER_SCOPE_KEY = 'throttler:scope'
FILE: apps/api/src/common/decorators/to-array.decorator.ts
function ToArray (line 13) | function ToArray() {
FILE: apps/api/src/common/decorators/track-job-execution.decorator.ts
function TrackJobExecution (line 10) | function TrackJobExecution() {
FILE: apps/api/src/common/dto/url.dto.ts
class UrlDto (line 10) | class UrlDto {
method constructor (line 17) | constructor(url: string) {
FILE: apps/api/src/common/guards/anonymous-rate-limit.guard.ts
class AnonymousRateLimitGuard (line 12) | class AnonymousRateLimitGuard extends ThrottlerGuard {
method constructor (line 13) | constructor(options: ThrottlerModuleOptions, storageService: Throttler...
method getTracker (line 17) | protected async getTracker(req: Request): Promise<string> {
method generateKey (line 23) | protected generateKey(context: ExecutionContext, suffix: string, name:...
method handleRequest (line 29) | async handleRequest(requestProps: ThrottlerRequest): Promise<boolean> {
FILE: apps/api/src/common/guards/authenticated-rate-limit.guard.ts
class AuthenticatedRateLimitGuard (line 16) | class AuthenticatedRateLimitGuard extends ThrottlerGuard {
method constructor (line 19) | constructor(
method getTracker (line 29) | protected async getTracker(req: Request): Promise<string> {
method generateKey (line 47) | protected generateKey(context: ExecutionContext, suffix: string, name:...
method handleRequest (line 53) | async handleRequest(requestProps: ThrottlerRequest): Promise<boolean> {
method isValidAuthContext (line 143) | private isValidAuthContext(user: any): boolean {
method isSystemRole (line 147) | private isSystemRole(user: any): boolean {
method getCachedOrganizationRateLimits (line 152) | private async getCachedOrganizationRateLimits(organizationId: string):...
FILE: apps/api/src/common/interceptors/content-type.interceptors.ts
class ContentTypeInterceptor (line 10) | class ContentTypeInterceptor implements NestInterceptor {
method intercept (line 13) | async intercept(context: ExecutionContext, next: CallHandler): Promise...
FILE: apps/api/src/common/interfaces/auth-context.interface.ts
type BaseAuthContext (line 18) | interface BaseAuthContext {
type ApiRole (line 22) | type ApiRole =
type AuthContext (line 32) | interface AuthContext extends BaseAuthContext {
function isAuthContext (line 40) | function isAuthContext(user: BaseAuthContext): user is AuthContext {
type OrganizationAuthContext (line 44) | interface OrganizationAuthContext extends AuthContext {
function isOrganizationAuthContext (line 50) | function isOrganizationAuthContext(user: BaseAuthContext): user is Organ...
type AuthContextType (line 54) | type AuthContextType =
FILE: apps/api/src/common/interfaces/health-check-context.interface.ts
type HealthCheckContext (line 8) | interface HealthCheckContext extends BaseAuthContext {
function isHealthCheckContext (line 12) | function isHealthCheckContext(user: BaseAuthContext): user is HealthChec...
FILE: apps/api/src/common/interfaces/otel-collector-context.interface.ts
type OtelCollectorContext (line 8) | interface OtelCollectorContext extends BaseAuthContext {
function isOtelCollectorContext (line 12) | function isOtelCollectorContext(user: BaseAuthContext): user is OtelColl...
FILE: apps/api/src/common/interfaces/otel-config.interface.ts
type OTELConfig (line 6) | interface OTELConfig {
FILE: apps/api/src/common/interfaces/paginated-list.interface.ts
type PaginatedList (line 6) | interface PaginatedList<T> {
FILE: apps/api/src/common/interfaces/proxy-context.interface.ts
type ProxyContext (line 8) | interface ProxyContext extends BaseAuthContext {
function isProxyContext (line 12) | function isProxyContext(user: BaseAuthContext): user is ProxyContext {
FILE: apps/api/src/common/interfaces/region-proxy.interface.ts
type RegionProxyContext (line 8) | interface RegionProxyContext extends BaseAuthContext {
function isRegionProxyContext (line 13) | function isRegionProxyContext(user: BaseAuthContext): user is RegionProx...
FILE: apps/api/src/common/interfaces/region-ssh-gateway.interface.ts
type RegionSSHGatewayContext (line 8) | interface RegionSSHGatewayContext extends BaseAuthContext {
function isRegionSSHGatewayContext (line 13) | function isRegionSSHGatewayContext(user: BaseAuthContext): user is Regio...
FILE: apps/api/src/common/interfaces/runner-context.interface.ts
type RunnerContext (line 9) | interface RunnerContext extends BaseAuthContext {
function isRunnerContext (line 15) | function isRunnerContext(user: BaseAuthContext): user is RunnerContext {
FILE: apps/api/src/common/interfaces/ssh-gateway-context.interface.ts
type SshGatewayContext (line 8) | interface SshGatewayContext extends BaseAuthContext {
function isSshGatewayContext (line 12) | function isSshGatewayContext(user: BaseAuthContext): user is SshGatewayC...
FILE: apps/api/src/common/interfaces/trackable-job-executions.ts
type TrackableJobExecutions (line 6) | interface TrackableJobExecutions {
FILE: apps/api/src/common/middleware/failed-auth-rate-limit.middleware.ts
class FailedAuthRateLimitMiddleware (line 25) | class FailedAuthRateLimitMiddleware implements NestMiddleware {
method constructor (line 28) | constructor(
method use (line 33) | async use(req: Request, res: Response, next: NextFunction) {
FILE: apps/api/src/common/middleware/maintenance.middleware.ts
class MaintenanceMiddleware (line 11) | class MaintenanceMiddleware implements NestMiddleware {
method constructor (line 12) | constructor(private readonly configService: TypedConfigService) {}
method use (line 14) | use(req: Request, res: Response, next: NextFunction) {
FILE: apps/api/src/common/middleware/version-header.middleware.ts
class VersionHeaderMiddleware (line 11) | class VersionHeaderMiddleware implements NestMiddleware {
method constructor (line 14) | constructor(private readonly configService: TypedConfigService) {
method use (line 18) | use(req: Request, res: Response, next: NextFunction) {
FILE: apps/api/src/common/modules/body-parser-error.module.ts
class BodyParserErrorModule (line 10) | class BodyParserErrorModule implements OnModuleInit {
method constructor (line 11) | constructor(private readonly httpAdapterHost: HttpAdapterHost) {}
method onModuleInit (line 13) | onModuleInit() {
FILE: apps/api/src/common/providers/openfeature-posthog.provider.ts
type OpenFeaturePostHogProviderConfig (line 11) | interface OpenFeaturePostHogProviderConfig {
class OpenFeaturePostHogProvider (line 20) | class OpenFeaturePostHogProvider implements Provider {
method constructor (line 29) | constructor(config: OpenFeaturePostHogProviderConfig = {}) {
method resolveBooleanEvaluation (line 42) | async resolveBooleanEvaluation(
method resolveStringEvaluation (line 58) | async resolveStringEvaluation(
method resolveNumberEvaluation (line 73) | async resolveNumberEvaluation(
method resolveObjectEvaluation (line 88) | async resolveObjectEvaluation<T extends JsonValue>(
method evaluateFlag (line 143) | private async evaluateFlag(
method getTargetingKey (line 199) | private getTargetingKey(context: EvaluationContext): string | undefined {
method buildFlagContext (line 203) | private buildFlagContext(context: EvaluationContext) {
method hooks (line 235) | get hooks(): Hook[] {
method onClose (line 239) | async onClose(): Promise<void> {
FILE: apps/api/src/common/repositories/base.repository.ts
method constructor (line 27) | constructor(
method findOne (line 38) | async findOne(options: FindOneOptions<TEntity>): Promise<TEntity | null> {
method findOneBy (line 45) | async findOneBy(where: FindOptionsWhere<TEntity> | FindOptionsWhere<TEnt...
method findOneByOrFail (line 52) | async findOneByOrFail(where: FindOptionsWhere<TEntity> | FindOptionsWher...
method findOneOrFail (line 59) | async findOneOrFail(options: FindOneOptions<TEntity>): Promise<TEntity> {
method find (line 66) | async find(options?: FindManyOptions<TEntity>): Promise<TEntity[]> {
method findAndCount (line 73) | async findAndCount(options?: FindManyOptions<TEntity>): Promise<[TEntity...
method count (line 80) | async count(options?: FindManyOptions<TEntity>): Promise<number> {
method manager (line 89) | get manager() {
method createQueryBuilder (line 96) | createQueryBuilder(alias?: string): SelectQueryBuilder<TEntity> {
method delete (line 103) | async delete(criteria: FindOptionsWhere<TEntity> | FindOptionsWhere<TEnt...
FILE: apps/api/src/common/utils/api-key.ts
function generateRandomString (line 8) | function generateRandomString(size: number): string {
function generateApiKeyValue (line 12) | function generateApiKeyValue(): string {
function generateApiKeyHash (line 16) | function generateApiKeyHash(value: string): string {
FILE: apps/api/src/common/utils/app-mode.ts
type AppMode (line 6) | type AppMode = 'api' | 'worker' | 'all'
function isApiEnabled (line 23) | function isApiEnabled(): boolean {
function isWorkerEnabled (line 30) | function isWorkerEnabled(): boolean {
function getAppMode (line 37) | function getAppMode(): AppMode {
FILE: apps/api/src/common/utils/delete-s3-bucket.ts
function deleteS3Bucket (line 14) | async function deleteS3Bucket(s3: S3Client, bucket: string): Promise<voi...
FILE: apps/api/src/common/utils/docker-image.util.ts
type DockerImageInfo (line 9) | interface DockerImageInfo {
class DockerImage (line 22) | class DockerImage implements DockerImageInfo {
method constructor (line 29) | constructor(info: DockerImageInfo) {
method getFullName (line 37) | getFullName(): string {
function parseDockerImage (line 64) | function parseDockerImage(imageName: string): DockerImage {
function checkDockerfileHasRegistryPrefix (line 137) | function checkDockerfileHasRegistryPrefix(dockerfileContent: string): bo...
FILE: apps/api/src/common/utils/email.util.ts
class EmailUtils (line 6) | class EmailUtils {
method normalize (line 7) | static normalize(email: string): string {
method areEqual (line 11) | static areEqual(email1: string, email2: string): boolean {
FILE: apps/api/src/common/utils/from-axios-error.ts
function fromAxiosError (line 6) | function fromAxiosError(error: any): Error {
FILE: apps/api/src/common/utils/naming-strategy.util.ts
class CustomNamingStrategy (line 8) | class CustomNamingStrategy extends DefaultNamingStrategy implements Nami...
method primaryKeyName (line 9) | primaryKeyName(tableOrName: Table | string, columnNames: string[]) {
method foreignKeyName (line 15) | foreignKeyName(tableOrName: Table | string, columnNames: string[]): st...
method uniqueConstraintName (line 21) | uniqueConstraintName(tableOrName: Table | string, columnNames: string[...
method indexName (line 27) | indexName(tableOrName: Table | string, columnNames: string[]): string {
FILE: apps/api/src/common/utils/pino.util.ts
function swapMessageAndObject (line 15) | function swapMessageAndObject(
type LogConfig (line 89) | type LogConfig = ReturnType<typeof TypedConfigService.prototype.get<'log'>>
function getPinoTransport (line 97) | function getPinoTransport(
FILE: apps/api/src/common/utils/range-filter.ts
function createRangeFilter (line 14) | function createRangeFilter<T>(minValue?: T, maxValue?: T) {
FILE: apps/api/src/common/utils/rate-limit-headers.util.ts
type RateLimitHeadersOptions (line 12) | interface RateLimitHeadersOptions {
function setRateLimitHeaders (line 24) | function setRateLimitHeaders(response: Response, options: RateLimitHeade...
FILE: apps/api/src/common/utils/uuid.ts
function isValidUuid (line 6) | function isValidUuid(value: string): boolean {
FILE: apps/api/src/config/config.controller.ts
class ConfigController (line 13) | class ConfigController {
method constructor (line 14) | constructor(private readonly configService: TypedConfigService) {}
method getConfig (line 23) | getConfig() {
FILE: apps/api/src/config/dto/configuration.dto.ts
class Announcement (line 11) | class Announcement {
class PosthogConfig (line 29) | class PosthogConfig {
class RateLimitEntry (line 46) | class RateLimitEntry {
class RateLimitConfig (line 65) | class RateLimitConfig {
class OidcConfig (line 96) | class OidcConfig {
class ConfigurationDto (line 121) | class ConfigurationDto {
method constructor (line 252) | constructor(configService: TypedConfigService) {
FILE: apps/api/src/config/typed-config.module.ts
class TypedConfigModule (line 24) | class TypedConfigModule {
method forRoot (line 25) | static forRoot(options: Partial<ConfigModuleOptions> = {}): DynamicMod...
FILE: apps/api/src/config/typed-config.service.ts
type Configuration (line 16) | type Configuration = typeof configuration
type Paths (line 19) | type Paths<T> = T extends object
type PathValue (line 26) | type PathValue<T, P extends string> = P extends `${infer K}.${infer Rest}`
class TypedConfigService (line 37) | class TypedConfigService {
method constructor (line 38) | constructor(private configService: ConfigService) {}
method get (line 45) | get<K extends Paths<Configuration>>(key: K): PathValue<Configuration, ...
method getOrThrow (line 55) | getOrThrow<K extends Paths<Configuration>>(key: K): NonNullable<PathVa...
method getKafkaClientConfig (line 67) | getKafkaClientConfig(): KafkaConfig {
method getOpenSearchConfig (line 101) | getOpenSearchConfig(): ClientOptions {
method getRedisConfig (line 169) | getRedisConfig(overrides?: Partial<RedisOptions>): RedisOptions {
method getClickHouseConfig (line 185) | getClickHouseConfig() {
FILE: apps/api/src/docker-registry/controllers/docker-registry.controller.ts
class DockerRegistryController (line 59) | class DockerRegistryController {
method constructor (line 60) | constructor(private readonly dockerRegistryService: DockerRegistryServ...
method create (line 89) | async create(
method findAll (line 117) | async findAll(@AuthContext() authContext: OrganizationAuthContext): Pr...
method getTransientPushAccess (line 143) | async getTransientPushAccess(
method findOne (line 166) | async findOne(@DockerRegistry() registry: DockerRegistryEntity): Promi...
method update (line 201) | async update(
method remove (line 231) | async remove(@Param('id') registryId: string): Promise<void> {
method setDefault (line 257) | async setDefault(@Param('id') registryId: string): Promise<DockerRegis...
FILE: apps/api/src/docker-registry/docker-registry.module.ts
class DockerRegistryModule (line 29) | class DockerRegistryModule {}
FILE: apps/api/src/docker-registry/dto/create-docker-registry-internal.dto.ts
class CreateDockerRegistryInternalDto (line 8) | class CreateDockerRegistryInternalDto {
FILE: apps/api/src/docker-registry/dto/create-docker-registry.dto.ts
class CreateDockerRegistryDto (line 11) | class CreateDockerRegistryDto {
FILE: apps/api/src/docker-registry/dto/docker-registry.dto.ts
class DockerRegistryDto (line 11) | class DockerRegistryDto {
method fromDockerRegistry (line 61) | static fromDockerRegistry(dockerRegistry: DockerRegistry): DockerRegis...
FILE: apps/api/src/docker-registry/dto/update-docker-registry.dto.ts
class UpdateDockerRegistryDto (line 10) | class UpdateDockerRegistryDto {
FILE: apps/api/src/docker-registry/entities/docker-registry.entity.ts
class DockerRegistry (line 13) | class DockerRegistry {
FILE: apps/api/src/docker-registry/enums/registry-type.enum.ts
type RegistryType (line 6) | enum RegistryType {
FILE: apps/api/src/docker-registry/guards/docker-registry-access.guard.ts
class DockerRegistryAccessGuard (line 13) | class DockerRegistryAccessGuard implements CanActivate {
method constructor (line 14) | constructor(private readonly dockerRegistryService: DockerRegistryServ...
method canActivate (line 16) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/docker-registry/providers/docker-registry.provider.interface.ts
constant DOCKER_REGISTRY_PROVIDER (line 6) | const DOCKER_REGISTRY_PROVIDER = 'DOCKER_REGISTRY_PROVIDER'
type IDockerRegistryProvider (line 8) | interface IDockerRegistryProvider {
FILE: apps/api/src/docker-registry/providers/docker-registry.provider.ts
class DockerRegistryProvider (line 12) | class DockerRegistryProvider implements IDockerRegistryProvider {
method constructor (line 13) | constructor(private readonly httpService: HttpService) {}
method createRobotAccount (line 15) | async createRobotAccount(
method deleteArtifact (line 37) | async deleteArtifact(
FILE: apps/api/src/docker-registry/providers/mock-docker-registry.provider.ts
class MockDockerRegistryProvider (line 8) | class MockDockerRegistryProvider implements IDockerRegistryProvider {
method createRobotAccount (line 9) | async createRobotAccount(): Promise<{ name: string; secret: string }> {
method deleteArtifact (line 16) | async deleteArtifact(): Promise<void> {
FILE: apps/api/src/docker-registry/services/docker-registry.service.ts
constant AXIOS_TIMEOUT_MS (line 31) | const AXIOS_TIMEOUT_MS = 3000
constant DOCKER_HUB_REGISTRY (line 32) | const DOCKER_HUB_REGISTRY = 'registry-1.docker.io'
constant DOCKER_HUB_URL (line 33) | const DOCKER_HUB_URL = 'docker.io'
function normalizeRegistryUrl (line 39) | function normalizeRegistryUrl(url: string): string {
type ImageDetails (line 47) | interface ImageDetails {
class DockerRegistryService (line 59) | class DockerRegistryService {
method constructor (line 62) | constructor(
method create (line 70) | async create(
method findAll (line 98) | async findAll(organizationId: string, registryType: RegistryType): Pro...
method findOne (line 107) | async findOne(registryId: string): Promise<DockerRegistry | null> {
method findOneOrFail (line 113) | async findOneOrFail(registryId: string): Promise<DockerRegistry> {
method update (line 119) | async update(registryId: string, updateDto: UpdateDockerRegistryDto): ...
method remove (line 139) | async remove(registryId: string): Promise<void> {
method setDefault (line 151) | async setDefault(registryId: string): Promise<DockerRegistry> {
method unsetDefaultRegistry (line 166) | private async unsetDefaultRegistry(): Promise<void> {
method getAvailableInternalRegistry (line 181) | async getAvailableInternalRegistry(regionId: string): Promise<DockerRe...
method getAvailableTransientRegistry (line 209) | async getAvailableTransientRegistry(regionId?: string): Promise<Docker...
method getDefaultDockerHubRegistry (line 228) | async getDefaultDockerHubRegistry(): Promise<DockerRegistry | null> {
method getAvailableBackupRegistry (line 251) | async getAvailableBackupRegistry(preferredRegionId: string): Promise<D...
method findInternalRegistryBySnapshotRef (line 300) | async findInternalRegistryBySnapshotRef(ref: string, regionId: string)...
method findSourceRegistryBySnapshotImageName (line 335) | async findSourceRegistryBySnapshotImageName(
method findTransientRegistryBySnapshotImageName (line 400) | async findTransientRegistryBySnapshotImageName(imageName: string, regi...
method getRegistryPushAccess (line 427) | async getRegistryPushAccess(
method removeImage (line 483) | async removeImage(imageName: string, registryId: string): Promise<void> {
method getRegistryUrl (line 513) | getRegistryUrl(registry: DockerRegistry): string {
method findRegistryByImageName (line 526) | public async findRegistryByImageName(
method findRegistryByUrlMatch (line 556) | private findRegistryByUrlMatch(registries: DockerRegistry[], targetStr...
method createTemporaryRegistryConfig (line 571) | private createTemporaryRegistryConfig(registryOrigin: string): DockerR...
method getDockerHubToken (line 585) | private async getDockerHubToken(repository: string): Promise<string | ...
method deleteRepositoryWithPrefix (line 596) | private async deleteRepositoryWithPrefix(
method deleteSandboxRepository (line 699) | async deleteSandboxRepository(repository: string, registry: DockerRegi...
method deleteBackupImageFromRegistry (line 710) | async deleteBackupImageFromRegistry(imageName: string, registry: Docke...
method getSourceRegistriesForDockerfile (line 781) | async getSourceRegistriesForDockerfile(dockerfileContent: string, orga...
method _handleRegionSnapshotManagerCredsRegenerated (line 808) | private async _handleRegionSnapshotManagerCredsRegenerated(
method _handleRegionSnapshotManagerUpdated (line 829) | private async _handleRegionSnapshotManagerUpdated(payload: RegionSnaps...
method _handleRegionCreatedEvent (line 882) | private async _handleRegionCreatedEvent(payload: RegionCreatedEvent): ...
method handleRegionDeletedEvent (line 935) | async handleRegionDeletedEvent(payload: RegionDeletedEvent): Promise<v...
FILE: apps/api/src/email/constants.ts
constant EMAIL_MODULE_OPTIONS (line 6) | const EMAIL_MODULE_OPTIONS = 'EMAIL_MODULE_OPTIONS'
FILE: apps/api/src/email/email.module.ts
type EmailModuleOptions (line 10) | interface EmailModuleOptions {
class EmailModule (line 21) | class EmailModule {
method forRoot (line 22) | static forRoot(options: EmailModuleOptions): DynamicModule {
method forRootAsync (line 36) | static forRootAsync(options: {
FILE: apps/api/src/email/services/email.service.ts
class EmailService (line 16) | class EmailService {
method constructor (line 20) | constructor(@Inject('EMAIL_MODULE_OPTIONS') private readonly options: ...
method handleOrganizationInvitationCreated (line 40) | async handleOrganizationInvitationCreated(payload: OrganizationInvitat...
FILE: apps/api/src/encryption/encryption.module.ts
class EncryptionModule (line 13) | class EncryptionModule {}
FILE: apps/api/src/encryption/encryption.service.ts
type EncryptedData (line 11) | interface EncryptedData {
class EncryptionService (line 17) | class EncryptionService {
method constructor (line 24) | constructor(configService: TypedConfigService) {
method encrypt (line 30) | public async encrypt(input: string): Promise<string> {
method decrypt (line 45) | public async decrypt(input: string, backwardsCompatible = false): Prom...
method _decrypt (line 57) | private async _decrypt(input: string): Promise<string> {
method serialize (line 68) | private serialize(data: EncryptedData): string {
method deserialize (line 72) | private deserialize(data: string): EncryptedData {
FILE: apps/api/src/exceptions/bad-request.exception.ts
class BadRequestError (line 8) | class BadRequestError extends HttpException {
method constructor (line 9) | constructor(message: string) {
FILE: apps/api/src/exceptions/forbidden-operation.exception.ts
class ForbiddenOperationError (line 8) | class ForbiddenOperationError extends HttpException {
method constructor (line 9) | constructor(message: string) {
FILE: apps/api/src/exceptions/not-found.exception.ts
class ResourceNotFoundError (line 8) | class ResourceNotFoundError extends HttpException {
method constructor (line 9) | constructor(message: string) {
FILE: apps/api/src/exceptions/sandbox-error.exception.ts
class SandboxError (line 8) | class SandboxError extends HttpException {
method constructor (line 9) | constructor(message: string) {
FILE: apps/api/src/filters/all-exceptions.filter.ts
class AllExceptionsFilter (line 22) | class AllExceptionsFilter implements ExceptionFilter {
method constructor (line 25) | constructor(private readonly failedAuthTracker: FailedAuthTrackerServi...
method catch (line 27) | async catch(exception: unknown, host: ArgumentsHost): Promise<void> {
FILE: apps/api/src/filters/kafka-exception.filter.ts
type KafkaMaxRetryOptions (line 10) | interface KafkaMaxRetryOptions {
class KafkaMaxRetryExceptionFilter (line 17) | class KafkaMaxRetryExceptionFilter {
method constructor (line 25) | constructor(options: KafkaMaxRetryOptions = {}) {
method catch (line 38) | async catch(exception: unknown, host: ArgumentsHost) {
method createMessageKey (line 63) | private createMessageKey(context: KafkaContext): string {
method handleMaxRetriesExceeded (line 67) | private async handleMaxRetriesExceeded(
method sendToDLQ (line 88) | private async sendToDLQ(context: KafkaContext, message: any, retryCoun...
method createDLQMessage (line 110) | private createDLQMessage(message: any, retryCount: number, context: Ka...
method commitMessageOffset (line 126) | private async commitMessageOffset(context: KafkaContext, messageKey: s...
FILE: apps/api/src/generate-openapi.ts
function generateOpenAPI (line 19) | async function generateOpenAPI() {
FILE: apps/api/src/health/health.controller.ts
class HealthController (line 15) | class HealthController {
method constructor (line 18) | constructor(
method live (line 26) | live() {
method check (line 33) | async check() {
FILE: apps/api/src/health/health.module.ts
class HealthModule (line 17) | class HealthModule {}
FILE: apps/api/src/health/redis.health.ts
class RedisHealthIndicator (line 12) | class RedisHealthIndicator {
method constructor (line 14) | constructor(
method isHealthy (line 23) | async isHealthy(key: string) {
FILE: apps/api/src/interceptors/metrics.interceptor.ts
type RequestWithUser (line 40) | type RequestWithUser = Request & { user?: { userId: string; organization...
type CommonCaptureProps (line 41) | type CommonCaptureProps = {
class MetricsInterceptor (line 55) | class MetricsInterceptor implements NestInterceptor, OnApplicationShutdo...
method constructor (line 60) | constructor(private readonly configService: TypedConfigService) {
method intercept (line 80) | intercept(context: ExecutionContext, next: CallHandler): Observable<an...
method recordMetrics (line 107) | private async recordMetrics(request: RequestWithUser, response: any, s...
method captureCreateApiKey (line 463) | private captureCreateApiKey(props: CommonCaptureProps) {
method captureCreateDockerRegistry (line 467) | private captureCreateDockerRegistry(props: CommonCaptureProps, respons...
method captureCreateSnapshot (line 474) | private captureCreateSnapshot(props: CommonCaptureProps, request: Crea...
method captureActivateSnapshot (line 489) | private captureActivateSnapshot(props: CommonCaptureProps, snapshotId:...
method captureDeactivateSnapshot (line 495) | private captureDeactivateSnapshot(props: CommonCaptureProps, snapshotI...
method captureDeleteSnapshot (line 501) | private captureDeleteSnapshot(props: CommonCaptureProps, snapshotId: s...
method captureCreateSandbox (line 507) | private captureCreateSandbox(props: CommonCaptureProps, request: Creat...
method captureCreateWorkspace_deprecated (line 555) | private captureCreateWorkspace_deprecated(
method captureDeleteSandbox (line 599) | private captureDeleteSandbox(props: CommonCaptureProps, sandboxId: str...
method captureStartSandbox (line 605) | private captureStartSandbox(props: CommonCaptureProps, sandboxId: stri...
method captureStopSandbox (line 611) | private captureStopSandbox(props: CommonCaptureProps, sandboxId: strin...
method captureResizeSandbox (line 617) | private captureResizeSandbox(
method captureArchiveSandbox (line 630) | private captureArchiveSandbox(props: CommonCaptureProps, sandboxId: st...
method captureCreateBackup (line 636) | private captureCreateBackup(props: CommonCaptureProps, sandboxId: stri...
method captureUpdatePublicStatus (line 642) | private captureUpdatePublicStatus(props: CommonCaptureProps, sandboxId...
method captureSetAutostopInterval (line 649) | private captureSetAutostopInterval(props: CommonCaptureProps, sandboxI...
method captureSetAutoArchiveInterval (line 656) | private captureSetAutoArchiveInterval(props: CommonCaptureProps, sandb...
method captureSetAutoDeleteInterval (line 663) | private captureSetAutoDeleteInterval(props: CommonCaptureProps, sandbo...
method captureUpdateSandboxLabels (line 670) | private captureUpdateSandboxLabels(props: CommonCaptureProps, sandboxI...
method captureAcceptInvitation (line 676) | private captureAcceptInvitation(props: CommonCaptureProps, invitationI...
method captureDeclineInvitation (line 682) | private captureDeclineInvitation(props: CommonCaptureProps, invitation...
method captureCreateOrganization (line 688) | private captureCreateOrganization(
method captureLeaveOrganization (line 716) | private captureLeaveOrganization(props: CommonCaptureProps, organizati...
method captureSetOrganizationDefaultRegion (line 722) | private captureSetOrganizationDefaultRegion(
method captureUpdateOrganizationQuota (line 733) | private captureUpdateOrganizationQuota(
method captureUpdateOrganizationRegionQuota (line 749) | private captureUpdateOrganizationRegionQuota(
method captureDeleteOrganization (line 764) | private captureDeleteOrganization(props: CommonCaptureProps, organizat...
method captureUpdateOrganizationUserAccess (line 770) | private captureUpdateOrganizationUserAccess(
method captureDeleteOrganizationUser (line 784) | private captureDeleteOrganizationUser(props: CommonCaptureProps, organ...
method captureCreateOrganizationRole (line 791) | private captureCreateOrganizationRole(
method captureDeleteOrganizationRole (line 804) | private captureDeleteOrganizationRole(props: CommonCaptureProps, organ...
method captureUpdateOrganizationRole (line 811) | private captureUpdateOrganizationRole(
method captureCreateOrganizationInvitation (line 826) | private captureCreateOrganizationInvitation(
method captureUpdateOrganizationInvitation (line 840) | private captureUpdateOrganizationInvitation(
method captureCancelOrganizationInvitation (line 855) | private captureCancelOrganizationInvitation(props: CommonCaptureProps,...
method captureCreateVolume (line 862) | private captureCreateVolume(props: CommonCaptureProps, request: Create...
method captureDeleteVolume (line 869) | private captureDeleteVolume(props: CommonCaptureProps, volumeId: strin...
method captureUpdateOrganizationExperimentalConfig (line 875) | private captureUpdateOrganizationExperimentalConfig(
method captureToolboxCommand (line 890) | private captureToolboxCommand(
method capture (line 903) | private capture(event: string, props: CommonCaptureProps, errorEvent?:...
method captureCommonProperties (line 916) | private captureCommonProperties(props: CommonCaptureProps) {
method captureCommonGroups (line 930) | private captureCommonGroups(props: CommonCaptureProps) {
method onApplicationShutdown (line 934) | onApplicationShutdown(/*signal?: string*/) {
FILE: apps/api/src/main.ts
function bootstrap (line 38) | async function bootstrap() {
function createAdminApiKey (line 185) | async function createAdminApiKey(app: INestApplication, apiKeyName: stri...
FILE: apps/api/src/migrations/1741087887225-migration.ts
class Migration1741087887225 (line 8) | class Migration1741087887225 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 64) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1741088165704-migration.ts
class Migration1741088165704 (line 8) | class Migration1741088165704 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1741088883000-migration.ts
class Migration1741088883000 (line 8) | class Migration1741088883000 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 293) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1741088883001-migration.ts
class Migration1741088883001 (line 8) | class Migration1741088883001 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1741088883002-migration.ts
class Migration1741088883002 (line 10) | class Migration1741088883002 implements MigrationInterface {
method up (line 13) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 98) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1741877019888-migration.ts
class Migration1741877019888 (line 8) | class Migration1741877019888 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 19) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1742215525714-migration.ts
class Migration1742215525714 (line 8) | class Migration1742215525714 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1742475055353-migration.ts
class Migration1742475055353 (line 8) | class Migration1742475055353 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 18) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1742831092942-migration.ts
class Migration1742831092942 (line 8) | class Migration1742831092942 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1743593463168-migration.ts
class Migration1743593463168 (line 8) | class Migration1743593463168 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 17) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1743683015304-migration.ts
class Migration1743683015304 (line 8) | class Migration1743683015304 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 18) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1744028841133-migration.ts
class Migration1744028841133 (line 8) | class Migration1744028841133 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 16) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1744114341077-migration.ts
class Migration1744114341077 (line 8) | class Migration1744114341077 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 29) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1744378115901-migration.ts
class Migration1744378115901 (line 8) | class Migration1744378115901 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 18) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1744808444807-migration.ts
class Migration1744808444807 (line 8) | class Migration1744808444807 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 18) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1744868914148-migration.ts
class Migration1744868914148 (line 10) | class Migration1744868914148 implements MigrationInterface {
method up (line 13) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 53) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1744971114480-migration.ts
class Migration1744971114480 (line 8) | class Migration1744971114480 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 23) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1745393243334-migration.ts
class Migration1745393243334 (line 8) | class Migration1745393243334 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 37) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1745494761360-migration.ts
class Migration1745494761360 (line 8) | class Migration1745494761360 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1745574377029-migration.ts
class Migration1745574377029 (line 8) | class Migration1745574377029 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 59) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1745840296260-migration.ts
class Migration1745840296260 (line 9) | class Migration1745840296260 implements MigrationInterface {
method up (line 12) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 46) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1745864972652-migration.ts
class Migration1745864972652 (line 8) | class Migration1745864972652 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1746354231722-migration.ts
class Migration1746354231722 (line 8) | class Migration1746354231722 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1746604150910-migration.ts
class Migration1746604150910 (line 8) | class Migration1746604150910 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1747658203010-migration.ts
class Migration1747658203010 (line 8) | class Migration1747658203010 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1748006546552-migration.ts
class Migration1748006546552 (line 8) | class Migration1748006546552 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 24) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1748866194353-migration.ts
class Migration1748866194353 (line 8) | class Migration1748866194353 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1749474791343-migration.ts
class Migration1749474791343 (line 8) | class Migration1749474791343 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1749474791344-migration.ts
class Migration1749474791344 (line 8) | class Migration1749474791344 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 92) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1749474791345-migration.ts
class Migration1749474791345 (line 8) | class Migration1749474791345 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 37) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1750077343089-migration.ts
class Migration1750077343089 (line 8) | class Migration1750077343089 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1750436374899-migration.ts
class Migration1750436374899 (line 8) | class Migration1750436374899 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1750668569562-migration.ts
class Migration1750668569562 (line 8) | class Migration1750668569562 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1750751712412-migration.ts
class Migration1750751712412 (line 8) | class Migration1750751712412 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 24) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1751456907334-migration.ts
class Migration1751456907334 (line 10) | class Migration1751456907334 implements MigrationInterface {
method up (line 13) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 65) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1752494676200-migration.ts
class Migration1752494676200 (line 8) | class Migration1752494676200 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1752494676205-migration.ts
class Migration1752494676205 (line 8) | class Migration1752494676205 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 30) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1752848014862-migration.ts
class Migration1752848014862 (line 8) | class Migration1752848014862 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 53) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1753099115783-migration.ts
class Migration1753099115783 (line 8) | class Migration1753099115783 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1753100751730-migration.ts
class Migration1753100751730 (line 8) | class Migration1753100751730 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 30) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1753100751731-migration.ts
class Migration1753100751731 (line 9) | class Migration1753100751731 implements MigrationInterface {
method up (line 12) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 20) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1753185133351-migration.ts
class Migration1753185133351 (line 8) | class Migration1753185133351 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 18) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1753274135567-migration.ts
class Migration1753274135567 (line 8) | class Migration1753274135567 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1753430929609-migration.ts
class Migration1753430929609 (line 8) | class Migration1753430929609 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 24) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1753717830378-migration.ts
class Migration1753717830378 (line 8) | class Migration1753717830378 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 16) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1754042247109-migration.ts
class Migration1754042247109 (line 8) | class Migration1754042247109 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 17) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1755003696741-migration.ts
class Migration1755003696741 (line 8) | class Migration1755003696741 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1755356869493-migration.ts
class Migration1755356869493 (line 8) | class Migration1755356869493 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 17) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1755464957487-migration.ts
class Migration1755464957487 (line 8) | class Migration1755464957487 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 23) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1755521645207-migration.ts
class Migration1755521645207 (line 8) | class Migration1755521645207 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 17) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1755860619921-migration.ts
class Migration1755860619921 (line 8) | class Migration1755860619921 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 17) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1757513754037-migration.ts
class Migration1757513754037 (line 8) | class Migration1757513754037 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 52) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1757513754038-migration.ts
class Migration1757513754038 (line 8) | class Migration1757513754038 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 22) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1759241690773-migration.ts
class Migration1759241690773 (line 8) | class Migration1759241690773 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 16) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1759768058397-migration.ts
class Migration1759768058397 (line 8) | class Migration1759768058397 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 23) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1761912147638-migration.ts
class Migration1761912147638 (line 9) | class Migration1761912147638 implements MigrationInterface {
method up (line 12) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1761912147639-migration.ts
class Migration1761912147639 (line 8) | class Migration1761912147639 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 29) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1763561822000-migration.ts
class Migration1763561822000 (line 8) | class Migration1763561822000 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 17) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1764073472179-migration.ts
class Migration1764073472179 (line 9) | class Migration1764073472179 implements MigrationInterface {
method up (line 12) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 56) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1764073472180-migration.ts
class Migration1764073472180 (line 9) | class Migration1764073472180 implements MigrationInterface {
method up (line 12) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 22) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1764844895057-migration.ts
class Migration1764844895057 (line 10) | class Migration1764844895057 implements MigrationInterface {
method up (line 13) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 90) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1764844895058-migration.ts
class Migration1764844895058 (line 8) | class Migration1764844895058 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 16) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1765282546000-migration.ts
class Migration1765282546000 (line 8) | class Migration1765282546000 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 32) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1765366773736-migration.ts
class Migration1765366773736 (line 8) | class Migration1765366773736 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 27) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1765400000000-migration.ts
class Migration1765400000000 (line 8) | class Migration1765400000000 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 21) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1765806205881-migration.ts
class Migration1765806205881 (line 8) | class Migration1765806205881 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 46) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1766415256696-migration.ts
class Migration1766415256696 (line 8) | class Migration1766415256696 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 27) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1767830400000-migration.ts
class Migration1767830400000 (line 8) | class Migration1767830400000 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1768306129179-migration.ts
class Migration1768306129179 (line 8) | class Migration1768306129179 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 38) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1768461678804-migration.ts
class Migration1768461678804 (line 8) | class Migration1768461678804 implements MigrationInterface {
method up (line 16) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 25) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1768475454675-migration.ts
class Migration1768475454675 (line 8) | class Migration1768475454675 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 23) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1768485728153-migration.ts
class Migration1768485728153 (line 8) | class Migration1768485728153 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 47) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1768583941244-migration.ts
class Migration1768583941244 (line 8) | class Migration1768583941244 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1769516172576-migration.ts
class Migration1769516172576 (line 8) | class Migration1769516172576 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 16) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1769516172577-migration.ts
class Migration1769516172577 (line 8) | class Migration1769516172577 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1770043707083-migration.ts
class Migration1770043707083 (line 8) | class Migration1770043707083 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1770212429837-migration.ts
class Migration1770212429837 (line 8) | class Migration1770212429837 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 17) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1770823569571-migration.ts
class Migration1770823569571 (line 8) | class Migration1770823569571 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 16) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/1770880371265-migration.ts
class Migration1770880371265 (line 8) | class Migration1770880371265 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 18) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/pre-deploy/1770900000000-migration.ts
class Migration1770900000000 (line 8) | class Migration1770900000000 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 17) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/pre-deploy/1773744656413-migration.ts
class Migration1773744656413 (line 8) | class Migration1773744656413 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 17) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/migrations/pre-deploy/1773916204375-migration.ts
class Migration1773916204375 (line 8) | class Migration1773916204375 implements MigrationInterface {
method up (line 11) | public async up(queryRunner: QueryRunner): Promise<void> {
method down (line 15) | public async down(queryRunner: QueryRunner): Promise<void> {
FILE: apps/api/src/notification/emitters/notification-redis.emitter.ts
class NotificationRedisEmitter (line 26) | class NotificationRedisEmitter extends NotificationEmitter implements On...
method constructor (line 30) | constructor(@InjectRedis() private readonly redis: Redis) {
method onModuleInit (line 34) | onModuleInit() {
method emitSandboxCreated (line 39) | emitSandboxCreated(sandbox: SandboxDto) {
method emitSandboxStateUpdated (line 43) | emitSandboxStateUpdated(sandbox: SandboxDto, oldState: SandboxState, n...
method emitSandboxDesiredStateUpdated (line 47) | emitSandboxDesiredStateUpdated(
method emitSnapshotCreated (line 57) | emitSnapshotCreated(snapshot: SnapshotDto) {
method emitSnapshotStateUpdated (line 61) | emitSnapshotStateUpdated(snapshot: SnapshotDto, oldState: SnapshotStat...
method emitSnapshotRemoved (line 67) | emitSnapshotRemoved(snapshot: SnapshotDto) {
method emitVolumeCreated (line 71) | emitVolumeCreated(volume: VolumeDto) {
method emitVolumeStateUpdated (line 75) | emitVolumeStateUpdated(volume: VolumeDto, oldState: VolumeState, newSt...
method emitVolumeLastUsedAtUpdated (line 79) | emitVolumeLastUsedAtUpdated(volume: VolumeDto) {
method emitRunnerCreated (line 83) | emitRunnerCreated(runner: RunnerDto, organizationId: string | null) {
method emitRunnerStateUpdated (line 90) | emitRunnerStateUpdated(
method emitRunnerUnschedulableUpdated (line 102) | emitRunnerUnschedulableUpdated(runner: RunnerDto, organizationId: stri...
FILE: apps/api/src/notification/gateways/notification.gateway.ts
class NotificationGateway (line 34) | class NotificationGateway extends NotificationEmitter implements OnGatew...
method constructor (line 40) | constructor(
method onModuleInit (line 48) | onModuleInit() {
method afterInit (line 55) | afterInit(server: Server) {
method emitSandboxCreated (line 105) | emitSandboxCreated(sandbox: SandboxDto) {
method emitSandboxStateUpdated (line 109) | emitSandboxStateUpdated(sandbox: SandboxDto, oldState: SandboxState, n...
method emitSandboxDesiredStateUpdated (line 113) | emitSandboxDesiredStateUpdated(
method emitSnapshotCreated (line 123) | emitSnapshotCreated(snapshot: SnapshotDto) {
method emitSnapshotStateUpdated (line 127) | emitSnapshotStateUpdated(snapshot: SnapshotDto, oldState: SnapshotStat...
method emitSnapshotRemoved (line 133) | emitSnapshotRemoved(snapshot: SnapshotDto) {
method emitVolumeCreated (line 137) | emitVolumeCreated(volume: VolumeDto) {
method emitVolumeStateUpdated (line 141) | emitVolumeStateUpdated(volume: VolumeDto, oldState: VolumeState, newSt...
method emitVolumeLastUsedAtUpdated (line 145) | emitVolumeLastUsedAtUpdated(volume: VolumeDto) {
method emitRunnerCreated (line 149) | emitRunnerCreated(runner: RunnerDto, organizationId: string | null) {
method emitRunnerStateUpdated (line 156) | emitRunnerStateUpdated(
method emitRunnerUnschedulableUpdated (line 168) | emitRunnerUnschedulableUpdated(runner: RunnerDto, organizationId: stri...
FILE: apps/api/src/notification/notification.module.ts
class NotificationModule (line 30) | class NotificationModule {}
FILE: apps/api/src/notification/services/notification.service.ts
class NotificationService (line 35) | class NotificationService {
method constructor (line 36) | constructor(
method handleSandboxCreated (line 44) | async handleSandboxCreated(event: SandboxCreatedEvent) {
method handleSandboxStateUpdated (line 50) | async handleSandboxStateUpdated(event: SandboxStateUpdatedEvent) {
method handleSandboxDesiredStateUpdated (line 57) | async handleSandboxDesiredStateUpdated(event: SandboxDesiredStateUpdat...
method handleSnapshotCreated (line 64) | async handleSnapshotCreated(event: SnapshotCreatedEvent) {
method handleSnapshotStateUpdated (line 70) | async handleSnapshotStateUpdated(event: SnapshotStateUpdatedEvent) {
method handleSnapshotRemoved (line 76) | async handleSnapshotRemoved(event: SnapshotRemovedEvent) {
method handleVolumeCreated (line 82) | async handleVolumeCreated(event: VolumeCreatedEvent) {
method handleVolumeStateUpdated (line 88) | async handleVolumeStateUpdated(event: VolumeStateUpdatedEvent) {
method handleVolumeLastUsedAtUpdated (line 94) | async handleVolumeLastUsedAtUpdated(event: VolumeLastUsedAtUpdatedEven...
method handleRunnerCreated (line 100) | async handleRunnerCreated(event: RunnerCreatedEvent) {
method handleRunnerStateUpdated (line 109) | async handleRunnerStateUpdated(event: RunnerStateUpdatedEvent) {
method handleRunnerUnschedulableUpdated (line 118) | async handleRunnerUnschedulableUpdated(event: RunnerUnschedulableUpdat...
FILE: apps/api/src/object-storage/controllers/object-storage.controller.ts
class ObjectStorageController (line 23) | class ObjectStorageController {
method constructor (line 24) | constructor(private readonly objectStorageService: ObjectStorageServic...
method getPushAccess (line 37) | async getPushAccess(@AuthContext() authContext: OrganizationAuthContex...
FILE: apps/api/src/object-storage/object-storage.module.ts
class ObjectStorageModule (line 18) | class ObjectStorageModule {}
FILE: apps/api/src/object-storage/services/object-storage.service.ts
type S3Config (line 14) | interface S3Config {
class ObjectStorageService (line 28) | class ObjectStorageService {
method constructor (line 31) | constructor(private readonly configService: TypedConfigService) {}
method getPushAccess (line 33) | async getPushAccess(organizationId: string): Promise<StorageAccessDto> {
method getMinioCredentials (line 81) | private async getMinioCredentials(config: S3Config): Promise<StorageAc...
method getAwsCredentials (line 128) | private async getAwsCredentials(config: S3Config): Promise<StorageAcce...
FILE: apps/api/src/openapi-webhooks.ts
type OpenAPIObjectWithWebhooks (line 18) | interface OpenAPIObjectWithWebhooks extends OpenAPIObject {
function addWebhookDocumentation (line 40) | function addWebhookDocumentation(document: OpenAPIObject): OpenAPIObject...
FILE: apps/api/src/organization/constants/sandbox-states-consuming-compute.constant.ts
constant SANDBOX_STATES_CONSUMING_COMPUTE (line 8) | const SANDBOX_STATES_CONSUMING_COMPUTE: SandboxState[] = [
FILE: apps/api/src/organization/constants/sandbox-states-consuming-disk.constant.ts
constant SANDBOX_STATES_CONSUMING_DISK (line 9) | const SANDBOX_STATES_CONSUMING_DISK: SandboxState[] = [
FILE: apps/api/src/organization/constants/snapshot-states-consuming-resources.constant.ts
constant SNAPSHOT_STATES_CONSUMING_RESOURCES (line 8) | const SNAPSHOT_STATES_CONSUMING_RESOURCES: SnapshotState[] = [
FILE: apps/api/src/organization/constants/volume-states-consuming-resources.constant.ts
constant VOLUME_STATES_CONSUMING_RESOURCES (line 8) | const VOLUME_STATES_CONSUMING_RESOURCES: VolumeState[] = [
FILE: apps/api/src/organization/controllers/organization-invitation.controller.ts
class OrganizationInvitationController (line 28) | class OrganizationInvitationController {
method constructor (line 29) | constructor(private readonly organizationInvitationService: Organizati...
method create (line 60) | async create(
method update (line 106) | async update(
method findPending (line 130) | async findPending(@Param('organizationId') organizationId: string): Pr...
method cancel (line 160) | async cancel(
FILE: apps/api/src/organization/controllers/organization-region.controller.ts
class OrganizationRegionController (line 50) | class OrganizationRegionController {
method constructor (line 53) | constructor(
method listAvailableRegions (line 69) | async listAvailableRegions(@AuthContext() authContext: OrganizationAut...
method createRegion (line 97) | async createRegion(
method getRegionById (line 127) | async getRegionById(@Param('id') id: string): Promise<RegionDto> {
method deleteRegion (line 157) | async deleteRegion(@Param('id') id: string): Promise<void> {
method regenerateProxyApiKey (line 186) | async regenerateProxyApiKey(@Param('id') id: string): Promise<Regenera...
method updateRegion (line 216) | async updateRegion(@Param('id') id: string, @Body() updateRegionDto: U...
method regenerateSshGatewayApiKey (line 245) | async regenerateSshGatewayApiKey(@Param('id') id: string): Promise<Reg...
method regenerateSnapshotManagerCredentials (line 275) | async regenerateSnapshotManagerCredentials(@Param('id') id: string): P...
FILE: apps/api/src/organization/controllers/organization-role.controller.ts
class OrganizationRoleController (line 27) | class OrganizationRoleController {
method constructor (line 28) | constructor(private readonly organizationRoleService: OrganizationRole...
method create (line 57) | async create(
method findAll (line 80) | async findAll(@Param('organizationId') organizationId: string): Promis...
method updateRole (line 117) | async updateRole(
method delete (line 150) | async delete(@Param('organizationId') organizationId: string, @Param('...
FILE: apps/api/src/organization/controllers/organization-user.controller.ts
class OrganizationUserController (line 27) | class OrganizationUserController {
method constructor (line 28) | constructor(private readonly organizationUserService: OrganizationUser...
method findAll (line 45) | async findAll(@Param('organizationId') organizationId: string): Promis...
method updateAccess (line 81) | async updateAccess(
method delete (line 119) | async delete(@Param('organizationId') organizationId: string, @Param('...
FILE: apps/api/src/organization/controllers/organization.controller.ts
class OrganizationController (line 63) | class OrganizationController {
method constructor (line 64) | constructor(
method findInvitationsByUser (line 84) | async findInvitationsByUser(@AuthContext() authContext: IAuthContext):...
method getInvitationsCountByUser (line 100) | async getInvitationsCountByUser(@AuthContext() authContext: IAuthConte...
method acceptInvitation (line 125) | async acceptInvitation(
method declineInvitation (line 162) | async declineInvitation(
method create (line 200) | async create(
method setDefaultRegion (line 244) | async setDefaultRegion(
method findAll (line 262) | async findAll(@AuthContext() authContext: IAuthContext): Promise<Organ...
method findOne (line 283) | async findOne(@Param('organizationId') organizationId: string): Promis...
method delete (line 313) | async delete(@Param('organizationId') organizationId: string): Promise...
method getUsageOverview (line 333) | async getUsageOverview(@Param('organizationId') organizationId: string...
method updateOrganizationQuota (line 369) | async updateOrganizationQuota(
method updateOrganizationRegionQuota (line 413) | async updateOrganizationRegionQuota(
method leave (line 439) | async leave(
method suspend (line 477) | async suspend(
method unsuspend (line 510) | async unsuspend(@Param('organizationId') organizationId: string): Prom...
method getBySandboxId (line 531) | async getBySandboxId(@Param('sandboxId') sandboxId: string): Promise<O...
method getRegionQuotaBySandboxId (line 557) | async getRegionQuotaBySandboxId(@Param('sandboxId') sandboxId: string)...
method getOtelConfigBySandboxAuthToken (line 583) | async getOtelConfigBySandboxAuthToken(@Param('authToken') authToken: s...
method updateSandboxDefaultLimitedNetworkEgress (line 618) | async updateSandboxDefaultLimitedNetworkEgress(
method updateExperimentalConfig (line 656) | async updateExperimentalConfig(
FILE: apps/api/src/organization/dto/create-organization-invitation.dto.ts
class CreateOrganizationInvitationDto (line 13) | class CreateOrganizationInvitationDto {
FILE: apps/api/src/organization/dto/create-organization-quota.dto.ts
class CreateOrganizationQuotaDto (line 10) | class CreateOrganizationQuotaDto {
FILE: apps/api/src/organization/dto/create-organization-role.dto.ts
class CreateOrganizationRoleDto (line 11) | class CreateOrganizationRoleDto {
FILE: apps/api/src/organization/dto/create-organization.dto.ts
class CreateOrganizationDto (line 10) | class CreateOrganizationDto {
FILE: apps/api/src/organization/dto/create-organization.internal.dto.ts
type CreateOrganizationInternalDto (line 6) | interface CreateOrganizationInternalDto {
FILE: apps/api/src/organization/dto/organization-invitation.dto.ts
class OrganizationInvitationDto (line 13) | class OrganizationInvitationDto {
method fromOrganizationInvitation (line 72) | static fromOrganizationInvitation(invitation: OrganizationInvitation):...
FILE: apps/api/src/organization/dto/organization-role.dto.ts
class OrganizationRoleDto (line 11) | class OrganizationRoleDto {
method fromOrganizationRole (line 49) | static fromOrganizationRole(role: OrganizationRole): OrganizationRoleD...
FILE: apps/api/src/organization/dto/organization-sandbox-default-limited-network-egress.dto.ts
class OrganizationSandboxDefaultLimitedNetworkEgressDto (line 9) | class OrganizationSandboxDefaultLimitedNetworkEgressDto {
FILE: apps/api/src/organization/dto/organization-suspension.dto.ts
class OrganizationSuspensionDto (line 10) | class OrganizationSuspensionDto {
FILE: apps/api/src/organization/dto/organization-usage-overview.dto.ts
class RegionUsageOverviewDto (line 9) | class RegionUsageOverviewDto {
class OrganizationUsageOverviewDto (line 30) | class OrganizationUsageOverviewDto {
FILE: apps/api/src/organization/dto/organization-user.dto.ts
class OrganizationUserDto (line 13) | class OrganizationUserDto {
method fromEntities (line 56) | static fromEntities(organizationUser: OrganizationUser, user: User | n...
FILE: apps/api/src/organization/dto/organization.dto.ts
class OrganizationDto (line 10) | class OrganizationDto {
method fromOrganization (line 139) | static fromOrganization(organization: Organization): OrganizationDto {
FILE: apps/api/src/organization/dto/otel-config.dto.ts
class OtelConfigDto (line 9) | class OtelConfigDto {
FILE: apps/api/src/organization/dto/region-quota.dto.ts
class RegionQuotaDto (line 10) | class RegionQuotaDto {
method constructor (line 26) | constructor(regionQuota: RegionQuota) {
FILE: apps/api/src/organization/dto/sandbox-usage-overview-internal.dto.ts
type SandboxUsageOverviewInternalDto (line 6) | type SandboxUsageOverviewInternalDto = {
type PendingSandboxUsageOverviewInternalDto (line 12) | type PendingSandboxUsageOverviewInternalDto = {
type SandboxUsageOverviewWithPendingInternalDto (line 18) | type SandboxUsageOverviewWithPendingInternalDto = SandboxUsageOverviewIn...
FILE: apps/api/src/organization/dto/snapshot-usage-overview-internal.dto.ts
type SnapshotUsageOverviewInternalDto (line 6) | type SnapshotUsageOverviewInternalDto = {
type PendingSnapshotUsageOverviewInternalDto (line 10) | type PendingSnapshotUsageOverviewInternalDto = {
type SnapshotUsageOverviewWithPendingInternalDto (line 14) | type SnapshotUsageOverviewWithPendingInternalDto = SnapshotUsageOverview...
FILE: apps/api/src/organization/dto/update-organization-default-region.dto.ts
class UpdateOrganizationDefaultRegionDto (line 10) | class UpdateOrganizationDefaultRegionDto {
FILE: apps/api/src/organization/dto/update-organization-invitation.dto.ts
class UpdateOrganizationInvitationDto (line 12) | class UpdateOrganizationInvitationDto {
FILE: apps/api/src/organization/dto/update-organization-member-access.dto.ts
class UpdateOrganizationMemberAccessDto (line 12) | class UpdateOrganizationMemberAccessDto {
FILE: apps/api/src/organization/dto/update-organization-quota.dto.ts
class UpdateOrganizationQuotaDto (line 9) | class UpdateOrganizationQuotaDto {
FILE: apps/api/src/organization/dto/update-organization-region-quota.dto.ts
class UpdateOrganizationRegionQuotaDto (line 9) | class UpdateOrganizationRegionQuotaDto {
FILE: apps/api/src/organization/dto/update-organization-role.dto.ts
class UpdateOrganizationRoleDto (line 11) | class UpdateOrganizationRoleDto {
FILE: apps/api/src/organization/dto/volume-usage-overview-internal.dto.ts
type VolumeUsageOverviewInternalDto (line 6) | type VolumeUsageOverviewInternalDto = {
type PendingVolumeUsageOverviewInternalDto (line 10) | type PendingVolumeUsageOverviewInternalDto = {
type VolumeUsageOverviewWithPendingInternalDto (line 14) | type VolumeUsageOverviewWithPendingInternalDto = VolumeUsageOverviewInte...
FILE: apps/api/src/organization/entities/organization-invitation.entity.ts
class OrganizationInvitation (line 22) | class OrganizationInvitation {
FILE: apps/api/src/organization/entities/organization-role.entity.ts
class OrganizationRole (line 13) | class OrganizationRole {
FILE: apps/api/src/organization/entities/organization-user.entity.ts
class OrganizationUser (line 12) | class OrganizationUser {
FILE: apps/api/src/organization/entities/organization.entity.ts
class Organization (line 13) | class Organization {
method sandboxMetadata (line 202) | get sandboxMetadata(): Record<string, string> {
method constructor (line 210) | constructor(defaultRegionId?: string) {
FILE: apps/api/src/organization/entities/region-quota.entity.ts
class RegionQuota (line 10) | class RegionQuota {
method constructor (line 54) | constructor(
FILE: apps/api/src/organization/enums/organization-invitation-status.enum.ts
type OrganizationInvitationStatus (line 6) | enum OrganizationInvitationStatus {
FILE: apps/api/src/organization/enums/organization-member-role.enum.ts
type OrganizationMemberRole (line 6) | enum OrganizationMemberRole {
FILE: apps/api/src/organization/enums/organization-resource-permission.enum.ts
type OrganizationResourcePermission (line 9) | enum OrganizationResourcePermission {
FILE: apps/api/src/organization/events/organization-invitation-accepted.event.ts
class OrganizationInvitationAcceptedEvent (line 10) | class OrganizationInvitationAcceptedEvent {
method constructor (line 11) | constructor(
FILE: apps/api/src/organization/events/organization-invitation-created.event.ts
class OrganizationInvitationCreatedEvent (line 6) | class OrganizationInvitationCreatedEvent {
method constructor (line 7) | constructor(
FILE: apps/api/src/organization/events/organization-resource-permissions-unassigned.event.ts
class OrganizationResourcePermissionsUnassignedEvent (line 9) | class OrganizationResourcePermissionsUnassignedEvent {
method constructor (line 10) | constructor(
FILE: apps/api/src/organization/events/organization-suspended-sandbox-stopped.event.ts
class OrganizationSuspendedSandboxStoppedEvent (line 6) | class OrganizationSuspendedSandboxStoppedEvent {
method constructor (line 7) | constructor(public readonly sandboxId: string) {}
FILE: apps/api/src/organization/events/organization-suspended-snapshot-deactivated.event.ts
class OrganizationSuspendedSnapshotDeactivatedEvent (line 6) | class OrganizationSuspendedSnapshotDeactivatedEvent {
method constructor (line 7) | constructor(public readonly snapshotId: string) {}
FILE: apps/api/src/organization/exceptions/DefaultRegionRequiredException.ts
class DefaultRegionRequiredException (line 8) | class DefaultRegionRequiredException extends HttpException {
method constructor (line 9) | constructor(
FILE: apps/api/src/organization/guards/organization-access.guard.ts
class OrganizationAccessGuard (line 17) | class OrganizationAccessGuard implements CanActivate {
method constructor (line 21) | constructor(
method canActivate (line 26) | async canActivate(context: ExecutionContext): Promise<boolean> {
method getCachedOrganization (line 100) | private async getCachedOrganization(organizationId: string): Promise<O...
method getCachedOrganizationUser (line 118) | private async getCachedOrganizationUser(organizationId: string, userId...
FILE: apps/api/src/organization/guards/organization-action.guard.ts
class OrganizationActionGuard (line 17) | class OrganizationActionGuard extends OrganizationAccessGuard {
method constructor (line 20) | constructor(
method canActivate (line 28) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/organization/guards/organization-resource-action.guard.ts
class OrganizationResourceActionGuard (line 17) | class OrganizationResourceActionGuard extends OrganizationAccessGuard {
method constructor (line 20) | constructor(
method canActivate (line 27) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/organization/helpers/organization-usage.helper.ts
type OrganizationUsageQuotaType (line 6) | type OrganizationUsageQuotaType = 'cpu' | 'memory' | 'disk' | 'snapshot_...
type OrganizationUsageResourceType (line 7) | type OrganizationUsageResourceType = 'sandbox' | 'snapshot' | 'volume'
constant QUOTA_TO_RESOURCE_MAP (line 9) | const QUOTA_TO_RESOURCE_MAP: Record<OrganizationUsageQuotaType, Organiza...
function getResourceTypeFromQuota (line 17) | function getResourceTypeFromQuota(quotaType: OrganizationUsageQuotaType)...
FILE: apps/api/src/organization/organization.module.ts
class OrganizationModule (line 88) | class OrganizationModule {}
FILE: apps/api/src/organization/services/organization-invitation.service.ts
class OrganizationInvitationService (line 31) | class OrganizationInvitationService {
method constructor (line 32) | constructor(
method create (line 44) | async create(
method update (line 109) | async update(
method findPending (line 147) | async findPending(organizationId: string): Promise<OrganizationInvitat...
method findByUser (line 161) | async findByUser(userId: string): Promise<OrganizationInvitation[]> {
method getCountByUser (line 181) | async getCountByUser(userId: string): Promise<number> {
method findOneOrFail (line 197) | async findOneOrFail(invitationId: string): Promise<OrganizationInvitat...
method accept (line 207) | async accept(invitationId: string, userId: string): Promise<Organizati...
method decline (line 226) | async decline(invitationId: string): Promise<void> {
method cancel (line 231) | async cancel(invitationId: string): Promise<void> {
method prepareStatusUpdate (line 236) | private async prepareStatusUpdate(
FILE: apps/api/src/organization/services/organization-role.service.ts
class OrganizationRoleService (line 14) | class OrganizationRoleService {
method constructor (line 15) | constructor(
method create (line 20) | async create(
method findAll (line 32) | async findAll(organizationId: string): Promise<OrganizationRole[]> {
method findByIds (line 41) | async findByIds(roleIds: string[]): Promise<OrganizationRole[]> {
method update (line 53) | async update(roleId: string, updateOrganizationRoleDto: UpdateOrganiza...
method delete (line 73) | async delete(roleId: string): Promise<void> {
FILE: apps/api/src/organization/services/organization-usage.service.ts
class OrganizationUsageService (line 52) | class OrganizationUsageService {
method constructor (line 65) | constructor(
method getUsageOverview (line 84) | async getUsageOverview(organizationId: string, organization?: Organiza...
method getSandboxUsageOverview (line 136) | async getSandboxUsageOverview(
method getSnapshotUsageOverview (line 195) | async getSnapshotUsageOverview(organizationId: string): Promise<Snapsh...
method getVolumeUsageOverview (line 236) | async getVolumeUsageOverview(organizationId: string): Promise<VolumeUs...
method excludeSandboxFromUsageOverview (line 278) | private async excludeSandboxFromUsageOverview<T extends SandboxUsageOv...
method getCachedSandboxUsageOverview (line 317) | private async getCachedSandboxUsageOverview(
method getCachedPendingSandboxUsageOverview (line 387) | private async getCachedPendingSandboxUsageOverview(
method getCachedSnapshotUsageOverview (line 424) | private async getCachedSnapshotUsageOverview(
method getCachedPendingSnapshotUsageOverview (line 475) | private async getCachedPendingSnapshotUsageOverview(
method getCachedVolumeUsageOverview (line 504) | private async getCachedVolumeUsageOverview(
method getCachedPendingVolumeUsageOverview (line 555) | private async getCachedPendingVolumeUsageOverview(
method parseNonNegativeCachedValue (line 586) | private parseNonNegativeCachedValue(value: string | null): number | nu...
method fetchSandboxUsageFromDb (line 606) | async fetchSandboxUsageFromDb(organizationId: string, regionId: string...
method fetchSnapshotUsageFromDb (line 659) | private async fetchSnapshotUsageFromDb(organizationId: string): Promis...
method fetchVolumeUsageFromDb (line 684) | private async fetchVolumeUsageFromDb(organizationId: string): Promise<...
method getCurrentQuotaUsageCacheKey (line 713) | private getCurrentQuotaUsageCacheKey(
method getPendingQuotaUsageCacheKey (line 730) | private getPendingQuotaUsageCacheKey(
method updateCurrentQuotaUsage (line 754) | private async updateCurrentQuotaUsage(
method incrementPendingSandboxUsage (line 823) | async incrementPendingSandboxUsage(
method decrementPendingSandboxUsage (line 928) | async decrementPendingSandboxUsage(
method incrementPendingSnapshotUsage (line 984) | async incrementPendingSnapshotUsage(organizationId: string, snapshotCo...
method decrementPendingSnapshotUsage (line 1018) | async decrementPendingSnapshotUsage(organizationId: string, snapshotCo...
method incrementPendingVolumeUsage (line 1052) | async incrementPendingVolumeUsage(organizationId: string, volumeCount:...
method decrementPendingVolumeUsage (line 1086) | async decrementPendingVolumeUsage(organizationId: string, volumeCount?...
method applyResizeUsageChange (line 1116) | async applyResizeUsageChange(
method getCacheStalenessKey (line 1141) | private getCacheStalenessKey(
method resetCacheStaleness (line 1154) | private async resetCacheStaleness(
method isCacheStale (line 1170) | private async isCacheStale(
method handleSandboxCreated (line 1191) | async handleSandboxCreated(event: SandboxCreatedEvent) {
method handleSandboxStateUpdated (line 1215) | async handleSandboxStateUpdated(event: SandboxStateUpdatedEvent) {
method handleSnapshotCreated (line 1295) | async handleSnapshotCreated(event: SnapshotCreatedEvent) {
method handleSnapshotStateUpdated (line 1312) | async handleSnapshotStateUpdated(event: SnapshotStateUpdatedEvent) {
method handleVolumeCreated (line 1338) | async handleVolumeCreated(event: VolumeCreatedEvent) {
method handleVolumeStateUpdated (line 1355) | async handleVolumeStateUpdated(event: VolumeStateUpdatedEvent) {
method calculateQuotaUsageDelta (line 1380) | private calculateQuotaUsageDelta<TState>(
FILE: apps/api/src/organization/services/organization-user.service.ts
class OrganizationUserService (line 25) | class OrganizationUserService {
method constructor (line 26) | constructor(
method findAll (line 35) | async findAll(organizationId: string): Promise<OrganizationUserDto[]> {
method findOne (line 56) | async findOne(organizationId: string, userId: string): Promise<Organiz...
method exists (line 65) | async exists(organizationId: string, userId: string): Promise<boolean> {
method updateAccess (line 71) | async updateAccess(
method delete (line 139) | async delete(organizationId: string, userId: string): Promise<void> {
method removeWithEntityManager (line 154) | private async removeWithEntityManager(
method createWithEntityManager (line 179) | private async createWithEntityManager(
method handleOrganizationInvitationAcceptedEvent (line 197) | async handleOrganizationInvitationAcceptedEvent(
method handleUserDeletedEvent (line 212) | async handleUserDeletedEvent(payload: UserDeletedEvent): Promise<void> {
method getAssignedPermissions (line 235) | private getAssignedPermissions(
FILE: apps/api/src/organization/services/organization.service.ts
class OrganizationService (line 58) | class OrganizationService implements OnModuleInit, TrackableJobExecution...
method constructor (line 64) | constructor(
method onApplicationShutdown (line 86) | async onApplicationShutdown() {
method onModuleInit (line 94) | async onModuleInit(): Promise<void> {
method create (line 98) | async create(
method findByUser (line 113) | async findByUser(userId: string): Promise<Organization[]> {
method findOne (line 123) | async findOne(organizationId: string): Promise<Organization | null> {
method findBySandboxId (line 129) | async findBySandboxId(sandboxId: string): Promise<Organization | null> {
method findBySandboxAuthToken (line 141) | async findBySandboxAuthToken(authToken: string): Promise<Organization ...
method findPersonal (line 157) | async findPersonal(userId: string): Promise<Organization> {
method delete (line 161) | async delete(organizationId: string): Promise<void> {
method updateQuota (line 171) | async updateQuota(organizationId: string, updateDto: UpdateOrganizatio...
method updateRegionQuota (line 199) | async updateRegionQuota(
method getRegionQuotas (line 216) | async getRegionQuotas(organizationId: string): Promise<RegionQuotaDto[...
method getRegionQuota (line 221) | async getRegionQuota(organizationId: string, regionId: string): Promis...
method getRegionQuotaBySandboxId (line 229) | async getRegionQuotaBySandboxId(sandboxId: string): Promise<RegionQuot...
method listAvailableRegions (line 249) | async listAvailableRegions(organizationId: string): Promise<RegionDto[...
method suspend (line 279) | async suspend(
method unsuspend (line 301) | async unsuspend(organizationId: string): Promise<void> {
method updateSandboxDefaultLimitedNetworkEgress (line 315) | async updateSandboxDefaultLimitedNetworkEgress(
method setDefaultRegion (line 334) | async setDefaultRegion(organizationId: string, defaultRegionId: string...
method updateExperimentalConfig (line 365) | async updateExperimentalConfig(
method getOtelConfigBySandboxAuthToken (line 396) | async getOtelConfigBySandboxAuthToken(sandboxAuthToken: string): Promi...
method validatedExperimentalConfig (line 422) | private async validatedExperimentalConfig(
method createWithEntityManager (line 456) | private async createWithEntityManager(
method removeWithEntityManager (line 536) | private async removeWithEntityManager(
method unsuspendPersonalWithEntityManager (line 549) | private async unsuspendPersonalWithEntityManager(entityManager: Entity...
method findPersonalWithEntityManager (line 559) | private async findPersonalWithEntityManager(entityManager: EntityManag...
method validateOrganizationDefaultRegion (line 574) | async validateOrganizationDefaultRegion(defaultRegionId: string): Prom...
method stopSuspendedOrganizationSandboxes (line 587) | async stopSuspendedOrganizationSandboxes(): Promise<void> {
method deactivateSuspendedOrganizationSnapshots (line 641) | async deactivateSuspendedOrganizationSnapshots(): Promise<void> {
method handleUserCreatedEvent (line 698) | async handleUserCreatedEvent(payload: UserCreatedEvent): Promise<Organ...
method handleUserEmailVerifiedEvent (line 717) | async handleUserEmailVerifiedEvent(payload: UserEmailVerifiedEvent): P...
method handleUserDeletedEvent (line 725) | async handleUserDeletedEvent(payload: UserDeletedEvent): Promise<void> {
method assertOrganizationIsNotSuspended (line 731) | assertOrganizationIsNotSuspended(organization: Organization): void {
FILE: apps/api/src/region/constants/region-name-regex.constant.ts
constant REGION_NAME_REGEX (line 6) | const REGION_NAME_REGEX = /^[a-zA-Z0-9_.-]+$/
FILE: apps/api/src/region/controllers/region.controller.ts
class RegionController (line 16) | class RegionController {
method constructor (line 19) | constructor(private readonly regionService: RegionService) {}
method listRegions (line 32) | async listRegions(): Promise<RegionDto[]> {
FILE: apps/api/src/region/dto/create-region-internal.dto.ts
class CreateRegionInternalDto (line 8) | class CreateRegionInternalDto {
FILE: apps/api/src/region/dto/create-region.dto.ts
class CreateRegionDto (line 10) | class CreateRegionDto {
class CreateRegionResponseDto (line 45) | class CreateRegionResponseDto {
method constructor (line 85) | constructor(params: {
FILE: apps/api/src/region/dto/create-region.internal.dto.ts
type CreateRegionInternalDto (line 6) | interface CreateRegionInternalDto {
FILE: apps/api/src/region/dto/regenerate-api-key.dto.ts
class RegenerateApiKeyResponseDto (line 10) | class RegenerateApiKeyResponseDto {
method constructor (line 19) | constructor(apiKey: string) {
FILE: apps/api/src/region/dto/region.dto.ts
class RegionDto (line 12) | class RegionDto {
method fromRegion (line 78) | static fromRegion(region: Region): RegionDto {
FILE: apps/api/src/region/dto/snapshot-manager-credentials.dto.ts
class SnapshotManagerCredentialsDto (line 10) | class SnapshotManagerCredentialsDto {
method constructor (line 26) | constructor(params: { username: string; password: string }) {
FILE: apps/api/src/region/dto/update-region.dto.ts
class UpdateRegionDto (line 9) | class UpdateRegionDto {
FILE: apps/api/src/region/entities/region.entity.ts
class Region (line 42) | class Region {
method constructor (line 95) | constructor(params: {
method validateRegionType (line 131) | validateRegionType() {
FILE: apps/api/src/region/enums/region-type.enum.ts
type RegionType (line 6) | enum RegionType {
FILE: apps/api/src/region/events/region-created.event.ts
class RegionCreatedEvent (line 9) | class RegionCreatedEvent {
method constructor (line 10) | constructor(
FILE: apps/api/src/region/events/region-deleted.event.ts
class RegionDeletedEvent (line 9) | class RegionDeletedEvent {
method constructor (line 10) | constructor(
FILE: apps/api/src/region/events/region-snapshot-manager-creds.event.ts
class RegionSnapshotManagerCredsRegeneratedEvent (line 9) | class RegionSnapshotManagerCredsRegeneratedEvent {
method constructor (line 10) | constructor(
class RegionSnapshotManagerUpdatedEvent (line 19) | class RegionSnapshotManagerUpdatedEvent {
method constructor (line 20) | constructor(
FILE: apps/api/src/region/guards/region-access.guard.ts
class RegionAccessGuard (line 20) | class RegionAccessGuard implements CanActivate {
method constructor (line 23) | constructor(private readonly regionService: RegionService) {}
method canActivate (line 25) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/region/region.module.ts
class RegionModule (line 20) | class RegionModule {}
FILE: apps/api/src/region/services/region.service.ts
class RegionService (line 40) | class RegionService {
method constructor (line 43) | constructor(
method create (line 61) | async create(
method findOne (line 126) | async findOne(id: string, cache = false): Promise<Region | null> {
method findOneByName (line 145) | async findOneByName(name: string, organizationId: string | null): Prom...
method findOneByProxyApiKey (line 155) | async findOneByProxyApiKey(proxyApiKey: string): Promise<Region | null> {
method findOneBySshGatewayApiKey (line 165) | async findOneBySshGatewayApiKey(sshGatewayApiKey: string): Promise<Reg...
method getOrganizationId (line 175) | async getOrganizationId(regionId: string): Promise<string | null | und...
method findAllByOrganization (line 196) | async findAllByOrganization(organizationId: string, regionType?: Regio...
method findAllByRegionType (line 212) | async findAllByRegionType(regionType: RegionType): Promise<RegionDto[]> {
method findByIds (line 229) | async findByIds(ids: string[]): Promise<Region[]> {
method delete (line 245) | async delete(id: string): Promise<void> {
method update (line 275) | async update(regionId: string, updateRegion: UpdateRegionDto): Promise...
method regenerateProxyApiKey (line 349) | async regenerateProxyApiKey(regionId: string): Promise<string> {
method regenerateSshGatewayApiKey (line 374) | async regenerateSshGatewayApiKey(regionId: string): Promise<string> {
method regenerateSnapshotManagerCredentials (line 399) | async regenerateSnapshotManagerCredentials(regionId: string): Promise<...
FILE: apps/api/src/sandbox-telemetry/controllers/sandbox-telemetry.controller.ts
class SandboxTelemetryController (line 28) | class SandboxTelemetryController {
method constructor (line 29) | constructor(private readonly sandboxTelemetryService: SandboxTelemetry...
method getSandboxLogs (line 49) | async getSandboxLogs(
method getSandboxTraces (line 82) | async getSandboxTraces(
method getSandboxTraceSpans (line 118) | async getSandboxTraceSpans(
method getSandboxMetrics (line 143) | async getSandboxMetrics(
FILE: apps/api/src/sandbox-telemetry/dto/log-entry.dto.ts
class LogEntryDto (line 9) | class LogEntryDto {
FILE: apps/api/src/sandbox-telemetry/dto/metrics-response.dto.ts
class MetricDataPointDto (line 9) | class MetricDataPointDto {
class MetricSeriesDto (line 18) | class MetricSeriesDto {
class MetricsResponseDto (line 27) | class MetricsResponseDto {
FILE: apps/api/src/sandbox-telemetry/dto/paginated-logs.dto.ts
class PaginatedLogsDto (line 10) | class PaginatedLogsDto {
FILE: apps/api/src/sandbox-telemetry/dto/paginated-traces.dto.ts
class PaginatedTracesDto (line 10) | class PaginatedTracesDto {
FILE: apps/api/src/sandbox-telemetry/dto/telemetry-query-params.dto.ts
class TelemetryQueryParamsDto (line 10) | class TelemetryQueryParamsDto {
class LogsQueryParamsDto (line 34) | class LogsQueryParamsDto extends TelemetryQueryParamsDto {
class MetricsQueryParamsDto (line 51) | class MetricsQueryParamsDto {
FILE: apps/api/src/sandbox-telemetry/dto/trace-span.dto.ts
class TraceSpanDto (line 9) | class TraceSpanDto {
FILE: apps/api/src/sandbox-telemetry/dto/trace-summary.dto.ts
class TraceSummaryDto (line 9) | class TraceSummaryDto {
FILE: apps/api/src/sandbox-telemetry/guards/analytics-api-disabled.guard.ts
class AnalyticsApiDisabledGuard (line 10) | class AnalyticsApiDisabledGuard implements CanActivate {
method constructor (line 11) | constructor(private readonly configService: TypedConfigService) {}
method canActivate (line 13) | canActivate(): boolean {
FILE: apps/api/src/sandbox-telemetry/sandbox-telemetry.module.ts
class SandboxTelemetryModule (line 18) | class SandboxTelemetryModule {}
FILE: apps/api/src/sandbox-telemetry/services/sandbox-telemetry.service.ts
type ClickHouseLogRow (line 15) | interface ClickHouseLogRow {
type ClickHouseTraceAggregateRow (line 27) | interface ClickHouseTraceAggregateRow {
type ClickHouseSpanRow (line 37) | interface ClickHouseSpanRow {
type ClickHouseMetricRow (line 49) | interface ClickHouseMetricRow {
type ClickHouseCountRow (line 55) | interface ClickHouseCountRow {
class SandboxTelemetryService (line 60) | class SandboxTelemetryService {
method constructor (line 63) | constructor(private readonly clickhouseService: ClickHouseService) {}
method getServiceName (line 65) | private getServiceName(sandboxId: string): string {
method isConfigured (line 69) | isConfigured(): boolean {
method getLogs (line 73) | async getLogs(
method getTraces (line 154) | async getTraces(
method getTraceSpans (line 221) | async getTraceSpans(sandboxId: string, traceId: string): Promise<Trace...
method getMetrics (line 248) | async getMetrics(sandboxId: string, from: string, to: string, metricNa...
FILE: apps/api/src/sandbox/common/redis-lock.provider.ts
type Acquired (line 10) | type Acquired = boolean
class LockCode (line 12) | class LockCode {
method constructor (line 13) | constructor(private readonly code: string) {}
method getCode (line 15) | public getCode(): string {
class RedisLockProvider (line 21) | class RedisLockProvider {
method constructor (line 22) | constructor(@InjectRedis() private readonly redis: Redis) {}
method lock (line 24) | async lock(key: string, ttl: number, code?: LockCode | null): Promise<...
method getCode (line 30) | async getCode(key: string): Promise<LockCode | null> {
method unlock (line 35) | async unlock(key: string): Promise<void> {
method isLocked (line 39) | async isLocked(key: string): Promise<boolean> {
method waitForLock (line 44) | async waitForLock(key: string, ttl: number): Promise<void> {
FILE: apps/api/src/sandbox/common/runner-service-info.ts
type RunnerServiceInfo (line 6) | type RunnerServiceInfo = {
FILE: apps/api/src/sandbox/constants/errors-for-recovery.ts
constant RECOVERY_ERROR_SUBSTRINGS (line 7) | const RECOVERY_ERROR_SUBSTRINGS: string[] = ['Can not connect to the Doc...
FILE: apps/api/src/sandbox/constants/runner-name-regex.constant.ts
constant RUNNER_NAME_REGEX (line 6) | const RUNNER_NAME_REGEX = /^[a-zA-Z0-9_.-]+$/
FILE: apps/api/src/sandbox/constants/sandbox.constants.ts
constant SANDBOX_WARM_POOL_UNASSIGNED_ORGANIZATION (line 6) | const SANDBOX_WARM_POOL_UNASSIGNED_ORGANIZATION = '00000000-0000-0000-00...
FILE: apps/api/src/sandbox/controllers/job.controller.ts
class JobController (line 29) | class JobController {
method constructor (line 32) | constructor(private readonly jobService: JobService) {}
method listJobs (line 65) | async listJobs(
method pollJobs (line 96) | async pollJobs(
method getJob (line 152) | async getJob(@RunnerContextDecorator() runnerContext: RunnerContext, @...
method updateJobStatus (line 179) | async updateJobStatus(
FILE: apps/api/src/sandbox/controllers/preview.controller.ts
class PreviewController (line 16) | class PreviewController {
method constructor (line 19) | constructor(
method isSandboxPublic (line 40) | async isSandboxPublic(@Param('sandboxId') sandboxId: string): Promise<...
method isValidAuthToken (line 93) | async isValidAuthToken(
method hasSandboxAccess (line 130) | async hasSandboxAccess(@Req() req: Request, @Param('sandboxId') sandbo...
method getSandboxIdFromSignedPreviewUrlToken (line 174) | async getSandboxIdFromSignedPreviewUrlToken(
FILE: apps/api/src/sandbox/controllers/runner.controller.ts
class RunnerController (line 71) | class RunnerController {
method constructor (line 72) | constructor(
method create (line 102) | async create(
method getInfoForAuthenticatedRunner (line 138) | async getInfoForAuthenticatedRunner(@RunnerContextDecorator() runnerCo...
method getRunnerById (line 160) | async getRunnerById(@Param('id', ParseUUIDPipe) id: string): Promise<R...
method getRunnerByIdFull (line 182) | async getRunnerByIdFull(@Param('id', ParseUUIDPipe) id: string): Promi...
method findAll (line 201) | async findAll(@AuthContext() authContext: OrganizationAuthContext): Pr...
method updateSchedulingStatus (line 234) | async updateSchedulingStatus(
method updateDrainingStatus (line 271) | async updateDrainingStatus(
method delete (line 302) | async delete(@Param('id', ParseUUIDPipe) id: string): Promise<void> {
method getRunnerBySandboxId (line 318) | async getRunnerBySandboxId(@Param('sandboxId') sandboxId: string): Pro...
method getRunnersBySnapshotRef (line 346) | async getRunnersBySnapshotRef(@Query('ref') ref: string): Promise<Runn...
method runnerHealthcheck (line 361) | async runnerHealthcheck(
FILE: apps/api/src/sandbox/controllers/sandbox.controller.ts
class SandboxController (line 89) | class SandboxController {
method constructor (line 93) | constructor(
method listSandboxes (line 144) | async listSandboxes(
method listSandboxesPaginated (line 170) | async listSandboxesPaginated(
method createSandbox (line 276) | async createSandbox(
method getSandboxesForRunner (line 326) | async getSandboxesForRunner(
method getSandbox (line 368) | async getSandbox(
method deleteSandbox (line 404) | async deleteSandbox(
method recoverSandbox (line 438) | async recoverSandbox(
method startSandbox (line 478) | async startSandbox(
method stopSandbox (line 518) | async stopSandbox(
method resizeSandbox (line 561) | async resizeSandbox(
method replaceLabels (line 599) | async replaceLabels(
method updateSandboxState (line 629) | async updateSandboxState(
method createBackup (line 664) | async createBackup(
method updatePublicStatus (line 705) | async updatePublicStatus(
method updateLastActivity (line 729) | async updateLastActivity(@Param('sandboxId') sandboxId: string): Promi...
method setAutostopInterval (line 766) | async setAutostopInterval(
method setAutoArchiveInterval (line 808) | async setAutoArchiveInterval(
method setAutoDeleteInterval (line 855) | async setAutoDeleteInterval(
method archiveSandbox (line 933) | async archiveSandbox(
method getPortPreviewUrl (line 962) | async getPortPreviewUrl(
method getSignedPortPreviewUrl (line 997) | async getSignedPortPreviewUrl(
method expireSignedPortPreviewUrl (line 1036) | async expireSignedPortPreviewUrl(
method getBuildLogs (line 1068) | async getBuildLogs(
method getBuildLogsUrl (line 1119) | async getBuildLogsUrl(
method createSshAccess (line 1163) | async createSshAccess(
method revokeSshAccess (line 1206) | async revokeSshAccess(
method validateSshAccess (line 1231) | async validateSshAccess(@Query('token') token: string): Promise<SshAcc...
method getToolboxProxyUrl (line 1252) | async getToolboxProxyUrl(@Param('sandboxId') sandboxId: string): Promi...
method waitForSandboxStarted (line 1258) | private async waitForSandboxStarted(sandbox: SandboxDto, timeoutSecond...
method handleSandboxStateUpdated (line 1295) | private handleSandboxStateUpdated(event: SandboxStateUpdatedEvent) {
FILE: apps/api/src/sandbox/controllers/snapshot.controller.ts
class SnapshotController (line 73) | class SnapshotController {
method constructor (line 76) | constructor(
method createSnapshot (line 115) | async createSnapshot(
method canCleanupImage (line 160) | async canCleanupImage(@Query('imageName') imageName: string): Promise<...
method getSnapshot (line 183) | async getSnapshot(
method removeSnapshot (line 211) | async removeSnapshot(@Param('id') snapshotId: string): Promise<void> {
method getAllSnapshots (line 225) | async getAllSnapshots(
method setSnapshotGeneralStatus (line 272) | async setSnapshotGeneralStatus(
method getSnapshotBuildLogs (line 298) | async getSnapshotBuildLogs(
method getSnapshotBuildLogsUrl (line 363) | async getSnapshotBuildLogsUrl(@Param('id') snapshotId: string): Promis...
method activateSnapshot (line 417) | async activateSnapshot(
method deactivateSnapshot (line 446) | async deactivateSnapshot(@Param('id') snapshotId: string) {
FILE: apps/api/src/sandbox/controllers/toolbox.deprecated.controller.ts
type RunnerInfo (line 124) | type RunnerInfo = {
constant RUNNER_INFO_CACHE_PREFIX (line 128) | const RUNNER_INFO_CACHE_PREFIX = 'proxy:sandbox-runner-info:'
constant RUNNER_INFO_CACHE_TTL (line 129) | const RUNNER_INFO_CACHE_TTL = 2 * 60 // 2 minutes
class ToolboxController (line 139) | class ToolboxController {
method constructor (line 152) | constructor(
method getRunnerInfo (line 233) | private async getRunnerInfo(sandboxId: string): Promise<RunnerInfo> {
method getProjectDir (line 275) | async getProjectDir(
method getUserHomeDir (line 295) | async getUserHomeDir(
method getWorkDir (line 315) | async getWorkDir(
method listFiles (line 336) | async listFiles(
method deleteFile (line 368) | async deleteFile(
method downloadFile (line 403) | async downloadFile(
method downloadFiles (line 430) | async downloadFiles(
method findInFiles (line 453) | async findInFiles(
method createFolder (line 488) | async createFolder(
method getFileInfo (line 510) | async getFileInfo(
method moveFile (line 545) | async moveFile(
method setFilePermissions (line 584) | async setFilePermissions(
method replaceInFiles (line 622) | async replaceInFiles(
method searchFiles (line 645) | async searchFiles(
method uploadFile (line 689) | async uploadFile(
method uploadFiles (line 717) | async uploadFiles(
method gitAddFiles (line 754) | async gitAddFiles(
method gitBranchList (line 776) | async gitBranchList(
method gitCreateBranch (line 812) | async gitCreateBranch(
method gitDeleteBranch (line 848) | async gitDeleteBranch(
method gitCloneRepository (line 888) | async gitCloneRepository(
method gitCommitChanges (line 928) | async gitCommitChanges(
method gitCommitHistory (line 950) | async gitCommitHistory(
method gitPullChanges (line 987) | async gitPullChanges(
method gitPushChanges (line 1024) | async gitPushChanges(
method gitCheckoutBranch (line 1060) | async gitCheckoutBranch(
method gitStatus (line 1082) | async gitStatus(
method executeCommand (line 1116) | async executeCommand(
method listSessions (line 1148) | async listSessions(
method getSession (line 1170) | async getSession(
method createSession (line 1204) | async createSession(
method executeSessionCommand (line 1251) | async executeSessionCommand(
method deleteSession (line 1282) | async deleteSession(
method getSessionCommand (line 1305) | async getSessionCommand(
method getSessionCommandLogs (line 1336) | async getSessionCommandLogs(
method listPtySessions (line 1358) | async listPtySessions(
method createPtySession (line 1384) | async createPtySession(
method getPtySession (line 1406) | async getPtySession(
method resizePtySession (line 1431) | async resizePtySession(
method deletePtySession (line 1452) | async deletePtySession(
method getLspCompletions (line 1479) | async getLspCompletions(
method lspDidClose (line 1505) | async lspDidClose(
method lspDidOpen (line 1531) | async lspDidOpen(
method getLspDocumentSymbols (line 1555) | async getLspDocumentSymbols(
method startLspServer (line 1580) | async startLspServer(
method stopLspServer (line 1605) | async stopLspServer(
method getLspWorkspaceSymbols (line 1630) | async getLspWorkspaceSymbols(
method startComputerUse (line 1661) | async startComputerUse(
method stopComputerUse (line 1689) | async stopComputerUse(
method getComputerUseStatus (line 1710) | async getComputerUseStatus(
method getProcessStatus (line 1732) | async getProcessStatus(
method restartProcess (line 1766) | async restartProcess(
method getProcessLogs (line 1788) | async getProcessLogs(
method getProcessErrors (line 1810) | async getProcessErrors(
method getMousePosition (line 1832) | async getMousePosition(
method moveMouse (line 1858) | async moveMouse(
method clickMouse (line 1884) | async clickMouse(
method dragMouse (line 1910) | async dragMouse(
method scrollMouse (line 1936) | async scrollMouse(
method typeText (line 1962) | async typeText(
method pressKey (line 1987) | async pressKey(
method pressHotkey (line 2012) | async pressHotkey(
method takeScreenshot (line 2035) | async takeScreenshot(
method takeRegionScreenshot (line 2061) | async takeRegionScreenshot(
method takeCompressedScreenshot (line 2086) | async takeCompressedScreenshot(
method takeCompressedRegionScreenshot (line 2115) | async takeCompressedRegionScreenshot(
method getDisplayInfo (line 2137) | async getDisplayInfo(
method getWindows (line 2158) | async getWindows(
FILE: apps/api/src/sandbox/controllers/volume.controller.ts
class VolumeController (line 52) | class VolumeController {
method constructor (line 55) | constructor(private readonly volumeService: VolumeService) {}
method listVolumes (line 74) | async listVolumes(
method createVolume (line 105) | async createVolume(
method getVolume (line 130) | async getVolume(@Param('volumeId') volumeId: string): Promise<VolumeDt...
method deleteVolume (line 160) | async deleteVolume(@Param('volumeId') volumeId: string): Promise<void> {
method getVolumeByName (line 181) | async getVolumeByName(
FILE: apps/api/src/sandbox/controllers/workspace.deprecated.controller.ts
class WorkspaceController (line 71) | class WorkspaceController {
method constructor (line 74) | constructor(
method listWorkspacees (line 105) | async listWorkspacees(
method createWorkspace (line 159) | async createWorkspace(
method getWorkspace (line 214) | async getWorkspace(
method removeWorkspace (line 246) | async removeWorkspace(
method startWorkspace (line 277) | async startWorkspace(
method stopWorkspace (line 307) | async stopWorkspace(@Param('workspaceId') workspaceId: string): Promis...
method replaceLabels (line 340) | async replaceLabels(
method createBackup (line 371) | async createBackup(@Param('workspaceId') workspaceId: string): Promise...
method updatePublicStatus (line 403) | async updatePublicStatus(
method setAutostopInterval (line 442) | async setAutostopInterval(
method setAutoArchiveInterval (line 481) | async setAutoArchiveInterval(
method archiveWorkspace (line 506) | async archiveWorkspace(@Param('workspaceId') workspaceId: string): Pro...
method getPortPreviewUrl (line 532) | async getPortPreviewUrl(
method getBuildLogs (line 575) | async getBuildLogs(
method waitForWorkspaceState (line 609) | private async waitForWorkspaceState(
FILE: apps/api/src/sandbox/dto/build-info.dto.ts
class BuildInfoDto (line 9) | class BuildInfoDto {
FILE: apps/api/src/sandbox/dto/create-build-info.dto.ts
class CreateBuildInfoDto (line 10) | class CreateBuildInfoDto {
FILE: apps/api/src/sandbox/dto/create-runner-internal.dto.ts
type CreateRunnerV0InternalDto (line 6) | type CreateRunnerV0InternalDto = {
type CreateRunnerV2InternalDto (line 20) | type CreateRunnerV2InternalDto = {
type CreateRunnerInternalDto (line 28) | type CreateRunnerInternalDto = CreateRunnerV0InternalDto | CreateRunnerV...
FILE: apps/api/src/sandbox/dto/create-runner-response.dto.ts
class CreateRunnerResponseDto (line 10) | class CreateRunnerResponseDto {
method fromRunner (line 23) | static fromRunner(runner: Runner, apiKey: string): CreateRunnerRespons...
FILE: apps/api/src/sandbox/dto/create-runner.dto.ts
class CreateRunnerDto (line 10) | class CreateRunnerDto {
FILE: apps/api/src/sandbox/dto/create-sandbox.dto.ts
class CreateSandboxDto (line 13) | class CreateSandboxDto {
FILE: apps/api/src/sandbox/dto/create-snapshot.dto.ts
class CreateSnapshotDto (line 11) | class CreateSnapshotDto {
FILE: apps/api/src/sandbox/dto/create-volume.dto.ts
class CreateVolumeDto (line 10) | class CreateVolumeDto {
FILE: apps/api/src/sandbox/dto/create-workspace.deprecated.dto.ts
type RunnerRegion (line 12) | enum RunnerRegion {
class CreateWorkspaceDto (line 18) | class CreateWorkspaceDto {
FILE: apps/api/src/sandbox/dto/download-files.dto.ts
class DownloadFilesDto (line 9) | class DownloadFilesDto {
FILE: apps/api/src/sandbox/dto/job-type-map.dto.ts
type JobTypeMap (line 14) | interface JobTypeMap {
type ResourceTypeForJobType (line 56) | type ResourceTypeForJobType<T extends JobType> = JobTypeMap[T]['resource...
FILE: apps/api/src/sandbox/dto/job.dto.ts
class JobDto (line 19) | class JobDto {
method constructor (line 96) | constructor(job: Job) {
class PollJobsRequestDto (line 111) | class PollJobsRequestDto {
class PollJobsResponseDto (line 128) | class PollJobsResponseDto {
class PaginatedJobsDto (line 137) | class PaginatedJobsDto {
class ListJobsQueryDto (line 152) | class ListJobsQueryDto {
class UpdateJobStatusDto (line 171) | class UpdateJobStatusDto {
FILE: apps/api/src/sandbox/dto/list-sandboxes-query.dto.ts
type SandboxSortField (line 14) | enum SandboxSortField {
type SandboxSortDirection (line 24) | enum SandboxSortDirection {
constant DEFAULT_SANDBOX_SORT_FIELD (line 29) | const DEFAULT_SANDBOX_SORT_FIELD = SandboxSortField.CREATED_AT
constant DEFAULT_SANDBOX_SORT_DIRECTION (line 30) | const DEFAULT_SANDBOX_SORT_DIRECTION = SandboxSortDirection.DESC
constant VALID_QUERY_STATES (line 32) | const VALID_QUERY_STATES = Object.values(SandboxState).filter((state) =>...
class ListSandboxesQueryDto (line 35) | class ListSandboxesQueryDto {
FILE: apps/api/src/sandbox/dto/list-snapshots-query.dto.ts
type SnapshotSortField (line 11) | enum SnapshotSortField {
type SnapshotSortDirection (line 18) | enum SnapshotSortDirection {
class ListSnapshotsQueryDto (line 24) | class ListSnapshotsQueryDto {
FILE: apps/api/src/sandbox/dto/lsp.dto.ts
class LspServerRequestDto (line 11) | class LspServerRequestDto {
class LspDocumentRequestDto (line 22) | class LspDocumentRequestDto extends LspServerRequestDto {
class PositionDto (line 29) | class PositionDto {
class CompletionContextDto (line 40) | class CompletionContextDto {
class LspCompletionParamsDto (line 52) | class LspCompletionParamsDto extends LspDocumentRequestDto {
class RangeDto (line 66) | class RangeDto {
class CompletionItemDto (line 79) | class CompletionItemDto {
class CompletionListDto (line 115) | class CompletionListDto {
class LspLocationDto (line 128) | class LspLocationDto {
class LspSymbolDto (line 140) | class LspSymbolDto {
class WorkspaceSymbolParamsDto (line 156) | class WorkspaceSymbolParamsDto {
FILE: apps/api/src/sandbox/dto/paginated-sandboxes.dto.ts
class PaginatedSandboxesDto (line 10) | class PaginatedSandboxesDto {
FILE: apps/api/src/sandbox/dto/paginated-snapshots.dto.ts
class PaginatedSnapshotsDto (line 10) | class PaginatedSnapshotsDto {
FILE: apps/api/src/sandbox/dto/port-preview-url.dto.ts
class PortPreviewUrlDto (line 10) | class PortPreviewUrlDto {
class SignedPortPreviewUrlDto (line 34) | class SignedPortPreviewUrlDto {
FILE: apps/api/src/sandbox/dto/registry-push-access-dto.ts
class RegistryPushAccessDto (line 8) | class RegistryPushAccessDto {
FILE: apps/api/src/sandbox/dto/resize-sandbox.dto.ts
class ResizeSandboxDto (line 10) | class ResizeSandboxDto {
FILE: apps/api/src/sandbox/dto/runner-full.dto.ts
class RunnerFullDto (line 13) | class RunnerFullDto extends RunnerDto {
method fromRunner (line 30) | static fromRunner(runner: Runner, regionType?: RegionType): RunnerFull...
FILE: apps/api/src/sandbox/dto/runner-health.dto.ts
class RunnerHealthMetricsDto (line 11) | class RunnerHealthMetricsDto {
class RunnerServiceHealthDto (line 98) | class RunnerServiceHealthDto {
class RunnerHealthcheckDto (line 123) | class RunnerHealthcheckDto {
FILE: apps/api/src/sandbox/dto/runner-snapshot.dto.ts
class RunnerSnapshotDto (line 8) | class RunnerSnapshotDto {
method constructor (line 27) | constructor(runnerSnapshotId: string, runnerId: string, runnerDomain: ...
FILE: apps/api/src/sandbox/dto/runner-status.dto.ts
class RunnerStatusDto (line 9) | class RunnerStatusDto {
FILE: apps/api/src/sandbox/dto/runner.dto.ts
class RunnerDto (line 13) | class RunnerDto {
method fromRunner (line 209) | static fromRunner(runner: Runner): RunnerDto {
FILE: apps/api/src/sandbox/dto/sandbox.dto.ts
class SandboxVolume (line 16) | class SandboxVolume {
class SandboxDto (line 38) | class SandboxDto {
method fromSandbox (line 279) | static fromSandbox(sandbox: Sandbox, toolboxProxyUrl: string): Sandbox...
method getSandboxState (line 324) | private static getSandboxState(sandbox: Sandbox): SandboxState {
class SandboxLabelsDto (line 356) | class SandboxLabelsDto {
FILE: apps/api/src/sandbox/dto/snapshot.dto.ts
class SnapshotDto (line 12) | class SnapshotDto {
method fromSnapshot (line 92) | static fromSnapshot(snapshot: Snapshot): SnapshotDto {
FILE: apps/api/src/sandbox/dto/ssh-access.dto.ts
class SshAccessDto (line 9) | class SshAccessDto {
method fromSshAccess (line 52) | static fromSshAccess(sshAccess: SshAccess, sshGatewayUrl: string): Ssh...
class SshAccessValidationDto (line 91) | class SshAccessValidationDto {
method fromValidationResult (line 104) | static fromValidationResult(valid: boolean, sandboxId: string): SshAcc...
class RevokeSshAccessDto (line 112) | class RevokeSshAccessDto {
FILE: apps/api/src/sandbox/dto/storage-access-dto.ts
class StorageAccessDto (line 8) | class StorageAccessDto {
FILE: apps/api/src/sandbox/dto/toolbox-proxy-url.dto.ts
class ToolboxProxyUrlDto (line 9) | class ToolboxProxyUrlDto {
method constructor (line 16) | constructor(url: string) {
FILE: apps/api/src/sandbox/dto/toolbox.deprecated.dto.ts
class FileInfoDto (line 10) | class FileInfoDto {
class MatchDto (line 37) | class MatchDto {
class SearchFilesResponseDto (line 49) | class SearchFilesResponseDto {
class ReplaceRequestDto (line 55) | class ReplaceRequestDto {
class ReplaceResultDto (line 67) | class ReplaceResultDto {
class GitAddRequestDto (line 79) | class GitAddRequestDto {
class GitBranchRequestDto (line 91) | class GitBranchRequestDto {
class GitDeleteBranchRequestDto (line 100) | class GitDeleteBranchRequestDto {
class GitCloneRequestDto (line 109) | class GitCloneRequestDto {
class GitCommitRequestDto (line 130) | class GitCommitRequestDto {
class GitCommitResponseDto (line 151) | class GitCommitResponseDto {
class GitCheckoutRequestDto (line 157) | class GitCheckoutRequestDto {
class GitRepoRequestDto (line 166) | class GitRepoRequestDto {
class FileStatusDto (line 178) | class FileStatusDto {
class GitStatusDto (line 193) | class GitStatusDto {
class ListBranchResponseDto (line 213) | class ListBranchResponseDto {
class GitCommitInfoDto (line 219) | class GitCommitInfoDto {
class ExecuteRequestDto (line 237) | class ExecuteRequestDto {
class ExecuteResponseDto (line 253) | class ExecuteResponseDto {
class ProjectDirResponseDto (line 270) | class ProjectDirResponseDto {
class UserHomeDirResponseDto (line 276) | class UserHomeDirResponseDto {
class WorkDirResponseDto (line 282) | class WorkDirResponseDto {
class CreateSessionRequestDto (line 288) | class CreateSessionRequestDto {
class SessionExecuteRequestDto (line 298) | class SessionExecuteRequestDto {
method constructor (line 323) | constructor(partial: Partial<SessionExecuteRequestDto>) {
class SessionExecuteResponseDto (line 333) | class SessionExecuteResponseDto {
class CommandDto (line 359) | class CommandDto {
class SessionDto (line 383) | class SessionDto {
class MousePositionDto (line 403) | class MousePositionDto {
class MouseMoveRequestDto (line 418) | class MouseMoveRequestDto {
class MouseMoveResponseDto (line 433) | class MouseMoveResponseDto {
class MouseClickRequestDto (line 448) | class MouseClickRequestDto {
class MouseClickResponseDto (line 475) | class MouseClickResponseDto {
class MouseDragRequestDto (line 490) | class MouseDragRequestDto {
class MouseDragResponseDto (line 523) | class MouseDragResponseDto {
class MouseScrollRequestDto (line 538) | class MouseScrollRequestDto {
class MouseScrollResponseDto (line 565) | class MouseScrollResponseDto {
class KeyboardTypeRequestDto (line 574) | class KeyboardTypeRequestDto {
class KeyboardPressRequestDto (line 589) | class KeyboardPressRequestDto {
class KeyboardHotkeyRequestDto (line 605) | class KeyboardHotkeyRequestDto {
class ScreenshotResponseDto (line 614) | class ScreenshotResponseDto {
class RegionScreenshotRequestDto (line 635) | class RegionScreenshotRequestDto {
class RegionScreenshotResponseDto (line 662) | class RegionScreenshotResponseDto {
class CompressedScreenshotResponseDto (line 683) | class CompressedScreenshotResponseDto {
class DisplayInfoResponseDto (line 704) | class DisplayInfoResponseDto {
class WindowsResponseDto (line 723) | class WindowsResponseDto {
class ComputerUseStartResponseDto (line 746) | class ComputerUseStartResponseDto {
class ComputerUseStopResponseDto (line 767) | class ComputerUseStopResponseDto {
class ComputerUseStatusResponseDto (line 788) | class ComputerUseStatusResponseDto {
class ProcessStatusResponseDto (line 798) | class ProcessStatusResponseDto {
class ProcessRestartResponseDto (line 813) | class ProcessRestartResponseDto {
class ProcessLogsResponseDto (line 828) | class ProcessLogsResponseDto {
class ProcessErrorsResponseDto (line 843) | class ProcessErrorsResponseDto {
class PtyCreateRequestDto (line 859) | class PtyCreateRequestDto {
class PtyCreateResponseDto (line 900) | class PtyCreateResponseDto {
class PtySessionInfoDto (line 909) | class PtySessionInfoDto {
class PtyListResponseDto (line 962) | class PtyListResponseDto {
class PtyResizeRequestDto (line 971) | class PtyResizeRequestDto {
FILE: apps/api/src/sandbox/dto/update-sandbox-network-settings.dto.ts
class UpdateSandboxNetworkSettingsDto (line 10) | class UpdateSandboxNetworkSettingsDto {
FILE: apps/api/src/sandbox/dto/update-sandbox-state.dto.ts
class UpdateSandboxStateDto (line 10) | class UpdateSandboxStateDto {
FILE: apps/api/src/sandbox/dto/update-snapshot.dto.ts
class SetSnapshotGeneralStatusDto (line 10) | class SetSnapshotGeneralStatusDto {
FILE: apps/api/src/sandbox/dto/upload-file.dto.ts
class UploadFileDto (line 9) | class UploadFileDto {
FILE: apps/api/src/sandbox/dto/volume.dto.ts
class VolumeDto (line 11) | class VolumeDto {
method fromVolume (line 65) | static fromVolume(volume: Volume): VolumeDto {
FILE: apps/api/src/sandbox/dto/workspace-port-preview-url.deprecated.dto.ts
class WorkspacePortPreviewUrlDto (line 10) | class WorkspacePortPreviewUrlDto {
FILE: apps/api/src/sandbox/dto/workspace.deprecated.dto.ts
class SandboxInfoDto (line 13) | class SandboxInfoDto {
class WorkspaceDto (line 38) | class WorkspaceDto extends SandboxDto {
method constructor (line 69) | constructor() {
method fromSandbox (line 73) | static fromSandbox(sandbox: Sandbox): WorkspaceDto {
method fromSandboxDto (line 79) | static fromSandboxDto(sandboxDto: SandboxDto): WorkspaceDto {
FILE: apps/api/src/sandbox/entities/build-info.entity.ts
function generateBuildInfoHash (line 11) | function generateBuildInfoHash(dockerfileContent: string, contextHashes:...
class BuildInfo (line 19) | class BuildInfo {
method generateHash (line 49) | generateHash() {
FILE: apps/api/src/sandbox/entities/job.entity.ts
class Job (line 36) | class Job {
method constructor (line 111) | constructor(params: {
method getResultMetadata (line 140) | getResultMetadata(): Record<string, any> | null {
FILE: apps/api/src/sandbox/entities/runner.entity.ts
class Runner (line 14) | class Runner {
method constructor (line 185) | constructor(params: {
FILE: apps/api/src/sandbox/entities/sandbox.entity.ts
class Sandbox (line 48) | class Sandbox {
method constructor (line 220) | constructor(region: string, name?: string) {
method getBackupStateUpdate (line 230) | static getBackupStateUpdate(
method getSoftDeleteUpdate (line 273) | static getSoftDeleteUpdate(sandbox: Sandbox): Partial<Sandbox> {
method assertValid (line 285) | assertValid(): void {
method validateDesiredStateTransition (line 289) | private validateDesiredStateTransition(): void {
method enforceInvariants (line 365) | enforceInvariants(): Partial<Sandbox> {
method getInvariantChanges (line 371) | private getInvariantChanges(): Partial<Sandbox> {
FILE: apps/api/src/sandbox/entities/snapshot-region.entity.ts
class SnapshotRegion (line 11) | class SnapshotRegion {
FILE: apps/api/src/sandbox/entities/snapshot-runner.entity.ts
class SnapshotRunner (line 14) | class SnapshotRunner {
FILE: apps/api/src/sandbox/entities/snapshot.entity.ts
class Snapshot (line 27) | class Snapshot {
FILE: apps/api/src/sandbox/entities/ssh-access.entity.ts
class SshAccess (line 19) | class SshAccess {
FILE: apps/api/src/sandbox/entities/volume.entity.ts
class Volume (line 11) | class Volume {
method getBucketName (line 47) | public getBucketName(): string {
FILE: apps/api/src/sandbox/entities/warm-pool.entity.ts
class WarmPool (line 11) | class WarmPool {
FILE: apps/api/src/sandbox/enums/backup-state.enum.ts
type BackupState (line 6) | enum BackupState {
FILE: apps/api/src/sandbox/enums/job-status.enum.ts
type JobStatus (line 6) | enum JobStatus {
FILE: apps/api/src/sandbox/enums/job-type.enum.ts
type JobType (line 6) | enum JobType {
FILE: apps/api/src/sandbox/enums/resource-type.enum.ts
type ResourceType (line 6) | enum ResourceType {
FILE: apps/api/src/sandbox/enums/runner-state.enum.ts
type RunnerState (line 6) | enum RunnerState {
FILE: apps/api/src/sandbox/enums/sandbox-class.enum.ts
type SandboxClass (line 6) | enum SandboxClass {
FILE: apps/api/src/sandbox/enums/sandbox-desired-state.enum.ts
type SandboxDesiredState (line 6) | enum SandboxDesiredState {
FILE: apps/api/src/sandbox/enums/sandbox-state.enum.ts
type SandboxState (line 6) | enum SandboxState {
FILE: apps/api/src/sandbox/enums/snapshot-runner-state.enum.ts
type SnapshotRunnerState (line 6) | enum SnapshotRunnerState {
FILE: apps/api/src/sandbox/enums/snapshot-state.enum.ts
type SnapshotState (line 6) | enum SnapshotState {
FILE: apps/api/src/sandbox/enums/volume-state.enum.ts
type VolumeState (line 6) | enum VolumeState {
FILE: apps/api/src/sandbox/errors/runner-api-error.ts
class RunnerApiError (line 6) | class RunnerApiError extends Error {
method constructor (line 7) | constructor(
FILE: apps/api/src/sandbox/errors/runner-not-ready.error.ts
class RunnerNotReadyError (line 6) | class RunnerNotReadyError extends Error {
method constructor (line 7) | constructor(message: string) {
FILE: apps/api/src/sandbox/errors/snapshot-state-error.ts
class SnapshotStateError (line 6) | class SnapshotStateError extends Error {
method constructor (line 7) | constructor(public readonly errorReason: string) {
FILE: apps/api/src/sandbox/events/runner-created.event.ts
class RunnerCreatedEvent (line 8) | class RunnerCreatedEvent {
method constructor (line 9) | constructor(public readonly runner: Runner) {}
FILE: apps/api/src/sandbox/events/runner-deleted.event.ts
class RunnerDeletedEvent (line 8) | class RunnerDeletedEvent {
method constructor (line 9) | constructor(
FILE: apps/api/src/sandbox/events/runner-state-updated.event.ts
class RunnerStateUpdatedEvent (line 9) | class RunnerStateUpdatedEvent {
method constructor (line 10) | constructor(
FILE: apps/api/src/sandbox/events/runner-unschedulable-updated.event.ts
class RunnerUnschedulableUpdatedEvent (line 8) | class RunnerUnschedulableUpdatedEvent {
method constructor (line 9) | constructor(
FILE: apps/api/src/sandbox/events/sandbox-archived.event.ts
class SandboxArchivedEvent (line 8) | class SandboxArchivedEvent {
method constructor (line 9) | constructor(public readonly sandbox: Sandbox) {}
FILE: apps/api/src/sandbox/events/sandbox-backup-created.event.ts
class SandboxBackupCreatedEvent (line 8) | class SandboxBackupCreatedEvent {
method constructor (line 9) | constructor(public readonly sandbox: Sandbox) {}
FILE: apps/api/src/sandbox/events/sandbox-create.event.ts
class SandboxCreatedEvent (line 8) | class SandboxCreatedEvent {
method constructor (line 9) | constructor(public readonly sandbox: Sandbox) {}
FILE: apps/api/src/sandbox/events/sandbox-desired-state-updated.event.ts
class SandboxDesiredStateUpdatedEvent (line 9) | class SandboxDesiredStateUpdatedEvent {
method constructor (line 10) | constructor(
FILE: apps/api/src/sandbox/events/sandbox-destroyed.event.ts
class SandboxDestroyedEvent (line 8) | class SandboxDestroyedEvent {
method constructor (line 9) | constructor(public readonly sandbox: Sandbox) {}
FILE: apps/api/src/sandbox/events/sandbox-organization-updated.event.ts
class SandboxOrganizationUpdatedEvent (line 8) | class SandboxOrganizationUpdatedEvent {
method constructor (line 9) | constructor(
FILE: apps/api/src/sandbox/events/sandbox-public-status-updated.event.ts
class SandboxPublicStatusUpdatedEvent (line 8) | class SandboxPublicStatusUpdatedEvent {
method constructor (line 9) | constructor(
FILE: apps/api/src/sandbox/events/sandbox-started.event.ts
class SandboxStartedEvent (line 8) | class SandboxStartedEvent {
method constructor (line 9) | constructor(public readonly sandbox: Sandbox) {}
FILE: apps/api/src/sandbox/events/sandbox-state-updated.event.ts
class SandboxStateUpdatedEvent (line 9) | class SandboxStateUpdatedEvent {
method constructor (line 10) | constructor(
FILE: apps/api/src/sandbox/events/sandbox-stopped.event.ts
class SandboxStoppedEvent (line 8) | class SandboxStoppedEvent {
method constructor (line 9) | constructor(public readonly sandbox: Sandbox) {}
FILE: apps/api/src/sandbox/events/snapshot-activated.event.ts
class SnapshotActivatedEvent (line 8) | class SnapshotActivatedEvent {
method constructor (line 9) | constructor(public readonly snapshot: Snapshot) {}
FILE: apps/api/src/sandbox/events/snapshot-created.event.ts
class SnapshotCreatedEvent (line 8) | class SnapshotCreatedEvent {
method constructor (line 9) | constructor(public readonly snapshot: Snapshot) {}
FILE: apps/api/src/sandbox/events/snapshot-removed.event.ts
class SnapshotRemovedEvent (line 8) | class SnapshotRemovedEvent {
method constructor (line 9) | constructor(public readonly snapshot: Snapshot) {}
FILE: apps/api/src/sandbox/events/snapshot-state-updated.event.ts
class SnapshotStateUpdatedEvent (line 9) | class SnapshotStateUpdatedEvent {
method constructor (line 10) | constructor(
FILE: apps/api/src/sandbox/events/volume-created.event.ts
class VolumeCreatedEvent (line 8) | class VolumeCreatedEvent {
method constructor (line 9) | constructor(public readonly volume: Volume) {}
FILE: apps/api/src/sandbox/events/volume-last-used-at-updated.event.ts
class VolumeLastUsedAtUpdatedEvent (line 8) | class VolumeLastUsedAtUpdatedEvent {
method constructor (line 9) | constructor(public readonly volume: Volume) {}
FILE: apps/api/src/sandbox/events/volume-state-updated.event.ts
class VolumeStateUpdatedEvent (line 9) | class VolumeStateUpdatedEvent {
method constructor (line 10) | constructor(
FILE: apps/api/src/sandbox/events/warmpool-topup-requested.event.ts
class WarmPoolTopUpRequested (line 8) | class WarmPoolTopUpRequested {
method constructor (line 9) | constructor(public readonly warmPool: WarmPool) {}
FILE: apps/api/src/sandbox/guards/job-access.guard.ts
class JobAccessGuard (line 19) | class JobAccessGuard implements CanActivate {
method constructor (line 22) | constructor(private readonly jobService: JobService) {}
method canActivate (line 24) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/sandbox/guards/proxy.guard.ts
class ProxyGuard (line 11) | class ProxyGuard implements CanActivate {
method canActivate (line 14) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/sandbox/guards/region-runner-access.guard.ts
class RegionRunnerAccessGuard (line 23) | class RegionRunnerAccessGuard implements CanActivate {
method constructor (line 26) | constructor(private readonly runnerService: RunnerService) {}
method canActivate (line 28) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/sandbox/guards/region-sandbox-access.guard.ts
class RegionSandboxAccessGuard (line 16) | class RegionSandboxAccessGuard implements CanActivate {
method constructor (line 17) | constructor(private readonly sandboxService: SandboxService) {}
method canActivate (line 19) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/sandbox/guards/runner-access.guard.ts
class RunnerAccessGuard (line 25) | class RunnerAccessGuard implements CanActivate {
method constructor (line 28) | constructor(
method canActivate (line 33) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/sandbox/guards/sandbox-access.guard.ts
class SandboxAccessGuard (line 17) | class SandboxAccessGuard implements CanActivate {
method constructor (line 18) | constructor(private readonly sandboxService: SandboxService) {}
method canActivate (line 20) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/sandbox/guards/snapshot-access.guard.ts
class SnapshotAccessGuard (line 24) | class SnapshotAccessGuard implements CanActivate {
method constructor (line 25) | constructor(private readonly snapshotService: SnapshotService) {}
method canActivate (line 27) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/sandbox/guards/snapshot-read-access.guard.ts
class SnapshotReadAccessGuard (line 24) | class SnapshotReadAccessGuard implements CanActivate {
method constructor (line 25) | constructor(private readonly snapshotService: SnapshotService) {}
method canActivate (line 27) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/sandbox/guards/ssh-gateway.guard.ts
class SshGatewayGuard (line 11) | class SshGatewayGuard implements CanActivate {
method canActivate (line 14) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/sandbox/guards/volume-access.guard.ts
class VolumeAccessGuard (line 10) | class VolumeAccessGuard implements CanActivate {
method constructor (line 11) | constructor(private readonly volumeService: VolumeService) {}
method canActivate (line 12) | async canActivate(context: ExecutionContext): Promise<boolean> {
FILE: apps/api/src/sandbox/managers/backup.manager.ts
class BackupManager (line 39) | class BackupManager implements TrackableJobExecutions, OnApplicationShut...
method constructor (line 44) | constructor(
method onApplicationBootstrap (line 56) | async onApplicationBootstrap() {
method onApplicationShutdown (line 60) | async onApplicationShutdown() {
method adHocBackupCheck (line 73) | async adHocBackupCheck(): Promise<void> {
method checkBackupStates (line 139) | async checkBackupStates(): Promise<void> {
method checkBackupStatesForErroredDraining (line 243) | async checkBackupStatesForErroredDraining(): Promise<void> {
method syncStopStateCreateBackups (line 328) | async syncStopStateCreateBackups(): Promise<void> {
method setBackupPending (line 371) | async setBackupPending(sandbox: Sandbox): Promise<void> {
method checkBackupProgress (line 410) | private async checkBackupProgress(sandbox: Sandbox): Promise<void> {
method deleteSandboxBackupRepositoryFromRegistry (line 453) | private async deleteSandboxBackupRepositoryFromRegistry(sandbox: Sandb...
method handlePendingBackup (line 466) | private async handlePendingBackup(sandbox: Sandbox): Promise<void> {
method handleSandboxArchivedEvent (line 520) | private async handleSandboxArchivedEvent(event: SandboxArchivedEvent) {
method handleSandboxDestroyedEvent (line 526) | private async handleSandboxDestroyedEvent(event: SandboxDestroyedEvent) {
method handleSandboxBackupCreatedEvent (line 532) | private async handleSandboxBackupCreatedEvent(event: SandboxBackupCrea...
FILE: apps/api/src/sandbox/managers/sandbox-actions/sandbox-archive.action.ts
class SandboxArchiveAction (line 23) | class SandboxArchiveAction extends SandboxAction {
method constructor (line 24) | constructor(
method run (line 36) | async run(sandbox: Sandbox, lockCode: LockCode): Promise<SyncState> {
FILE: apps/api/src/sandbox/managers/sandbox-actions/sandbox-destroy.action.ts
class SandboxDestroyAction (line 18) | class SandboxDestroyAction extends SandboxAction {
method constructor (line 19) | constructor(
method run (line 29) | async run(sandbox: Sandbox, lockCode: LockCode): Promise<SyncState> {
FILE: apps/api/src/sandbox/managers/sandbox-actions/sandbox-start.action.ts
class SandboxStartAction (line 34) | class SandboxStartAction extends SandboxAction {
method constructor (line 36) | constructor(
method run (line 51) | async run(sandbox: Sandbox, lockCode: LockCode): Promise<SyncState> {
method loadBuildInfo (line 104) | private async loadBuildInfo(sandbox: Sandbox): Promise<void> {
method handleRunnerSandboxBuildingSnapshotStateOnDesiredStateStart (line 114) | private async handleRunnerSandboxBuildingSnapshotStateOnDesiredStateSt...
method handleUnassignedRunnerSandbox (line 162) | private async handleUnassignedRunnerSandbox(
method pullSnapshotToRunner (line 263) | async pullSnapshotToRunner(snapshot: Snapshot, runner: Runner) {
method buildOnRunner (line 295) | async buildOnRunner(buildInfo: BuildInfo, runner: Runner, organization...
method handleRunnerSandboxUnknownStateOnDesiredStateStart (line 351) | private async handleRunnerSandboxUnknownStateOnDesiredStateStart(
method handleRunnerSandboxStoppedOrArchivedStateOnDesiredStateStart (line 401) | private async handleRunnerSandboxStoppedOrArchivedStateOnDesiredStateS...
method handleRunnerSandboxStartedStateCheck (line 543) | private async handleRunnerSandboxStartedStateCheck(sandbox: Sandbox, l...
method checkTimeoutError (line 651) | private async checkTimeoutError(sandbox: Sandbox, timeoutMinutes: numb...
method restoreSandboxOnNewRunner (line 667) | private async restoreSandboxOnNewRunner(
method removeSandboxFromPreviousRunner (line 843) | private async removeSandboxFromPreviousRunner(sandbox: Sandbox): Promi...
FILE: apps/api/src/sandbox/managers/sandbox-actions/sandbox-stop.action.ts
class SandboxStopAction (line 19) | class SandboxStopAction extends SandboxAction {
method constructor (line 20) | constructor(
method run (line 30) | async run(sandbox: Sandbox, lockCode: LockCode): Promise<SyncState> {
FILE: apps/api/src/sandbox/managers/sandbox-actions/sandbox.action.ts
constant SYNC_AGAIN (line 16) | const SYNC_AGAIN = 'sync-again'
constant DONT_SYNC_AGAIN (line 17) | const DONT_SYNC_AGAIN = 'dont-sync-again'
type SyncState (line 18) | type SyncState = typeof SYNC_AGAIN | typeof DONT_SYNC_AGAIN
method constructor (line 24) | constructor(
method updateSandboxState (line 33) | protected async updateSandboxState(
FILE: apps/api/src/sandbox/managers/sandbox.manager.ts
class SandboxManager (line 53) | class SandboxManager implements TrackableJobExecutions, OnApplicationShu...
method constructor (line 58) | constructor(
method onApplicationShutdown (line 74) | async onApplicationShutdown() {
method autostopCheck (line 87) | async autostopCheck(): Promise<void> {
method autoArchiveCheck (line 159) | async autoArchiveCheck(): Promise<void> {
method autoDeleteCheck (line 215) | async autoDeleteCheck(): Promise<void> {
method drainingRunnerSandboxesCheck (line 278) | async drainingRunnerSandboxesCheck(): Promise<void> {
method archiveErroredSandboxesOnDrainingRunner (line 360) | private async archiveErroredSandboxesOnDrainingRunner(runnerId: string...
method retryErroredBackupsOnDrainingRunner (line 415) | private async retryErroredBackupsOnDrainingRunner(runnerId: string): P...
method recoverRecoverableSandboxesOnDrainingRunner (line 466) | private async recoverRecoverableSandboxesOnDrainingRunner(runnerId: st...
method reassignSandbox (line 540) | private async reassignSandbox(sandbox: Sandbox, oldRunnerId: string, n...
method syncStates (line 654) | async syncStates(): Promise<void> {
method syncArchivedDesiredStates (line 734) | async syncArchivedDesiredStates(): Promise<void> {
method syncArchivedCompletedStates (line 762) | async syncArchivedCompletedStates(): Promise<void> {
method syncInstanceState (line 795) | async syncInstanceState(sandboxId: string): Promise<void> {
method handleSandboxArchivedEvent (line 892) | private async handleSandboxArchivedEvent(event: SandboxArchivedEvent) {
method handleSandboxDestroyedEvent (line 901) | private async handleSandboxDestroyedEvent(event: SandboxDestroyedEvent) {
method handleSandboxStartedEvent (line 910) | private async handleSandboxStartedEvent(event: SandboxStartedEvent) {
method handleSandboxStoppedEvent (line 919) | private async handleSandboxStoppedEvent(event: SandboxStoppedEvent) {
method handleSandboxCreatedEvent (line 928) | private async handleSandboxCreatedEvent(event: SandboxCreatedEvent) {
FILE: apps/api/src/sandbox/managers/snapshot.manager.ts
constant SYNC_AGAIN (line 47) | const SYNC_AGAIN = 'sync-again'
constant DONT_SYNC_AGAIN (line 48) | const DONT_SYNC_AGAIN = 'dont-sync-again'
constant DEFAULT_SNAPSHOT_DEACTIVATION_TIMEOUT_MINUTES (line 49) | const DEFAULT_SNAPSHOT_DEACTIVATION_TIMEOUT_MINUTES = 14 * 24 * 60 // 14...
type SyncState (line 50) | type SyncState = typeof SYNC_AGAIN | typeof DONT_SYNC_AGAIN
class SnapshotManager (line 53) | class SnapshotManager implements TrackableJobExecutions, OnApplicationSh...
method constructor (line 61) | constructor(
method onApplicationShutdown (line 80) | async onApplicationShutdown() {
method syncRunnerSnapshots (line 92) | async syncRunnerSnapshots() {
method syncRunnerSnapshotStates (line 146) | async syncRunnerSnapshotStates() {
method syncRunnerSnapshotState (line 192) | async syncRunnerSnapshotState(snapshotRunner: SnapshotRunner): Promise...
method propagateSnapshotToRunners (line 225) | async propagateSnapshotToRunners(snapshot: Snapshot, sharedRegionIds: ...
method pullSnapshotRunner (line 341) | async pullSnapshotRunner(
method handleSnapshotRunnerStatePullingSnapshot (line 353) | async handleSnapshotRunnerStatePullingSnapshot(snapshotRunner: Snapsho...
method handleSnapshotRunnerStateBuildingSnapshot (line 395) | async handleSnapshotRunnerStateBuildingSnapshot(snapshotRunner: Snapsh...
method handleMigrateDrainingRunnerSnapshots (line 417) | private async handleMigrateDrainingRunnerSnapshots() {
method checkSnapshotCleanup (line 543) | async checkSnapshotCleanup() {
method checkSnapshotState (line 587) | async checkSnapshotState() {
method syncSnapshotState (line 606) | async syncSnapshotState(snapshotId: string): Promise<void> {
method handleSnapshotRunnerStateRemoving (line 656) | async handleSnapshotRunnerStateRemoving(snapshotRunner: SnapshotRunner...
method handleSnapshotStateRemoving (line 697) | async handleSnapshotStateRemoving(snapshot: Snapshot): Promise<SyncSta...
method handleCheckInitialRunnerSnapshot (line 711) | async handleCheckInitialRunnerSnapshot(snapshot: Snapshot): Promise<Sy...
method processPullOnInitialRunner (line 827) | async processPullOnInitialRunner(snapshot: Snapshot, runner: Runner) {
method processBuildOnRunner (line 867) | async processBuildOnRunner(snapshot: Snapshot, runner: Runner) {
method handleSnapshotStatePending (line 893) | async handleSnapshotStatePending(snapshot: Snapshot): Promise<SyncStat...
method updateSnapshotState (line 977) | private async updateSnapshotState(snapshotId: string, state: SnapshotS...
method cleanupOldBuildInfoSnapshotRunners (line 1006) | async cleanupOldBuildInfoSnapshotRunners() {
method deactivateOldSnapshots (line 1048) | async deactivateOldSnapshots() {
method cleanupInactiveSnapshotsFromRunners (line 1111) | async cleanupInactiveSnapshotsFromRunners() {
method processSnapshotDigest (line 1167) | private async processSnapshotDigest(
method handleSnapshotCreatedEvent (line 1223) | private async handleSnapshotCreatedEvent(event: SnapshotCreatedEvent) {
method handleSnapshotActivatedEvent (line 1230) | private async handleSnapshotActivatedEvent(event: SnapshotActivatedEve...
FILE: apps/api/src/sandbox/managers/volume.manager.ts
constant VOLUME_STATE_LOCK_KEY (line 25) | const VOLUME_STATE_LOCK_KEY = 'volume-state-'
class VolumeManager (line 28) | class VolumeManager
method constructor (line 38) | constructor(
method onModuleInit (line 67) | async onModuleInit() {
method onApplicationBootstrap (line 80) | onApplicationBootstrap() {
method onApplicationShutdown (line 88) | async onApplicationShutdown() {
method testConnection (line 96) | private async testConnection() {
method processPendingVolumes (line 112) | async processPendingVolumes() {
method processVolumeState (line 159) | private async processVolumeState(volume: Volume): Promise<void> {
method handlePendingCreate (line 180) | private async handlePendingCreate(volume: Volume, lockKey: string): Pr...
method handlePendingDelete (line 242) | private async handlePendingDelete(volume: Volume, lockKey: string): Pr...
FILE: apps/api/src/sandbox/proxy/log-proxy.ts
class LogProxy (line 11) | class LogProxy {
method constructor (line 14) | constructor(
method create (line 24) | create() {
FILE: apps/api/src/sandbox/repositories/sandbox.repository.ts
class SandboxRepository (line 20) | class SandboxRepository extends BaseRepository<Sandbox> {
method constructor (line 23) | constructor(
method insert (line 31) | async insert(sandbox: Sandbox): Promise<Sandbox> {
method update (line 68) | async update(
method updateWhere (line 118) | async updateWhere(
method invalidateLookupCacheOnInsert (line 167) | private invalidateLookupCacheOnInsert(sandbox: Sandbox): void {
method invalidateLookupCacheOnUpdate (line 184) | private invalidateLookupCacheOnUpdate(
method emitUpdateEvents (line 218) | private emitUpdateEvents(
FILE: apps/api/src/sandbox/runner-adapter/runnerAdapter.ts
type RunnerSandboxInfo (line 18) | interface RunnerSandboxInfo {
type RunnerSnapshotInfo (line 25) | interface RunnerSnapshotInfo {
type SnapshotDigestResponse (line 33) | interface SnapshotDigestResponse {
type RunnerMetrics (line 38) | interface RunnerMetrics {
type RunnerInfo (line 49) | interface RunnerInfo {
type StartSandboxResponse (line 55) | interface StartSandboxResponse {
type RunnerAdapter (line 59) | interface RunnerAdapter {
class RunnerAdapterFactory (line 117) | class RunnerAdapterFactory {
method constructor (line 120) | constructor(private moduleRef: ModuleRef) {}
method create (line 122) | async create(runner: Runner): Promise<RunnerAdapter> {
FILE: apps/api/src/sandbox/runner-adapter/runnerAdapter.v0.ts
constant RETRYABLE_NETWORK_ERROR_CODES (line 46) | const RETRYABLE_NETWORK_ERROR_CODES = ['ECONNRESET', 'ETIMEDOUT']
class RunnerAdapterV0 (line 49) | class RunnerAdapterV0 implements RunnerAdapter {
method convertSandboxState (line 56) | private convertSandboxState(state: EnumsSandboxState): SandboxState {
method convertBackupState (line 83) | private convertBackupState(state: EnumsBackupState): BackupState {
method init (line 98) | public async init(runner: Runner): Promise<void> {
method healthCheck (line 161) | async healthCheck(signal?: AbortSignal): Promise<void> {
method runnerInfo (line 168) | async runnerInfo(signal?: AbortSignal): Promise<RunnerInfo> {
method sandboxInfo (line 177) | async sandboxInfo(sandboxId: string): Promise<RunnerSandboxInfo> {
method createSandbox (line 187) | async createSandbox(
method startSandbox (line 240) | async startSandbox(
method stopSandbox (line 256) | async stopSandbox(sandboxId: string): Promise<void> {
method destroySandbox (line 260) | async destroySandbox(sandboxId: string): Promise<void> {
method createBackup (line 264) | async createBackup(sandbox: Sandbox, backupSnapshotName: string, regis...
method buildSnapshot (line 282) | async buildSnapshot(
method removeSnapshot (line 318) | async removeSnapshot(snapshotName: string): Promise<void> {
method pullSnapshot (line 322) | async pullSnapshot(
method snapshotExists (line 359) | async snapshotExists(snapshotName: string): Promise<boolean> {
method getSnapshotInfo (line 364) | async getSnapshotInfo(snapshotName: string): Promise<RunnerSnapshotInf...
method inspectSnapshotInRegistry (line 383) | async inspectSnapshotInRegistry(snapshotName: string, registry?: Docke...
method updateNetworkSettings (line 402) | async updateNetworkSettings(
method recoverSandbox (line 417) | async recoverSandbox(sandbox: Sandbox): Promise<void> {
method resizeSandbox (line 440) | async resizeSandbox(sandboxId: string, cpu?: number, memory?: number, ...
FILE: apps/api/src/sandbox/runner-adapter/runnerAdapter.v2.ts
class RunnerAdapterV2 (line 45) | class RunnerAdapterV2 implements RunnerAdapter {
method constructor (line 49) | constructor(
method init (line 56) | async init(runner: Runner): Promise<void> {
method healthCheck (line 60) | async healthCheck(_signal?: AbortSignal): Promise<void> {
method runnerInfo (line 64) | async runnerInfo(_signal?: AbortSignal): Promise<RunnerInfo> {
method sandboxInfo (line 68) | async sandboxInfo(sandboxId: string): Promise<RunnerSandboxInfo> {
method inferStateFromJob (line 119) | private inferStateFromJob(job: Job, sandbox: Sandbox): SandboxState {
method createSandbox (line 136) | async createSandbox(
method startSandbox (line 193) | async startSandbox(
method stopSandbox (line 209) | async stopSandbox(sandboxId: string): Promise<void> {
method destroySandbox (line 215) | async destroySandbox(sandboxId: string): Promise<void> {
method recoverSandbox (line 221) | async recoverSandbox(sandbox: Sandbox): Promise<void> {
method createBackup (line 253) | async createBackup(sandbox: Sandbox, backupSnapshotName: string, regis...
method buildSnapshot (line 280) | async buildSnapshot(
method pullSnapshot (line 325) | async pullSnapshot(
method removeSnapshot (line 371) | async removeSnapshot(snapshotName: string): Promise<void> {
method snapshotExists (line 377) | async snapshotExists(snapshotRef: string): Promise<boolean> {
method getSnapshotInfo (line 411) | async getSnapshotInfo(snapshotRef: string): Promise<RunnerSnapshotInfo> {
method inspectSnapshotInRegistry (line 455) | async inspectSnapshotInRegistry(snapshotName: string, registry?: Docke...
method updateNetworkSettings (line 500) | async updateNetworkSettings(
method resizeSandbox (line 526) | async resizeSandbox(sandboxId: string, cpu?: number, memory?: number, ...
FILE: apps/api/src/sandbox/sandbox.module.ts
class SandboxModule (line 147) | class SandboxModule {}
FILE: apps/api/src/sandbox/services/job-state-handler.service.ts
class JobStateHandlerService (line 32) | class JobStateHandlerService {
method constructor (line 35) | constructor(
method handleJobCompletion (line 49) | async handleJobCompletion(job: Job): Promise<void> {
method handleCreateSandboxJobCompletion (line 106) | private async handleCreateSandboxJobCompletion(job: Job): Promise<void> {
method handleStartSandboxJobCompletion (line 150) | private async handleStartSandboxJobCompletion(job: Job): Promise<void> {
method handleStopSandboxJobCompletion (line 192) | private async handleStopSandboxJobCompletion(job: Job): Promise<void> {
method handleDestroySandboxJobCompletion (line 230) | private async handleDestroySandboxJobCompletion(job: Job): Promise<voi...
method handlePullSnapshotJobCompletion (line 267) | private async handlePullSnapshotJobCompletion(job: Job): Promise<void> {
method handleBuildSnapshotJobCompletion (line 323) | private async handleBuildSnapshotJobCompletion(job: Job): Promise<void> {
method handleRemoveSnapshotJobCompletion (line 378) | private async handleRemoveSnapshotJobCompletion(job: Job): Promise<voi...
method handleCreateBackupJobCompletion (line 404) | private async handleCreateBackupJobCompletion(job: Job): Promise<void> {
method handleRecoverSandboxJobCompletion (line 436) | private async handleRecoverSandboxJobCompletion(job: Job): Promise<voi...
method handleResizeSandboxJobCompletion (line 474) | private async handleResizeSandboxJobCompletion(job: Job): Promise<void> {
FILE: apps/api/src/sandbox/services/job.service.ts
constant REDIS_BLOCKING_COMMAND_TIMEOUT_BUFFER_MS (line 19) | const REDIS_BLOCKING_COMMAND_TIMEOUT_BUFFER_MS = 3_000
class JobService (line 22) | class JobService {
method constructor (line 26) | constructor(
method createJob (line 38) | async createJob<T extends JobType>(
method notifyRunner (line 89) | private async notifyRunner(runnerId: string, jobId: string): Promise<v...
method findOne (line 99) | async findOne(jobId: string): Promise<Job | null> {
method pollJobs (line 103) | async pollJobs(runnerId: string, limit = 10, timeoutSeconds = 30, abor...
method updateJobStatus (line 217) | async updateJobStatus(
method findPendingJobsForRunner (line 263) | async findPendingJobsForRunner(runnerId: string, limit = 10): Promise<...
method findJobsForRunner (line 276) | async findJobsForRunner(runnerId: string, status?: JobStatus, page = 1...
method findJobsBySandboxId (line 300) | async findJobsBySandboxId(sandboxId: string): Promise<Job[]> {
method findJobsByResourceId (line 304) | async findJobsByResourceId(resourceType: ResourceType, resourceId: str...
method waitJobCompletion (line 316) | async waitJobCompletion(jobId: string, waitTimeout: number): Promise<J...
method captureTraceContext (line 341) | private captureTraceContext(): Record<string, string> | null {
method isValidStatusTransition (line 360) | private isValidStatusTransition(currentStatus: JobStatus, newStatus: J...
method getRunnerQueueKey (line 375) | private getRunnerQueueKey(runnerId: string): string {
method handleStaleJobs (line 384) | async handleStaleJobs(): Promise<void> {
method claimPendingJobs (line 428) | private async claimPendingJobs(runnerId: string, limit: number): Promi...
FILE: apps/api/src/sandbox/services/proxy-cache-invalidation.service.ts
class ProxyCacheInvalidationService (line 15) | class ProxyCacheInvalidationService {
method constructor (line 19) | constructor(@InjectRedis() private readonly redis: Redis) {}
method handleSandboxArchived (line 22) | async handleSandboxArchived(event: SandboxArchivedEvent): Promise<void> {
method invalidateRunnerCache (line 26) | private async invalidateRunnerCache(sandboxId: string): Promise<void> {
FILE: apps/api/src/sandbox/services/runner.service.ts
class RunnerService (line 52) | class RunnerService {
method constructor (line 57) | constructor(
method create (line 83) | async create(createRunnerDto: CreateRunnerInternalDto): Promise<{
method findAllFull (line 145) | async findAllFull(): Promise<RunnerFullDto[]> {
method findAllByRegion (line 159) | async findAllByRegion(regionId: string): Promise<RunnerDto[]> {
method findAllByRegionFull (line 169) | async findAllByRegionFull(regionId: string): Promise<RunnerFullDto[]> {
method findAllByOrganization (line 181) | async findAllByOrganization(organizationId: string, regionType?: Regio...
method findDrainingPaginated (line 194) | async findDrainingPaginated(skip: number, take: number): Promise<Runne...
method findAllReady (line 208) | async findAllReady(): Promise<Runner[]> {
method findOne (line 216) | async findOne(id: string): Promise<Runner | null> {
method findOneOrFail (line 226) | async findOneOrFail(id: string): Promise<Runner> {
method findOneFullOrFail (line 234) | async findOneFullOrFail(id: string): Promise<RunnerFullDto> {
method findOneByDomain (line 241) | async findOneByDomain(domain: string): Promise<Runner | null> {
method findByIds (line 245) | async findByIds(runnerIds: string[]): Promise<Runner[]> {
method findByApiKey (line 255) | async findByApiKey(apiKey: string): Promise<Runner | null> {
method findBySandboxId (line 259) | async findBySandboxId(sandboxId: string): Promise<Runner | null> {
method getRegionId (line 274) | async getRegionId(runnerId: string): Promise<string> {
method findAvailableRunners (line 290) | async findAvailableRunners(params: GetRunnerParams): Promise<Runner[]> {
method remove (line 347) | async remove(id: string): Promise<void> {
method updateRunnerHealth (line 377) | async updateRunnerHealth(
method updateRunnerState (line 485) | private async updateRunnerState(runnerId: string, newState: RunnerStat...
method handleCheckRunners (line 509) | private async handleCheckRunners() {
method checkRunnerV2Health (line 631) | private async checkRunnerV2Health(runner: Runner): Promise<void> {
method handleCheckDecommissionRunners (line 669) | private async handleCheckDecommissionRunners() {
method updateSchedulingStatus (line 734) | async updateSchedulingStatus(id: string, unschedulable: boolean): Prom...
method updateDrainingStatus (line 741) | async updateDrainingStatus(id: string, draining: boolean): Promise<Run...
method getRandomAvailableRunner (line 748) | async getRandomAvailableRunner(params: GetRunnerParams): Promise<Runne...
method getSnapshotRunner (line 761) | async getSnapshotRunner(runnerId: string, snapshotRef: string): Promis...
method getSnapshotRunners (line 770) | async getSnapshotRunners(snapshotRef: string): Promise<SnapshotRunner[...
method createSnapshotRunnerEntry (line 782) | async createSnapshotRunnerEntry(
method getRunnersWithMultipleSnapshotsBuilding (line 813) | async getRunnersWithMultipleSnapshotsBuilding(maxSnapshotCount = 6): P...
method getRunnersWithMultipleSnapshotsPulling (line 826) | async getRunnersWithMultipleSnapshotsPulling(maxSnapshotCount = 6): Pr...
method getRunnersBySnapshotRef (line 838) | async getRunnersBySnapshotRef(ref: string): Promise<RunnerSnapshotDto[...
method getInitialRunnerBySnapshotId (line 865) | async getInitialRunnerBySnapshotId(snapshotId: string): Promise<Runner> {
method getRunnerApiVersion (line 877) | async getRunnerApiVersion(runnerId: string): Promise<string> {
method updateRunner (line 890) | private async updateRunner(
method invalidateRunnerCache (line 899) | private invalidateRunnerCache(runnerId: string): void {
method calculateAvailabilityScore (line 915) | private calculateAvailabilityScore(runnerId: string, params: Availabil...
method calculateTOPSISScore (line 935) | private calculateTOPSISScore(params: AvailabilityScoreParams): number {
method getAvailabilityScoreConfig (line 1001) | private getAvailabilityScoreConfig(): AvailabilityScoreConfig {
class GetRunnerParams (line 1051) | class GetRunnerParams {
type AvailabilityScoreParams (line 1059) | interface AvailabilityScoreParams {
type AvailabilityScoreConfig (line 1073) | interface AvailabilityScoreConfig {
FILE: apps/api/src/sandbox/services/sandbox-lookup-cache-invalidation.service.ts
type InvalidateSandboxLookupCacheArgs (line 16) | type InvalidateSandboxLookupCacheArgs =
class SandboxLookupCacheInvalidationService (line 29) | class SandboxLookupCacheInvalidationService {
method constructor (line 32) | constructor(private readonly dataSource: DataSource) {}
method invalidate (line 34) | invalidate(args: InvalidateSandboxLookupCacheArgs): void {
method invalidateOrgId (line 99) | invalidateOrgId(args: {
FILE: apps/api/src/sandbox/services/sandbox-warm-pool.service.ts
type FetchWarmPoolSandboxParams (line 34) | type FetchWarmPoolSandboxParams = {
class SandboxWarmPoolService (line 49) | class SandboxWarmPoolService {
method constructor (line 52) | constructor(
method onApplicationBootstrap (line 68) | async onApplicationBootstrap() {
method fetchWarmPoolSandbox (line 72) | async fetchWarmPoolSandbox(params: FetchWarmPoolSandboxParams): Promis...
method warmPoolCheck (line 175) | async warmPoolCheck(): Promise<void> {
method handleSandboxOrganizationUpdated (line 223) | async handleSandboxOrganizationUpdated(event: SandboxOrganizationUpdat...
FILE: apps/api/src/sandbox/services/sandbox.service.ts
constant DEFAULT_CPU (line 91) | const DEFAULT_CPU = 1
constant DEFAULT_MEMORY (line 92) | const DEFAULT_MEMORY = 1
constant DEFAULT_DISK (line 93) | const DEFAULT_DISK = 3
constant DEFAULT_GPU (line 94) | const DEFAULT_GPU = 0
class SandboxService (line 97) | class SandboxService {
method constructor (line 100) | constructor(
method getLockKey (line 125) | protected getLockKey(id: string): string {
method assertSandboxNotErrored (line 129) | private assertSandboxNotErrored(sandbox: Sandbox): void {
method validateOrganizationQuotas (line 135) | private async validateOrganizationQuotas(
method rollbackPendingUsage (line 243) | async rollbackPendingUsage(
method archive (line 267) | async archive(sandboxIdOrName: string, organizationId?: string): Promi...
method createForWarmPool (line 302) | async createForWarmPool(warmPoolItem: WarmPool): Promise<Sandbox> {
method createFromSnapshot (line 341) | async createFromSnapshot(
method assignWarmPoolSandbox (line 538) | private async assignWarmPoolSandbox(
method createFromBuildInfo (line 616) | async createFromBuildInfo(createSandboxDto: CreateSandboxDto, organiza...
method createBackup (line 761) | async createBackup(sandboxIdOrName: string, organizationId?: string): ...
method findAllDeprecated (line 777) | async findAllDeprecated(
method findAll (line 802) | async findAll(
method getExpectedDesiredStateForState (line 910) | private getExpectedDesiredStateForState(state: SandboxState): SandboxD...
method hasValidDesiredState (line 925) | private hasValidDesiredState(state: SandboxState): boolean {
method findByRunnerId (line 929) | async findByRunnerId(
method findOneByIdOrName (line 957) | async findOneByIdOrName(
method findOne (line 1007) | async findOne(sandboxId: string, returnDestroyed?: boolean): Promise<S...
method getOrganizationId (line 1027) | async getOrganizationId(sandboxIdOrName: string, organizationId?: stri...
method getRunnerId (line 1061) | async getRunnerId(sandboxId: string): Promise<string | null> {
method getRegionId (line 1077) | async getRegionId(sandboxId: string): Promise<string> {
method getPortPreviewUrl (line 1093) | async getPortPreviewUrl(sandboxIdOrName: string, organizationId: strin...
method getSignedPortPreviewUrl (line 1142) | async getSignedPortPreviewUrl(
method getSandboxIdFromSignedPreviewUrlToken (line 1206) | async getSandboxIdFromSignedPreviewUrlToken(token: string, port: numbe...
method expireSignedPreviewUrlToken (line 1215) | async expireSignedPreviewUrlToken(
method destroy (line 1230) | async destroy(sandboxIdOrName: string, organizationId?: string): Promi...
method start (line 1248) | async start(sandboxIdOrName: string, organization: Organization): Prom...
method stop (line 1326) | async stop(sandboxIdOrName: string, organizationId?: string): Promise<...
method recover (line 1362) | async recover(sandboxIdOrName: string, organization: Organization): Pr...
method resize (line 1415) | async resize(sandboxIdOrName: string, resizeDto: ResizeSandboxDto, org...
method updatePublicStatus (line 1610) | async updatePublicStatus(sandboxIdOrName: string, isPublic: boolean, o...
method updateLastActivityAt (line 1623) | async updateLastActivityAt(sandboxId: string, lastActivityAt: Date): P...
method getToolboxProxyUrl (line 1634) | async getToolboxProxyUrl(sandboxId: string): Promise<string> {
method toSandboxDto (line 1639) | async toSandboxDto(sandbox: Sandbox): Promise<SandboxDto> {
method toSandboxDtos (line 1644) | async toSandboxDtos(sandboxes: Sandbox[]): Promise<SandboxDto[]> {
method resolveToolboxProxyUrl (line 1655) | async resolveToolboxProxyUrl(regionId: string): Promise<string> {
method resolveToolboxProxyUrls (line 1673) | async resolveToolboxProxyUrls(regionIds: string[]): Promise<Map<string...
method getBuildLogsUrl (line 1719) | async getBuildLogsUrl(sandboxIdOrName: string, organizationId: string)...
method getValidatedOrDefaultRegion (line 1739) | private async getValidatedOrDefaultRegion(organization: Organization, ...
method getValidatedOrDefaultClass (line 1766) | private getValidatedOrDefaultClass(sandboxClass: SandboxClass): Sandbo...
method replaceLabels (line 1778) | async replaceLabels(
method cleanupDestroyedSandboxes (line 1796) | async cleanupDestroyedSandboxes() {
method cleanupBuildFailedSandboxes (line 1813) | async cleanupBuildFailedSandboxes() {
method cleanupStaleBuildFailedSandboxes (line 1831) | async cleanupStaleBuildFailedSandboxes() {
method cleanupStaleErrorSandboxes (line 1849) | async cleanupStaleErrorSandboxes() {
method setAutostopInterval (line 1864) | async setAutostopInterval(sandboxIdOrName: string, interval: number, o...
method setAutoArchiveInterval (line 1874) | async setAutoArchiveInterval(sandboxIdOrName: string, interval: number...
method setAutoDeleteInterval (line 1884) | async setAutoDeleteInterval(sandboxIdOrName: string, interval: number,...
method updateNetworkSettings (line 1894) | async updateNetworkSettings(
method updateState (line 1928) | async updateState(
method createWarmPoolSandbox (line 1985) | private async createWarmPoolSandbox(event: WarmPoolTopUpRequested) {
method handleUnschedulableRunners (line 1992) | private async handleUnschedulableRunners() {
method isSandboxPublic (line 2024) | async isSandboxPublic(sandboxId: string): Promise<boolean> {
method handleSuspendedSandboxStopped (line 2037) | async handleSuspendedSandboxStopped(event: OrganizationSuspendedSandbo...
method resolveAutoStopInterval (line 2044) | private resolveAutoStopInterval(autoStopInterval: number): number {
method resolveAutoArchiveInterval (line 2052) | private resolveAutoArchiveInterval(autoArchiveInterval: number): number {
method resolveNetworkAllowList (line 2066) | private resolveNetworkAllowList(networkAllowList: string): string {
method resolveVolumes (line 2076) | private resolveVolumes(volumes: SandboxVolume[]): SandboxVolume[] {
method createSshAccess (line 2092) | async createSshAccess(
method revokeSshAccess (line 2119) | async revokeSshAccess(sandboxIdOrName: string, token?: string, organiz...
method validateSshAccess (line 2133) | async validateSshAccess(token: string): Promise<SshAccessValidationDto> {
method updateSandboxBackupState (line 2166) | async updateSandboxBackupState(
FILE: apps/api/src/sandbox/services/snapshot.service.ts
constant IMAGE_NAME_REGEX (line 54) | const IMAGE_NAME_REGEX = /^[a-zA-Z0-9_.\-:]+(\/[a-zA-Z0-9_.\-:]+)*(@sha2...
class SnapshotService (line 56) | class SnapshotService {
method constructor (line 59) | constructor(
method validateImageName (line 81) | private validateImageName(name: string): string | null {
method validateSnapshotName (line 107) | private validateSnapshotName(name: string): string | null {
method processEntrypoint (line 115) | private processEntrypoint(entrypoint?: string[]): string[] | undefined {
method readySnapshotRunnerExists (line 126) | private async readySnapshotRunnerExists(ref: string, regionId: string)...
method createFromPull (line 138) | async createFromPull(organization: Organization, createSnapshotDto: Cr...
method createFromBuildInfo (line 217) | async createFromBuildInfo(organization: Organization, createSnapshotDt...
method removeSnapshot (line 323) | async removeSnapshot(snapshotId: string) {
method getAllSnapshots (line 338) | async getAllSnapshots(
method getSnapshot (line 401) | async getSnapshot(snapshotId: string): Promise<Snapshot> {
method getSnapshotWithRegions (line 413) | async getSnapshotWithRegions(snapshotIdOrName: string, organizationId:...
method getSnapshotByName (line 441) | async getSnapshotByName(snapshotName: string, organizationId: string):...
method setSnapshotGeneralStatus (line 461) | async setSnapshotGeneralStatus(snapshotId: string, general: boolean) {
method getBuildLogsUrl (line 474) | async getBuildLogsUrl(snapshot: Snapshot): Promise<string> {
method validateOrganizationQuotas (line 493) | private async validateOrganizationQuotas(
method rollbackPendingUsage (line 538) | async rollbackPendingUsage(organizationId: string, pendingSnapshotCoun...
method handleSandboxCreatedEvent (line 551) | private async handleSandboxCreatedEvent(event: SandboxCreatedEvent) {
method activateSnapshot (line 566) | async activateSnapshot(snapshotId: string, organization: Organization)...
method canCleanupImage (line 619) | async canCleanupImage(imageName: string): Promise<boolean> {
method deactivateSnapshot (line 652) | async deactivateSnapshot(snapshotId: string): Promise<void> {
method getEntrypointFromDockerfile (line 692) | getEntrypointFromDockerfile(dockerfileContent: string): string[] {
method getValidatedOrDefaultRegionId (line 720) | private async getValidatedOrDefaultRegionId(organization: Organization...
method getSnapshotRegions (line 752) | async getSnapshotRegions(snapshotId: string): Promise<Region[]> {
method isAvailableInRegion (line 765) | async isAvailableInRegion(snapshotId: string, regionId: string): Promi...
method handleSuspendedOrganizationSnapshotDeactivated (line 775) | async handleSuspendedOrganizationSnapshotDeactivated(event: Organizati...
method handleRunnerDeletedEvent (line 788) | async handleRunnerDeletedEvent(payload: RunnerDeletedEvent): Promise<v...
FILE: apps/api/src/sandbox/services/toolbox.deprecated.service.ts
class ToolboxService (line 17) | class ToolboxService {
method constructor (line 20) | constructor(
method forwardRequestToRunner (line 27) | async forwardRequestToRunner(sandboxId: string, method: string, path: ...
method getRunner (line 85) | public async getRunner(sandboxId: string): Promise<Runner> {
FILE: apps/api/src/sandbox/services/volume.service.ts
class VolumeService (line 33) | class VolumeService {
method constructor (line 36) | constructor(
method validateOrganizationQuotas (line 46) | private async validateOrganizationQuotas(
method rollbackPendingUsage (line 71) | async rollbackPendingUsage(organizationId: string, pendingVolumeCountI...
method create (line 83) | async create(organization: Organization, createVolumeDto: CreateVolume...
method delete (line 134) | async delete(volumeId: string): Promise<void> {
method findOne (line 178) | async findOne(volumeId: string): Promise<Volume> {
method findAll (line 190) | async findAll(organizationId: string, includeDeleted = false): Promise...
method findByName (line 206) | async findByName(organizationId: string, name: string): Promise<Volume> {
method validateVolumes (line 222) | async validateVolumes(organizationId: string, volumeIdOrNames: string[...
method getOrganizationId (line 251) | async getOrganizationId(params: { id: string } | { name: string; organ...
method handleSandboxCreatedEvent (line 276) | private async handleSandboxCreatedEvent(event: SandboxCreatedEvent) {
FILE: apps/api/src/sandbox/subscribers/runner.subscriber.ts
class RunnerSubscriber (line 17) | class RunnerSubscriber implements EntitySubscriberInterface<Runner> {
method constructor (line 25) | constructor(dataSource: DataSource) {
method listenTo (line 30) | listenTo() {
method afterInsert (line 34) | afterInsert(event: InsertEvent<Runner>) {
method afterUpdate (line 38) | afterUpdate(event: UpdateEvent<Runner>) {
FILE: apps/api/src/sandbox/subscribers/snapshot.subscriber.ts
class SnapshotSubscriber (line 15) | class SnapshotSubscriber implements EntitySubscriberInterface<Snapshot> {
method constructor (line 19) | constructor(dataSource: DataSource) {
method listenTo (line 23) | listenTo() {
method afterUpdate (line 27) | afterUpdate(event: UpdateEvent<Snapshot>) {
method beforeRemove (line 44) | beforeRemove(event: RemoveEvent<Snapshot>) {
FILE: apps/api/src/sandbox/subscribers/volume.subscriber.ts
class VolumeSubscriber (line 16) | class VolumeSubscriber implements EntitySubscriberInterface<Volume> {
method constructor (line 20) | constructor(dataSource: DataSource) {
method listenTo (line 24) | listenTo() {
method afterInsert (line 28) | afterInsert(event: InsertEvent<Volume>) {
method afterUpdate (line 32) | afterUpdate(event: UpdateEvent<Volume>) {
FILE: apps/api/src/sandbox/utils/lock-key.util.ts
function getStateChangeLockKey (line 6) | function getStateChangeLockKey(id: string): string {
FILE: apps/api/src/sandbox/utils/network-validation.util.ts
function validateNetworkAllowList (line 12) | function validateNetworkAllowList(networkAllowList: string): void {
FILE: apps/api/src/sandbox/utils/runner-lookup-cache.util.ts
constant RUNNER_LOOKUP_CACHE_TTL_MS (line 6) | const RUNNER_LOOKUP_CACHE_TTL_MS = 60_000
function runnerLookupCacheKeyById (line 8) | function runnerLookupCacheKeyById(runnerId: string): string {
FILE: apps/api/src/sandbox/utils/sandbox-lookup-cache.util.ts
constant SANDBOX_LOOKUP_CACHE_TTL_MS (line 6) | const SANDBOX_LOOKUP_CACHE_TTL_MS = 10_000
constant SANDBOX_BUILD_INFO_CACHE_TTL_MS (line 7) | const SANDBOX_BUILD_INFO_CACHE_TTL_MS = 60_000
constant SANDBOX_ORG_ID_CACHE_TTL_MS (line 8) | const SANDBOX_ORG_ID_CACHE_TTL_MS = 60_000
constant TOOLBOX_PROXY_URL_CACHE_TTL_S (line 9) | const TOOLBOX_PROXY_URL_CACHE_TTL_S = 30 * 60 // 30 minutes
type SandboxLookupCacheKeyArgs (line 11) | type SandboxLookupCacheKeyArgs = {
function sandboxLookupCacheKeyById (line 16) | function sandboxLookupCacheKeyById(args: SandboxLookupCacheKeyArgs & { s...
function sandboxLookupCacheKeyByName (line 22) | function sandboxLookupCacheKeyByName(args: SandboxLookupCacheKeyArgs & {...
function sandboxLookupCacheKeyByAuthToken (line 28) | function sandboxLookupCacheKeyByAuthToken(args: { authToken: string }): ...
type SandboxOrgIdCacheKeyArgs (line 32) | type SandboxOrgIdCacheKeyArgs = {
function sandboxOrgIdCacheKeyById (line 36) | function sandboxOrgIdCacheKeyById(args: SandboxOrgIdCacheKeyArgs & { san...
function sandboxOrgIdCacheKeyByName (line 41) | function sandboxOrgIdCacheKeyByName(args: SandboxOrgIdCacheKeyArgs & { s...
function toolboxProxyUrlCacheKey (line 46) | function toolboxProxyUrlCacheKey(regionId: string): s
Copy disabled (too large)
Download .json
Condensed preview — 3949 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,653K chars).
[
{
"path": ".devcontainer/Dockerfile",
"chars": 1542,
"preview": "FROM buildpack-deps:jammy-curl\n\nARG TARGETARCH\n\n# common tools\nRUN apt update && export DEBIAN_FRONTEND=noninteractive \\"
},
{
"path": ".devcontainer/buildkitd.toml",
"chars": 123,
"preview": "insecure-entitlements = [ \"network.host\", \"security.insecure\" ]\n\n[registry.\"registry:5000\"]\n http = true\n insecure = t"
},
{
"path": ".devcontainer/devcontainer.build.json",
"chars": 2852,
"preview": "{\n // Duplicate of devcontainer.json but without docker compose\n // Docker compose is not supported for building and p"
},
{
"path": ".devcontainer/devcontainer.json",
"chars": 3207,
"preview": "{\n \"name\": \"Daytona\",\n \"dockerComposeFile\": \"docker-compose.yaml\",\n \"service\": \"app\",\n \"workspaceFolder\": \"/workspac"
},
{
"path": ".devcontainer/dex/config.yaml",
"chars": 697,
"preview": "# config.yaml\nissuer: http://localhost:5556/dex\nstorage:\n type: memory\nweb:\n http: 0.0.0.0:5556\n allowedOrigins: ['*'"
},
{
"path": ".devcontainer/docker-compose.yaml",
"chars": 2599,
"preview": "version: '3.8'\n\nservices:\n app:\n build:\n context: .\n dockerfile: Dockerfile\n privileged: true\n volum"
},
{
"path": ".devcontainer/otel/otel-collector-config.yaml",
"chars": 693,
"preview": "receivers:\n otlp:\n protocols:\n grpc:\n endpoint: 0.0.0.0:4317\n http:\n endpoint: 0.0.0.0:4318\n"
},
{
"path": ".devcontainer/pgadmin4/pgpass",
"chars": 19,
"preview": "db:5432:*:user:pass"
},
{
"path": ".devcontainer/pgadmin4/servers.json",
"chars": 220,
"preview": "{\n \"Servers\": {\n \"1\": {\n \"Name\": \"Daytona\",\n \"Group\": \"Servers\",\n \"Host\": \"db\",\n \"Port\": 5432,\n "
},
{
"path": ".devcontainer/tools-feature/devcontainer-feature.json",
"chars": 655,
"preview": "{\n \"name\": \"Development tools\",\n \"id\": \"tools\",\n \"version\": \"1.0.0\",\n \"description\": \"Installs development tools.\",\n"
},
{
"path": ".devcontainer/tools-feature/install.sh",
"chars": 1637,
"preview": "#!/bin/bash\n# Copyright 2025 Daytona Platforms Inc.\n# SPDX-License-Identifier: AGPL-3.0\n\nset -e\n\necho \"Installing Python"
},
{
"path": ".dockerignore",
"chars": 423,
"preview": ".claude\n.devcontainer\n.github\n.husky\n.vscode\n.nx\nexamples\nfunctions\nimages\nnode_modules\n.env.local\ndist\n!dist/libs/compu"
},
{
"path": ".editorconfig",
"chars": 245,
"preview": "# Editor configuration, see http://editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = "
},
{
"path": ".gitattributes",
"chars": 684,
"preview": "apps/runner/pkg/api/docs/** linguist-generated=true\napps/daemon/pkg/toolbox/docs/** linguist-generated=true\nlibs/api-cli"
},
{
"path": ".github/CODEOWNERS",
"chars": 210,
"preview": "# CODEOWNERS — Daytona\n# These owners are automatically requested for review on PRs that modify the listed files.\n\n# Sec"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 739,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\ntype: Bug\nassignees: ''\n---\n\n**Describe the bug"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 597,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\ntype: Feature\nassignees: ''\n---\n\n**Is your f"
},
{
"path": ".github/actions/setup-toolchain/action.yml",
"chars": 4389,
"preview": "name: Setup Toolchain\ndescription: Shared setup for Go, Node, Python, Ruby, Java and project dependencies\n\ninputs:\n ins"
},
{
"path": ".github/pull_request_template.md",
"chars": 474,
"preview": "## Description\n\nPlease include a summary of the change or the feature being introduced. Include relevant motivation and "
},
{
"path": ".github/workflows/build_devcontainer.yaml",
"chars": 1173,
"preview": "name: 'Build devcontainer image'\non:\n push:\n branches:\n - main\n\njobs:\n build:\n runs-on: ubuntu-latest\n s"
},
{
"path": ".github/workflows/default_image_publish.yaml",
"chars": 5439,
"preview": "name: Default Snapshot Images Publish\n\non:\n workflow_dispatch:\n inputs:\n version:\n description: Version "
},
{
"path": ".github/workflows/pr_checks.yaml",
"chars": 6159,
"preview": "name: '[PR] Validate code'\n\non:\n pull_request:\n branches:\n - main\n\npermissions:\n contents: read\n\nconcurrency:\n"
},
{
"path": ".github/workflows/prepare-release.yaml",
"chars": 1414,
"preview": "name: Prepare Release\n\non:\n workflow_dispatch:\n inputs:\n version:\n description: Version to release (star"
},
{
"path": ".github/workflows/release.yaml",
"chars": 11492,
"preview": "name: Release\n\non:\n workflow_dispatch:\n inputs:\n version:\n description: Version to release (start with \""
},
{
"path": ".github/workflows/sdk_publish.yaml",
"chars": 2668,
"preview": "name: SDK and CLI Publish\n\non:\n workflow_dispatch:\n inputs:\n version:\n description: Version to release ("
},
{
"path": ".github/workflows/translate.yaml",
"chars": 665,
"preview": "name: GT Translate\non:\n push:\n branches: [main]\n\njobs:\n translate:\n runs-on: ubuntu-latest\n if: ${{ github.ev"
},
{
"path": ".gitignore",
"chars": 1098,
"preview": "# See http://help.github.com/ignore-files/ for more about ignoring files.\n\n# compiled output\ndist\ntmp\nout-tsc\n\n# depende"
},
{
"path": ".golangci.yaml",
"chars": 657,
"preview": "version: '2'\nrun:\n build-tags:\n - testing\nlinters:\n settings:\n errcheck:\n exclude-functions:\n - (*gi"
},
{
"path": ".husky/.gitignore",
"chars": 2,
"preview": "_\n"
},
{
"path": ".husky/pre-commit",
"chars": 28,
"preview": "#!/bin/sh\n\nyarn lint-staged\n"
},
{
"path": ".licenserc-clients.yaml",
"chars": 1061,
"preview": "header:\n license:\n spdx-id: Apache-2.0\n copyright-owner: Daytona Platforms Inc.\n content: |\n Copyright Da"
},
{
"path": ".licenserc.yaml",
"chars": 729,
"preview": "header:\n license:\n spdx-id: AGPL-3.0\n copyright-owner: Daytona Platforms Inc.\n content: |\n Copyright Dayt"
},
{
"path": ".markdownlint-cli2.jsonc",
"chars": 766,
"preview": "{\n \"$schema\": \"https://raw.githubusercontent.com/DavidAnson/markdownlint-cli2/24eb4dce508ab81398d14d75179123fca425f12d/"
},
{
"path": ".npmrc",
"chars": 68,
"preview": "# Expose Astro dependencies for \\`pnpm\\` users\nshamefully-hoist=true"
},
{
"path": ".nxignore",
"chars": 18,
"preview": ".claude/\nexamples/"
},
{
"path": ".prettierignore",
"chars": 130,
"preview": "# Add files here to ignore them from prettier formatting\n/dist\n/coverage\n/.nx/cache\n/.nx/workspace-data\n*.md\n\nlibs/*api-"
},
{
"path": ".prettierrc",
"chars": 81,
"preview": "{\n \"singleQuote\": true,\n \"semi\": false,\n \"tabWidth\": 2,\n \"printWidth\": 120\n}\n"
},
{
"path": ".rubocop.yml",
"chars": 832,
"preview": "AllCops:\n NewCops: enable\n TargetRubyVersion: 3.2\n\nLayout/LineLength:\n AllowedPatterns: ['\\A\\s*#']\n AllowCopDirectiv"
},
{
"path": ".verdaccio/config.yml",
"chars": 621,
"preview": "# path to a directory with all packages\nstorage: ../tmp/local-registry/storage\n\n# a list of other known repositories we "
},
{
"path": ".vscode/launch.json",
"chars": 1675,
"preview": "{\n // Use IntelliSense to learn about possible attributes.\n // Hover to view descriptions of existing attributes.\n //"
},
{
"path": ".vscode/settings.json",
"chars": 71,
"preview": "{\n \"files.watcherExclude\": {\n \"**/libs/api-client*/**\": true\n }\n}\n"
},
{
"path": ".vscode/tasks.json",
"chars": 347,
"preview": "{\n \"version\": \"2.0.0\",\n \"tasks\": [\n {\n \"label\": \"debug-build-runner\",\n \"type\": \"shell\",\n \"command\": "
},
{
"path": ".yarnrc.yml",
"chars": 50,
"preview": "enableInlineHunks: true\n\nnodeLinker: node-modules\n"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5490,
"preview": "\n# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make particip"
},
{
"path": "CONTRIBUTING.md",
"chars": 7608,
"preview": "# Contributing to Daytona\n\nThe team at Daytona welcomes contributions from the community. There are many ways to get inv"
},
{
"path": "COPYRIGHT",
"chars": 428,
"preview": "Copyrights in the Daytona software are retained by their contributors.\nNo copyright assignment is required to contribute"
},
{
"path": "Gemfile",
"chars": 619,
"preview": "# frozen_string_literal: true\n\nsource 'https://rubygems.org'\n\n# Local gems from libs\ngem 'daytona_api_client', '>= 0.0.0"
},
{
"path": "Gemfile.lock",
"chars": 7880,
"preview": "PATH\n remote: libs/api-client-ruby\n specs:\n daytona_api_client (0.0.0.pre.dev)\n typhoeus (~> 1.0, >= 1.0.1)\n\nP"
},
{
"path": "LICENSE",
"chars": 34522,
"preview": " GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C)"
},
{
"path": "NOTICE",
"chars": 204,
"preview": "Daytona\nCopyright the various Daytona software authors.\n\nThe initial developer of the software is Daytona Platforms, Inc"
},
{
"path": "PACKAGING.md",
"chars": 2254,
"preview": "# Packaging Guidelines for Daytona\n\nThe Daytona team appreciates any efforts to make our software more accessible to use"
},
{
"path": "PREPARING_YOUR_CHANGES.md",
"chars": 4046,
"preview": "# Preparing Your Changes\n\nThis document contains information related to preparing changes for a pull request. Here's a q"
},
{
"path": "PUBLISHING.md",
"chars": 4673,
"preview": "# Publishing Daytona SDKs\n\nThis document describes how to publish the Daytona SDKs (Python, TypeScript, and Ruby) to the"
},
{
"path": "README.md",
"chars": 6848,
"preview": "<div align=\"center\">\n\n[]"
},
{
"path": "SECURITY.md",
"chars": 5343,
"preview": "# Security Policy\n\n## Reporting a Vulnerability\n\nAt Daytona, we take security seriously. If you believe you have found a"
},
{
"path": "apps/api/Dockerfile",
"chars": 1134,
"preview": "FROM node:24-slim AS daytona\n\nENV CI=true\n\n# Install dependencies (apt instead of apk)\nRUN apt-get update && apt-get ins"
},
{
"path": "apps/api/eslint.config.mjs",
"chars": 455,
"preview": "import baseConfig from '../../eslint.config.mjs'\n\nexport default [\n ...baseConfig,\n {\n files: ['**/*.ts'],\n rule"
},
{
"path": "apps/api/jest.config.ts",
"chars": 389,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport default {\n displayName: 'd"
},
{
"path": "apps/api/project.json",
"chars": 2978,
"preview": "{\n \"name\": \"api\",\n \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n \"sourceRoot\": \"apps/api/src\",\n \""
},
{
"path": "apps/api/scripts/validate-migration-paths.sh",
"chars": 1266,
"preview": "#!/bin/bash\n\n# Copyright Daytona Platforms Inc.\n# SPDX-License-Identifier: AGPL-3.0\n\n# Fails if any migration file is pl"
},
{
"path": "apps/api/src/admin/admin.module.ts",
"chars": 626,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Module } from '@nestjs/co"
},
{
"path": "apps/api/src/admin/controllers/runner.controller.ts",
"chars": 5299,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport {\n Body,\n Controller,\n D"
},
{
"path": "apps/api/src/admin/controllers/sandbox.controller.ts",
"chars": 2329,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Controller, HttpCode, NotFound"
},
{
"path": "apps/api/src/admin/dto/create-runner.dto.ts",
"chars": 1644,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { IsNumber, IsOptional, IsS"
},
{
"path": "apps/api/src/analytics/analytics.module.ts",
"chars": 407,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Module } from '@nestjs/co"
},
{
"path": "apps/api/src/analytics/services/analytics.service.ts",
"chars": 3714,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, Logger } from"
},
{
"path": "apps/api/src/api-key/api-key.controller.ts",
"chars": 7361,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Controller, Post, Get, De"
},
{
"path": "apps/api/src/api-key/api-key.entity.ts",
"chars": 938,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Column, Entity, Index, Pr"
},
{
"path": "apps/api/src/api-key/api-key.module.ts",
"chars": 693,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Module } from '@nestjs/co"
},
{
"path": "apps/api/src/api-key/api-key.service.ts",
"chars": 5432,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ConflictException, Inject"
},
{
"path": "apps/api/src/api-key/dto/api-key-list.dto.ts",
"chars": 1879,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ApiProperty, ApiSchema } "
},
{
"path": "apps/api/src/api-key/dto/api-key-response.dto.ts",
"chars": 1341,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ApiProperty, ApiSchema } "
},
{
"path": "apps/api/src/api-key/dto/create-api-key.dto.ts",
"chars": 1166,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { IsArray, IsDate, IsEnum, "
},
{
"path": "apps/api/src/app.module.ts",
"chars": 8781,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Module, NestModule, Middl"
},
{
"path": "apps/api/src/app.service.ts",
"chars": 12995,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, Logger, OnApp"
},
{
"path": "apps/api/src/assets/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "apps/api/src/assets/templates/organization-invitation.template.ejs",
"chars": 18858,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scal"
},
{
"path": "apps/api/src/audit/adapters/audit-opensearch.adapter.ts",
"chars": 15663,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { BadRequestException, Logg"
},
{
"path": "apps/api/src/audit/adapters/audit-typeorm.adapter.ts",
"chars": 2192,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Logger } from '@nestjs/co"
},
{
"path": "apps/api/src/audit/audit.module.ts",
"chars": 2386,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Module } from '@nestjs/co"
},
{
"path": "apps/api/src/audit/constants/audit-log-events.constant.ts",
"chars": 193,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport const AuditLogEvents = {\n "
},
{
"path": "apps/api/src/audit/constants/audit-tokens.ts",
"chars": 307,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport const AUDIT_STORAGE_ADAPTER"
},
{
"path": "apps/api/src/audit/controllers/audit.controller.ts",
"chars": 3390,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Controller, Get, Param, Q"
},
{
"path": "apps/api/src/audit/decorators/audit.decorator.ts",
"chars": 807,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { SetMetadata } from '@nest"
},
{
"path": "apps/api/src/audit/dto/audit-log.dto.ts",
"chars": 1559,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ApiProperty, ApiPropertyO"
},
{
"path": "apps/api/src/audit/dto/create-audit-log-internal.dto.ts",
"chars": 578,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { AuditLogMetadata } from '"
},
{
"path": "apps/api/src/audit/dto/create-audit-log.dto.ts",
"chars": 821,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ApiProperty, ApiPropertyO"
},
{
"path": "apps/api/src/audit/dto/list-audit-logs-query.dto.ts",
"chars": 1089,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ApiPropertyOptional, ApiS"
},
{
"path": "apps/api/src/audit/dto/paginated-audit-logs.dto.ts",
"chars": 562,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ApiProperty, ApiSchema } "
},
{
"path": "apps/api/src/audit/dto/update-audit-log-internal.dto.ts",
"chars": 221,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport class UpdateAuditLogInterna"
},
{
"path": "apps/api/src/audit/entities/audit-log.entity.ts",
"chars": 2012,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Entity, PrimaryGeneratedC"
},
{
"path": "apps/api/src/audit/enums/audit-action.enum.ts",
"chars": 3168,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport enum AuditAction {\n CREATE"
},
{
"path": "apps/api/src/audit/enums/audit-target.enum.ts",
"chars": 478,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport enum AuditTarget {\n API_KE"
},
{
"path": "apps/api/src/audit/events/audit-log-created.event.ts",
"chars": 234,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { AuditLog } from '../entit"
},
{
"path": "apps/api/src/audit/events/audit-log-updated.event.ts",
"chars": 234,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { AuditLog } from '../entit"
},
{
"path": "apps/api/src/audit/interceptors/audit.interceptor.ts",
"chars": 6637,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport {\n Injectable,\n NestInter"
},
{
"path": "apps/api/src/audit/interfaces/audit-filter.interface.ts",
"chars": 148,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport interface AuditLogFilter {\n"
},
{
"path": "apps/api/src/audit/interfaces/audit-publisher.interface.ts",
"chars": 353,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { AuditLog } from '../entit"
},
{
"path": "apps/api/src/audit/interfaces/audit-storage.interface.ts",
"chars": 1477,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { AuditLog } from '../entit"
},
{
"path": "apps/api/src/audit/providers/audit-publisher.provider.ts",
"chars": 1547,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Provider } from '@nestjs/"
},
{
"path": "apps/api/src/audit/providers/audit-storage.provider.ts",
"chars": 1524,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Provider } from '@nestjs/"
},
{
"path": "apps/api/src/audit/publishers/audit-direct-publisher.ts",
"chars": 1055,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, Logger, Injec"
},
{
"path": "apps/api/src/audit/publishers/kafka/audit-kafka-consumer.controller.ts",
"chars": 1276,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Controller, Inject, Logge"
},
{
"path": "apps/api/src/audit/publishers/kafka/audit-kafka-publisher.ts",
"chars": 1380,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Logger, OnModuleInit } fr"
},
{
"path": "apps/api/src/audit/services/audit.service.ts",
"chars": 6970,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Inject, Injectable, Logge"
},
{
"path": "apps/api/src/audit/subscribers/audit-log.subscriber.ts",
"chars": 1172,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ForbiddenException, Injec"
},
{
"path": "apps/api/src/auth/api-key.strategy.ts",
"chars": 7557,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, UnauthorizedE"
},
{
"path": "apps/api/src/auth/auth.module.ts",
"chars": 2788,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Module } from '@nestjs/co"
},
{
"path": "apps/api/src/auth/combined-auth.guard.ts",
"chars": 907,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, Logger, Unaut"
},
{
"path": "apps/api/src/auth/constants/jwt-regex.constant.ts",
"chars": 508,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\n/**\n * Matches the structure of a JWT t"
},
{
"path": "apps/api/src/auth/failed-auth-tracker.service.ts",
"chars": 2908,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, Inject, Logge"
},
{
"path": "apps/api/src/auth/get-auth-context.ts",
"chars": 571,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ExecutionContext, Unautho"
},
{
"path": "apps/api/src/auth/health-check.guard.ts",
"chars": 623,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, ExecutionContext, "
},
{
"path": "apps/api/src/auth/jwt.strategy.ts",
"chars": 3535,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, Logger } from"
},
{
"path": "apps/api/src/auth/or.guard.ts",
"chars": 1407,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, ExecutionCont"
},
{
"path": "apps/api/src/auth/otel-collector.guard.ts",
"chars": 635,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, ExecutionContext, "
},
{
"path": "apps/api/src/auth/runner-auth.guard.ts",
"chars": 602,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, CanActivate, "
},
{
"path": "apps/api/src/auth/system-action.guard.ts",
"chars": 1476,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, ExecutionCont"
},
{
"path": "apps/api/src/clickhouse/clickhouse.module.ts",
"chars": 309,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Module, Global } from '@nestjs"
},
{
"path": "apps/api/src/clickhouse/clickhouse.service.ts",
"chars": 1928,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, Logger, OnModuleDe"
},
{
"path": "apps/api/src/clickhouse/index.ts",
"chars": 154,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport * from './clickhouse.module'\nexp"
},
{
"path": "apps/api/src/common/constants/constants.ts",
"chars": 147,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport const SANDBOX_EVENT_CHANNEL"
},
{
"path": "apps/api/src/common/constants/error-messages.ts",
"chars": 525,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport const UPGRADE_TIER_MESSAGE "
},
{
"path": "apps/api/src/common/constants/feature-flags.ts",
"chars": 225,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport const FeatureFlags = {\n OR"
},
{
"path": "apps/api/src/common/constants/header.constants.ts",
"chars": 797,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport const CustomHeaders: {\n [k"
},
{
"path": "apps/api/src/common/decorators/auth-context.decorator.ts",
"chars": 326,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { createParamDecorator, Exe"
},
{
"path": "apps/api/src/common/decorators/autocommit-offset.decorator.ts",
"chars": 1231,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { KafkaContext } from '@nes"
},
{
"path": "apps/api/src/common/decorators/distributed-lock.decorator.ts",
"chars": 1661,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { RedisLockProvider } from "
},
{
"path": "apps/api/src/common/decorators/log-execution.decorator.ts",
"chars": 1442,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Logger } from '@nestjs/co"
},
{
"path": "apps/api/src/common/decorators/on-async-event.decorator.ts",
"chars": 339,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { OnEvent, OnEventMetadata "
},
{
"path": "apps/api/src/common/decorators/otel.decorator.ts",
"chars": 6382,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { trace, context, metrics, "
},
{
"path": "apps/api/src/common/decorators/page-limit.decorator.ts",
"chars": 652,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { applyDecorators } from '@"
},
{
"path": "apps/api/src/common/decorators/page-number.decorator.ts",
"chars": 611,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { applyDecorators } from '@"
},
{
"path": "apps/api/src/common/decorators/required-role.decorator.ts",
"chars": 423,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Reflector } from '@nestjs"
},
{
"path": "apps/api/src/common/decorators/runner-context.decorator.ts",
"chars": 440,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { createParamDecorator, Exe"
},
{
"path": "apps/api/src/common/decorators/throttler-scope.decorator.ts",
"chars": 751,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { SetMetadata } from '@nest"
},
{
"path": "apps/api/src/common/decorators/to-array.decorator.ts",
"chars": 545,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Transform } from 'class-t"
},
{
"path": "apps/api/src/common/decorators/track-job-execution.decorator.ts",
"chars": 746,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\n/**\n * Track job execution in acti"
},
{
"path": "apps/api/src/common/dto/url.dto.ts",
"chars": 375,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ApiProperty, ApiSchema } "
},
{
"path": "apps/api/src/common/guards/anonymous-rate-limit.guard.ts",
"chars": 1497,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, ExecutionCont"
},
{
"path": "apps/api/src/common/guards/authenticated-rate-limit.guard.ts",
"chars": 7303,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, Logger, Injec"
},
{
"path": "apps/api/src/common/interceptors/content-type.interceptors.ts",
"chars": 1804,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, NestIntercept"
},
{
"path": "apps/api/src/common/interfaces/auth-context.interface.ts",
"chars": 1838,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ApiKey } from '../../api-"
},
{
"path": "apps/api/src/common/interfaces/health-check-context.interface.ts",
"chars": 377,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { BaseAuthContext } from './auth"
},
{
"path": "apps/api/src/common/interfaces/otel-collector-context.interface.ts",
"chars": 387,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { BaseAuthContext } from './auth"
},
{
"path": "apps/api/src/common/interfaces/otel-config.interface.ts",
"chars": 185,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport interface OTELConfig {\n enabled"
},
{
"path": "apps/api/src/common/interfaces/paginated-list.interface.ts",
"chars": 210,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport interface PaginatedList<T> "
},
{
"path": "apps/api/src/common/interfaces/proxy-context.interface.ts",
"chars": 350,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { BaseAuthContext } from '."
},
{
"path": "apps/api/src/common/interfaces/region-proxy.interface.ts",
"chars": 401,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { BaseAuthContext } from '."
},
{
"path": "apps/api/src/common/interfaces/region-ssh-gateway.interface.ts",
"chars": 428,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { BaseAuthContext } from '."
},
{
"path": "apps/api/src/common/interfaces/runner-context.interface.ts",
"chars": 453,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { BaseAuthContext } from '."
},
{
"path": "apps/api/src/common/interfaces/ssh-gateway-context.interface.ts",
"chars": 377,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { BaseAuthContext } from '."
},
{
"path": "apps/api/src/common/interfaces/trackable-job-executions.ts",
"chars": 156,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport interface TrackableJobExecu"
},
{
"path": "apps/api/src/common/middleware/failed-auth-rate-limit.middleware.ts",
"chars": 3009,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, NestMiddlewar"
},
{
"path": "apps/api/src/common/middleware/maintenance.middleware.ts",
"chars": 913,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, NestMiddlewar"
},
{
"path": "apps/api/src/common/middleware/version-header.middleware.ts",
"chars": 697,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, NestMiddlewar"
},
{
"path": "apps/api/src/common/modules/body-parser-error.module.ts",
"chars": 827,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Module, OnModuleInit, Bad"
},
{
"path": "apps/api/src/common/providers/openfeature-posthog.provider.ts",
"chars": 7205,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport type { EvaluationContext, P"
},
{
"path": "apps/api/src/common/repositories/base.repository.ts",
"chars": 4206,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport {\n Repository,\n DataSource,\n "
},
{
"path": "apps/api/src/common/utils/api-key.ts",
"chars": 455,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport * as crypto from 'crypto'\n\n"
},
{
"path": "apps/api/src/common/utils/app-mode.ts",
"chars": 788,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\ntype AppMode = 'api' | 'worker' | "
},
{
"path": "apps/api/src/common/utils/delete-s3-bucket.ts",
"chars": 1925,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport {\n S3Client,\n ListObjects"
},
{
"path": "apps/api/src/common/utils/docker-image.util.ts",
"chars": 5371,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\n/**\n * Interface representing pars"
},
{
"path": "apps/api/src/common/utils/email.util.ts",
"chars": 327,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport class EmailUtils {\n static"
},
{
"path": "apps/api/src/common/utils/from-axios-error.ts",
"chars": 240,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport function fromAxiosError(err"
},
{
"path": "apps/api/src/common/utils/naming-strategy.util.ts",
"chars": 1309,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { DefaultNamingStrategy, Na"
},
{
"path": "apps/api/src/common/utils/pino.util.ts",
"chars": 3676,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport pino, { TransportSingleOpti"
},
{
"path": "apps/api/src/common/utils/range-filter.ts",
"chars": 750,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { MoreThanOrEqual, LessThan"
},
{
"path": "apps/api/src/common/utils/rate-limit-headers.util.ts",
"chars": 1067,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Response } from 'express'"
},
{
"path": "apps/api/src/common/utils/uuid.ts",
"chars": 229,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport function isValidUuid(value:"
},
{
"path": "apps/api/src/config/config.controller.ts",
"chars": 702,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Controller, Get } from '@"
},
{
"path": "apps/api/src/config/configuration.ts",
"chars": 14805,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nconst configuration = {\n producti"
},
{
"path": "apps/api/src/config/dto/configuration.dto.ts",
"chars": 7623,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ApiExtraModels, ApiProper"
},
{
"path": "apps/api/src/config/typed-config.module.ts",
"chars": 980,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Global, Module, DynamicMo"
},
{
"path": "apps/api/src/config/typed-config.service.ts",
"chars": 5872,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ConfigService } from '@ne"
},
{
"path": "apps/api/src/docker-registry/controllers/docker-registry.controller.ts",
"chars": 9103,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport {\n Controller,\n Get,\n Po"
},
{
"path": "apps/api/src/docker-registry/decorators/docker-registry.decorator.ts",
"chars": 339,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { createParamDecorator, Exe"
},
{
"path": "apps/api/src/docker-registry/docker-registry.module.ts",
"chars": 1113,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Module } from '@nestjs/co"
},
{
"path": "apps/api/src/docker-registry/dto/create-docker-registry-internal.dto.ts",
"chars": 359,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { RegistryType } from '../e"
},
{
"path": "apps/api/src/docker-registry/dto/create-docker-registry.dto.ts",
"chars": 1143,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { IsString, IsUrl, IsEnum, "
},
{
"path": "apps/api/src/docker-registry/dto/docker-registry.dto.ts",
"chars": 1752,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ApiProperty, ApiSchema } "
},
{
"path": "apps/api/src/docker-registry/dto/update-docker-registry.dto.ts",
"chars": 774,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { IsString, IsOptional, IsU"
},
{
"path": "apps/api/src/docker-registry/entities/docker-registry.entity.ts",
"chars": 1169,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { RegistryType } from './.."
},
{
"path": "apps/api/src/docker-registry/enums/registry-type.enum.ts",
"chars": 252,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport enum RegistryType {\n INTER"
},
{
"path": "apps/api/src/docker-registry/guards/docker-registry-access.guard.ts",
"chars": 1818,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, CanActivate, "
},
{
"path": "apps/api/src/docker-registry/providers/docker-registry.provider.interface.ts",
"chars": 767,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport const DOCKER_REGISTRY_PROVI"
},
{
"path": "apps/api/src/docker-registry/providers/docker-registry.provider.ts",
"chars": 1573,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable } from '@nestj"
},
{
"path": "apps/api/src/docker-registry/providers/mock-docker-registry.provider.ts",
"chars": 473,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { IDockerRegistryProvider }"
},
{
"path": "apps/api/src/docker-registry/services/docker-registry.service.ts",
"chars": 32416,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { ForbiddenException, Injec"
},
{
"path": "apps/api/src/email/constants.ts",
"chars": 145,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nexport const EMAIL_MODULE_OPTIONS "
},
{
"path": "apps/api/src/email/email.module.ts",
"chars": 1174,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { DynamicModule, Module } f"
},
{
"path": "apps/api/src/email/services/email.service.ts",
"chars": 2471,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Inject, Injectable, Logge"
},
{
"path": "apps/api/src/encryption/encryption.module.ts",
"chars": 291,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Module } from '@nestjs/common'"
},
{
"path": "apps/api/src/encryption/encryption.service.ts",
"chars": 2385,
"preview": "/*\n * Copyright Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Injectable, Logger } from '@ne"
},
{
"path": "apps/api/src/exceptions/bad-request.exception.ts",
"chars": 281,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { HttpException, HttpStatus"
},
{
"path": "apps/api/src/exceptions/forbidden-operation.exception.ts",
"chars": 287,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { HttpException, HttpStatus"
},
{
"path": "apps/api/src/exceptions/not-found.exception.ts",
"chars": 285,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { HttpException, HttpStatus"
},
{
"path": "apps/api/src/exceptions/sandbox-error.exception.ts",
"chars": 278,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { HttpException, HttpStatus"
},
{
"path": "apps/api/src/filters/all-exceptions.filter.ts",
"chars": 2504,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { join } from 'node:path'\ni"
},
{
"path": "apps/api/src/filters/kafka-exception.filter.ts",
"chars": 4763,
"preview": "/*\n * Copyright 2025 Daytona Platforms Inc.\n * SPDX-License-Identifier: AGPL-3.0\n */\n\nimport { Catch, ArgumentsHost, Log"
}
]
// ... and 3749 more files (download for full content)
About this extraction
This page contains the full source code of the daytonaio/daytona GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3949 files (27.7 MB), approximately 4.2M tokens, and a symbol index with 14266 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.