├── .devcontainer ├── Dockerfile ├── devcontainer.json ├── dex │ └── config.yaml ├── docker-compose.yaml ├── pgadmin4 │ ├── pgpass │ └── servers.json └── tools-feature │ ├── devcontainer-feature.json │ └── install.sh ├── .editorconfig ├── .env ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── pull_request_template.md └── workflows │ └── pr_checks.yaml ├── .gitignore ├── .golangci.yaml ├── .husky ├── .gitignore ├── pre-commit └── pre-commit-sdk-py-sync-check.sh ├── .licenserc.yaml ├── .markdownlint-cli2.jsonc ├── .nxignore ├── .prettierignore ├── .prettierrc ├── .verdaccio └── config.yml ├── .vscode ├── launch.json └── tasks.json ├── .yarnrc.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── COPYRIGHT ├── LICENSE ├── NOTICE ├── PACKAGING.md ├── PREPARING_YOUR_CHANGES.md ├── README.md ├── SECURITY.md ├── apps ├── api │ ├── .env │ ├── Dockerfile │ ├── eslint.config.mjs │ ├── jest.config.ts │ ├── project.json │ ├── src │ │ ├── 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 │ │ ├── auth │ │ │ ├── api-key.strategy.ts │ │ │ ├── auth.module.ts │ │ │ ├── combined-auth.guard.ts │ │ │ ├── jwt.strategy.ts │ │ │ └── system-action.guard.ts │ │ ├── common │ │ │ ├── constants │ │ │ │ ├── default-organization-quota.ts │ │ │ │ └── header.constants.ts │ │ │ ├── decorators │ │ │ │ ├── auth-context.decorator.ts │ │ │ │ ├── on-async-event.decorator.ts │ │ │ │ ├── required-system-role.decorator.ts │ │ │ │ └── user.decorator.ts │ │ │ ├── interceptors │ │ │ │ └── content-type.interceptors.ts │ │ │ ├── interfaces │ │ │ │ └── auth-context.interface.ts │ │ │ ├── middleware │ │ │ │ ├── frontend.middleware.ts │ │ │ │ └── version-header.middleware.ts │ │ │ └── utils │ │ │ │ ├── delete-s3-bucket.ts │ │ │ │ ├── from-axios-error.ts │ │ │ │ └── naming-strategy.util.ts │ │ ├── config │ │ │ ├── configuration.ts │ │ │ ├── typed-config.module.ts │ │ │ └── typed-config.service.ts │ │ ├── data-source.ts │ │ ├── docker-registry │ │ │ ├── controllers │ │ │ │ └── docker-registry.controller.ts │ │ │ ├── decorators │ │ │ │ └── docker-registry.decorator.ts │ │ │ ├── docker-registry.module.ts │ │ │ ├── dto │ │ │ │ ├── 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 │ │ ├── exceptions │ │ │ ├── bad-request.exception.ts │ │ │ ├── forbidden-operation.exception.ts │ │ │ ├── not-found.exception.ts │ │ │ └── workspace-error.exception.ts │ │ ├── filters │ │ │ └── all-exceptions.filter.ts │ │ ├── generate-openapi.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 │ │ ├── notification │ │ │ ├── gateways │ │ │ │ └── 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.config.ts │ │ ├── organization │ │ │ ├── constants │ │ │ │ ├── global-organization-roles.constant.ts │ │ │ │ └── organization-events.constant.ts │ │ │ ├── controllers │ │ │ │ ├── organization-invitation.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 │ │ │ │ ├── organization-invitation.dto.ts │ │ │ │ ├── organization-role.dto.ts │ │ │ │ ├── organization-suspension.dto.ts │ │ │ │ ├── organization-user.dto.ts │ │ │ │ ├── organization.dto.ts │ │ │ │ ├── overview.dto.ts │ │ │ │ ├── update-assigned-organization-roles.dto.ts │ │ │ │ ├── update-organization-invitation.dto.ts │ │ │ │ ├── update-organization-member-role.dto.ts │ │ │ │ ├── update-organization-quota.dto.ts │ │ │ │ └── update-organization-role.dto.ts │ │ │ ├── entities │ │ │ │ ├── organization-invitation.entity.ts │ │ │ │ ├── organization-role.entity.ts │ │ │ │ ├── organization-user.entity.ts │ │ │ │ └── organization.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-suspended-workspace-stopped.event.ts │ │ │ ├── guards │ │ │ │ ├── organization-access.guard.ts │ │ │ │ ├── organization-action.guard.ts │ │ │ │ └── organization-resource-action.guard.ts │ │ │ ├── organization.module.ts │ │ │ └── services │ │ │ │ ├── organization-invitation.service.ts │ │ │ │ ├── organization-role.service.ts │ │ │ │ ├── organization-user.service.ts │ │ │ │ └── organization.service.ts │ │ ├── team │ │ │ ├── dto │ │ │ │ └── create-team.dto.ts │ │ │ ├── team.entity.spec.ts │ │ │ ├── team.entity.ts │ │ │ ├── team.module.ts │ │ │ ├── team.service.spec.ts │ │ │ └── team.service.ts │ │ ├── usage │ │ │ ├── entities │ │ │ │ └── workspace-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-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.spec.ts │ │ │ ├── user.controller.ts │ │ │ ├── user.entity.spec.ts │ │ │ ├── user.entity.ts │ │ │ ├── user.module.ts │ │ │ ├── user.service.spec.ts │ │ │ └── user.service.ts │ │ └── workspace │ │ │ ├── common │ │ │ └── redis-lock.provider.ts │ │ │ ├── constants │ │ │ ├── image-events.ts │ │ │ ├── volume-events.ts │ │ │ ├── warmpool-events.constants.ts │ │ │ ├── workspace-events.constants.ts │ │ │ └── workspace.constants.ts │ │ │ ├── controllers │ │ │ ├── image.controller.ts │ │ │ ├── node.controller.spec.ts │ │ │ ├── node.controller.ts │ │ │ ├── preview.controller.ts │ │ │ ├── toolbox.controller.ts │ │ │ ├── volume.controller.ts │ │ │ ├── workspace.controller.spec.ts │ │ │ └── workspace.controller.ts │ │ │ ├── decorators │ │ │ └── workspace.decorator.ts │ │ │ ├── docker │ │ │ └── docker-provider.ts │ │ │ ├── dto │ │ │ ├── build-image.dto.ts │ │ │ ├── build-info.dto.ts │ │ │ ├── create-build-info.dto.ts │ │ │ ├── create-image.dto.ts │ │ │ ├── create-node.dto.ts │ │ │ ├── create-volume.dto.ts │ │ │ ├── create-workspace.dto.ts │ │ │ ├── image.dto.ts │ │ │ ├── lsp.dto.ts │ │ │ ├── paginated-images.dto.ts │ │ │ ├── port-preview-url.dto.ts │ │ │ ├── registry-push-access-dto.ts │ │ │ ├── resize.dto.ts │ │ │ ├── session.dto.ts │ │ │ ├── storage-access-dto.ts │ │ │ ├── toggle-state.dto.ts │ │ │ ├── toolbox.dto.ts │ │ │ ├── update-image.dto.ts │ │ │ ├── upload-file.dto.ts │ │ │ ├── volume.dto.ts │ │ │ ├── workspace.dto.ts │ │ │ └── workspace.dto.ts.old │ │ │ ├── entities │ │ │ ├── build-info.entity.ts │ │ │ ├── image-node.entity.ts │ │ │ ├── image.entity.ts │ │ │ ├── node.entity.spec.ts │ │ │ ├── node.entity.ts │ │ │ ├── volume.entity.spec.ts │ │ │ ├── volume.entity.ts │ │ │ ├── warm-pool.entity.ts │ │ │ ├── workspace.entity.spec.ts │ │ │ └── workspace.entity.ts │ │ │ ├── enums │ │ │ ├── image-node-state.enum.ts │ │ │ ├── image-state.enum.ts │ │ │ ├── node-region.enum.ts │ │ │ ├── node-state.enum.ts │ │ │ ├── snapshot-state.enum.ts │ │ │ ├── volume-state.enum.ts │ │ │ ├── workspace-class.enum.ts │ │ │ ├── workspace-desired-state.enum.ts │ │ │ └── workspace-state.enum.ts │ │ │ ├── errors │ │ │ └── node-not-ready.error.ts │ │ │ ├── events │ │ │ ├── image-created.event.ts │ │ │ ├── image-enabled-toggled.event.ts │ │ │ ├── image-removed.event.ts │ │ │ ├── image-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 │ │ │ ├── workspace-archived.event.ts │ │ │ ├── workspace-create.event.ts │ │ │ ├── workspace-desired-state-updated.event.ts │ │ │ ├── workspace-destroyed.event.ts │ │ │ ├── workspace-organization-updated.event.ts │ │ │ ├── workspace-public-status-updated.event.ts │ │ │ ├── workspace-snapshot-created.event.ts │ │ │ ├── workspace-started.event.ts │ │ │ ├── workspace-state-updated.event.ts │ │ │ └── workspace-stopped.event.ts │ │ │ ├── guards │ │ │ ├── image-access.guard.ts │ │ │ └── workspace-access.guard.ts │ │ │ ├── managers │ │ │ ├── image.manager.ts │ │ │ ├── snapshot.manager.ts │ │ │ ├── volume.manager.ts │ │ │ └── workspace.manager.ts │ │ │ ├── middleware │ │ │ ├── raw-request.middleware.ts │ │ │ └── request-logger.middleware.ts │ │ │ ├── provisioner │ │ │ └── workspace.provisioner.ts │ │ │ ├── proxy │ │ │ └── log-proxy.ts │ │ │ ├── runner-api │ │ │ └── runnerApi.ts │ │ │ ├── services │ │ │ ├── image.service.ts │ │ │ ├── node.service.spec.ts │ │ │ ├── node.service.ts │ │ │ ├── toolbox.service.ts │ │ │ ├── volume.service.ts │ │ │ ├── workspace-warm-pool.service.ts │ │ │ ├── workspace.service.spec.ts │ │ │ └── workspace.service.ts │ │ │ ├── subscribers │ │ │ ├── image.subscriber.ts │ │ │ ├── volume.subscriber.ts │ │ │ └── workspace.subscriber.ts │ │ │ └── workspace.module.ts │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.spec.json │ └── webpack.config.js ├── cli │ ├── .env.example │ ├── 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 │ │ │ ├── state.go │ │ │ └── validate.go │ │ ├── docs.go │ │ ├── generatedocs.go │ │ ├── image │ │ │ ├── build.go │ │ │ ├── create.go │ │ │ ├── delete.go │ │ │ ├── image.go │ │ │ ├── list.go │ │ │ └── push.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 │ │ │ ├── create.go │ │ │ ├── delete.go │ │ │ ├── info.go │ │ │ ├── list.go │ │ │ ├── sandbox.go │ │ │ ├── start.go │ │ │ └── stop.go │ │ ├── version.go │ │ └── volume │ │ │ ├── create.go │ │ │ ├── delete.go │ │ │ ├── get.go │ │ │ ├── list.go │ │ │ └── volume.go │ ├── config │ │ └── config.go │ ├── docker │ │ └── build.go │ ├── docs │ │ ├── daytona.md │ │ ├── daytona_autocomplete.md │ │ ├── daytona_docs.md │ │ ├── daytona_image.md │ │ ├── daytona_image_build.md │ │ ├── daytona_image_create.md │ │ ├── daytona_image_delete.md │ │ ├── daytona_image_list.md │ │ ├── daytona_image_push.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_sandbox.md │ │ ├── daytona_sandbox_create.md │ │ ├── daytona_sandbox_delete.md │ │ ├── daytona_sandbox_info.md │ │ ├── daytona_sandbox_list.md │ │ ├── daytona_sandbox_start.md │ │ ├── daytona_sandbox_stop.md │ │ └── daytona_version.md │ ├── go.mod │ ├── go.sum │ ├── hack │ │ ├── build.sh │ │ ├── docs │ │ │ ├── daytona.yaml │ │ │ ├── daytona_autocomplete.yaml │ │ │ ├── daytona_docs.yaml │ │ │ ├── daytona_image.yaml │ │ │ ├── daytona_image_build.yaml │ │ │ ├── daytona_image_create.yaml │ │ │ ├── daytona_image_delete.yaml │ │ │ ├── daytona_image_list.yaml │ │ │ ├── daytona_image_push.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_sandbox.yaml │ │ │ ├── daytona_sandbox_create.yaml │ │ │ ├── daytona_sandbox_delete.yaml │ │ │ ├── daytona_sandbox_info.yaml │ │ │ ├── daytona_sandbox_list.yaml │ │ │ ├── daytona_sandbox_start.yaml │ │ │ ├── daytona_sandbox_stop.yaml │ │ │ └── daytona_version.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 │ ├── util │ │ └── pointer.go │ └── views │ │ ├── common │ │ ├── common.go │ │ ├── prompt.go │ │ ├── select.go │ │ └── styles.go │ │ ├── image │ │ ├── info.go │ │ └── list.go │ │ ├── organization │ │ ├── info.go │ │ ├── list.go │ │ └── select.go │ │ ├── sandbox │ │ ├── info.go │ │ └── list.go │ │ ├── util │ │ ├── empty_list.go │ │ ├── info.go │ │ ├── spinner.go │ │ ├── table.go │ │ └── time.go │ │ └── volume │ │ ├── info.go │ │ └── list.go ├── daemon │ ├── .env.production │ ├── .gitignore │ ├── cmd │ │ └── daemon │ │ │ ├── config │ │ │ ├── config.go │ │ │ └── log.go │ │ │ └── main.go │ ├── go.mod │ ├── go.sum │ ├── internal │ │ ├── buildinfo.go │ │ └── util │ │ │ ├── log_reader.go │ │ │ ├── pointer.go │ │ │ └── workspace.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 │ │ ├── ssh │ │ │ ├── config │ │ │ │ └── config.go │ │ │ ├── server.go │ │ │ └── unix_forward.go │ │ ├── terminal │ │ │ ├── assets.go │ │ │ ├── server.go │ │ │ └── static │ │ │ │ └── index.html │ │ └── toolbox │ │ │ ├── config │ │ │ └── config.go │ │ │ ├── fs │ │ │ ├── create_folder.go │ │ │ ├── delete_file.go │ │ │ ├── download_file.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 │ │ │ └── logging.go │ │ │ ├── port │ │ │ ├── detector.go │ │ │ └── types.go │ │ │ ├── process │ │ │ ├── execute.go │ │ │ ├── session │ │ │ │ ├── controller.go │ │ │ │ ├── execute.go │ │ │ │ ├── log.go │ │ │ │ ├── session.go │ │ │ │ └── types.go │ │ │ └── types.go │ │ │ ├── toolbox.go │ │ │ └── validator.go │ ├── project.json │ └── tools │ │ └── xterm.go ├── dashboard │ ├── .env │ ├── eslint.config.mjs │ ├── index.html │ ├── postcss.config.js │ ├── project.json │ ├── public │ │ └── favicon.ico │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── api │ │ │ ├── apiClient.ts │ │ │ └── errors.ts │ │ ├── assets │ │ │ ├── bbox-logo-dark.png │ │ │ ├── bbox-logo-light.png │ │ │ ├── daytona-full-black.png │ │ │ ├── daytona-full-white.png │ │ │ ├── daytona-logo-black.png │ │ │ ├── daytona-logo-white.png │ │ │ ├── python.svg │ │ │ ├── react.svg │ │ │ └── typescript.svg │ │ ├── auth │ │ │ └── oidc-config.ts │ │ ├── billing-api │ │ │ ├── billingApiClient.ts │ │ │ └── types │ │ │ │ ├── OrganizationUsage.ts │ │ │ │ └── OrganizationWallet.ts │ │ ├── components │ │ │ ├── AccountProviderIcon.tsx │ │ │ ├── ApiKeyTable.tsx │ │ │ ├── CodeBlock.tsx │ │ │ ├── CreateApiKeyDialog.tsx │ │ │ ├── DebouncedInput.tsx │ │ │ ├── ImageTable.tsx │ │ │ ├── LoadingFallback.tsx │ │ │ ├── OrganizationMembers │ │ │ │ ├── CancelOrganizationInvitationDialog.tsx │ │ │ │ ├── CreateOrganizationInvitationDialog.tsx │ │ │ │ ├── OrganizationInvitationTable.tsx │ │ │ │ ├── OrganizationMemberTable.tsx │ │ │ │ ├── RemoveOrganizationMemberDialog.tsx │ │ │ │ ├── UpdateAssignedOrganizationRolesDialog.tsx │ │ │ │ ├── UpdateOrganizationInvitationDialog.tsx │ │ │ │ ├── UpdateOrganizationMemberRoleDialog.tsx │ │ │ │ └── ViewerOrganizationRoleCheckbox.tsx │ │ │ ├── OrganizationRoles │ │ │ │ ├── CreateOrganizationRoleDialog.tsx │ │ │ │ ├── DeleteOrganizationRoleDialog.tsx │ │ │ │ ├── OrganizationRoleTable.tsx │ │ │ │ └── UpdateOrganizationRoleDialog.tsx │ │ │ ├── Organizations │ │ │ │ ├── CreateOrganizationDialog.tsx │ │ │ │ ├── DeleteOrganizationDialog.tsx │ │ │ │ ├── LeaveOrganizationDialog.tsx │ │ │ │ └── OrganizationPicker.tsx │ │ │ ├── Pagination.tsx │ │ │ ├── PostHogProviderWrapper.tsx │ │ │ ├── QuotaLine.tsx │ │ │ ├── RegistryTable.tsx │ │ │ ├── Sidebar.tsx │ │ │ ├── TableEmptyState.tsx │ │ │ ├── TierTable.tsx │ │ │ ├── Tooltip.tsx │ │ │ ├── UsageChart.tsx │ │ │ ├── UserOrganizationInvitations │ │ │ │ ├── DeclineOrganizationInvitationDialog.tsx │ │ │ │ ├── OrganizationInvitationActionDialog.tsx │ │ │ │ └── UserOrganizationInvitationTable.tsx │ │ │ ├── VerifyEmailDialog.tsx │ │ │ ├── VolumeTable.tsx │ │ │ ├── WorkspaceTable.tsx │ │ │ └── ui │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── chart.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── data-table-faceted-filter.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ ├── facet-filter.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── radio-group.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── sheet.tsx │ │ │ │ ├── sidebar.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── sonner.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ └── tooltip.tsx │ │ ├── constants │ │ │ ├── CreateApiKeyPermissionsGroups.ts │ │ │ ├── ExternalLinks.ts │ │ │ ├── OrganizationPermissionsGroups.ts │ │ │ └── Pagination.ts │ │ ├── contexts │ │ │ ├── ApiContext.tsx │ │ │ ├── NotificationSocketContext.tsx │ │ │ ├── OrganizationsContext.tsx │ │ │ ├── SelectedOrganizationContext.tsx │ │ │ ├── ThemeContext.tsx │ │ │ └── UserOrganizationInvitationsContext.tsx │ │ ├── enums │ │ │ ├── LocalStorageKey.ts │ │ │ └── RoutePath.ts │ │ ├── hooks │ │ │ ├── use-mobile.tsx │ │ │ ├── useApi.tsx │ │ │ ├── useNotificationSocket.ts │ │ │ ├── useOrganizationRoles.ts │ │ │ ├── useOrganizations.ts │ │ │ ├── useSelectedOrganization.ts │ │ │ └── useUserOrganizationInvitations.ts │ │ ├── index.css │ │ ├── lib │ │ │ ├── error-handling.ts │ │ │ ├── local-storage.ts │ │ │ └── utils.ts │ │ ├── main.tsx │ │ ├── pages │ │ │ ├── Billing.tsx │ │ │ ├── Callback.tsx │ │ │ ├── Dashboard.tsx │ │ │ ├── Images.tsx │ │ │ ├── Keys.tsx │ │ │ ├── LandingPage.tsx │ │ │ ├── Limits.tsx │ │ │ ├── LinkedAccounts.tsx │ │ │ ├── Logout.tsx │ │ │ ├── NotFound.tsx │ │ │ ├── Onboarding.tsx │ │ │ ├── OrganizationMembers.tsx │ │ │ ├── OrganizationRoles.tsx │ │ │ ├── OrganizationSettings.tsx │ │ │ ├── Registries.tsx │ │ │ ├── UserOrganizationInvitations.tsx │ │ │ ├── Volumes.tsx │ │ │ └── Workspaces.tsx │ │ ├── providers │ │ │ ├── ApiProvider.tsx │ │ │ ├── NotificationSocketProvider.tsx │ │ │ ├── OrganizationsProvider.tsx │ │ │ ├── SelectedOrganizationProvider.tsx │ │ │ └── UserOrganizationInvitationsProvider.tsx │ │ ├── types │ │ │ ├── CreateApiKeyPermissionGroup.ts │ │ │ ├── OrganizationRolePermissionGroup.ts │ │ │ └── workspace.ts │ │ └── vite-env.d.ts │ ├── tailwind.config.js │ ├── tsconfig.app.json │ ├── tsconfig.json │ └── vite.config.mts ├── daytona-e2e │ ├── eslint.config.mjs │ ├── jest.config.ts │ ├── project.json │ ├── src │ │ ├── daytona │ │ │ └── daytona.spec.ts │ │ └── support │ │ │ ├── global-setup.ts │ │ │ ├── global-teardown.ts │ │ │ └── test-setup.ts │ ├── tsconfig.json │ └── tsconfig.spec.json ├── docs │ ├── content │ │ ├── sdk-python │ │ │ ├── charts.mdx │ │ │ ├── daytona.mdx │ │ │ ├── errors.mdx │ │ │ ├── file-system.mdx │ │ │ ├── git.mdx │ │ │ ├── index.mdx │ │ │ ├── lsp-server.mdx │ │ │ ├── process.mdx │ │ │ ├── sandbox.mdx │ │ │ └── volume.mdx │ │ └── sdk-typescript │ │ │ ├── charts.mdx │ │ │ ├── daytona.mdx │ │ │ ├── errors.mdx │ │ │ ├── execute-response.mdx │ │ │ ├── file-system.mdx │ │ │ ├── git.mdx │ │ │ ├── index.mdx │ │ │ ├── lsp-server.mdx │ │ │ ├── process.mdx │ │ │ ├── sandbox.mdx │ │ │ └── volume.mdx │ └── project.json └── runner │ ├── .env │ ├── .gitignore │ ├── cmd │ └── runner │ │ ├── config │ │ └── config.go │ │ └── main.go │ ├── go.mod │ ├── go.sum │ ├── internal │ ├── constants │ │ ├── auth.go │ │ └── keys.go │ └── util │ │ ├── error_extract.go │ │ ├── log_formatter.go │ │ └── log_writer.go │ ├── pkg │ ├── api │ │ ├── controllers │ │ │ ├── command_logs.go │ │ │ ├── health.go │ │ │ ├── image.go │ │ │ ├── proxy.go │ │ │ └── sandbox.go │ │ ├── docs │ │ │ ├── docs.go │ │ │ ├── swagger.json │ │ │ └── swagger.yaml │ │ ├── dto │ │ │ ├── image.go │ │ │ ├── registry.go │ │ │ ├── snapshot.go │ │ │ ├── volume.go │ │ │ └── workspace.go │ │ ├── middlewares │ │ │ ├── auth.go │ │ │ ├── error.go │ │ │ └── logging.go │ │ ├── server.go │ │ └── validator.go │ ├── cache │ │ └── cache.go │ ├── common │ │ ├── errors.go │ │ └── metrics.go │ ├── daemon │ │ ├── assets.go │ │ ├── static │ │ │ └── .gitkeep │ │ └── util.go │ ├── docker │ │ ├── client.go │ │ ├── container_commit.go │ │ ├── container_configs.go │ │ ├── container_exec.go │ │ ├── container_inspect.go │ │ ├── create.go │ │ ├── create_snapshot.go │ │ ├── destroy.go │ │ ├── image_build.go │ │ ├── image_exists.go │ │ ├── image_pull.go │ │ ├── image_push.go │ │ ├── image_remove.go │ │ ├── resize.go │ │ ├── start.go │ │ ├── start_daemon.go │ │ ├── state.go │ │ ├── stop.go │ │ ├── tag_image.go │ │ └── volumes_mountpaths.go │ ├── models │ │ ├── cache_data.go │ │ └── enums │ │ │ ├── sandbox_state.go │ │ │ └── snapshot_state.go │ ├── runner │ │ └── runner.go │ ├── services │ │ └── sandbox.go │ └── storage │ │ ├── client.go │ │ └── minio_client.go │ └── project.json ├── assets └── images │ ├── Daytona-logotype-black.png │ ├── Daytona-logotype-white.png │ └── daytona_demo.gif ├── components.json ├── ecosystem.config.js ├── eslint.config.mjs ├── examples ├── jupyter │ └── daytona.ipynb ├── python │ ├── charts │ │ ├── _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 │ └── volumes │ │ ├── _async │ │ └── volume.py │ │ └── volume.py └── typescript │ ├── charts │ ├── package.json │ ├── src │ │ └── index.ts │ └── tsconfig.json │ ├── exec-command │ ├── package.json │ ├── src │ │ └── index.ts │ └── tsconfig.json │ ├── file-operations │ ├── package.json │ ├── src │ │ └── index.ts │ └── tsconfig.json │ ├── git-lsp │ ├── README.md │ ├── package.json │ ├── src │ │ └── index.ts │ └── tsconfig.json │ ├── lifecycle │ ├── package.json │ ├── src │ │ └── index.ts │ └── tsconfig.json │ └── volumes │ ├── package.json │ ├── src │ └── index.ts │ └── tsconfig.json ├── functions └── auth0 │ ├── linkUserAccounts.onExecutePostLogin.js │ ├── setCustomClaims.onExecutePostLogin.js │ ├── validateEmailUnused.onExecutePreRegister.js │ └── verifyAliasEmail.onExecutePreRegister.js ├── go.work ├── go.work.sum ├── jest.config.ts ├── jest.preset.js ├── libs ├── api-client-go │ ├── .gitignore │ ├── .openapi-generator-ignore │ ├── .openapi-generator │ │ ├── FILES │ │ └── VERSION │ ├── api │ │ └── openapi.yaml │ ├── api_api_keys.go │ ├── api_docker_registry.go │ ├── api_images.go │ ├── api_nodes.go │ ├── api_object_storage.go │ ├── api_organizations.go │ ├── api_preview.go │ ├── api_toolbox.go │ ├── api_users.go │ ├── api_volumes.go │ ├── api_workspace.go │ ├── client.go │ ├── configuration.go │ ├── docs │ │ └── SessionExecuteRequest.md │ ├── go.mod │ ├── go.sum │ ├── model_account_provider.go │ ├── model_account_provider_dto.go │ ├── model_api_key_list.go │ ├── model_api_key_response.go │ ├── model_build_image.go │ ├── model_build_info.go │ ├── model_command.go │ ├── model_completion_context.go │ ├── model_completion_item.go │ ├── model_completion_list.go │ ├── model_create_api_key.go │ ├── model_create_build_info.go │ ├── model_create_docker_registry.go │ ├── model_create_image.go │ ├── model_create_node.go │ ├── model_create_organization.go │ ├── model_create_organization_invitation.go │ ├── model_create_organization_quota.go │ ├── model_create_organization_role.go │ ├── model_create_session_request.go │ ├── model_create_user.go │ ├── model_create_volume.go │ ├── model_create_workspace.go │ ├── model_docker_registry.go │ ├── model_execute_request.go │ ├── model_execute_response.go │ ├── model_file_info.go │ ├── model_file_status.go │ ├── model_get_build_logs_400_response.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_image_dto.go │ ├── model_image_state.go │ ├── model_list_branch_response.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_organization.go │ ├── model_organization_invitation.go │ ├── model_organization_role.go │ ├── model_organization_suspension.go │ ├── model_organization_user.go │ ├── model_paginated_images_dto.go │ ├── model_port_preview_url.go │ ├── model_position.go │ ├── model_project_dir_response.go │ ├── model_range.go │ ├── model_registry_push_access_dto.go │ ├── model_replace_request.go │ ├── model_replace_result.go │ ├── model_search_files_response.go │ ├── model_session.go │ ├── model_session_execute_request.go │ ├── model_session_execute_response.go │ ├── model_set_image_general_status.go │ ├── model_storage_access_dto.go │ ├── model_toggle_state.go │ ├── model_update_assigned_organization_roles.go │ ├── model_update_docker_registry.go │ ├── model_update_organization_invitation.go │ ├── model_update_organization_member_role.go │ ├── model_update_organization_quota.go │ ├── model_update_organization_role.go │ ├── model_upload_file.go │ ├── model_upload_file_dto.go │ ├── model_upload_file_request_file.go │ ├── model_upload_files_multi_request_files_inner.go │ ├── model_usage_overview.go │ ├── model_user.go │ ├── model_user_public_key.go │ ├── model_volume.go │ ├── model_volume_dto.go │ ├── model_volume_state.go │ ├── model_workspace.go │ ├── model_workspace_info.go │ ├── model_workspace_labels.go │ ├── model_workspace_state.go │ ├── model_workspace_volume.go │ ├── project.json │ ├── response.go │ └── utils.go ├── api-client-python-async │ ├── .gitignore │ ├── .openapi-generator-ignore │ ├── .openapi-generator │ │ ├── FILES │ │ └── VERSION │ ├── daytona_api_client_async │ │ ├── __init__.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── api_keys_api.py │ │ │ ├── docker_registry_api.py │ │ │ ├── images_api.py │ │ │ ├── nodes_api.py │ │ │ ├── object_storage_api.py │ │ │ ├── organizations_api.py │ │ │ ├── preview_api.py │ │ │ ├── toolbox_api.py │ │ │ ├── users_api.py │ │ │ ├── volumes_api.py │ │ │ └── workspace_api.py │ │ ├── api_client.py │ │ ├── api_response.py │ │ ├── configuration.py │ │ ├── exceptions.py │ │ ├── models │ │ │ ├── __init__.py │ │ │ ├── account_provider.py │ │ │ ├── api_key_list.py │ │ │ ├── api_key_response.py │ │ │ ├── build_image.py │ │ │ ├── command.py │ │ │ ├── completion_context.py │ │ │ ├── completion_item.py │ │ │ ├── completion_list.py │ │ │ ├── create_api_key.py │ │ │ ├── create_build_info.py │ │ │ ├── create_docker_registry.py │ │ │ ├── create_image.py │ │ │ ├── create_node.py │ │ │ ├── create_organization.py │ │ │ ├── create_organization_invitation.py │ │ │ ├── create_organization_quota.py │ │ │ ├── create_organization_role.py │ │ │ ├── create_session_request.py │ │ │ ├── create_user.py │ │ │ ├── create_volume.py │ │ │ ├── create_workspace.py │ │ │ ├── docker_registry.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 │ │ │ ├── image_dto.py │ │ │ ├── image_state.py │ │ │ ├── list_branch_response.py │ │ │ ├── lsp_completion_params.py │ │ │ ├── lsp_document_request.py │ │ │ ├── lsp_location.py │ │ │ ├── lsp_server_request.py │ │ │ ├── lsp_symbol.py │ │ │ ├── match.py │ │ │ ├── organization.py │ │ │ ├── organization_invitation.py │ │ │ ├── organization_role.py │ │ │ ├── organization_suspension.py │ │ │ ├── organization_user.py │ │ │ ├── paginated_images_dto.py │ │ │ ├── port_preview_url.py │ │ │ ├── position.py │ │ │ ├── project_dir_response.py │ │ │ ├── range.py │ │ │ ├── registry_push_access_dto.py │ │ │ ├── replace_request.py │ │ │ ├── replace_result.py │ │ │ ├── search_files_response.py │ │ │ ├── session.py │ │ │ ├── session_execute_request.py │ │ │ ├── session_execute_response.py │ │ │ ├── set_image_general_status.py │ │ │ ├── storage_access_dto.py │ │ │ ├── toggle_state.py │ │ │ ├── update_assigned_organization_roles.py │ │ │ ├── update_docker_registry.py │ │ │ ├── update_organization_invitation.py │ │ │ ├── update_organization_member_role.py │ │ │ ├── update_organization_quota.py │ │ │ ├── update_organization_role.py │ │ │ ├── usage_overview.py │ │ │ ├── user.py │ │ │ ├── user_public_key.py │ │ │ ├── volume_dto.py │ │ │ ├── volume_state.py │ │ │ ├── workspace.py │ │ │ ├── workspace_info.py │ │ │ ├── workspace_labels.py │ │ │ ├── workspace_state.py │ │ │ └── workspace_volume.py │ │ ├── py.typed │ │ └── rest.py │ ├── project.json │ ├── pyproject.toml │ ├── requirements.txt │ ├── setup.cfg │ ├── setup.py │ ├── test-requirements.txt │ └── tox.ini ├── api-client-python │ ├── .gitignore │ ├── .openapi-generator-ignore │ ├── .openapi-generator │ │ ├── FILES │ │ └── VERSION │ ├── daytona_api_client │ │ ├── __init__.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── api_keys_api.py │ │ │ ├── docker_registry_api.py │ │ │ ├── images_api.py │ │ │ ├── nodes_api.py │ │ │ ├── object_storage_api.py │ │ │ ├── organizations_api.py │ │ │ ├── preview_api.py │ │ │ ├── toolbox_api.py │ │ │ ├── users_api.py │ │ │ ├── volumes_api.py │ │ │ └── workspace_api.py │ │ ├── api_client.py │ │ ├── api_response.py │ │ ├── configuration.py │ │ ├── exceptions.py │ │ ├── models │ │ │ ├── __init__.py │ │ │ ├── account_provider.py │ │ │ ├── account_provider_dto.py │ │ │ ├── api_key_list.py │ │ │ ├── api_key_response.py │ │ │ ├── build_image.py │ │ │ ├── build_info.py │ │ │ ├── command.py │ │ │ ├── completion_context.py │ │ │ ├── completion_item.py │ │ │ ├── completion_list.py │ │ │ ├── create_api_key.py │ │ │ ├── create_build_info.py │ │ │ ├── create_docker_registry.py │ │ │ ├── create_image.py │ │ │ ├── create_node.py │ │ │ ├── create_organization.py │ │ │ ├── create_organization_invitation.py │ │ │ ├── create_organization_quota.py │ │ │ ├── create_organization_role.py │ │ │ ├── create_session_request.py │ │ │ ├── create_user.py │ │ │ ├── create_volume.py │ │ │ ├── create_workspace.py │ │ │ ├── docker_registry.py │ │ │ ├── execute_request.py │ │ │ ├── execute_response.py │ │ │ ├── file_info.py │ │ │ ├── file_status.py │ │ │ ├── get_build_logs400_response.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 │ │ │ ├── image_dto.py │ │ │ ├── image_state.py │ │ │ ├── list_branch_response.py │ │ │ ├── lsp_completion_params.py │ │ │ ├── lsp_document_request.py │ │ │ ├── lsp_location.py │ │ │ ├── lsp_server_request.py │ │ │ ├── lsp_symbol.py │ │ │ ├── match.py │ │ │ ├── organization.py │ │ │ ├── organization_invitation.py │ │ │ ├── organization_role.py │ │ │ ├── organization_suspension.py │ │ │ ├── organization_user.py │ │ │ ├── paginated_images_dto.py │ │ │ ├── port_preview_url.py │ │ │ ├── position.py │ │ │ ├── project_dir_response.py │ │ │ ├── range.py │ │ │ ├── registry_push_access_dto.py │ │ │ ├── replace_request.py │ │ │ ├── replace_result.py │ │ │ ├── search_files_response.py │ │ │ ├── session.py │ │ │ ├── session_execute_request.py │ │ │ ├── session_execute_response.py │ │ │ ├── set_image_general_status.py │ │ │ ├── storage_access_dto.py │ │ │ ├── toggle_state.py │ │ │ ├── update_assigned_organization_roles.py │ │ │ ├── update_docker_registry.py │ │ │ ├── update_organization_invitation.py │ │ │ ├── update_organization_member_role.py │ │ │ ├── update_organization_quota.py │ │ │ ├── update_organization_role.py │ │ │ ├── upload_file.py │ │ │ ├── upload_file_dto.py │ │ │ ├── upload_file_request_file.py │ │ │ ├── upload_files_multi_request_files_inner.py │ │ │ ├── usage_overview.py │ │ │ ├── user.py │ │ │ ├── user_public_key.py │ │ │ ├── volume.py │ │ │ ├── volume_dto.py │ │ │ ├── volume_state.py │ │ │ ├── workspace.py │ │ │ ├── workspace_info.py │ │ │ ├── workspace_labels.py │ │ │ ├── workspace_state.py │ │ │ └── workspace_volume.py │ │ ├── py.typed │ │ └── rest.py │ ├── project.json │ ├── pyproject.toml │ ├── requirements.txt │ ├── setup.cfg │ ├── setup.py │ ├── test-requirements.txt │ └── tox.ini ├── api-client │ ├── package.json │ ├── project.json │ ├── src │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .openapi-generator-ignore │ │ ├── .openapi-generator │ │ │ ├── FILES │ │ │ └── VERSION │ │ ├── api.ts │ │ ├── api │ │ │ ├── api-keys-api.ts │ │ │ ├── docker-registry-api.ts │ │ │ ├── images-api.ts │ │ │ ├── nodes-api.ts │ │ │ ├── object-storage-api.ts │ │ │ ├── organizations-api.ts │ │ │ ├── preview-api.ts │ │ │ ├── toolbox-api.ts │ │ │ ├── users-api.ts │ │ │ ├── volumes-api.ts │ │ │ └── workspace-api.ts │ │ ├── base.ts │ │ ├── common.ts │ │ ├── configuration.ts │ │ ├── git_push.sh │ │ ├── index.ts │ │ └── models │ │ │ ├── account-provider-dto.ts │ │ │ ├── account-provider.ts │ │ │ ├── api-key-list.ts │ │ │ ├── api-key-response.ts │ │ │ ├── build-image.ts │ │ │ ├── build-info.ts │ │ │ ├── command.ts │ │ │ ├── completion-context.ts │ │ │ ├── completion-item.ts │ │ │ ├── completion-list.ts │ │ │ ├── create-api-key.ts │ │ │ ├── create-build-info.ts │ │ │ ├── create-docker-registry.ts │ │ │ ├── create-image.ts │ │ │ ├── create-node.ts │ │ │ ├── create-organization-invitation.ts │ │ │ ├── create-organization-quota.ts │ │ │ ├── create-organization-role.ts │ │ │ ├── create-organization.ts │ │ │ ├── create-session-request.ts │ │ │ ├── create-user.ts │ │ │ ├── create-volume.ts │ │ │ ├── create-workspace.ts │ │ │ ├── docker-registry.ts │ │ │ ├── execute-request.ts │ │ │ ├── execute-response.ts │ │ │ ├── file-info.ts │ │ │ ├── file-status.ts │ │ │ ├── get-build-logs400-response.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 │ │ │ ├── image-dto.ts │ │ │ ├── image-state.ts │ │ │ ├── index.ts │ │ │ ├── list-branch-response.ts │ │ │ ├── lsp-completion-params.ts │ │ │ ├── lsp-document-request.ts │ │ │ ├── lsp-location.ts │ │ │ ├── lsp-server-request.ts │ │ │ ├── lsp-symbol.ts │ │ │ ├── match.ts │ │ │ ├── organization-invitation.ts │ │ │ ├── organization-role.ts │ │ │ ├── organization-suspension.ts │ │ │ ├── organization-user.ts │ │ │ ├── organization.ts │ │ │ ├── paginated-images-dto.ts │ │ │ ├── port-preview-url.ts │ │ │ ├── position.ts │ │ │ ├── project-dir-response.ts │ │ │ ├── range.ts │ │ │ ├── registry-push-access-dto.ts │ │ │ ├── replace-request.ts │ │ │ ├── replace-result.ts │ │ │ ├── search-files-response.ts │ │ │ ├── session-execute-request.ts │ │ │ ├── session-execute-response.ts │ │ │ ├── session.ts │ │ │ ├── set-image-general-status.ts │ │ │ ├── storage-access-dto.ts │ │ │ ├── toggle-state.ts │ │ │ ├── update-assigned-organization-roles.ts │ │ │ ├── update-docker-registry.ts │ │ │ ├── update-organization-invitation.ts │ │ │ ├── update-organization-member-role.ts │ │ │ ├── update-organization-quota.ts │ │ │ ├── update-organization-role.ts │ │ │ ├── upload-file-dto.ts │ │ │ ├── upload-file-request-file.ts │ │ │ ├── upload-file.ts │ │ │ ├── upload-files-multi-request-files-inner.ts │ │ │ ├── usage-overview.ts │ │ │ ├── user-public-key.ts │ │ │ ├── user.ts │ │ │ ├── volume-dto.ts │ │ │ ├── volume-state.ts │ │ │ ├── volume.ts │ │ │ ├── workspace-info.ts │ │ │ ├── workspace-labels.ts │ │ │ ├── workspace-state.ts │ │ │ ├── workspace-volume.ts │ │ │ └── workspace.ts │ ├── tsconfig.json │ └── tsconfig.lib.json ├── runner-api-client │ ├── package.json │ ├── project.json │ ├── src │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .openapi-generator-ignore │ │ ├── .openapi-generator │ │ │ ├── FILES │ │ │ └── VERSION │ │ ├── api.ts │ │ ├── api │ │ │ ├── default-api.ts │ │ │ ├── images-api.ts │ │ │ ├── sandbox-api.ts │ │ │ └── toolbox-api.ts │ │ ├── base.ts │ │ ├── common.ts │ │ ├── configuration.ts │ │ ├── git_push.sh │ │ ├── index.ts │ │ └── models │ │ │ ├── build-image-request-dto.ts │ │ │ ├── create-sandbox-dto.ts │ │ │ ├── create-snapshot-dto.ts │ │ │ ├── dto-volume-dto.ts │ │ │ ├── enums-sandbox-state.ts │ │ │ ├── enums-snapshot-state.ts │ │ │ ├── error-response.ts │ │ │ ├── image-exists-response.ts │ │ │ ├── index.ts │ │ │ ├── pull-image-request-dto.ts │ │ │ ├── registry-dto.ts │ │ │ ├── resize-sandbox-dto.ts │ │ │ └── sandbox-info-response.ts │ ├── tsconfig.json │ └── tsconfig.lib.json ├── sdk-python │ ├── README.md │ ├── package.json │ ├── project.json │ ├── pydoc-markdown.yml │ ├── pyproject.toml │ ├── requirements.txt │ ├── scripts │ │ ├── docs-code-block-indentation.sh │ │ ├── docs-reorder-sections.sh │ │ └── sync_generator.py │ ├── setup.py │ └── src │ │ └── daytona_sdk │ │ ├── __init__.py │ │ ├── _async │ │ ├── __init__.py │ │ ├── daytona.py │ │ ├── filesystem.py │ │ ├── git.py │ │ ├── lsp_server.py │ │ ├── process.py │ │ ├── sandbox.py │ │ └── volume.py │ │ ├── _sync │ │ ├── __init__.py │ │ ├── daytona.py │ │ ├── filesystem.py │ │ ├── git.py │ │ ├── lsp_server.py │ │ ├── process.py │ │ ├── sandbox.py │ │ └── volume.py │ │ ├── _utils │ │ ├── __init__.py │ │ ├── chart_data_extractor_wrapper.py │ │ ├── deprecation.py │ │ ├── enum.py │ │ ├── errors.py │ │ ├── path.py │ │ └── timeout.py │ │ ├── code_toolbox │ │ ├── __init__.py │ │ ├── sandbox_python_code_toolbox.py │ │ └── sandbox_ts_code_toolbox.py │ │ └── common │ │ ├── __init__.py │ │ ├── charts.py │ │ ├── daytona.py │ │ ├── errors.py │ │ ├── filesystem.py │ │ ├── git.py │ │ ├── lsp_server.py │ │ ├── process.py │ │ ├── protocols.py │ │ ├── sandbox.py │ │ └── volume.py └── sdk-typescript │ ├── README.md │ ├── hooks │ └── typedoc-custom.mjs │ ├── jest.config.js │ ├── package.json │ ├── project.json │ ├── src │ ├── Daytona.ts │ ├── FileSystem.ts │ ├── Git.ts │ ├── LspServer.ts │ ├── Process.ts │ ├── Sandbox.ts │ ├── Volume.ts │ ├── code-toolbox │ │ ├── SandboxPythonCodeToolbox.ts │ │ └── SandboxTsCodeToolbox.ts │ ├── errors │ │ └── DaytonaError.ts │ ├── index.ts │ ├── types │ │ ├── Charts.ts │ │ └── ExecuteResponse.ts │ └── utils │ │ ├── ArtifactParser.ts │ │ └── Path.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ └── typedoc.json ├── nx.json ├── openapitools.json ├── package.json ├── project.json ├── pyproject.toml ├── tsconfig.base.json └── yarn.lock /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:jammy-curl 2 | 3 | ARG TARGETARCH 4 | 5 | # common tools 6 | RUN apt update && export DEBIAN_FRONTEND=noninteractive \ 7 | && apt -y install --no-install-recommends apt-utils vim htop telnet socat expect-dev tini psmisc libgit2-dev \ 8 | python3 python3-pip 9 | 10 | # build tools 11 | RUN apt update && export DEBIAN_FRONTEND=noninteractive \ 12 | && apt -y install --no-install-recommends openjdk-11-jdk protobuf-compiler libprotobuf-dev 13 | 14 | # Telepresence 15 | RUN curl -fL https://app.getambassador.io/download/tel2oss/releases/download/v2.17.0/telepresence-linux-${TARGETARCH} -o /usr/local/bin/telepresence && \ 16 | chmod a+x /usr/local/bin/telepresence 17 | 18 | CMD ["tail", "-f", "/dev/null"] -------------------------------------------------------------------------------- /.devcontainer/dex/config.yaml: -------------------------------------------------------------------------------- 1 | # config.yaml 2 | issuer: http://localhost:5556/dex 3 | storage: 4 | type: memory 5 | web: 6 | http: 0.0.0.0:5556 7 | allowedOrigins: ['*'] 8 | allowedHeaders: ['x-requested-with'] 9 | staticClients: 10 | - id: daytona 11 | redirectURIs: 12 | - 'http://localhost:3000' 13 | - 'http://localhost:3000/api/oauth2-redirect.html' 14 | - 'http://localhost:3009/callback' 15 | name: 'Daytona' 16 | public: true 17 | enablePasswordDB: true 18 | staticPasswords: 19 | - email: 'dev@daytona.io' 20 | # password generated with: 21 | # echo password | htpasswd -BinC 10 admin | cut -d: -f2 22 | hash: '$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W' 23 | username: 'admin' 24 | userID: '1234' 25 | -------------------------------------------------------------------------------- /.devcontainer/pgadmin4/pgpass: -------------------------------------------------------------------------------- 1 | db:5432:*:user:pass -------------------------------------------------------------------------------- /.devcontainer/pgadmin4/servers.json: -------------------------------------------------------------------------------- 1 | { 2 | "Servers": { 3 | "1": { 4 | "Name": "Daytona", 5 | "Group": "Servers", 6 | "Host": "db", 7 | "Port": 5432, 8 | "MaintenanceDB": "postgres", 9 | "Username": "user", 10 | "PassFile": "/pgpass" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /.devcontainer/tools-feature/devcontainer-feature.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Development tools", 3 | "id": "tools", 4 | "version": "1.0.0", 5 | "description": "Installs development tools.", 6 | "options": { 7 | "pipPackages": { 8 | "type": "array", 9 | "description": "List of pip packages to install", 10 | "items": { 11 | "type": "string" 12 | } 13 | }, 14 | "goTools": { 15 | "type": "array", 16 | "description": "List of Go tools to install", 17 | "items": { 18 | "type": "string" 19 | } 20 | } 21 | }, 22 | "installsAfter": [ 23 | "ghcr.io/devcontainers/features/go", 24 | "ghcr.io/devcontainers/features/python", 25 | "ghcr.io/devcontainers/features/docker-in-docker" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | NX_PACKAGE_PUBLISH_VERSION=0.0.0-dev 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | --- 8 | 9 | **Is your feature request related to a problem? Please describe.** 10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 11 | 12 | **Describe the solution you'd like** 13 | A clear and concise description of what you want to happen. 14 | 15 | **Describe alternatives you've considered** 16 | A clear and concise description of any alternative solutions or features you've considered. 17 | 18 | **Additional context** 19 | Add any other context or screenshots about the feature request here. 20 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # Pull Request Title 2 | 3 | ## Description 4 | 5 | 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. 6 | 7 | - [ ] This change requires a documentation update 8 | - [ ] I have made corresponding changes to the documentation 9 | 10 | ## Related Issue(s) 11 | 12 | This PR addresses issue #X 13 | 14 | ## Screenshots 15 | 16 | If relevant, please add screenshots. 17 | 18 | ## Notes 19 | 20 | Please add any relevant notes if necessary. 21 | -------------------------------------------------------------------------------- /.golangci.yaml: -------------------------------------------------------------------------------- 1 | linters-settings: 2 | errcheck: 3 | exclude-functions: 4 | - (*github.com/gin-gonic/gin.Context).AbortWithError 5 | - (*github.com/gin-gonic/gin.Context).Error 6 | - io.Copy 7 | - syscall.Syscall 8 | - (github.com/gliderlabs/ssh.Session).Exit 9 | - (io.Writer).Write 10 | run: 11 | build-tags: 12 | - testing 13 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | yarn lint-staged 4 | 5 | # Run sync generator check for Python SDK 6 | ./.husky/pre-commit-sdk-py-sync-check.sh 7 | -------------------------------------------------------------------------------- /.licenserc.yaml: -------------------------------------------------------------------------------- 1 | header: 2 | license: 3 | spdx-id: AGPL-3.0 4 | copyright-owner: Daytona Platforms Inc. 5 | content: | 6 | Copyright 2025 Daytona Platforms Inc. 7 | SPDX-License-Identifier: AGPL-3.0 8 | paths: 9 | - '**/*.go' 10 | - '**/*.sh' 11 | - '**/*.js' 12 | - '**/*.ts' 13 | - '**/*.tsx' 14 | - '**/*.py' 15 | 16 | paths-ignore: 17 | - 'libs/api-client/**' 18 | - 'libs/runner-api-client/**' 19 | - 'libs/api-client-go/**' 20 | - 'libs/api-client-python/**' 21 | - 'libs/api-client-python-async/**' 22 | - 'apps/api/src/generate-openapi.ts' 23 | - 'apps/runner/pkg/api/docs/docs.go' 24 | - 'examples/**' 25 | 26 | comment: on-failure 27 | -------------------------------------------------------------------------------- /.markdownlint-cli2.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint-cli2/24eb4dce508ab81398d14d75179123fca425f12d/schema/markdownlint-cli2-config-schema.json", 3 | "config": { 4 | "no-emphasis-as-heading": false, 5 | "line-length": false, 6 | "no-inline-html": false, 7 | "first-line-h1": false, 8 | "no-bare-urls": false, 9 | "no-duplicate-heading": false, 10 | "emphasis-style": { 11 | "style": "underscore", 12 | }, 13 | "ol-prefix": false, 14 | "fenced-code-language": false, 15 | "single-title": false, 16 | "heading-increment": false, 17 | "table-column-count": false, 18 | "table-pipe-style": false, 19 | "no-empty-links": false, 20 | }, 21 | "ignores": ["**/node_modules/**"], 22 | } 23 | -------------------------------------------------------------------------------- /.nxignore: -------------------------------------------------------------------------------- 1 | examples/ -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Add files here to ignore them from prettier formatting 2 | /dist 3 | /coverage 4 | /.nx/cache 5 | /.nx/workspace-data -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "semi": false, 4 | "tabWidth": 2, 5 | "printWidth": 120 6 | } 7 | -------------------------------------------------------------------------------- /.verdaccio/config.yml: -------------------------------------------------------------------------------- 1 | # path to a directory with all packages 2 | storage: ../tmp/local-registry/storage 3 | 4 | # a list of other known repositories we can talk to 5 | uplinks: 6 | npmjs: 7 | url: https://registry.npmjs.org/ 8 | maxage: 60m 9 | 10 | packages: 11 | '**': 12 | # give all users (including non-authenticated users) full access 13 | # because it is a local registry 14 | access: $all 15 | publish: $all 16 | unpublish: $all 17 | 18 | # if package is not available locally, proxy requests to npm registry 19 | proxy: npmjs 20 | 21 | # log settings 22 | log: 23 | type: stdout 24 | format: pretty 25 | level: warn 26 | 27 | publish: 28 | allow_offline: true # set offline to true to allow publish offline 29 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "debug-build-runner", 6 | "type": "shell", 7 | "command": "yarn nx build runner", 8 | "group": { 9 | "kind": "build", 10 | "isDefault": true 11 | }, 12 | "presentation": { 13 | "reveal": "silent" 14 | }, 15 | "problemMatcher": [ 16 | "$go" 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | enableInlineHunks: true 2 | 3 | nodeLinker: node-modules 4 | -------------------------------------------------------------------------------- /COPYRIGHT: -------------------------------------------------------------------------------- 1 | Copyrights in the Daytona software are retained by their contributors. 2 | No copyright assignment is required to contribute to Daytona software. 3 | 4 | When we refer to the 'Daytona software authors', we mean anyone who 5 | has contributed to this repository. 6 | 7 | Unless otherwise noted, such as with a LICENSE file in a directory, or a 8 | specific copyright notice on a file, all files in this repository are 9 | licensed under the Apache 2.0 license. 10 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Daytona 2 | Copyright the various Daytona software authors. 3 | 4 | The initial developer of the software is Daytona Platforms, Inc. (https://daytona.io). 5 | Copyright 2025 Daytona Platforms, Inc. All Rights Reserved. 6 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Reporting a Vulnerability 4 | 5 | To report a vulnerability, please contact us at [servicedesk@daytona.io](mailto:servicedesk@daytona.io). 6 | -------------------------------------------------------------------------------- /apps/api/Dockerfile: -------------------------------------------------------------------------------- 1 | # This file is generated by Nx. 2 | # 3 | # Build the docker image with `npx nx docker-build daytona`. 4 | # Tip: Modify "docker-build" options in project.json to change docker build args. 5 | # 6 | # Run the container with `docker run -p 3000:3000 -t daytona`. 7 | FROM docker.io/node:lts-alpine 8 | 9 | TODO -------------------------------------------------------------------------------- /apps/api/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs' 2 | 3 | export default [...baseConfig] 4 | -------------------------------------------------------------------------------- /apps/api/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export default { 7 | displayName: 'daytona', 8 | preset: '../../jest.preset.js', 9 | testEnvironment: 'node', 10 | transform: { 11 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 12 | }, 13 | moduleFileExtensions: ['ts', 'js', 'html'], 14 | coverageDirectory: '../../coverage/apps/daytona', 15 | } 16 | -------------------------------------------------------------------------------- /apps/api/src/analytics/analytics.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Module } from '@nestjs/common' 7 | import { TypeOrmModule } from '@nestjs/typeorm' 8 | import { AnalyticsService } from './services/analytics.service' 9 | 10 | @Module({ 11 | imports: [TypeOrmModule.forFeature([AnalyticsService])], 12 | providers: [AnalyticsService], 13 | exports: [AnalyticsService], 14 | }) 15 | export class AnalyticsModule {} 16 | -------------------------------------------------------------------------------- /apps/api/src/api-key/api-key.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Module } from '@nestjs/common' 7 | import { ApiKeyController } from './api-key.controller' 8 | import { ApiKeyService } from './api-key.service' 9 | import { ApiKey } from './api-key.entity' 10 | import { TypeOrmModule } from '@nestjs/typeorm' 11 | import { OrganizationModule } from '../organization/organization.module' 12 | 13 | @Module({ 14 | imports: [OrganizationModule, TypeOrmModule.forFeature([ApiKey])], 15 | controllers: [ApiKeyController], 16 | providers: [ApiKeyService], 17 | exports: [ApiKeyService], 18 | }) 19 | export class ApiKeyModule {} 20 | -------------------------------------------------------------------------------- /apps/api/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/apps/api/src/assets/.gitkeep -------------------------------------------------------------------------------- /apps/api/src/common/constants/default-organization-quota.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { CreateOrganizationQuotaDto } from '../../organization/dto/create-organization-quota.dto' 7 | 8 | export const DEFAULT_ORGANIZATION_QUOTA: CreateOrganizationQuotaDto = { 9 | totalCpuQuota: 10, 10 | totalMemoryQuota: 10, 11 | totalDiskQuota: 30, 12 | maxCpuPerWorkspace: 4, 13 | maxMemoryPerWorkspace: 8, 14 | maxDiskPerWorkspace: 10, 15 | imageQuota: 100, 16 | maxImageSize: 20, 17 | volumeQuota: 100, 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/common/constants/header.constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const CustomHeaders: { 7 | [key: string]: { 8 | name: string 9 | description?: string 10 | required?: boolean 11 | schema?: { 12 | type?: string 13 | } 14 | } 15 | } = { 16 | ORGANIZATION_ID: { 17 | name: 'X-Daytona-Organization-ID', 18 | description: 'Use with JWT to specify the organization ID', 19 | required: false, 20 | schema: { 21 | type: 'string', 22 | }, 23 | }, 24 | SOURCE: { 25 | name: 'X-Daytona-Source', 26 | description: 'Use to specify the source of the request', 27 | required: false, 28 | schema: { 29 | type: 'string', 30 | }, 31 | }, 32 | } 33 | -------------------------------------------------------------------------------- /apps/api/src/common/decorators/auth-context.decorator.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { createParamDecorator, ExecutionContext } from '@nestjs/common' 7 | 8 | export const AuthContext = createParamDecorator((data: unknown, ctx: ExecutionContext) => { 9 | const request = ctx.switchToHttp().getRequest() 10 | return request.user 11 | }) 12 | -------------------------------------------------------------------------------- /apps/api/src/common/decorators/on-async-event.decorator.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { OnEvent, OnEventMetadata } from '@nestjs/event-emitter' 7 | 8 | export function OnAsyncEvent({ event, options = {} }: OnEventMetadata): MethodDecorator { 9 | return OnEvent(event, { 10 | ...options, 11 | promisify: true, 12 | suppressErrors: false, 13 | }) 14 | } 15 | -------------------------------------------------------------------------------- /apps/api/src/common/decorators/required-system-role.decorator.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Reflector } from '@nestjs/core' 7 | import { SystemRole } from '../../user/enums/system-role.enum' 8 | 9 | export const RequiredSystemRole = Reflector.createDecorator() 10 | -------------------------------------------------------------------------------- /apps/api/src/common/decorators/user.decorator.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { createParamDecorator, ExecutionContext } from '@nestjs/common' 7 | 8 | export const User = createParamDecorator((data: string, ctx: ExecutionContext) => { 9 | const request = ctx.switchToHttp().getRequest() 10 | const user = request.user 11 | 12 | return data ? user?.[data] : user 13 | }) 14 | -------------------------------------------------------------------------------- /apps/api/src/common/middleware/version-header.middleware.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Injectable, NestMiddleware } from '@nestjs/common' 7 | import { Request, Response, NextFunction } from 'express' 8 | // import { version } from '../../../package.json' 9 | 10 | @Injectable() 11 | export class VersionHeaderMiddleware implements NestMiddleware { 12 | use(req: Request, res: Response, next: NextFunction) { 13 | // TODO: Fetch version from package.json 14 | // res.setHeader('X-Daytona-Api-Version', `v${version}`) 15 | next() 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /apps/api/src/common/utils/from-axios-error.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export function fromAxiosError(error: any): Error { 7 | return new Error(error.response?.data?.message || error.response?.data || error.message || error) 8 | } 9 | -------------------------------------------------------------------------------- /apps/api/src/docker-registry/decorators/docker-registry.decorator.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { createParamDecorator, ExecutionContext } from '@nestjs/common' 7 | 8 | export const DockerRegistry = createParamDecorator((data: unknown, ctx: ExecutionContext) => { 9 | const request = ctx.switchToHttp().getRequest() 10 | return request.dockerRegistry 11 | }) 12 | -------------------------------------------------------------------------------- /apps/api/src/docker-registry/enums/registry-type.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum RegistryType { 7 | INTERNAL = 'internal', 8 | ORGANIZATION = 'organization', 9 | PUBLIC = 'public', 10 | TRANSIENT = 'transient', 11 | } 12 | -------------------------------------------------------------------------------- /apps/api/src/docker-registry/providers/mock-docker-registry.provider.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { IDockerRegistryProvider } from './docker-registry.provider.interface' 7 | 8 | export class MockDockerRegistryProvider implements IDockerRegistryProvider { 9 | async createRobotAccount(): Promise<{ name: string; secret: string }> { 10 | return { 11 | name: 'mock-robot', 12 | secret: 'mock-secret', 13 | } 14 | } 15 | 16 | async deleteArtifact(): Promise { 17 | return Promise.resolve() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/email/constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const EMAIL_MODULE_OPTIONS = 'EMAIL_MODULE_OPTIONS' 7 | -------------------------------------------------------------------------------- /apps/api/src/exceptions/bad-request.exception.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { HttpException, HttpStatus } from '@nestjs/common' 7 | 8 | export class BadRequestError extends HttpException { 9 | constructor(message: string) { 10 | super(message, HttpStatus.BAD_REQUEST) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /apps/api/src/exceptions/forbidden-operation.exception.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { HttpException, HttpStatus } from '@nestjs/common' 7 | 8 | export class ForbiddenOperationError extends HttpException { 9 | constructor(message: string) { 10 | super(message, HttpStatus.FORBIDDEN) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /apps/api/src/exceptions/not-found.exception.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { HttpException, HttpStatus } from '@nestjs/common' 7 | 8 | export class ResourceNotFoundError extends HttpException { 9 | constructor(message: string) { 10 | super(message, HttpStatus.NOT_FOUND) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /apps/api/src/exceptions/workspace-error.exception.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { HttpException, HttpStatus } from '@nestjs/common' 7 | 8 | export class WorkspaceError extends HttpException { 9 | constructor(message: string) { 10 | super(message, HttpStatus.BAD_REQUEST) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /apps/api/src/migrations/1741088883001-migration.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { MigrationInterface, QueryRunner } from 'typeorm' 7 | 8 | export class Migration1741088883001 implements MigrationInterface { 9 | name = 'Migration1741088883001' 10 | 11 | public async up(queryRunner: QueryRunner): Promise { 12 | await queryRunner.query(`ALTER TABLE "user" ADD "email" character varying NOT NULL DEFAULT ''`) 13 | } 14 | 15 | public async down(queryRunner: QueryRunner): Promise { 16 | await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "email"`) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/migrations/1742215525714-migration.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { MigrationInterface, QueryRunner } from 'typeorm' 7 | 8 | export class Migration1742215525714 implements MigrationInterface { 9 | name = 'Migration1742215525714' 10 | 11 | public async up(queryRunner: QueryRunner): Promise { 12 | await queryRunner.query(`ALTER TABLE "organization" ALTER COLUMN "image_quota" SET DEFAULT '0'`) 13 | } 14 | 15 | public async down(queryRunner: QueryRunner): Promise { 16 | await queryRunner.query(`ALTER TABLE "organization" ALTER COLUMN "image_quota" SET DEFAULT '5'`) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/migrations/1742831092942-migration.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { MigrationInterface, QueryRunner } from 'typeorm' 7 | 8 | export class Migration1742831092942 implements MigrationInterface { 9 | name = 'Migration1742831092942' 10 | 11 | public async up(queryRunner: QueryRunner): Promise { 12 | await queryRunner.query(`ALTER TABLE "workspace" ADD "pending" boolean NOT NULL DEFAULT false`) 13 | } 14 | 15 | public async down(queryRunner: QueryRunner): Promise { 16 | await queryRunner.query(`ALTER TABLE "workspace" DROP COLUMN "pending"`) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/migrations/1743593463168-migration.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { MigrationInterface, QueryRunner } from 'typeorm' 7 | 8 | export class Migration1743593463168 implements MigrationInterface { 9 | name = 'Migration1743593463168' 10 | 11 | public async up(queryRunner: QueryRunner): Promise { 12 | await queryRunner.query( 13 | `ALTER TABLE "organization_invitation" ADD "invitedBy" character varying NOT NULL DEFAULT ''`, 14 | ) 15 | } 16 | 17 | public async down(queryRunner: QueryRunner): Promise { 18 | await queryRunner.query(`ALTER TABLE "organization_invitation" DROP COLUMN "invitedBy"`) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/src/migrations/1745494761360-migration.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { MigrationInterface, QueryRunner } from 'typeorm' 7 | 8 | export class Migration1745494761360 implements MigrationInterface { 9 | name = 'Migration1745494761360' 10 | 11 | public async up(queryRunner: QueryRunner): Promise { 12 | await queryRunner.query(`ALTER TABLE "user" ADD "emailVerified" boolean NOT NULL DEFAULT false`) 13 | } 14 | 15 | public async down(queryRunner: QueryRunner): Promise { 16 | await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "emailVerified"`) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/migrations/1746354231722-migration.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { MigrationInterface, QueryRunner } from 'typeorm' 7 | 8 | export class Migration1746354231722 implements MigrationInterface { 9 | name = 'Migration1746354231722' 10 | 11 | public async up(queryRunner: QueryRunner): Promise { 12 | await queryRunner.query(`ALTER TABLE "image" ADD "buildNodeId" character varying`) 13 | } 14 | 15 | public async down(queryRunner: QueryRunner): Promise { 16 | await queryRunner.query(`ALTER TABLE "image" DROP COLUMN "buildNodeId"`) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/migrations/1746604150910-migration.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { MigrationInterface, QueryRunner } from 'typeorm' 7 | 8 | export class Migration1746604150910 implements MigrationInterface { 9 | name = 'Migration1746604150910' 10 | 11 | public async up(queryRunner: QueryRunner): Promise { 12 | await queryRunner.query(`ALTER TABLE "organization" ADD "volume_quota" integer NOT NULL DEFAULT '10'`) 13 | } 14 | 15 | public async down(queryRunner: QueryRunner): Promise { 16 | await queryRunner.query(`ALTER TABLE "organization" DROP COLUMN "volume_quota"`) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/migrations/1747658203010-migration.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { MigrationInterface, QueryRunner } from 'typeorm' 7 | 8 | export class Migration1747658203010 implements MigrationInterface { 9 | name = 'Migration1747658203010' 10 | 11 | public async up(queryRunner: QueryRunner): Promise { 12 | await queryRunner.query(`ALTER TABLE "api_key" ADD "lastUsedAt" TIMESTAMP`) 13 | } 14 | 15 | public async down(queryRunner: QueryRunner): Promise { 16 | await queryRunner.query(`ALTER TABLE "api_key" DROP COLUMN "lastUsedAt"`) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/object-storage/object-storage.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Module } from '@nestjs/common' 7 | import { ObjectStorageController } from './controllers/object-storage.controller' 8 | import { ObjectStorageService } from './services/object-storage.service' 9 | import { ConfigModule } from '@nestjs/config' 10 | import { OrganizationModule } from '../organization/organization.module' 11 | 12 | @Module({ 13 | imports: [ConfigModule, OrganizationModule], 14 | controllers: [ObjectStorageController], 15 | providers: [ObjectStorageService], 16 | exports: [ObjectStorageService], 17 | }) 18 | export class ObjectStorageModule {} 19 | -------------------------------------------------------------------------------- /apps/api/src/organization/constants/global-organization-roles.constant.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const GlobalOrganizationRolesIds = { 7 | DEVELOPER: '00000000-0000-0000-0000-000000000001', 8 | SANDBOXES_ADMIN: '00000000-0000-0000-0000-000000000002', 9 | IMAGES_ADMIN: '00000000-0000-0000-0000-000000000003', 10 | REGISTRIES_ADMIN: '00000000-0000-0000-0000-000000000004', 11 | SUPER_ADMIN: '00000000-0000-0000-0000-000000000005', 12 | VOLUMES_ADMIN: '00000000-0000-0000-0000-000000000006', 13 | } as const 14 | -------------------------------------------------------------------------------- /apps/api/src/organization/constants/organization-events.constant.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const OrganizationEvents = { 7 | INVITATION_CREATED: 'invitation.created', 8 | INVITATION_ACCEPTED: 'invitation.accepted', 9 | INVITATION_DECLINED: 'invitation.declined', 10 | INVITATION_CANCELLED: 'invitation.cancelled', 11 | CREATED: 'organization.created', 12 | SUSPENDED_WORKSPACE_STOPPED: 'organization.suspended-workspace-stopped', 13 | } as const 14 | -------------------------------------------------------------------------------- /apps/api/src/organization/decorators/required-organization-member-role.decorator.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Reflector } from '@nestjs/core' 7 | import { OrganizationMemberRole } from '../enums/organization-member-role.enum' 8 | 9 | export const RequiredOrganizationMemberRole = Reflector.createDecorator() 10 | -------------------------------------------------------------------------------- /apps/api/src/organization/decorators/required-organization-resource-permissions.decorator.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Reflector } from '@nestjs/core' 7 | import { OrganizationResourcePermission } from '../enums/organization-resource-permission.enum' 8 | 9 | export const RequiredOrganizationResourcePermissions = Reflector.createDecorator() 10 | -------------------------------------------------------------------------------- /apps/api/src/organization/dto/create-organization.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { IsNotEmpty, IsString } from 'class-validator' 8 | 9 | @ApiSchema({ name: 'CreateOrganization' }) 10 | export class CreateOrganizationDto { 11 | @ApiProperty({ 12 | description: 'The name of organization', 13 | example: 'My Organization', 14 | required: true, 15 | }) 16 | @IsString() 17 | @IsNotEmpty() 18 | name: string 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/organization/dto/organization-suspension.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { IsOptional } from 'class-validator' 8 | 9 | @ApiSchema({ name: 'OrganizationSuspension' }) 10 | export class OrganizationSuspensionDto { 11 | @ApiProperty({ 12 | description: 'Suspension reason', 13 | }) 14 | reason: string 15 | 16 | @ApiProperty({ 17 | description: 'Suspension until', 18 | }) 19 | @IsOptional() 20 | until?: Date 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/organization/dto/overview.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | 8 | @ApiSchema({ name: 'UsageOverview' }) 9 | export class OverviewDto { 10 | @ApiProperty() 11 | totalCpuQuota: number 12 | @ApiProperty() 13 | totalGpuQuota: number 14 | @ApiProperty() 15 | totalMemoryQuota: number 16 | @ApiProperty() 17 | totalDiskQuota: number 18 | 19 | @ApiProperty() 20 | currentCpuUsage: number 21 | @ApiProperty() 22 | currentMemoryUsage: number 23 | @ApiProperty() 24 | currentDiskUsage: number 25 | } 26 | -------------------------------------------------------------------------------- /apps/api/src/organization/dto/update-assigned-organization-roles.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { IsArray, IsString } from 'class-validator' 8 | 9 | @ApiSchema({ name: 'UpdateAssignedOrganizationRoles' }) 10 | export class UpdateAssignedOrganizationRolesDto { 11 | @ApiProperty({ 12 | description: 'Array of role IDs', 13 | type: [String], 14 | }) 15 | @IsArray() 16 | @IsString({ each: true }) 17 | roleIds: string[] 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/organization/dto/update-organization-member-role.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { IsEnum } from 'class-validator' 8 | import { OrganizationMemberRole } from '../enums/organization-member-role.enum' 9 | 10 | @ApiSchema({ name: 'UpdateOrganizationMemberRole' }) 11 | export class UpdateOrganizationMemberRoleDto { 12 | @ApiProperty({ 13 | description: 'Organization member role', 14 | enum: OrganizationMemberRole, 15 | }) 16 | @IsEnum(OrganizationMemberRole) 17 | role: OrganizationMemberRole 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/organization/enums/organization-invitation-status.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum OrganizationInvitationStatus { 7 | PENDING = 'pending', 8 | ACCEPTED = 'accepted', 9 | DECLINED = 'declined', 10 | CANCELLED = 'cancelled', 11 | } 12 | -------------------------------------------------------------------------------- /apps/api/src/organization/enums/organization-member-role.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum OrganizationMemberRole { 7 | OWNER = 'owner', 8 | MEMBER = 'member', 9 | } 10 | -------------------------------------------------------------------------------- /apps/api/src/organization/events/organization-invitation-accepted.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { EntityManager } from 'typeorm' 7 | import { OrganizationMemberRole } from '../enums/organization-member-role.enum' 8 | import { OrganizationRole } from '../entities/organization-role.entity' 9 | 10 | export class OrganizationInvitationAcceptedEvent { 11 | constructor( 12 | public readonly entityManager: EntityManager, 13 | public readonly organizationId: string, 14 | public readonly userId: string, 15 | public readonly role: OrganizationMemberRole, 16 | public readonly assignedRoles: OrganizationRole[], 17 | ) {} 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/organization/events/organization-invitation-created.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export class OrganizationInvitationCreatedEvent { 7 | constructor( 8 | public readonly organizationName: string, 9 | public readonly invitedBy: string, 10 | public readonly inviteeEmail: string, 11 | public readonly invitationId: string, 12 | public readonly expiresAt: Date, 13 | ) {} 14 | } 15 | -------------------------------------------------------------------------------- /apps/api/src/organization/events/organization-suspended-workspace-stopped.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export class OrganizationSuspendedWorkspaceStoppedEvent { 7 | constructor(public readonly workspaceId: string) {} 8 | } 9 | -------------------------------------------------------------------------------- /apps/api/src/team/dto/create-team.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export class CreateTeamDto { 7 | name: string 8 | } 9 | -------------------------------------------------------------------------------- /apps/api/src/team/team.entity.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Team } from './team.entity' 7 | 8 | describe('Team', () => { 9 | it('should be defined', () => { 10 | expect(new Team()).toBeDefined() 11 | }) 12 | }) 13 | -------------------------------------------------------------------------------- /apps/api/src/team/team.entity.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm' 7 | 8 | @Entity() 9 | export class Team { 10 | @PrimaryGeneratedColumn('uuid') 11 | id: string 12 | 13 | @Column() 14 | name: string 15 | } 16 | -------------------------------------------------------------------------------- /apps/api/src/team/team.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Module } from '@nestjs/common' 7 | import { TeamService } from './team.service' 8 | import { TypeOrmModule } from '@nestjs/typeorm' 9 | import { Team } from './team.entity' 10 | 11 | @Module({ 12 | imports: [TypeOrmModule.forFeature([Team])], 13 | providers: [TeamService], 14 | }) 15 | export class TeamModule {} 16 | -------------------------------------------------------------------------------- /apps/api/src/usage/usage.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Module } from '@nestjs/common' 7 | import { TypeOrmModule } from '@nestjs/typeorm' 8 | import { WorkspaceUsagePeriod } from './entities/workspace-usage-period.entity' 9 | import { UsageService } from './services/usage.service' 10 | import { RedisLockProvider } from '../workspace/common/redis-lock.provider' 11 | 12 | @Module({ 13 | imports: [TypeOrmModule.forFeature([WorkspaceUsagePeriod])], 14 | providers: [UsageService, RedisLockProvider], 15 | exports: [UsageService], 16 | }) 17 | export class UsageModule {} 18 | -------------------------------------------------------------------------------- /apps/api/src/user/constants/acount-provider-display-name.constant.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { AccountProvider } from '../enums/account-provider.enum' 7 | 8 | export const ACCOUNT_PROVIDER_DISPLAY_NAME: Record = { 9 | [AccountProvider.GOOGLE]: 'Google', 10 | [AccountProvider.GITHUB]: 'GitHub', 11 | } 12 | -------------------------------------------------------------------------------- /apps/api/src/user/constants/user-events.constant.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const UserEvents = { 7 | CREATED: 'user.created', 8 | DELETED: 'user.deleted', 9 | EMAIL_VERIFIED: 'user.email-verified', 10 | } as const 11 | -------------------------------------------------------------------------------- /apps/api/src/user/dto/account-provider.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { IsString } from 'class-validator' 8 | 9 | @ApiSchema({ name: 'AccountProvider' }) 10 | export class AccountProviderDto { 11 | @ApiProperty() 12 | @IsString() 13 | name: string 14 | 15 | @ApiProperty() 16 | @IsString() 17 | displayName: string 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/user/dto/user-public-key.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { UserPublicKey } from '../user.entity' 8 | 9 | @ApiSchema({ name: 'UserPublicKey' }) 10 | export class UserPublicKeyDto { 11 | @ApiProperty({ 12 | description: 'Public key', 13 | }) 14 | key: string 15 | 16 | @ApiProperty({ 17 | description: 'Key name', 18 | }) 19 | name: string 20 | 21 | static fromUserPublicKey(publicKey: UserPublicKey): UserPublicKeyDto { 22 | const dto: UserPublicKeyDto = { 23 | key: publicKey.key, 24 | name: publicKey.name, 25 | } 26 | 27 | return dto 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /apps/api/src/user/enums/account-provider.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum AccountProvider { 7 | GOOGLE = 'google-oauth2', 8 | GITHUB = 'github', 9 | } 10 | -------------------------------------------------------------------------------- /apps/api/src/user/enums/system-role.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum SystemRole { 7 | ADMIN = 'admin', 8 | USER = 'user', 9 | } 10 | -------------------------------------------------------------------------------- /apps/api/src/user/events/user-created.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { EntityManager } from 'typeorm' 7 | import { CreateOrganizationQuotaDto } from '../../organization/dto/create-organization-quota.dto' 8 | 9 | export class UserCreatedEvent { 10 | constructor( 11 | public readonly entityManager: EntityManager, 12 | public readonly userId: string, 13 | public readonly email?: string, 14 | public readonly personalOrganizationQuota?: CreateOrganizationQuotaDto, 15 | public readonly emailVerified?: boolean, 16 | ) {} 17 | } 18 | -------------------------------------------------------------------------------- /apps/api/src/user/events/user-deleted.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { EntityManager } from 'typeorm' 7 | 8 | export class UserDeletedEvent { 9 | constructor( 10 | public readonly entityManager: EntityManager, 11 | public readonly userId: string, 12 | ) {} 13 | } 14 | -------------------------------------------------------------------------------- /apps/api/src/user/events/user-email-verified.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { EntityManager } from 'typeorm' 7 | 8 | export class UserEmailVerifiedEvent { 9 | constructor( 10 | public readonly entityManager: EntityManager, 11 | public readonly userId: string, 12 | ) {} 13 | } 14 | -------------------------------------------------------------------------------- /apps/api/src/user/user.entity.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { User } from './user.entity' 7 | 8 | describe('User', () => { 9 | it('should be defined', () => { 10 | expect(new User()).toBeDefined() 11 | }) 12 | }) 13 | -------------------------------------------------------------------------------- /apps/api/src/user/user.module.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Module } from '@nestjs/common' 7 | import { UserController } from './user.controller' 8 | import { UserService } from './user.service' 9 | import { TypeOrmModule } from '@nestjs/typeorm' 10 | import { User } from './user.entity' 11 | 12 | @Module({ 13 | imports: [TypeOrmModule.forFeature([User])], 14 | controllers: [UserController], 15 | providers: [UserService], 16 | exports: [UserService], 17 | }) 18 | export class UserModule {} 19 | -------------------------------------------------------------------------------- /apps/api/src/workspace/constants/image-events.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const ImageEvents = { 7 | CREATED: 'image.created', 8 | STATE_UPDATED: 'image.state.updated', 9 | ENABLED_TOGGLED: 'image.enabled.toggled', 10 | REMOVED: 'image.removed', 11 | } as const 12 | -------------------------------------------------------------------------------- /apps/api/src/workspace/constants/volume-events.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const VolumeEvents = { 7 | CREATED: 'volume.created', 8 | STATE_UPDATED: 'volume.state.updated', 9 | LAST_USED_AT_UPDATED: 'volume.lastUsedAt.updated', 10 | } as const 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/constants/warmpool-events.constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const WarmPoolEvents = { 7 | TOPUP_REQUESTED: 'warmpool.topup-requested', 8 | } as const 9 | -------------------------------------------------------------------------------- /apps/api/src/workspace/constants/workspace-events.constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const WorkspaceEvents = { 7 | ARCHIVED: 'workspace.archived', 8 | STATE_UPDATED: 'workspace.state.updated', 9 | DESIRED_STATE_UPDATED: 'workspace.desired-state.updated', 10 | CREATED: 'workspace.created', 11 | STARTED: 'workspace.started', 12 | STOPPED: 'workspace.stopped', 13 | DESTROYED: 'workspace.destroyed', 14 | RESIZED: 'workspace.resized', 15 | PUBLIC_STATUS_UPDATED: 'workspace.public-status.updated', 16 | ORGANIZATION_UPDATED: 'workspace.organization.updated', 17 | SNAPSHOT_CREATED: 'workspace.snapshot.created', 18 | } as const 19 | -------------------------------------------------------------------------------- /apps/api/src/workspace/constants/workspace.constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const WORKSPACE_WARM_POOL_UNASSIGNED_ORGANIZATION = '00000000-0000-0000-0000-000000000000' 7 | -------------------------------------------------------------------------------- /apps/api/src/workspace/decorators/workspace.decorator.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { createParamDecorator, ExecutionContext } from '@nestjs/common' 7 | 8 | export const Workspace = createParamDecorator((data: unknown, ctx: ExecutionContext) => { 9 | const request = ctx.switchToHttp().getRequest() 10 | return request.workspace 11 | }) 12 | -------------------------------------------------------------------------------- /apps/api/src/workspace/dto/build-image.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { IsNotEmpty, IsObject, IsString } from 'class-validator' 8 | import { CreateBuildInfoDto } from './create-build-info.dto' 9 | 10 | @ApiSchema({ name: 'BuildImage' }) 11 | export class BuildImageDto { 12 | @ApiProperty({ 13 | description: 'The name of the image to build', 14 | example: 'my-custom-image:1.0.0', 15 | }) 16 | @IsString() 17 | @IsNotEmpty() 18 | name: string 19 | 20 | @ApiProperty({ 21 | description: 'Build information for the image', 22 | type: CreateBuildInfoDto, 23 | }) 24 | @IsObject() 25 | buildInfo: CreateBuildInfoDto 26 | } 27 | -------------------------------------------------------------------------------- /apps/api/src/workspace/dto/create-volume.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { IsString } from 'class-validator' 8 | 9 | @ApiSchema({ name: 'CreateVolume' }) 10 | export class CreateVolumeDto { 11 | @ApiProperty() 12 | @IsString() 13 | name?: string 14 | } 15 | -------------------------------------------------------------------------------- /apps/api/src/workspace/dto/paginated-images.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty } from '@nestjs/swagger' 7 | import { ImageDto } from './image.dto' 8 | 9 | export class PaginatedImagesDto { 10 | @ApiProperty({ type: [ImageDto] }) 11 | items: ImageDto[] 12 | 13 | @ApiProperty() 14 | total: number 15 | 16 | @ApiProperty() 17 | page: number 18 | 19 | @ApiProperty() 20 | totalPages: number 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/workspace/dto/port-preview-url.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { IsString } from 'class-validator' 8 | 9 | @ApiSchema({ name: 'PortPreviewUrl' }) 10 | export class PortPreviewUrlDto { 11 | @ApiProperty({ 12 | description: 'Preview url', 13 | example: 'https://123456-myworkspace.node.com', 14 | }) 15 | @IsString() 16 | url: string 17 | 18 | @ApiProperty({ 19 | description: 'Access token', 20 | example: 'ul67qtv-jl6wb9z5o3eii-ljqt9qed6l', 21 | }) 22 | @IsString() 23 | token: string 24 | } 25 | -------------------------------------------------------------------------------- /apps/api/src/workspace/dto/resize.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiSchema } from '@nestjs/swagger' 7 | import { IsNumber } from 'class-validator' 8 | 9 | @ApiSchema({ name: 'ResizeQuota' }) 10 | export class ResizeDto { 11 | @IsNumber() 12 | cpu: number 13 | 14 | @IsNumber() 15 | gpu: number 16 | 17 | @IsNumber() 18 | memory: number 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/workspace/dto/toggle-state.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { IsBoolean } from 'class-validator' 8 | 9 | @ApiSchema({ name: 'ToggleState' }) 10 | export class ToggleStateDto { 11 | @ApiProperty({ 12 | description: 'Enable or disable the image/tag', 13 | example: true, 14 | }) 15 | @IsBoolean() 16 | enabled: boolean 17 | } 18 | -------------------------------------------------------------------------------- /apps/api/src/workspace/dto/update-image.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | import { IsBoolean } from 'class-validator' 8 | 9 | @ApiSchema({ name: 'SetImageGeneralStatus' }) 10 | export class SetImageGeneralStatusDto { 11 | @ApiProperty({ 12 | description: 'Whether the image is general', 13 | example: true, 14 | }) 15 | @IsBoolean() 16 | general: boolean 17 | } 18 | -------------------------------------------------------------------------------- /apps/api/src/workspace/dto/upload-file.dto.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiProperty, ApiSchema } from '@nestjs/swagger' 7 | 8 | @ApiSchema({ name: 'UploadFile' }) 9 | export class UploadFileDto { 10 | @ApiProperty({ type: 'string', format: 'binary' }) 11 | file: any 12 | 13 | @ApiProperty() 14 | path: string 15 | } 16 | -------------------------------------------------------------------------------- /apps/api/src/workspace/entities/node.entity.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Node } from './node.entity' 7 | 8 | describe('Node', () => { 9 | it('should be defined', () => { 10 | expect(new Node()).toBeDefined() 11 | }) 12 | }) 13 | -------------------------------------------------------------------------------- /apps/api/src/workspace/entities/volume.entity.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Volume } from './volume.entity' 7 | 8 | describe('Volume', () => { 9 | it('should be defined', () => { 10 | expect(new Volume()).toBeDefined() 11 | }) 12 | }) 13 | -------------------------------------------------------------------------------- /apps/api/src/workspace/entities/workspace.entity.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from './workspace.entity' 7 | 8 | describe('Workspace', () => { 9 | it('should be defined', () => { 10 | expect(new Workspace()).toBeDefined() 11 | }) 12 | }) 13 | -------------------------------------------------------------------------------- /apps/api/src/workspace/enums/image-node-state.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum ImageNodeState { 7 | PULLING_IMAGE = 'pulling_image', 8 | BUILDING_IMAGE = 'building_image', 9 | READY = 'ready', 10 | ERROR = 'error', 11 | REMOVING = 'removing', 12 | } 13 | -------------------------------------------------------------------------------- /apps/api/src/workspace/enums/image-state.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum ImageState { 7 | BUILD_PENDING = 'build_pending', 8 | BUILDING = 'building', 9 | PENDING = 'pending', 10 | PULLING_IMAGE = 'pulling_image', 11 | PENDING_VALIDATION = 'pending_validation', 12 | VALIDATING = 'validating', 13 | ACTIVE = 'active', 14 | ERROR = 'error', 15 | REMOVING = 'removing', 16 | } 17 | -------------------------------------------------------------------------------- /apps/api/src/workspace/enums/node-region.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum NodeRegion { 7 | EU = 'eu', 8 | US = 'us', 9 | ASIA = 'asia', 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/enums/node-state.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum NodeState { 7 | INITIALIZING = 'initializing', 8 | READY = 'ready', 9 | DISABLED = 'disabled', 10 | DECOMMISSIONED = 'decommissioned', 11 | UNRESPONSIVE = 'unresponsive', 12 | } 13 | -------------------------------------------------------------------------------- /apps/api/src/workspace/enums/snapshot-state.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum SnapshotState { 7 | NONE = 'None', 8 | PENDING = 'Pending', 9 | IN_PROGRESS = 'InProgress', 10 | COMPLETED = 'Completed', 11 | ERROR = 'Error', 12 | } 13 | -------------------------------------------------------------------------------- /apps/api/src/workspace/enums/volume-state.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum VolumeState { 7 | CREATING = 'creating', 8 | READY = 'ready', 9 | PENDING_CREATE = 'pending_create', 10 | PENDING_DELETE = 'pending_delete', 11 | DELETING = 'deleting', 12 | DELETED = 'deleted', 13 | ERROR = 'error', 14 | } 15 | -------------------------------------------------------------------------------- /apps/api/src/workspace/enums/workspace-class.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum WorkspaceClass { 7 | SMALL = 'small', 8 | MEDIUM = 'medium', 9 | LARGE = 'large', 10 | } 11 | 12 | export const WorkspaceClassData = { 13 | [WorkspaceClass.SMALL]: { 14 | cpu: 4, 15 | memory: 8, 16 | disk: 30, 17 | }, 18 | [WorkspaceClass.MEDIUM]: { 19 | cpu: 8, 20 | memory: 16, 21 | disk: 60, 22 | }, 23 | [WorkspaceClass.LARGE]: { 24 | cpu: 12, 25 | memory: 24, 26 | disk: 90, 27 | }, 28 | } 29 | -------------------------------------------------------------------------------- /apps/api/src/workspace/enums/workspace-desired-state.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum WorkspaceDesiredState { 7 | DESTROYED = 'destroyed', 8 | STARTED = 'started', 9 | STOPPED = 'stopped', 10 | RESIZED = 'resized', 11 | ARCHIVED = 'archived', 12 | } 13 | -------------------------------------------------------------------------------- /apps/api/src/workspace/enums/workspace-state.enum.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum WorkspaceState { 7 | CREATING = 'creating', 8 | RESTORING = 'restoring', 9 | DESTROYED = 'destroyed', 10 | DESTROYING = 'destroying', 11 | STARTED = 'started', 12 | STOPPED = 'stopped', 13 | STARTING = 'starting', 14 | STOPPING = 'stopping', 15 | ERROR = 'error', 16 | PENDING_BUILD = 'pending_build', 17 | BUILDING_IMAGE = 'building_image', 18 | UNKNOWN = 'unknown', 19 | PULLING_IMAGE = 'pulling_image', 20 | ARCHIVING = 'archiving', 21 | ARCHIVED = 'archived', 22 | } 23 | -------------------------------------------------------------------------------- /apps/api/src/workspace/errors/node-not-ready.error.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export class NodeNotReadyError extends Error { 7 | constructor(message: string) { 8 | super(message) 9 | this.name = 'NodeNotReadyError' 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/image-created.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Image } from '../entities/image.entity' 7 | 8 | export class ImageCreatedEvent { 9 | constructor(public readonly image: Image) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/image-enabled-toggled.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Image } from '../entities/image.entity' 7 | 8 | export class ImageEnabledToggledEvent { 9 | constructor(public readonly image: Image) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/image-removed.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Image } from '../entities/image.entity' 7 | 8 | export class ImageRemovedEvent { 9 | constructor(public readonly image: Image) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/image-state-updated.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Image } from '../entities/image.entity' 7 | import { ImageState } from '../enums/image-state.enum' 8 | 9 | export class ImageStateUpdatedEvent { 10 | constructor( 11 | public readonly image: Image, 12 | public readonly oldState: ImageState, 13 | public readonly newState: ImageState, 14 | ) {} 15 | } 16 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/volume-created.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Volume } from '../entities/volume.entity' 7 | 8 | export class VolumeCreatedEvent { 9 | constructor(public readonly volume: Volume) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/volume-last-used-at-updated.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Volume } from '../entities/volume.entity' 7 | 8 | export class VolumeLastUsedAtUpdatedEvent { 9 | constructor(public readonly volume: Volume) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/volume-state-updated.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Volume } from '../entities/volume.entity' 7 | import { VolumeState } from '../enums/volume-state.enum' 8 | 9 | export class VolumeStateUpdatedEvent { 10 | constructor( 11 | public readonly volume: Volume, 12 | public readonly oldState: VolumeState, 13 | public readonly newState: VolumeState, 14 | ) {} 15 | } 16 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/warmpool-topup-requested.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { WarmPool } from '../entities/warm-pool.entity' 7 | 8 | export class WarmPoolTopUpRequested { 9 | constructor(public readonly warmPool: WarmPool) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/workspace-archived.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from '../entities/workspace.entity' 7 | 8 | export class WorkspaceArchivedEvent { 9 | constructor(public readonly workspace: Workspace) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/workspace-create.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from '../entities/workspace.entity' 7 | 8 | export class WorkspaceCreatedEvent { 9 | constructor(public readonly workspace: Workspace) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/workspace-desired-state-updated.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from '../entities/workspace.entity' 7 | import { WorkspaceDesiredState } from '../enums/workspace-desired-state.enum' 8 | 9 | export class WorkspaceDesiredStateUpdatedEvent { 10 | constructor( 11 | public readonly workspace: Workspace, 12 | public readonly oldDesiredState: WorkspaceDesiredState, 13 | public readonly newDesiredState: WorkspaceDesiredState, 14 | ) {} 15 | } 16 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/workspace-destroyed.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from '../entities/workspace.entity' 7 | 8 | export class WorkspaceDestroyedEvent { 9 | constructor(public readonly workspace: Workspace) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/workspace-organization-updated.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from '../entities/workspace.entity' 7 | 8 | export class WorkspaceOrganizationUpdatedEvent { 9 | constructor( 10 | public readonly workspace: Workspace, 11 | public readonly oldOrganizationId: string, 12 | public readonly newOrganizationId: string, 13 | ) {} 14 | } 15 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/workspace-public-status-updated.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from '../entities/workspace.entity' 7 | 8 | export class WorkspacePublicStatusUpdatedEvent { 9 | constructor( 10 | public readonly workspace: Workspace, 11 | public readonly oldStatus: boolean, 12 | public readonly newStatus: boolean, 13 | ) {} 14 | } 15 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/workspace-snapshot-created.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from '../entities/workspace.entity' 7 | 8 | export class WorkspaceSnapshotCreatedEvent { 9 | constructor(public readonly workspace: Workspace) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/workspace-started.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from '../entities/workspace.entity' 7 | 8 | export class WorkspaceStartedEvent { 9 | constructor(public readonly workspace: Workspace) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/workspace-state-updated.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from '../entities/workspace.entity' 7 | import { WorkspaceState } from '../enums/workspace-state.enum' 8 | 9 | export class WorkspaceStateUpdatedEvent { 10 | constructor( 11 | public readonly workspace: Workspace, 12 | public readonly oldState: WorkspaceState, 13 | public readonly newState: WorkspaceState, 14 | ) {} 15 | } 16 | -------------------------------------------------------------------------------- /apps/api/src/workspace/events/workspace-stopped.event.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Workspace } from '../entities/workspace.entity' 7 | 8 | export class WorkspaceStoppedEvent { 9 | constructor(public readonly workspace: Workspace) {} 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/workspace/provisioner/workspace.provisioner.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Injectable } from '@nestjs/common' 7 | import { InjectRepository } from '@nestjs/typeorm' 8 | import { Workspace } from '../entities/workspace.entity' 9 | import { Repository } from 'typeorm' 10 | 11 | @Injectable() 12 | export class WorkspaceProvisioner { 13 | constructor( 14 | @InjectRepository(Workspace) 15 | private readonly workspaceRepository: Repository, 16 | ) {} 17 | } 18 | -------------------------------------------------------------------------------- /apps/api/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node"], 7 | "experimentalDecorators": true, 8 | "emitDecoratorMetadata": true, 9 | "target": "es2022" 10 | }, 11 | "include": ["src/**/*.ts"], 12 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] 13 | } 14 | -------------------------------------------------------------------------------- /apps/api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ], 13 | "compilerOptions": { 14 | "esModuleInterop": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/api/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "moduleResolution": "node10", 7 | "types": ["jest", "node"] 8 | }, 9 | "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/cli/.env.example: -------------------------------------------------------------------------------- 1 | DAYTONA_API_URL=https://app.daytona.io/api 2 | DAYTONA_AUTH0_DOMAIN= 3 | DAYTONA_AUTH0_CLIENT_ID= 4 | DAYTONA_AUTH0_CLIENT_SECRET= 5 | DAYTONA_AUTH0_CALLBACK_PORT= 6 | DAYTONA_AUTH0_AUDIENCE= 7 | -------------------------------------------------------------------------------- /apps/cli/cmd/common/aliases.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package common 5 | 6 | var commandAliases = map[string][]string{ 7 | "create": {"add", "new"}, 8 | "delete": {"remove", "rm"}, 9 | "update": {"set"}, 10 | "install": {"i"}, 11 | "uninstall": {"u"}, 12 | "info": {"view", "inspect"}, 13 | "code": {"open"}, 14 | "logs": {"log"}, 15 | "forward": {"fwd"}, 16 | "list": {"ls"}, 17 | } 18 | 19 | func GetAliases(cmd string) []string { 20 | if aliases, exists := commandAliases[cmd]; exists { 21 | return aliases 22 | } 23 | return nil 24 | } 25 | -------------------------------------------------------------------------------- /apps/cli/cmd/common/validate.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package common 5 | 6 | import ( 7 | "fmt" 8 | "strings" 9 | ) 10 | 11 | func ValidateImageName(imageName string) error { 12 | parts := strings.Split(imageName, ":") 13 | if len(parts) != 2 { 14 | return fmt.Errorf("invalid image format: must contain exactly one colon (e.g., 'myimage:1.0')") 15 | } 16 | if parts[1] == "latest" { 17 | return fmt.Errorf("tag 'latest' not allowed, please use a specific version tag") 18 | } 19 | 20 | return nil 21 | } 22 | -------------------------------------------------------------------------------- /apps/cli/cmd/image/image.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package image 5 | 6 | import ( 7 | "github.com/daytonaio/daytona/cli/internal" 8 | "github.com/spf13/cobra" 9 | ) 10 | 11 | var ImagesCmd = &cobra.Command{ 12 | Use: "image", 13 | Short: "Manage Daytona images", 14 | Long: "Commands for managing Daytona images", 15 | Aliases: []string{"images"}, 16 | GroupID: internal.SANDBOX_GROUP, 17 | } 18 | 19 | func init() { 20 | ImagesCmd.AddCommand(ListCmd) 21 | ImagesCmd.AddCommand(CreateCmd) 22 | ImagesCmd.AddCommand(PushCmd) 23 | ImagesCmd.AddCommand(DeleteCmd) 24 | ImagesCmd.AddCommand(BuildCmd) 25 | } 26 | -------------------------------------------------------------------------------- /apps/cli/cmd/mcp/agents/common.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package agents 5 | 6 | var mcpLogFileName string = "daytona-mcp-server.log" 7 | -------------------------------------------------------------------------------- /apps/cli/cmd/mcp/mcp.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package mcp 5 | 6 | import ( 7 | "github.com/spf13/cobra" 8 | ) 9 | 10 | var MCPCmd = &cobra.Command{ 11 | Use: "mcp", 12 | Short: "Manage Daytona MCP Server", 13 | Long: "Commands for managing Daytona MCP Server", 14 | } 15 | 16 | func init() { 17 | MCPCmd.AddCommand(InitCmd) 18 | MCPCmd.AddCommand(StartCmd) 19 | MCPCmd.AddCommand(ConfigCmd) 20 | } 21 | -------------------------------------------------------------------------------- /apps/cli/cmd/sandbox/sandbox.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package sandbox 5 | 6 | import ( 7 | "github.com/daytonaio/daytona/cli/internal" 8 | "github.com/spf13/cobra" 9 | ) 10 | 11 | var SandboxCmd = &cobra.Command{ 12 | Use: "sandbox", 13 | Short: "Manage Daytona sandboxes", 14 | Long: "Commands for managing Daytona sandboxes", 15 | Aliases: []string{"sandboxes"}, 16 | GroupID: internal.SANDBOX_GROUP, 17 | } 18 | 19 | func init() { 20 | SandboxCmd.AddCommand(ListCmd) 21 | SandboxCmd.AddCommand(CreateCmd) 22 | SandboxCmd.AddCommand(InfoCmd) 23 | SandboxCmd.AddCommand(DeleteCmd) 24 | SandboxCmd.AddCommand(StartCmd) 25 | SandboxCmd.AddCommand(StopCmd) 26 | } 27 | -------------------------------------------------------------------------------- /apps/cli/cmd/version.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package cmd 5 | 6 | import ( 7 | "fmt" 8 | 9 | "github.com/daytonaio/daytona/cli/internal" 10 | "github.com/spf13/cobra" 11 | ) 12 | 13 | var VersionCmd = &cobra.Command{ 14 | Use: "version", 15 | Short: "Print the version number", 16 | RunE: func(cmd *cobra.Command, args []string) error { 17 | fmt.Println("Daytona CLI version", internal.Version) 18 | return nil 19 | }, 20 | } 21 | -------------------------------------------------------------------------------- /apps/cli/cmd/volume/volume.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package volume 5 | 6 | import ( 7 | "github.com/daytonaio/daytona/cli/internal" 8 | "github.com/spf13/cobra" 9 | ) 10 | 11 | var VolumeCmd = &cobra.Command{ 12 | Use: "volume", 13 | Short: "Manage Daytona volumes", 14 | Long: "Commands for managing Daytona volumes", 15 | Aliases: []string{"volumes"}, 16 | GroupID: internal.SANDBOX_GROUP, 17 | } 18 | 19 | func init() { 20 | VolumeCmd.AddCommand(ListCmd) 21 | VolumeCmd.AddCommand(CreateCmd) 22 | VolumeCmd.AddCommand(GetCmd) 23 | VolumeCmd.AddCommand(DeleteCmd) 24 | } 25 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_autocomplete.md: -------------------------------------------------------------------------------- 1 | ## daytona autocomplete 2 | 3 | Adds a completion script for your shell environment 4 | 5 | ``` 6 | daytona autocomplete [bash|zsh|fish|powershell] [flags] 7 | ``` 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona](daytona.md) - Daytona CLI 18 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_docs.md: -------------------------------------------------------------------------------- 1 | ## daytona docs 2 | 3 | Opens the Daytona documentation in your default browser. 4 | 5 | ``` 6 | daytona docs [flags] 7 | ``` 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona](daytona.md) - Daytona CLI 18 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_image.md: -------------------------------------------------------------------------------- 1 | ## daytona image 2 | 3 | Manage Daytona images 4 | 5 | ### Synopsis 6 | 7 | Commands for managing Daytona images 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona](daytona.md) - Daytona CLI 18 | - [daytona image build](daytona_image_build.md) - Build an image from a Dockerfile 19 | - [daytona image create](daytona_image_create.md) - Create an image 20 | - [daytona image delete](daytona_image_delete.md) - Delete an image 21 | - [daytona image list](daytona_image_list.md) - List all images 22 | - [daytona image push](daytona_image_push.md) - Push local image 23 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_image_build.md: -------------------------------------------------------------------------------- 1 | ## daytona image build 2 | 3 | Build an image from a Dockerfile 4 | 5 | ``` 6 | daytona image build [IMAGE] [flags] 7 | ``` 8 | 9 | ### Options 10 | 11 | ``` 12 | -c, --context stringArray Files or directories to include in the build context (can be specified multiple times) 13 | -f, --dockerfile string Path to Dockerfile to build 14 | ``` 15 | 16 | ### Options inherited from parent commands 17 | 18 | ``` 19 | --help help for daytona 20 | ``` 21 | 22 | ### SEE ALSO 23 | 24 | - [daytona image](daytona_image.md) - Manage Daytona images 25 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_image_create.md: -------------------------------------------------------------------------------- 1 | ## daytona image create 2 | 3 | Create an image 4 | 5 | ``` 6 | daytona image create [IMAGE] [flags] 7 | ``` 8 | 9 | ### Options 10 | 11 | ``` 12 | -e, --entrypoint string The entrypoint command for the image 13 | ``` 14 | 15 | ### Options inherited from parent commands 16 | 17 | ``` 18 | --help help for daytona 19 | ``` 20 | 21 | ### SEE ALSO 22 | 23 | - [daytona image](daytona_image.md) - Manage Daytona images 24 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_image_delete.md: -------------------------------------------------------------------------------- 1 | ## daytona image delete 2 | 3 | Delete an image 4 | 5 | ``` 6 | daytona image delete [IMAGE_ID] [flags] 7 | ``` 8 | 9 | ### Options 10 | 11 | ``` 12 | -a, --all Delete all images 13 | ``` 14 | 15 | ### Options inherited from parent commands 16 | 17 | ``` 18 | --help help for daytona 19 | ``` 20 | 21 | ### SEE ALSO 22 | 23 | - [daytona image](daytona_image.md) - Manage Daytona images 24 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_image_list.md: -------------------------------------------------------------------------------- 1 | ## daytona image list 2 | 3 | List all images 4 | 5 | ### Synopsis 6 | 7 | List all available Daytona images 8 | 9 | ``` 10 | daytona image list [flags] 11 | ``` 12 | 13 | ### Options 14 | 15 | ``` 16 | -f, --format string Output format. Must be one of (yaml, json) 17 | ``` 18 | 19 | ### Options inherited from parent commands 20 | 21 | ``` 22 | --help help for daytona 23 | ``` 24 | 25 | ### SEE ALSO 26 | 27 | - [daytona image](daytona_image.md) - Manage Daytona images 28 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_image_push.md: -------------------------------------------------------------------------------- 1 | ## daytona image push 2 | 3 | Push local image 4 | 5 | ### Synopsis 6 | 7 | Push local image or build and push from Dockerfile. If building locally, the image will be built with an AMD architecture. 8 | 9 | ``` 10 | daytona image push [IMAGE] [flags] 11 | ``` 12 | 13 | ### Options 14 | 15 | ``` 16 | -c, --context string Build context directory (defaults to Dockerfile directory) 17 | -f, --dockerfile string Path to Dockerfile to build before pushing 18 | -e, --entrypoint string The entrypoint command for the image 19 | ``` 20 | 21 | ### Options inherited from parent commands 22 | 23 | ``` 24 | --help help for daytona 25 | ``` 26 | 27 | ### SEE ALSO 28 | 29 | - [daytona image](daytona_image.md) - Manage Daytona images 30 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_login.md: -------------------------------------------------------------------------------- 1 | ## daytona login 2 | 3 | Log in to Daytona 4 | 5 | ``` 6 | daytona login [flags] 7 | ``` 8 | 9 | ### Options 10 | 11 | ``` 12 | --api-key string API key to use for authentication 13 | ``` 14 | 15 | ### Options inherited from parent commands 16 | 17 | ``` 18 | --help help for daytona 19 | ``` 20 | 21 | ### SEE ALSO 22 | 23 | - [daytona](daytona.md) - Daytona CLI 24 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_logout.md: -------------------------------------------------------------------------------- 1 | ## daytona logout 2 | 3 | Logout from Daytona 4 | 5 | ``` 6 | daytona logout [flags] 7 | ``` 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona](daytona.md) - Daytona CLI 18 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_mcp.md: -------------------------------------------------------------------------------- 1 | ## daytona mcp 2 | 3 | Manage Daytona MCP Server 4 | 5 | ### Synopsis 6 | 7 | Commands for managing Daytona MCP Server 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona](daytona.md) - Daytona CLI 18 | - [daytona mcp config](daytona_mcp_config.md) - Outputs JSON configuration for Daytona MCP Server 19 | - [daytona mcp init](daytona_mcp_init.md) - Initialize Daytona MCP Server with an agent (currently supported: claude, windsurf, cursor) 20 | - [daytona mcp start](daytona_mcp_start.md) - Start Daytona MCP Server 21 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_mcp_config.md: -------------------------------------------------------------------------------- 1 | ## daytona mcp config 2 | 3 | Outputs JSON configuration for Daytona MCP Server 4 | 5 | ``` 6 | daytona mcp config [AGENT_NAME] [flags] 7 | ``` 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona mcp](daytona_mcp.md) - Manage Daytona MCP Server 18 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_mcp_init.md: -------------------------------------------------------------------------------- 1 | ## daytona mcp init 2 | 3 | Initialize Daytona MCP Server with an agent (currently supported: claude, windsurf, cursor) 4 | 5 | ``` 6 | daytona mcp init [AGENT_NAME] [flags] 7 | ``` 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona mcp](daytona_mcp.md) - Manage Daytona MCP Server 18 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_mcp_start.md: -------------------------------------------------------------------------------- 1 | ## daytona mcp start 2 | 3 | Start Daytona MCP Server 4 | 5 | ``` 6 | daytona mcp start [flags] 7 | ``` 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona mcp](daytona_mcp.md) - Manage Daytona MCP Server 18 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_organization.md: -------------------------------------------------------------------------------- 1 | ## daytona organization 2 | 3 | Manage Daytona organizations 4 | 5 | ### Synopsis 6 | 7 | Commands for managing Daytona organizations 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona](daytona.md) - Daytona CLI 18 | - [daytona organization create](daytona_organization_create.md) - Create a new organization and set it as active 19 | - [daytona organization delete](daytona_organization_delete.md) - Delete an organization 20 | - [daytona organization list](daytona_organization_list.md) - List all organizations 21 | - [daytona organization use](daytona_organization_use.md) - Set active organization 22 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_organization_create.md: -------------------------------------------------------------------------------- 1 | ## daytona organization create 2 | 3 | Create a new organization and set it as active 4 | 5 | ``` 6 | daytona organization create [ORGANIZATION_NAME] [flags] 7 | ``` 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona organization](daytona_organization.md) - Manage Daytona organizations 18 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_organization_delete.md: -------------------------------------------------------------------------------- 1 | ## daytona organization delete 2 | 3 | Delete an organization 4 | 5 | ``` 6 | daytona organization delete [ORGANIZATION] [flags] 7 | ``` 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona organization](daytona_organization.md) - Manage Daytona organizations 18 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_organization_list.md: -------------------------------------------------------------------------------- 1 | ## daytona organization list 2 | 3 | List all organizations 4 | 5 | ``` 6 | daytona organization list [flags] 7 | ``` 8 | 9 | ### Options 10 | 11 | ``` 12 | -f, --format string Output format. Must be one of (yaml, json) 13 | ``` 14 | 15 | ### Options inherited from parent commands 16 | 17 | ``` 18 | --help help for daytona 19 | ``` 20 | 21 | ### SEE ALSO 22 | 23 | - [daytona organization](daytona_organization.md) - Manage Daytona organizations 24 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_organization_use.md: -------------------------------------------------------------------------------- 1 | ## daytona organization use 2 | 3 | Set active organization 4 | 5 | ``` 6 | daytona organization use [ORGANIZATION] [flags] 7 | ``` 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona organization](daytona_organization.md) - Manage Daytona organizations 18 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_sandbox.md: -------------------------------------------------------------------------------- 1 | ## daytona sandbox 2 | 3 | Manage Daytona sandboxes 4 | 5 | ### Synopsis 6 | 7 | Commands for managing Daytona sandboxes 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona](daytona.md) - Daytona CLI 18 | - [daytona sandbox create](daytona_sandbox_create.md) - Create a new sandbox 19 | - [daytona sandbox delete](daytona_sandbox_delete.md) - Delete a sandbox 20 | - [daytona sandbox info](daytona_sandbox_info.md) - Get sandbox info 21 | - [daytona sandbox list](daytona_sandbox_list.md) - List sandboxes 22 | - [daytona sandbox start](daytona_sandbox_start.md) - Start a sandbox 23 | - [daytona sandbox stop](daytona_sandbox_stop.md) - Stop a sandbox 24 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_sandbox_delete.md: -------------------------------------------------------------------------------- 1 | ## daytona sandbox delete 2 | 3 | Delete a sandbox 4 | 5 | ``` 6 | daytona sandbox delete [SANDBOX_ID] [flags] 7 | ``` 8 | 9 | ### Options 10 | 11 | ``` 12 | -a, --all Delete all sandboxes 13 | -f, --force Force delete 14 | ``` 15 | 16 | ### Options inherited from parent commands 17 | 18 | ``` 19 | --help help for daytona 20 | ``` 21 | 22 | ### SEE ALSO 23 | 24 | - [daytona sandbox](daytona_sandbox.md) - Manage Daytona sandboxes 25 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_sandbox_info.md: -------------------------------------------------------------------------------- 1 | ## daytona sandbox info 2 | 3 | Get sandbox info 4 | 5 | ``` 6 | daytona sandbox info [SANDBOX_ID] [flags] 7 | ``` 8 | 9 | ### Options 10 | 11 | ``` 12 | -f, --format string Output format. Must be one of (yaml, json) 13 | -v, --verbose Include verbose output 14 | ``` 15 | 16 | ### Options inherited from parent commands 17 | 18 | ``` 19 | --help help for daytona 20 | ``` 21 | 22 | ### SEE ALSO 23 | 24 | - [daytona sandbox](daytona_sandbox.md) - Manage Daytona sandboxes 25 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_sandbox_list.md: -------------------------------------------------------------------------------- 1 | ## daytona sandbox list 2 | 3 | List sandboxes 4 | 5 | ``` 6 | daytona sandbox list [flags] 7 | ``` 8 | 9 | ### Options 10 | 11 | ``` 12 | -f, --format string Output format. Must be one of (yaml, json) 13 | -v, --verbose Include verbose output 14 | ``` 15 | 16 | ### Options inherited from parent commands 17 | 18 | ``` 19 | --help help for daytona 20 | ``` 21 | 22 | ### SEE ALSO 23 | 24 | - [daytona sandbox](daytona_sandbox.md) - Manage Daytona sandboxes 25 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_sandbox_start.md: -------------------------------------------------------------------------------- 1 | ## daytona sandbox start 2 | 3 | Start a sandbox 4 | 5 | ``` 6 | daytona sandbox start [SANDBOX_ID] [flags] 7 | ``` 8 | 9 | ### Options 10 | 11 | ``` 12 | -a, --all Start all sandboxes 13 | ``` 14 | 15 | ### Options inherited from parent commands 16 | 17 | ``` 18 | --help help for daytona 19 | ``` 20 | 21 | ### SEE ALSO 22 | 23 | - [daytona sandbox](daytona_sandbox.md) - Manage Daytona sandboxes 24 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_sandbox_stop.md: -------------------------------------------------------------------------------- 1 | ## daytona sandbox stop 2 | 3 | Stop a sandbox 4 | 5 | ``` 6 | daytona sandbox stop [SANDBOX_ID] [flags] 7 | ``` 8 | 9 | ### Options 10 | 11 | ``` 12 | -a, --all Stop all sandboxes 13 | ``` 14 | 15 | ### Options inherited from parent commands 16 | 17 | ``` 18 | --help help for daytona 19 | ``` 20 | 21 | ### SEE ALSO 22 | 23 | - [daytona sandbox](daytona_sandbox.md) - Manage Daytona sandboxes 24 | -------------------------------------------------------------------------------- /apps/cli/docs/daytona_version.md: -------------------------------------------------------------------------------- 1 | ## daytona version 2 | 3 | Print the version number 4 | 5 | ``` 6 | daytona version [flags] 7 | ``` 8 | 9 | ### Options inherited from parent commands 10 | 11 | ``` 12 | --help help for daytona 13 | ``` 14 | 15 | ### SEE ALSO 16 | 17 | - [daytona](daytona.md) - Daytona CLI 18 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_autocomplete.yaml: -------------------------------------------------------------------------------- 1 | name: daytona autocomplete 2 | synopsis: Adds a completion script for your shell environment 3 | usage: daytona autocomplete [bash|zsh|fish|powershell] [flags] 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona - Daytona CLI 10 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_docs.yaml: -------------------------------------------------------------------------------- 1 | name: daytona docs 2 | synopsis: Opens the Daytona documentation in your default browser. 3 | usage: daytona docs [flags] 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona - Daytona CLI 10 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_image.yaml: -------------------------------------------------------------------------------- 1 | name: daytona image 2 | synopsis: Manage Daytona images 3 | description: Commands for managing Daytona images 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona - Daytona CLI 10 | - daytona image build - Build an image from a Dockerfile 11 | - daytona image create - Create an image 12 | - daytona image delete - Delete an image 13 | - daytona image list - List all images 14 | - daytona image push - Push local image 15 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_image_build.yaml: -------------------------------------------------------------------------------- 1 | name: daytona image build 2 | synopsis: Build an image from a Dockerfile 3 | usage: daytona image build [IMAGE] [flags] 4 | options: 5 | - name: context 6 | shorthand: c 7 | default_value: '[]' 8 | usage: | 9 | Files or directories to include in the build context (can be specified multiple times) 10 | - name: dockerfile 11 | shorthand: f 12 | usage: Path to Dockerfile to build 13 | inherited_options: 14 | - name: help 15 | default_value: 'false' 16 | usage: help for daytona 17 | see_also: 18 | - daytona image - Manage Daytona images 19 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_image_create.yaml: -------------------------------------------------------------------------------- 1 | name: daytona image create 2 | synopsis: Create an image 3 | usage: daytona image create [IMAGE] [flags] 4 | options: 5 | - name: entrypoint 6 | shorthand: e 7 | usage: The entrypoint command for the image 8 | inherited_options: 9 | - name: help 10 | default_value: 'false' 11 | usage: help for daytona 12 | see_also: 13 | - daytona image - Manage Daytona images 14 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_image_delete.yaml: -------------------------------------------------------------------------------- 1 | name: daytona image delete 2 | synopsis: Delete an image 3 | usage: daytona image delete [IMAGE_ID] [flags] 4 | options: 5 | - name: all 6 | shorthand: a 7 | default_value: 'false' 8 | usage: Delete all images 9 | inherited_options: 10 | - name: help 11 | default_value: 'false' 12 | usage: help for daytona 13 | see_also: 14 | - daytona image - Manage Daytona images 15 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_image_list.yaml: -------------------------------------------------------------------------------- 1 | name: daytona image list 2 | synopsis: List all images 3 | description: List all available Daytona images 4 | usage: daytona image list [flags] 5 | options: 6 | - name: format 7 | shorthand: f 8 | usage: Output format. Must be one of (yaml, json) 9 | inherited_options: 10 | - name: help 11 | default_value: 'false' 12 | usage: help for daytona 13 | see_also: 14 | - daytona image - Manage Daytona images 15 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_image_push.yaml: -------------------------------------------------------------------------------- 1 | name: daytona image push 2 | synopsis: Push local image 3 | description: | 4 | Push local image or build and push from Dockerfile. If building locally, the image will be built with an AMD architecture. 5 | usage: daytona image push [IMAGE] [flags] 6 | options: 7 | - name: context 8 | shorthand: c 9 | usage: Build context directory (defaults to Dockerfile directory) 10 | - name: dockerfile 11 | shorthand: f 12 | usage: Path to Dockerfile to build before pushing 13 | - name: entrypoint 14 | shorthand: e 15 | usage: The entrypoint command for the image 16 | inherited_options: 17 | - name: help 18 | default_value: 'false' 19 | usage: help for daytona 20 | see_also: 21 | - daytona image - Manage Daytona images 22 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_login.yaml: -------------------------------------------------------------------------------- 1 | name: daytona login 2 | synopsis: Log in to Daytona 3 | usage: daytona login [flags] 4 | options: 5 | - name: api-key 6 | usage: API key to use for authentication 7 | inherited_options: 8 | - name: help 9 | default_value: 'false' 10 | usage: help for daytona 11 | see_also: 12 | - daytona - Daytona CLI 13 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_logout.yaml: -------------------------------------------------------------------------------- 1 | name: daytona logout 2 | synopsis: Logout from Daytona 3 | usage: daytona logout [flags] 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona - Daytona CLI 10 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_mcp.yaml: -------------------------------------------------------------------------------- 1 | name: daytona mcp 2 | synopsis: Manage Daytona MCP Server 3 | description: Commands for managing Daytona MCP Server 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona - Daytona CLI 10 | - daytona mcp config - Outputs JSON configuration for Daytona MCP Server 11 | - 'daytona mcp init - Initialize Daytona MCP Server with an agent (currently supported: claude, windsurf, cursor)' 12 | - daytona mcp start - Start Daytona MCP Server 13 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_mcp_config.yaml: -------------------------------------------------------------------------------- 1 | name: daytona mcp config 2 | synopsis: Outputs JSON configuration for Daytona MCP Server 3 | usage: daytona mcp config [AGENT_NAME] [flags] 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona mcp - Manage Daytona MCP Server 10 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_mcp_init.yaml: -------------------------------------------------------------------------------- 1 | name: daytona mcp init 2 | synopsis: | 3 | Initialize Daytona MCP Server with an agent (currently supported: claude, windsurf, cursor) 4 | usage: daytona mcp init [AGENT_NAME] [flags] 5 | inherited_options: 6 | - name: help 7 | default_value: 'false' 8 | usage: help for daytona 9 | see_also: 10 | - daytona mcp - Manage Daytona MCP Server 11 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_mcp_start.yaml: -------------------------------------------------------------------------------- 1 | name: daytona mcp start 2 | synopsis: Start Daytona MCP Server 3 | usage: daytona mcp start [flags] 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona mcp - Manage Daytona MCP Server 10 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_organization.yaml: -------------------------------------------------------------------------------- 1 | name: daytona organization 2 | synopsis: Manage Daytona organizations 3 | description: Commands for managing Daytona organizations 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona - Daytona CLI 10 | - daytona organization create - Create a new organization and set it as active 11 | - daytona organization delete - Delete an organization 12 | - daytona organization list - List all organizations 13 | - daytona organization use - Set active organization 14 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_organization_create.yaml: -------------------------------------------------------------------------------- 1 | name: daytona organization create 2 | synopsis: Create a new organization and set it as active 3 | usage: daytona organization create [ORGANIZATION_NAME] [flags] 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona organization - Manage Daytona organizations 10 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_organization_delete.yaml: -------------------------------------------------------------------------------- 1 | name: daytona organization delete 2 | synopsis: Delete an organization 3 | usage: daytona organization delete [ORGANIZATION] [flags] 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona organization - Manage Daytona organizations 10 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_organization_list.yaml: -------------------------------------------------------------------------------- 1 | name: daytona organization list 2 | synopsis: List all organizations 3 | usage: daytona organization list [flags] 4 | options: 5 | - name: format 6 | shorthand: f 7 | usage: Output format. Must be one of (yaml, json) 8 | inherited_options: 9 | - name: help 10 | default_value: 'false' 11 | usage: help for daytona 12 | see_also: 13 | - daytona organization - Manage Daytona organizations 14 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_organization_use.yaml: -------------------------------------------------------------------------------- 1 | name: daytona organization use 2 | synopsis: Set active organization 3 | usage: daytona organization use [ORGANIZATION] [flags] 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona organization - Manage Daytona organizations 10 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_sandbox.yaml: -------------------------------------------------------------------------------- 1 | name: daytona sandbox 2 | synopsis: Manage Daytona sandboxes 3 | description: Commands for managing Daytona sandboxes 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona - Daytona CLI 10 | - daytona sandbox create - Create a new sandbox 11 | - daytona sandbox delete - Delete a sandbox 12 | - daytona sandbox info - Get sandbox info 13 | - daytona sandbox list - List sandboxes 14 | - daytona sandbox start - Start a sandbox 15 | - daytona sandbox stop - Stop a sandbox 16 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_sandbox_delete.yaml: -------------------------------------------------------------------------------- 1 | name: daytona sandbox delete 2 | synopsis: Delete a sandbox 3 | usage: daytona sandbox delete [SANDBOX_ID] [flags] 4 | options: 5 | - name: all 6 | shorthand: a 7 | default_value: 'false' 8 | usage: Delete all sandboxes 9 | - name: force 10 | shorthand: f 11 | default_value: 'false' 12 | usage: Force delete 13 | inherited_options: 14 | - name: help 15 | default_value: 'false' 16 | usage: help for daytona 17 | see_also: 18 | - daytona sandbox - Manage Daytona sandboxes 19 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_sandbox_info.yaml: -------------------------------------------------------------------------------- 1 | name: daytona sandbox info 2 | synopsis: Get sandbox info 3 | usage: daytona sandbox info [SANDBOX_ID] [flags] 4 | options: 5 | - name: format 6 | shorthand: f 7 | usage: Output format. Must be one of (yaml, json) 8 | - name: verbose 9 | shorthand: v 10 | default_value: 'false' 11 | usage: Include verbose output 12 | inherited_options: 13 | - name: help 14 | default_value: 'false' 15 | usage: help for daytona 16 | see_also: 17 | - daytona sandbox - Manage Daytona sandboxes 18 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_sandbox_list.yaml: -------------------------------------------------------------------------------- 1 | name: daytona sandbox list 2 | synopsis: List sandboxes 3 | usage: daytona sandbox list [flags] 4 | options: 5 | - name: format 6 | shorthand: f 7 | usage: Output format. Must be one of (yaml, json) 8 | - name: verbose 9 | shorthand: v 10 | default_value: 'false' 11 | usage: Include verbose output 12 | inherited_options: 13 | - name: help 14 | default_value: 'false' 15 | usage: help for daytona 16 | see_also: 17 | - daytona sandbox - Manage Daytona sandboxes 18 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_sandbox_start.yaml: -------------------------------------------------------------------------------- 1 | name: daytona sandbox start 2 | synopsis: Start a sandbox 3 | usage: daytona sandbox start [SANDBOX_ID] [flags] 4 | options: 5 | - name: all 6 | shorthand: a 7 | default_value: 'false' 8 | usage: Start all sandboxes 9 | inherited_options: 10 | - name: help 11 | default_value: 'false' 12 | usage: help for daytona 13 | see_also: 14 | - daytona sandbox - Manage Daytona sandboxes 15 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_sandbox_stop.yaml: -------------------------------------------------------------------------------- 1 | name: daytona sandbox stop 2 | synopsis: Stop a sandbox 3 | usage: daytona sandbox stop [SANDBOX_ID] [flags] 4 | options: 5 | - name: all 6 | shorthand: a 7 | default_value: 'false' 8 | usage: Stop all sandboxes 9 | inherited_options: 10 | - name: help 11 | default_value: 'false' 12 | usage: help for daytona 13 | see_also: 14 | - daytona sandbox - Manage Daytona sandboxes 15 | -------------------------------------------------------------------------------- /apps/cli/hack/docs/daytona_version.yaml: -------------------------------------------------------------------------------- 1 | name: daytona version 2 | synopsis: Print the version number 3 | usage: daytona version [flags] 4 | inherited_options: 5 | - name: help 6 | default_value: 'false' 7 | usage: help for daytona 8 | see_also: 9 | - daytona - Daytona CLI 10 | -------------------------------------------------------------------------------- /apps/cli/hack/generate-cli-docs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Copyright 2025 Daytona Platforms Inc. 3 | # SPDX-License-Identifier: AGPL-3.0 4 | 5 | 6 | # Clean up existing documentation files 7 | rm -rf docs hack/docs 8 | 9 | # Generate default CLI documentation files in folder "docs" 10 | go run main.go generate-docs 11 | -------------------------------------------------------------------------------- /apps/cli/internal/buildinfo.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package internal 5 | 6 | var ( 7 | Version = "v0.0.0-dev" 8 | DaytonaApiUrl = "" 9 | Auth0Domain = "" 10 | Auth0ClientId = "" 11 | Auth0ClientSecret = "" 12 | Auth0CallbackPort = "" 13 | Auth0Audience = "" 14 | ) 15 | -------------------------------------------------------------------------------- /apps/cli/internal/cmd.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package internal 5 | 6 | const ( 7 | USER_GROUP = "user" 8 | SANDBOX_GROUP = "sandbox" 9 | ) 10 | -------------------------------------------------------------------------------- /apps/cli/mcp/tools/common.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package tools 5 | 6 | import "github.com/daytonaio/daytona/cli/apiclient" 7 | 8 | var daytonaMCPHeaders map[string]string = map[string]string{ 9 | apiclient.DaytonaSourceHeader: "daytona-mcp", 10 | } 11 | -------------------------------------------------------------------------------- /apps/cli/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cli", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/cli", 6 | "tags": [], 7 | "targets": { 8 | "build": { 9 | "executor": "@nx-go/nx-go:build", 10 | "options": { 11 | "main": "{projectRoot}/main.go", 12 | "outputPath": "dist/apps/cli" 13 | } 14 | }, 15 | "format": { 16 | "executor": "nx:run-commands", 17 | "options": { 18 | "command": "cd {projectRoot} && go fmt ./... && prettier --write \"**/*.{yaml,html}\"" 19 | } 20 | }, 21 | "test": { 22 | "executor": "@nx-go/nx-go:test" 23 | }, 24 | "lint": { 25 | "executor": "@nx-go/nx-go:lint" 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /apps/cli/util/pointer.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package util 5 | 6 | // Use generics to create a pointer to a value 7 | func Pointer[T any](d T) *T { 8 | return &d 9 | } 10 | -------------------------------------------------------------------------------- /apps/cli/views/util/info.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package util 5 | 6 | import ( 7 | "github.com/charmbracelet/lipgloss" 8 | "github.com/daytonaio/daytona/cli/views/common" 9 | ) 10 | 11 | const PropertyNameWidth = 16 12 | 13 | var PropertyNameStyle = lipgloss.NewStyle(). 14 | Foreground(common.LightGray) 15 | 16 | var PropertyValueStyle = lipgloss.NewStyle(). 17 | Foreground(common.Light). 18 | Bold(true) 19 | -------------------------------------------------------------------------------- /apps/daemon/.env.production: -------------------------------------------------------------------------------- 1 | NODE_ENV=production 2 | -------------------------------------------------------------------------------- /apps/daemon/.gitignore: -------------------------------------------------------------------------------- 1 | pkg/terminal/static 2 | !pkg/terminal/static/index.html 3 | -------------------------------------------------------------------------------- /apps/daemon/cmd/daemon/config/log.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package config 5 | 6 | import ( 7 | "io" 8 | 9 | log "github.com/sirupsen/logrus" 10 | ) 11 | 12 | type LogFormatter struct { 13 | TextFormatter *log.TextFormatter 14 | LogFileWriter io.Writer 15 | } 16 | 17 | func (f *LogFormatter) Format(entry *log.Entry) ([]byte, error) { 18 | formatted, err := f.TextFormatter.Format(entry) 19 | if err != nil { 20 | return nil, err 21 | } 22 | 23 | if f.LogFileWriter != nil { 24 | _, err = f.LogFileWriter.Write(formatted) 25 | if err != nil { 26 | return nil, err 27 | } 28 | } 29 | 30 | return []byte(formatted), nil 31 | } 32 | -------------------------------------------------------------------------------- /apps/daemon/internal/buildinfo.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package internal 5 | 6 | var ( 7 | Version = "v0.0.0-dev" 8 | ) 9 | -------------------------------------------------------------------------------- /apps/daemon/internal/util/pointer.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package util 5 | 6 | // Use generics to create a pointer to a value 7 | func Pointer[T any](d T) *T { 8 | return &d 9 | } 10 | -------------------------------------------------------------------------------- /apps/daemon/pkg/git/add.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import "github.com/go-git/go-git/v5" 7 | 8 | func (s *Service) Add(files []string) error { 9 | repo, err := git.PlainOpen(s.ProjectDir) 10 | if err != nil { 11 | return err 12 | } 13 | 14 | w, err := repo.Worktree() 15 | if err != nil { 16 | return err 17 | } 18 | 19 | for _, file := range files { 20 | _, err = w.Add(file) 21 | if err != nil { 22 | return err 23 | } 24 | } 25 | 26 | return nil 27 | } 28 | -------------------------------------------------------------------------------- /apps/daemon/pkg/git/commit.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import "github.com/go-git/go-git/v5" 7 | 8 | func (s *Service) Commit(message string, options *git.CommitOptions) (string, error) { 9 | repo, err := git.PlainOpen(s.ProjectDir) 10 | if err != nil { 11 | return "", err 12 | } 13 | 14 | w, err := repo.Worktree() 15 | if err != nil { 16 | return "", err 17 | } 18 | 19 | commit, err := w.Commit(message, options) 20 | if err != nil { 21 | return "", err 22 | } 23 | 24 | return commit.String(), nil 25 | } 26 | -------------------------------------------------------------------------------- /apps/daemon/pkg/git/pull.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import ( 7 | "github.com/go-git/go-git/v5/plumbing/transport/http" 8 | 9 | "github.com/go-git/go-git/v5" 10 | ) 11 | 12 | func (s *Service) Pull(auth *http.BasicAuth) error { 13 | repo, err := git.PlainOpen(s.ProjectDir) 14 | if err != nil { 15 | return err 16 | } 17 | 18 | w, err := repo.Worktree() 19 | if err != nil { 20 | return err 21 | } 22 | 23 | options := &git.PullOptions{ 24 | RemoteName: "origin", 25 | Auth: auth, 26 | } 27 | 28 | return w.Pull(options) 29 | } 30 | -------------------------------------------------------------------------------- /apps/daemon/pkg/git/push.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import ( 7 | "github.com/go-git/go-git/v5/plumbing/transport/http" 8 | 9 | "github.com/go-git/go-git/v5" 10 | ) 11 | 12 | func (s *Service) Push(auth *http.BasicAuth) error { 13 | repo, err := git.PlainOpen(s.ProjectDir) 14 | if err != nil { 15 | return err 16 | } 17 | 18 | options := &git.PushOptions{ 19 | Auth: auth, 20 | } 21 | 22 | return repo.Push(options) 23 | } 24 | -------------------------------------------------------------------------------- /apps/daemon/pkg/git/types.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import "time" 7 | 8 | type GitCommitInfo struct { 9 | Hash string `json:"hash" validate:"required"` 10 | Author string `json:"author" validate:"required"` 11 | Email string `json:"email" validate:"required"` 12 | Message string `json:"message" validate:"required"` 13 | Timestamp time.Time `json:"timestamp" validate:"required"` 14 | } // @name GitCommitInfo 15 | -------------------------------------------------------------------------------- /apps/daemon/pkg/ssh/config/config.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package config 5 | 6 | const SSH_PORT = 2222 7 | -------------------------------------------------------------------------------- /apps/daemon/pkg/terminal/assets.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package terminal 5 | 6 | import "embed" 7 | 8 | //go:embed static 9 | var static embed.FS 10 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/config/config.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package config 5 | 6 | const TOOLBOX_API_PORT = 2280 7 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/fs/upload_file.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package fs 5 | 6 | import ( 7 | "errors" 8 | "net/http" 9 | 10 | "github.com/gin-gonic/gin" 11 | ) 12 | 13 | func UploadFile(c *gin.Context) { 14 | path := c.Query("path") 15 | if path == "" { 16 | c.AbortWithError(http.StatusBadRequest, errors.New("path is required")) 17 | return 18 | } 19 | 20 | file, err := c.FormFile("file") 21 | if err != nil { 22 | c.AbortWithError(http.StatusBadRequest, err) 23 | return 24 | } 25 | 26 | if err := c.SaveUploadedFile(file, path); err != nil { 27 | c.AbortWithError(http.StatusBadRequest, err) 28 | return 29 | } 30 | 31 | c.Status(http.StatusOK) 32 | } 33 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/git/add.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import ( 7 | "fmt" 8 | "net/http" 9 | 10 | "github.com/daytonaio/daemon/pkg/git" 11 | "github.com/gin-gonic/gin" 12 | ) 13 | 14 | func AddFiles(c *gin.Context) { 15 | var req GitAddRequest 16 | if err := c.ShouldBindJSON(&req); err != nil { 17 | c.AbortWithError(http.StatusBadRequest, fmt.Errorf("invalid request body: %w", err)) 18 | return 19 | } 20 | 21 | gitService := git.Service{ 22 | ProjectDir: req.Path, 23 | } 24 | 25 | if err := gitService.Add(req.Files); err != nil { 26 | c.AbortWithError(http.StatusBadRequest, err) 27 | return 28 | } 29 | 30 | c.Status(http.StatusOK) 31 | } 32 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/git/checkout.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import ( 7 | "fmt" 8 | "net/http" 9 | 10 | "github.com/daytonaio/daemon/pkg/git" 11 | "github.com/gin-gonic/gin" 12 | ) 13 | 14 | func CheckoutBranch(c *gin.Context) { 15 | var req GitCheckoutRequest 16 | if err := c.ShouldBindJSON(&req); err != nil { 17 | c.AbortWithError(http.StatusBadRequest, fmt.Errorf("invalid request body: %w", err)) 18 | return 19 | } 20 | 21 | gitService := git.Service{ 22 | ProjectDir: req.Path, 23 | } 24 | 25 | if err := gitService.Checkout(req.Branch); err != nil { 26 | c.AbortWithError(http.StatusBadRequest, err) 27 | return 28 | } 29 | 30 | c.Status(http.StatusOK) 31 | } 32 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/git/create_branch.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import ( 7 | "fmt" 8 | "net/http" 9 | 10 | "github.com/daytonaio/daemon/pkg/git" 11 | "github.com/gin-gonic/gin" 12 | ) 13 | 14 | func CreateBranch(c *gin.Context) { 15 | var req GitBranchRequest 16 | if err := c.ShouldBindJSON(&req); err != nil { 17 | c.AbortWithError(http.StatusBadRequest, fmt.Errorf("invalid request body: %w", err)) 18 | return 19 | } 20 | 21 | gitService := git.Service{ 22 | ProjectDir: req.Path, 23 | } 24 | 25 | if err := gitService.CreateBranch(req.Name); err != nil { 26 | c.AbortWithError(http.StatusBadRequest, err) 27 | return 28 | } 29 | 30 | c.Status(http.StatusCreated) 31 | } 32 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/git/history.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import ( 7 | "errors" 8 | "net/http" 9 | 10 | "github.com/daytonaio/daemon/pkg/git" 11 | "github.com/gin-gonic/gin" 12 | ) 13 | 14 | func GetCommitHistory(c *gin.Context) { 15 | path := c.Query("path") 16 | if path == "" { 17 | c.AbortWithError(http.StatusBadRequest, errors.New("path is required")) 18 | return 19 | } 20 | 21 | gitService := git.Service{ 22 | ProjectDir: path, 23 | } 24 | 25 | log, err := gitService.Log() 26 | if err != nil { 27 | c.AbortWithError(http.StatusBadRequest, err) 28 | return 29 | } 30 | 31 | c.JSON(http.StatusOK, log) 32 | } 33 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/git/list_branches.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import ( 7 | "errors" 8 | "net/http" 9 | 10 | "github.com/daytonaio/daemon/pkg/git" 11 | "github.com/gin-gonic/gin" 12 | ) 13 | 14 | func ListBranches(c *gin.Context) { 15 | path := c.Query("path") 16 | if path == "" { 17 | c.AbortWithError(http.StatusBadRequest, errors.New("path is required")) 18 | return 19 | } 20 | 21 | gitService := git.Service{ 22 | ProjectDir: path, 23 | } 24 | 25 | branchList, err := gitService.ListBranches() 26 | if err != nil { 27 | c.AbortWithError(http.StatusBadRequest, err) 28 | return 29 | } 30 | 31 | c.JSON(http.StatusOK, ListBranchResponse{ 32 | Branches: branchList, 33 | }) 34 | } 35 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/git/status.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package git 5 | 6 | import ( 7 | "errors" 8 | "net/http" 9 | 10 | "github.com/daytonaio/daemon/pkg/git" 11 | "github.com/gin-gonic/gin" 12 | ) 13 | 14 | func GetStatus(c *gin.Context) { 15 | path := c.Query("path") 16 | if path == "" { 17 | c.AbortWithError(http.StatusBadRequest, errors.New("path is required")) 18 | return 19 | } 20 | 21 | gitService := git.Service{ 22 | ProjectDir: path, 23 | } 24 | 25 | status, err := gitService.GetGitStatus() 26 | if err != nil { 27 | c.AbortWithError(http.StatusBadRequest, err) 28 | return 29 | } 30 | 31 | c.JSON(http.StatusOK, status) 32 | } 33 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/port/types.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package port 5 | 6 | type PortList struct { 7 | Ports []uint `json:"ports"` 8 | } // @name PortList 9 | 10 | type IsPortInUseResponse struct { 11 | IsInUse bool `json:"isInUse"` 12 | } // @name IsPortInUseResponse 13 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/process/session/controller.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package session 5 | 6 | type SessionController struct { 7 | configDir string 8 | projectDir string 9 | } 10 | 11 | func NewSessionController(configDir, projectDir string) *SessionController { 12 | return &SessionController{ 13 | configDir: configDir, 14 | projectDir: projectDir, 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/daemon/pkg/toolbox/process/types.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package process 5 | 6 | type ExecuteRequest struct { 7 | Command string `json:"command" validate:"required"` 8 | // Timeout in seconds, defaults to 10 seconds 9 | Timeout *uint32 `json:"timeout,omitempty" validate:"optional"` 10 | // Current working directory 11 | Cwd *string `json:"cwd,omitempty" validate:"optional"` 12 | } // @name ExecuteRequest 13 | 14 | type ExecuteResponse struct { 15 | Code int `json:"code" validate:"required"` 16 | Result string `json:"result" validate:"required"` 17 | } // @name ExecuteResponse 18 | -------------------------------------------------------------------------------- /apps/dashboard/.env: -------------------------------------------------------------------------------- 1 | VITE_OIDC_DOMAIN=http://localhost:5556/dex 2 | VITE_OIDC_CLIENT_ID=daytona 3 | VITE_OIDC_AUDIENCE=daytona 4 | 5 | VITE_POSTHOG_KEY= 6 | VITE_POSTHOG_HOST= 7 | 8 | VITE_API_URL=http://localhost:3000/api 9 | 10 | VITE_LINKED_ACCOUNTS_ENABLED=false -------------------------------------------------------------------------------- /apps/dashboard/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import nx from '@nx/eslint-plugin' 2 | import baseConfig from '../../eslint.config.mjs' 3 | 4 | export default [ 5 | ...baseConfig, 6 | ...nx.configs['flat/react'], 7 | { 8 | files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'], 9 | // Override or add rules here 10 | rules: {}, 11 | }, 12 | ] 13 | -------------------------------------------------------------------------------- /apps/dashboard/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Daytona 9 | 10 | 11 |
12 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /apps/dashboard/postcss.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | const { join } = require('path') 7 | 8 | // Note: If you use library-specific PostCSS/Tailwind configuration then you should remove the `postcssConfig` build 9 | // option from your application's configuration (i.e. project.json). 10 | // 11 | // See: https://nx.dev/guides/using-tailwind-css-in-react#step-4:-applying-configuration-to-libraries 12 | 13 | module.exports = { 14 | plugins: { 15 | tailwindcss: { 16 | config: join(__dirname, 'tailwind.config.js'), 17 | }, 18 | autoprefixer: {}, 19 | }, 20 | } 21 | -------------------------------------------------------------------------------- /apps/dashboard/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dashboard", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "apps/dashboard/src", 5 | "projectType": "application", 6 | "tags": [], 7 | "targets": { 8 | "build": { 9 | "configurations": { 10 | "production": { 11 | "mode": "production" 12 | } 13 | } 14 | }, 15 | "format": { 16 | "executor": "nx:run-commands", 17 | "options": { 18 | "command": "cd {projectRoot} && prettier --write \"**/*.{ts,tsx,js,jsx,json,css,mjs,html}\" --config ../../.prettierrc" 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /apps/dashboard/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/apps/dashboard/public/favicon.ico -------------------------------------------------------------------------------- /apps/dashboard/src/api/errors.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export class DaytonaError extends Error { 7 | public static fromError(error: Error): DaytonaError { 8 | if (String(error).includes('Organization is suspended')) { 9 | return new OrganizationSuspendedError(error.message) 10 | } 11 | 12 | return new DaytonaError(error.message) 13 | } 14 | 15 | public static fromString(error: string): DaytonaError { 16 | return DaytonaError.fromError(new Error(error)) 17 | } 18 | } 19 | 20 | export class OrganizationSuspendedError extends DaytonaError {} 21 | -------------------------------------------------------------------------------- /apps/dashboard/src/assets/bbox-logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/apps/dashboard/src/assets/bbox-logo-dark.png -------------------------------------------------------------------------------- /apps/dashboard/src/assets/bbox-logo-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/apps/dashboard/src/assets/bbox-logo-light.png -------------------------------------------------------------------------------- /apps/dashboard/src/assets/daytona-full-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/apps/dashboard/src/assets/daytona-full-black.png -------------------------------------------------------------------------------- /apps/dashboard/src/assets/daytona-full-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/apps/dashboard/src/assets/daytona-full-white.png -------------------------------------------------------------------------------- /apps/dashboard/src/assets/daytona-logo-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/apps/dashboard/src/assets/daytona-logo-black.png -------------------------------------------------------------------------------- /apps/dashboard/src/assets/daytona-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/apps/dashboard/src/assets/daytona-logo-white.png -------------------------------------------------------------------------------- /apps/dashboard/src/billing-api/types/OrganizationUsage.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export interface OrganizationUsage { 7 | from: Date 8 | to: Date 9 | issuingDate: string 10 | amountCents: number 11 | totalAmountCents: number 12 | taxesAmountCents: number 13 | usageCharges: UsageCharge[] 14 | } 15 | 16 | export interface UsageCharge { 17 | units: string 18 | eventsCount: number 19 | amountCents: number 20 | billableMetric: BillableMetricCode 21 | } 22 | 23 | export enum BillableMetricCode { 24 | CPU_USAGE = 'cpu_usage', 25 | GPU_USAGE = 'gpu_usage', 26 | RAM_USAGE = 'ram_usage', 27 | DISK_USAGE = 'disk_usage', 28 | UNKNOWN = 'unknown', 29 | } 30 | -------------------------------------------------------------------------------- /apps/dashboard/src/billing-api/types/OrganizationWallet.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export interface OrganizationWallet { 7 | balanceCents: number 8 | ongoingBalanceCents: number 9 | name: string 10 | creditCardConnected: boolean 11 | 12 | automaticTopUp?: AutomaticTopUp 13 | } 14 | 15 | export type AutomaticTopUp = { 16 | thresholdAmount: number 17 | targetAmount: number 18 | } 19 | -------------------------------------------------------------------------------- /apps/dashboard/src/components/LoadingFallback.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import React from 'react' 7 | 8 | const LoadingFallback = () => ( 9 |
10 |
11 |
12 |

