gitextract_iu1nqdoe/ ├── .dockerignore ├── .env.example ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ ├── docker-image.yaml │ ├── main.yml │ ├── notify-prod.yaml │ ├── release-please.yml │ └── test.yml ├── .gitignore ├── .gitmodules ├── .husky/ │ └── pre-commit ├── .idx/ │ └── dev.nix ├── .is_puter_repository ├── .npmrc ├── .prettierignore ├── BUG-BOUNTY.md ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE.txt ├── README.md ├── SECURITY-ACKNOWLEDGEMENTS.md ├── SECURITY.md ├── TRADEMARK.md ├── doc/ │ ├── AI.md │ ├── File Structure.drawio │ ├── README.md │ ├── RFCS/ │ │ └── 20250826_captcha_cloudflare_turnstile.md │ ├── api/ │ │ ├── README.md │ │ ├── concepts/ │ │ │ └── share-link.md │ │ ├── drivers.md │ │ ├── group.md │ │ ├── notifications.md │ │ ├── share.md │ │ ├── type-tagged.md │ │ └── types/ │ │ ├── app-share.md │ │ └── file-share.md │ ├── contributors/ │ │ ├── comment_prefixes.md │ │ ├── email_testing.md │ │ ├── extensions/ │ │ │ ├── README.md │ │ │ ├── definitions.md │ │ │ ├── dev-console.md │ │ │ ├── events.json.js │ │ │ ├── events.md │ │ │ ├── gen.js │ │ │ └── manual_overrides.json.js │ │ ├── extensions.md │ │ ├── structure.md │ │ └── vscode.md │ ├── devlog.md │ ├── devmeta/ │ │ └── track-comments.md │ ├── docmeta.md │ ├── i18n/ │ │ ├── README.ar.md │ │ ├── README.bn.md │ │ ├── README.da.md │ │ ├── README.de.md │ │ ├── README.en.md │ │ ├── README.es.md │ │ ├── README.fa.md │ │ ├── README.fi.md │ │ ├── README.fr.md │ │ ├── README.he.md │ │ ├── README.hi.md │ │ ├── README.hu.md │ │ ├── README.hy.md │ │ ├── README.id.md │ │ ├── README.it.md │ │ ├── README.jp.md │ │ ├── README.ko.md │ │ ├── README.ml.md │ │ ├── README.my.md │ │ ├── README.nl.md │ │ ├── README.od.md │ │ ├── README.pa.md │ │ ├── README.pl.md │ │ ├── README.pt.md │ │ ├── README.ro.md │ │ ├── README.ru.md │ │ ├── README.sv.md │ │ ├── README.ta.md │ │ ├── README.te.md │ │ ├── README.th.md │ │ ├── README.tr.md │ │ ├── README.ua.md │ │ ├── README.ur.md │ │ ├── README.vi.md │ │ └── README.zh.md │ ├── license_header.txt │ ├── planning/ │ │ ├── 2025-10-21_puter-fs-extension.md │ │ ├── alternatives-to-$.md │ │ └── micro-modules.md │ ├── prod.md │ ├── self-hosters/ │ │ ├── config-vals.json.js │ │ ├── config.md │ │ ├── config_values.md │ │ ├── domains.md │ │ ├── first-run-issues.md │ │ ├── gen.js │ │ ├── instructions.md │ │ └── support.md │ ├── test/ │ │ └── playwright-test.md │ ├── testing_with_email.md │ └── uncategorized/ │ ├── README.md │ ├── es6-note.md │ └── puter-mods.md ├── docker-compose.yml ├── eslint/ │ ├── bang-space-if.js │ ├── control-structure-spacing.js │ ├── mandatory.eslint.config.js │ └── space-unary-ops-with-exception.js ├── eslint.config.js ├── exports.js ├── extensions/ │ ├── .gitkeep │ ├── README.md │ ├── api.d.ts │ ├── app-telemetry/ │ │ ├── app-user-count.ts │ │ ├── index.d.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── data.js │ ├── example-kv.js │ ├── example_gui_extension.js │ ├── exports_something.js │ ├── extension-util.js │ ├── extensionController/ │ │ ├── package.json │ │ ├── puter.json │ │ ├── src/ │ │ │ ├── ExtensionController.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── hellodriver/ │ │ ├── config.json │ │ ├── hellodriver.js │ │ └── package.json │ ├── imports_something.js │ ├── metering/ │ │ ├── config.json │ │ ├── controllers/ │ │ │ └── UsageController.ts │ │ ├── eventListeners/ │ │ │ └── subscriptionEvents.ts │ │ ├── main.ts │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── types.ts │ ├── puterfs/ │ │ ├── PuterFSProvider.js │ │ ├── fsentries/ │ │ │ ├── BaseOperation.js │ │ │ ├── Delete.js │ │ │ ├── FSEntryController.js │ │ │ ├── Insert.js │ │ │ └── Update.js │ │ ├── lib/ │ │ │ └── objectfn.js │ │ ├── main.js │ │ ├── package.json │ │ └── storage/ │ │ ├── LocalDiskStorageController.js │ │ └── ProxyStorageController.js │ ├── serverInfo/ │ │ ├── config.json │ │ ├── index.ts │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── types.ts │ ├── tsconfig.json │ ├── utilities.js │ ├── whoami/ │ │ ├── main.js │ │ ├── package.json │ │ └── routes.js │ └── worker-sandbox.js ├── install.md ├── mod_packages/ │ └── testex/ │ └── package.json ├── mods/ │ ├── README.md │ ├── mods_available/ │ │ ├── dev-socket/ │ │ │ ├── main.js │ │ │ └── package.json │ │ ├── example/ │ │ │ ├── main.js │ │ │ └── package.json │ │ ├── example-singlefile.js │ │ ├── kdmod/ │ │ │ ├── CustomPuterService.js │ │ │ ├── README.md │ │ │ ├── ShareTestService.js │ │ │ ├── data/ │ │ │ │ └── sharetest_scenarios.js │ │ │ ├── gui/ │ │ │ │ └── main.js │ │ │ ├── module.js │ │ │ └── package.json │ │ ├── test-actions/ │ │ │ ├── main.js │ │ │ └── package.json │ │ └── testex.js │ └── mods_enabled/ │ └── .gitignore ├── package.json ├── rust-toolchain.toml ├── scripts/ │ └── gen.sh ├── src/ │ ├── backend/ │ │ ├── .gitignore │ │ ├── CONTRIBUTING.md │ │ ├── README.md │ │ ├── doc/ │ │ │ ├── A-and-A/ │ │ │ │ ├── auth.md │ │ │ │ └── permission.md │ │ │ ├── Kernel.md │ │ │ ├── README.md │ │ │ ├── contributors/ │ │ │ │ ├── boot-sequence.md │ │ │ │ ├── coding-style.md │ │ │ │ ├── modules.md │ │ │ │ └── structure.md │ │ │ ├── dev_socket.md │ │ │ ├── extensions/ │ │ │ │ ├── README.md │ │ │ │ ├── builtins/ │ │ │ │ │ └── data.md │ │ │ │ └── pages/ │ │ │ │ ├── core-devs.md │ │ │ │ ├── drivers.md │ │ │ │ ├── import-and-export.md │ │ │ │ └── runtime-modules.md │ │ │ ├── features/ │ │ │ │ ├── batch-and-symlinks.md │ │ │ │ ├── protected-apps.md │ │ │ │ └── service-scripts.md │ │ │ ├── howto_make_driver.md │ │ │ ├── license_header.txt │ │ │ ├── lists-of-things/ │ │ │ │ ├── list-of-permissions.md │ │ │ │ └── list-of-tto-types.md │ │ │ ├── log_config.md │ │ │ ├── modules/ │ │ │ │ ├── filesystem/ │ │ │ │ │ └── API_SPEC.md │ │ │ │ └── puterai/ │ │ │ │ └── README.md │ │ │ ├── notes/ │ │ │ │ └── 2024-10-03_email_in_use_checks.md │ │ │ └── services/ │ │ │ ├── config.md │ │ │ ├── event_buses.md │ │ │ ├── http.md │ │ │ └── log.md │ │ ├── exports.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── CoreModule.js │ │ │ ├── DatabaseModule.js │ │ │ ├── Extension.js │ │ │ ├── ExtensionModule.js │ │ │ ├── ExtensionService.js │ │ │ ├── Kernel.js │ │ │ ├── LocalDiskStorageModule.js │ │ │ ├── MemoryStorageModule.js │ │ │ ├── annotatedobjects.js │ │ │ ├── api/ │ │ │ │ ├── APIError.js │ │ │ │ ├── PathOrUIDValidator.js │ │ │ │ ├── api_error_handler.js │ │ │ │ ├── eggspress.js │ │ │ │ └── filesystem/ │ │ │ │ ├── FSNodeParam.js │ │ │ │ ├── FlagParam.js │ │ │ │ ├── StringParam.js │ │ │ │ └── UserParam.js │ │ │ ├── boot/ │ │ │ │ ├── BootLogger.js │ │ │ │ ├── RuntimeEnvironment.js │ │ │ │ └── default_config.js │ │ │ ├── clients/ │ │ │ │ ├── dynamodb/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── DDBClient.ts │ │ │ │ │ └── DDBClientWrapper.ts │ │ │ │ └── redis/ │ │ │ │ ├── .gitignore │ │ │ │ ├── cacheUpdate.ts │ │ │ │ ├── deleteRedisKeys.ts │ │ │ │ ├── redisSingleton.test.ts │ │ │ │ └── redisSingleton.ts │ │ │ ├── codex/ │ │ │ │ ├── CodeUtil.js │ │ │ │ ├── README.md │ │ │ │ └── Sequence.js │ │ │ ├── config/ │ │ │ │ ├── ConfigLoader.js │ │ │ │ ├── deep_proto_merge.js │ │ │ │ └── reserved_words.js │ │ │ ├── config.d.ts │ │ │ ├── config.js │ │ │ ├── consts/ │ │ │ │ └── app-icons.js │ │ │ ├── data/ │ │ │ │ └── hardcoded-permissions.js │ │ │ ├── definitions/ │ │ │ │ └── SimpleEntity.js │ │ │ ├── entities/ │ │ │ │ └── Group.js │ │ │ ├── env │ │ │ ├── errors/ │ │ │ │ ├── TechnicalError.js │ │ │ │ └── error_help_details.js │ │ │ ├── extension/ │ │ │ │ ├── RuntimeModule.js │ │ │ │ └── RuntimeModuleRegistry.js │ │ │ ├── filesystem/ │ │ │ │ ├── ECMAP.js │ │ │ │ ├── FSNodeContext.js │ │ │ │ ├── FilesystemService.js │ │ │ │ ├── batch/ │ │ │ │ │ ├── BatchExecutor.js │ │ │ │ │ └── commands.js │ │ │ │ ├── definitions/ │ │ │ │ │ ├── capabilities.js │ │ │ │ │ ├── proto/ │ │ │ │ │ │ └── fsentry.proto │ │ │ │ │ └── ts/ │ │ │ │ │ ├── fsentry.js │ │ │ │ │ └── fsentry.ts │ │ │ │ ├── hl_operations/ │ │ │ │ │ ├── definitions.js │ │ │ │ │ ├── hl_copy.js │ │ │ │ │ ├── hl_data_read.js │ │ │ │ │ ├── hl_mkdir.js │ │ │ │ │ ├── hl_mklink.js │ │ │ │ │ ├── hl_mkshortcut.js │ │ │ │ │ ├── hl_move.js │ │ │ │ │ ├── hl_name_search.js │ │ │ │ │ ├── hl_read.js │ │ │ │ │ ├── hl_readdir.js │ │ │ │ │ ├── hl_remove.js │ │ │ │ │ ├── hl_stat.js │ │ │ │ │ └── hl_write.js │ │ │ │ ├── lib/ │ │ │ │ │ └── PuterPath.js │ │ │ │ ├── ll_operations/ │ │ │ │ │ ├── definitions.js │ │ │ │ │ ├── ll_copy.js │ │ │ │ │ ├── ll_copy_idea.js │ │ │ │ │ ├── ll_listusers.js │ │ │ │ │ ├── ll_mkdir.js │ │ │ │ │ ├── ll_move.js │ │ │ │ │ ├── ll_read.js │ │ │ │ │ ├── ll_readdir.js │ │ │ │ │ ├── ll_readshares.js │ │ │ │ │ ├── ll_rmdir.js │ │ │ │ │ ├── ll_rmnode.js │ │ │ │ │ └── ll_write.js │ │ │ │ ├── node/ │ │ │ │ │ ├── selectors.js │ │ │ │ │ └── states.js │ │ │ │ ├── storage/ │ │ │ │ │ └── UploadProgressTracker.js │ │ │ │ ├── strategies/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── storage_a/ │ │ │ │ │ ├── LocalDiskStorageStrategy.js │ │ │ │ │ └── README.md │ │ │ │ ├── validation.bench.js │ │ │ │ └── validation.js │ │ │ ├── helpers.js │ │ │ ├── index.js │ │ │ ├── kernel/ │ │ │ │ └── modutil.js │ │ │ ├── loadTestConfig.js │ │ │ ├── middleware/ │ │ │ │ ├── abuse.js │ │ │ │ ├── anticsrf.js │ │ │ │ ├── auth.js │ │ │ │ ├── auth2.js │ │ │ │ ├── configurable_auth.js │ │ │ │ ├── featureflag.js │ │ │ │ ├── measure.js │ │ │ │ ├── subdomain.js │ │ │ │ └── verified.js │ │ │ ├── modules/ │ │ │ │ ├── ai/ │ │ │ │ │ └── PuterAIChatModule.js │ │ │ │ ├── apps/ │ │ │ │ │ ├── AppIconService.js │ │ │ │ │ ├── AppIconService.test.js │ │ │ │ │ ├── AppInformationService.js │ │ │ │ │ ├── AppPermissionService.js │ │ │ │ │ ├── AppRedisCacheSpace.js │ │ │ │ │ ├── AppsModule.js │ │ │ │ │ ├── OldAppNameService.js │ │ │ │ │ ├── ProtectedAppService.js │ │ │ │ │ ├── RecommendedAppsRedisCacheSpace.js │ │ │ │ │ ├── RecommendedAppsService.js │ │ │ │ │ ├── default-app-icon.js │ │ │ │ │ ├── lib/ │ │ │ │ │ │ └── IconResult.js │ │ │ │ │ └── privateLaunchAccess.js │ │ │ │ ├── broadcast/ │ │ │ │ │ ├── BroadcastModule.js │ │ │ │ │ ├── BroadcastService.js │ │ │ │ │ └── BroadcastService.redisPubSub.test.js │ │ │ │ ├── captcha/ │ │ │ │ │ ├── CaptchaModule.js │ │ │ │ │ ├── README.md │ │ │ │ │ ├── middleware/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ └── captcha-middleware.js │ │ │ │ │ └── services/ │ │ │ │ │ └── CaptchaService.js │ │ │ │ ├── core/ │ │ │ │ │ ├── AlarmService.d.ts │ │ │ │ │ ├── AlarmService.js │ │ │ │ │ ├── ContextService.js │ │ │ │ │ ├── Core2Module.js │ │ │ │ │ ├── ErrorService.js │ │ │ │ │ ├── ExpectationService.js │ │ │ │ │ ├── LogService.js │ │ │ │ │ ├── PagerService.js │ │ │ │ │ ├── ParameterService.js │ │ │ │ │ ├── ProcessEventService.js │ │ │ │ │ ├── README.md │ │ │ │ │ ├── ServerHealthService/ │ │ │ │ │ │ ├── ServerHealthRedisCacheKeys.js │ │ │ │ │ │ └── ServerHealthService.js │ │ │ │ │ └── lib/ │ │ │ │ │ ├── __lib__.js │ │ │ │ │ ├── expect.js │ │ │ │ │ ├── identifier.js │ │ │ │ │ ├── linux.js │ │ │ │ │ ├── log.js │ │ │ │ │ └── stdio.js │ │ │ │ ├── data-access/ │ │ │ │ │ ├── AppRepository.js │ │ │ │ │ ├── AppService.comp.test.js │ │ │ │ │ ├── AppService.js │ │ │ │ │ ├── AppService.test.js │ │ │ │ │ ├── DEV.md │ │ │ │ │ ├── DataAccessModule.js │ │ │ │ │ └── lib/ │ │ │ │ │ ├── coercion.js │ │ │ │ │ ├── error.js │ │ │ │ │ ├── filter.js │ │ │ │ │ ├── sqlutil.js │ │ │ │ │ └── validation.js │ │ │ │ ├── development/ │ │ │ │ │ ├── DevelopmentModule.js │ │ │ │ │ └── LocalTerminalService.js │ │ │ │ ├── dns/ │ │ │ │ │ ├── DNSModule.js │ │ │ │ │ └── DNSService.js │ │ │ │ ├── domain/ │ │ │ │ │ ├── DomainModule.js │ │ │ │ │ ├── DomainVerificationService.js │ │ │ │ │ └── TXTVerifyService.js │ │ │ │ ├── entitystore/ │ │ │ │ │ ├── EntityStoreInterfaceService.js │ │ │ │ │ └── EntityStoreModule.js │ │ │ │ ├── filesystem/ │ │ │ │ │ └── roadmap.md │ │ │ │ ├── hostos/ │ │ │ │ │ ├── HostOSModule.js │ │ │ │ │ └── ProcessService.js │ │ │ │ ├── internet/ │ │ │ │ │ ├── InternetModule.js │ │ │ │ │ └── WispRelayService.js │ │ │ │ ├── kvstore/ │ │ │ │ │ ├── KVStoreInterfaceService.js │ │ │ │ │ └── KVStoreModule.js │ │ │ │ ├── perfmon/ │ │ │ │ │ └── TelemetryService.js │ │ │ │ ├── puterfs/ │ │ │ │ │ ├── MountpointService.js │ │ │ │ │ ├── PuterFSModule.js │ │ │ │ │ ├── ResourceService.js │ │ │ │ │ ├── SizeService.js │ │ │ │ │ └── customfs/ │ │ │ │ │ ├── MemoryFSProvider.js │ │ │ │ │ ├── MemoryFSService.js │ │ │ │ │ └── README.md │ │ │ │ ├── selfhosted/ │ │ │ │ │ ├── DefaultUserService.js │ │ │ │ │ ├── DevCreditService.js │ │ │ │ │ ├── DevWatcherService.js │ │ │ │ │ ├── SelfHostedModule.js │ │ │ │ │ ├── SelfhostedService.js │ │ │ │ │ ├── ServeSingeFileService.js │ │ │ │ │ └── ServeStaticFilesService.js │ │ │ │ ├── template/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── TemplateModule.js │ │ │ │ │ ├── TemplateService.js │ │ │ │ │ └── lib/ │ │ │ │ │ ├── __lib__.js │ │ │ │ │ └── hello_world.js │ │ │ │ ├── test-config/ │ │ │ │ │ ├── TestConfigModule.js │ │ │ │ │ ├── TestConfigReadService.js │ │ │ │ │ └── TestConfigUpdateService.js │ │ │ │ ├── test-core/ │ │ │ │ │ └── TestCoreModule.js │ │ │ │ ├── test-drivers/ │ │ │ │ │ ├── TestAssetHostService.js │ │ │ │ │ ├── TestDriversModule.js │ │ │ │ │ ├── TestImageService.js │ │ │ │ │ └── doc/ │ │ │ │ │ └── requests.md │ │ │ │ └── web/ │ │ │ │ ├── APIErrorService.js │ │ │ │ ├── README.md │ │ │ │ ├── SocketioService.js │ │ │ │ ├── WebModule.js │ │ │ │ ├── WebServerService.d.ts │ │ │ │ ├── WebServerService.js │ │ │ │ └── lib/ │ │ │ │ ├── __lib__.js │ │ │ │ ├── api_error_handler.js │ │ │ │ └── eggspress.js │ │ │ ├── om/ │ │ │ │ ├── IdentifierUtil.js │ │ │ │ ├── definitions/ │ │ │ │ │ ├── Mapping.js │ │ │ │ │ ├── PropType.js │ │ │ │ │ ├── PropType.test.js │ │ │ │ │ └── Property.js │ │ │ │ ├── docs/ │ │ │ │ │ └── DESIGN.md │ │ │ │ ├── entitystorage/ │ │ │ │ │ ├── AppES.js │ │ │ │ │ ├── AppLimitedES.js │ │ │ │ │ ├── BaseES.js │ │ │ │ │ ├── ESBuilder.js │ │ │ │ │ ├── Entity.js │ │ │ │ │ ├── MaxLimitES.js │ │ │ │ │ ├── NotificationES.js │ │ │ │ │ ├── OwnerLimitedES.js │ │ │ │ │ ├── ProtectedAppES.js │ │ │ │ │ ├── ReadOnlyES.js │ │ │ │ │ ├── SQLES.js │ │ │ │ │ ├── SetOwnerES.js │ │ │ │ │ ├── SubdomainES.js │ │ │ │ │ ├── ValidationES.js │ │ │ │ │ ├── WriteByOwnerOnlyES.js │ │ │ │ │ └── consts.js │ │ │ │ ├── mappings/ │ │ │ │ │ ├── __all__.js │ │ │ │ │ ├── access-token.js │ │ │ │ │ ├── app.js │ │ │ │ │ ├── notification.js │ │ │ │ │ └── subdomain.js │ │ │ │ ├── proptypes/ │ │ │ │ │ ├── __all__.js │ │ │ │ │ └── __all__.test.js │ │ │ │ └── query/ │ │ │ │ ├── query.js │ │ │ │ └── query.test.js │ │ │ ├── polyfill/ │ │ │ │ └── to-string-higher-radix.js │ │ │ ├── public/ │ │ │ │ └── assets/ │ │ │ │ ├── css/ │ │ │ │ │ ├── admin.css │ │ │ │ │ └── style.css │ │ │ │ ├── img/ │ │ │ │ │ ├── logo-bold.psd │ │ │ │ │ └── logo.psd │ │ │ │ └── js/ │ │ │ │ └── app.js │ │ │ ├── routers/ │ │ │ │ ├── _default.js │ │ │ │ ├── apps.js │ │ │ │ ├── auth/ │ │ │ │ │ ├── app-uid-from-origin.js │ │ │ │ │ ├── check-app-acl.endpoint.js │ │ │ │ │ ├── check-app.js │ │ │ │ │ ├── check-permissions.js │ │ │ │ │ ├── configure-2fa.js │ │ │ │ │ ├── create-access-token.js │ │ │ │ │ ├── get-user-app-token.js │ │ │ │ │ ├── grant-dev-app.js │ │ │ │ │ ├── grant-user-app.js │ │ │ │ │ ├── grant-user-group.js │ │ │ │ │ ├── grant-user-user.js │ │ │ │ │ ├── list-permissions.js │ │ │ │ │ ├── list-sessions.js │ │ │ │ │ ├── oidc.js │ │ │ │ │ ├── request-app-root-dir.js │ │ │ │ │ ├── revoke-access-token.js │ │ │ │ │ ├── revoke-dev-app.js │ │ │ │ │ ├── revoke-session.js │ │ │ │ │ ├── revoke-user-app.js │ │ │ │ │ ├── revoke-user-group.js │ │ │ │ │ └── revoke-user-user.js │ │ │ │ ├── change_email.js │ │ │ │ ├── change_username.js │ │ │ │ ├── confirmEmail/ │ │ │ │ │ ├── ConfirmEmailRedisCacheSpace.js │ │ │ │ │ └── confirm-email.js │ │ │ │ ├── contactUs.js │ │ │ │ ├── delete-site.js │ │ │ │ ├── df.js │ │ │ │ ├── down.js │ │ │ │ ├── drivers/ │ │ │ │ │ ├── call.js │ │ │ │ │ ├── list-interfaces.js │ │ │ │ │ ├── usage.js │ │ │ │ │ └── xd.js │ │ │ │ ├── file.js │ │ │ │ ├── filesystem_api/ │ │ │ │ │ ├── batch/ │ │ │ │ │ │ ├── PathResolver.js │ │ │ │ │ │ └── all.js │ │ │ │ │ ├── cache.js │ │ │ │ │ ├── copy.js │ │ │ │ │ ├── delete.js │ │ │ │ │ ├── mkdir.js │ │ │ │ │ ├── move.js │ │ │ │ │ ├── read.js │ │ │ │ │ ├── readdir-subdomains.mjs │ │ │ │ │ ├── readdir.js │ │ │ │ │ ├── rename.js │ │ │ │ │ ├── search.js │ │ │ │ │ ├── stat.js │ │ │ │ │ ├── token-read.js │ │ │ │ │ ├── touch.js │ │ │ │ │ ├── update.js │ │ │ │ │ └── write.js │ │ │ │ ├── get-dev-profile.js │ │ │ │ ├── get-launch-apps.js │ │ │ │ ├── get-launch-apps.test.js │ │ │ │ ├── healthcheck.js │ │ │ │ ├── hosting/ │ │ │ │ │ ├── puter-site-config.js │ │ │ │ │ ├── puter-site-config.test.js │ │ │ │ │ ├── puterSiteMiddleware.js │ │ │ │ │ └── puterSiteMiddleware.test.js │ │ │ │ ├── itemMetadata.js │ │ │ │ ├── kvstore/ │ │ │ │ │ ├── clearItems.js │ │ │ │ │ ├── getItem.js │ │ │ │ │ ├── listItems.js │ │ │ │ │ └── setItem.js │ │ │ │ ├── login.js │ │ │ │ ├── logout.js │ │ │ │ ├── open_item.js │ │ │ │ ├── passwd.js │ │ │ │ ├── puterai/ │ │ │ │ │ └── openai/ │ │ │ │ │ ├── chat_completions.js │ │ │ │ │ └── completions.js │ │ │ │ ├── query/ │ │ │ │ │ └── app.js │ │ │ │ ├── recentAppOpens/ │ │ │ │ │ ├── RecentAppOpensRedisCacheSpace.js │ │ │ │ │ └── rao.js │ │ │ │ ├── remove-site-dir.js │ │ │ │ ├── removeItem.js │ │ │ │ ├── save_account.js │ │ │ │ ├── send-confirm-email.js │ │ │ │ ├── send-pass-recovery-email.js │ │ │ │ ├── set-desktop-bg.js │ │ │ │ ├── set-pass-using-token.js │ │ │ │ ├── set_layout.js │ │ │ │ ├── set_sort_by.js │ │ │ │ ├── sign.js │ │ │ │ ├── signup.js │ │ │ │ ├── signup_create_new_user.js │ │ │ │ ├── sites.js │ │ │ │ ├── suggest_apps.js │ │ │ │ ├── test.js │ │ │ │ ├── update-taskbar-items.js │ │ │ │ ├── user-protected/ │ │ │ │ │ ├── change-email.js │ │ │ │ │ ├── change-password.js │ │ │ │ │ ├── change-username.js │ │ │ │ │ ├── delete-own-user.js │ │ │ │ │ └── disable-2fa.js │ │ │ │ ├── verify-pass-recovery-token.js │ │ │ │ ├── version.js │ │ │ │ ├── writeFile/ │ │ │ │ │ ├── copy.js │ │ │ │ │ ├── delete.js │ │ │ │ │ ├── mkdir.js │ │ │ │ │ ├── move.js │ │ │ │ │ ├── rename.js │ │ │ │ │ ├── trash.js │ │ │ │ │ ├── write.js │ │ │ │ │ └── writeFile_handlers.js │ │ │ │ └── writeFile.js │ │ │ ├── server │ │ │ ├── services/ │ │ │ │ ├── AWSSecretsPopulator.js │ │ │ │ ├── AnomalyService.js │ │ │ │ ├── AnomalyService.test.ts │ │ │ │ ├── BaseService.d.ts │ │ │ │ ├── BaseService.js │ │ │ │ ├── BootScriptService.js │ │ │ │ ├── ChatAPIService.js │ │ │ │ ├── ChatAPIService.test.js │ │ │ │ ├── CleanEmailService.js │ │ │ │ ├── CleanEmailService.test.ts │ │ │ │ ├── ClientOperationService.js │ │ │ │ ├── ClientOperationService.test.ts │ │ │ │ ├── CommandService.js │ │ │ │ ├── CommandService.test.ts │ │ │ │ ├── ConfigurableCountingService.js │ │ │ │ ├── ConfigurableCountingService.test.ts │ │ │ │ ├── Container.js │ │ │ │ ├── ContextInitService.js │ │ │ │ ├── ContextInitService.test.ts │ │ │ │ ├── DetailProviderService.js │ │ │ │ ├── DetailProviderService.test.ts │ │ │ │ ├── DynamoKVStore/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── DynamoKVStore.test.ts │ │ │ │ │ ├── DynamoKVStore.ts │ │ │ │ │ ├── DynamoKVStoreWrapper.ts │ │ │ │ │ └── tableDefinition.ts │ │ │ │ ├── EmailService.js │ │ │ │ ├── EngPortalService.js │ │ │ │ ├── EntityStoreService.js │ │ │ │ ├── EntriService.js │ │ │ │ ├── EventService.js │ │ │ │ ├── EventService.test.ts │ │ │ │ ├── FeatureFlagService.js │ │ │ │ ├── FeatureFlagService.test.ts │ │ │ │ ├── FilesystemAPIService.js │ │ │ │ ├── GetUserService.js │ │ │ │ ├── HelloWorldService.js │ │ │ │ ├── HelloWorldService.test.ts │ │ │ │ ├── HostDiskUsageService.js │ │ │ │ ├── HostnameService.js │ │ │ │ ├── HostnameService.test.ts │ │ │ │ ├── KernelInfoService.js │ │ │ │ ├── LocalDiskStorageService.js │ │ │ │ ├── LockService.js │ │ │ │ ├── LockService.test.ts │ │ │ │ ├── MakeProdDebuggingLessAwfulService.js │ │ │ │ ├── MemoryStorageService.js │ │ │ │ ├── MemoryStorageService.test.ts │ │ │ │ ├── MeteringService/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── MeteringService.test.ts │ │ │ │ │ ├── MeteringService.ts │ │ │ │ │ ├── MeteringServiceWrapper.mjs │ │ │ │ │ ├── README.md │ │ │ │ │ ├── consts.ts │ │ │ │ │ ├── costMaps/ │ │ │ │ │ │ ├── awsPollyCostMap.ts │ │ │ │ │ │ ├── awsTextractCostMap.ts │ │ │ │ │ │ ├── claudeCostMap.ts │ │ │ │ │ │ ├── deepSeekCostMap.ts │ │ │ │ │ │ ├── elevenlabsCostMap.ts │ │ │ │ │ │ ├── fileSystemCostMap.ts │ │ │ │ │ │ ├── geminiCostMap.ts │ │ │ │ │ │ ├── groqCostMap.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── kvCostMap.ts │ │ │ │ │ │ ├── mistralCostMap.ts │ │ │ │ │ │ ├── openAiCostMap.ts │ │ │ │ │ │ ├── openaiImageCostMap.ts │ │ │ │ │ │ ├── openaiVideoCostMap.ts │ │ │ │ │ │ ├── openrouterCostMap.ts │ │ │ │ │ │ ├── togetherCostMap.ts │ │ │ │ │ │ └── xaiCostMap.ts │ │ │ │ │ ├── subPolicies/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── registeredUserFreePolicy.ts │ │ │ │ │ │ └── tempUserFreePolicy.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── NotificationService.js │ │ │ │ ├── NotificationService.test.ts │ │ │ │ ├── OperationTraceService.js │ │ │ │ ├── PeerService.js │ │ │ │ ├── PermissionAPIService.js │ │ │ │ ├── PuterAPIService.js │ │ │ │ ├── PuterHomepageService.js │ │ │ │ ├── PuterSiteService.js │ │ │ │ ├── PuterVersionService.js │ │ │ │ ├── PuterVersionService.test.ts │ │ │ │ ├── ReferralCodeService.js │ │ │ │ ├── ReferralCodeService.test.js │ │ │ │ ├── RefreshAssociationsService.js │ │ │ │ ├── RegistrantService.js │ │ │ │ ├── RegistryService.js │ │ │ │ ├── RegistryService.test.ts │ │ │ │ ├── RequestMeasureService.js │ │ │ │ ├── SNSService.js │ │ │ │ ├── SNSService.test.ts │ │ │ │ ├── SUService.js │ │ │ │ ├── ScriptService.js │ │ │ │ ├── ScriptService.test.ts │ │ │ │ ├── ServeGUIService.js │ │ │ │ ├── ServicePatch.js │ │ │ │ ├── SessionService.js │ │ │ │ ├── SessionService.test.js │ │ │ │ ├── ShareService.js │ │ │ │ ├── ShutdownService.js │ │ │ │ ├── ShutdownService.test.ts │ │ │ │ ├── StorageService.js │ │ │ │ ├── StrategizedService.js │ │ │ │ ├── SystemDataService.js │ │ │ │ ├── SystemValidationService.js │ │ │ │ ├── SystemValidationService.test.ts │ │ │ │ ├── TestService.js │ │ │ │ ├── TestService.test.ts │ │ │ │ ├── User.d.ts │ │ │ │ ├── UserRedisCacheSpace.js │ │ │ │ ├── UserService.d.ts │ │ │ │ ├── UserService.js │ │ │ │ ├── VerifiedGroupService.js │ │ │ │ ├── WSPushService.js │ │ │ │ ├── WebDAV/ │ │ │ │ │ ├── WebDAVService.js │ │ │ │ │ ├── lockStore.mjs │ │ │ │ │ ├── methodHandlers/ │ │ │ │ │ │ ├── COPY.mjs │ │ │ │ │ │ ├── DELETE.mjs │ │ │ │ │ │ ├── HEAD_GET.mjs │ │ │ │ │ │ ├── LOCK.mjs │ │ │ │ │ │ ├── MKCOL.mjs │ │ │ │ │ │ ├── MOVE.mjs │ │ │ │ │ │ ├── OPTIONS.mjs │ │ │ │ │ │ ├── PROPFIND.mjs │ │ │ │ │ │ ├── PROPPATCH.mjs │ │ │ │ │ │ ├── PUT.mjs │ │ │ │ │ │ ├── UNLOCK.mjs │ │ │ │ │ │ ├── method.mjs │ │ │ │ │ │ └── methodMap.mjs │ │ │ │ │ └── utils.mjs │ │ │ │ ├── WispService.js │ │ │ │ ├── abuse-prevention/ │ │ │ │ │ ├── AuthAuditService.js │ │ │ │ │ ├── EdgeRateLimitService.js │ │ │ │ │ ├── IdentificationService.js │ │ │ │ │ └── concurrentRequestLimiter/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── ConcurrentRequestLimiter.test.ts │ │ │ │ │ ├── ConcurrentRequestLimiter.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── ai/ │ │ │ │ │ ├── AIInterfaceService.js │ │ │ │ │ ├── README.md │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── AIChatRedisCacheSpace.ts │ │ │ │ │ │ ├── AIChatService.ts │ │ │ │ │ │ └── providers/ │ │ │ │ │ │ ├── ChatProvider.ts │ │ │ │ │ │ ├── ClaudeProvider/ │ │ │ │ │ │ │ ├── ClaudeProvider.test.ts │ │ │ │ │ │ │ ├── ClaudeProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ ├── DeepSeekProvider/ │ │ │ │ │ │ │ ├── DeepSeekProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ ├── FakeChatProvider.ts │ │ │ │ │ │ ├── GeminiProvider/ │ │ │ │ │ │ │ ├── GeminiChatProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ ├── GroqAiProvider/ │ │ │ │ │ │ │ ├── GroqAIProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ ├── MistralAiProvider/ │ │ │ │ │ │ │ ├── MistralAiProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ ├── OllamaProvider.ts │ │ │ │ │ │ ├── OpenAiProvider/ │ │ │ │ │ │ │ ├── OpenAiChatCompletionsProvider.ts │ │ │ │ │ │ │ ├── OpenAiChatResponsesProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ ├── OpenRouterProvider/ │ │ │ │ │ │ │ ├── OpenRouterProvider.ts │ │ │ │ │ │ │ └── modelOverrides.ts │ │ │ │ │ │ ├── TogetherAiProvider/ │ │ │ │ │ │ │ └── TogetherAIProvider.ts │ │ │ │ │ │ ├── XAIProvider/ │ │ │ │ │ │ │ ├── XAIProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── docs/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── ai-services-config.md │ │ │ │ │ │ ├── api_examples.md │ │ │ │ │ │ └── config.md │ │ │ │ │ ├── image/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── AIImageGenerationService.ts │ │ │ │ │ │ └── providers/ │ │ │ │ │ │ ├── CloudflareImageGenerationProvider/ │ │ │ │ │ │ │ ├── CloudflareImageGenerationProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ ├── GeminiImageGenerationProvider/ │ │ │ │ │ │ │ ├── GeminiImageGenerationProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ ├── OpenAiImageGenerationProvider/ │ │ │ │ │ │ │ ├── OpenAiImageGenerationProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ ├── TogetherImageGenerationProvider/ │ │ │ │ │ │ │ ├── TogetherImageGenerationProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ ├── XAIImageGenerationProvider/ │ │ │ │ │ │ │ ├── XAIImageGenerationProvider.ts │ │ │ │ │ │ │ └── models.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── moderation/ │ │ │ │ │ │ └── AsModeration.js │ │ │ │ │ ├── ocr/ │ │ │ │ │ │ ├── AWSTextractService.js │ │ │ │ │ │ └── MistralOCRService.js │ │ │ │ │ ├── sts/ │ │ │ │ │ │ └── ElevenLabsVoiceChangerService.js │ │ │ │ │ ├── stt/ │ │ │ │ │ │ └── OpenAISpeechToTextService.js │ │ │ │ │ ├── tts/ │ │ │ │ │ │ ├── AWSPollyService.js │ │ │ │ │ │ ├── ElevenLabsTTSService.js │ │ │ │ │ │ ├── OpenAITTSService.js │ │ │ │ │ │ └── PollyRedisCacheKeys.js │ │ │ │ │ ├── utils/ │ │ │ │ │ │ ├── FunctionCalling.js │ │ │ │ │ │ ├── Messages.js │ │ │ │ │ │ ├── OpenAIUtil.d.ts │ │ │ │ │ │ ├── OpenAIUtil.js │ │ │ │ │ │ ├── Streaming.js │ │ │ │ │ │ └── messages.test.js │ │ │ │ │ └── video/ │ │ │ │ │ ├── OpenAIVideoGenerationService/ │ │ │ │ │ │ └── OpenAIVideoGenerationService.js │ │ │ │ │ └── TogetherVideoGenerationService/ │ │ │ │ │ ├── TogetherVideoGenerationService.js │ │ │ │ │ └── models.js │ │ │ │ ├── auth/ │ │ │ │ │ ├── ACLService.js │ │ │ │ │ ├── Actor.d.ts │ │ │ │ │ ├── Actor.js │ │ │ │ │ ├── AntiCSRFService.js │ │ │ │ │ ├── AntiCSRFService.test.ts │ │ │ │ │ ├── AuthService.js │ │ │ │ │ ├── AuthService.privateAssetToken.test.ts │ │ │ │ │ ├── GroupRedisCacheSpace.js │ │ │ │ │ ├── GroupService.js │ │ │ │ │ ├── OIDCService.js │ │ │ │ │ ├── OTPService.js │ │ │ │ │ ├── PermissionScanRedisCacheSpace.js │ │ │ │ │ ├── PermissionScanRedisCacheSpace.test.js │ │ │ │ │ ├── PermissionService.js │ │ │ │ │ ├── PermissionShortcutService.js │ │ │ │ │ ├── PreAuthService.js │ │ │ │ │ ├── SignupService.js │ │ │ │ │ ├── TokenService.js │ │ │ │ │ ├── TokenService.test.ts │ │ │ │ │ ├── VirtualGroupService.js │ │ │ │ │ ├── permissionConts.mjs │ │ │ │ │ ├── permissionUtils.bench.js │ │ │ │ │ └── permissionUtils.mjs │ │ │ │ ├── database/ │ │ │ │ │ ├── BaseDatabaseAccessService.js │ │ │ │ │ ├── SqliteDatabaseAccessService.js │ │ │ │ │ ├── constructs.js │ │ │ │ │ ├── consts.js │ │ │ │ │ └── sqlite_setup/ │ │ │ │ │ ├── 0001_create-tables.sql │ │ │ │ │ ├── 0002_add-default-apps.sql │ │ │ │ │ ├── 0003_user-permissions.sql │ │ │ │ │ ├── 0004_sessions.sql │ │ │ │ │ ├── 0005_background-apps.sql │ │ │ │ │ ├── 0006_update-apps.sql │ │ │ │ │ ├── 0007_sessions.sql │ │ │ │ │ ├── 0008_otp.sql │ │ │ │ │ ├── 0009_app-prefix-fix.sql │ │ │ │ │ ├── 0010_add-git-app.sql │ │ │ │ │ ├── 0011_notification.sql │ │ │ │ │ ├── 0012_appmetadata.sql │ │ │ │ │ ├── 0013_protected-apps.sql │ │ │ │ │ ├── 0014_share.sql │ │ │ │ │ ├── 0015_group.sql │ │ │ │ │ ├── 0016_group-permissions.sql │ │ │ │ │ ├── 0017_publicdirs.sql │ │ │ │ │ ├── 0018_fix-0003.sql │ │ │ │ │ ├── 0019_fix-0016.sql │ │ │ │ │ ├── 0020_dev-center.sql │ │ │ │ │ ├── 0021_app-owner-id.sql │ │ │ │ │ ├── 0022_dev-center-max.sql │ │ │ │ │ ├── 0023_fix-kv.sql │ │ │ │ │ ├── 0024_default-groups.sql │ │ │ │ │ ├── 0025_system-user.dbmig.js │ │ │ │ │ ├── 0026_user-groups.dbmig.js │ │ │ │ │ ├── 0027_emulator-app.dbmig.js │ │ │ │ │ ├── 0028_clean-email.sql │ │ │ │ │ ├── 0029_emulator_priv.sql │ │ │ │ │ ├── 0030_comments.sql │ │ │ │ │ ├── 0031_audit-meta.sql │ │ │ │ │ ├── 0032_signup_metadata.sql │ │ │ │ │ ├── 0033_ai-usage.sql │ │ │ │ │ ├── 0034_app-redirect.sql │ │ │ │ │ ├── 0035_threads.sql │ │ │ │ │ ├── 0036_dev-to-app.sql │ │ │ │ │ ├── 0037_cost.sql │ │ │ │ │ ├── 0038_custom-domains.sql │ │ │ │ │ ├── 0039_add-expireAt-to-kv-store.sql │ │ │ │ │ ├── 0040_add_user_metadata.sql │ │ │ │ │ ├── 0041_add_unique_constraint_user_uuid.sql │ │ │ │ │ ├── 0042_add_cloudflare_d1.sql │ │ │ │ │ ├── 0043_add_dt.sql │ │ │ │ │ ├── 0044_dev-center-godmode.sql │ │ │ │ │ ├── 0045_user_oidc_providers.sql │ │ │ │ │ └── 0046_is-private-apps.sql │ │ │ │ ├── drivers/ │ │ │ │ │ ├── CoercionService.js │ │ │ │ │ ├── DriverError.js │ │ │ │ │ ├── DriverService.js │ │ │ │ │ ├── DriverUsagePolicyService.js │ │ │ │ │ ├── FileFacade.js │ │ │ │ │ ├── meta/ │ │ │ │ │ │ ├── Construct.js │ │ │ │ │ │ └── Runtime.js │ │ │ │ │ └── types.js │ │ │ │ ├── file-cache/ │ │ │ │ │ ├── FileTracker.bench.js │ │ │ │ │ └── FileTracker.js │ │ │ │ ├── fs/ │ │ │ │ │ └── FSLockService.js │ │ │ │ ├── periodic/ │ │ │ │ │ └── FSEntryMigrateService.js │ │ │ │ ├── sla/ │ │ │ │ │ ├── RateLimitRedisCacheSpace.js │ │ │ │ │ ├── RateLimitService.js │ │ │ │ │ └── SLAService.js │ │ │ │ ├── web/ │ │ │ │ │ └── UserProtectedEndpointsService.js │ │ │ │ └── worker/ │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── WorkerService.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── index.js │ │ │ │ │ └── s2w-router.js │ │ │ │ ├── template/ │ │ │ │ │ └── puter-portable.js │ │ │ │ ├── webpack.config.js │ │ │ │ └── workerUtils/ │ │ │ │ ├── cloudflareDeploy.js │ │ │ │ ├── nameUtils.js │ │ │ │ └── puterUtils.js │ │ │ ├── structured/ │ │ │ │ ├── README.md │ │ │ │ └── sequence/ │ │ │ │ ├── scan-permission.mjs │ │ │ │ ├── share/ │ │ │ │ │ ├── process_recipients.js │ │ │ │ │ ├── process_shares.js │ │ │ │ │ └── validate.js │ │ │ │ └── share.js │ │ │ ├── traits/ │ │ │ │ ├── AssignableMethodsFeature.js │ │ │ │ ├── AsyncProviderFeature.js │ │ │ │ ├── ChannelFeature.js │ │ │ │ ├── ContextAwareFeature.js │ │ │ │ ├── OtelFeature.js │ │ │ │ ├── SyncFeature.js │ │ │ │ └── WeakConstructorFeature.js │ │ │ ├── unstructured/ │ │ │ │ ├── permission-scan-lib.js │ │ │ │ └── permission-scanners.js │ │ │ ├── user-mig.js │ │ │ ├── util/ │ │ │ │ ├── .gitignore │ │ │ │ ├── CircularQueue.bench.js │ │ │ │ ├── CircularQueue.js │ │ │ │ ├── asyncutil.js │ │ │ │ ├── configutil.js │ │ │ │ ├── consolelog.js │ │ │ │ ├── context.bench.js │ │ │ │ ├── context.d.ts │ │ │ │ ├── context.js │ │ │ │ ├── datautil.bench.js │ │ │ │ ├── datautil.js │ │ │ │ ├── debugutil.js │ │ │ │ ├── errorutil.js │ │ │ │ ├── esmcontext.js │ │ │ │ ├── expressutil.js │ │ │ │ ├── fnutil.js │ │ │ │ ├── fuzz.js │ │ │ │ ├── gcutil.js │ │ │ │ ├── hl_types.js │ │ │ │ ├── hl_types.test.js │ │ │ │ ├── identifier.bench.js │ │ │ │ ├── identifier.js │ │ │ │ ├── kvSingleton.js │ │ │ │ ├── lockutil.bench.js │ │ │ │ ├── lockutil.js │ │ │ │ ├── multivalue.js │ │ │ │ ├── objutil.js │ │ │ │ ├── opmath.bench.js │ │ │ │ ├── opmath.js │ │ │ │ ├── opmath.test.js │ │ │ │ ├── otelutil.js │ │ │ │ ├── outcomeutil.ts │ │ │ │ ├── pathutil.bench.js │ │ │ │ ├── pathutil.js │ │ │ │ ├── retryutil.js │ │ │ │ ├── safety.js │ │ │ │ ├── securehttp.js │ │ │ │ ├── stdioutil.js │ │ │ │ ├── streamutil.js │ │ │ │ ├── structutil.bench.js │ │ │ │ ├── structutil.js │ │ │ │ ├── urlutil.js │ │ │ │ ├── uuidfpe.bench.js │ │ │ │ ├── uuidfpe.js │ │ │ │ ├── validutil.js │ │ │ │ ├── validutil.test.js │ │ │ │ ├── versionutil.js │ │ │ │ ├── versionutil.test.js │ │ │ │ └── workutil.js │ │ │ └── validation.js │ │ ├── test/ │ │ │ └── modules/ │ │ │ └── captcha/ │ │ │ └── integration/ │ │ │ └── extension-integration.test.js │ │ ├── tools/ │ │ │ ├── .test-webhook-config.json │ │ │ ├── README.md │ │ │ ├── test-webhook.js │ │ │ └── test.mjs │ │ ├── vitest.bench.config.js │ │ ├── vitest.bench.config.ts │ │ └── vitest.config.ts │ ├── dev-center/ │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── coming-soon.html │ │ ├── css/ │ │ │ ├── normalize.css │ │ │ └── style.css │ │ ├── index.html │ │ └── js/ │ │ ├── apps.js │ │ ├── dev-center.js │ │ ├── images.js │ │ ├── libs/ │ │ │ ├── html-entities.js │ │ │ ├── jquery.dragster.js │ │ │ └── slugify.js │ │ ├── websites.js │ │ └── workers.js │ ├── docs/ │ │ ├── CREDITS.md │ │ ├── LICENSE-CODE.txt │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── build.js │ │ ├── package.json │ │ └── src/ │ │ ├── AI/ │ │ │ ├── chat.md │ │ │ ├── img2txt.md │ │ │ ├── listModelProviders.md │ │ │ ├── listModels.md │ │ │ ├── speech2speech.md │ │ │ ├── speech2txt.md │ │ │ ├── txt2img.md │ │ │ ├── txt2speech.md │ │ │ └── txt2vid.md │ │ ├── AI.md │ │ ├── Apps/ │ │ │ ├── create.md │ │ │ ├── delete.md │ │ │ ├── get.md │ │ │ ├── list.md │ │ │ └── update.md │ │ ├── Apps.md │ │ ├── Auth/ │ │ │ ├── getDetailedAppUsage.md │ │ │ ├── getMonthlyUsage.md │ │ │ ├── getUser.md │ │ │ ├── isSignedIn.md │ │ │ ├── signIn.md │ │ │ └── signOut.md │ │ ├── Auth.md │ │ ├── Drivers/ │ │ │ └── call.md │ │ ├── Drivers.md │ │ ├── FS/ │ │ │ ├── copy.md │ │ │ ├── delete.md │ │ │ ├── getReadURL.md │ │ │ ├── mkdir.md │ │ │ ├── move.md │ │ │ ├── read.md │ │ │ ├── readdir.md │ │ │ ├── rename.md │ │ │ ├── space.md │ │ │ ├── stat.md │ │ │ ├── upload.md │ │ │ └── write.md │ │ ├── FS.md │ │ ├── Hosting/ │ │ │ ├── create.md │ │ │ ├── delete.md │ │ │ ├── get.md │ │ │ ├── list.md │ │ │ └── update.md │ │ ├── Hosting.md │ │ ├── KV/ │ │ │ ├── MAX_KEY_SIZE.md │ │ │ ├── MAX_VALUE_SIZE.md │ │ │ ├── add.md │ │ │ ├── decr.md │ │ │ ├── del.md │ │ │ ├── expire.md │ │ │ ├── expireAt.md │ │ │ ├── flush.md │ │ │ ├── get.md │ │ │ ├── incr.md │ │ │ ├── list.md │ │ │ ├── remove.md │ │ │ ├── set.md │ │ │ └── update.md │ │ ├── KV.md │ │ ├── Networking/ │ │ │ ├── Socket.md │ │ │ ├── TLSSocket.md │ │ │ └── fetch.md │ │ ├── Networking.md │ │ ├── Objects/ │ │ │ ├── AppConnection.md │ │ │ ├── app.md │ │ │ ├── chatresponse.md │ │ │ ├── chatresponsechunk.md │ │ │ ├── createappresult.md │ │ │ ├── detailedappusage.md │ │ │ ├── fsitem.md │ │ │ ├── kvlistpage.md │ │ │ ├── kvpair.md │ │ │ ├── monthlyusage.md │ │ │ ├── signinresult.md │ │ │ ├── spaceinfo.md │ │ │ ├── speech2txtresult.md │ │ │ ├── subdomain.md │ │ │ ├── toolcall.md │ │ │ ├── user.md │ │ │ ├── workerdeployment.md │ │ │ └── workerinfo.md │ │ ├── Objects.md │ │ ├── Peer/ │ │ │ ├── connect.md │ │ │ ├── ensureTurnRelays.md │ │ │ └── serve.md │ │ ├── Peer.md │ │ ├── Perms/ │ │ │ ├── request.md │ │ │ ├── requestEmail.md │ │ │ ├── requestManageApps.md │ │ │ ├── requestManageSubdomains.md │ │ │ ├── requestReadApps.md │ │ │ ├── requestReadDesktop.md │ │ │ ├── requestReadDocuments.md │ │ │ ├── requestReadPictures.md │ │ │ ├── requestReadSubdomains.md │ │ │ ├── requestReadVideos.md │ │ │ ├── requestWriteDesktop.md │ │ │ ├── requestWriteDocuments.md │ │ │ ├── requestWritePictures.md │ │ │ └── requestWriteVideos.md │ │ ├── Perms.md │ │ ├── UI/ │ │ │ ├── alert.md │ │ │ ├── authenticateWithPuter.md │ │ │ ├── contextMenu.md │ │ │ ├── createWindow.md │ │ │ ├── exit.md │ │ │ ├── getLanguage.md │ │ │ ├── hideSpinner.md │ │ │ ├── hideWindow.md │ │ │ ├── launchApp.md │ │ │ ├── notify.md │ │ │ ├── on.md │ │ │ ├── onItemsOpened.md │ │ │ ├── onLaunchedWithItems.md │ │ │ ├── onWindowClose.md │ │ │ ├── parentApp.md │ │ │ ├── prompt.md │ │ │ ├── setMenubar.md │ │ │ ├── setWindowHeight.md │ │ │ ├── setWindowPosition.md │ │ │ ├── setWindowSize.md │ │ │ ├── setWindowTitle.md │ │ │ ├── setWindowWidth.md │ │ │ ├── setWindowX.md │ │ │ ├── setWindowY.md │ │ │ ├── showColorPicker.md │ │ │ ├── showDirectoryPicker.md │ │ │ ├── showFontPicker.md │ │ │ ├── showOpenFilePicker.md │ │ │ ├── showSaveFilePicker.md │ │ │ ├── showSpinner.md │ │ │ ├── showWindow.md │ │ │ ├── socialShare.md │ │ │ └── wasLaunchedWithItems.md │ │ ├── UI.md │ │ ├── Utils/ │ │ │ ├── appID.md │ │ │ ├── env.md │ │ │ ├── print.md │ │ │ └── randName.md │ │ ├── Utils.md │ │ ├── Workers/ │ │ │ ├── create.md │ │ │ ├── delete.md │ │ │ ├── exec.md │ │ │ ├── get.md │ │ │ ├── list.md │ │ │ └── router.md │ │ ├── Workers.md │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ └── style.css │ │ │ ├── favicon/ │ │ │ │ ├── browserconfig.xml │ │ │ │ └── manifest.json │ │ │ └── js/ │ │ │ ├── context-menu.js │ │ │ ├── example.js │ │ │ ├── index.js │ │ │ ├── router.js │ │ │ ├── search.js │ │ │ └── sidebar.js │ │ ├── examples.js │ │ ├── examples.md │ │ ├── frameworks.md │ │ ├── getting-started.md │ │ ├── index.md │ │ ├── menu.js │ │ ├── playground/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── style.css │ │ │ │ └── js/ │ │ │ │ └── app.js │ │ │ └── examples/ │ │ │ ├── ai-chat-claude-3-7-sonnet.html │ │ │ ├── ai-chat-claude.html │ │ │ ├── ai-chat-deepseek.html │ │ │ ├── ai-chat-gemini.html │ │ │ ├── ai-chat-openai-o3-mini.html │ │ │ ├── ai-chat-stream.html │ │ │ ├── ai-chatgpt.html │ │ │ ├── ai-function-calling.html │ │ │ ├── ai-gpt-vision.html │ │ │ ├── ai-img2txt.html │ │ │ ├── ai-list-model-providers.html │ │ │ ├── ai-list-models.html │ │ │ ├── ai-resume-analyzer.html │ │ │ ├── ai-speech2speech-elevenlabs.html │ │ │ ├── ai-speech2speech-file.html │ │ │ ├── ai-speech2speech-url.html │ │ │ ├── ai-speech2txt.html │ │ │ ├── ai-streaming-function-calling.html │ │ │ ├── ai-txt2img-image-to-image.html │ │ │ ├── ai-txt2img-options.html │ │ │ ├── ai-txt2img.html │ │ │ ├── ai-txt2speech-elevenlabs.html │ │ │ ├── ai-txt2speech-engines.html │ │ │ ├── ai-txt2speech-openai.html │ │ │ ├── ai-txt2speech-options.html │ │ │ ├── ai-txt2speech.html │ │ │ ├── ai-txt2vid-options.html │ │ │ ├── ai-txt2vid.html │ │ │ ├── ai-web-search.html │ │ │ ├── ai-xai.html │ │ │ ├── app-ai-chat.html │ │ │ ├── app-camera.html │ │ │ ├── app-create.html │ │ │ ├── app-delete.html │ │ │ ├── app-get.html │ │ │ ├── app-list.html │ │ │ ├── app-summarizer.html │ │ │ ├── app-todo.html │ │ │ ├── app-update.html │ │ │ ├── auth-get-monthly-usage.html │ │ │ ├── auth-get-user.html │ │ │ ├── auth-is-signed-in.html │ │ │ ├── auth-sign-in.html │ │ │ ├── auth-sign-out.html │ │ │ ├── fs-copy.html │ │ │ ├── fs-delete-directory.html │ │ │ ├── fs-delete.html │ │ │ ├── fs-mkdir-create-missing-parents.html │ │ │ ├── fs-mkdir-dedupe.html │ │ │ ├── fs-mkdir.html │ │ │ ├── fs-move-create-missing-parents.html │ │ │ ├── fs-move.html │ │ │ ├── fs-read.html │ │ │ ├── fs-readdir.html │ │ │ ├── fs-rename.html │ │ │ ├── fs-stat.html │ │ │ ├── fs-upload.html │ │ │ ├── fs-write-create-missing-parents.html │ │ │ ├── fs-write-dedupe.html │ │ │ ├── fs-write-from-input.html │ │ │ ├── fs-write.html │ │ │ ├── hosting-create.html │ │ │ ├── hosting-delete.html │ │ │ ├── hosting-get.html │ │ │ ├── hosting-list.html │ │ │ ├── hosting-update.html │ │ │ ├── intro-auth.html │ │ │ ├── intro-chatgpt.html │ │ │ ├── intro-fs-write.html │ │ │ ├── intro-gpt-vision.html │ │ │ ├── intro-hosting.html │ │ │ ├── intro-kv-set.html │ │ │ ├── kv-add.html │ │ │ ├── kv-decr-nested.html │ │ │ ├── kv-decr.html │ │ │ ├── kv-del.html │ │ │ ├── kv-expire.html │ │ │ ├── kv-expireAt.html │ │ │ ├── kv-flush.html │ │ │ ├── kv-get.html │ │ │ ├── kv-incr-nested.html │ │ │ ├── kv-incr.html │ │ │ ├── kv-list.html │ │ │ ├── kv-name.html │ │ │ ├── kv-remove.html │ │ │ ├── kv-set.html │ │ │ ├── kv-update.html │ │ │ ├── net-basic.html │ │ │ ├── net-fetch.html │ │ │ ├── net-tls.html │ │ │ ├── peer-basic.html │ │ │ ├── perms-request-apps.html │ │ │ ├── perms-request-desktop.html │ │ │ ├── perms-request-documents.html │ │ │ ├── perms-request-email.html │ │ │ ├── perms-request-manage-apps.html │ │ │ ├── perms-request-manage-subdomains.html │ │ │ ├── perms-request-permission.html │ │ │ ├── perms-request-read-apps.html │ │ │ ├── perms-request-read-desktop.html │ │ │ ├── perms-request-read-documents.html │ │ │ ├── perms-request-read-pictures.html │ │ │ ├── perms-request-read-subdomains.html │ │ │ ├── perms-request-read-videos.html │ │ │ ├── perms-request-write-desktop.html │ │ │ ├── perms-request-write-documents.html │ │ │ ├── perms-request-write-pictures.html │ │ │ ├── perms-request-write-videos.html │ │ │ ├── workers-create.html │ │ │ ├── workers-delete.html │ │ │ ├── workers-exec.html │ │ │ ├── workers-get.html │ │ │ ├── workers-list.html │ │ │ └── workers-management.html │ │ ├── playground.js │ │ ├── printdir.sh │ │ ├── redirects.js │ │ ├── robots.txt │ │ ├── security.md │ │ ├── sidebar.js │ │ ├── supported-platforms.md │ │ └── user-pays-model.md │ ├── gui/ │ │ ├── CREDITS.md │ │ ├── build.js │ │ ├── dev-server.js │ │ ├── doc/ │ │ │ ├── el().md │ │ │ ├── utils.md │ │ │ └── webpack_attempts.md │ │ ├── package.json │ │ ├── puter-gui.json │ │ ├── src/ │ │ │ ├── .gitignore │ │ │ ├── IPC.js │ │ │ ├── UI/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── Button.js │ │ │ │ │ ├── CodeEntryView.js │ │ │ │ │ ├── ConfirmationsView.js │ │ │ │ │ ├── Flexer.js │ │ │ │ │ ├── JustHTML.js │ │ │ │ │ ├── PasswordEntry.js │ │ │ │ │ ├── QRCode.js │ │ │ │ │ ├── RecoveryCodeEntryView.js │ │ │ │ │ ├── RecoveryCodesView.js │ │ │ │ │ ├── StepHeading.js │ │ │ │ │ └── StepView.js │ │ │ │ ├── Dashboard/ │ │ │ │ │ ├── ContextMenu/ │ │ │ │ │ │ └── ContextMenu.js │ │ │ │ │ ├── TabAccount.js │ │ │ │ │ ├── TabApps.js │ │ │ │ │ ├── TabFiles.js │ │ │ │ │ ├── TabHome.js │ │ │ │ │ ├── TabSecurity.js │ │ │ │ │ ├── TabUsage.js │ │ │ │ │ └── UIDashboard.js │ │ │ │ ├── PuterDialog.js │ │ │ │ ├── Settings/ │ │ │ │ │ ├── UITabAbout.js │ │ │ │ │ ├── UITabAccount.js │ │ │ │ │ ├── UITabKeyboardShortcuts.js │ │ │ │ │ ├── UITabLanguage.js │ │ │ │ │ ├── UITabPersonalization.js │ │ │ │ │ ├── UITabSecurity.js │ │ │ │ │ ├── UITabUsage.js │ │ │ │ │ ├── UIWindowChangeEmail.js │ │ │ │ │ ├── UIWindowConfirmUserDeletion.js │ │ │ │ │ ├── UIWindowDisable2FA.js │ │ │ │ │ ├── UIWindowFinalizeUserDeletion.js │ │ │ │ │ └── UIWindowSettings.js │ │ │ │ ├── UIAlert.js │ │ │ │ ├── UIColorPickerWidget.js │ │ │ │ ├── UIComponentWindow.js │ │ │ │ ├── UIContextMenu.js │ │ │ │ ├── UIDesktop.js │ │ │ │ ├── UIElement.js │ │ │ │ ├── UIItem.js │ │ │ │ ├── UINotification.js │ │ │ │ ├── UIPopover.js │ │ │ │ ├── UIPrompt.js │ │ │ │ ├── UITaskbar.js │ │ │ │ ├── UITaskbarItem.js │ │ │ │ ├── UIWindow.js │ │ │ │ ├── UIWindow2FASetup.js │ │ │ │ ├── UIWindowAuthMe.js │ │ │ │ ├── UIWindowChangePassword.js │ │ │ │ ├── UIWindowChangeUsername.js │ │ │ │ ├── UIWindowClaimReferral.js │ │ │ │ ├── UIWindowColorPicker.js │ │ │ │ ├── UIWindowCopyToken.js │ │ │ │ ├── UIWindowDesktopBGSettings.js │ │ │ │ ├── UIWindowEmailConfirmationRequired.js │ │ │ │ ├── UIWindowFeedback.js │ │ │ │ ├── UIWindowFontPicker.js │ │ │ │ ├── UIWindowItemProperties.js │ │ │ │ ├── UIWindowLogin.js │ │ │ │ ├── UIWindowLoginInProgress.js │ │ │ │ ├── UIWindowManageSessions.js │ │ │ │ ├── UIWindowMyWebsites.js │ │ │ │ ├── UIWindowNewPassword.js │ │ │ │ ├── UIWindowProgress.js │ │ │ │ ├── UIWindowPublishWebsite.js │ │ │ │ ├── UIWindowPublishWorker.js │ │ │ │ ├── UIWindowQR.js │ │ │ │ ├── UIWindowRecoverPassword.js │ │ │ │ ├── UIWindowRefer.js │ │ │ │ ├── UIWindowRequestPermission.js │ │ │ │ ├── UIWindowSaveAccount.js │ │ │ │ ├── UIWindowSearch.js │ │ │ │ ├── UIWindowSessionList.js │ │ │ │ ├── UIWindowShare.js │ │ │ │ ├── UIWindowSignup.js │ │ │ │ ├── UIWindowSystemInfo.js │ │ │ │ ├── UIWindowTaskManager.js │ │ │ │ ├── UIWindowThemeDialog.js │ │ │ │ └── UIWindowWelcome.js │ │ │ ├── browserconfig.xml │ │ │ ├── css/ │ │ │ │ ├── dashboard.css │ │ │ │ ├── normalize.css │ │ │ │ ├── style.css │ │ │ │ └── theme.css │ │ │ ├── definitions.js │ │ │ ├── extensions/ │ │ │ │ ├── groups-manager.js │ │ │ │ └── modify-user-options-menu.js │ │ │ ├── favicons/ │ │ │ │ ├── browserconfig.xml │ │ │ │ └── manifest.json │ │ │ ├── globals.js │ │ │ ├── helpers/ │ │ │ │ ├── check_password_strength.js │ │ │ │ ├── content_type_to_icon.js │ │ │ │ ├── determine_active_container_parent.js │ │ │ │ ├── download.js │ │ │ │ ├── fixedEncodeURIComponent.js │ │ │ │ ├── generate_file_context_menu.js │ │ │ │ ├── get_html_element_from_options.js │ │ │ │ ├── globToRegExp.js │ │ │ │ ├── item_icon.js │ │ │ │ ├── launch_app.js │ │ │ │ ├── new_context_menu_item.js │ │ │ │ ├── open_item.js │ │ │ │ ├── refresh_item_container.js │ │ │ │ ├── socialLink.js │ │ │ │ ├── truncate_filename.js │ │ │ │ ├── update_last_touch_coordinates.js │ │ │ │ ├── update_mouse_position.js │ │ │ │ ├── update_title_based_on_uploads.js │ │ │ │ └── update_username_in_gui.js │ │ │ ├── helpers.js │ │ │ ├── i18n/ │ │ │ │ ├── i18n.js │ │ │ │ ├── i18nChangeLanguage.js │ │ │ │ └── translations/ │ │ │ │ ├── ar.js │ │ │ │ ├── bg.js │ │ │ │ ├── bn.js │ │ │ │ ├── br.js │ │ │ │ ├── da.js │ │ │ │ ├── de.js │ │ │ │ ├── emoji.js │ │ │ │ ├── en.js │ │ │ │ ├── es.js │ │ │ │ ├── fa.js │ │ │ │ ├── fi.js │ │ │ │ ├── fr.js │ │ │ │ ├── he.js │ │ │ │ ├── hi.js │ │ │ │ ├── hu.js │ │ │ │ ├── hy.js │ │ │ │ ├── id.js │ │ │ │ ├── ig.js │ │ │ │ ├── it.js │ │ │ │ ├── ja.js │ │ │ │ ├── ko.js │ │ │ │ ├── ku.js │ │ │ │ ├── ml.js │ │ │ │ ├── my.js │ │ │ │ ├── nb.js │ │ │ │ ├── nl.js │ │ │ │ ├── nn.js │ │ │ │ ├── pl.js │ │ │ │ ├── pt.js │ │ │ │ ├── ro.js │ │ │ │ ├── ru.js │ │ │ │ ├── sl.js │ │ │ │ ├── sv.js │ │ │ │ ├── ta.js │ │ │ │ ├── th.js │ │ │ │ ├── tr.js │ │ │ │ ├── translations.js │ │ │ │ ├── ua.js │ │ │ │ ├── ur.js │ │ │ │ ├── vi.js │ │ │ │ ├── zh.js │ │ │ │ └── zhtw.js │ │ │ ├── index.js │ │ │ ├── init_async.js │ │ │ ├── init_sync.js │ │ │ ├── initgui.js │ │ │ ├── keyboard.js │ │ │ ├── lib/ │ │ │ │ ├── html-entities.js │ │ │ │ ├── jquery-ui-1.13.2/ │ │ │ │ │ ├── AUTHORS.txt │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ ├── external/ │ │ │ │ │ │ └── jquery/ │ │ │ │ │ │ └── jquery.js │ │ │ │ │ ├── index.html │ │ │ │ │ ├── jquery-ui.css │ │ │ │ │ ├── jquery-ui.js │ │ │ │ │ ├── jquery-ui.structure.css │ │ │ │ │ ├── jquery-ui.theme.css │ │ │ │ │ └── package.json │ │ │ │ ├── jquery.dragster.js │ │ │ │ ├── mime.js │ │ │ │ ├── path.js │ │ │ │ └── socket.io/ │ │ │ │ └── socket.io.js │ │ │ ├── manifest.json │ │ │ ├── security.txt │ │ │ ├── services/ │ │ │ │ ├── AntiCSRFService.js │ │ │ │ ├── BroadcastService.js │ │ │ │ ├── DebugService.js │ │ │ │ ├── ExecService.js │ │ │ │ ├── ExportRegistrantService.js │ │ │ │ ├── IPCService.js │ │ │ │ ├── LaunchOnInitService.js │ │ │ │ ├── LocaleService.js │ │ │ │ ├── ProcessService.js │ │ │ │ ├── SettingsService.js │ │ │ │ └── ThemeService.js │ │ │ ├── static-assets.js │ │ │ └── util/ │ │ │ ├── Collector.js │ │ │ ├── Component.js │ │ │ ├── Placeholder.js │ │ │ ├── TeePromise.js │ │ │ ├── ValueHolder.js │ │ │ ├── desktop.js │ │ │ └── openid.js │ │ ├── utils.js │ │ ├── webpack/ │ │ │ ├── BaseConfig.cjs │ │ │ ├── EmitPlugin.cjs │ │ │ └── libPaths.cjs │ │ └── webpack.config.cjs │ ├── puter-js/ │ │ ├── .gitignore │ │ ├── APACHE_LICENSE.txt │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.js │ │ │ ├── init.cjs │ │ │ ├── init.d.cts │ │ │ ├── lib/ │ │ │ │ ├── APICallLogger.js │ │ │ │ ├── EventListener.js │ │ │ │ ├── RequestError.js │ │ │ │ ├── path.js │ │ │ │ ├── polyfills/ │ │ │ │ │ ├── fileReaderPoly.js │ │ │ │ │ ├── localStorage.js │ │ │ │ │ └── xhrshim.js │ │ │ │ ├── socket.io/ │ │ │ │ │ └── socket.io.js │ │ │ │ ├── utils.js │ │ │ │ └── xdrpc.js │ │ │ └── modules/ │ │ │ ├── AI.js │ │ │ ├── Apps.js │ │ │ ├── Auth.js │ │ │ ├── Debug.js │ │ │ ├── Drivers.js │ │ │ ├── EmailConfirmationDialog.js │ │ │ ├── FSItem.js │ │ │ ├── FileSystem/ │ │ │ │ ├── Batch.js │ │ │ │ ├── index.js │ │ │ │ ├── operations/ │ │ │ │ │ ├── copy.js │ │ │ │ │ ├── deleteFSEntry.js │ │ │ │ │ ├── getReadUrl.js │ │ │ │ │ ├── mkdir.js │ │ │ │ │ ├── move.js │ │ │ │ │ ├── read.js │ │ │ │ │ ├── readdir.js │ │ │ │ │ ├── readdirSubdomains.js │ │ │ │ │ ├── rename.js │ │ │ │ │ ├── revokeReadUrl.js │ │ │ │ │ ├── sign.js │ │ │ │ │ ├── space.js │ │ │ │ │ ├── stat.js │ │ │ │ │ ├── symlink.js │ │ │ │ │ ├── upload.js │ │ │ │ │ └── write.js │ │ │ │ └── utils/ │ │ │ │ └── getAbsolutePathForApp.js │ │ │ ├── Hosting.js │ │ │ ├── KV.js │ │ │ ├── OS.js │ │ │ ├── Peer.js │ │ │ ├── Perms.js │ │ │ ├── PuterDialog.js │ │ │ ├── UI.js │ │ │ ├── UsageLimitDialog.js │ │ │ ├── Util.js │ │ │ ├── Workers.js │ │ │ └── networking/ │ │ │ ├── PSocket.js │ │ │ ├── PTLS.js │ │ │ ├── PWispHandler.js │ │ │ ├── parsers.js │ │ │ └── requests.js │ │ ├── test/ │ │ │ ├── ai.test.js │ │ │ ├── fs.test.js │ │ │ ├── index.html │ │ │ ├── kv.test.js │ │ │ └── txt2speech.test.js │ │ ├── types/ │ │ │ ├── modules/ │ │ │ │ ├── ai.d.ts │ │ │ │ ├── apps.d.ts │ │ │ │ ├── auth.d.ts │ │ │ │ ├── debug.d.ts │ │ │ │ ├── drivers.d.ts │ │ │ │ ├── filesystem.d.ts │ │ │ │ ├── fs-item.d.ts │ │ │ │ ├── hosting.d.ts │ │ │ │ ├── kv.d.ts │ │ │ │ ├── networking.d.ts │ │ │ │ ├── os.d.ts │ │ │ │ ├── peer.d.ts │ │ │ │ ├── perms.d.ts │ │ │ │ ├── ui.d.ts │ │ │ │ ├── util.d.ts │ │ │ │ └── workers.d.ts │ │ │ ├── puter.d.ts │ │ │ └── shared.d.ts │ │ └── webpack.config.js │ ├── puter-wisp/ │ │ ├── README.md │ │ ├── basic.html │ │ ├── devlog/ │ │ │ └── unit_test_usefulness/ │ │ │ ├── a.js │ │ │ ├── b.js │ │ │ └── test_a_b.diff │ │ ├── package.json │ │ ├── src/ │ │ │ └── exports.js │ │ └── test/ │ │ └── test.js │ ├── putility/ │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── AdvancedBase.js │ │ │ ├── bases/ │ │ │ │ ├── BasicBase.js │ │ │ │ └── FeatureBase.js │ │ │ ├── concepts/ │ │ │ │ └── Service.js │ │ │ ├── features/ │ │ │ │ ├── EmitterFeature.js │ │ │ │ ├── NodeModuleDIFeature.js │ │ │ │ ├── PropertiesFeature.js │ │ │ │ ├── ServiceFeature.js │ │ │ │ ├── TopicsFeature.js │ │ │ │ └── TraitsFeature.js │ │ │ ├── libs/ │ │ │ │ ├── context.js │ │ │ │ ├── event.js │ │ │ │ ├── invoker.js │ │ │ │ ├── listener.js │ │ │ │ ├── log.js │ │ │ │ ├── promise.js │ │ │ │ └── string.js │ │ │ ├── system/ │ │ │ │ └── ServiceManager.js │ │ │ └── traits/ │ │ │ └── traits.js │ │ └── test/ │ │ ├── ServiceManager.test.js │ │ ├── context.test.js │ │ ├── event.test.js │ │ ├── listener.test.js │ │ ├── log.test.js │ │ ├── test.js │ │ ├── topics.test.js │ │ └── traits.test.js │ └── useapi/ │ ├── main.js │ └── package.json ├── tests/ │ ├── README.md │ ├── api-tester/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── apitest.js │ │ ├── benches/ │ │ │ ├── __entry__.js │ │ │ ├── simple.js │ │ │ ├── stat_intensive_1.js │ │ │ └── write_intensive_1.js │ │ ├── coverage_models/ │ │ │ ├── copy.js │ │ │ ├── move.js │ │ │ └── write.js │ │ ├── doc/ │ │ │ └── cartesian.md │ │ ├── lib/ │ │ │ ├── Assert.js │ │ │ ├── CoverageModel.js │ │ │ ├── ReportGenerator.js │ │ │ ├── TestFactory.js │ │ │ ├── TestRegistry.js │ │ │ ├── TestSDK.js │ │ │ ├── log_error.js │ │ │ └── sleep.js │ │ ├── package.json │ │ ├── puter_js/ │ │ │ ├── __entry__.js │ │ │ ├── auth/ │ │ │ │ ├── __entry__.js │ │ │ │ └── whoami.js │ │ │ └── load.cjs │ │ ├── test_sdks/ │ │ │ └── puter-rest.js │ │ ├── tests/ │ │ │ ├── __entry__.js │ │ │ ├── auth.js │ │ │ ├── batch.js │ │ │ ├── copy_cart.js │ │ │ ├── delete.js │ │ │ ├── fsentry.js │ │ │ ├── mkdir.js │ │ │ ├── move.js │ │ │ ├── move_cart.js │ │ │ ├── readdir.js │ │ │ ├── stat.js │ │ │ ├── telem_write.js │ │ │ ├── write_and_read.js │ │ │ └── write_cart.js │ │ ├── tools/ │ │ │ ├── readdir_profile.js │ │ │ └── test_read.js │ │ └── toxiproxy/ │ │ ├── toxiproxy.json │ │ └── toxiproxy_control.json │ ├── ci/ │ │ ├── api-test.py │ │ ├── common.py │ │ ├── playwright-test.py │ │ ├── requirements.txt │ │ └── vitest.py │ ├── example-client-config.yaml │ ├── playwright/ │ │ ├── .github/ │ │ │ └── workflows/ │ │ │ └── playwright.yml │ │ ├── .gitignore │ │ ├── config/ │ │ │ └── test-config.ts │ │ ├── package.json │ │ ├── playwright.config.ts │ │ └── tests/ │ │ ├── file-system/ │ │ │ ├── batch.spec.ts │ │ │ ├── copy_cart.spec.ts │ │ │ ├── delete.spec.ts │ │ │ ├── fixtures.ts │ │ │ ├── mkdir.spec.ts │ │ │ ├── move.spec.ts │ │ │ ├── move_cart.spec.ts │ │ │ ├── readdir.spec.ts │ │ │ ├── stat.spec.ts │ │ │ ├── write_and_read.spec.ts │ │ │ └── write_cart.spec.ts │ │ └── whoami.spec.ts │ ├── puterJsApiTests/ │ │ ├── ai_chat_completions.test.ts │ │ ├── kv.test.ts │ │ ├── testUtils.ts │ │ └── vite.config.ts │ └── tsconfig.json ├── tools/ │ ├── .commit │ ├── README.md │ ├── auth_gui.js │ ├── build_relay.sh │ ├── build_v86.sh │ ├── check-translations.js │ ├── comment-parser/ │ │ ├── main.js │ │ ├── package.json │ │ └── test/ │ │ └── test.js │ ├── doc_helper.js │ ├── file-walker/ │ │ ├── package.json │ │ └── test.js │ ├── gen-release-notes.js │ ├── genwiki/ │ │ ├── main.js │ │ └── package.json │ ├── keygen/ │ │ ├── gen-peer-keys.js │ │ └── package.json │ ├── l_checker_config.json │ ├── license-headers/ │ │ ├── main.js │ │ └── package.json │ ├── migrations-test/ │ │ ├── main.js │ │ ├── noop.puter.json │ │ └── package.json │ ├── module-docgen/ │ │ ├── defs.js │ │ ├── main.js │ │ ├── package.json │ │ └── processors.js │ ├── run-selfhosted.js │ ├── token-count-accuracy/ │ │ ├── package.json │ │ └── test.js │ └── validate-eslint.js ├── tsconfig.base.json ├── tsconfig.build.json ├── tsconfig.json ├── volatile/ │ ├── README.md │ ├── config/ │ │ └── .gitignore │ └── runtime/ │ └── .gitignore └── ws-debug.mjs