Loading...

13 |
14 |
15 | ) 16 | 17 | export default LoadingFallback 18 | -------------------------------------------------------------------------------- /apps/dashboard/src/components/Tooltip.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import React from 'react' 7 | import { TooltipProvider, Tooltip as UiTooltip, TooltipTrigger, TooltipContent } from '@/components/ui/tooltip' 8 | 9 | export function Tooltip({ 10 | label, 11 | content, 12 | side = 'top', 13 | }: { 14 | label: React.ReactNode 15 | content: React.ReactNode 16 | side?: 'right' | 'left' | 'top' | 'bottom' 17 | }) { 18 | return ( 19 | 20 | 21 | {label} 22 | {content} 23 | 24 | 25 | ) 26 | } 27 | -------------------------------------------------------------------------------- /apps/dashboard/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { cn } from '@/lib/utils' 7 | 8 | function Skeleton({ className, ...props }: React.HTMLAttributes) { 9 | return
10 | } 11 | 12 | export { Skeleton } 13 | -------------------------------------------------------------------------------- /apps/dashboard/src/constants/ExternalLinks.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | /** 7 | * External URLs for Daytona resources 8 | */ 9 | export const DAYTONA_DOCS_URL = 'https://www.daytona.io/docs' 10 | export const DAYTONA_SLACK_URL = 'https://go.daytona.io/slack' 11 | -------------------------------------------------------------------------------- /apps/dashboard/src/constants/Pagination.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const PAGE_SIZE_OPTIONS = [10, 25, 50, 100, 200] as const 7 | export const DEFAULT_PAGE_SIZE = 25 8 | -------------------------------------------------------------------------------- /apps/dashboard/src/contexts/ApiContext.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { ApiClient } from '@/api/apiClient' 7 | import { createContext } from 'react' 8 | 9 | export const ApiContext = createContext(null) 10 | -------------------------------------------------------------------------------- /apps/dashboard/src/contexts/NotificationSocketContext.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { createContext } from 'react' 7 | import { Socket } from 'socket.io-client' 8 | 9 | export interface INotificationSocketContext { 10 | notificationSocket: Socket 11 | } 12 | 13 | export const NotificationSocketContext = createContext(undefined) 14 | -------------------------------------------------------------------------------- /apps/dashboard/src/contexts/OrganizationsContext.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Organization } from '@daytonaio/api-client' 7 | import { createContext } from 'react' 8 | 9 | export interface IOrganizationsContext { 10 | organizations: Organization[] 11 | refreshOrganizations: () => Promise 12 | } 13 | 14 | export const OrganizationsContext = createContext(undefined) 15 | -------------------------------------------------------------------------------- /apps/dashboard/src/contexts/UserOrganizationInvitationsContext.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { createContext } from 'react' 7 | 8 | export interface IUserOrganizationInvitationsContext { 9 | count: number 10 | setCount(count: number): void 11 | } 12 | 13 | export const UserOrganizationInvitationsContext = createContext( 14 | undefined, 15 | ) 16 | -------------------------------------------------------------------------------- /apps/dashboard/src/enums/LocalStorageKey.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export enum LocalStorageKey { 7 | SelectedOrganizationId = 'SelectedOrganizationId', 8 | SkipOnboardingPrefix = 'SkipOnboarding_', 9 | } 10 | -------------------------------------------------------------------------------- /apps/dashboard/src/hooks/use-mobile.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import * as React from 'react' 7 | 8 | const MOBILE_BREAKPOINT = 768 9 | 10 | export function useIsMobile() { 11 | const [isMobile, setIsMobile] = React.useState(undefined) 12 | 13 | React.useEffect(() => { 14 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 15 | const onChange = () => { 16 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 17 | } 18 | mql.addEventListener('change', onChange) 19 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 20 | return () => mql.removeEventListener('change', onChange) 21 | }, []) 22 | 23 | return !!isMobile 24 | } 25 | -------------------------------------------------------------------------------- /apps/dashboard/src/hooks/useApi.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { useContext } from 'react' 7 | import { ApiContext } from '@/contexts/ApiContext' 8 | 9 | export function useApi() { 10 | const context = useContext(ApiContext) 11 | if (!context) { 12 | throw new Error('useApi must be used within an ApiProvider') 13 | } 14 | return context 15 | } 16 | -------------------------------------------------------------------------------- /apps/dashboard/src/hooks/useNotificationSocket.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { NotificationSocketContext } from '@/contexts/NotificationSocketContext' 7 | import { useContext } from 'react' 8 | 9 | export function useNotificationSocket() { 10 | const context = useContext(NotificationSocketContext) 11 | 12 | if (!context) { 13 | throw new Error('useNotificationSocket must be used within a NotificationSocketProvider') 14 | } 15 | 16 | return context 17 | } 18 | -------------------------------------------------------------------------------- /apps/dashboard/src/hooks/useOrganizations.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { OrganizationsContext } from '@/contexts/OrganizationsContext' 7 | import { useContext } from 'react' 8 | 9 | export function useOrganizations() { 10 | const context = useContext(OrganizationsContext) 11 | 12 | if (!context) { 13 | throw new Error('useOrganizations must be used within a OrganizationsProvider') 14 | } 15 | 16 | return context 17 | } 18 | -------------------------------------------------------------------------------- /apps/dashboard/src/hooks/useSelectedOrganization.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { useContext } from 'react' 7 | import { SelectedOrganizationContext } from '@/contexts/SelectedOrganizationContext' 8 | 9 | export function useSelectedOrganization() { 10 | const context = useContext(SelectedOrganizationContext) 11 | 12 | if (!context) { 13 | throw new Error('useSelectedOrganization must be used within a SelectedOrganizationProvider') 14 | } 15 | 16 | return context 17 | } 18 | -------------------------------------------------------------------------------- /apps/dashboard/src/hooks/useUserOrganizationInvitations.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { UserOrganizationInvitationsContext } from '@/contexts/UserOrganizationInvitationsContext' 7 | import { useContext } from 'react' 8 | 9 | export function useUserOrganizationInvitations() { 10 | const context = useContext(UserOrganizationInvitationsContext) 11 | 12 | if (!context) { 13 | throw new Error('useUserOrganizationInvitations must be used within a UserOrganizationInvitationsProvider') 14 | } 15 | 16 | return context 17 | } 18 | -------------------------------------------------------------------------------- /apps/dashboard/src/lib/error-handling.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { Action, toast } from 'sonner' 7 | import { DaytonaError } from '@/api/errors' 8 | 9 | export function handleApiError(error: unknown, message: string, toastAction?: React.ReactNode | Action) { 10 | const isDaytonaError = error instanceof DaytonaError 11 | 12 | toast.error(message, { 13 | description: isDaytonaError ? error.message : 'Please try again or check the console for more details', 14 | action: toastAction, 15 | }) 16 | 17 | if (!isDaytonaError) { 18 | console.error(message, error) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /apps/dashboard/src/lib/local-storage.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export const getLocalStorageItem = (key: string): string | null => { 7 | try { 8 | return localStorage.getItem(key) 9 | } catch (error) { 10 | console.error('Failed to read from localStorage:', error) 11 | return null 12 | } 13 | } 14 | 15 | export const setLocalStorageItem = (key: string, value: string): void => { 16 | try { 17 | localStorage.setItem(key, value) 18 | } catch (error) { 19 | console.error('Failed to write to localStorage:', error) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /apps/dashboard/src/pages/Logout.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import LoadingFallback from '@/components/LoadingFallback' 7 | import { useEffect } from 'react' 8 | import { useAuth } from 'react-oidc-context' 9 | 10 | const Logout = () => { 11 | const { signoutRedirect } = useAuth() 12 | 13 | useEffect(() => { 14 | void signoutRedirect() 15 | }, [signoutRedirect]) 16 | 17 | return 18 | } 19 | 20 | export default Logout 21 | -------------------------------------------------------------------------------- /apps/dashboard/src/types/CreateApiKeyPermissionGroup.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { CreateApiKeyPermissionsEnum } from '@daytonaio/api-client' 7 | 8 | export interface CreateApiKeyPermissionGroup { 9 | name: string 10 | permissions: CreateApiKeyPermissionsEnum[] 11 | } 12 | -------------------------------------------------------------------------------- /apps/dashboard/src/types/OrganizationRolePermissionGroup.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { OrganizationRolePermissionsEnum } from '@daytonaio/api-client' 7 | 8 | export interface OrganizationRolePermissionGroup { 9 | name: string 10 | permissions: OrganizationRolePermissionsEnum[] 11 | } 12 | -------------------------------------------------------------------------------- /apps/dashboard/src/types/workspace.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export interface Workspace { 7 | id: string 8 | name: string 9 | state: string 10 | region: string 11 | nodeDomain: string 12 | } 13 | -------------------------------------------------------------------------------- /apps/dashboard/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | /// 7 | 8 | declare module '*.png' { 9 | const content: string 10 | export default content 11 | } 12 | 13 | interface ImportMetaEnv { 14 | readonly VITE_OIDC_DOMAIN: string 15 | readonly VITE_OIDC_CLIENT_ID: string 16 | readonly VITE_OIDC_AUDIENCE: string 17 | readonly VITE_API_URL: string 18 | readonly VITE_BILLING_API_URL: string | undefined 19 | readonly VITE_POSTHOG_KEY: string | undefined 20 | readonly VITE_POSTHOG_HOST: string | undefined 21 | readonly VITE_LINKED_ACCOUNTS_ENABLED: string | undefined 22 | } 23 | 24 | interface ImportMeta { 25 | readonly env: ImportMetaEnv 26 | } 27 | -------------------------------------------------------------------------------- /apps/dashboard/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "jsx": "react-jsx", 4 | "allowJs": false, 5 | "esModuleInterop": false, 6 | "allowSyntheticDefaultImports": true, 7 | "strict": true, 8 | "types": ["vite/client"] 9 | }, 10 | "files": [], 11 | "include": [], 12 | "references": [ 13 | { 14 | "path": "./tsconfig.app.json" 15 | } 16 | ], 17 | "extends": "../../tsconfig.base.json" 18 | } 19 | -------------------------------------------------------------------------------- /apps/daytona-e2e/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs' 2 | 3 | export default [...baseConfig] 4 | -------------------------------------------------------------------------------- /apps/daytona-e2e/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | export default { 7 | displayName: 'daytona-e2e', 8 | preset: '../../jest.preset.js', 9 | globalSetup: '/src/support/global-setup.ts', 10 | globalTeardown: '/src/support/global-teardown.ts', 11 | setupFiles: ['/src/support/test-setup.ts'], 12 | testEnvironment: 'node', 13 | transform: { 14 | '^.+\\.[tj]s$': [ 15 | 'ts-jest', 16 | { 17 | tsconfig: '/tsconfig.spec.json', 18 | }, 19 | ], 20 | }, 21 | moduleFileExtensions: ['ts', 'js', 'html'], 22 | coverageDirectory: '../../coverage/daytona-e2e', 23 | } 24 | -------------------------------------------------------------------------------- /apps/daytona-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "daytona-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "implicitDependencies": ["api"], 6 | "targets": { 7 | "e2e": { 8 | "executor": "@nx/jest:jest", 9 | "outputs": ["{workspaceRoot}/coverage/{e2eProjectRoot}"], 10 | "options": { 11 | "jestConfig": "apps/daytona-e2e/jest.config.ts", 12 | "passWithNoTests": true 13 | }, 14 | "dependsOn": ["api:build"] 15 | }, 16 | "format": { 17 | "executor": "nx:run-commands", 18 | "options": { 19 | "command": "cd {projectRoot} && prettier --write \"**/*.{ts,json,mjs}\" --config ../../.prettierrc" 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /apps/daytona-e2e/src/daytona/daytona.spec.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import axios from 'axios' 7 | 8 | describe('GET /api', () => { 9 | it('should return a message', async () => { 10 | const res = await axios.get(`/api`) 11 | 12 | expect(res.status).toBe(200) 13 | expect(res.data).toEqual({ message: 'Hello API' }) 14 | }) 15 | }) 16 | -------------------------------------------------------------------------------- /apps/daytona-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | /* eslint-disable */ 7 | var __TEARDOWN_MESSAGE__: string 8 | 9 | module.exports = async function () { 10 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 11 | console.log('\nSetting up...\n') 12 | 13 | // Hint: Use `globalThis` to pass variables to global teardown. 14 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n' 15 | } 16 | -------------------------------------------------------------------------------- /apps/daytona-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | module.exports = async function () { 7 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 8 | // Hint: `globalThis` is shared between setup and teardown. 9 | console.log(globalThis.__TEARDOWN_MESSAGE__) 10 | } 11 | -------------------------------------------------------------------------------- /apps/daytona-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import axios from 'axios' 7 | 8 | module.exports = async function () { 9 | // Configure axios for tests to use. 10 | const host = process.env.HOST ?? 'localhost' 11 | const port = process.env.PORT ?? '3000' 12 | axios.defaults.baseURL = `http://${host}:${port}` 13 | } 14 | -------------------------------------------------------------------------------- /apps/daytona-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.spec.json" 8 | } 9 | ], 10 | "compilerOptions": { 11 | "esModuleInterop": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/daytona-e2e/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": ["jest.config.ts", "src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/docs/content/sdk-python/errors.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Errors' 3 | hideTitleOnPage: true 4 | --- 5 | 6 | ## DaytonaError 7 | 8 | ```python 9 | class DaytonaError(Exception) 10 | ``` 11 | 12 | Base error for Daytona SDK. 13 | -------------------------------------------------------------------------------- /apps/docs/content/sdk-typescript/execute-response.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'ExecuteResponse' 3 | hideTitleOnPage: true 4 | --- 5 | 6 | ## ExecuteResponse 7 | 8 | Response from the command execution. 9 | 10 | **Properties**: 11 | 12 | - `artifacts?` _ExecutionArtifacts_ - Artifacts from the command execution 13 | - `exitCode` _number_ - The exit code from the command execution 14 | 15 | - `result` _string_ - The output from the command execution 16 | 17 | **Extends:** 18 | 19 | - `ExecuteResponse` 20 | 21 | ## ExecutionArtifacts 22 | 23 | Artifacts from the command execution. 24 | 25 | **Properties**: 26 | 27 | - `charts?` _Chart\[\]_ - List of chart metadata from matplotlib 28 | - `stdout` _string_ - Standard output from the command, same as `result` in `ExecuteResponse` 29 | -------------------------------------------------------------------------------- /apps/docs/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docs", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/docs", 6 | "targets": { 7 | "format": { 8 | "executor": "nx:run-commands", 9 | "options": { 10 | "cwd": "{projectRoot}", 11 | "command": "markdownlint-cli2 --fix --config \"../../.markdownlint-cli2.jsonc\" \"**/*.{mdx,md}\"" 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /apps/runner/.env: -------------------------------------------------------------------------------- 1 | NODE_ENV=development 2 | 3 | API_PORT=3003 4 | API_TOKEN=secret_api_token 5 | 6 | DAYTONA_BINARY_URL=https://daytona.io/daytona 7 | TERMINAL_BINARY_URL=https://daytona-ai-saas-stage.s3.us-east-1.amazonaws.com/term 8 | DAYTONA_BINARY_PATH=/workspaces/daytona/dist/apps/daemon-amd64 9 | TERMINAL_BINARY_PATH=/workspaces/daytona/.tmp/binaries/terminal 10 | LOG_FILE_PATH=/home/daytona/runner/runner.log 11 | 12 | AWS_ENDPOINT_URL=http://minio:9000 13 | AWS_REGION=us-east-1 14 | AWS_ACCESS_KEY_ID=minioadmin 15 | AWS_SECRET_ACCESS_KEY=minioadmin 16 | AWS_DEFAULT_BUCKET=daytona -------------------------------------------------------------------------------- /apps/runner/.gitignore: -------------------------------------------------------------------------------- 1 | pkg/daemon/static/* 2 | !*.gitkeep 3 | -------------------------------------------------------------------------------- /apps/runner/internal/constants/auth.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package constants 5 | 6 | const BEARER_AUTH_HEADER = "Bearer" 7 | 8 | const AUTHORIZATION_HEADER = "Authorization" 9 | -------------------------------------------------------------------------------- /apps/runner/internal/constants/keys.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package constants 5 | 6 | type Key string 7 | 8 | const ( 9 | ID_KEY Key = "id" 10 | ) 11 | -------------------------------------------------------------------------------- /apps/runner/internal/util/error_extract.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package util 5 | 6 | import ( 7 | "fmt" 8 | "regexp" 9 | ) 10 | 11 | func ExtractErrorPart(errorMsg string) string { 12 | r := regexp.MustCompile(`(unable to find user [^:]+)`) 13 | 14 | matches := r.FindStringSubmatch(errorMsg) 15 | 16 | if len(matches) < 2 { 17 | return errorMsg 18 | } 19 | 20 | return fmt.Sprintf("bad request: %s", matches[1]) 21 | } 22 | -------------------------------------------------------------------------------- /apps/runner/pkg/api/controllers/health.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package controllers 5 | 6 | import ( 7 | "net/http" 8 | 9 | "github.com/gin-gonic/gin" 10 | ) 11 | 12 | // HealthCheck godoc 13 | // 14 | // @Summary Health check 15 | // @Description Health check 16 | // @Produce json 17 | // @Success 200 {object} map[string]string 18 | // @Router / [get] 19 | // 20 | // @id HealthCheck 21 | func HealthCheck(ctx *gin.Context) { 22 | ctx.JSON(http.StatusOK, gin.H{ 23 | "status": "ok", 24 | "version": "0.0.1", 25 | }) 26 | } 27 | -------------------------------------------------------------------------------- /apps/runner/pkg/api/dto/registry.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package dto 5 | 6 | type RegistryDTO struct { 7 | Url string `json:"url" validate:"required"` 8 | Project *string `json:"project" validate:"optional"` 9 | Username string `json:"username" validate:"required"` 10 | Password string `json:"password" validate:"required"` 11 | } // @name RegistryDTO 12 | -------------------------------------------------------------------------------- /apps/runner/pkg/api/dto/snapshot.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package dto 5 | 6 | type CreateSnapshotDTO struct { 7 | Registry RegistryDTO `json:"registry" validate:"required"` 8 | Image string `json:"image" validate:"required"` 9 | } // @name CreateSnapshotDTO 10 | -------------------------------------------------------------------------------- /apps/runner/pkg/api/dto/volume.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package dto 5 | 6 | type VolumeDTO struct { 7 | VolumeId string `json:"volumeId"` 8 | MountPath string `json:"mountPath"` 9 | } 10 | -------------------------------------------------------------------------------- /apps/runner/pkg/daemon/assets.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package daemon 5 | 6 | import ( 7 | "embed" 8 | ) 9 | 10 | //go:embed static/* 11 | var static embed.FS 12 | -------------------------------------------------------------------------------- /apps/runner/pkg/daemon/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/apps/runner/pkg/daemon/static/.gitkeep -------------------------------------------------------------------------------- /apps/runner/pkg/docker/container_inspect.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package docker 5 | 6 | import ( 7 | "context" 8 | 9 | "github.com/docker/docker/api/types" 10 | ) 11 | 12 | func (d *DockerClient) ContainerInspect(ctx context.Context, containerId string) (types.ContainerJSON, error) { 13 | return d.apiClient.ContainerInspect(ctx, containerId) 14 | } 15 | -------------------------------------------------------------------------------- /apps/runner/pkg/models/cache_data.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package models 5 | 6 | import ( 7 | "time" 8 | 9 | "github.com/daytonaio/runner/pkg/models/enums" 10 | ) 11 | 12 | type CacheData struct { 13 | SandboxState enums.SandboxState 14 | SnapshotState enums.SnapshotState 15 | DestructionTime *time.Time 16 | } 17 | -------------------------------------------------------------------------------- /apps/runner/pkg/models/enums/snapshot_state.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package enums 5 | 6 | type SnapshotState string 7 | 8 | const ( 9 | SnapshotStateNone SnapshotState = "NONE" 10 | SnapshotStatePending SnapshotState = "PENDING" 11 | SnapshotStateInProgress SnapshotState = "IN_PROGRESS" 12 | SnapshotStateCompleted SnapshotState = "COMPLETED" 13 | SnapshotStateFailed SnapshotState = "FAILED" 14 | ) 15 | 16 | func (s SnapshotState) String() string { 17 | return string(s) 18 | } 19 | -------------------------------------------------------------------------------- /apps/runner/pkg/storage/client.go: -------------------------------------------------------------------------------- 1 | // Copyright 2025 Daytona Platforms Inc. 2 | // SPDX-License-Identifier: AGPL-3.0 3 | 4 | package storage 5 | 6 | import ( 7 | "context" 8 | ) 9 | 10 | // ObjectStorageClient defines the interface for object storage operations 11 | type ObjectStorageClient interface { 12 | GetObject(ctx context.Context, organizationId, hash string) ([]byte, error) 13 | } 14 | -------------------------------------------------------------------------------- /assets/images/Daytona-logotype-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/assets/images/Daytona-logotype-black.png -------------------------------------------------------------------------------- /assets/images/Daytona-logotype-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/assets/images/Daytona-logotype-white.png -------------------------------------------------------------------------------- /assets/images/daytona_demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/assets/images/daytona_demo.gif -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "apps/dashboard/tailwind.config.js", 8 | "css": "apps/dashboard/src/index.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "ui": "@/components/ui", 16 | "utils": "@/lib/utils", 17 | "hooks": "@/hooks" 18 | }, 19 | "iconLibrary": "lucide" 20 | } 21 | -------------------------------------------------------------------------------- /ecosystem.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | module.exports = { 7 | apps: [ 8 | { 9 | name: 'daytona', 10 | script: './dist/apps/api/main.js', 11 | instances: 4, 12 | exec_mode: 'cluster', 13 | watch: false, 14 | env: { 15 | NODE_ENV: 'production', 16 | PM2_CLUSTER: 'true', 17 | }, 18 | wait_ready: true, 19 | kill_timeout: 3000, 20 | listen_timeout: 10000, 21 | }, 22 | ], 23 | } 24 | -------------------------------------------------------------------------------- /examples/typescript/charts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "test": "echo \"Error: no test specified\" && exit 1" 5 | }, 6 | "dependencies": { 7 | "@daytonaio/sdk": "*" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/typescript/charts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "target": "ES2020", 5 | "module": "commonjs", 6 | "lib": ["ES2020", "DOM"], 7 | "declaration": true, 8 | "outDir": "dist", 9 | "rootDir": "src", 10 | "strict": true, 11 | "esModuleInterop": true, 12 | "skipLibCheck": true, 13 | "forceConsistentCasingInFileNames": true, 14 | "moduleResolution": "node", 15 | "resolveJsonModule": true, 16 | "baseUrl": "." 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules", "dist"] 20 | } -------------------------------------------------------------------------------- /examples/typescript/exec-command/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "test": "echo \"Error: no test specified\" && exit 1" 5 | }, 6 | "dependencies": { 7 | "@daytonaio/sdk": "*" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/typescript/exec-command/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "target": "ES2020", 5 | "module": "commonjs", 6 | "lib": ["ES2020", "DOM"], 7 | "declaration": true, 8 | "outDir": "dist", 9 | "rootDir": "src", 10 | "strict": true, 11 | "esModuleInterop": true, 12 | "skipLibCheck": true, 13 | "forceConsistentCasingInFileNames": true, 14 | "moduleResolution": "node", 15 | "resolveJsonModule": true, 16 | "baseUrl": "." 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules", "dist"] 20 | } -------------------------------------------------------------------------------- /examples/typescript/file-operations/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "test": "echo \"Error: no test specified\" && exit 1" 5 | }, 6 | "dependencies": { 7 | "@daytonaio/sdk": "*" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/typescript/file-operations/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "target": "ES2020", 5 | "module": "commonjs", 6 | "lib": ["ES2020", "DOM"], 7 | "declaration": true, 8 | "outDir": "dist", 9 | "rootDir": "src", 10 | "strict": true, 11 | "esModuleInterop": true, 12 | "skipLibCheck": true, 13 | "forceConsistentCasingInFileNames": true, 14 | "moduleResolution": "node", 15 | "resolveJsonModule": true, 16 | "baseUrl": "." 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules", "dist"] 20 | } -------------------------------------------------------------------------------- /examples/typescript/git-lsp/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/examples/typescript/git-lsp/README.md -------------------------------------------------------------------------------- /examples/typescript/git-lsp/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "test": "echo \"Error: no test specified\" && exit 1" 5 | }, 6 | "dependencies": { 7 | "@daytonaio/sdk": "*" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/typescript/git-lsp/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "target": "ES2020", 5 | "module": "commonjs", 6 | "lib": ["ES2020", "DOM"], 7 | "declaration": true, 8 | "outDir": "dist", 9 | "rootDir": "src", 10 | "strict": true, 11 | "esModuleInterop": true, 12 | "skipLibCheck": true, 13 | "forceConsistentCasingInFileNames": true, 14 | "moduleResolution": "node", 15 | "resolveJsonModule": true, 16 | "baseUrl": "." 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules", "dist"] 20 | } -------------------------------------------------------------------------------- /examples/typescript/lifecycle/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "test": "echo \"Error: no test specified\" && exit 1" 5 | }, 6 | "dependencies": { 7 | "@daytonaio/sdk": "*" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/typescript/lifecycle/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "target": "ES2020", 5 | "module": "commonjs", 6 | "lib": ["ES2020", "DOM"], 7 | "declaration": true, 8 | "outDir": "dist", 9 | "rootDir": "src", 10 | "strict": true, 11 | "esModuleInterop": true, 12 | "skipLibCheck": true, 13 | "forceConsistentCasingInFileNames": true, 14 | "moduleResolution": "node", 15 | "resolveJsonModule": true, 16 | "baseUrl": "." 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules", "dist"] 20 | } -------------------------------------------------------------------------------- /examples/typescript/volumes/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "test": "echo \"Error: no test specified\" && exit 1" 5 | }, 6 | "dependencies": { 7 | "@daytonaio/sdk": "*" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/typescript/volumes/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "target": "ES2020", 5 | "module": "commonjs", 6 | "lib": ["ES2020", "DOM"], 7 | "declaration": true, 8 | "outDir": "dist", 9 | "rootDir": "src", 10 | "strict": true, 11 | "esModuleInterop": true, 12 | "skipLibCheck": true, 13 | "forceConsistentCasingInFileNames": true, 14 | "moduleResolution": "node", 15 | "resolveJsonModule": true, 16 | "baseUrl": "." 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules", "dist"] 20 | } -------------------------------------------------------------------------------- /functions/auth0/verifyAliasEmail.onExecutePreRegister.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | /** 7 | * Handler that will be called during the execution of a PreUserRegistration flow. 8 | * 9 | * @param {Event} event - Details about the context and user that is attempting to register. 10 | * @param {PreUserRegistrationAPI} api - Interface whose methods can be used to change the behavior of the signup. 11 | */ 12 | exports.onExecutePreUserRegistration = async (event, api) => { 13 | if (event.user.email?.includes('+')) { 14 | return api.access.deny(`Email alias detected: ${event.user.email}`, 'Email aliases not allowed') 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /go.work: -------------------------------------------------------------------------------- 1 | go 1.23.4 2 | 3 | use ( 4 | ./apps/cli 5 | ./apps/daemon 6 | ./apps/runner 7 | ./libs/api-client-go 8 | ) 9 | -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import { getJestProjectsAsync } from '@nx/jest' 7 | 8 | export default async () => ({ 9 | projects: await getJestProjectsAsync(), 10 | }) 11 | -------------------------------------------------------------------------------- /jest.preset.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | const nxPreset = require('@nx/jest/preset').default 7 | 8 | module.exports = { ...nxPreset } 9 | -------------------------------------------------------------------------------- /libs/api-client-go/.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files, Static and Dynamic libs (Shared Objects) 2 | *.o 3 | *.a 4 | *.so 5 | 6 | # Folders 7 | _obj 8 | _test 9 | 10 | # Architecture specific extensions/prefixes 11 | *.[568vq] 12 | [568vq].out 13 | 14 | *.cgo1.go 15 | *.cgo2.c 16 | _cgo_defun.c 17 | _cgo_gotypes.go 18 | _cgo_export.* 19 | 20 | _testmain.go 21 | 22 | *.exe 23 | *.test 24 | *.prof 25 | -------------------------------------------------------------------------------- /libs/api-client-go/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 7.12.0 2 | -------------------------------------------------------------------------------- /libs/api-client-go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/daytonaio/daytona 2 | 3 | go 1.18 4 | 5 | require ( 6 | ) 7 | -------------------------------------------------------------------------------- /libs/api-client-python-async/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 7.12.0 2 | -------------------------------------------------------------------------------- /libs/api-client-python-async/daytona_api_client_async/api_response.py: -------------------------------------------------------------------------------- 1 | """API response object.""" 2 | 3 | from __future__ import annotations 4 | from typing import Optional, Generic, Mapping, TypeVar 5 | from pydantic import Field, StrictInt, StrictBytes, BaseModel 6 | 7 | T = TypeVar("T") 8 | 9 | class ApiResponse(BaseModel, Generic[T]): 10 | """ 11 | API response object 12 | """ 13 | 14 | status_code: StrictInt = Field(description="HTTP status code") 15 | headers: Optional[Mapping[str, str]] = Field(None, description="HTTP headers") 16 | data: T = Field(description="Deserialized data given the data type") 17 | raw_data: StrictBytes = Field(description="Raw data (HTTP response body)") 18 | 19 | model_config = { 20 | "arbitrary_types_allowed": True 21 | } 22 | -------------------------------------------------------------------------------- /libs/api-client-python-async/daytona_api_client_async/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/libs/api-client-python-async/daytona_api_client_async/py.typed -------------------------------------------------------------------------------- /libs/api-client-python-async/requirements.txt: -------------------------------------------------------------------------------- 1 | urllib3 >= 1.25.3, < 3.0.0 2 | python_dateutil >= 2.8.2 3 | aiohttp >= 3.8.4 4 | aiohttp-retry >= 2.8.3 5 | pydantic >= 2 6 | typing-extensions >= 4.7.1 7 | -------------------------------------------------------------------------------- /libs/api-client-python-async/setup.cfg: -------------------------------------------------------------------------------- 1 | [flake8] 2 | max-line-length=99 3 | -------------------------------------------------------------------------------- /libs/api-client-python-async/test-requirements.txt: -------------------------------------------------------------------------------- 1 | pytest >= 7.2.1 2 | pytest-cov >= 2.8.1 3 | tox >= 3.9.0 4 | flake8 >= 4.0.0 5 | types-python-dateutil >= 2.8.19.14 6 | mypy >= 1.5 7 | -------------------------------------------------------------------------------- /libs/api-client-python-async/tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py3 3 | 4 | [testenv] 5 | deps=-r{toxinidir}/requirements.txt 6 | -r{toxinidir}/test-requirements.txt 7 | 8 | commands= 9 | pytest --cov=daytona_api_client_async 10 | -------------------------------------------------------------------------------- /libs/api-client-python/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 7.12.0 2 | -------------------------------------------------------------------------------- /libs/api-client-python/daytona_api_client/api_response.py: -------------------------------------------------------------------------------- 1 | """API response object.""" 2 | 3 | from __future__ import annotations 4 | from typing import Optional, Generic, Mapping, TypeVar 5 | from pydantic import Field, StrictInt, StrictBytes, BaseModel 6 | 7 | T = TypeVar("T") 8 | 9 | 10 | class ApiResponse(BaseModel, Generic[T]): 11 | """ 12 | API response object 13 | """ 14 | 15 | status_code: StrictInt = Field(description="HTTP status code") 16 | headers: Optional[Mapping[str, str]] = Field(None, description="HTTP headers") 17 | data: T = Field(description="Deserialized data given the data type") 18 | raw_data: StrictBytes = Field(description="Raw data (HTTP response body)") 19 | 20 | model_config = {"arbitrary_types_allowed": True} 21 | -------------------------------------------------------------------------------- /libs/api-client-python/daytona_api_client/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daytonaio/daytona/385d3417afd6f32dd8784e250e52f0fabe5c24ea/libs/api-client-python/daytona_api_client/py.typed -------------------------------------------------------------------------------- /libs/api-client-python/requirements.txt: -------------------------------------------------------------------------------- 1 | urllib3 >= 1.25.3, < 3.0.0 2 | python_dateutil >= 2.8.2 3 | pydantic >= 2 4 | typing-extensions >= 4.7.1 5 | -------------------------------------------------------------------------------- /libs/api-client-python/setup.cfg: -------------------------------------------------------------------------------- 1 | [flake8] 2 | max-line-length=99 3 | -------------------------------------------------------------------------------- /libs/api-client-python/test-requirements.txt: -------------------------------------------------------------------------------- 1 | pytest >= 7.2.1 2 | pytest-cov >= 2.8.1 3 | tox >= 3.9.0 4 | flake8 >= 4.0.0 5 | types-python-dateutil >= 2.8.19.14 6 | mypy >= 1.5 7 | -------------------------------------------------------------------------------- /libs/api-client-python/tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py3 3 | 4 | [testenv] 5 | deps=-r{toxinidir}/requirements.txt 6 | -r{toxinidir}/test-requirements.txt 7 | 8 | commands= 9 | pytest --cov=daytona_api_client 10 | -------------------------------------------------------------------------------- /libs/api-client/src/.gitignore: -------------------------------------------------------------------------------- 1 | wwwroot/*.js 2 | node_modules 3 | typings 4 | dist 5 | -------------------------------------------------------------------------------- /libs/api-client/src/.npmignore: -------------------------------------------------------------------------------- 1 | # empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm -------------------------------------------------------------------------------- /libs/api-client/src/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 7.12.0 2 | -------------------------------------------------------------------------------- /libs/api-client/src/index.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | export * from './api' 16 | export * from './configuration' 17 | export * from './models' 18 | -------------------------------------------------------------------------------- /libs/api-client/src/models/account-provider-dto.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface AccountProviderDto 19 | */ 20 | export interface AccountProviderDto { 21 | /** 22 | * 23 | * @type {string} 24 | * @memberof AccountProviderDto 25 | */ 26 | provider: string 27 | /** 28 | * 29 | * @type {string} 30 | * @memberof AccountProviderDto 31 | */ 32 | displayName: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/account-provider.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface AccountProvider 19 | */ 20 | export interface AccountProvider { 21 | /** 22 | * 23 | * @type {string} 24 | * @memberof AccountProvider 25 | */ 26 | name: string 27 | /** 28 | * 29 | * @type {string} 30 | * @memberof AccountProvider 31 | */ 32 | displayName: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/completion-context.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface CompletionContext 19 | */ 20 | export interface CompletionContext { 21 | /** 22 | * 23 | * @type {number} 24 | * @memberof CompletionContext 25 | */ 26 | triggerKind: number 27 | /** 28 | * 29 | * @type {string} 30 | * @memberof CompletionContext 31 | */ 32 | triggerCharacter?: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/create-organization.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface CreateOrganization 19 | */ 20 | export interface CreateOrganization { 21 | /** 22 | * The name of organization 23 | * @type {string} 24 | * @memberof CreateOrganization 25 | */ 26 | name: string 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/src/models/create-session-request.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface CreateSessionRequest 19 | */ 20 | export interface CreateSessionRequest { 21 | /** 22 | * The ID of the session 23 | * @type {string} 24 | * @memberof CreateSessionRequest 25 | */ 26 | sessionId: string 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/src/models/create-volume.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface CreateVolume 19 | */ 20 | export interface CreateVolume { 21 | /** 22 | * 23 | * @type {string} 24 | * @memberof CreateVolume 25 | */ 26 | name: string 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/src/models/execute-response.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface ExecuteResponse 19 | */ 20 | export interface ExecuteResponse { 21 | /** 22 | * Exit code 23 | * @type {number} 24 | * @memberof ExecuteResponse 25 | */ 26 | exitCode: number 27 | /** 28 | * Command output 29 | * @type {string} 30 | * @memberof ExecuteResponse 31 | */ 32 | result: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/git-add-request.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface GitAddRequest 19 | */ 20 | export interface GitAddRequest { 21 | /** 22 | * 23 | * @type {string} 24 | * @memberof GitAddRequest 25 | */ 26 | path: string 27 | /** 28 | * files to add (use . for all files) 29 | * @type {Array} 30 | * @memberof GitAddRequest 31 | */ 32 | files: Array 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/git-branch-request.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface GitBranchRequest 19 | */ 20 | export interface GitBranchRequest { 21 | /** 22 | * 23 | * @type {string} 24 | * @memberof GitBranchRequest 25 | */ 26 | path: string 27 | /** 28 | * 29 | * @type {string} 30 | * @memberof GitBranchRequest 31 | */ 32 | name: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/git-checkout-request.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface GitCheckoutRequest 19 | */ 20 | export interface GitCheckoutRequest { 21 | /** 22 | * 23 | * @type {string} 24 | * @memberof GitCheckoutRequest 25 | */ 26 | path: string 27 | /** 28 | * 29 | * @type {string} 30 | * @memberof GitCheckoutRequest 31 | */ 32 | branch: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/git-commit-response.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface GitCommitResponse 19 | */ 20 | export interface GitCommitResponse { 21 | /** 22 | * 23 | * @type {string} 24 | * @memberof GitCommitResponse 25 | */ 26 | hash: string 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/src/models/git-delete-branch-request.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface GitDeleteBranchRequest 19 | */ 20 | export interface GitDeleteBranchRequest { 21 | /** 22 | * 23 | * @type {string} 24 | * @memberof GitDeleteBranchRequest 25 | */ 26 | path: string 27 | /** 28 | * 29 | * @type {string} 30 | * @memberof GitDeleteBranchRequest 31 | */ 32 | name: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/list-branch-response.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface ListBranchResponse 19 | */ 20 | export interface ListBranchResponse { 21 | /** 22 | * 23 | * @type {Array} 24 | * @memberof ListBranchResponse 25 | */ 26 | branches: Array 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/src/models/port-preview-url.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface PortPreviewUrl 19 | */ 20 | export interface PortPreviewUrl { 21 | /** 22 | * Preview url 23 | * @type {string} 24 | * @memberof PortPreviewUrl 25 | */ 26 | url: string 27 | /** 28 | * Access token 29 | * @type {string} 30 | * @memberof PortPreviewUrl 31 | */ 32 | token: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/position.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface Position 19 | */ 20 | export interface Position { 21 | /** 22 | * 23 | * @type {number} 24 | * @memberof Position 25 | */ 26 | line: number 27 | /** 28 | * 29 | * @type {number} 30 | * @memberof Position 31 | */ 32 | character: number 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/project-dir-response.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface ProjectDirResponse 19 | */ 20 | export interface ProjectDirResponse { 21 | /** 22 | * 23 | * @type {string} 24 | * @memberof ProjectDirResponse 25 | */ 26 | dir?: string 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/src/models/search-files-response.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface SearchFilesResponse 19 | */ 20 | export interface SearchFilesResponse { 21 | /** 22 | * 23 | * @type {Array} 24 | * @memberof SearchFilesResponse 25 | */ 26 | files: Array 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/src/models/set-image-general-status.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface SetImageGeneralStatus 19 | */ 20 | export interface SetImageGeneralStatus { 21 | /** 22 | * Whether the image is general 23 | * @type {boolean} 24 | * @memberof SetImageGeneralStatus 25 | */ 26 | general: boolean 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/src/models/toggle-state.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface ToggleState 19 | */ 20 | export interface ToggleState { 21 | /** 22 | * Enable or disable the image/tag 23 | * @type {boolean} 24 | * @memberof ToggleState 25 | */ 26 | enabled: boolean 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/src/models/update-assigned-organization-roles.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface UpdateAssignedOrganizationRoles 19 | */ 20 | export interface UpdateAssignedOrganizationRoles { 21 | /** 22 | * Array of role IDs 23 | * @type {Array} 24 | * @memberof UpdateAssignedOrganizationRoles 25 | */ 26 | roleIds: Array 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/src/models/upload-file-dto.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface UploadFileDto 19 | */ 20 | export interface UploadFileDto { 21 | /** 22 | * 23 | * @type {File} 24 | * @memberof UploadFileDto 25 | */ 26 | file: File 27 | /** 28 | * 29 | * @type {string} 30 | * @memberof UploadFileDto 31 | */ 32 | path: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/upload-file-request-file.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * @type UploadFileRequestFile 17 | * File to upload. Supports file streaming and various file object types. 18 | * @export 19 | */ 20 | export type UploadFileRequestFile = File | { [key: string]: any } 21 | -------------------------------------------------------------------------------- /libs/api-client/src/models/upload-file.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface UploadFile 19 | */ 20 | export interface UploadFile { 21 | /** 22 | * 23 | * @type {File} 24 | * @memberof UploadFile 25 | */ 26 | file: File 27 | /** 28 | * 29 | * @type {string} 30 | * @memberof UploadFile 31 | */ 32 | path: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/user-public-key.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface UserPublicKey 19 | */ 20 | export interface UserPublicKey { 21 | /** 22 | * Public key 23 | * @type {string} 24 | * @memberof UserPublicKey 25 | */ 26 | key: string 27 | /** 28 | * Key name 29 | * @type {string} 30 | * @memberof UserPublicKey 31 | */ 32 | name: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/api-client/src/models/workspace-labels.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona 5 | * Daytona AI platform API Docs 6 | * 7 | * The version of the OpenAPI document: 1.0 8 | * Contact: support@daytona.com 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface WorkspaceLabels 19 | */ 20 | export interface WorkspaceLabels { 21 | /** 22 | * Key-value pairs of labels 23 | * @type {{ [key: string]: string; }} 24 | * @memberof WorkspaceLabels 25 | */ 26 | labels: { [key: string]: string } 27 | } 28 | -------------------------------------------------------------------------------- /libs/api-client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "importHelpers": false, 8 | "noImplicitOverride": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true, 11 | "noPropertyAccessFromIndexSignature": true 12 | }, 13 | "files": [], 14 | "include": [], 15 | "references": [ 16 | { 17 | "path": "./tsconfig.lib.json" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /libs/api-client/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "declaration": true, 6 | "types": ["node"] 7 | }, 8 | "include": ["src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/runner-api-client/src/.gitignore: -------------------------------------------------------------------------------- 1 | wwwroot/*.js 2 | node_modules 3 | typings 4 | dist 5 | -------------------------------------------------------------------------------- /libs/runner-api-client/src/.npmignore: -------------------------------------------------------------------------------- 1 | # empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm -------------------------------------------------------------------------------- /libs/runner-api-client/src/.openapi-generator/FILES: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .npmignore 3 | api.ts 4 | api/default-api.ts 5 | api/images-api.ts 6 | api/sandbox-api.ts 7 | api/toolbox-api.ts 8 | base.ts 9 | common.ts 10 | configuration.ts 11 | git_push.sh 12 | index.ts 13 | models/build-image-request-dto.ts 14 | models/create-sandbox-dto.ts 15 | models/create-snapshot-dto.ts 16 | models/dto-volume-dto.ts 17 | models/enums-sandbox-state.ts 18 | models/enums-snapshot-state.ts 19 | models/error-response.ts 20 | models/image-exists-response.ts 21 | models/index.ts 22 | models/pull-image-request-dto.ts 23 | models/registry-dto.ts 24 | models/resize-sandbox-dto.ts 25 | models/sandbox-info-response.ts 26 | -------------------------------------------------------------------------------- /libs/runner-api-client/src/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 7.12.0 2 | -------------------------------------------------------------------------------- /libs/runner-api-client/src/api.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona Runner API 5 | * Daytona Runner API 6 | * 7 | * The version of the OpenAPI document: v0.0.0-dev 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | export * from './api/default-api' 16 | export * from './api/images-api' 17 | export * from './api/sandbox-api' 18 | export * from './api/toolbox-api' 19 | -------------------------------------------------------------------------------- /libs/runner-api-client/src/index.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona Runner API 5 | * Daytona Runner API 6 | * 7 | * The version of the OpenAPI document: v0.0.0-dev 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | export * from './api' 16 | export * from './configuration' 17 | export * from './models' 18 | -------------------------------------------------------------------------------- /libs/runner-api-client/src/models/dto-volume-dto.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona Runner API 5 | * Daytona Runner API 6 | * 7 | * The version of the OpenAPI document: v0.0.0-dev 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface DtoVolumeDTO 19 | */ 20 | export interface DtoVolumeDTO { 21 | /** 22 | * 23 | * @type {string} 24 | * @memberof DtoVolumeDTO 25 | */ 26 | mountPath?: string 27 | /** 28 | * 29 | * @type {string} 30 | * @memberof DtoVolumeDTO 31 | */ 32 | volumeId?: string 33 | } 34 | -------------------------------------------------------------------------------- /libs/runner-api-client/src/models/image-exists-response.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | 3 | /** 4 | * Daytona Runner API 5 | * Daytona Runner API 6 | * 7 | * The version of the OpenAPI document: v0.0.0-dev 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | /** 16 | * 17 | * @export 18 | * @interface ImageExistsResponse 19 | */ 20 | export interface ImageExistsResponse { 21 | /** 22 | * 23 | * @type {boolean} 24 | * @memberof ImageExistsResponse 25 | */ 26 | exists?: boolean 27 | } 28 | -------------------------------------------------------------------------------- /libs/runner-api-client/src/models/index.ts: -------------------------------------------------------------------------------- 1 | export * from './build-image-request-dto' 2 | export * from './create-sandbox-dto' 3 | export * from './create-snapshot-dto' 4 | export * from './dto-volume-dto' 5 | export * from './enums-sandbox-state' 6 | export * from './enums-snapshot-state' 7 | export * from './error-response' 8 | export * from './image-exists-response' 9 | export * from './pull-image-request-dto' 10 | export * from './registry-dto' 11 | export * from './resize-sandbox-dto' 12 | export * from './sandbox-info-response' 13 | -------------------------------------------------------------------------------- /libs/runner-api-client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "importHelpers": true, 8 | "noImplicitOverride": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true, 11 | "noPropertyAccessFromIndexSignature": true 12 | }, 13 | "files": [], 14 | "include": [], 15 | "references": [ 16 | { 17 | "path": "./tsconfig.lib.json" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /libs/runner-api-client/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "declaration": true, 6 | "types": ["node"] 7 | }, 8 | "include": ["src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/sdk-python/requirements.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/sdk-python/setup.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | 4 | from setuptools import find_packages, setup 5 | 6 | setup( 7 | name="daytona_sdk", 8 | version="0.1.4", 9 | packages=find_packages(where="src"), 10 | package_dir={"": "src"}, 11 | install_requires=[ 12 | # Add dependencies here 13 | ], 14 | # Include both packages 15 | package_data={"daytona_sdk": ["*"]}, 16 | ) 17 | -------------------------------------------------------------------------------- /libs/sdk-python/src/daytona_sdk/_async/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | -------------------------------------------------------------------------------- /libs/sdk-python/src/daytona_sdk/_sync/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | -------------------------------------------------------------------------------- /libs/sdk-python/src/daytona_sdk/_utils/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | -------------------------------------------------------------------------------- /libs/sdk-python/src/daytona_sdk/_utils/enum.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | 4 | from enum import Enum 5 | from typing import Optional 6 | 7 | 8 | def to_enum(enum_class: type, value: str) -> Optional[Enum]: 9 | """Convert a string to an enum. 10 | 11 | Args: 12 | enum_class (type): The enum class to convert to. 13 | value (str): The value to convert to an enum. 14 | 15 | Returns: 16 | The enum value, or None if the value is not a valid enum. 17 | """ 18 | if isinstance(value, enum_class): 19 | return value 20 | str_value = str(value) 21 | if str_value in enum_class._value2member_map_: # pylint: disable=protected-access 22 | return enum_class(str_value) 23 | return None 24 | -------------------------------------------------------------------------------- /libs/sdk-python/src/daytona_sdk/_utils/path.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | 4 | import os 5 | from pathlib import PurePosixPath 6 | from typing import Optional 7 | 8 | 9 | def prefix_relative_path(prefix: str, path: Optional[str] = None) -> str: 10 | result = prefix 11 | 12 | if path: 13 | path = path.strip() 14 | if path == "~": 15 | result = prefix 16 | elif path.startswith("~/"): 17 | result = os.path.join(prefix, path[2:]) 18 | elif PurePosixPath(path).is_absolute(): 19 | result = path 20 | else: 21 | result = os.path.join(prefix, path) 22 | 23 | return result 24 | -------------------------------------------------------------------------------- /libs/sdk-python/src/daytona_sdk/code_toolbox/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | -------------------------------------------------------------------------------- /libs/sdk-python/src/daytona_sdk/common/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | -------------------------------------------------------------------------------- /libs/sdk-python/src/daytona_sdk/common/errors.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | 4 | 5 | class DaytonaError(Exception): 6 | """Base error for Daytona SDK.""" 7 | -------------------------------------------------------------------------------- /libs/sdk-python/src/daytona_sdk/common/git.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | 4 | 5 | class GitCommitResponse: 6 | """Response from the git commit. 7 | 8 | Attributes: 9 | sha (str): The SHA of the commit 10 | """ 11 | 12 | def __init__(self, sha: str): 13 | self.sha = sha 14 | -------------------------------------------------------------------------------- /libs/sdk-python/src/daytona_sdk/common/protocols.py: -------------------------------------------------------------------------------- 1 | # Copyright 2025 Daytona Platforms Inc. 2 | # SPDX-License-Identifier: AGPL-3.0 3 | 4 | from typing import Protocol 5 | 6 | 7 | class SandboxCodeToolbox(Protocol): 8 | def get_default_image(self) -> str: 9 | ... 10 | 11 | def get_code_run_command(self, code: str) -> str: 12 | ... 13 | 14 | def get_code_run_args(self) -> list[str]: 15 | ... 16 | 17 | # ... other protocol methods 18 | 19 | 20 | class SandboxInstance(Protocol): 21 | id: str 22 | -------------------------------------------------------------------------------- /libs/sdk-typescript/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | /** @type {import('ts-jest').JestConfigWithTsJest} */ 7 | module.exports = { 8 | preset: 'ts-jest', 9 | testEnvironment: 'node', 10 | transform: { 11 | '^.+\\.tsx?$': 'ts-jest', 12 | }, 13 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], 14 | testMatch: ['**/__tests__/**/*.test.ts'], 15 | } 16 | -------------------------------------------------------------------------------- /libs/sdk-typescript/src/errors/DaytonaError.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | /** 7 | * @module Errors 8 | */ 9 | 10 | /** 11 | * Base error for Daytona SDK. 12 | */ 13 | export class DaytonaError extends Error {} 14 | 15 | export class DaytonaNotFoundError extends DaytonaError {} 16 | -------------------------------------------------------------------------------- /libs/sdk-typescript/src/utils/Path.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2025 Daytona Platforms Inc. 3 | * SPDX-License-Identifier: AGPL-3.0 4 | */ 5 | 6 | import * as _path from 'path' 7 | 8 | export function prefixRelativePath(prefix: string, path?: string): string { 9 | let result = prefix 10 | 11 | if (path) { 12 | path = path.trim() 13 | if (path === '~') { 14 | result = prefix 15 | } else if (path.startsWith('~/')) { 16 | result = _path.join(prefix, path.slice(2)) 17 | } else if (_path.isAbsolute(path)) { 18 | result = path 19 | } else { 20 | result = _path.join(prefix, path) 21 | } 22 | } 23 | 24 | return result 25 | } 26 | -------------------------------------------------------------------------------- /libs/sdk-typescript/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "importHelpers": false, 8 | "noImplicitOverride": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true, 11 | "noPropertyAccessFromIndexSignature": true, 12 | "esModuleInterop": true 13 | }, 14 | "files": [], 15 | "include": [], 16 | "references": [ 17 | { 18 | "path": "./tsconfig.lib.json" 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /libs/sdk-typescript/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "declaration": true, 6 | "types": ["node"] 7 | }, 8 | "include": ["src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /openapitools.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json", 3 | "spaces": 2, 4 | "generator-cli": { 5 | "version": "7.12.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@daytonaio/ai", 3 | "$schema": "node_modules/nx/schemas/project-schema.json", 4 | "targets": { 5 | "local-registry": { 6 | "executor": "@nx/js:verdaccio", 7 | "options": { 8 | "port": 4873, 9 | "config": ".verdaccio/config.yml", 10 | "storage": "tmp/local-registry/storage" 11 | } 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "rootDir": ".", 5 | "sourceMap": true, 6 | "declaration": false, 7 | "moduleResolution": "node", 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "importHelpers": true, 11 | "target": "ES2022", 12 | "module": "commonjs", 13 | "lib": ["es2022", "dom"], 14 | "skipLibCheck": true, 15 | "skipDefaultLibCheck": true, 16 | "baseUrl": ".", 17 | "paths": { 18 | "@daytonaio/api-client": ["libs/api-client/src/index.ts"], 19 | "@daytonaio/runner-api-client": ["libs/runner-api-client/src/index.ts"], 20 | "@daytonaio/sdk": ["libs/sdk-typescript/src/index.ts"] 21 | } 22 | }, 23 | "exclude": ["node_modules", "tmp"] 24 | } 25 | --------------------------------------------------------------------------------