Compare commits

..
4396 Commits
Author SHA1 Message Date
Nariman Jelveh f976686eba Update index.md 2026-05-16 13:12:31 -07:00
ProgrammerIn-wonderland 7af3721543 Make confirming an email unconfirm any other accounts using that email (#3121) 2026-05-16 15:07:38 -04:00
ProgrammerIn-wonderland 93edec0d01 assert normalized (#3119) 2026-05-15 17:01:32 -04:00
Daniel Salazar 54b61f2e24 fix: bad cookie parse test (#3120)
* fix: deepseek alias

* fix: bad cookie parse test
2026-05-15 13:40:43 -07:00
Nariman Jelveh 184ed77493 Use fixed colors for OIDC login divider 2026-05-14 20:26:46 -07:00
Nariman Jelveh 8234b72fc3 Improve login UI: logo, forgot link, OIDC divider 2026-05-14 20:20:21 -07:00
Nariman Jelveh cc9921945e Make auth logo clickable for cover pages 2026-05-14 20:13:33 -07:00
Daniel Salazar ac6f23a41f Update README.md (#3116) 2026-05-14 13:01:34 -07:00
Nariman Jelveh 973d046d33 Remove legacy TabFiles component
Delete the large TabFiles.js file (file browser tab) and update dashboard, styles, helpers, and init logic accordingly. Related changes in UIDashboard.js, dashboard.css, style.css, helpers.js and initgui.js remove or adapt references to the removed component and adjust UI/initialization and styling to account for the file-tab extraction. This reduces duplicate/legacy code and centralizes file browser functionality; review UIDashboard and helper updates to ensure file management features (navigation, upload, context menus, previews) are migrated or re-implemented as needed.
2026-05-14 12:13:48 -07:00
Miika Kuisma dcb50cde8f Merge pull request #3115 from HeyPuter/puter-js-update260514-2
PuterJS - Fix submenu behavior on mobile devices in Menubar web component
2026-05-14 11:45:47 +03:00
Miika Kuisma 08beb55853 PuterJS - Fix submenu behavior on mobile devices in Menubar web component 2026-05-14 11:43:47 +03:00
Miika Kuisma bb0220e163 Merge pull request #3114 from HeyPuter/puter-js-update-260514
Puter JS MenuBar Web Component improvements
2026-05-14 09:14:19 +03:00
Miika Kuisma f3e4c8c6d0 menu item focus tweak 2026-05-14 09:09:40 +03:00
Miika Kuisma 44254671bb - When navigating with keyboard the main level of menubar (file, edit etc) is should also open the menus, now it just highlights the opener
- When hovering main menu items, it must clear hover effects
- Two submenus under each other and diagonal moving
- separator hovering removes highlight but disabled item should do the same
- better way to remove focus
- when mouse leaves context menu highlight should be removed
2026-05-14 08:26:36 +03:00
Daniel Salazar bcc6cc8f00 fix: express proxy chain (#3112) 2026-05-13 18:13:39 -07:00
jelveh 84549a1c31 Add Authorization header to deletion request 2026-05-13 17:21:40 -07:00
Daniel Salazar 0276420213 fix: treat access tokens as non-auth unless opted in (#3111)
* fix: treat access tokens as non-auth unless opted in

* fix: tests
2026-05-13 14:20:15 -07:00
ProgrammerIn-wonderland 6353a08fd5 accept web input in speech2txt (#3110) 2026-05-13 15:53:16 -04:00
Daniel Salazar c265fa308a fix: double rate limits across the board (#3108)
* fix: sqlite auto create path if missing

* fix: double rate limits across the board
2026-05-13 09:30:08 -07:00
Miika Kuisma d3f72bc33a Merge pull request #3105 from HeyPuter/puter-js-menubar-fixes
Puter JS UI Component updates
2026-05-13 11:51:42 +03:00
ProgrammerIn-wonderland 700fc4d27e alibaba provider (#3103)
* Add alibaba provider

* add tests
2026-05-13 03:21:15 -04:00
Miika Kuisma 9c7f30a150 Add theme attribute for each web component, which can be used for forcing dark or light theme (in case the application doesn't have dark mode support it might be odd if just menubar turns dark) 2026-05-13 10:08:59 +03:00
Miika Kuisma 85e45b30f5 fixes https://github.com/HeyPuter/puter/issues/3102 2026-05-13 09:52:21 +03:00
Miika Kuisma 5483e32eab fixes https://github.com/HeyPuter/puter/issues/3101 2026-05-13 09:37:36 +03:00
Miika Kuisma f63c7d8142 - Fixes https://github.com/HeyPuter/puter/issues/3100
- Also fixes similar issues with navigating top level menubar items and submenus
2026-05-13 09:27:44 +03:00
Miika Kuisma 5a2071f852 fix https://github.com/HeyPuter/puter/issues/3099 2026-05-13 09:01:57 +03:00
Miika Kuisma 238ed12e28 - add dark mode support for UI components
- fix https://github.com/HeyPuter/puter/issues/3098
2026-05-13 08:54:23 +03:00
Daniel Salazar d1afe6c3cf fix: puter site redirect for non paid apps (#3104)
* fix: puter site redirect for non paid apps

* add tests
2026-05-12 21:03:33 -07:00
Nariman Jelveh e58dd48e80 Fix link formatting in BUG-BOUNTY.md (#3097) 2026-05-12 17:19:10 -07:00
Daniel Salazar 69f87d4dcd fix: return code (#3096)
* fix: return code

* fix: http error
2026-05-12 16:54:00 -07:00
Daniel Salazar 7b0dd11f7f fix: dev accounts not showing (#3095) 2026-05-12 16:39:42 -07:00
Daniel Salazar 620934fbf4 fix: add user_agent to email signup (#3094) 2026-05-12 15:51:30 -07:00
Daniel Salazar 182fc723f1 expose hasDevAccountAccess at top level (#3093) 2026-05-12 13:56:00 -07:00
Daniel Salazar 5d3c5b6873 fix: whoami (#3092) 2026-05-12 13:44:02 -07:00
slashdevcorpseandCodex f20445bab7 Restrict cross-origin session-cookie auth (#3088)
* Restrict cross-origin cookie auth

Block the auth probe from using ambient session cookies when a browser Origin does not match the request Host. Explicit bearer, body, and x-api-key tokens continue to work for cross-origin SDK calls.

Co-authored-by: Codex <[email protected]>

* Normalize origin checks for cookie auth

Compare normalized origins for browser cookie authentication so default ports and protocol mismatches are handled consistently. Add coverage for default-port and protocol-mismatch cases.

Co-authored-by: Codex <[email protected]>

---------

Co-authored-by: Codex <[email protected]>
2026-05-12 13:40:25 -07:00
Nariman Jelveh 8ad1a58f98 Reorder OIDC Apple and Microsoft buttons 2026-05-12 13:35:18 -07:00
Daniel Salazar 17e475236a fix: mistral ai tests from renames (#3091) 2026-05-12 12:28:32 -07:00
Daniel Salazar b948eaaaa6 chore: update mistralAi providers (#3090) 2026-05-12 12:12:24 -07:00
Nariman Jelveh 9b0c034247 fix: correct xAI TTS pricing to $15.00/1M characters (#3089)
xAI's Voice pricing table lists Text to Speech at $15.00 / 1M characters,
but we were charging $4.20 / 1M characters (420 microcents/char), undercharging
by ~72%. Update the cost constant, listEngines pricing, and test expectation
to 1500 microcents/char.
2026-05-12 11:57:11 -07:00
Miika Kuisma b0dc9c7f1b Merge pull request #3086 from HeyPuter/puter-js-update-260512
PuterJS menubar web component improvements
2026-05-12 12:01:08 +03:00
Miika Kuisma e79abd43e3 PuterJS menubar web component improvements 2026-05-12 12:00:15 +03:00
Miika Kuisma 36c9c478ec Merge pull request #3073 from HeyPuter/puter-js-tests
Puter JS Web Component update
2026-05-12 09:56:58 +03:00
Daniel Salazar 90d01b87ea fix: potential fix for some linux distros (#3085) 2026-05-11 23:28:59 -07:00
Daniel Salazar b0823449bc fix: don't allow dav access control credentials (#3084) 2026-05-11 19:11:02 -07:00
ProgrammerIn-wonderland 760d5d346d add missing GPT 5.4 models (#3083) 2026-05-11 21:34:23 -04:00
Daniel Salazar 4e11d1dd0f fix: updaet deepseek models (#3082) 2026-05-11 18:01:35 -07:00
ProgrammerIn-wonderland 5e8c66142d ai image video fs output (#3079)
* Add puter_output_path

* Fix error reporting in puterjs. Add precheck for puterOutputPath

* add tests

* add tests

* frontend puterjs tests
2026-05-11 20:55:45 -04:00
Daniel Salazar f80016e4e6 feat: rate limit all ai requests (#3081)
* chore: cleanup types for metering

* fix: error responses

* wip: rate limit refactor

* rate-limit for some drivers

* fix: ai driver limits

* tests: rate limiting
2026-05-11 16:18:21 -07:00
Daniel Salazar c8fdbdf8c9 fix: self host mysql (#3080) 2026-05-11 15:36:16 -07:00
ProgrammerIn-wonderland a04267a4e3 Add login with microsoft (#3077) 2026-05-11 15:40:44 -04:00
Daniel Salazar 80a081d62a fix: sql migrations (#3078) 2026-05-11 12:29:56 -07:00
Daniel Salazar bb131c6690 fix: oss icons for new apps (#3076) 2026-05-11 10:52:52 -07:00
Daniel Salazar 4a4a131226 fix: add validation for bad username password input (#3075) 2026-05-11 10:35:12 -07:00
Daniel Salazar 26cff23af4 chore: cleanup types for metering (#3074)
* chore: cleanup types for metering

* fix: error responses
2026-05-11 08:58:13 -07:00
Miika Kuisma 189dae25ef remove hover effect from menubar shortcut labels 2026-05-11 17:58:23 +03:00
Miika Kuisma b2f4a86224 Hide keyboard shortcuts from mobile phone menubar 2026-05-11 11:47:10 +03:00
Miika Kuisma 122811eb7a Puter JS menubar web component now accepts shortcut attribute, improven submenu ux 2026-05-11 11:41:30 +03:00
Miika Kuisma bc98dacf65 Merge branch 'main' into puter-js-tests 2026-05-11 09:55:35 +03:00
Daniel Salazar f00445254d oss: add more apps into oss (#3072) 2026-05-10 22:38:47 -07:00
Daniel Salazar 6686e3a0d7 tests: add tests for SpeechToTextDriver (#3071)
closes #3001
2026-05-10 22:27:35 -07:00
ProgrammerIn-wonderland 5bcb425926 Add tests for Peer, WebDAV, Workers, and WISP. (#3070) 2026-05-10 21:44:30 -04:00
Nariman Jelveh b4e9fa7688 Add dark mode colors to dev console CTA 2026-05-10 17:43:06 -07:00
Daniel Salazar 594cbe03ef tests: big test push with lots of missing areas (#3067)
- Strengthen Broadcast tests
- strengthen oidc tests
- add middleware tests
- add extensions test
- add puter hosting tests
- add Chat Completion Driver tests
2026-05-10 15:06:48 -07:00
Daniel SalazarandClaude Opus 4.7 ec04afe0ad tests: add unit tests for XAITTSProvider (#3060)
Adds offline XAITTSProvider.test.ts covering voice/format selection,
request shape, error paths, and cost reporting. Spies on global fetch
(the provider's egress point) against a real PuterServer + live
MeteringService.

Closes #2998

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-10 14:28:04 -07:00
Daniel SalazarandClaude Opus 4.7 539c928920 tests: add unit tests for ElevenLabsTTSProvider (#3066)
Adds offline ElevenLabsTTSProvider.test.ts covering voice/format
selection, request shape, error paths, and cost reporting. Spies on
global fetch (the provider's egress point) against a real PuterServer
+ live MeteringService. The companion integration test stays untouched.

Closes #2999

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-10 14:27:55 -07:00
Daniel SalazarandClaude Opus 4.7 a470857d4e tests: add unit tests for OpenAITTSProvider (#3057)
Adds offline OpenAITTSProvider.test.ts covering voice/format selection,
request shape, error paths, and cost reporting. Mocks the OpenAI SDK at
the module boundary against a real PuterServer + live MeteringService.
The companion integration test stays untouched.

Closes #3000

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-10 14:27:45 -07:00
Daniel SalazarandClaude Opus 4.7 dea40ca8be tests: add unit tests for TogetherVideoProvider (#3058)
Adds offline TogetherVideoProvider.test.ts covering parameter mapping
(togetherai: prefix stripping, seconds default vs no_extra_params,
width/height/fps/steps, reference_images / frame_images filtering),
polling for queued → in_progress → completed jobs (under fake timers),
failure / cancellation / missing-url error paths, and per-video
metering. Mocks together-ai at the module boundary against a real
PuterServer + live MeteringService.

Closes #2994

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-10 14:27:37 -07:00
Daniel SalazarandClaude Opus 4.7 3d593f7cd7 tests: add unit tests for OpenAIVideoProvider (#3059)
Adds offline OpenAIVideoProvider.test.ts covering parameter mapping
(size and seconds snapping to allowed values, input_reference
forwarding), polling for queued/in_progress jobs (under fake timers),
sora-2-pro size tiers (xl/xxl per-second pricing), per-second metering
on default tier, failure handling, and error paths. Mocks the OpenAI
SDK at the module boundary against a real PuterServer + live
MeteringService.

Closes #2993

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-10 14:27:30 -07:00
Daniel SalazarandClaude Opus 4.7 1d36811dd6 tests: add unit tests for GeminiTTSProvider (#3061)
Adds offline GeminiTTSProvider.test.ts covering voice/format selection,
request shape (transcript framing + speechConfig), error paths, and
cost reporting (token-priced input + output:audio batching, including
the PCM-to-WAV wrapping path). Mocks @google/genai at the module
boundary against a real PuterServer + live MeteringService.

Closes #2997

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-10 14:27:21 -07:00
Daniel SalazarandClaude Opus 4.7 4d53faf5b6 tests: add unit tests for GeminiVideoProvider (#3065)
Adds offline GeminiVideoProvider.test.ts covering parameter mapping
(size → aspectRatio/resolution, isHighRes forcing 8s, reference_images
clamping to 3 with image/lastFrame suppression, data-URL parsing,
negative_prompt), polling the long-running operation (under fake
timers), tier-aware metering (default / :1080p / :4k suffixes),
content-filter handling, and error paths. Mocks @google/genai at the
module boundary against a real PuterServer + live MeteringService.

Closes #2992

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-10 14:27:14 -07:00
Daniel SalazarandClaude Opus 4.7 c101fe74ab tests: add unit tests for TTSDriver (#3064)
Adds offline TTSDriver.test.ts covering provider selection/dispatch
(args.provider, legacy driverAlias via Context.driverName, registered
fallback), voice/format param validation, error mapping, and metering
propagation (provider failures must not bill). Mocks each provider's
SDK / fetch boundary against a real PuterServer wired with credentials
for every TTS provider.

Closes #2995

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-10 14:27:08 -07:00
Daniel SalazarandClaude Opus 4.7 b4fad80a8c tests: add unit tests for AWSPollyTTSProvider (#3063)
Adds offline AWSPollyTTSProvider.test.ts covering voice/format
selection (caller-supplied, language-derived, default-per-engine
fallback), SSML handling (TextType=ssml routing), request shape to the
AWS SDK SynthesizeSpeechCommand, engine validation, error paths, and
cost reporting. Mocks @aws-sdk/client-polly at the module boundary
against a real PuterServer + live MeteringService.

Closes #2996

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-10 14:27:02 -07:00
Daniel SalazarandClaude Opus 4.7 41e0049045 tests: add unit tests for VideoGenerationDriver (#3062)
Adds offline VideoGenerationDriver.test.ts covering provider
selection/dispatch (args.provider, model-id resolution across the
unified catalog, Context.driverName fallback), parameter validation
(seconds + dimension snapping to model.durationSeconds /
model.dimensions, string coercion), error mapping (provider
HttpErrors pass through, SDK errors don't bill), and metering
propagation (driver-level dispatch reaches the provider's
incrementUsage). Mocks each provider's SDK boundary against a real
PuterServer wired with credentials for every video provider.

Closes #2991

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-10 14:26:56 -07:00
Daniel Salazar 4aaa09bb04 tests: more tests for drivers and perm service (#3056) 2026-05-10 13:46:52 -07:00
Daniel Salazar 3f2c45be26 cleanup: authcontroller with testable methods and tests (#3054)
* cleanup: authcontroller with testable methods and tests

* fix: types

Tested this on zenpacket, seems to all be working
2026-05-10 13:24:17 -07:00
jelveh f7202955ef Move TOS blurb and update copy 2026-05-09 19:08:17 -07:00
jelveh 07432b0967 Update UIWindowSignup.js 2026-05-09 19:00:42 -07:00
jelveh 065eeda72a Add 'Sign up with email' option for OIDC 2026-05-09 18:55:18 -07:00
jelveh 65ce9a67ef Include user-agent in OIDC payload 2026-05-09 15:50:40 -07:00
Nariman Jelveh 4996d7f37f Include user_agent in auth request data (#3053) 2026-05-09 09:25:57 -07:00
Daniel Salazar 86adf4ebc0 fix message at end of selfhost script (#3052) 2026-05-08 23:46:54 -07:00
Daniel Salazar 9a4a0ac9f1 tests: add unit tests for XAIImageProvider (#3045)
Mocks the OpenAI SDK at the module boundary, boots a real PuterServer
for the wired MeteringService, and exercises construction (xAI base
URL, missing-key throw), model catalog (default + verbatim list),
test_mode bypass, prompt validation, the credit gate (402 before SDK),
model resolution (alias and unknown-id fallback), and the success
path covering URL/b64_json branches plus per-image metering with the
expected microcent override.

closes #2988
2026-05-08 23:34:39 -07:00
Daniel Salazar 2543179ae7 tests: add unit tests for OpenAiImageProvider with mocked client (#3050)
Mocks the OpenAI SDK at the module boundary, boots a real PuterServer
for the wired MeteringService, and covers the three model families
the provider treats differently. Exercises construction, model catalog
(dall-e-2 default + verbatim list), test_mode bypass, prompt
validation, the credit gate (402 before SDK), DALL-E request shape
(allowedRatio snap, hd-only-on-DALL-E-3, per-size metering, url and
b64_json output), gpt-image-* token-priced metering (input + output
batched line items at the model rates), and the gpt-image-2 size
normalizer (pixel-budget snap to multiples of 16, 3:1 ratio clamp,
3840 edge cap).

closes #2990
2026-05-08 23:33:52 -07:00
Daniel Salazar 07a049c8ac tests: add unit tests for TogetherImageProvider (#3049)
Mocks the together-ai SDK at the module boundary, boots a real
PuterServer for the wired MeteringService, and exercises construction
(missing-key throw), model catalog (default + verbatim list), test_mode
bypass, prompt validation, the credit gate (402 before SDK), all three
pricing branches (per-MP × ratio, per-image, per-tier with resolution
map rewrite), request shape (togetherai: prefix stripping, dimension
snap to multiples of 8 with min 64, optional knob clamping/forwarding,
input_image → image_base64 aliasing), and output handling for both
url/b64_json branches plus the wrapped error message.

closes #2987
2026-05-08 23:33:46 -07:00
Daniel Salazar 0990fc2667 tests: add unit tests for ReplicateImageGenerationProvider (#3048)
Mocks the replicate SDK and util/secureHttp at the module boundary
(real network egress points), boots a real PuterServer for the wired
MeteringService. Covers construction (missing-key throw), model
catalog (flux-schnell default + verbatim list), test_mode bypass,
prompt validation, the credit gate (402 before SDK), per-image
billing (replicateId routing, aspect_ratio gcd formatting,
single-output metering, string vs array output extraction, missing
URL → 400), megapixel billing (run + output_mp batched components),
the param-aliasing/transform/filter machinery (drops disallowed
keys, renames steps→num_inference_steps + response_format→output_format,
injects go_fast=true default for flux-2-dev, appends ' MP' suffix to
flux-2-pro resolution), and the costs_go_fast pricing branch.

closes #2986
2026-05-08 23:33:39 -07:00
Daniel Salazar 98bb203c84 tests: add unit tests for GeminiImageProvider (#3047)
Mocks @google/genai at the module boundary, boots a real PuterServer
for the wired MeteringService, and covers both the generateContent
(Flash) and generateImages (Imagen) code paths. Exercises
construction (missing-key throw), model catalog (default + verbatim
list), test_mode bypass, prompt validation, the credit gate (402
before SDK), Flash request shape (aspect ratio, allowedRatio fallback,
inlineData → base64 data URL extraction), Flash 3-line metering
(input + output:text + output:image with the IMAGE-modality token
count), Imagen routing (generateImages, per-image metering,
empty-response and rai-filtered failure modes).

closes #2989
2026-05-08 23:33:34 -07:00
Daniel Salazar 0e82a0aed6 tests: add unit tests for ImageGenerationDriver (#3046)
Boots a real PuterServer with API keys for every image provider
configured (so the driver indexes them all), drives
server.drivers.aiImage directly, and mocks each provider SDK at the
module boundary so the driver's routing is exercised without real
network egress. Covers 401 without actor, 400 on unknown model,
catalog dedup + sort, list() and getReportedCosts shape, provider
routing (id-based, lowercased lookups, args.provider override,
Context.driverName fallback), ratio normalization (width/height and
aspect_ratio "w:h" forms), and the ai.log.image audit event firing
both before the upstream call and even when it fails.

closes #2984
2026-05-08 23:33:28 -07:00
Daniel Salazar 3dc9d521b4 tests: add unit tests for CloudflareImageProvider (#3051)
Boots a real PuterServer for the wired MeteringService, stubs global
fetch (the provider talks to the Cloudflare REST API directly with no
SDK). Covers construction, model catalog, test_mode bypass, prompt
validation, the credit gate (402 before fetch), request shape (JSON
body, account-scoped /ai/run/<model> endpoint, apiBaseUrl override,
multipart routing for requiresMultipart models, steps clamping
[1,50]), output extraction (binary image/* → base64 data URL, JSON
envelope image with output_format → MIME, http(s) URL passthrough,
success:false 400, non-2xx 400, missing image 400), and per-scheme
cost components (tile-plus-step and flux2-klein-9b-mp split).

closes #2985
2026-05-08 23:33:21 -07:00
Daniel Salazar 4dbbc7c7c9 tests: add unit tests for GroqAIProvider with mocked client (#3042)
Mocks the groq-sdk at the module boundary, boots a real PuterServer
for the wired MeteringService, and exercises construction, model
catalog/resolution, request shape (max_completion_tokens rename, tools
passthrough, content blanking when paired with tool_calls), non-stream
+ streaming output (including Groq's x_groq.usage envelope deviation),
error mapping, and moderation.

closes #2977
2026-05-08 23:06:23 -07:00
Daniel Salazar 31f22bc339 tests: add unit tests for ClaudeProvider with mocked Anthropic SDK (#3038)
Mocks @anthropic-ai/sdk at the module boundary, boots a real
PuterServer for the wired MeteringService/stores/FSService, and
exercises construction (long timeout for Opus 4.7 thinking), model
catalog/resolution, request shape (tool_choice locking, system message
extraction, OpenAI-shape tool_calls → Claude tool_use blocks, tool
role → user tool_result, opus-4.7 temperature drop, adaptive thinking
config, enabled budget thinking + temperature=1 for older Sonnet),
non-stream output (input/output/cache token metering), streaming via
the message_start/content_block_*/message_delta/message_stop event
graph for both text_delta and input_json_delta tool_use, and the
moderation throw.

closes #2958
2026-05-08 23:06:05 -07:00
Daniel Salazar 87f0294f73 tests: add unit tests for OpenAiChatCompletionsProvider (#3036)
Mocks the OpenAI SDK at the module boundary, boots a real PuterServer
for the wired MeteringService/stores/FSService, and exercises
construction, model catalog (responses_api_only filtering), argument
validation (messages-array gate, web_search routing — error when no
sibling, delegation when one is set), request shape (max_completion_
tokens rename, gpt-5 vs non-gpt-5 reasoning_effort/verbosity gating,
stream_options gating), non-stream + streaming output (cached-token
splitting), the moderations.create flagging branch (above and at the
0.8 threshold), and error mapping.

closes #2959
2026-05-08 23:04:55 -07:00
Daniel Salazar df9c55daf9 tests: add unit tests for OpenAiChatResponsesProvider (#3037)
Mocks the OpenAI SDK at the module boundary, boots a real PuterServer
for the wired MeteringService/stores/FSService, and exercises
construction, the responses_api_only-filtered model catalog (with
no_restrictions toggle), argument validation (messages-array gate),
request shape (input messages, max_output_tokens rename, function-tool
unraveling, Responses-only knobs, gpt-5 vs non-gpt-5 reasoning controls),
model resolution, non-stream output (output_text → message.content,
function_call items → tool_calls, empty-response 400 gate), streaming
(response.output_text.delta text events, response.completed usage,
response.output_item.done function_call → tool_use), moderation, and
error mapping.

closes #2960
2026-05-08 23:01:45 -07:00
Daniel Salazar 9246aff4e4 tests: add tests for VoiceChangerDriver (speech2speech) (#3039)
Boots a real PuterServer with an ElevenLabs apiKey configured, drives
server.drivers.aiSpeech2Speech, and stubs global fetch (the real
network egress for ElevenLabs). Covers getReportedCosts mirroring
costs.ts, argument validation (test_mode bypass, missing actor 401,
missing audio 400), the credit gate (402 before fetch), the success
path (POST URL with voice id, default + override voice/model, optional
knobs forwarded via FormData and search params, audio stream return
shape), per-second metering math, and error mapping when ElevenLabs
returns a non-2xx body.

closes #2963
2026-05-08 23:01:36 -07:00
Daniel Salazar 21c37e6d35 tests: add unit tests for DeepSeekProvider with mocked client (#3040)
Mocks the OpenAI SDK at the module boundary, boots a real PuterServer
for the wired MeteringService, and exercises construction, model
catalog/resolution, request shape (max_tokens, tools, stream_options,
DeepSeek's content-blanking and tool-result system-message workarounds),
non-stream + streaming output paths, error mapping, and moderation.

closes #2976
2026-05-08 23:01:28 -07:00
Daniel Salazar cbdad4a65e tests: add unit tests for TogetherAIProvider with mocked client (#3041)
Mocks the together-ai SDK at the module boundary, boots a real
PuterServer for the wired MeteringService, and clears the kv-cached
model list between tests. Covers construction, model catalog (kv
caching, embedding-type filtering, alias flattening, synthetic
model-fallback-test-1), request shape (togetherai: prefix stripping,
max_tokens omission, tools/stream_options gating), model resolution,
non-stream + streaming output (with input/output cost-key remap),
error mapping, and moderation.

closes #2981
2026-05-08 23:01:20 -07:00
Daniel Salazar 91ecf54746 tests: add unit tests for OpenRouterProvider with mocked client (#3043)
Mocks both the OpenAI SDK and axios at the module boundary, boots a
real PuterServer for the wired MeteringService, and clears the
kv-cached model list between tests. Covers construction (default and
custom apiBaseUrl), model catalog (axios fetch + kv caching, openrouter:
prefix on ids, openrouter/auto filtering), the openrouter/auto disallow
gate, request shape (prefix stripping, usage:{include:true}, stream
options, retry-without-max_tokens on context-length errors, rethrow on
unrelated errors), both cost-calculator branches (cost-bearing vs
per-token fallback) for non-stream and streaming, and moderation.

closes #2980
2026-05-08 23:01:12 -07:00
Daniel Salazar 4bcfe6c7f4 tests: add unit tests for GeminiChatProvider with mocked client (#3044)
Mocks the OpenAI SDK at the module boundary (Gemini speaks the
OpenAI-compat dialect at the v1beta/openai endpoint), boots a real
PuterServer for the wired MeteringService, and exercises construction,
model catalog/resolution, request shape (max_completion_tokens rename,
cache_control stripping, stream_options gating), non-stream + streaming
output (cached-token splitting in the metered usage shape), error
mapping, and moderation.

closes #2961
2026-05-08 23:01:08 -07:00
Daniel SalazarandClaude Opus 4.7 3ada6f1569 tests: XAIProvider uses setupTestServer + real metering:[#2982] (#3035)
Drops the local makeMeteringStub in favour of a live PuterServer-wired
MeteringService. The OpenAI SDK is still mocked at the module boundary
(the real network egress point); the mock now also exposes a default
export so the test server can boot every chat provider (some import
the default and read .OpenAI off it). Aligns with AGENTS.md: "Prefer
test server over mocking deps."

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-08 19:21:52 -07:00
Daniel SalazarandClaude Opus 4.7 64402b01db tests: add tests for OCRDriver: [#2964] (#3028)
* tests: add tests for OCRDriver: [#2964]

Adds offline OCRDriver.test.ts covering both providers:

  • test_mode short-circuit; argument validation (missing actor, missing
    source, unknown provider, AWS/Mistral not configured)
  • aws-textract: raw-bytes vs S3Object source selection (regional
    client when fsEntry has a bucket), block normalisation (PAGE/WORD/
    TABLE filtered, LINE/LAYOUT_TITLE → text/textract:* blocks),
    402 on insufficient credits, per-page metering
  • mistral: image vs PDF chunk packaging (image_url with base64 data
    URL vs document_url with documentName), pass-through of pages /
    annotation / image-limit options, markdown → LINE-block
    normalisation with page indices, per-page metering, additional
    annotations metering when bbox/document annotation formats are set
  • default-provider selection (AWS preferred → Mistral fallback →
    500 when neither is configured)
  • getReportedCosts mirrors costs.ts

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* tests: OCRDriver uses setupTestServer + real fs/metering

Drops the manual config/clients/stores/services stub apparatus and
the loadFileInput mock in favour of the live wired driver from
server.drivers.aiOcr. The Textract and Mistral SDKs are still mocked
at the module boundary (the real network egress points); inputs go
through the real loadFileInput against real fs/store wiring (data
URLs for most cases; FSService.write produces a real fsEntry for the
PDF documentName test). Aligns with AGENTS.md: "Prefer test server
over mocking deps."

The S3Object-source/regional-client assertion was dropped because it
isn't deterministic against the in-memory S3 store and the driver's
per-region TextractClient cache leaks across tests. That branch is
better exercised by a real-cloud integration test.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-08 19:15:57 -07:00
Daniel SalazarandClaude Opus 4.7 6226db73d4 tests: add unit tests for MoonshotProvider with mocked client: [#2979] (#3030)
* tests: add unit tests for MoonshotProvider with mocked client: [#2979]

Adds offline MoonshotProvider.test.ts covering construction, model
resolution and aliasing, request shape (hardcoded max_tokens=1000,
stream_options gating, tool_use → tool_calls hoisting), vision-model
image-inlining hook, non-stream and streaming output, error logging
and rethrow, and metering. Existing integration test is left
untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* tests: MoonshotProvider uses setupTestServer + real metering

Drops the local makeMeteringStub in favour of a live PuterServer-wired
MeteringService. The OpenAI SDK is still mocked at the module boundary
(the real network egress point); inlineHttpImageUrls is mocked because
verifying the provider invokes it for vision-capable models is the
unit's concern. Aligns with AGENTS.md: "Prefer test server over
mocking deps."

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-08 19:15:45 -07:00
Daniel SalazarandClaude Opus 4.7 6ab2a2a6cc tests: add unit tests for MistralAiProvider with mocked client: [#2978] (#3032)
* tests: add unit tests for MistralAiProvider with mocked client: [#2978]

Adds offline MistralAiProvider.test.ts covering construction, model
resolution and aliasing, request shape (camelCase maxTokens, tool_calls
→ toolCalls and tool_call_id → toolCallId rewrite, complete-vs-stream
routing), non-stream output with the camelCase usage coercion,
streaming with the chunk.data unwrap and toolCalls deviation, error
mapping, and metering. Existing integration test is left untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* tests: MistralAiProvider uses setupTestServer + real metering

Drops the local makeMeteringStub in favour of a live PuterServer-wired
MeteringService. The Mistral SDK is still mocked at the module
boundary (the real network egress point); everything else runs through
the real wired graph. Aligns with AGENTS.md: "Prefer test server over
mocking deps."

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-08 19:15:34 -07:00
Daniel SalazarandClaude Opus 4.7 ba03fd7965 tests: add unit tests for PuterAIController: [#2965] (#3031)
* tests: add unit tests for PuterAIController: [#2965]

Adds offline PuterAIController.test.ts with stubbed drivers covering:
route registration (paths and per-route auth options), app-actor
gating across all four chat-proxy routes, body validation (messages
must be an array; openaiCompletions prompt must be a string;
openaiResponses provider must be openai-responses), driver delegation
and request shaping (model + messages + provider defaults), response
shaping for OpenAI chat-completion / text-completion / Responses
envelopes and Anthropic message envelope (text + tool_use blocks),
SSE streaming with [DONE] terminator, model-listing endpoints with
hidden-id filtering and 501 when list() is unavailable, and the
HMAC-gated video proxy's input/expiry/secret guards.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* tests: PuterAIController uses setupTestServer + spy on aiChat.complete

Drops the manual driver/controller stub apparatus (makeStubDriver,
makeController, custom dep builders) in favour of the live wired
controller from server.controllers.puterAi. Each test that needs a
canned chat completion result spies on server.drivers.aiChat.complete,
which keeps the unit-of-test focused on the controller (validation,
response shape, SSE streaming) without dragging in chat-driver model
resolution and credit checks. Aligns with AGENTS.md: "Prefer test
server over mocking deps."

The "500 when URL signature secret missing" assertion was dropped —
the default config wires a secret, so the branch is unreachable in
the live test server. Replaced with the equivalent 403-on-invalid-
signature assertion which actually exercises the HMAC gate.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-08 19:15:23 -07:00
Daniel SalazarandClaude Opus 4.7 1c188d6325 tests: add unit tests for ZAIProvider with mocked client: [#2983] (#3029)
* tests: add unit tests for ZAIProvider with mocked client: [#2983]

Adds offline ZAIProvider.test.ts covering construction, model
resolution and aliasing, GLM-specific request shape (custom params,
cache_control stripping, user_id derivation, stream_options gating),
non-stream output with reasoning_content normalisation, streaming
deltas (text and tool_use), error mapping, and metering. Existing
integration test is left untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* tests: ZAIProvider uses setupTestServer + real metering

Drops the local makeMeteringStub in favour of a live PuterServer-wired
MeteringService. The OpenAI SDK is still mocked at the module boundary
(the real network egress point); everything else — config, Context,
metering recording — runs through the real wired graph. Aligns with
AGENTS.md: "Prefer test server over mocking deps."

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-08 19:14:15 -07:00
ProgrammerIn-wonderland 8b1226aa1b OIDC referrer (#3034)
* oidc referrer

* optionally infer referrer from window.openerOrigin

* infer referrer from openerOrigin if there

* add log in signupCb

* remove excess logs

* remove FSEntry.js
2026-05-08 22:05:09 -04:00
Daniel Salazar 2c1d320bba ci: push to dockerhub too (#3033) 2026-05-08 17:36:21 -07:00
Daniel Salazar b6414442dd fix: contributing (#3027) 2026-05-08 16:58:05 -07:00
Daniel Salazar f5470f123f tests: add tests for xaiProvider: [#2982] (#3026) 2026-05-08 16:09:25 -07:00
Nariman Jelveh ea9a44c9ad Implement inline 2FA UI, remove old components (#3025)
* Implement inline 2FA UI, remove old components

* Re-enable login button on window close
2026-05-08 15:59:40 -07:00
jelveh 881ee90e76 Remove stray fullscreen hint from translations 2026-05-08 15:16:47 -07:00
jelveh fbb570fb36 Reapply "Remove toolbar clock feature (#3024)"
This reverts commit e781b60bcb.
2026-05-08 15:15:03 -07:00
jelveh e781b60bcb Revert "Remove toolbar clock feature (#3024)"
This reverts commit 78a071ae54.
2026-05-08 15:11:55 -07:00
Nariman Jelveh 78a071ae54 Remove toolbar clock feature (#3024) 2026-05-08 15:08:15 -07:00
Daniel Salazar 9bcd77c85b chore: add legacy codes back to all errors (#3022) 2026-05-08 13:51:55 -07:00
Daniel Salazar 960bbb6965 doc: code architecture doc + contributing guide for backend (#2953)
* architecture doc

* agents and contributor md guides

* fix: userStore
2026-05-08 13:51:41 -07:00
Nariman Jelveh 46a56e474b README edit (#3012)
* Add 'For Users' and 'For Developers' sections

* Update README.md

* Update README.md

* Update README.md
2026-05-08 13:30:33 -07:00
Reynaldi Chernando 666b60bd29 Use GA version of gemini 3.1 flash lite (#3013)
* Use GA version of gemini 3.1 flash lite

* add model name alias
2026-05-08 13:51:56 -04:00
Daniel Salazar 63f128457e remove driver usage endpoint (#3017) 2026-05-08 10:18:26 -07:00
Daniel Salazar 5e8e9a852d test: add unit tests for ai-chat utils (#3016)
Covers `Messages` (normalize_single_message / normalize_messages /
extract_and_remove_system_messages / extract_text), `FunctionCalling`
(normalize_json_schema / normalize_tools_object /
make_openai_tools / make_claude_tools), and `Streaming`
(AIChatStream / AIChatMessageStream / AIChatTextStream /
AIChatToolUseStream). All three are pure data transforms — Streaming
is exercised against a real `AIChatStream` wired to a buffering
Writable, so no method-level spies are needed.

Closes #2956
2026-05-08 10:17:46 -07:00
Daniel Salazar 3166ad933c test: add unit tests for OpenAIUtil shape normalization (#3015)
Covers the Puter↔OpenAI shape conversion (`process_input_messages`,
`process_input_messages_responses_api`), usage extraction
(`extractMeteredUsage`, `create_usage_calculator`), the streaming
handlers (`create_chat_stream_handler` and the responses-API variant),
and the non-stream `handle_completion_output[_responses_api]` paths
including moderation, missing-content, and per-provider deviations.
Streaming is exercised via a real `AIChatStream` wired to a buffering
Writable so no method-level spies are needed.

Closes #2955
2026-05-08 10:17:42 -07:00
Reynaldi Chernando 7e5f64e04b Fix minor typo for tls cert in self hosting docs (#3014) 2026-05-08 09:23:06 -07:00
jelveh 908c02fd99 fix ASCII art for PUTER.JS 2026-05-08 08:04:21 -07:00
jelveh 38fcc6d6bd Detect fullpage apps early and skip desktop load 2026-05-07 22:17:27 -07:00
Daniel Salazar 16652347c6 test: add tests for HomepageController (#3010)
Covers the early-return guard when the homepage service is unwired,
shell rendering at /, /settings, /dashboard, /action, /@:username,
canonical_url + meta inheritance from gui_params, /app/:name (404 +
shell, embedded app metadata, JSON / object metadata, malformed JSON),
and /show/* launching the explorer with the trimmed path.

Closes #2973
2026-05-07 21:41:16 -07:00
Daniel Salazar 5f28b988ec test: add tests for SystemController (#3009)
Covers /healthcheck (live status, 503 on failure, fallback when service
unavailable), /version (semver parsing, env defaults), /contactUs
(validation, persistence, email best-effort, default support address),
/whoarewe, /lsmod (interface grouping + driverName fallback), and the
prepareShutdown drain-flag flip.

Closes #2971
2026-05-07 21:40:27 -07:00
Daniel Salazar 160631b158 test: add tests for OIDCController (#3008)
Covers the provider listing route, the auth-start redirect (404 / 400 /
500 / 302), all three callback flows (login / signup / revalidate)
including state validation, suspended accounts, unconfirmed-email
linking refusal, redirect_uri origin clamping, and the
revalidate-done landing page. Routes are collected via PuterRouter and
invoked with stubbed services that return prefab data.

Closes #2966
2026-05-07 21:38:47 -07:00
Daniel Salazar 3ab9923f0c fix: ai provider integration tests (#3011)
* fix: ai provider integration tests

* change name for ai test
2026-05-07 21:38:40 -07:00
Daniel Salazar cc799e069f test: add unit tests for fileInput driver utility (#3007)
Covers `loadFileInput` (validation, data-URL decoding, FS-path resolution,
maxBytes enforcement, ACL gating) and `inferFilenameFromUrlOrPath`. Stubs
stores/fsService with prefab data so tests don't require a real server.

Closes #2957
2026-05-07 21:38:27 -07:00
Daniel Salazar 9a7d3bac5f test: add tests for DesktopController (#3006)
Covers /set-desktop-bg (partial updates, null clearing, type validation),
/update-taskbar-items (JSON serialization), /set_layout (layout
allowlist, ownership gate, path/uuid resolution), and /set_sort_by
(sort_by/sort_order allowlists, default ordering). Routes are
collected via PuterRouter and driven with stub stores returning
prefab fsentry rows.

Closes #2970
2026-05-07 21:37:34 -07:00
Daniel Salazar 0a9a4f629d test: add tests for StaticPagesController (#3005)
Covers /robots.txt (bot disallow + sitemap), /sitemap.xml (docs +
approved-listing apps), /unsubscribe (missing/invalid uuid, idempotent
re-runs), and /confirm-email-by-token (token mismatch, already-confirmed
short-circuit, duplicate-email rejection, success path with verified-
group promotion + best-effort side channels). Stub stores hold prefab
user rows; the DB stub returns canned EXISTS / SELECT results.

Closes #2975
2026-05-07 21:36:50 -07:00
Daniel Salazar 32c2c0c1a5 test: add tests for AppController (#3004)
Covers /apps, /apps/nameAvailable, /rao, /apps/:name (single + batch),
/query/app (max-entries cap, marketplace shape, hidden-app gating), and
/app-icon (default fallback, data-URL decoding, MIME allowlist, CDN
redirect). Routes are collected via PuterRouter; AppDriver is injected
through the shared `driversContainers` registry, and stub stores return
prefab app rows.

Closes #2969
2026-05-07 21:35:49 -07:00
Daniel Salazar 508d652194 test: add tests for StaticAssetsController (#3003)
Covers each config-gated branch (client_libs_root, puterjs_root,
gui_assets_root, builtin_apps) using real temp directories so the
existsSync checks see real files instead of mocked module behavior.
Asserts both registration outcomes (which routes appear, on which
subdomains) and the file resolution rules for the puter.js / puter.dev.js
fallback.

Closes #2974
2026-05-07 21:35:17 -07:00
jelveh 471ba94ba2 Update index.js 2026-05-07 20:04:43 -07:00
jelveh 66e24a07d4 Update console banner and messaging 2026-05-07 19:49:01 -07:00
jelveh 5ffac54c86 experimental cute CTA 2026-05-07 19:39:06 -07:00
ProgrammerIn-wonderland c5b12b61d9 Unconditionally send Access-Control-Allow-Private-Network, fix LNA fix in GUI (#2954) 2026-05-07 16:38:04 -07:00
Daniel Salazar 8d5e9ef9cf fix: types for open ai driver (#2950)
* fix: types for open ai driver

* fix: add extra time to tests

* fix: test

* fix: together ai tests

* fix: tests
2026-05-07 14:48:47 -07:00
Daniel Salazar 25fe9a3cdf fix: add coverage reports for changes (#2949)
* tests: ai integraton tests

* fix: add coverage reports for this too
2026-05-07 13:55:09 -07:00
Daniel Salazar 05425d20a7 chore: cleanup types for tests (#2948) 2026-05-07 13:40:58 -07:00
Nariman Jelveh ff10e47d67 Show fullscreen overlay when signup is blocked (#2947) 2026-05-07 11:37:23 -07:00
Daniel Salazar 6c19dfbafd fix: linux build (#2946) 2026-05-07 11:23:10 -07:00
Nariman Jelveh 360cbf48af feat: support code in puter.signup.validate error responses (#2945)
Extensions listening on the `puter.signup.validate` event can now set a
`code` field (in addition to `message`) when blocking signups. The code
is forwarded through HttpError and appears in the JSON error response,
giving clients a stable, machine-readable signal to act on.

Covers both the AuthController (password signup) and OIDCService paths.
Adds tests for the new field.
2026-05-07 10:11:08 -07:00
Daniel Salazar bbe93defe9 tests: add some more driver tests (#2944) 2026-05-07 10:04:39 -07:00
Reynaldi Chernando 5e01c13b31 Fix duplicate textract result (#2943) 2026-05-07 09:15:28 -07:00
Daniel Salazar 4b37f35803 test: tests for fs endpoints (#2942) 2026-05-06 22:55:53 -07:00
Daniel Salazar 775c9c49e2 test: add harness and some examples (#2941)
* test: add harness and some examples

* feat: tests ran on pr
2026-05-06 22:43:22 -07:00
Nariman Jelveh e35260924e Scope .myapps-search to input and tweak UI styles 2026-05-06 17:59:54 -07:00
Nariman Jelveh 90aad8918c Support light/dark sidebar logo 2026-05-06 17:54:37 -07:00
Nariman Jelveh 46974beba1 Replace gradients with flat colors in system buttons 2026-05-06 17:47:45 -07:00
Shruc 5e9dc33be1 expose costs in ai chat response (#2921)
* expose costs

* microcents
2026-05-06 15:59:16 -07:00
Daniel Salazar 1e271f188e fix: bring back old app names functionality and fix build (#2937) 2026-05-06 15:48:25 -07:00
jelveh f333597754 Update IPC.js 2026-05-06 15:40:38 -07:00
jelveh 3b33d16356 Merge branch 'main' of https://github.com/HeyPuter/puter 2026-05-06 15:33:21 -07:00
jelveh 2289d61d3c Update UIPrompt.js 2026-05-06 15:33:13 -07:00
Daniel Salazar 8e02f38bad fix: templates (#2936) 2026-05-06 15:31:41 -07:00
angelinazzz1809 5b65a6bc78 Update UIPrompt.js (#2930)
In the app environment, the prompt input was initialized using `options.value`, so `defaultValue` was not reflected.

This change ensures that `defaultValue` is used when provided, while keeping backward compatibility with `options.value`.
2026-05-06 15:27:28 -07:00
ProgrammerIn-wonderland 872d2c01d4 Add support for log in with Apple (#2935)
* Add experimental login with Apple support

* Fix revalidate URL

* Fix OIDC provider revalidate in whoami as well
2026-05-06 16:47:24 -04:00
jelveh b7f199ddbc Normalize string options to object 2026-05-06 11:59:28 -07:00
jelveh 906c00af97 Support options.defaultColor in color picker 2026-05-06 11:48:47 -07:00
Shruc f00d52f879 per model allowed params on replicate image, normalize ratio (#2898)
* replicate allowed params, normalize ratio

* update docs
2026-05-06 14:16:30 -04:00
Devendra Reddy Pennabadianddevareddy05 7a1a885e89 fix: inline http(s) image URLs for Moonshot vision models (#2929) (#2931)
Co-authored-by: devareddy05 <[email protected]>
2026-05-06 13:53:52 -04:00
Daniel Salazar ff8c275317 chore: package-lock.json (#2934) 2026-05-06 10:52:22 -07:00
Devendra Reddy Pennabadianddevareddy05 b3bf979cac fix: support defaultValue in showColorPicker app env (#2895) (#2932)
Co-authored-by: devareddy05 <[email protected]>
2026-05-06 10:46:32 -07:00
Reynaldi Chernando eb9e316ed5 Update Z.AI vision model id to z-ai/z-ai for consistency (#2928) 2026-05-06 02:41:04 -04:00
Daniel Salazar 224ea5f7f8 fix: extensions (#2926) 2026-05-05 20:55:53 -07:00
Daniel Salazar c1dacab4c2 extension events after boot fixes (#2925) 2026-05-05 17:42:55 -07:00
Daniel Salazar 8d0b8d4905 fix: app errors (#2924) 2026-05-05 17:20:31 -07:00
jelveh e7190f442e Update README.md 2026-05-05 16:49:01 -07:00
Nariman Jelveh 95e1b7d171 New README.md (#2915)
* Update README branding, screenshot, and links

* Update README: rephrase intro and add goals

* Update README.md

* Update README.md

* Rename self-hosting docs and add Windows installer

* Update self-hosting headings and README link

* Update README.md

* Update README.md

* Update README.md
2026-05-05 16:35:07 -07:00
Daniel Salazar f9ac017faf fix: fsEntry and tscofnig (#2923) 2026-05-05 16:18:09 -07:00
Daniel Salazar 4252b7f76f fix: email (#2922) 2026-05-05 15:21:15 -07:00
Daniel Salazar 58a7459e45 fix: broken apps in self hosted (#2920) 2026-05-05 12:45:17 -07:00
ProgrammerIn-wonderland 5dd601a90b add back web input into OCR (#2919) 2026-05-05 14:44:54 -04:00
Daniel Salazar 50fe867e0d fix: fs issues [PUT-846] (#2918)
* fix: fs issues

* windows install script
2026-05-05 10:49:04 -07:00
Daniel Salazar 98bdaf0c42 add email into metering alert (#2917) 2026-05-05 10:18:45 -07:00
Nariman JelvehandClaude Opus 4.6 1f1149e32e Block unconfirmed users from API endpoints server-side (#2916)
Add a default-on email confirmation gate that rejects users with
`requires_email_confirmation && !email_confirmed` on all authenticated
routes, returning 403 with `email_confirmation_required`.

Previously this was only enforced client-side via a GUI modal, meaning
direct API calls could bypass the check entirely.

Essential routes are exempted via `allowUnconfirmed: true`:
  `/whoami`, `/logout`, `/send-confirm-email`, `/confirm-email`,
  `/save_account`, `/get-anticsrf-token`, `/get-gui-token`,
  `/session/sync-cookie`, `/auth/revoke-session`,
  `/user-protected/delete-own-user`

No impact on temp users (`requires_email_confirmation` is false),
self-hosted deployments without email (flag is never set), or
unauthenticated routes (login, signup, password recovery, OIDC).

Co-authored-by: Claude Opus 4.6 <[email protected]>
2026-05-05 10:08:50 -07:00
jelveh 51b81c82bf Update keyboard.js 2026-05-05 06:24:49 -07:00
Daniel Salazar 15201b7a3c fix: nginx missing in self host script (#2911) 2026-05-05 00:42:54 -07:00
Daniel Salazar ad3f0f6c2e fix: handle fs duplicates on write (#2910) 2026-05-05 00:33:55 -07:00
Daniel Salazar 838d6a7178 docker-compose from index (#2909) 2026-05-05 00:22:25 -07:00
Daniel Salazar a5cb484e52 cleanup config (#2908) 2026-05-04 23:12:34 -07:00
jelveh 3a252fb948 Rename moonshot provider key to moonshotai 2026-05-04 21:43:31 -07:00
jelveh 69365cbae4 Standardize Moonshot provider ID to moonshotai 2026-05-04 21:40:38 -07:00
jelveh 2f1b9aad06 Update UIDesktop.js 2026-05-04 21:09:48 -07:00
jelveh 9e8371bde6 Update UIDesktop.js 2026-05-04 21:03:53 -07:00
Daniel Salazar 704fcecbdf fix: selfhosted thumbnails extensions (#2905) 2026-05-04 19:56:10 -07:00
jelveh 785d8b0cc5 Remove recovery warning block from 2FA setup 2026-05-04 19:45:52 -07:00
jelveh eaa68c243a Remove fullscreen button and handlers 2026-05-04 18:56:51 -07:00
Daniel Salazar a24246bfbc selfhosting: p3 cleanup docs + small fixes again (#2904)
* fix: Perms and configs

* rm broken editor for now

* selfhosting cleanup
2026-05-04 18:47:37 -07:00
Daniel SalazarandCopilot 50679e6a01 selfhosting: p2 fixed default configs and guide + some other errors (#2903)
* fix: ollama support

* fix: more self host cleanup

* fix: bad auth

* fix: more session cookie stuff

* allow emailclient

Co-authored-by: Copilot <[email protected]>

* fix: broken migration

* fix: full-stack comment

* fix: hardcoded perms

* new docker build steps

---------

Co-authored-by: Copilot <[email protected]>
2026-05-04 18:14:23 -07:00
jelveh d8cc884f01 Revamp 2FA setup UI with new wizard 2026-05-04 17:49:38 -07:00
jelveh 6a534b8479 Add pending state for 2FA toggle 2026-05-04 17:13:23 -07:00
jelveh 4048dfbaf1 Remove 'Show Desktop' toolbar button 2026-05-04 16:26:59 -07:00
Daniel Salazar 2de8807942 selfhost: fullstack self host p1 (#2902)
* wip: self hosted full setup

* wip: self hoast modes

* more wip self host stuff

* wip: full release

* fix: custom apps

* fix: readme

* full-stack md

* docs update

* fix

* fix: commands

* remove comments

* fix: docs and migs

* mysql mig

* fix: docker changes

* fix: mysql checks

* fix: mysql mig

* fix: docker more

* fix: redis conn issues
2026-05-04 15:58:03 -07:00
Daniel Salazar 8642a5b58c fix: subdomain cache invalidaton (#2901) 2026-05-04 15:17:20 -07:00
Nariman Jelveh 36de2b9aa4 Remove settings UI & service; redirect to dashboard (#2900) 2026-05-04 14:11:56 -07:00
jelveh c6bacca7f6 Open dashboard in new tab from UI clicks 2026-05-04 12:26:39 -07:00
Reynaldi Chernando da0255a805 Update UI docs and types (#2854) 2026-05-04 14:43:24 +07:00
jelveh dee193502f Add txt2speech.listEngines and listVoices docs 2026-05-03 22:12:49 -07:00
jelveh b9458497fb Update package-lock.json 2026-05-03 19:17:44 -07:00
jelveh 52d2c8574f Update build.js 2026-05-03 18:53:37 -07:00
jelveh 3da16e98e3 Produce llms.txt and llms-full.txt outputs for docs 2026-05-03 18:48:29 -07:00
Nariman Jelveh 85336f3c0e Add Moonshot AI (Kimi) chat completion provider (#2893) 2026-05-03 15:15:41 -07:00
jelveh 9720516185 Bump puter.js version to 2.3.2 2026-05-03 11:38:40 -07:00
jelveh 2a0efcff87 Bump puter.js version and update homepage 2026-05-03 11:34:11 -07:00
jelveh f9143a05c2 Add Gemini/xAI TTS and xAI STT examples 2026-05-03 11:24:38 -07:00
Nariman Jelveh bd30cda4a9 Add xAI (Grok) TTS and STT providers and integrate client/docs (#2890)
- Add XAITTSProvider calling POST /v1/tts with 5 voices (eve, ara, rex,
    sal, leo), speech tags, and configurable output format
  - Add XAISpeechToTextDriver calling POST /v1/stt with support for
    diarization, multichannel, text formatting, and xAI's native URL
    param for remote audio files
  - Register both providers in TTSDriver and driver index using existing
    xAI API key from config
  - Update puter.js client to route provider:'xai' for both txt2speech
    and speech2txt, including listVoices/listEngines
  - Add TypeScript types for new STT options (provider, format, diarize,
    multichannel, etc.)
  - Update txt2speech.md and speech2txt.md with xAI options and examples
  - Add playground examples for both TTS and STT

  Cost metering:
    TTS: 420 microcents/char ($4.20/1M chars)
    STT: 2778 microcents/sec ($0.10/hr)
2026-05-03 11:00:31 -07:00
Nariman Jelveh 33d5c0737e Add Gemini TTS provider and integrate client/docs (#2889)
Introduce a new Gemini TTS provider and wire it through the driver, client, docs, and examples. Adds src/backend/drivers/ai-tts/providers/gemini/GeminiTTSProvider.ts (Google GenAI client usage, PCM->WAV wrapping, metering, model/voice validation) and a costs table in providers/gemini/costs.ts. Registers the provider in TTSDriver, exposes the alias gemini-tts, and prefers it in provider selection. Updates puter-js client to recognize "gemini" provider/engine and route driver calls to gemini-tts. Documentation updated with Gemini options, a usage example, and a playground example HTML file.
2026-05-03 09:33:50 -07:00
Daniel Salazar cb27fd1f98 Revert "Revert "remove exports (#2885)" (#2887)" (#2888)
This reverts commit 14cde26291.
2026-05-02 10:20:01 -07:00
Nariman Jelveh d4ef956660 Remove RecoveryCodeEntryView and inline UI 2026-05-02 10:14:27 -07:00
Nariman Jelveh 789c62ef71 Remove RecoveryCodesView and inline in 2FA setup 2026-05-02 09:55:12 -07:00
Nariman Jelveh b2a70a6a38 Remove ConfirmationsView and inline checkboxes 2026-05-02 09:52:09 -07:00
Nariman Jelveh dd9607b54e Remove StepHeading component and inline headings 2026-05-02 09:46:44 -07:00
Daniel Salazar 14cde26291 Revert "remove exports (#2885)" (#2887)
This reverts commit 4e94cb07be.
2026-05-02 09:41:42 -07:00
jelveh 388577a799 Update style.css 2026-05-02 08:30:27 -07:00
jelveh d0310ac211 Add Upgrade/Manage Plan button to Usage tab 2026-05-02 08:28:46 -07:00
jelveh 99babf3879 Remove System Information window 2026-05-02 08:03:05 -07:00
jelveh ffae2a1d0a Remove PuterDialog and ExportRegistrantService 2026-05-02 07:58:12 -07:00
jelveh ce69bc14a8 Remove groups manager UI extension 2026-05-02 07:53:38 -07:00
Daniel Salazar 4e94cb07be remove exports (#2885) 2026-05-01 23:52:52 -07:00
jelveh 4395c8bea5 Handle OIDC popup flow: skip session list 2026-05-01 23:49:35 -07:00
Daniel SalazarandCopilot 5b35a5db69 errors for fs (#2884)
* remove bloated tests and

* errors for fs

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
2026-05-01 23:24:05 -07:00
jelveh c1ff8a3a9a Enable email confirmation code and style modal 2026-05-01 23:23:31 -07:00
jelveh c352dfe284 Send confirmation code and hide close button 2026-05-01 23:06:18 -07:00
jelveh 9f2ec29586 Prefer app upgrade prompt on storage errors 2026-05-01 21:07:49 -07:00
jelveh 63be2308d3 Show upgrade dialog on storage limit errors 2026-05-01 20:24:09 -07:00
jelveh e509f8ab46 Remove obsolete theme.css and its reference 2026-05-01 19:54:38 -07:00
jelveh b481753526 Remove obsolete GUI docs and .idx files 2026-05-01 19:46:20 -07:00
Daniel Salazar 1796fdb37b fix: misc fs issues (#2883)
* fix: deps

* fix: FS issues
2026-05-01 18:54:10 -07:00
jelveh 25f02378cb Update StaticPagesController.ts 2026-05-01 17:29:07 -07:00
jelveh e95e2f5187 Use full HTML template for static pages 2026-05-01 17:18:06 -07:00
jelveh 3f8365ad7e Add logout handler and disable modal dragging 2026-05-01 17:00:22 -07:00
ProgrammerIn-wonderland 8bd0d7c8c9 invalidate subdomains on delete (#2882) 2026-05-01 16:49:22 -07:00
Daniel SalazarandCopilot 2c261fc6c0 fix: extensions (#2881)
Co-authored-by: Copilot <[email protected]>
2026-05-01 16:36:15 -07:00
jelveh 0ffb7d3d1e Remove Amplify config; add nwsapi dep 2026-05-01 15:39:50 -07:00
jelveh 1305bf16e8 Add Amplify build config and update docs deps 2026-05-01 15:27:46 -07:00
jelveh d9cbdf3394 Update package.json 2026-05-01 15:00:40 -07:00
Daniel SalazarandCopilot a3b11de1a2 fix: better error codes + unlimited local credit (#2880)
* fix: better error codes

Co-authored-by: Copilot <[email protected]>

* fix: add in local unlimited metering again

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
2026-05-01 14:43:13 -07:00
Nariman Jelveh cf3f943177 Delete license_header.txt (#2879) 2026-05-01 14:06:55 -07:00
Nariman Jelveh 267f464232 Add AGPL license headers to source files (#2877) 2026-05-01 13:50:42 -07:00
ProgrammerIn-wonderland b70aabdeae zai --> z-ai (#2878) 2026-05-01 13:39:25 -07:00
ProgrammerIn-wonderland 8936f79716 Ns/return better together video error (#2876)
* Return better together video error
2026-05-01 13:13:08 -07:00
ProgrammerIn-wonderland 968452a45e Add grok 4.3 (#2875) 2026-05-01 13:00:02 -07:00
jelveh 05c4b40497 Merge branch 'main' of https://github.com/HeyPuter/puter 2026-05-01 12:59:08 -07:00
Nariman Jelveh 60ea48dbaa Remove gross legacy tools and docs (#2873) 2026-05-01 12:58:36 -07:00
Nariman Jelveh 284ca86b7c Remove gross retarded legacy tools and docs (#2873)
* Remove gross retarded legacy tools and docs

* Remove tools scripts

* nuke the bs

* Remove contributor/self-hosting docs, update license

* Remove src/useapi package and update configs

* remove source map files

* Remove wiki submodule

* ok not everything is retarded, for example this one (v86) is cool but has to go for now

* Remove puter-wisp module

* Remove install.md

* Remove twisp submodule

* Remove epoxy-tls submodule

Remove the epoxy-tls submodule and its configuration: delete the gitlink at submodules/epoxy-tls and remove the corresponding entry from .gitmodules.
2026-05-01 12:32:41 -07:00
ProgrammerIn-wonderland 7cd762afa2 Add z.ai chat completions (#2874) 2026-05-01 12:23:23 -07:00
Daniel Salazar 1b39bd2a4a fix: app autocreation (#2872) 2026-05-01 09:03:42 -07:00
Daniel Salazar e8fbb88102 puter models list fix (#2869) 2026-05-01 01:41:56 -07:00
Daniel SalazarandCopilot f6e1f90225 fix: dbConfigs and ai routes (#2868)
* fix: db configs

Co-authored-by: Copilot <[email protected]>

* fix: ai routes

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
2026-04-30 23:56:18 -07:00
Daniel SalazarandCopilot 0e53edafa3 fix: send right error codes (#2867)
Co-authored-by: Copilot <[email protected]>
2026-04-30 21:42:48 -07:00
Daniel Salazar 4a10124574 fix: oidc and chat validation events (#2866) 2026-04-30 21:05:07 -07:00
Nariman Jelveh d2555835c7 Remove email confirmation requirement in feedback 2026-04-30 21:04:39 -07:00
Nariman Jelveh 73d26e02b3 Only reset URL/title for owning windows 2026-04-30 20:54:17 -07:00
Daniel Salazar 48a85998ad fix: sync ips for validation (#2865)
* oidc email validate

* fix: sync ips for validation
2026-04-30 17:53:25 -07:00
Daniel Salazar 1a6b02999b fix: more clean ip (#2864) 2026-04-30 16:45:54 -07:00
Daniel Salazar 976f1de806 fix: event (#2863) 2026-04-30 16:37:27 -07:00
Daniel Salazar 1546e0e02f fix: auth checks (#2862)
* rename validate email

* fix: authService
2026-04-30 16:32:22 -07:00
ProgrammerIn-wonderland ce18b914b4 backport devwatcher (#2861) 2026-04-30 16:23:34 -07:00
Nariman Jelveh a54d6ceee5 Merge branch 'main' of https://github.com/HeyPuter/puter 2026-04-30 16:03:51 -07:00
Nariman Jelveh a32ac4e672 Add dynamic usage-bar colors and refine layout 2026-04-30 16:03:39 -07:00
Daniel SalazarandCopilot 93ed2068de fix: fail unauthed sessions nicely (#2860)
Co-authored-by: Copilot <[email protected]>
2026-04-30 16:01:23 -07:00
Daniel SalazarandCopilot 6b8152d3bc fix: cleanup some errors (#2859)
Co-authored-by: Copilot <[email protected]>
2026-04-30 15:10:19 -07:00
Daniel SalazarandCopilot eaa3d8c83c fix: no default gemini image quality (#2858)
Co-authored-by: Copilot <[email protected]>
2026-04-30 15:03:53 -07:00
Nariman Jelveh d772b557a0 Replace 2FA buttons with toggle switch 2026-04-30 15:01:06 -07:00
Nariman Jelveh 867d967b37 Use 'Current' badge and style active plan pill 2026-04-30 14:13:10 -07:00
Daniel SalazarandCopilot 56eef339a8 fix: ai driver errors (#2857)
Co-authored-by: Copilot <[email protected]>
2026-04-30 13:41:41 -07:00
Nariman Jelveh 15b93abe04 Set body overflow to hidden in dashboard CSS 2026-04-30 13:02:55 -07:00
Daniel Salazar 208abda841 fix: bad ai endpoint (#2856) 2026-04-30 12:38:39 -07:00
d4d78ac7db rework: change backend and backend extensions to use simpler code structure and patterns (#2815)
* fix:  dynamodb health checks and client recreation (#2789)

* wip: no nanoServices groundwork

* feat: data clients in new shape

* wip: auth and perms in new system

* more wip

* middlewaters mainly done

* wip: fsv2 in new layout

* old fs v2 migration

* driver system

* driver and old fs fixes

* ai drivers wip

* stream support

* metering in ai chat driver

* wip: new auth

* rate limit and auth routes

* captcha and anti csrf

* fix: types

* auth store

* app logic

* wip most other dricvers

* fs

* mostly kill all legacy stuff

* fs finish

* fix: redis usage

* ai controller

* driver cleanup

* socket io in v2

* broadcast and crudq stuff

* subdomains

* notifcations and shares

* fix bad syntaxes

* auth wip

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>

* extensions

* extension setup

* more routes

* sql migrations and default services

* home router

* tier 7

* everything else

* everything else

* remaining missing bits

* server health

* logs

* cleanup

* deps

* cleanup 2

* more cleanup 2

* boot

* fix launch

* config fix

* move file

* fix: tsconfig things

* fix: extension loading

* launching

* fix: drivers

* fix: others

* fix: icons

* fix: file uploads

* fs fixes

* fix: fs api

* fix: dev-center

* config

* add back telemetry

* lint stuff

* husky hooks

* fix: fs oss

* fix: config migration

* config migration

* migrate scripts + replicate

* runner

* fix: merge defafult config

* fix: default region

* fix: api domain

* fix paths in readfile

* fix fs entry default s3

* NS: Remove Referral && Entri Service

* dep cleanups

* fix: static assets

* fix: kv and perms

* fix: driver registrations

* fix: home mapping

* fix: rao

* adding back 500 alarm

* fix: build paths

* fix: fs and kv shapes

* fix: kv shape

* more kv coercing and ai chat matching format as prior

* fix:  private app gates

* private app caches

* fix: whole bunch of legacy shape issues

* update template jsonc

* fix caching partial oidc and fs signed paths

* more oidc fixes

* fix: wip

* fix: private apps

* admin route fixes

* fix: last few things hopefully

* claude uploads

* fix security for app only routes

* fix kv system namespace

* stuff

* fix: app and kv and suggested apps

* fix:open item

* fix: FS operations

* fix: default app icons

* add back token-read and WSL support

* metering fixes

* fix: fsEntry

* perm scanners and implicators

* proper download endpoint

* fix: download

* fix anti csrft on v2

* fix file extensions, app icons

* fold in v1 fixes from origin/main into v2 equivalents

Re-applies the v1 fixes that landed on origin/main into their v2
counterparts since the v1 files were deleted on DS/wip during the v2
migration. v1 commits referenced below.

- SQLBatcher: flush immediately when queue hits maxBatchSize instead
  of racing the timer (v1 12f48238).
- RedisClient: drop maxRetriesPerRequest from 2 to 1 to shrink failure
  window (v1 b6776ab4).
- ChatCompletionDriver: default minimumCredits to 1 when unset/zero so
  zero-cost precheck doesn't auto-pass (v1 36bd6073).
- OpenAiImageProvider: add gpt-image-2 support — open-ended size rules,
  token-based cost estimator, arbitrary-size normalizer, isGpt prefix
  broadened to gpt-image- (v1 f14f1bf4). models.ts auto-merged via
  rename detection.
- AppStore: bump row cache TTL from 5m to 24h (v1 6b3196ed).

Not ported: v1 app-object Redis cache (bdfa12b5/b886dde3) — v2's
#toClient recomputes filetype_associations/created_from_origin per
read; adding a second cache layer is a larger change for a follow-up.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

* remoe anti-csrf from auth routes that had not used them

* more icon fixes

* fix worker functionality

* fix: app and subdomain es

Co-authored-by: Copilot <[email protected]>

* fix PUT-761

* fix: PUT-748

* fix: rename fsService

* Add security back to WorkerDriver

* Migrate worker from fsEntry to fs. Fix cache issue

* remove ability to create symlinks

* strict webdav acl

* require auth for wisp

* chore: service renames

* Add metering back to puter peer api

* fix: PUT-760 PUT-749

* fix: PUT-746

* fix: peer cost

Co-authored-by: Copilot <[email protected]>

* fix: 771

* change order of peer controller

* fix: create appdata folder for app on get auth token

* fix: align delete site and list sites

* delete: putility

* fix subdomains

* Add support for tilde in subdomains, fix subdomain update

* cleanup PeerController.ts and fix billing oversight (#2844)

* fix: PUT-786

* fix: bugs

* fix: issues with multiple subdomain queries, or permission checks

* fix: harden response shapes to not contain uneeded fields

* fix: move state to redis

* fix: missing kv methods + better sec

Co-authored-by: Copilot <[email protected]>

* fix: subdomainStore limit

* fix: missing path resolution

Co-authored-by: Copilot <[email protected]>

* fs fixes

* fix: undef error

* fix fs + cleanup

* fix: npm audit fixes

* heal path entries where missing

Co-authored-by: Copilot <[email protected]>

* fix: caching

Co-authored-by: Copilot <[email protected]>

* fix: cache inconsistencies

Co-authored-by: Copilot <[email protected]>

* fix: app driver metadata

Co-authored-by: Copilot <[email protected]>

* remove extraneous comma

* fix: associated app icons

* fix: bad tool call

* Add validation to WorkerDriver#getFilePaths

* misc fs and auth issues

Co-authored-by: Copilot <[email protected]>

* fix: oidc errors

Co-authored-by: Copilot <[email protected]>

* fix: PUT-797

* fix: legacy appdata_app

Co-authored-by: Copilot <[email protected]>

* fix: add alert logs

Co-authored-by: Copilot <[email protected]>

* fix: error handling

* Disable sharecontroller

* fix: remove private user identifier for ai

* fix: private app fixes

* Add backback signup_server

* fix: completionId size

Co-authored-by: Copilot <[email protected]>

* fix: revalidate path for oidc

* fix: revalidate path for oidc

* fix: email validation

Co-authored-by: Copilot <[email protected]>

* fix: user create query

* fix: middleware extensions

Co-authored-by: Copilot <[email protected]>

* use x-forwarded-for for req ip forwarded

* fix: missing last_activity ts

* feat: add cache broadcast to subdomains

* fix: update config typing

---------

Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Co-authored-by: ProgrammerIn-wonderland <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Nariman Jelveh <[email protected]>
Co-authored-by: velzie <[email protected]>
2026-04-30 12:13:43 -07:00
Miika Kuisma b593eb5630 Tests update 2026-04-29 16:45:09 +03:00
Daniel Salazar 255dde9e96 fix: oidc errors again (#2853) 2026-04-28 16:20:20 -07:00
Daniel Salazar 3b6ae2d06b fix: oidc errors (#2852) 2026-04-28 16:15:34 -07:00
Nariman Jelveh 4c096f2af7 Remove file sharing UI and related code (#2817)
RIP
.
.
.
for now!
2026-04-28 15:59:19 -07:00
jelveh 23f45532d6 Avoid stacking panels/invisible windows; reset URL 2026-04-28 12:49:51 -07:00
jelveh ce39c7f734 Sync profile picture updates across UI 2026-04-28 11:57:27 -07:00
jelveh 5e667e21f8 Refactor dashboard bento colors & welcome styles 2026-04-28 11:06:30 -07:00
jelveh 8297cbec99 Use i18n welcome text and adjust UI styles 2026-04-28 10:41:01 -07:00
jelveh a781776b38 Introduce bento theme and remove gradients 2026-04-28 10:05:58 -07:00
jelveh cc21a33a31 Make copy-token window responsive and closable 2026-04-28 09:57:14 -07:00
Nariman Jelveh d344d9e5a5 Remove dashboard window style override 2026-04-27 19:24:47 -07:00
Miika Kuisma aa5e398e8b Fixing issues with mobile contextMenu (#2848)
* Fixing issues with mobile contextMenu in puter env app where user couldn't tap on menu items and there was checkmark in wrong place

* context menu mobile version - handle submenus

* context menu mobile icon placement tweak
2026-04-27 12:18:04 -07:00
Nariman Jelveh 66fa5fd569 Flush cache after username change 2026-04-27 12:13:26 -07:00
Reynaldi Chernando acf84a7929 Update docs setMenubar (#2845) 2026-04-27 12:51:08 +07:00
jelveh d55c3c1637 Add UI playground examples and update docs 2026-04-26 19:23:12 -07:00
Miika Kuisma 5e9a0f0a70 Puter JS - Web Components for UI API (#2808)
* Web Components for Puter SDK UI API

* Rest of the components

* component docs

* Revert file and directory picker changes

* style matching with puter.com and support for custom styling

* item divider style tweak

* Puter JS - Web Components tweaking

* alert default image fix

* context menu mobile style fix

* Fix app iframe height when app is in fullpage mode and has puter-js menubar

* menubar web component tweak

* Action sheet behavior for contextmenu on mobile also in env app

* replace alert icons

* context menu and menubar keyboard navigation, submenu mouse navigation improvements

* package-lock

* Improve submenu mouse hovering
2026-04-26 19:02:11 -07:00
jelveh 3e21479f17 Add content background var; remove card shadow 2026-04-25 19:01:33 -07:00
jelveh bb08d5b53b Adjust myapps grid to 4 columns 2026-04-25 13:55:41 -07:00
jelveh 0905095bc8 Enforce 5-column myapps grid with responsive wrap 2026-04-25 13:51:29 -07:00
jelveh 8188d2b58b Increase myapps-grid gap to 30px 2026-04-25 13:43:59 -07:00
jelveh 67f14db74a Use anchor tags for dashboard sidebar items 2026-04-25 11:25:03 -07:00
jelveh 7f1c13183b Disable dialog dragging in TabHome 2026-04-25 11:19:13 -07:00
jelveh 2e2f85fea5 Hide horizontal overflow; move apps CSS 2026-04-25 11:17:47 -07:00
jelveh 50a0073fc8 Revert "Hide horizontal overflow in apps tab"
This reverts commit d3c4aa1cfd.
2026-04-25 11:13:36 -07:00
jelveh d3c4aa1cfd Hide horizontal overflow in apps tab 2026-04-25 11:12:52 -07:00
jelveh 0b3de54a37 Use pushState for dashboard tab hashes 2026-04-25 10:45:09 -07:00
shashank shubham 53291fb8c6 chore: improve validation error messages for clarity (#2833) 2026-04-25 08:33:56 -07:00
jelveh e8c566bf3d Update TabAccount.js 2026-04-25 08:14:01 -07:00
jelveh 5174f90ed4 Hide dialog header in account tab 2026-04-25 08:11:12 -07:00
jelveh 700854e3f5 Refactor auth token card markup, disable drag 2026-04-25 08:09:17 -07:00
jelveh 2449c3f385 Scroll dashboard content to top on change 2026-04-24 23:18:50 -07:00
jelveh 205a8bbbc5 Replace lodash _.replace and _.pullAll usage 2026-04-24 22:36:31 -07:00
jelveh 0ae3f4dcfa Remove lodash from GUI vendor lib lists 2026-04-24 22:23:17 -07:00
jelveh ba31f8e533 Make app search header sticky with blur 2026-04-24 22:16:41 -07:00
Nariman Jelveh 1cfdf79e05 GUI cleanup (#2842)
* Remove deprecated helper functions from helpers.js

* Remove Croppie library and references

* Remove bundled jQuery UI assets

* Remove vendored socket.io client files

* Remove lodash and replace with native utils

Replace common lodash usages with native JS alternatives: _.isEmpty -> null/empty checks via Object.keys, _.size -> Object.keys(...).length, _.uniqBy -> Map-based dedupe/spread. Remove bundled lodash file and its About/license entry. Updated files include UIDashboard.js, UIDesktop.js, UIWindow.js, launch_app.js, update_title_based_on_uploads.js, initgui.js, UITabAbout.js, and static-assets.js to reduce dependency and bundle size.
2026-04-24 21:52:47 -07:00
ProgrammerIn-wonderland cb7e5a475e add gpt 5.5-pro (#2843) 2026-04-25 00:34:29 -04:00
jelveh e1d082fc48 Remove getUsage helper in GUI 2026-04-24 21:16:12 -07:00
ProgrammerIn-wonderland 4e0ff1992c add gpt 5.5 (#2841) 2026-04-25 00:13:12 -04:00
Nariman Jelveh 231bfbd8a9 Replace QRCodeView with UIQRCode helper 2026-04-24 17:57:45 -07:00
Nariman Jelveh 1aa51b7371 Remove puter audio assets 2026-04-24 17:42:52 -07:00
Nariman Jelveh 57f296a6cb Remove def(UIAlert, 'ui.window.UIAlert') 2026-04-24 14:44:04 -07:00
Nariman Jelveh b78565a6fa Remove commented putility import 2026-04-24 14:07:03 -07:00
Nariman Jelveh 1b4308c624 Comment out putility import and def 2026-04-24 13:59:24 -07:00
Daniel Salazar 36bd60731b fix: AIChatService.ts (#2836) 2026-04-23 20:20:16 -07:00
Daniel Salazar 968831c729 Revert "fix: anticsrf to store tokens in redis (#2834)" (#2835)
This reverts commit 1a6009c00c.
2026-04-23 19:12:47 -07:00
Daniel Salazar 1a6009c00c fix: anticsrf to store tokens in redis (#2834)
* fix

* fix: anticsrf to store tokens in redis
2026-04-23 18:46:43 -07:00
Nariman Jelveh f22206fe5a Import and register putility in async init 2026-04-23 16:52:07 -07:00
Nariman Jelveh 4a37e44d38 remove putility dependence from GUI 2026-04-23 15:27:04 -07:00
Daniel Salazar b6776ab47e shrink redis failure (#2831) 2026-04-22 13:27:34 -07:00
Shruc f14f1bf49e add gpt image 2 (#2829)
* add gpt image 2

* index cost key

* docs + default low
2026-04-22 14:00:18 -04:00
jelveh b886dde3d6 Await DB write and add UID cache key
Make the DB update in AppES awaitable so the write completes before proceeding (avoids race conditions). Also add invalidation of the Redis object key for the app UID in AppInformationService to ensure cached entries keyed by uid are cleared after updates.
2026-04-21 19:32:19 -07:00
jelveh bdfa12b566 Add app object Redis cache and use in AppES 2026-04-21 18:52:17 -07:00
jelveh 6b3196ed0c Increase cached app TTL to 24 hours. Cause, where is your sense of adventure? 2026-04-21 17:41:35 -07:00
jelveh e9a80d0834 Update dashboard.css 2026-04-20 16:17:25 -07:00
Daniel Salazar 7f9873edd2 fix: cdn cache invalidation (#2826) 2026-04-20 11:59:35 -07:00
jelveh 4de724c996 Update UIItem.js 2026-04-19 21:41:24 -07:00
jelveh 7bb27ffbb4 fix #2803 2026-04-19 21:40:14 -07:00
jelveh 4c578acce2 Update dashboard.css 2026-04-19 20:14:22 -07:00
jelveh a3fd275783 Remove Beta badge from dashboard sidebar 2026-04-19 19:56:29 -07:00
jelveh 2a1f0da04b Add bottom padding to .myapps-container 2026-04-19 19:50:43 -07:00
jelveh 1260bd506b Pass parent to context menu; keep icon scaled 2026-04-19 19:44:41 -07:00
jelveh d66b70e05e Request 128px icons and prefer iconUrl 2026-04-19 19:34:00 -07:00
Shruc eaad07e002 adjust and refactor together models costs (#2811)
* adjust, refactor together costs

* aliases follow rule
2026-04-17 17:28:26 -04:00
jelveh f6c1991068 Remove referral UI and related logic 2026-04-17 12:25:29 -07:00
jelveh 4adf7b41b9 Remove Drivers docs and sidebar entry 2026-04-17 12:05:10 -07:00
jelveh b1a5c41028 Remove custom domain UI and Entri integration 2026-04-17 11:58:04 -07:00
Subhrabaran P b34f69512e fix: update knowledge date for Claude Opus 4.7 model (#2816) 2026-04-17 10:44:09 +07:00
Trevin Chow 4130fc4104 fix: close start menu popover on repeated click (#2784)
When the Start button is clicked while the popover is already open,
close it instead of doing nothing. This fixes the toggle behavior
on Android Chrome where the menu stays open on repeated taps.

The `.popover-launcher` removal triggers the UIPopover remove event
handler which automatically cleans up the `has-open-popover` class.

Fixes #1681
2026-04-16 09:44:00 -07:00
Shruc 6f54edbc76 add opus 4.7, adjust thinking (#2813) 2026-04-16 09:23:06 -07:00
Miika Kuismaandjelveh 2790879fc1 Dashboard Update (#2788)
* Consistent header with files

* custom order with draggable app icons

* mobile style tweak

* Drag apps to sidebar

* uninstall

* Add desktop switch button to home tab
Drag sidebar apps order

* Display app storage use in Usage tab

* Add context menu options to apps: open in new tab, open in window

* Sidebar apps section with taskbar/dock behavior

* add close button to sidebar app item

* prevent dashboard files items from being selected when dragging

* File contextmenu shows filename
Keep dashboard URL when opening items

* Fixed issue with mobile selecting

* sidebar toggling

* sidebar tooltips

* done!

* Files tab statusbar width fix

* Consistent header with files

* custom order with draggable app icons

* mobile style tweak

* Drag apps to sidebar

* uninstall

* Add desktop switch button to home tab
Drag sidebar apps order

* Display app storage use in Usage tab

* Add context menu options to apps: open in new tab, open in window

* Sidebar apps section with taskbar/dock behavior

* add close button to sidebar app item

* prevent dashboard files items from being selected when dragging

* File contextmenu shows filename
Keep dashboard URL when opening items

* Fixed issue with mobile selecting

* sidebar toggling

* sidebar tooltips

* done!

* Files tab statusbar width fix

* Remove desktop switch button from Home tab

* App uninstall fix

* mobile style tweaks for dashboard sidebar

* Usage tab header fixes

* style tweaks

* Disable Uninstall for certain system apps

* Use app title in uninstall modal

* Remove delete-data option from uninstall modal

* Update dashboard.css

* Update TabApps.js

---------

Co-authored-by: jelveh <[email protected]>
2026-04-15 19:46:25 -07:00
ProgrammerIn-wonderland 90a4970a03 remove glitched submodule (#2810) 2026-04-15 18:05:49 -04:00
Shruc 6f4ec8bd1e add replicate image provider (#2806)
* add replicate image

* docs replicate

* pkg lock

* maybe fix ci
2026-04-15 17:47:57 -04:00
ProgrammerIn-wonderland e863240ad9 Add WSL support for signed uploads (#2809) 2026-04-15 13:36:09 -04:00
ProgrammerIn-wonderland 389e11f33b Ns/simplify 2 (#2790)
* Remove mostly unused TechnicalError and featureflag. Fold Group into GroupService.

* move modutil to util

* remove unused public/assets

* Remove anomaly service, fold logic into groups

* remove unused modules

* Remove AnomalyService import from tests

* remove shutdownservice

* remove unused filetracker service

* [will break prod] remove Puter AI Module, inline to coremodue

* MariaDB compatibility
2026-04-15 12:03:51 -04:00
Shruc edf1736292 add gemini image models in .chat (#2771)
* add gemini image models in .chat

* update docs for gemini image .chat

* actually snake case

* fix multi-turn thoughtsignature
2026-04-10 17:33:52 -04:00
Daniel Salazar 7f7c01956e fix: origin app Ids (#2801) 2026-04-10 13:47:53 -07:00
Daniel Salazar 9c38c43f82 fix: app canonization for puter.com apps (#2800) 2026-04-10 13:00:59 -07:00
Shruc 18e909f1a3 fix veo video with proxy link (#2799) 2026-04-10 13:37:34 -04:00
Daniel Salazar 14f2da3206 cleanup: batcher to batch more appropriately (#2794) 2026-04-10 00:27:14 -07:00
Daniel Salazar 1cfe69faa1 fix: redis max retries and fail fast timeouts (#2793) 2026-04-09 14:08:35 -07:00
Reynaldi Chernando 72430a1939 Minor fix docs and update puter resource unit (#2792)
* Minor fix docs and update puter resource unit

* change to 1 cent -> 1 mio microcents
2026-04-09 15:13:49 +07:00
jelveh 481a1a1d90 Prevent redirect to /action/login after login 2026-04-08 18:47:04 -07:00
Daniel Salazar 9a6c414f9d fix: dynamodb health checks and client recreation (#2789) 2026-04-08 15:47:09 -07:00
Shruc 32be3a0a88 better error reports for chat fallbacks (#2783) 2026-04-08 17:47:02 -04:00
HemantandReynaldi Chernando 69bb7e4a38 Close #2718 : added querying with prefix patterns example and documentation (#2778)
* feat: add querying with prefix patterns example and documentation

* refine

---------

Co-authored-by: Reynaldi Chernando <[email protected]>
2026-04-08 13:49:00 +07:00
Subhrabaran P 8cc29724b2 fix: add showSpinner and hideSpinner to docs sidebar (#2779)
The pages existed but were missing from the sidebar navigation,
causing 404s when clicking their links under /UI/#additional-ui-elements.
2026-04-08 13:36:46 +07:00
jelveh adc28ac7e8 Delete structure.md 2026-04-07 17:06:56 -07:00
jelveh d03303a3b1 Delete batch-and-symlinks.md 2026-04-07 17:03:13 -07:00
jelveh 94c4fcb242 Remove backend drawio diagram 2026-04-07 16:58:49 -07:00
jelveh 9bbb3af0bb Remove filesystem API spec doc 2026-04-07 16:56:42 -07:00
Shruc dbf87753c5 derive aliases from puterid (#2777) 2026-04-07 19:55:59 -04:00
Daniel Salazar f21dd4160c delete command service files? (#2782) 2026-04-07 14:45:37 -07:00
Daniel Salazar 4f468dcda8 chore: delete remaining "command" service (#2781) 2026-04-07 14:00:32 -07:00
ProgrammerIn-wonderland c1da2c3aaa Fix openrouter enumeration (#2780) 2026-04-07 16:54:42 -04:00
jelveh 81a0d721eb Remove alpha notice from Peer docs
Remove the alpha notice banner and spacer from Peer documentation pages (Peer.md, connect.md, ensureTurnRelays.md, connect.md, serve.md). This updates the docs to stop advertising the Peer API as alpha and cleans up redundant banner markup.
2026-04-06 15:09:39 -07:00
Daniel Salazar 2368b2bc8f fix: missing subdomains and worker flags in readdir (#2772) 2026-04-06 11:08:03 -07:00
ProgrammerIn-wonderland 649db33763 Ns/simplify 1 (#2764)
* Rid devconsole

* lots of removals

* more commandservice
2026-04-06 14:05:48 -04:00
jelveh b0bd8a12a7 Replace inline Google SVG with WebP image 2026-04-05 17:34:51 -07:00
jelveh f867519a1c Use root URL as default signup redirect
When reload_on_success is set, use '/' as the fallback redirect URL instead of the current page (window.location.href). This prevents redirecting back to the signup page after a successful signup while preserving any explicit options.redirect_url value.
2026-04-05 16:59:25 -07:00
jelveh 2dd991700e Make esbuild platform dep optional; update lock
Move @esbuild/linux-x64 from dependencies to optionalDependencies in src/docs/package.json so the platform-specific esbuild binary is treated as optional. Update package-lock.json to reflect that change (adds platform-specific @esbuild entries, marks various packages as peer/optional, bumps @emnapi/wasi-threads to 1.2.1 and removes obsolete @emnapi core/runtime entries).
2026-04-05 15:32:06 -07:00
jelveh 67d941a7af Add @esbuild/linux-x64 dependency 2026-04-05 11:56:06 -07:00
jelveh 5840348dec Move esbuild entry in docs package.json to dependencies rather than devdependencies 2026-04-05 11:48:09 -07:00
Daniel Salazar 5319940156 fix: app id shortcut batch (#2768) 2026-04-04 17:21:58 -04:00
jelveh b99d7be510 Preserve existing disable_temp_users value
Do not unconditionally overwrite window.disable_temp_users during GUI init. If window.disable_temp_users is already set, keep it; otherwise fall back to options.disable_temp_users (or false). Added a clarifying comment explaining the behavior.
2026-04-03 11:48:09 -07:00
Daniel Salazar 95cbbc5de6 feat: enable singed uploads on oss and fix broken migration (#2765)
* fix: proper shutdown

* feat: enable singed uploads on oss

* fix: s3 in oss

* fix: thumbnails in oss
2026-04-03 07:29:22 -07:00
Trevin ChowandReynaldi Chernando e23df0b589 Add kv.list() pagination playground example (#2760)
* Add kv.list() pagination playground example

Create an interactive playground example for kv.list() that
demonstrates cursor-based pagination with sample data (6 items,
2 per page). Also wire the pagination docs example to the playground
by changing the code fence from plain html to html;kv-list.

Fixes #2755

* fix: address review feedback - restore code example, create new pagination playground

* minor refactor

---------

Co-authored-by: Reynaldi Chernando <[email protected]>
2026-04-03 17:23:42 +07:00
Shruc 5e6aff63c4 add google video native provider, imagen models (#2759)
* update gemini .chat models, add imagen, add gemini veo

* add models

* update documentation

* add veo 3.1 lite, 1080p pricing
2026-04-02 16:03:38 -04:00
Daniel Salazar 0505a5df1f fix: no shutdown outside of puter servers (#2762) 2026-04-02 11:36:49 -07:00
Daniel Salazar 99d96edd9c feat: s3 fs in oss (#2761)
* feat: s3 fs in oss

* feat: new endpoints in OSS

* fix: name of fs extension

* perf: signed uploads

* fix: await socket events to align fs events

* fix: default bucket names

* fix: backend tests

* fix: deps

* fix: order
2026-04-02 11:20:59 -07:00
Reynaldi Chernando ed7c18bffa Update prompt caching example (#2758) 2026-04-01 18:18:31 +07:00
Raffy LeongandReynaldi Chernando 0e83af7e2b docs(kv): add sorting section with examples to list() API reference (#2739)
* docs(kv): add sorting section with examples to list() API reference

Added sorting section with examples for lexicographic order and zero-padding for numbers.

* docs(kv): add sorting note to list() description

* feat(playground): add kv-list-sort example

* feat(playground): add kv-list-padding.html

* add Sorting examples to kv list on doc/src/examples.js

* docs(kv): add sorting examples to list.md examples section

* Refine copy and code example

* remove extra newline

---------

Co-authored-by: Reynaldi Chernando <[email protected]>
2026-03-31 18:04:12 +07:00
Daniel Salazar 83985318fb feat: thumbnail event for gui (#2754) 2026-03-30 18:29:01 -07:00
Daniel Salazar ef243c9854 feat: signed upload urls (#2753)
* feat: signed upload urls

* fix: make sessions write to dynamo

* fix: add logs for failures
2026-03-30 16:27:29 -07:00
John Costa 00b34d7329 Add context field to OpenRouter, MistralAI, and OpenAI models (#2653)
* Map context_length for OpenRouter models

OpenRouter's API returns context_length for each model, but it was not
being mapped to the context field in the model list response. This
caused the context window size to be missing for all OpenRouter models.

Closes #2347

* Add context field to MistralAI and OpenAI model definitions

Addresses reviewer feedback to support the context field in more
providers. All 9 providers now consistently expose context window
sizes via the context field.

- MistralAI: 16 models (context matches known window sizes)
- OpenAI: 27 models (128k for GPT series, 200k for o-series,
  1M+ for GPT-4.1 and GPT-5.4)
2026-03-30 16:46:08 -04:00
ProgrammerIn-wonderland ad85026a8c Getting rid of Endpoint (#2732)
* Get rid of Endpoint and ExpectationService

* Migrate user-protected endpoints to eggspress

* eggspress better typedefs
2026-03-30 16:23:41 -04:00
Shruc cea40b3e78 support video inputs in .chat (#2740)
* support video inputs in .chat

* update docs for .chat
2026-03-30 10:26:34 -04:00
Reynaldi Chernando 7fc9a97269 Fix prompt caching example broken character (#2750) 2026-03-30 11:21:41 +07:00
Leandre Chamberland-DozoisandReynaldi Chernando 55bdd50de4 docs: update code examples from gpt-5-nano to gpt-5.4-nano (#2738)
* docs: update code examples from gpt-5-nano to gpt-5.4-nano (#2716)

* Remove unrelated changes

* remove more unrelated

---------

Co-authored-by: Reynaldi Chernando <[email protected]>
2026-03-30 10:56:57 +07:00
jelveh 6c1019a1a8 Add recover-password window, its action URL, and styles 2026-03-29 17:18:50 -07:00
jelveh add9b1e774 Update dashboard.css 2026-03-29 13:59:08 -07:00
jelveh 54dbd57811 Update dashboard.css 2026-03-29 13:45:26 -07:00
jelveh 7c092d1a22 Increase dashboard grid gap and icon size 2026-03-29 13:36:29 -07:00
Daniel Salazar 107521e45a fix: remove recommended app caching in favour of stronger caching at app fetch layer (#2748) 2026-03-29 13:07:00 -07:00
jelveh 8c47f12aa5 Update recommended apps list 2026-03-29 10:51:34 -07:00
jelveh bf3bbab468 Increase dashboard sidebar width to 250px
Bump the .dashboard-sidebar width from 200px to 250px to provide more room for navigation items and improve layout spacing. min-width, background, and border styles remain unchanged.
2026-03-29 10:26:13 -07:00
jelveh 0a6dd0c611 Add prependHeadContent and optional autofocus flags 2026-03-29 10:10:09 -07:00
jelveh bfea3bbce9 Pass req and relocate extension body content 2026-03-28 15:19:34 -07:00
jelveh 1ab73d8726 Make dashboard card headers clickable 2026-03-28 13:02:43 -07:00
jelveh 813e78843a Remove debug log; update captcha modal styles 2026-03-28 11:04:10 -07:00
jelveh 8a33c663cd Always enable cover_page in window options 2026-03-27 19:01:30 -07:00
Daniel Salazar 3e0829474e fix: incrememnt ddb sharding to 10k (#2744) 2026-03-27 18:59:48 -07:00
Nariman JelvehandDaniel Salazar 92ac05e4f2 Display logged-in banner on homepage (#2742)
* Display logged-in banner on homepage

Pass auth_user from the router into PuterHomepageService and show a logged-in banner when a user is present. _default.js now includes auth_user in the svc_puterHomepage.send call. PuterHomepageService.send signature was updated to accept auth_user; the service stores logged_in_user, forwards it to generate_puter_page_html, and injects a styled "Logged in as <username>" banner into the top of the page when available. This surfaces the current user on the GUI and exposes logged_in_user to page generation and addons.

* Include request path and logged in user in GUI params; remove banner

* fix: bad auth_user check for homepage

---------

Co-authored-by: Daniel Salazar <[email protected]>
2026-03-27 18:48:05 -07:00
Daniel Salazar 677bc29658 fix: remove dynamo health check for now (#2743) 2026-03-27 18:34:40 -07:00
Daniel Salazar b3656fdaa1 fix: handle closing server nicer on shutdown signal (#2741)
* fix: handle closing server nicer on shutdown signal

* fix: bad check
2026-03-27 17:24:33 -07:00
jelveh 89a67a4a6f Update dashboard.css 2026-03-27 15:23:13 -07:00
jelveh 266b3ae3d4 Add sidebar separator to dashboard 2026-03-27 14:14:10 -07:00
Reynaldi ChernandoandCopilot 14ed1b6db8 Add claude cache control docs (#2737)
* Add claude cache control docs

* refine

* Update src/docs/src/AI/chat.md

Co-authored-by: Copilot <[email protected]>

* Update src/docs/src/AI/chat.md

Co-authored-by: Copilot <[email protected]>

* Update src/docs/src/examples.js

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
2026-03-27 17:35:53 +07:00
jelveh c20ef3c98c Remove dynamic dashboard CSS injection 2026-03-26 21:14:19 -07:00
jelveh 829295228a Adjust dashboard grid spacing and tile size 2026-03-26 21:03:31 -07:00
jelveh ae33f6f42b Remove static myapps loading placeholder 2026-03-26 20:40:47 -07:00
jelveh e1e2cad31d Hide apps grid until icons finish loading
Prevent a visual flash by hiding the apps grid until all app icons have loaded. Adds revealWhenLoaded($container) which removes the myapps-grid-loading class when images finish (or error). TabApps now caches the .myapps-container lookup and calls revealWhenLoaded after initial render, after search results, and after loading installed apps. CSS changes: add .myapps-grid-loading (opacity:0 + transition) and a small padding-right tweak for the search input.
2026-03-26 20:29:35 -07:00
velzie 017308a741 Small tweaks to puter.peer (#2734)
* small tweaks to puter.peer

* document connections field
2026-03-26 19:34:07 -04:00
jelveh 5c913fc359 Add search bar to My Apps tab 2026-03-26 16:31:08 -07:00
jelveh 5eddd0949f Merge launch & installed apps, tweak app tile CSS
Fetch both the installedApps and get-launch-apps endpoints in parallel, normalize recommended + recent launch items, and merge them with installed apps while deduplicating by name (launch items are prioritized). Update this._apps and render the combined list. Also simplify the app tile icon styling by removing border-radius and box-shadow for a flatter icon appearance. Error handling for failed loads is preserved.
2026-03-26 15:43:09 -07:00
Daniel Salazar b857fc8743 fix: return fallback icons if no icon present (#2731) 2026-03-25 16:50:34 -07:00
jelveh 02bc010989 Include dashboard.css in GUI assets
Add /css/dashboard.css to the GUI asset lists so dashboard styles are served and bundled. Updated src/gui/puter-gui.json and src/gui/src/static-assets.js to include the new stylesheet.
2026-03-25 16:31:14 -07:00
jelveh 94395cd539 Add Apps tab UI and installed apps fetch 2026-03-25 16:10:10 -07:00
Daniel Salazar ec766eecc2 fix: syntax issue with sql (#2730) 2026-03-25 15:05:43 -07:00
Daniel Salazar 187b14dacd fix: remove last opened (#2729) 2026-03-25 14:43:06 -07:00
Shruc 2da083e7c1 use case sensitive together video model ids (#2728) 2026-03-25 16:21:16 -04:00
Daniel Salazar 393f4b70d4 fix: remove flaky event loop check (#2727) 2026-03-25 11:59:18 -07:00
Daniel Salazar d292c1e4e4 fix: healtcheck improvements (#2726)
* fix: decrease logs

* fix: healtcheck improvements
2026-03-25 11:10:58 -07:00
Daniel Salazar 08fa2d7a41 fix: installed apps api (#2725) 2026-03-25 09:41:53 -07:00
Daniel Salazar 25b9911651 fix: extension type import (#2723) 2026-03-24 23:32:12 -07:00
Daniel Salazar 9511323cdf fix: init installed apps controller (#2722) 2026-03-24 23:17:46 -07:00
Daniel Salazar 68985e9f47 fix: letter case issue (#2721)
* fix: letter case

* fix: name
2026-03-24 22:46:19 -07:00
Daniel Salazar 0a3ac7b035 Revert "feat: root level kv accesses, and installed app listing + server health check fix (#2719)" (#2720)
This reverts commit e75ccb0a41.
2026-03-24 20:28:36 -07:00
Daniel Salazar e75ccb0a41 feat: root level kv accesses, and installed app listing + server health check fix (#2719)
* feat: root level kv accesses, and installed app listing

* fix: revert server health check
2026-03-24 19:18:42 -07:00
ProgrammerIn-wonderland c52fa351a5 WIP openai responses support (#2715) 2026-03-24 06:12:13 -04:00
iamsrishanthandProgrammerIn-wonderland 4fe255347a feat: Add Anthropic Messages API compatibility layer (#2704)
* feat: add Anthropic Messages API compatibility layer

Add a new endpoint at /puterai/anthropic/v1/messages that implements the
Anthropic Messages API wire format, allowing clients using the Anthropic
SDK to point directly at Puter.

- New router translates between Anthropic format and Puter's internal
  svcAiChat.complete() pipeline
- Supports non-streaming, SSE streaming (proper Anthropic event sequence),
  and tool use round-trips
- Translates system field, tool definitions (input_schema -> parameters),
  and tool_result content blocks
- Integration tests covering non-streaming, streaming, tool use,
  Anthropic SDK compatibility, and system parameter

Closes #2554

* Fix authentication middleware

---------

Co-authored-by: ProgrammerIn-wonderland <[email protected]>
2026-03-24 06:08:25 -04:00
Shruc bed84cad76 refactor ai video gen (#2711)
* refactor ai video generation into one service

* use old duration and dimension keys

* use costoverride billing like the others
2026-03-24 05:42:52 -04:00
Daniel Salazar 76f5a26d84 fix: issue with tokens not being received by puter app (#2713) 2026-03-23 17:37:54 -07:00
Daniel Salazar 931507e74e chore: remove dead code and docs (#2705)
* chore: remove dead code and docs

* fix: healthService caching
2026-03-22 23:58:02 -07:00
Dailin 3451bab09f docs: add ai-voice-changer playground example (#2708) 2026-03-23 13:23:30 +07:00
jelveh 34bf2799b6 Fix App Store links and remove install stub 2026-03-22 16:29:13 -07:00
jelveh c99e23d737 change default credits 2026-03-21 20:17:01 -07:00
jelveh a4be42a390 Exclude login/signup from temp user creation
Prevent creating temporary users on unauthenticated first visits when the current action is the login or signup flow. The initgui else-if was expanded to include explicit checks for action !== 'login' and action !== 'signup', avoiding interference with explicit authentication routes and Turnstile challenges.
2026-03-21 19:15:01 -07:00
jelveh f89079f907 Fix login form layout and window options 2026-03-21 18:39:38 -07:00
jelveh c434af7c71 Center auth forms; add Google icon; set cover_page 2026-03-21 18:14:46 -07:00
jelveh e6726a1a94 Add peer icon and update sidebar reference 2026-03-21 11:42:42 -07:00
Vusal Huseynov c31d665fff docs: fix 404 in CreateAppResult documentation due to case sensitivity (#2702) 2026-03-20 22:15:09 +07:00
Nandini Kashyap f9511e42a4 Fix double slash in canonical URL (#2690) 2026-03-20 21:21:09 +07:00
Daniel Salazar b526c08ffe fix: ws double messages (#2700) 2026-03-19 20:56:04 -07:00
Nariman Jelveh ba1f9669d2 Peer docs (#2699) 2026-03-19 20:11:18 -07:00
jelveh 4a4a92ccaf Simplify plan name localization in dashboard
Use a single expression to derive the plan key (offering.name or 'free') and pass it to i18n when updating .bento-plan-name. This removes the previous ternary and duplicates, allowing dynamic offering names to be localized consistently.
2026-03-19 18:28:42 -07:00
jelveh a6b18ff844 Add basic/professional/business/free translations
Add missing English translations for plan tiers (free, basic, professional, business) to src/gui/src/i18n/translations/en.js and perform a minor formatting cleanup near billing messages to ensure keys are available for UI display.
2026-03-19 18:23:25 -07:00
jelveh 815b0424a3 Use subscription.offering.name for plan display
Update TabHome to read the plan name from subscription.offering.name instead of subscription.plan_name. This adapts to the updated subscription object shape while keeping the fallback to the 'pro' translation and the 'free' label when no active subscription exists.
2026-03-19 17:16:50 -07:00
Charlie Tonneslan 3628cf4909 fix(gui): account for iOS safe area inset on taskbar/dock (#2682)
The taskbar uses position:fixed with bottom:5px, which gets hidden
behind the iOS Safari bottom toolbar on devices with home indicators.

Use env(safe-area-inset-bottom) to push the dock above the safe area.
The viewport-fit=cover meta tag is already present in initgui.js.

Fixes #2517
2026-03-19 16:56:43 -07:00
Daniel Salazar ee3a3e79f2 chore: decrease uneeded logging (#2697) 2026-03-19 15:28:24 -07:00
Daniel Salazar b87f4988e1 fix: socket io sockets (#2696) 2026-03-19 14:32:20 -07:00
Daniel Salazar c2e77d3503 fix: broadcast pubsub + cleanup old code (#2695) 2026-03-19 13:13:01 -07:00
Daniel Salazar 5e2c7e0495 Revert "fix: tighten cors logic for socket io (#2688)" (#2694)
This reverts commit a94620de49.
2026-03-19 12:24:14 -07:00
Daniel Salazar a94620de49 fix: tighten cors logic for socket io (#2688)
* fix: tighten up cors for socket io

* fix: allow socket io to push to rooms in redis

* fix: various socket io issues to improve cross session stability
2026-03-19 12:08:24 -07:00
ProgrammerIn-wonderland ff126d12b1 turn metering support (#2689) 2026-03-18 23:26:00 -07:00
Daniel Salazar bb733e72c8 fix: websocket credentials (#2687)
* fix: websocket syncing on redis

* fix: websocket syncing on redis
2026-03-18 16:09:05 -07:00
ProgrammerIn-wonderland 4fb0977105 Change turn customIdentifier fully (#2685) 2026-03-18 00:36:55 -07:00
ProgrammerIn-wonderland 6a8be1505d change turn customIdentifier seperator (#2684) 2026-03-17 23:59:57 -07:00
ProgrammerIn-wonderland 817c30739b change capitalization of inviteCode (#2683) 2026-03-17 23:40:38 -07:00
velzieandProgrammerIn-wonderland 8d38e07e98 feat: add puter.peer to sdk, create PeerService in backend (#2664)
* feat: add puter.peer to sdk, create PeerService in backend

* cloudflare turn, typedefs, fallback ice, bugfixes

* minr tweak

* restrict peerservice to api.puter.com, make customIndentifier more detailed

---------

Co-authored-by: ProgrammerIn-wonderland <[email protected]>
2026-03-17 23:08:44 -07:00
Daniel Salazar 9347644f81 feat: redis pubsub for multiple connected clients in broadcast service and webhook fixes (#2681)
* debug: logs for webhook broadcasts

* fix: broadcast webhook calls

* fix: add error log with body

* fix: fetch form

* feat: redis pubsub for multiple connected clients in broadcast service

* test: add pubsub tests
2026-03-17 18:45:23 -07:00
Eric Dubé ef93ed4572 fix: change_email and user-protected endpoints (#2680)
Update check for suspended users on change_emeail and user-protected
endpoints. The `change_email` endpoint isn't using the auth middleware
because it infers from the token that was passed - this means it needs
explicit logic to check suspended users; before suspended users were
able to complete a a flow for changing their username if they already
started it before being suspended.

Update user-protected endpoints and configurable_auth so endpoints that
make sensitive account changes do not rely on cached information about a
user.
2026-03-17 14:54:29 -07:00
jelveh 2bafa03a74 Add 'Add to Desktop' English translation
Introduce a new i18n key `add_to_desktop` with value 'Add to Desktop' to the English translations file. This provides a label for UI actions that add items or apps to the desktop.
2026-03-17 13:52:26 -07:00
Daniel Salazar e6d125e17c feat: notify prod (#2679) 2026-03-17 13:48:57 -07:00
Daniel Salazar 6352bc6a9a fix: webhook message to peer (#2678) 2026-03-17 13:33:01 -07:00
Daniel Salazar 8118582496 fix: add console log to webhook for debugging (#2677) 2026-03-17 13:07:06 -07:00
Eric Dubé 814791872f Manual package updates, npm audit --force, etc (#2669)
* chore: upgrade git-date (used for release notes generator)

* chore: update vitest, vitest plugins, and svgo

* chore: run `npm audit fix`

* chore: run `npm audit --force`

* meta: empty commit to run git tests

* fix: tests gone because of a... syntax error?

I question GitHub's judgement of handling a syntax error in the file
that defines tests to run on PRs by pretending everything is fine and
passing all PRs. That to me seems like the worst possible way to handle
that. I think they should have done it not like that.
2026-03-17 12:43:17 -07:00
ProgrammerIn-wonderland c7a481118f add reasoning to claude models (#2676) 2026-03-17 12:26:53 -07:00
Miika Kuisma 53f8d67679 Merge pull request #2675 from HeyPuter/darkmode-fix
darkmode fix
2026-03-17 09:50:34 +02:00
Miika Kuisma c325eed3af darkmode fix 2026-03-17 09:49:26 +02:00
Daniel Salazar c96bb9acb1 feat: add hook on merge for deployments (#2673)
* fix: tests

* fix: add logging for webhook events for debug
2026-03-16 22:34:39 -07:00
Daniel Salazar 573d5a3ff4 fix: limit referralCodeService (#2670)
* fix: limit referralCodeService

* fix: ECMAP unlink
2026-03-16 17:33:28 -07:00
ProgrammerIn-wonderland 55dd9841c5 add x-puter-no-auth option to puter.workers.exec (#2668) 2026-03-16 10:59:11 -07:00
Eric Dubé 0af0eb127e chore: update package-lock.json (#2667) 2026-03-16 08:56:34 -07:00
ProgrammerIn-wonderland ce9c8341d1 Interpret mpga as mp3 for OpenAI transcriptions (#2666) 2026-03-15 22:01:26 -07:00
Shruc b3787ac0e0 fix flash image quality level (#2665) 2026-03-15 16:47:14 -07:00
Shruc 89904ca563 fix coercion service not selecting correct conversion path (#2660) 2026-03-13 17:37:21 -07:00
Nariman Jelveh e28a5b01d8 Use ClickHouse for app open stats (#2662)
When a global ClickHouse client is available, run two parallel ClickHouse queries (JSONEachRow) to fetch per-app open_count and distinct user_count, parse results into Maps (parsing counts as integers). If ClickHouse is not present, fall back to the original MySQL aggregate queries. Apps list still comes from MySQL as before. This enables using ClickHouse for analytics performance while preserving the existing behavior as a fallback.
2026-03-13 14:46:44 -07:00
Eric Dubé 9506c537ab fix(security): shell escape paths in HostDiskUsageService; null-prototype objects in batch parser (#2659)
* fix(core): escape path in HostDiskUsageService

* fix: always use null prototypes on operation specs

* fix: update test.yml so that tests work again
2026-03-13 14:17:36 -07:00
Daniel Salazar 9169114e60 fix: tests oom breaking (#2661)
* fix: healthcheck route visible in subdomains

* fix: tests oom breaking

* fix: don't spawn many dynalites

* fix: possible loop when merging self owned apps
2026-03-13 13:41:07 -07:00
ProgrammerIn-wonderland 87672802fe mute puterjs error (#2657) 2026-03-12 11:17:59 -07:00
Daniel Salazar 5505da027d fix: app merging (#2654)
* fix: only set authToken if present for apps

* fix: keep bootstrap in url for app to do whatever

* fix: tests

* fix: app merging

just cleaning up how merging subdomain and canon apps work, namely, persisting data better and making sure its temp alias are deleted when appropriate

* fix: tests oom
2026-03-12 10:18:02 -07:00
Eric Dubé d086e4961c feat(puter-js): add Batch builder class (#2651)
Usage example:
  const b = new puter.fs.Batch();
  b.move('file_1.txt', '~/Trash');
  b.move('file_2.txt', '~/Trash');
  await b.end();

Chaining is also supported:
  await new puter.fs.Batch()
    .move('file_1.txt', '~/Trash')
    .move('file_2.txt', '~/Trash')
    .end();

This commit provides `move` and `delete` methods for Batch.
2026-03-11 22:33:51 -04:00
ProgrammerIn-wonderland 721af2a9b1 Ns/worker global public fetch (#2652)
* add global_fetch_strictly_public compatibility flag

* add comma
2026-03-11 19:27:28 -07:00
Daniel Salazar fc273d436d feat: scope index_url uniqueness to hosted domains (#2644)
* feat: scope index_url uniqueness to hosted domains

Allows duplicate non-hosted origins while enforcing hosted-origin uniqueness and joining new app creation into an existing owner-matching hosted app UUID.

Restricts hosted index_url joins to unowned conflict apps, persists old-to-canonical app UID aliases in kvstore via sudo, and resolves aliases on read with parallel lookup to minimize latency.

* fix: allow merge for owned origin bootstrap apps

Restores hosted update/create merge when the conflicting app is the same-user auto-created origin bootstrap app while still blocking merges into normal same-owner apps to avoid multi-join behavior.
2026-03-11 18:21:09 -07:00
Eric Dubé 9a78b6bffa fix(fs) optimize stat operation. (#2649) 2026-03-11 20:18:42 -04:00
Eric Dubé 7ff1ecfcd7 dev(fs): fetch subdomains using join in readdir (#2647)
* dev(fs): fetch subdomains using join in readdir

* fix(fs): handle readdir of root directory
2026-03-11 20:06:13 -04:00
Daniel Salazar 34fdd94767 feat: phase 3 public hosted actor cookie bootstrap (#2626)
Adds non-blocking public hosted actor cookie mint/verify flow for non-private apps, sets actor context when available, and includes focused middleware/auth tests for security and performance-sensitive paths.
2026-03-11 16:15:03 -07:00
Daniel Salazar a4aea52322 fix: keep bootstrap in url for app to do whatever (#2648)
* fix: only set authToken if present for apps

* fix: keep bootstrap in url for app to do whatever
2026-03-11 15:27:30 -07:00
Eric Dubé 8c9c476969 dev(extension): [+] test-actions (#2575)
Adds an extension that presents an unauthenticated page for testing
various actions of Puter when it's under development. This action is
only meant to be used in development and is not loaded by default.
2026-03-11 14:20:03 -04:00
Eric Dubé 58738ebbb1 dev: get system user from SUService in AppIconService (#2601)
* dev: get system user from SUService in AppIconService

* fix: accidental addition
2026-03-11 14:18:45 -04:00
Eric Dubé e56d8f6889 dev(fs): add move command to batch executor (#2646)
Effectively this makes it possible to perform multiple move operations
in a batch request.
2026-03-11 14:15:49 -04:00
Daniel Salazar bba0533078 feat: checkName api for puter apps (#2643) 2026-03-11 00:23:35 -07:00
Eric Dubé ebb9015045 fix(core): handling of refer code storage add (#2642) 2026-03-10 22:39:02 -04:00
Eric Dubé 05b047c8b9 Revert "perf(core): very simplistic minifier for homepage (#2630)" (#2641)
This reverts commit ae96912699.
2026-03-10 21:36:14 -04:00
Eric Dubé ae96912699 perf(core): very simplistic minifier for homepage (#2630) 2026-03-10 21:24:13 -04:00
Daniel Salazar e96221b0b6 feat: phase 2 enforce index url ownership and uniqueness (#2625)
* feat: phase 2 enforce index url ownership and uniqueness

Adds write-time index URL uniqueness checks, expands hosted subdomain ownership enforcement to private hosting domains, and updates AppService tests for duplicate-index behavior.

* test: align app service comp fixtures with index url uniqueness

Updates regression test fixtures that intentionally exercise name conflicts and selection paths to use unique index_url values under the new one-index-per-app constraint.

* fix: exempt placeholder index url from uniqueness checks

Skips index_url uniqueness enforcement for the shared dev-center coming-soon URL in both AppService and AppES, and adds unit/comp regressions to keep one-index-per-app behavior for all other URLs.
2026-03-10 18:18:01 -07:00
jelveh 1052d4d51d Avoid reload when embedded in popup
Set reload_on_success explicitly when invoking UIWindowLogin so the UI does not trigger a page reload if the GUI is embedded in a popup. Previously the call forwarded a reload_on_success variable; now it uses !window.embedded_in_popup to prevent unwanted reloads in popup embeds.
2026-03-10 18:10:23 -07:00
Daniel Salazar 156d571b10 feat: limit concurrent request for ai chat (#2640) 2026-03-10 16:13:20 -07:00
ProgrammerIn-wonderland 14f218ef72 fix assets_url bug in GUI buildstep (#2638)
* fix assets_url bug in GUI buildstep

* add await
2026-03-10 13:55:06 -07:00
ProgrammerIn-wonderland 26a7ae9d4c s/mv/cp/ for gui buildstep (#2637) 2026-03-10 13:47:40 -07:00
ProgrammerIn-wonderland 031a3da7f1 s/icons/assets/ for building GUI (#2636) 2026-03-10 13:38:32 -07:00
ProgrammerIn-wonderland c297715875 add support for building with custom icons (#2635) 2026-03-10 13:21:05 -07:00
Eric Dubé c9787c1d4b devex(core): avoid email verification on dev (#2634)
Add guard to check if `env` in the backend configuration is set to
`'dev'`. When it is set to `'dev'`, do not invoke email verification
extensions.
2026-03-10 15:56:00 -04:00
Eric Dubé cc70e49472 Fix missing password entry (#2632)
* Revert "dev(oidc): hide unnecessary div"

This reverts commit 468558f8dc.

* fix(oidc): remove the "You will be asked to..." box properly

Earlier this was removed with a simple `display: none` in CSS to avoid
changing any logic, and the reason for that was OIDC had already gone
through significant testing, re-testing, and bug fixes; it became clear
that changes to the auth flow are fragile and the test surface is very
large. Now unfortunately what seemed like a smart decision to fix a
cosmetic issue with CSS instead of updating logic actually wound up
breaking the change username/password flow for non-OIDC users. This
commit removes this box properly and hopefully does not introduce a
subsequent terrible bug. Why would it? There's absolutely no reason I
can see that it would, but it would seem that nothing is safe, not even
CSS.

* temp: disable LRU cache of homepage for now

This is working fine but we're disabling it temporarily so we can test
specific future changes in isolation without managing two separate
branches.

* fix: put verify password text in the box

There's always something...
2026-03-10 03:08:29 -04:00
ProgrammerIn-wonderland 9d82f333e5 revert puterjs gui ordering (#2631) 2026-03-09 21:41:53 -07:00
Eric Dubé 34d4f491b3 perf(core): LRU cache PuterHomepageService (#2627)
LRU cache the output of PuterHomepageService with a cache key based on
metadata that affects the output of the homepage (if an app was
specified, and if so what app was specified).

With this change in place we can afford more time processing this
output, for example to minify the output and reduce outbound bandwidth.
2026-03-09 22:11:48 -04:00
ProgrammerIn-wonderland b687ba0456 Ns/configurable gui bundle (#2629)
* add configurable GUI bundle

* also support CSS and puterjs custom location

* simplify ternary

* used bundled instead of use_bundled_gui

* Quote the string

* close script tag
2026-03-09 19:08:24 -07:00
Daniel Salazar 57a29999e3 feat: phase 1 canonical app origin resolution (#2624)
* feat: phase 1 canonical app origin resolution

Adds cache-first canonical app uid resolution for origin-based auth flows with oldest-app selection and deterministic fallback, plus regression tests for hosted/non-hosted canonicalization behavior.

* refactor: use kv singleton for origin local cache

Replaces AuthService app-origin local canonicalization Map cache with kvjs singleton keys, applies TTL via EX on writes, and rotates local cache namespace on version bumps to avoid broad clears.

* refactor: target origin cache invalidation

Removes global app-origin cache version bumps and invalidates canonical origin cache entries by affected app index URLs from app.changed payloads. Also emits app and old_app data on update events for targeted invalidation.

* fix: avoid invalid old_app owner field in app change event

Removes owner_user_id access from AppES old_entity event payload because the entity model does not expose that property, fixing AppService comp upsert regression tests.
2026-03-09 16:32:32 -07:00
Daniel Salazar e4a52947fe fix: private app token (#2623) 2026-03-09 12:49:14 -07:00
5e7c2c3ddd Update Hosting API description #2612 (#2620)
* Update Hosting API description #2612

* Update copy and fix minor formatting

* Update copy 'deployment'

---------

Co-authored-by: artyz <[email protected]>
Co-authored-by: Reynaldi Chernando <[email protected]>
2026-03-09 14:19:24 +07:00
Michael LipandReynaldi Chernando 19df50bcba Add Networking examples to docs index page (#2613)
* Add Networking examples to docs index page

Fixes #2611

* Add icons and fix playground link

---------

Co-authored-by: Reynaldi Chernando <[email protected]>
2026-03-09 13:52:19 +07:00
Shruc 06b66719fe fix gemini image provider implementation (#2569)
* implement proper calls to gemini image

* remove hardcoded image prices

* fix model selection

* add flash 3.1 image, fix pricing

* also handle uris with data prefix

* more efficient uri parsing

* fix token calculation

* re-add some costs for models page
2026-03-08 23:25:11 -07:00
jelveh 62df3df6a9 Add nl2br Handlebars helper and use in template
Convert newline characters in email reason text to <br /> tags and ensure proper escaping. Replaced {{reason}} with {{{nl2br reason}}} in the rejection template and registered an nl2br Handlebars helper that escapes HTML entities, transforms newlines to <br /> and returns a SafeString so line breaks render correctly in emails.
2026-03-08 15:51:54 -07:00
ProgrammerIn-wonderland 004777824d use openrouter provided USD cost when present (#2619) 2026-03-08 12:12:24 -07:00
Eric Dubé 0fa0340ca2 clean(apps): merge fns only called by get_app_icon_url (#2617)
Each of these methods is only being called by get_app_icon_url. By
changing that ternary operator into an `if` block with an early return
we can move the bodies of these functions here. If one of the former
functions ever needs to be used in more than one place, it's easy to
extract it out of here agian - for now though let's not pay the cost of
jumping to another function definition while trying to understand this
code if we're not gaining anything from it.
2026-03-06 20:07:14 -05:00
Eric Dubé 2a027ed410 fix(puterfs): await queue items for fsentry action (#2616)
* style(puterfs): update adherence to linter rules

* fix(puterfs): await queue items for fsentry actions

This will ensure some operations always function as expected in a
sequence, although it may incur some performance costs.
2026-03-06 20:04:18 -05:00
ProgrammerIn-wonderland a0fc1bca30 add gpt 5.3 codex and gpt 5.4 (#2618)
* add gpt 5.3 codex and gpt 5.4

* add gemini 3.1 pro preview
2026-03-06 16:59:39 -08:00
Daniel Salazar a861c3e27a chore: typeFixes (#2615) 2026-03-06 00:04:39 -08:00
Miika Kuisma 8e794faf06 Merge pull request #2595 from HeyPuter/miika/put-611
Fix border colors in Settings panel
2026-03-06 10:03:25 +02:00
Eric Dubé f167da9a0a clean: remove a log (#2610) 2026-03-04 22:02:36 -05:00
Daniel Salazar 4aab06611e feat: redirect away cookie (#2609) 2026-03-04 17:54:58 -08:00
ProgrammerIn-wonderland 9a6178e66f Make credentialless false by default 2026-03-04 20:54:04 -05:00
Daniel Salazar 237973f227 fix: fetching user from session token (#2607)
old bug was causing issues trying to use sessions as auth checks for tighter security for private apps. missed it without more detailed logs
2026-03-04 17:29:52 -08:00
Daniel Salazar 3f0b0bfd1d feat: more robust error logs (#2605) 2026-03-04 16:47:01 -08:00
Daniel Salazar d28cc46e02 fix: add logs to debug on prod (#2604) 2026-03-04 16:20:52 -08:00
Eric Dubé 0864b9ece1 dev(apps): add configuration to not use app icon subdomain (#2603)
* dev(apps): add configuration to not use app icon subdomain

For some local configurations of Puter, such as using ngrok or a hosting
service that has limited subdomains or limited subdomain depth, the
static hosting subdomain for app icons is difficult to configure and may
not be viable. Since this is only done so an external geo-replicated
cache can be used, and it's always possible for Puter's backend to
generate an app icon, it should be possible to configure Puter's backend
to use icons from a URL hosted on the default subdomain.

Add a configuration parameter to the service "app-icon" called
"no_subdomain" which prevents Puter's backend from sending puter-icons
subdomain URLs or redirecting to them.

Also perform some small cleanup changes to make the existing code easier
to understand, including:
- rename `buildAppIconUrl` to `buildAppIconSubdomainUrl` to make it
  clear which of the two types of icon URLs are being generated.
- replace `withAppIconUrl` with `get_app_icon_url` so it is possible to
  get an icon URL without mutating an app object.
- make the `get_taskbar_items` helper use the same code for getting app
  icons as the `get_apps` helper.

* fix(apps): test initializes a service with no config
2026-03-04 19:10:32 -05:00
jelveh d802d12a05 Add UI notify API and notification handling 2026-03-04 15:29:50 -08:00
Daniel Salazar 9721943040 fix: prioritize new token thant anything outdated stored in localstorage (#2600) 2026-03-04 14:49:05 -08:00
KernelDeimos fc29e57730 fix(oidc): request object reference in oidc signup
The request object was not being passed to OIDC signup because it is
called by createUserFromOIDC which doesn't take a request object as a
parameter. It was decided to have `create_user` take the request object
from context if it's not specified rather than change the signature of
createUserFromOIDC.
2026-03-04 14:33:36 -05:00
Daniel Salazar 1720c97851 fix: origin canonization (#2597) 2026-03-04 11:09:25 -08:00
Daniel Salazar 8a14871dde fix: bad token generation for private apps (#2596) 2026-03-04 10:09:16 -08:00
Miika Kuisma f887c56e61 Restored previously used border colors 2026-03-04 10:32:39 +02:00
jelveh 6248a89a59 Add autoplay to iframe allow list 2026-03-03 22:20:31 -08:00
Daniel Salazar 6b6f9b4743 fix: puter site middleware host (#2594) 2026-03-03 22:18:47 -08:00
Daniel Salazar 8380b28d8a fix: reset subdomain if empty (#2593) 2026-03-03 21:07:55 -08:00
Daniel Salazar adf034b120 feat: add subdomain to private asset tokens (#2591) 2026-03-03 20:37:17 -08:00
KernelDeimos 468558f8dc dev(oidc): hide unnecessary div
I decided not to remove it because I really don't want to introduce a
bug right now while everything is finally working smoothly... I'm making
a note to properly clean this up later when it can be more easily tested
in isolation from everything else.
2026-03-03 23:08:05 -05:00
Daniel Salazar dbdead9ad1 fix: remove redis cache scan in favour of direct key invalidation (#2589) 2026-03-03 19:55:41 -08:00
jelveh 80cabca7ad Add Google SVG icon to sign-in button 2026-03-03 19:31:39 -08:00
Baptiste Lyet f0d0e1d8ca docs : udpdate current year (#2585) 2026-03-04 10:30:42 +07:00
Daniel Salazar 911c163fc8 feat: private app config to use app urls + app routing (#2587)
* feat: private app config to use app urls

* fix: launch app

* fix: cookie origin
2026-03-03 18:34:33 -08:00
KernelDeimos 3cd5268379 fix(oidc): login flow with puter.ui.authenticateWithPuter
It turns out there are nuances between `puter.ui.authenticateWithPuter`
vs `puter.auth.signIn` - these don't do the same thing. The primary
difference is that `puter.ui.authenticateWithPuter` will display an
override if it's not triggered by a user action, whereas
`puter.auth.signIn` will not. This definitely suggests
`puter.ui.authenticateWithPuter` should be a caller of
`puter.auth.signIn` instead of implementing its own logic for handling
the popup - that makes this part of the code more fagile - but that
refactor is out-of-scope for this bug fix.
2026-03-03 21:20:46 -05:00
Daniel Salazar 1f975b9d19 fix: private app config to use app urls (#2586) 2026-03-03 15:49:33 -08:00
Daniel Salazar 4f5fec5ee4 feat: resolve private app hosts by index_url fallback (#2583)
* feat: resolve private app hosts by index_url fallback

Adds a private-app lookup fallback for hosted subdomains without associated_app_id by matching owner-scoped index_url candidates built from request host and configured protocol.

* fix: redirect path

* fix: add new domains too

* fix, bootstrap url

* fix: bootstrap url

* fix: auto sign in puter pirvate app
2026-03-03 13:52:12 -08:00
KernelDeimos 930cbfb770 fix(ai): additional auth guard (corrected 676b6c3) 2026-03-02 19:55:07 -05:00
KernelDeimos 91b9aa014a Reapply "fix(auth): add explicit check for access token suspension (#2576)" (#2579)
This reverts commit 8349b0d692.
2026-03-02 19:45:11 -05:00
KernelDeimos 9fd1d0a2e2 Revert "fix(ai): additional auth guard (#2577)"
This reverts commit 676b6c31e1.
2026-03-02 19:37:18 -05:00
Eric Dubé 8349b0d692 Revert "fix(auth): add explicit check for access token suspension (#2576)" (#2579)
This reverts commit f6b9c69ce6.
2026-03-02 19:24:15 -05:00
Eric Dubé 8073f73032 Eric/26323 revert 26322 (#2578)
* fix(ai): additional auth guard

* Revert "fix(ai): additional auth guard"

This reverts commit 03d4e66e3b.
2026-03-02 19:12:41 -05:00
Eric Dubé 676b6c31e1 fix(ai): additional auth guard (#2577) 2026-03-02 18:45:33 -05:00
Eric Dubé f6b9c69ce6 fix(auth): add explicit check for access token suspension (#2576) 2026-03-02 17:10:42 -05:00
Miika Kuisma c0583a9095 Fix: When a maximized window gets resized, Puter apps should be resized as well (#2498)
* Fix: When a maximized window gets resized, Puter apps should be resized as well

* Fix maximixed selector to match any window with data-is_maximized (not just apps)
2026-03-02 10:48:47 -08:00
jelveh 43b313972c Revert "Permission modal now displays application's icon and title. Read and write access requests have their own text strings. (#2499)"
This reverts commit 0f33e49335.
2026-03-01 21:59:10 -08:00
Miika Kuisma 0f33e49335 Permission modal now displays application's icon and title. Read and write access requests have their own text strings. (#2499) 2026-03-01 20:02:20 -08:00
Eric Dubé f2926c948e fix(oidc): bring "Add Existing User" to working state (#2572) 2026-02-28 16:39:20 -05:00
Daniel Salazar 314c671778 fix: redis startup (#2571)
add event logging and handling to deal with redis startup
2026-02-28 13:25:42 -08:00
Daniel Salazar bb02fc6e6b fix: hardcode default perm (#2570) 2026-02-28 13:13:05 -08:00
Daniel Salazar 537f3957ed feat: add private app direct-login bootstrap page (#2566)
* feat: add private app direct-login bootstrap page

Serves a lightweight puter.js sign-in interstitial when private app identity is missing, then retries with a bootstrap token query param while preserving entitlement redirect behavior for authenticated denies.

* fix: allow private app subdomain
2026-02-28 13:04:14 -08:00
Daniel Salazar 2eb16ceab6 chore: switch private hosting domain to puter.dev (#2565)
Updates private app hosting defaults and middleware/test expectations from puter.app to puter.dev for current rollout needs.
2026-02-27 16:24:54 -08:00
Eric Dubé 2cc8cb22f8 [OIDC] allow user deletion for accounts without a password (#2567)
* fix: user deletion for OIDC accounts

* clean(backend): update copied license header

* clean(backend): replace previously removed comments

* fix: double-encoding
2026-02-27 18:55:12 -05:00
Eric Dubé 9d4e990b92 dev(oidc): switch login/signup flows where applicable (#2550)
For convenience, switch flow if the user's action doesn't match the
system state when signing up or logging in with Google:
- If the user chooses "signup" but they already have an account, log
  them into that account.
- If the user chooses "login" but they do not have an account yet,
  create an account where their authenticated email address.
2026-02-27 18:30:17 -05:00
Daniel Salazar 7e07c3d937 feat: add private access rollout gate and auditing (#2560)
Adds a config flag to disable private app gate enforcement, structured middleware audit logs for private access decisions, and regression coverage for the disabled-gate path.
2026-02-27 13:55:15 -08:00
Eric Dubé 866825767b fix(backend): default rate-limit scope instead of error (#2564)
When a rate-limit scope is not configured, use a default configuration
instead of throwing an error. Display a warning about the unconfigured
rate-limit scope when the default is used.
2026-02-27 15:58:36 -05:00
Anshuman Tripathi 7c437fabf3 fix: corrected service reference (#2559) 2026-02-27 13:45:01 -05:00
Reynaldi Chernando 613b0482e8 Add nano banana 2 (#2562) 2026-02-27 13:00:36 -05:00
Daniel Salazar 784847b1b1 feat: enforce private app hosting access gate (#2557)
Add private app access gating in PuterSiteMiddleware with entitlement event checks, bootstrap/private cookie token flow, and camelCase helper/test updates.
2026-02-26 23:42:32 -08:00
Daniel Salazar 23089901dd perf:remove recents cache (#2558) 2026-02-26 16:38:58 -08:00
Daniel Salazar adce8c64db feat: add private app access extension event contract (#2556)
* feat: add private app access extension event contract

Define app.private-access.check in extension API typings with mutable allow/redirect decision fields for entitlement handlers.

* refactor: camelCase private access event contract

Rename private access extension event and payload fields to camelCase for consistency with repo conventions.
2026-02-26 15:04:23 -08:00
Daniel Salazar 15e7a3503b feat: add private app asset token auth helpers (#2555)
* feat: add private app asset token auth helpers

Add mint/verify helpers and hardened cookie option helpers for app-private-asset tokens in AuthService.
Add focused tests for claims validation, mismatch denial, and cookie option defaults.

* fix: add prvate app config for new subdomain
2026-02-26 14:19:59 -08:00
Daniel Salazar f8560cf0f9 fix: delete redis keys in parallel, don't grant both read and write if just write needed (#2552) 2026-02-26 14:03:21 -08:00
Daniel Salazar 1887352301 fix: don't await cache invalidation for grant app permission (#2551)
* fix: disable broadcast for cache invalidation

* fix: remove broadcast for redis events for now

* fix: don't await cache invalidation for grant app permission
2026-02-25 17:26:42 -08:00
Daniel Salazar 2c1b21e197 feat: type extension cache update events (#2548)
* feat: type extension cache update events

Expose outer.cacheUpdate in extension API typings and consolidate extension service typing via ServicesMap.

* fix: batch broadcast events

* fix: bad import

* fix: import socket io

* fix: bad undefined call

* fix: simplify await for broadcast processing
2026-02-25 17:05:05 -08:00
Daniel Salazar aa04dfabb4 feat: add is_private to apps (#2546) 2026-02-25 13:26:16 -08:00
Eric Dubé c4346df24e fix(gui): defer login event until listener registered (#2547)
Fixes an error introduced in 4b8c46e where the page load is attempted to
be triggered by dispatching the login event, however the listener which
handles loading the page has not yet been registered.
2026-02-25 14:22:06 -05:00
Daniel Salazar 7a1468d070 fix: app icons via subdomain on localhost (#2544) 2026-02-25 10:14:39 -08:00
jelveh 71f7698a46 Await update_auth_data to avoid races 2026-02-24 18:33:30 -08:00
jelveh 0515b65138 Await update_auth_data to avoid race conditions 2026-02-24 18:24:33 -08:00
Daniel Salazar 66f1cd0bc3 fix: remove broadcast for cache updates (#2542)
* fix: disable broadcast for cache invalidation

* fix: remove broadcast for redis events for now
2026-02-24 16:45:32 -08:00
Eric Dubé 6658a90b6a fix(backend): invalidate app permission debounce (#2541)
* fix(backend): debounce app permission invalidation

* fix(backend): debounce app permission invalidation
2026-02-24 19:00:34 -05:00
Daniel Salazar 4c863cc5bc fix: make invalidations more robust (#2529) 2026-02-24 15:45:46 -08:00
Daniel Salazar 6544e8c250 cleanup,:remove debugger calls in our code (#2535) 2026-02-24 15:42:39 -08:00
Eric Dubé ce3c9bff34 Fix OIDC in popups (#2539)
* fix(oidc): OIDC login with puter.js popup auth

Bring login through OpenID Connect to a working state in the puter.js
popup authentication flow. This allows OIDC login to work with
third-party websites and apps.

* fix(oidc): error handling, use const (initgui)

Remove a condition that can be handled by the control flow logic
already implied by a try...catch, which also allows a variable to become
const, and log errors in this catch block.

* doc(oidc): make this comment a little more helpful

* clean(oidc): remove out-of-scope puter.js change

Remove a change that gives explicit overrides of the `defaultGUIOrigin`
paramter precedence over other sources of this value. This was necessary
when testing but might not be the correct fix for this issue.
2026-02-24 17:17:18 -05:00
Neal Shah 267713481c fix desktop gui error handling for workers (#2538) 2026-02-24 16:32:14 -05:00
Neal Shah 1e3193366a dont forward data urls through cors proxy and fix core.validation (#2537)
* exempt data urls from using cors proxy

* disallow unlimited use

* make core.validation defined again
2026-02-24 16:11:00 -05:00
Daniel Salazar 052e3f9dcb cache: extend cache invalidation to emit events out too (#2532) 2026-02-23 22:24:57 -08:00
Neal Shah c14dd5ae78 WIP: use cors proxy for outbound requests (#2533) 2026-02-24 01:10:23 -05:00
jelveh eaaeb4e6a4 Await update_auth_data before continuing
Await the window.update_auth_data call in initgui.js so subsequent logic (such as popup spinner hiding and timing) runs after authentication data has been updated. This prevents race conditions where later UI code executes before auth state is fully applied.
2026-02-23 18:19:35 -08:00
jelveh 8f4a38ae0b Load user preferences with error handling
Read user preference keys (show_hidden_files, language, clock_visible) into local variables with try/catch and sensible defaults, instead of fetching/parsing them inline. This prevents exceptions from missing or malformed KV entries and centralizes parsing for show_hidden_files. Also remove an extra blank line in initgui.js's AJAX complete callback.
2026-02-23 16:52:56 -08:00
Eric Dubé 4554331eff dev(oidc): redirect to login/signup on error (#2531)
Redirect to the login or signup page when there is an error signing in
or creating an account using OIDC, instead of displaying the error on a
new page. Alter the flow in cases where the suggested action is not the
same as the initial action taken by the user (based on the error case).
2026-02-23 17:56:38 -05:00
Daniel Salazar eda9f117c7 fix: default timeout on user caches of 15 min (#2530) 2026-02-23 14:21:24 -08:00
Daniel Salazar e60f55f20e fix: stricter invalidation for 2fa and confirm email codes (#2528) 2026-02-23 09:01:59 -08:00
P3il4 779321d334 fix nano banana pro pricing and resolutions (#2501)
* fix nano banana pro pricing and resolutions

* move gemini resolution map into models.ts

* require gemini 3 model for specific resolution and price logic

* fix usageamount for mp models
2026-02-23 03:39:48 -05:00
samarthmishra46 0ee2ebd7b4 added keyboard shortcut in the setting for better ui navigation (#2484) 2026-02-22 18:31:15 -08:00
Eric Dubé 96be8707b8 Merge pull request #2526 from HeyPuter/eric/262L0_PUT-533
fix: bad copy with reference in UIItem
2026-02-21 20:19:59 -05:00
KernelDeimos 7ba40f8062 fix: bad copy with reference in UIItem
UIItem makes a recursive call when there are multiple matching elements
in the `options.appendTo` argument. When calling recursively, the
`appendTo` property of the `options` object is mutated to a specific
element before the call, which expects that each call to UIItem occurs
synchronously. UIItem was made asynchronous by
9d598f7965
which resulted in a bug causing duplicate item icons in one directory
window instead of one item icon in each directory window after a file
upload when multiple instances of a window at the same directory
location exist.

Resolves #2514
2026-02-21 20:14:08 -05:00
Neal Shah 1ed765cb86 Clarify expiration time unit in getReadURL.md (#2525)
Updated the documentation to specify that the expiration time is in milliseconds instead of seconds.
2026-02-21 04:15:27 -05:00
Daniel Salazar 9f87ccb460 fix: cleanup some app es and app service validation (#2523)
we saw some errors with icons not allowed when being objects, this likely user error, but this adds some validation to at least avoid nulls being flagged wrong
2026-02-21 00:10:55 -08:00
Daniel Salazar 3a89deaf02 fix: wrong icon for workers (#2524) 2026-02-20 19:20:18 -08:00
Daniel Salazar 3834571ab8 fix: don't call stat on each file in dir (#2522)
* fix: decrease metering service gloabl rate of change check

* fix: don't call stat on each file in dir
2026-02-20 19:07:16 -08:00
Daniel Salazar d418976ee4 perf: batching get_apps cache look ups (#2521)
should not be slow in any case, but this should help a bit more with speed in trade of more ram and cpu usage
2026-02-20 18:02:47 -08:00
Daniel Salazar 22c1cd8be4 lint: fix eslint indentation for switch cases (#2520)
also trying to preserve call indentations, but afraid its not exactly the same, but fairly close
2026-02-20 17:22:00 -08:00
Daniel Salazar 3b32b4a437 fix: don't await for cache writes (#2519)
* fix: allow healthcheck from other hosts

* fix: don't await for cache writes

we think some awaiting on redis writes was causing issues, we shouldn't need to await really, so removing now. will have optimistic caching for these

some style changes from a recently changed rule that seems to clash with prior one
2026-02-20 17:19:01 -08:00
Miika Kuisma 808b78c234 Fixed: puter.chat button has weird gradient when browser is dark mode (#2516)
Fixed: The gradient and progress bar on the usage details page is not very pleasant and looks inverted
Fixed: The billing card on the billing tab is still light mode
2026-02-19 19:43:20 -08:00
Eric Dubé 21185cdb3f Merge pull request #2460 from HeyPuter/eric/262A0_PUT-453
Login/Signup with OIDC

Wellp... this is not a rebase, this is merge. My hands were tied this time.
2026-02-19 22:39:44 -05:00
KernelDeimos ef0a665a5f fix(oidc): add code lost due to editing a .js
This code was previously lost because I edited `outcomeutil.js` instead
of `outcomeutil.ts`. We're not building into a `dist/` directory and
`tsc` has a most peculiar lack of generating a comment at the top of
output files stating something like "// GENERATED - DO NOT EDIT" as I've
seen from every other code generator or transpiler I've worked with.

This caused the bug with duplicate confirmed emails and "account not
found" during testing on the staging server.
2026-02-19 21:25:24 -05:00
Daniel Salazar b39bbe0a0a Merge remote-tracking branch 'origin/main' into eric/262A0_PUT-453 2026-02-19 16:45:10 -08:00
Daniel Salazar 2e7765004c fix: redis cache deletions (#2518) 2026-02-19 16:43:56 -08:00
Daniel Salazar 0cca9d5535 fix : import 2026-02-19 16:08:48 -08:00
KernelDeimos 1be3eca335 fix: rate limits for oidc too extreme 2026-02-19 19:00:01 -05:00
Daniel Salazar 7493573c61 Merge remote-tracking branch 'origin/main' into eric/262A0_PUT-453 2026-02-19 15:28:14 -08:00
Daniel Salazar ec412eaff6 feat: cleanup cache invalidation and pull out keys to be easily used in other places that need the same cache (#2515)
fix: tests
2026-02-19 15:07:04 -08:00
KernelDeimos 0112f097db style(oidc): if instead of return with ternary expression 2026-02-19 17:18:48 -05:00
KernelDeimos 4e01608e4a dev: remove guarded debug log 2026-02-19 17:02:33 -05:00
KernelDeimos b3b32980db clean(oidc): remove jwt remap in ESM code 2026-02-19 16:32:41 -05:00
KernelDeimos f3bf40a3c0 style(oidc): rename httpPowers to hasHttpOnlyCookie 2026-02-19 16:29:19 -05:00
KernelDeimos 4de6d38604 style(oidc): make this a private method 2026-02-19 16:23:40 -05:00
KernelDeimos 4c518830ea clean(oidc): remove "ghost files" 2026-02-19 16:23:40 -05:00
KernelDeimos b5d719e110 lint: [+] no-useless-computed-key:error 2026-02-19 16:23:38 -05:00
KernelDeimos c97a499bc9 style(oidc): private members in OIDCService 2026-02-19 16:21:43 -05:00
KernelDeimos 16f2f5bf5f style(oidc): address PR rev on oidcCallbackPreamble_ 2026-02-19 16:21:42 -05:00
KernelDeimos 720277c9bd style(oidc): migrate cjs to esm 2026-02-19 16:21:42 -05:00
KernelDeimos 7ca0fe2ac4 clean: remove commented code 2026-02-19 16:21:42 -05:00
KernelDeimos ccecf0a86e fix(oidc): remove generated source file
I forgot that our transpile tooling requires manually gitignoring
individual javascript files because we don't actually create a full
generated build of backend.
2026-02-19 16:21:42 -05:00
KernelDeimos 8d18ee527c refactor(oidc): address review comment
https://github.com/HeyPuter/puter/pull/2460/changes#r2819861213
2026-02-19 16:21:42 -05:00
KernelDeimos 7858f5ba3e fix(oidc): add error log for QR login flow 2026-02-19 16:21:42 -05:00
KernelDeimos a2b9193287 clean(oidc): remove temporary debugging logs
These logs were temporary. I have a pre-merge TODO list item that says
to remove these. They were caught in review so I'm removing them early.
2026-02-19 16:21:42 -05:00
KernelDeimos d0c2e9b7fc fix(oidc): rate-limit identity for username 2026-02-19 16:21:41 -05:00
KernelDeimos 2b802143fc fix(oidc): add missing awaits 2026-02-19 16:21:41 -05:00
KernelDeimos 42d3f9e816 fix(oidc): http-only cookie sync for switch user 2026-02-19 16:21:41 -05:00
KernelDeimos b5a3323811 fix: incorrect parameters in UIWindowChangeEmail 2026-02-19 16:21:41 -05:00
KernelDeimos 2cdc211b29 fix: incorrect parameters in UIWindowChangePassword 2026-02-19 16:21:41 -05:00
KernelDeimos 298f1cdb42 fix: incorrect accessor reference in OIDCService
During development a property named `success` was inverted to a property
named `failed` which resulted in an incorrect accessor reference with a
referring piece of code that wasn't updated. This is type error.
2026-02-19 16:21:41 -05:00
KernelDeimos e145f5dcc3 dev(oidc): rewrite "Disable 2FA" window
In lieu of knowing exactly what happened (probably more than one thing),
the "Disable 2FA" window was very broken. It was blank, but then after
fixing that all the actions were broken. There wasn't much value in
keeping the implementation though, because it was already inconsistent
with other flows - instead of fixing what was there it made more sense
to re-use the pattern of UIWindowChangeUsername and UIWindowChangeEmail,
creating UIWindowDisable2FA. After testing this, it works much better
(it actaully works), but there is a caching issue unrelated to the UI
implementation.
2026-02-19 16:21:39 -05:00
KernelDeimos 4d49f5dfa6 fix: allow html property in UIComponentWindow
A component was removed and an html property was passed to
UIComponentWindow. This makes sense because UIWindow accepts an html
property, so rather than update the calling code it made more sense to
update UIComponentWindow to be more intuitive.
2026-02-19 16:13:45 -05:00
KernelDeimos 8ecd6cd13e dev(oidc): confirm email by default for OIDC 2026-02-19 16:13:45 -05:00
KernelDeimos 21e959bbaa dev(oidc): remove button to manually invoke re-auth
This button was useful during manual testing, but the re-authentication
flow for protected endpoints with OIDC users reliably invokes the popup,
so this is no longer necessary. Removing this button reduces clutter on
these screens and might make the flow easier for users to understand.
2026-02-19 16:13:44 -05:00
KernelDeimos e2068e7b9c fix(oidc): fix QR code login issues caused by OIDC
In implementing OIDC it became necessary to introduce the separation of
"GUI Tokens" and "Session Tokens". This breaks QR login because Puter
does not set the HTTP-only session cookie when logging in with this
flow.

Add a middelware to WebServerService to detect QR Code logins and set
the appropriate HTTP-only session cookie.
2026-02-19 16:13:44 -05:00
KernelDeimos 8923bdac95 refactor(oidc): update UIWindowChangePassword
Use the openRevalidatePopup function in util/openid.js within
UIWindowChangePassword instead of re-implementing that functionality.
Additionally, normalize some of the code so it is more similar to
UIWindowChangeUsername and UIWindowChangePassword.
2026-02-19 16:13:44 -05:00
KernelDeimos df1f5c44cc refactor(oidc): extract common (email + username)
There is common functionality between all of the GUI code for actions on
protected endpoints. Update UIWindowChangeEmail and
UIWindowChangeUsername to both use a new utility function called
openRevalidatePopup in util/openid.js.

This file is called `openid.js` instead of `oidc.js` so that it's more
easily recognized by contributors who might be more familiar with the
name of the organization than the name of the standard itself.

After these changes, UIWindowChangePassword and the "disable 2FA" button
in UITabSecurity still need to be updated to use `util/openid.js`
instead of duplicating this functionality.

The justification for following DRY here instead of leaving the
implementation as-is is because these flows are particularly error
prone and will be difficult to maintain without this consistency. Some
subtle bugs I previously wasn't aware of got fixed in the process.
2026-02-19 16:13:44 -05:00
KernelDeimos 0b8eafa128 dev(oidc): re-auth remaining protected endpoints
The OIDC re-authentication flow, which replaces password confirmation
for accounts that were created with OIDC and do not have a password, was
previously added to "change username" for manual testing of the
backend-side implementation. Add the re-authentication flow to the
remaining user-protected endpoints, which are:
- change password
- change email
- disable two-factor authentication

When using "change password" on a new account created via OIDC, the
account changes state to a passworded account which causes these flows
to use password confirmation as before instead of re-authentication.
2026-02-19 16:13:41 -05:00
KernelDeimos 142d745f0a fix: "Popup Closed" message, + excess logs 2026-02-19 16:10:22 -05:00
KernelDeimos 3a9a345600 tweak: make monthly username changes configurable
The monthly number of username changes was hardcoded as `2`. Being able
to configure this value makes it easier to test the username change
flow. Hosters of OSS Puter may also find this configuration beneficial.
2026-02-19 16:10:21 -05:00
KernelDeimos d532b3d47b fix(oidc): session token vs gui token issues 2026-02-19 16:10:21 -05:00
KernelDeimos 5d22ee0517 tweak: re-enable re-auth popup closing 2026-02-19 16:10:21 -05:00
KernelDeimos 4374281070 dev: add re-authentication flow for protect actions
When users make sensitive changes to their account they are asked to
re-enter their password. This prevents a hijacked session from causing
futher damage.

Users created with the new OIDC flow do not necessarily have a password
set on their account, and they need to also be able to make these
changes. While removal of the password entry requirement for these users
would solve this problem, it would also make their accounts more
vulnerable. To solve this problem while maintaining the same security
standard for OIDC users, we need them to confirm via either 2FA or
re-authentication via OIDC. Since users aren't required to have 2FA, the
re-authentication via OIDC approach is also the minimum viable solution.

This commit adds OIDC re-authentication support for all endpoints under
UserProtectedEndpointsService, and makes updates to the
UIWindowChangeUsername dialog for manual testing.

Currently this implementation fails at the final submission to change
the username because of a separate issue with the correct authentication
token not being set; this is related to the separation of GUI tokens vs
http-only tokens.
2026-02-19 16:10:21 -05:00
KernelDeimos 7c8f0d5572 dev(backend): OIDC continued [1]
This commit is rather monolithic. An attempt to split it up into smaller
changes proved too difficult (as well as frustrating) and I realized it
would absolutely increase the chance of having a broken commit (making
bisects more difficult) unless a lot of testing effort between commits
was performed, which would have very little benefit.

The changes in this commit include:
- Outcome utility used by SignupService for error handling
- SignupService, whichs implements re-usable create_user function
- Signup method in OIDCService
- flow-specific callbacks in OIDC (separates login from signup)
- **SEPARATE SESSION COOKIE AND GUI COOKIE**
  - this change "rocks the boat" the most and has the highest likelihood
    of causing problems
2026-02-19 16:10:21 -05:00
KernelDeimos 47b133d512 dev(backend): incomplete oauth2 OIDC impl 2026-02-19 16:10:20 -05:00
Neal Shah 78a4ccb9a4 make image models case insensitive for backwards compatibility reasons (#2512) 2026-02-18 17:01:50 -05:00
Miika Kuisma 1ec2aec66c Dashboard: Files tab fixes (#2508)
* Fixed issues where file list wasn't scrollable on mobile device, and tap'n'hold on file opened wrong context menu.

* Fixes text color of selected row
- [x] Fixes path navigation button transitions
- [x] Fixes path navigation button colors
- [x] Hide AppData folder
- [x] Hide hidden files
2026-02-18 12:19:46 -08:00
KernelDeimos cecb63b372 fix(backend): ESM/CJS interop is sad
Fix ESM/CJS interop issue in unit tests with a hack that checks the
class name as a string instead of just doing an `instanceof` check. This
is assuming that the "rewriter must be a PermissionRewriter" error I'm
seeing on GitHub is because there are two different "copies" of
PermissionWriter due to ESM/CJS interop issues. If this is not the case,
then you're not reading this commit message on `main`; if this commit is
on `main` then that's exactly what went down.
2026-02-17 22:19:52 -05:00
KernelDeimos 05cc4ad477 dev(puter.js): add support to request app dir
Add support for requesting access to the root directory of an app's
associated subdomain.
2026-02-17 22:19:52 -05:00
KernelDeimos bfff2d20f9 dev(backend): add /auth/request-app-root-dir
Add the ability to request an app's root directory. A permission
rewriter is provided so that apps may refer to a permission when
requesting this access without knowing the path of the app's root
directory.
2026-02-17 22:19:52 -05:00
KernelDeimos d21ed31d67 dev(backend): add debug mode for 403 responses 2026-02-17 22:19:52 -05:00
Daniel Salazar 5df1ca88ca feat: sonnet-4.6 support (#2506)
* feat: sonnet-4.6 support

* fix: tests
2026-02-17 12:10:50 -08:00
9d598f7965 Files tab for dashboard view (#2331)
* Dashboard - Added files tab with basic folder and files listing.

* clearing out some linter errors

* Removed Public folder for now

* Added "modified" column
Subfolder are listed before the files

* Dashboard - files tab: context menu basics

* Dashboard - Files tab: subfolders can be opened. Items can be opened from more-menu or by double clicking on them

* Dashboard - Files tab: use UIContentMenu instead of custom menu for "more menu"

* Dashboard - Files tab: Delete implemented, Trash folder added

* refactored context menu rendering

* Implemented UIItem context menu functionalities
Added path

* Rename files and folders

* Rename fix

* tweaks and fixes

* WIP: Multiple selection, drag and drop, trash folder improvements

* clean

* Files handling improvements

* empty trash fix

* grid view

* grid view improvements

* update icons
context menu for multiple items shows file counts such as: Delete (9)

* Path navifation buttons

* better way to get user's directories

* Added icons for various file types

* Use puter.kv instead of window.user_preferences

* sorting and column resizing

* documentation of the functions

* Style update. Dashboard colors now as CSS variables

* refactored restoring from trash and emptying trash with proper callbacks & refreshing

* select documents folder by default
style tweaking

* Drag to select files and folders

* dark mode

* style tweaks

* removed some dead code..

* Keyboard shortcuts (copied from UIWindow - untested & in progress)

* Add drag-and-drop file upload support to Dashboard

Implement native file drag-and-drop from local filesystem to Dashboard:
- Add dragster handlers for main content area, sidebar folders, and folder rows
- Create uploadFiles() method with progress modal and directory refresh
- Add visual feedback CSS for drop zones (highlight on hover)
- Fix subfolder drop detection to prevent duplicate uploads
- Add callback support to unzipItem/untarItem for directory refresh

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* style tweaks

* Fix cut/paste functionality in Dashboard

The cut operation was storing clipboard items as plain path strings, but
window.move_clipboard_items() looks for .item DOM elements which don't
exist in Dashboard (it uses .row elements). Added a Dashboard-specific
moveClipboardItems() method that calls puter.fs.move() directly with UIDs,
and updated cut to store objects with path and uid like copy does.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Add mobile phone layout optimizations for Dashboard

- Add responsive CSS for screens ≤480px with two-row file list layout
- Wrap item-size and item-modified in item-metadata div for mobile grid
- Hide directories sidebar on mobile (use breadcrumbs for navigation)
- Reorganize header with breadcrumbs on top row, nav buttons below
- Add single-tap to open folders on touch devices
- Fix context menu "Open" action in Dashboard by adding onOpen callback
- Hide column headers on mobile since metadata is shown per-item

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Add CSS variables to Dashboard bento elements for dark mode support

Replace hardcoded color values with CSS custom properties throughout
the bento card components to enable proper dark mode theming. Adds new
variables for icon shadows, fancy headers, gradients, and usage bars
with appropriate values for both light and dark color schemes.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Add spacebar image preview feature to Dashboard Files

Pressing spacebar on a selected image file now shows a full-size preview
popover centered over the files container. Features include:
- Toggle behavior: press spacebar again to close
- Auto-switch: selecting another file updates the preview
- Click outside to dismiss
- Works in both grid and list view

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Add floating action bar for multi-file selection in Dashboard Files

When 2+ files are selected, a floating action bar appears above the footer
with quick access buttons for common operations:
- Download, Cut, Copy, Delete for normal files
- Restore and Delete Permanently for items in Trash

The bar slides up with a smooth animation and disappears when clicking
the background to deselect. Includes mobile-responsive styling with
icon-only buttons on smaller screens.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Add mobile select mode for multi-file selection in Dashboard Files

On mobile devices, users can now tap a select button in the path actions
to enter select mode. In this mode, tapping files toggles their selection
instead of opening them, with checkboxes appearing next to each item.
The floating action bar appears with 1+ selected items (vs 2+ on desktop)
and includes a Done button to exit select mode.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Center empty directory message in Dashboard Files

Replace row-based layout with centered flex positioning for the
"No files in this directory" message, improving visual presentation.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Fixed issue where clicking on files background created blue dot (drag rectangle selection bug)

* Image preview size tweak

* Add URL-based routing to Dashboard with hash fragments

Enable shareable/bookmarkable URLs for Dashboard tabs and file paths.
The URL hash reflects current location (e.g., #files/username/Documents,
#usage, #account). Browser back/forward navigation now works for folder
navigation, and direct URL entry loads the correct tab and path.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* fixing draggable styles

* drag clone fixes

* Add smart column resizing and filename truncation to Dashboard Files

- Add middle-truncation for filenames preserving extensions (e.g., "longfile…name.txt")
- Double-click column resize handles to auto-fit content width
- Reset saved column widths to defaults if they don't fit smaller screens
- Apply truncation to both list and grid views

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Separated dashboard styles into dashboard.css and loading it dynamically only when navigating to /dashboard

* Files and folders can be dropped over path items in order to move them. This is useful when you want to move items into parent folders.

* Use custom context menu component for item-more menu on mobile devices

* Created callback system to undo_last_action so that dashboard file list would always refresh after undo operation

* gray update

* hovering folder while dragging items opens the folder

* Fixed issue with hover-dropping

* Fixed chained drag-over-folder-and-hover system

* dark mode tweak

* - [x] Right clicking on background of an empty folder doesn't trigger context menu
- [x] Right clicking on path should keep path item active
- [x] Sidebar folder don't have context menu
- [x] Drag item should be opaque so I can see through it
- [x] Transition animation issue when hovering path action buttons
- [x] Double clicking on column resizer: add padding
- [x] Load dashboard.css before loading the page content
- [x] Mobile: opening menu, clicking outside menu should close it
- [x] Mobile: on smaller screen there should be still two columns
- [x] Mobile: file name truncation in grid view doesn't work

* Added missing badges

* WIP has_worker

* display worker icon on the .js files which are workers

* Display worker badge on worker files, hovering badge shows worker URL.
Worker URL added to file properties modal.

* disable "publish as website" from context menu for folders that are already published

* Loading spinner for Files

* tweaks and fixes

* Files clean loading spinner

* Files: worker URL in the properties modal is clickable link

* use custom tooltip to display worker URL

* refactored renderDirectory

* Fix Sidebar folder highlighting

* add Beta badge on Files tab

* Implemeting socket based item updating

* Put newly added items into the position where they would land when list is sorted

* restore from trash refresh fix

* Revert "Revert "Adds worker badge to .js files which have been registered as workers. Hovering badge shows popover with worker URL. File properties modal also shows clickable worker URL. (#2462)""

This reverts commit c2750f2ca1.

* worker in stat

* update puterjs and frontend code to support returnWorkers in stat

* Better way of handling worker info

* Fixed issue where right clicking on background opened two instances of a context menu

* Fixes issue where while renaming a file, double clicking on word opened the file

* fixes issue where while dragging multiple items the top-most item was transparent resulting blurry mess

* when opening a folder, update view instantly

* Improved drag-to-select items

* Added feature where typing selects matching file items
Fixed issue where keyboard listener for file list was active when context menu was open

* Fixed issues with File -> New in context menu
Fixes issue where files-selection-actions menu didn't disappear after deleting items

* Improved drag to select behavior
Improved drag items
Improved worker badge handling

* Cancel zone for dragging items (when spring-loading subfolders)

* context menu's submenu tweak

* Fixed issue where resizing window didn't work (when using "Open in New Window" from context menu)

* Disabled buttons on .files-selection-actions while drag-to-select is happening

* Fixes issue where creating new items using right-clicking re-rendered the directory view

---------

Co-authored-by: Claude Opus 4.5 <[email protected]>
Co-authored-by: ProgrammerIn-wonderland <[email protected]>
2026-02-17 10:50:08 -08:00
Neal Shah 4279cd92df WebDAV don't fetch thumbs or associated apps (#2505) 2026-02-17 01:53:59 -05:00
Neal Shah 2fe4ed50c3 WebDAV don't fetch subdomains (#2504) 2026-02-17 01:47:43 -05:00
Neal Shah 562671e498 add extra permission check for granted apps (#2503) 2026-02-17 01:29:54 -05:00
Daniel Salazar 00befdc192 fix: allow b64 srings without mime type for app icons (#2502) 2026-02-16 19:28:44 -08:00
Daniel Salazar 44bb5953b4 fix: app icon origin (#2500)
* fix: app icon origin

* fix: app icon origin size
2026-02-16 12:35:30 -08:00
Daniel Salazar 32682e73eb perf: improve app open time (#2490) 2026-02-16 11:00:32 -08:00
KernelDeimos d9167744ef patch(puterfs): limit directory depth to 35
This is a temporary measure while we fix a production issue.
2026-02-13 20:53:56 -05:00
Neal Shah c87506c7d8 workers ai realias - to dot (#2493) 2026-02-13 16:40:10 -08:00
Neal Shah 0f97653b4c fix stat options when stat(path, options) (#2492) 2026-02-13 15:38:56 -08:00
Neal Shah a211aa04bc add more alises (#2491) 2026-02-13 13:46:42 -08:00
Neal Shah f65ab05b40 Add workers AI image model support (#2489) 2026-02-13 13:07:50 -08:00
Jatin SharmaandReynaldi Chernando 9a47bf16da Bundle docs CDN assets locally for full offline support (#2473)
* docs: bundle CDN assets locally for full offline support

* fix

* fix

* fix

* revert accidental package-lock.json changes

---------

Co-authored-by: Reynaldi Chernando <[email protected]>
2026-02-14 02:14:46 +07:00
Daniel Salazar 809d375854 fix: don't stream back bytes for icons (#2486)
* decrease global check alerts

* fix: don't stream back bytes for icons
2026-02-12 23:34:37 -08:00
Daniel Salazar 4136cb1d24 fix: do not await for puter icon write in db (#2485) 2026-02-12 22:43:23 -08:00
jelveh f1a8fdb5c8 Trigger in-app upgrade flow for app env
Handle upgrade flow when running in the app environment by calling await puter.ui.requestUpgrade() in driverCall_. Added app-specific branches in two places where usage/insufficient-funds were previously handled only for web (which showed a web dialog). This ensures the in-app UI is used for upgrade requests and awaits the result.
2026-02-12 21:45:03 -08:00
jelveh b4c58c4f5c Update UITabUsage.js 2026-02-12 18:09:52 -08:00
jelveh 286895ff66 Disable publish worker UI badge updates
Temporarily comment out code in UIWindowPublishWorker that updates item UI after publishing: hiding the lines that show the item website badge, show per-item website-url badges, and set the data-website_url attribute. This prevents the publish worker from automatically modifying those DOM elements/attributes (kept commented for potential rollback or debugging).
2026-02-12 16:45:23 -08:00
Neal Shahandjelveh a23f272fd2 add sandboxing by default in god mode created workers (#2481)
* add sandboxing by default in god mode workers

* closes #2481

* Update UIWindowPublishWorker.js

* Add sandbox option to worker publish UI

Add a collapsible 'Advanced' section with a 'Sandboxed' checkbox (checked by default) to UIWindowPublishWorker. On publish the code reads the checkbox state and builds createOptions ({ sandbox: true } or { sandbox: false }) and passes it to puter.workers.create as an argument so workers can be created in sandboxed or non-sandboxed mode. Small UI styling and markup for the details/summary block included.

---------

Co-authored-by: jelveh <[email protected]>
2026-02-12 16:06:40 -08:00
Daniel Salazar 354ac314a9 feat: subdomain error redirect (#2483) 2026-02-12 15:39:18 -08:00
Daniel Salazar 1292148b41 fix: app-icons protocol (#2480) 2026-02-12 13:47:23 -08:00
jelveh 9991d58613 Refine 'listing-rejected' email copy 2026-02-12 12:49:13 -08:00
Daniel Salazar 8a6d07ec1f fix: app icon again (#2478) 2026-02-12 12:07:03 -08:00
Daniel Salazar bfd8a4e16d fix: app icons saving (#2477) 2026-02-12 11:55:27 -08:00
Neal Shah 36b1499819 Ns/workers in stat attempt 2 (#2476)
* worker in stat

* add returnWorkers to stat

* workers in readdir
2026-02-12 10:45:22 -08:00
Neal Shah b209a94a80 dedup image models (#2475) 2026-02-12 10:39:23 -08:00
Het Savani 5cd731db3d feat(start-menu): add "Add to Desktop" option for all apps (#2386) 2026-02-11 21:59:14 -08:00
Daniel Salazar 1d22ab5fb7 cleanup: remove thumbnail service for client side thumbnails (#2468)
* cleanup: remove thumbnail service for client side thumbnails

* fix: emit thumbnail create event and not just use raw data

* fix: broken test
2026-02-11 17:12:47 -08:00
jelveh cbab7a30e2 Emit user signup success event 2026-02-11 16:53:31 -08:00
Daniel Salazar d7a3f61902 fix: false alarm from openrouter (#2470) 2026-02-11 16:49:42 -08:00
Neal Shah d024fdda0d Add cache tokens for grok 3 mini fast (#2469) 2026-02-11 16:49:12 -08:00
jelveh 292603af96 Merge branch 'main' of https://github.com/HeyPuter/puter 2026-02-11 15:14:02 -08:00
jelveh c2750f2ca1 Revert "Adds worker badge to .js files which have been registered as workers. Hovering badge shows popover with worker URL. File properties modal also shows clickable worker URL. (#2462)"
This reverts commit 50e2d275bc.
2026-02-11 15:13:56 -08:00
Daniel Salazar 0a594bdfc3 fix: metering alerts for missing costs (#2466) 2026-02-11 15:03:23 -08:00
Neal Shah 81c88c1434 add extra model details, update grok models (#2465) 2026-02-11 13:55:20 -08:00
Daniel Salazar afeac494ac feat: remove file cache service (#2464) 2026-02-11 12:57:10 -08:00
Miika Kuisma 50e2d275bc Adds worker badge to .js files which have been registered as workers. Hovering badge shows popover with worker URL. File properties modal also shows clickable worker URL. (#2462) 2026-02-11 12:02:10 -08:00
Daniel Salazar 512986880b feat: app icons in subdomain (#2461)
* feat: app icons in subdomain

* fix: imports

* fix: icon location
2026-02-10 19:04:15 -08:00
Neal Shah 56ee3d23df Ns/web dav range fixes (#2459)
* better calculation for ContentLength

* lets try that again
2026-02-10 16:11:01 -08:00
Neal Shah 4f84decdec fix tool call blank content (#2458) 2026-02-10 14:14:27 -08:00
Neal Shah e55829623f Revert "allow empty message (#2455)" (#2457)
This reverts commit 7880ade5d7.
2026-02-10 14:01:31 -08:00
Daniel Salazar 5e8ce3a021 fix: decrease large error log from wrong model (#2456)
* [PUT-471] feat: estimate and bill input for gemini imgaes :dev:

* fix: decrease large error log from wrong model
2026-02-10 13:36:35 -08:00
Neal Shah 7880ade5d7 allow empty message (#2455) 2026-02-10 12:53:56 -08:00
Daniel SalazarandProgrammerIn-wonderland 91afa2c356 [PUT-471] feat: estimate and bill input for gemini imgaes :dev: (#2453)
* [PUT-471] feat: estimate and bill input for gemini imgaes :dev:

* [PUT-472] add input/output costs to openai image models too

* npm version bump

* remove second url log

* fix gemini pro image

---------

Co-authored-by: ProgrammerIn-wonderland <[email protected]>
2026-02-10 12:52:33 -08:00
Reynaldi Chernando febcceb042 Fix auth type typo (#2454) 2026-02-10 10:00:53 -08:00
Neal Shah 4fb84bc117 add configurable backend (#2452) 2026-02-09 21:47:12 -08:00
jelveh 4a4ca331e5 Persist api_origin during auth flow if provided in url 2026-02-09 21:15:01 -08:00
KernelDeimos e5750d8eb7 fix: add explicit handling for access token in ACL
For reasons still unknown, there are circumstances where the permission
scanner denies permission to access tokens that should have been granted
permission. This change de-abstracts/flattens the logic for checking
access tokens so that it is easier to understand and maintain. The newly
implemented code does not suffer from the same issue.
2026-02-09 18:26:03 -05:00
Reynaldi Chernando e2ccaadf2f Fix gemini 3 pro image model name (#2450) 2026-02-09 12:24:40 -08:00
jelveh 102592bc18 Increase dialog popup height to 700 2026-02-08 23:10:05 -08:00
Daniel Salazar f9805dfffb fix: decrease log usage (#2449) 2026-02-08 22:26:23 -08:00
Daniel Salazar 380e72cad2 fix: axiosRequest log dumping b64 urls (#2448) 2026-02-08 21:47:04 -08:00
jelveh 53647a0f5b Update UIWindowEmailConfirmationRequired.js 2026-02-08 21:04:43 -08:00
stuffbymax 7c9bbd4336 Add shell reload instructions for nvm setup (#2446)
Added instructions to reload the shell after loading nvm. 
i forgot to add it because i am stupid
2026-02-08 19:31:46 -08:00
Nariman Jelveh 362e4d4636 Merge branch 'main' of https://github.com/HeyPuter/puter 2026-02-08 18:39:47 -08:00
Nariman Jelveh 32b83bae58 Preserve full redirect URL and forward reload flag 2026-02-08 18:39:36 -08:00
Daniel Salazar 7d84d7a46b fix: dev center emails (#2447) 2026-02-08 18:37:32 -08:00
stuffbymax 2eff1386d1 Create installation guide for Node.js and npm
Added comprehensive installation guide for Node.js and npm across various Linux distributions.
2026-02-08 15:31:48 -05:00
stuffbymax ac35b672de Add npm and node installation instructions
Added installation instructions for npm and node.
2026-02-08 15:31:48 -05:00
KernelDeimos f429d5f76a chore: fix eslint issues 2026-02-08 15:27:11 -05:00
Nariman Jelveh 74c23f609e Set email confirmation default to false
Change default behavior for email confirmation by initializing email_confirmation_required to 0 (not required) instead of 1. Remove the duplicate declaration and clarify the comment; existing logic still overrides this default (sets to 0 for matching pseudo_user/uuid_user and to 1 when event.requires_email_confirmation). Minor whitespace cleanup.
2026-02-08 12:02:23 -08:00
Nariman Jelveh d8a586ad66 Update UIWindowSignup.js 2026-02-08 10:56:59 -08:00
Zachary a875524a85 Update french translations (#2445) 2026-02-08 10:53:36 -08:00
Nariman Jelveh f9c35b4fae Improve email confirmation window layout and options 2026-02-08 10:32:01 -08:00
Daniel Salazar de7e831eff fix: gemini via openrouter models (#2438)
* fix: gemini

* feat: let logservice log to console

* fix: log

* feat: dev-center emails
2026-02-08 01:42:31 -08:00
Nariman Jelveh 4e88d28ecb Reload on signup unless embedded popup 2026-02-07 19:18:27 -08:00
Nariman Jelveh cfc56877e2 Store email confirmation flag on signup 2026-02-07 19:15:59 -08:00
Nariman Jelveh 873da5ae61 Honor event.requires_email_confirmation flag 2026-02-07 19:00:19 -08:00
Neal Shah ce96fb54ae Update error message for email confirmation (#2442) 2026-02-07 18:51:49 -08:00
Nariman Jelveh 934886d861 Add email confirmation dialog & checks 2026-02-07 18:51:11 -08:00
Neal Shah 8e3d285671 merge users (#2441) 2026-02-07 18:44:31 -08:00
Nariman Jelveh f6531d29f0 Send app token to opener and close popup
After a successful flow, fetch the user app token for the opener origin, cache the returned app_uid on window.host_app_uid, and post a 'puter.token' message to the opener containing success, msg_id, token, username, and app_uid. If the action is absent or equals 'sign-in', close the popup window. This enables parent windows to receive credentials in popup/embedded auth flows.
2026-02-07 17:58:24 -08:00
Nariman Jelveh 6be60f6973 Hide Turnstile captcha when showing signup 2026-02-07 17:39:22 -08:00
Neal Shah 262e31a6a6 Ns/service guard (#2440)
* add enforcer mechanism

* update better-sqlite3
2026-02-07 17:24:09 -08:00
Nariman Jelveh 48e37251df Return JSON errors for signup and handle in GUI 2026-02-07 16:41:59 -08:00
Neal Shah 03827e4197 Increase opus 4.6 max tokens (#2439) 2026-02-07 13:05:07 -08:00
KernelDeimos 020a64dbbd fix: ensure cache invalidation when verifying OTP
It is possible this broke after redis caching was employed because it
broke the expectation that assignments to attributes on cached objects
would remain for future accesses on said objects. This has not been
confirmed as the cause.
2026-02-06 23:42:47 -05:00
Neal Shah ac8456f8d3 Restrict apps from using /puterai/openai/v1 (#2435) 2026-02-06 18:43:18 -08:00
Neal Shah 28cedec9de chat_completions tool call fixes (#2434)
* chat_completions tool call fixes

* update chat completions test
2026-02-06 15:10:27 -08:00
Sanjeev 06fe07e384 fix: auto-collapse playground menu on mobile (#2430) (#2431)
* fix: auto-collapse playground menu on mobile (#2430)

* style: remove unused code reference after review
2026-02-07 01:30:19 +07:00
Reynaldi Chernando 10e1999304 Update puter-js readme for getAuthToken (#2417) 2026-02-06 17:49:30 +07:00
Daniel Salazar fbb2080a66 fix: don't use ai aggregators if we have the model ourselves (#2424)
* cleanup: eslint changes

* fix: don't use ai aggregators if we have the model ourselves
2026-02-05 16:30:45 -08:00
Daniel Salazar 5fdfae6087 fix: usage limited error handling (#2423) 2026-02-05 15:15:27 -08:00
Reynaldi Chernando da0907d3c5 Document getAuthToken for web based login (#2418) 2026-02-06 01:59:39 +07:00
Neal Shah 15bd2ec5ac opus 4.6 fix billing (#2422) 2026-02-05 10:21:09 -08:00
Neal Shah e3db664690 Ns/opus 4.6 (#2420)
* add opus 4.6

* remove log from webserver service
2026-02-05 10:08:52 -08:00
Neal Shah f8f134412f web-cdn-test (#2414)
* web-cdn-test

* fix tests
2026-02-04 16:29:27 -08:00
Daniel Salazar e9d0bdf19b feat: add alerting for usage abuse (#2413) 2026-02-04 13:08:18 -08:00
KernelDeimos b8bdc16a03 fix: move readdir-subdomains to ESM
This also causes the filename to have the extension `.mjs` instead of
`.js`, as well as an await added in FilesystemAPIService. Luckily
lifecycle events are async so this didn't cause any problems.

I add this change somewhat reluctantly because this _should_ be a
non-functional change. Technically adding the `await` in
FilesystemAPIService makes it possible (albiet incredibly unlikely) for
some subtle bug or change in behavior to be introduced.
2026-02-04 14:13:43 -05:00
KernelDeimos acb5fa512c clean: log removal and formatting changes 2026-02-04 14:13:43 -05:00
KernelDeimos 13fc737ca0 clean: remove debug logs added to /readdir-subdomains 2026-02-04 14:13:43 -05:00
KernelDeimos 1cda9b7ba8 dev: implement GUI behavior to fetch subdomains later
This change makes GUI invoke readdir without fetching subdomains, and
then fetch subdomains after. This allows displaying the directory items
sooner and then later populating the icons with glyphs to indicate if
there is an associated subdomain.

This was AI-assisted with manual modifications and bug fixes as
necessary.
2026-02-04 14:13:43 -05:00
KernelDeimos 0a694154b1 dev: add /readdir-subdomains endpoint
This endpoint can be called to get subdomain information after
performing a readdir without fetching subdomains.

This was AI-assisted with modifications and bug fixes as necessary.
2026-02-04 14:13:43 -05:00
KernelDeimos d94e3f45ac dev: add readdirSubdomains 2026-02-04 14:13:43 -05:00
KernelDeimos a4088023a3 dev: add parameter to exclude fetching subdomains
This parameter will allow readdir requests to not include subdomain
fetching, which will allow for the later effort of fetching subdomains
for directory listings in the gui with a separate request.
2026-02-04 14:13:43 -05:00
Daniel Salazar eead0fdfa9 fix: redis cache for user (#2409) 2026-02-03 17:47:43 -08:00
KernelDeimos 5433dde6d7 dev(extensions): [+] dev-socket
This extensions brings back the dev-socket functionality, which is
really important when testing things like broadcast, alarms, events, etc
; it saves a lot of time if you can invoke a command directly to the
backend.

This is an optional extension that will not be included in production
deployments. This is for development purposes only.
2026-02-03 19:39:07 -05:00
KernelDeimos de7fbced6b log: add debug logs for BroadcastService
These will be more important now that we're changing the transport for
broadcast messages between instances from websockets to webhooks.
2026-02-03 19:39:07 -05:00
KernelDeimos 3a7314d119 dev(backend): add send support for webhook broadcast
This still needs to be tested. I was going to test this using the `test`
command registered by BroadcastService that exists for this purpose but
`dev.sock` doesn't seem to be working anymore.

Why wasn't `dev.sock` working? Well... we deleted all the code that
makes it work. Why did we delete it? That question isn't a setup for my
next statement; I genuinely do not know. The whole point of dev.sock was
so we could remove the dev console but still maintain support for this
commandline interface that's absolutely needed for testing things that
aren't accesible directly from Puter's GUI.
2026-02-03 19:39:07 -05:00
KernelDeimos a40ec79d66 dev(tools): script to manually test broadcast webhooks
This tool makes it possible to manually test webhook support in
BroadcastService without running multiple Puter instances. This helps to
verify the functionality without setting up multiple Puter peers
locally.
2026-02-03 19:39:07 -05:00
KernelDeimos 47432853c4 dev(backend): add broadcast webhook endpoint
This commit adds the "receive" side of webhook support for
BroadcastService, which will eventually make broadcasting stateless and
not requiring of persistent connections.

Some specific considerations taken into account include:
- incremental nonce to prevent replay attacks
- request timestamp to prevent nonce-reuse after restarting
- HMAC signature to ensure authorized peer

Known limitations:
- if instances run indefinitely, eventually the nonce value would wrap
  around to zero and broadcasts would stop working. It is assumed that
  9 quintillion requests in the lifetime of an instance is reasonably
  impossible.
2026-02-03 19:39:07 -05:00
Daniel Salazar e938d5183a fix: limit open router expensive models for now (#2407)
* fix: limit open router expensive models for now

* fix: import extension
2026-02-03 14:43:15 -08:00
Neal Shah 665aee735b dav.puter.com CORS headers (#2406)
* webdav cors stuff

* if OPTIONS request just let it through
2026-02-03 14:13:42 -08:00
KernelDeimos cbde123aa1 fix(backend): undo part of 35461a0
It turns out this part of `35461a0` was not necessary to fix this issue,
and the code is still more correct if it falls true when the token's
authorizor has a permission granted.
2026-02-03 15:46:30 -05:00
KernelDeimos 8cd0a7f76b dev(backend): clear cache when revoking tokens 2026-02-03 15:46:30 -05:00
KernelDeimos 5fd1e9b6a6 dev(puter.js): add revokeReadURL 2026-02-03 15:46:30 -05:00
KernelDeimos 3ffe8eaf30 dev(backend): add revoke_access_token endpoint 2026-02-03 15:46:30 -05:00
Daniel Salazar 0234e34b46 Reapply: reverted redis migration changes (#2403) 2026-02-03 11:25:28 -08:00
Daniel Salazar baceb05b48 Revert "feat: replace serializible caches with redis instead of kvjs 🚀 (#2381)"
This reverts commit 7a47047c0d.
2026-02-03 12:43:00 -05:00
Daniel Salazar a4b90083e0 Revert "fix: missing redis changes (#2401)"
This reverts commit 07a389798d.
2026-02-03 12:43:00 -05:00
Daniel Salazar 07a389798d fix: missing redis changes (#2401) 2026-02-03 02:55:44 -08:00
Daniel Salazar 7a47047c0d feat: replace serializible caches with redis instead of kvjs 🚀 (#2381)
* wip: redis move

* fix: redis in extensions

* fix: bad isEMpty assignment

* fix: bad redis client config

* wip

* fix: redis keys cache

* fix: redis batch delete

* fix: change bulk cache times to allow for more instaces

* fix: broken tests
2026-02-03 02:18:31 -08:00
KernelDeimos 5250671b01 fix: range headers in file.js
Range header support was mostly incorrect, which brought to surface
undefined behavior in OnlyOffice which resulted in a request hanging.
This was the cause of the `pdf-editor` app hanging for a while when
opening it with a new file.
2026-02-02 20:08:02 -05:00
Daniel Salazar e2e4794bbc fix: alerting for metering (#2399) 2026-02-02 15:38:45 -08:00
Neal Shah fa76c21300 WebDAV post migration fixes (#2398) 2026-02-02 11:48:16 -08:00
jelveh 7aedeae991 Pass redirect_url to UIWindowSessionList 2026-02-02 09:24:21 -08:00
Neal Shah bf233c8fe0 Add X-EXPECTED-ENTITY-LENGTH for HTTP/2 connections on webdav for predictive file length (#2396) 2026-02-02 07:52:56 -08:00
Neal Shah 3d34b36159 Add more coersions to responses toolcalling support (#2395) 2026-02-02 07:45:56 -08:00
jelveh 6bd64808df Add redirect_url handling and adjust auth flow
Set and propagate a redirect_url for auth flows and use it when navigating after login/signup to avoid leaking sensitive data.
2026-02-02 00:16:35 -08:00
Neal Shah 7cce0705d3 Add back worker redeploy notification (#2394) 2026-02-01 21:57:23 -08:00
Daniel Salazar afbb76f95f fix: ai metering (#2393)
* fix: expose getUserService in extension typings

* fix: ai metering
2026-02-01 18:14:14 -08:00
Nariman Jelveh b15b466d36 Update TabAccount.js 2026-02-01 17:48:57 -08:00
Neal Shah 5216cccbce More Anthropic tool calling coercions (#2392) 2026-02-01 17:29:22 -08:00
Neal Shah 9e9a7b4dcf Fix tests for ChatAPIService (#2391)
* Fix tests for chatapiservice

* Anthropic Claude Provider fixes for toolcalling in OpenAI completions compatible service
2026-02-01 17:04:16 -08:00
Neal Shah 3a0f466ef6 OpenAI chat interface API concept (#2390) 2026-02-01 15:46:23 -08:00
Nariman Jelveh 6fbe83d982 Show cancelled state in auth window
When the user clicks Cancel in the authorization window, the code now disables action buttons and replaces the window body with a cancellation UI (header with icon, title, description and a message). Added corresponding English i18n keys (authorization_cancelled, authorization_cancelled_desc, authorization_cancelled_message) to provide localized text for the new cancelled state.
2026-02-01 15:34:02 -08:00
Neal Shah be290e2d3c fix typo gemini service (#2389) 2026-02-01 14:24:48 -08:00
Nariman Jelveh a92bbc4ec2 Disable dragging for AuthMe window 2026-02-01 13:43:46 -08:00
Nariman Jelveh 1e6521927f Add UIWindowAuthMe authorization dialog
Introduce a new UIWindowAuthMe component that displays a security-focused consent dialog for redirecting to third-party URLs with the user's auth token. Adds related i18n strings and integrates the dialog into initgui, replacing the previous UIAlert confirm flows; when approved (resolves true) the token is appended to the redirect URL and navigation proceeds. Changes: adds src/gui/src/UI/UIWindowAuthMe.js, updates src/gui/src/i18n/translations/en.js, and imports/uses the new dialog in src/gui/src/initgui.js.
2026-02-01 13:26:13 -08:00
Nariman Jelveh 4b8c46efc8 Add UI to view and copy auth token
Introduce a new UIWindowCopyToken component to display the user's auth token with a copy-to-clipboard button and confirmation message. Integrate the token UI into the account dashboard (TabAccount) by adding an auth token card and click handler to open the window. Add corresponding i18n keys (auth_token, token_copied, copy_token_message, copy_token_description) and import the new window in initgui. Also wire the global action 'copyauth' to show the token dialog and adjust session/login flow so the session list/login windows respect the action (avoid auto-reload when showing the token dialog). Minor UI string cleanup to use i18n('approve') directly.
2026-02-01 13:02:25 -08:00
Nariman Jelveh bfea66a1d6 Serve HTML success page on auth callback
Replace the plain text response with a styled HTML confirmation page for the local authentication callback. The handler now sets Content-Type to text/html and returns a responsive, animated "Authentication Successful" page (with checkmark graphic and Puter branding) while preserving the existing token extraction from the callback URL's search params.
2026-02-01 12:34:26 -08:00
Neal Shah 22606f29b2 getAuthToken on node package (#2388) 2026-02-01 12:03:30 -08:00
Nariman Jelveh 97cf80b068 Support authme action from URL query
Read the 'action' value from URL query params and handle a new 'authme' action. When 'authme' is present, prompt the user to approve redirecting to the provided redirectURL; if approved, append the current auth token as a 'token' query parameter and navigate to that URL. The prompt is shown in two places (after auth data is updated and before loading the desktop) to cover different entry flows. Also removed a stray blank line.
2026-02-01 11:51:29 -08:00
Daniel Salazar 114fbff2cd fix: expose getUserService in extension typings (#2385) 2026-01-31 13:19:28 -08:00
Daniel Salazar 7a9302f479 [PUT-487] fix: set max-min on app-user-count queries 🐛 (#2384) 2026-01-31 00:52:53 -08:00
Neal Shah af62835d48 video model costs (#2383) 2026-01-30 12:03:36 -05:00
Neal Shah aa508a74dc puter x-expected-entity-length for site (#2379) 2026-01-30 11:34:32 -05:00
Daniel Salazar e1b52a9828 cleanup: remove informationService in favour of existing helper methods and logic (#2374) 2026-01-29 17:25:28 -08:00
velzieandNeal Shah 1e1de413c5 Add canonical puterId to image provider models (#2322)
* add canonical puterId to image provider models

* return fully qualified puterIds in AIImageGenerationService.list()

* add aliases to openai image models

---------

Co-authored-by: Neal Shah <[email protected]>
2026-01-29 14:47:51 -05:00
Daniel Salazar de14bf7273 fix: match override properly (#2373) 2026-01-28 22:45:11 -08:00
Devansh DubeyandReynaldi Chernando fecd67a196 fix(resume-analyzer): add preprocessing for DOCX and TXT files (#2359)
* Update ai-resume-analyzer.html

* Cleanup comments and update to haiku 4.5

---------

Co-authored-by: Reynaldi Chernando <[email protected]>
2026-01-29 13:38:35 +07:00
Daniel Salazar 5a8e9063ec fix: map again (#2372) 2026-01-28 22:34:45 -08:00
Daniel Salazar 4aa2039956 fix: cost mapping for together ai from openai sdk (#2371) 2026-01-28 22:20:59 -08:00
Daniel Salazar 40f805f64b [PUT-475] fix togetherai chat being broken + deprioritize them 🐛 (#2369) 2026-01-28 22:04:06 -08:00
Daniel Salazar 6daac664c6 fix: remove rate limit await on writes (#2368)
* otel: logs and spans for dynamo db

* fix: imports

* fix: add more logging

* fix: import paths

* fix: console log

* fix: better logs

* fix: logging

* fix: remove rate limit await on writes

* cleanup, remove uneeded spans in ddb client
2026-01-28 16:13:53 -08:00
KernelDeimos 35461a0345 fix: app-under-user access token ACL
There were a couple issues with ACL where access would be denied to app
tokens within access tokens, caused by:
- incorrect recursion: only `false` was considered when in fact the
  result from the recursive call is appropriate
- files without a known path are incorrectly handled, which can happen
  when iterating over parent directories
2026-01-28 16:00:01 -05:00
Arya DasguptaandReynaldi Chernando 0028b41fe3 docs: add example for streaming with function calling (#2365)
* docs: add example for streaming with function calling

* Minor fix and add example to playground

---------

Co-authored-by: Reynaldi Chernando <[email protected]>
2026-01-28 18:01:28 +07:00
jelveh fc8117df1e add login indicator with animated spinner 2026-01-27 23:39:18 -08:00
Daniel Salazar 89c49902b6 otel: add spans to all kv methods (#2358) 2026-01-27 19:16:04 -08:00
Daniel Salazar 4183d5de06 [PUT-466] fix: count request costs in openrouter models with request cost present (#2356) 2026-01-27 18:32:43 -08:00
Daniel Salazar cc5285f88a fix: only rate limit login when failed (#2355) 2026-01-27 18:24:05 -08:00
KernelDeimos e7443338fb fix: more reliable 404 responses for .api endpoint
This fix avoids some situations where a non-existing route hangs instead
of responding with 404.
2026-01-27 15:46:28 -05:00
KernelDeimos a8dc62ef80 fix: header resend issue with catch-all handler
WebDAVService catches `/*`, which shouldn't be a problem because it is
on the `dav.` subdomain - however, other middlewares were being invoked
before the subdomain check. Thanks to the `'route'` parameter for the
`next` function we can handle subdomain checks in a more reliable way
2026-01-27 15:46:28 -05:00
Lui DuarteandDaniel Salazar bbe6f9dc27 Feat: Add system info (Client + Server metrics) (#2311)
* Add ststem info to user options extensions - Add UIWindowSystemInfo, add ui sections for client and server, add basic getClientinfo function

* Fix typo

* Replace accidentally deleted es.js file

* Refactor client information to be consistant with project standard

* Complete Client information in ststem information window

* Remove console logs

* Add basic api functionality for getting server system information

* Structure return data from system server information endpoint | Add copyright to UIWindowSystemInfo

* Add function to format server system api data | Add loading element to server container while waiting for data | Complete System Information

* fix: disallow non admin for backend + move to extensions

---------

Co-authored-by: Daniel Salazar <[email protected]>
2026-01-27 10:29:02 -08:00
ProgrammerIn-wonderland bbe1242eff Move webdav to dav.puter.com 2026-01-27 20:31:32 +05:30
KernelDeimos 404a5e9050 dev: fix issues with dns lookup, remove fallback
This is the effort remaining to bring back URL parameters to drivers
which support them. This fixes the implementation for DNS resolution
resulting in errors for undefined IP addresses when DNS resolution is
successful.
2026-01-26 15:01:22 -05:00
KernelDeimos 72078d3bc1 wip: try to resolve DNS with cloudflare DNS 2026-01-26 15:01:22 -05:00
KernelDeimos b935006ee7 Revert "fix: disable requests from server in two services"
This reverts commit de77b11954.
2026-01-26 15:01:22 -05:00
Daniel Salazar 66a3af69c9 fix: suggested apps breaking (#2343) 2026-01-26 10:17:48 -08:00
Seril Evanjaline S 70454521ef fix: skip CI tests when only docs are changed (#2335) (#2338) 2026-01-25 00:05:31 +07:00
Daniel Salazar 8bb4dec231 perf: don't fetch b64 icon for apps always, and lru suggestedApps (#2336)
* perf: don't fetch b64 icon for apps always, and lru suggestedApps

* fix: fallback to default file icon if present
2026-01-23 20:57:12 -08:00
Reynaldi Chernando 143cbdce23 Add info about usage data scope for docs (#2334) 2026-01-24 10:18:54 +07:00
Daniel Salazar 2402e49cce fix: log format (#2333) 2026-01-23 13:47:02 -08:00
Daniel Salazar 2287704102 perf: batch readdir suggested apps into single big query (#2332)
* perf: batch readdir suggested apps into single big query

* fix: cleanup fucntions to go through single entry
2026-01-23 12:24:02 -08:00
KernelDeimos de77b11954 fix: disable requests from server in two services 2026-01-23 08:40:00 -05:00
ProgrammerIn-wonderland 5922f36358 fix gemini cost key 2026-01-23 18:45:10 +05:30
ProgrammerIn-wonderland 17e5edd643 Video model details 2026-01-23 16:01:50 +05:30
Nariman Jelveh 894bb939b1 Add aspect ratio resize options to window menu
Introduced a resize_window_to_aspect_ratio function and added 'Advanced' menu items to allow resizing the window to 16:9, 4:3, or 9:16 aspect ratios. This enhances user control over window dimensions for specific use cases.
2026-01-22 15:59:07 -08:00
Daniel Salazar d42f9b0e10 fix: disable bad token checks? (#2326) 2026-01-22 15:38:26 -08:00
Daniel Salazar d3a27be88e fix: dedup get_apps app requests (#2325)
* fix: dedup get_apps app requests

* fix: WSPushService errors

* fix: error messages
2026-01-22 11:07:42 -08:00
ProgrammerIn-wonderland 2a8ec97c09 add safety checks for worker updates 2026-01-22 18:53:59 +05:30
Daniel Salazar e9631b5a04 perf: dedup and cache get_apps in puter gui, also add more app batching in backend (#2319)
* perf: dedup and cache get_apps in puter gui

* feat: batch more apps
2026-01-21 23:31:49 -08:00
Daniel Salazar fbe87369f5 fix: add back test (#2317) 2026-01-21 21:37:36 -08:00
KernelDeimos b98f1be5fb Revert "feat(data-access): move puter.js read to app driver"
This reverts commit 2139551abf.

It looks like this breaks dev-center because the file associations
aren't properly sent. I will need to investigate this.
2026-01-22 00:35:56 -05:00
jelveh 70f58b08eb Update label from 'Publish Web Pages' to 'Hosting API' 2026-01-21 20:50:52 -08:00
KernelDeimos 20b5662704 dev(backend): make data-access an essential module 2026-01-21 23:00:45 -05:00
KernelDeimos 2139551abf feat(data-access): move puter.js read to app driver
This is the first functional migration from ths `es:app` driver to the
`app` driver. Any call to `puter.apps.get` will go through `es:app`
after this change.
2026-01-21 23:00:45 -05:00
jelveh 0b55d19f89 Add initial Puter.js documentation site 2026-01-21 19:39:01 -08:00
Daniel Salazar 6e9e5371c8 fix: batch fetch get apps for launch apps and recommended apps (#2315)
* wip: batch fetch get apps for launch apps and recommended apps

* fix: boot issues

* fix: bad refresh app cache

* tmp: remove test for now since can't mock db call
2026-01-21 18:17:15 -08:00
KernelDeimos 17b5ff4cb5 Revert "feat(data-access): move puter.js read to app driver"
This reverts commit f3100eca59.
2026-01-21 12:33:25 -05:00
KernelDeimos f3100eca59 feat(data-access): move puter.js read to app driver
This is the first functional migration from ths `es:app` driver to the
`app` driver. Any call to `puter.apps.get` will go through `es:app`
after this change.
2026-01-21 12:25:59 -05:00
Daniel Salazar 929fc6956e [PUT-456] fix: delete apps from marketplace when deleting anywhere else (#2310) 2026-01-20 23:42:24 -08:00
Daniel Salazar 4e6d9c9f33 perf: improve tel + decrease logs (#2309)
* perfmon: lower healthcheck status cache, add kv health signal

* perf: improve tel + decrease logs

* logs
2026-01-20 20:21:08 -08:00
KernelDeimos bf84ff4b10 config(perms): allow apps service to all users 2026-01-20 16:28:22 -05:00
KernelDeimos 3fe304ebac dev(data-access): re-add protected app support
Adds support for the "protected apps" feature to the new `apps` driver
that will replace the existing `es:apps` driver.
2026-01-20 16:28:22 -05:00
KernelDeimos d08a828226 test(data-access): avoid SQL error in app:es
It turned out this error was not coming from `app`, but it was coming
from `app:es` due to a pre-existing issue. Since these tests are meant
to compare the resulting behavior and `app` can handle this case while
`app:es` cannot, the best course of action is to avoid invoking the
issue and only test the intended behavior.
2026-01-20 16:28:22 -05:00
KernelDeimos 768a35e9b5 fix(data-access): read response regression
In `es:app`, attempting to read an app that doesn't exist results in an
error being thrown. This commit updates `app` to have the same behavior.
2026-01-20 16:28:22 -05:00
KernelDeimos 5b33beb6a1 test(data-access): check for error, not undefined
Check for error when an app doesn't exist, because this is the behavior
`es:app` already exhibits.
2026-01-20 16:28:22 -05:00
KernelDeimos 519ad336ba test: differences between es:app and app
Add tests for all the CRUD operations and related edge cases in `app` to
ensure the behavior is the same as `es:app`. These tests detect 3 issues
across 4 failing tests.
2026-01-20 16:28:22 -05:00
KernelDeimos bd416b0190 test: ensure kv global is always available
This is comitted separately from the commit for AppService.comp.test.js
that will follow because it interacts with all other test cases. It did
not cause any issue based on what I observed, but I'm still wrapping it
in a separate commit in case we need to revert or change it later.
2026-01-20 16:28:22 -05:00
KernelDeimos 503c1a4bb8 test: refactor AppService comparison test 2026-01-20 16:28:22 -05:00
KernelDeimos 1c438107aa test(data-access): verify and fix database state compare
An "anti-test" (test that should fail) was created to verify that a test
fails when apps are different. This revealed a problem in the original
logic of comparing the database state (UUIDs don't need to be, and will
not be, identical; they need to be excluded from comparison). This
commit contains the new test and fixes the existing test case, which was
passing because this problem caused a false-negative.
2026-01-20 16:28:22 -05:00
KernelDeimos b17486b1b4 fix(backend): fix context dual-instance problem
The file `context.js` causes problems in unit tests because vitest does
not play nice with CJS, especially when both CJS and ESM are in use such
as in our repository.

Given that it is not feasible to solve the underlying interoperability
issue, I have elected to make `context.js` a singleton in `Symbol.for`.
This worked very well with `helpers.js`.
2026-01-20 16:28:22 -05:00
KernelDeimos be8b5ef70a fix(backend): singleton in helpers for testability
The `helpers.js` file has two instances when testing with vitest.
Usually this can be solved by creating an "import bridge" file - another
CJS file that imports the desired CJS file and re-exports it so that the
`require` mechanism for caching modules is used instead of the `import`
mechanism for caching modules. Unfortunately in my most recent test
cases this does not work. I do not know why this does not work. However,
without doing a deep-dive into the internals of vitest I can at least
see that the only state in helpers is for providing `services` as a
pseudo-global, so a hack with `Symbol.for` solves everything.
2026-01-20 16:28:22 -05:00
KernelDeimos 7531a94687 clean(data-access): remove bad fixes and simplify 2026-01-20 16:28:22 -05:00
KernelDeimos 01b50b66f2 test(data-access): regression test for es:app vs app
This test was very difficult to get working because of issues
initializing the context under vitest. After a lot of effort and trying
to narrow down the issue in many ways that didn't work, I eventually
found that manually setting the storage and calling run on the
AsyncLocalStorage object got it working. I'm currently unsure if this is
specific to vitest or not. We don't seem to do this in Puter's kernel
but everything works fine in the typical runtime. Maybe this is
side-effect of otel's own use of AsyncLocalStorage.
2026-01-20 16:28:22 -05:00
KernelDeimos 3a268e6f16 test(data-access): add tests for delete method 2026-01-20 16:28:22 -05:00
KernelDeimos 3fab0ca6a2 dev(data-access): implement .delete() method 2026-01-20 16:28:22 -05:00
KernelDeimos 1e3b704ea8 fix(data-access): add guard for app actors 2026-01-20 16:28:22 -05:00
KernelDeimos 25d23d687c dev(data-access): add simplified upsert method
This is a naive implementation of the `.upsert()` method that simply
calls `.create()` or `.update()` depending on whether or not the app
already exists.
2026-01-20 16:28:22 -05:00
KernelDeimos c47c52a298 test(data-access): test .create() and .update()
Primarily these tests were AI generated an then checked over for sanity.
These tests are good unit tests to avoid regressions as a result of
changes to this code but are not sufficient to test for regressions
introduced by this new implementation that will replace `es:app`.
2026-01-20 16:28:22 -05:00
KernelDeimos bec39e578f dev(data-access): implement .create() method 2026-01-20 16:28:22 -05:00
KernelDeimos fc03fafab9 dev(data-access): misc improvements to .update()
DRY some redundant code and use guard clauses where applicable.
2026-01-20 16:28:22 -05:00
KernelDeimos 464241e743 dev(data-access): implement .update() method 2026-01-20 16:28:22 -05:00
KernelDeimos 7c5639005b test(data-access): app .select() and .read()
Fixes are also included for a couple issues that were found:
- `null` being included in extensions list
- property called `user_owner` instead of `owner`
2026-01-20 16:28:22 -05:00
KernelDeimos ec0b333ad7 dev(data-access): implement .read() method
Most of this implementation matched `.select()` which saved time. The
common behavior can be factored out, but since the purpose of this
refactor is to flatten everything as much as possible I'm going to leave
the duplicated code and make a note to do this later.

The challenging part was `#build_complex_id_where()`, which is the
equivalent to the `fetch_based_on_complex_id_()` method in
EntityStoreService. This allows `uid: app-UUID-OF-APP` and `id: { name:
'editor' }` to both work.
2026-01-20 16:28:22 -05:00
KernelDeimos 2bb036616f dev(data-access): app select icon_size` param
Adds the `icon_size` parameter to the `.select()` method on the new
non-ES/OM implementation.

When adding the necessary `params` parameter to the `.select()`
method, it was noticed that the `predicate` parameter did not have a
default value - potentially causing a regression; a default value was
set for both `params` and `predicate`.
2026-01-20 16:28:22 -05:00
KernelDeimos 7cd7be7af5 dev(data-access): add filetype associations 2026-01-20 16:28:22 -05:00
KernelDeimos 3839afd805 dev(data-access): add app owner relationship
It turns out self-referencing tables add some nuances to what is and
what isn't ambiguous in SQL queries, so getting this right took a little
longer than expected. Following the entire chain doesn't seem to be
possible so a compromise is made by only traversing one level of depth.
(you can the uid of the owner of the app, but not the uid of the owner
app's own owner)
2026-01-20 16:28:22 -05:00
KernelDeimos 1a8130b8fd dev(data-access): add owner object to app select 2026-01-20 16:28:22 -05:00
KernelDeimos 6592f87882 dev(data-access): coerce boolean values from db
Adds `as_bool` utility function for boolean values from MySQL and
Sqlite, based on the previous implementatoin for ES/OM.
2026-01-20 16:28:22 -05:00
KernelDeimos a85d2b7098 fix(perms): fix revokePermission for "flat" impl
The "flat" implementation of permissions was broken because
revokePermission tried to delete entries by calling `.set` with an
option called "delete". I'm not sure if this has ever existed on the
puter-kvstore interface, so it's weird that it was called like that.
2026-01-20 16:07:10 -05:00
KernelDeimos 79fda7b8c2 fix(backend): update protected app perm implicator
The permission implicator for protected apps was written before changes
to the permission system that affect the conditions under which a user
is allowed to grant and revoke permissions; specifically this is the
`manage:` set of permissions, which now needs to be granted to the owner
of a protected app.

Additionally, the "level" component of the permission is ignored because
the owner of a protected all is implied to have all the permissions
pertaining to that protected app.
2026-01-20 16:07:10 -05:00
jelveh 6805c90252 Remove unnecessary logging in get_app function
Eliminated redundant cache and info log statements from the get_app helper to reduce log noise and improve code clarity.
2026-01-20 11:45:06 -08:00
Neal Shah 13578e81e6 gemini 2.5/3 no preview (#2306) 2026-01-20 11:43:01 +05:30
KernelDeimos 3da318129c fix(puter.js): check for uuid before relative path 2026-01-19 19:55:04 -05:00
Daniel Salazar 35797536ba feat: usage endpoints, allow appName (#2303) 2026-01-19 15:15:06 -08:00
KernelDeimos c715057065 feat(puter.js): make home directory default cwd
Make the home directory (AKA "~") the default CWD for puter.js, making
relative paths work in environments other than app environments (i.e.
gui or worker environments).
2026-01-19 13:29:28 -05:00
Neal Shah e95aa81e00 OpenAI web_search support (#2299) 2026-01-19 00:01:47 +05:30
Daniel Salazar f9888e6705 feat: paginated list (#2296)
* feat: paginated list

* fix: kv list
2026-01-16 16:16:47 -08:00
Neal Shah bd57f7a221 Add GPT 5.2 Codex (#2293) 2026-01-16 22:52:28 +05:30
Nariman Jelveh 6b45667220 Revert "feat(gui): add keyboard shortcuts guide dialog (#2278)" (#2288)
This reverts commit 340d932ae1.
2026-01-15 15:35:13 -08:00
Rahul aswal 340d932ae1 feat(gui): add keyboard shortcuts guide dialog (#2278)
* feat(gui): add keyboard shortcuts guide dialog

* feat(gui): add dedicated keyboard shortcuts dialog
2026-01-15 15:34:40 -08:00
KernelDeimos 21d02e7dae fix(backend): status code check and handle HLMkdir
Fix the status code handling in hl_mkdir and handling to the HLMkdir
operation itself. This effectively fixes #1603.

Resolves #1603
2026-01-15 18:32:08 -05:00
KernelDeimos 452d1de92e refactor: MkTree and QuickMkdir parent dir check
Extract common behavior from MkTree and QuickMkdir to a separate method
which is user by both operations.
2026-01-15 18:32:08 -05:00
KernelDeimos f125830fba fix(backend): handle ll_mkdir exists race condition
Handle a race condition affecting mkdir operations with the
`createMissingParents` option enabled. When creating a directory because
this option was specified, errors because the directory already exists
are likely due to a race condition and should not be propagated to the
client but instead handled by using the directory that's already there.
2026-01-15 18:32:08 -05:00
KernelDeimos f9a3e86fe9 fix: normalize file object in /writeFile 2026-01-14 18:21:46 -05:00
KernelDeimos 5e4dfbc963 fix: attempt coercion to fix vscode corruption 2026-01-14 15:05:17 -05:00
sn-o-w c367d00ce4 Revise README.ro.md for updates and corrections (#2280) 2026-01-14 10:03:50 -08:00
Daniel Salazar 0b9863814c fix: shard app usages properly by user (#2279) 2026-01-13 20:32:46 -08:00
Sauhbagya Prasad 529a3d026b Improve UI for App Deployment Options in Dev Center (#2266)
* Improve UI for App Deployment Options in Dev Center

- Added CSS styling for deployment option cards
- Implemented active state switching between deployment methods with guardrails
- Abstracted saveEditApp for reuse across Deploy and Edit tabs
- Added error handling for invalid URLs in the Deploy tab

* updated mode's description and fixed function's error

* updated by npm install

* Revert "updated by npm install"

This reverts commit 82cd962f62.

* in url mode the deploy button is enabled by default
2026-01-13 10:54:08 -08:00
jelveh 07f3387363 Add CAPTCHA required message to English translations
Introduced a new translation key 'captcha_required' with the message 'Please complete the CAPTCHA verification' in the English locale file.
2026-01-13 10:19:31 -08:00
Daniel Salazar cdb422659c feat: more extension controller decorators (#2272) 2026-01-13 00:32:03 -08:00
Neal Shah f4c37d4cf4 prevent signout from workers (#2276) 2026-01-13 13:18:06 +05:30
Neal Shah edcfe63131 no_extra_params in together service to prevent defaults from being specified (#2275) 2026-01-13 13:08:30 +05:30
Neal Shah 989ee58f05 Retry for openrouter on max_tokens overage (#2274) 2026-01-13 12:30:05 +05:30
dependabot[bot] 237a96c706 chore(deps): bump qs and body-parser
Bumps [qs](https://github.com/ljharb/qs) and [body-parser](https://github.com/expressjs/body-parser). These dependencies needed to be updated together.

Updates `qs` from 6.13.0 to 6.14.1
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.13.0...v6.14.1)

Updates `body-parser` from 1.20.3 to 1.20.4
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.3...1.20.4)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.1
  dependency-type: indirect
- dependency-name: body-parser
  dependency-version: 1.20.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-01-12 19:43:04 -05:00
Neal Shah bb6b40be7b Support getDeveloperProfile with no arguments (#2270) 2026-01-12 16:06:45 +05:30
Neal Shah 8e6d3d8d9f Make puter boot on windows (#2269) 2026-01-12 15:26:53 +05:30
Neal Shah 04901a7cd1 provide safety_identifier in addition to user (#2268) 2026-01-12 13:24:30 +05:30
Talasu_DeepakandNariman Jelveh 44b2a0bd9a Add README for Puter localization and setup (#2043)
* Add README for Puter localization and setup

This README provides an overview of Puter, including installation instructions, system requirements, and support information.

* Update README.od.md

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2026-01-11 16:41:50 -08:00
Nariman Jelveh c051a6caa6 Add automatic thumbnail generation to file uploads in GUI (#2261)
Introduces thumbnail generation for image files during upload operations. Thumbnails are generated client-side if enabled via the `generateThumbnails` option, and are included in file metadata and operation payloads. This enhances file previews and user experience in the file system.
2026-01-11 09:38:33 -08:00
KernelDeimos 8e418a11a1 fix(backend): race condition in hashing_stream
Based on a stack trace from production and manual static analysis, it
appears that a race condition occurs within hashing_stream
intermittently. The conditions that cause this issue might be heavy
backpressure. The source stream emits the 'end' event before
stream.Transform's transform callback has had a chance to process all of
the chunks, which results in an incorrect order in calling methods on
the `typeof crypto.createHash()` object.

It would appear that `source.pipe(stream)` is not able to propagate
errors from Transform because the chain was simply broken and upload
would get stuck (if this was indeed the cause of upload getting stuck,
which seems likely but not conclusive)
2026-01-09 20:02:50 -05:00
Daniel Salazar d64bd21a99 feat: give referrals (#2262) 2026-01-09 16:48:49 -08:00
Neal Shah 5aa25bae5f Model singularity (#2255)
* model naming singularity

* model singularity pt2

* Remove incorrect assumption check which breaks openrouter:openai/gpt-5-image
2026-01-09 16:18:54 -08:00
Daniel Salazar 13f7d7b502 fix: husky (#2260) 2026-01-09 15:41:37 -08:00
Daniel Salazar f88ca5d4bd feat: kv.remove feature to remove nested elements or list indices (#2258)
* chore: update npm version

* feat: kv.remove feature to remove nested elements or list indices

* chore: update npm version
2026-01-09 15:10:02 -08:00
KernelDeimos 353f163f46 chore(backend): upgrade nodemailer 2026-01-09 17:54:38 -05:00
KernelDeimos e07d1ae4af dev(backend): limit thumbnail size from client
There was a configuration parameter for this but it isn't being used and
has the incorrect name in `config.js`. I decided to keep the old check
here anyway because having support to configure a lower size limit could
come in handy.

I set the limit to 2MiB through the following logic:
- largest icon size I've ever heard of is 512px
- 512*512*4 (4 color channels) is 1048576 (1MiB)
- increase to next MiB just to be safe
2026-01-09 16:36:47 -05:00
KernelDeimos b5ae9181f1 dev(puterjs): add thumbnail parameter to puter.js 2026-01-09 16:36:47 -05:00
KernelDeimos 645d60a84b dev(filesystem): add thumbnail parameter 2026-01-09 16:36:47 -05:00
Daniel Salazar 23d7b751b9 feat: new kvstore operatios for more granular updates 🚀 (#2254) 2026-01-09 12:20:54 -08:00
dependabot[bot] 53133e2623 chore(deps): bump qs and express
Bumps [qs](https://github.com/ljharb/qs) to 6.14.1 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `qs` from 6.13.0 to 6.14.1
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.13.0...v6.14.1)

Updates `express` from 4.21.2 to 4.22.1
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/v4.22.1/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.21.2...v4.22.1)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.1
  dependency-type: indirect
- dependency-name: express
  dependency-version: 4.22.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-01-09 14:12:33 -05:00
Nariman Jelveh 092d8fe632 Revert "doc: add README.md for GUI directory (#2021)" (#2253)
This reverts commit 8b324a8950.
2026-01-08 10:06:30 -08:00
SuryaGanesh284 8b324a8950 doc: add README.md for GUI directory (#2021)
Added README.md for the Puter GUI with details on structure, development, contributing, and resources.
2026-01-08 10:06:04 -08:00
Nariman Jelveh a0c2ac4d07 Add 'Open in AI' option to item context menus (#1974)
* Add 'Open in AI' option to item context menus

* Add new AI-related English translations
2026-01-07 22:49:31 -08:00
jelveh dade7a6cba Add preview images upload for app listings 2026-01-07 17:32:24 -08:00
Nariman Jelveh 3f934c5f16 Remove ComplainAboutVersionsService and related code (#2179)
Deleted the ComplainAboutVersionsService and its registration in SelfHostedModule, as well as cleaned up related service mappings in DriverService. This streamlines the codebase by removing the version complaint feature.
2026-01-07 16:55:55 -08:00
Eswar Venkata Ram Charan Seeram 77fc14b743 i18n(de): polish German translations & fix typos (Fixes #1532) (#2009)
* i18n(nn): fix typos & finalize translation cleanup

* i18n(de): polish German translations & fix typos (Fixes #1532)
2026-01-07 15:30:06 -08:00
dependabot[bot] 05a2c69d43 chore(deps): bump jws from 4.0.0 to 4.0.1
Bumps [jws](https://github.com/brianloveswords/node-jws) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/brianloveswords/node-jws/releases)
- [Changelog](https://github.com/auth0/node-jws/blob/master/CHANGELOG.md)
- [Commits](https://github.com/brianloveswords/node-jws/compare/v4.0.0...v4.0.1)

---
updated-dependencies:
- dependency-name: jws
  dependency-version: 4.0.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-01-07 16:23:04 -05:00
Daniel Salazar b1e7bc5fca feat: method for updating users metering directly (#2252)
* chore: cleanup ts extensions controller

* feat: method for updating users metering directly
2026-01-07 12:53:00 -08:00
Het Savani e20daf276b Fix/explorer cursor grab on click (#2176)
* Fix sidebar cursor grabbing on click

* Final commit
2026-01-07 10:33:04 -08:00
Daniel Salazar 754e820403 fix: openrouter costs always being 0 (#2250) 2026-01-07 09:11:44 -08:00
Daniel Salazar 7f76bff3f3 fix: more strict metering limits, disable ambigious openrouter one (#2249) 2026-01-06 23:57:03 -08:00
Daniel Salazar 2ef9aa3fb1 fix: add catch all for minimum usage amounts (#2248)
* ts: extension type updates

* fix: add catch all for minimum usage amounts
2026-01-06 23:09:29 -08:00
Reynaldi Chernando 2c84cd4cfa Remove flux schnell-free (#2243) 2026-01-06 22:39:01 -08:00
Daniel Salazar 93afbe4dd9 fix: ts extensions (#2247) 2026-01-06 18:03:38 -08:00
Daniel Salazar 1642431615 lint: hook for precommit (#2245) 2026-01-06 16:45:05 -08:00
Om vataliya 677426cbe7 fix: Enable godmode for dev-center to open worker files in editor (#2224)
Fixes #2218

The DEV Center was unable to open worker files in the text editor because
it lacked godmode permissions. The file_paths parameter in puter.ui.launchApp
requires the calling app to have godmode=1 in order to work.

Changes:
- Added database migration 0044_dev-center-godmode.sql to set godmode=1
  for the dev-center app (uid: app-0b37f054-07d4-4627-8765-11bd23e889d4)
- Updated SqliteDatabaseAccessService.js to include the new migration

This allows DEV Center to successfully pass file paths when launching the
editor app, fixing the issue where clicking on a worker file path resulted
in an empty editor window.
2026-01-06 16:19:29 -08:00
KernelDeimos a5bbc7e95b fix: issues creating shortcuts
There were two different things here:
- invalid requests have an ambiguous error message
- migration of PuterFSProvider to an extension caused an issue
  for shortcut creation in some flows

Closes #2200
2026-01-06 19:09:48 -05:00
KernelDeimos 0ecae43d2f clean: remove dead code in hl_mkdir
Remove a method in hl_mkdir which was determined to not be referred to
anywhere. hl_mkdir was re-tested to verify that this did not cause a
regression.
2026-01-06 19:09:48 -05:00
KernelDeimos d091b20b6a dev: improve error message for dest_does_not_exist
This error message was ambiguous for mkdir operations where a shortcut
target is specified for hl_mkdir. The message looks like it's referring
to the shortcut target but really it is referring to the parent
directory for the new directory that will be created.
2026-01-06 19:09:48 -05:00
KernelDeimos 630f76d8b4 test: add automated test for subdomain redirect
This merits a test because changes to how `puter.site` works in the
future could easily break this redirection, and maintaining this
redirect is important to us.
2026-01-06 18:31:39 -05:00
KernelDeimos 4d60168d2f feat!: implement redirect for hosting base domain
Redirect the subdomains `""` and `"www"` to a configurable URL, which is
by default `https://developer.puter.com/static-hosting/`.

This is potentially a breaking change for local instances that have a
subdomain called "www". Users hosting their own Puter may want to be
aware of this.

Closes #2214
2026-01-06 18:31:39 -05:00
Reynaldi Chernando 678363b0ba Init fix FS types (#2201) 2026-01-06 10:18:01 -08:00
jelveh 7ef57d5052 Increase PENDING_QUERY_TTL to 10 seconds 2026-01-05 12:50:34 -08:00
jelveh fa402f9785 Add gpt-5.1-codex-max support 2026-01-03 21:28:09 -08:00
jelveh f9925c0337 Increase PENDING_QUERY_TTL to 5 seconds 2026-01-03 20:02:08 -08:00
jelveh 987effc5ec Revert "Remove debug logs and improve query coalescing timeout (#2241)"
This reverts commit 71bee556f6.
2026-01-03 19:34:30 -08:00
Nariman Jelveh 71bee556f6 Remove debug logs and improve query coalescing timeout (#2241)
Removed unnecessary console.log statements from PuterFSProvider.js and WebServerService.js. Increased PENDING_QUERY_TTL to 3 seconds and added a timeout mechanism for coalesced queries in get_app to prevent indefinite waiting.
2026-01-03 19:28:40 -08:00
Soumyabrata Bhattacharjee 363b798026 Update first-run-issues.md with dnf5 instructions (#2239)
* Update first-run-issues.md with dnf5 instructions

Add installation instructions for Development Tools on dnf5.

* Fixing the command to install it on Fedora 41+
2026-01-03 18:35:59 -08:00
Neal Shah f8997b7d75 Responses API support for OpenAI (#2226)
* Responses API support for OpenAI

* Fix toolcalling in Responses API
2026-01-01 16:25:57 +05:30
Daniel Salazar aafdec9b81 perf: make app entries more scalable, avoid writing global entries since its just puter itself and isn't relevant (#2233) 2025-12-30 19:26:46 -08:00
jelveh 58c8ec7f43 Increase auth popup height to 600px 2025-12-29 23:24:09 -08:00
jelveh 98d0c25ce8 Adjust auth popup size and style for embedded mode 2025-12-29 23:12:52 -08:00
jelveh 773b82638a Update helpers.js 2025-12-29 22:54:38 -08:00
jelveh 8b1bcfa601 Reduce PENDING_QUERY_TTL to 10 seconds 2025-12-29 22:45:33 -08:00
jelveh d7c56472c5 Add request coalescing to get_app with pending query cache
Introduces a TTL-based pending query cache to the get_app function to prevent duplicate database queries for the same app lookup. This change improves efficiency by coalescing concurrent requests for the same app and ensures only one database query is performed per unique lookup within the TTL window.
2025-12-29 20:37:26 -08:00
Daniel Salazar f3b5e1b03f fix: don't cache nor fetch raw b64 url for app icons (#2230) 2025-12-29 18:09:56 -08:00
Daniel Salazar 174e6130ee fix: cache get_app result with expiry to lessen load on db (#2229)
* fix: cache get_app result with expiry to lessen load on db

* fix: use EX instead
2025-12-29 16:38:57 -08:00
jelveh a4afc41a1c Remove global access route for cloud.js 2025-12-25 17:27:56 -08:00
Daniel Salazar 6cc86ff58b feat: support extension divs headers and tags being inserted to puter homepage load (#2221)
* feat: support extension divs headers and tags being inserted to puter homepage load

* wip: demo div

* fix: extension typing

* fix: extension typing

* feat: hompage gui add on
2025-12-24 13:48:36 -08:00
Reynaldi Chernando a32a16d306 Fix workers types (#2198) 2025-12-23 12:35:25 -08:00
Reynaldi Chernando eb23863b6e Fix apps types (#2197)
* Fix apps types

* Remove get overload
2025-12-23 12:34:58 -08:00
Reynaldi Chernando 99220b5b18 Add optional requestCallbacks options to getUser (#2186) 2025-12-23 12:34:41 -08:00
Daniel Salazar 91e12f6886 fix: don't load bench.js files (#2207)
* fix: autoloader grabbing bench.js files

* fix: errors failing

* fix: extension cache typ

* cache: app icons
2025-12-22 15:52:24 -08:00
KernelDeimos f8bdcf8470 dev: [+] DataAccessModule > AppService > select()
This commit adds the DataAccessModule, which is where replacement
"flatter" implementations for what is currently implemented via
EntityStorage/OM will be developed.

This commit also adds AppService, which is where the `crud-q`
implementor for apps will be implemented.

This commit adds the `select()` implementation for AppService. Currently
it is missing many behaviors for parity with the current ES/OM
implementation including:
- coercion of boolean values
- nested objects and their properties
- `icon_size` parameter support
2025-12-22 17:13:07 -05:00
KernelDeimos 3c1a4cd31a dev: specify 'es:app' in puter.js apps module
The EntityStorage/OM mechanism for data access is being replaced.
Specifying 'es:app' in puter.js calls will allow the ES/OM mechanism and
its replacement to be tested together to check for regressions. When the
replacement is done, we can change 'es:app' to the new service name.
2025-12-22 16:08:35 -05:00
KernelDeimos 7786deefb7 lint: sync Apps.js with linter rules
This is comitted separately because it should not have any functional
changes. Do not skip this in a `git bisect`, but do not revert this when
testing commits for functional changes.
2025-12-22 16:08:35 -05:00
jelveh dc5f61b438 Add screen-wake-lock to iframe allow attribute 2025-12-22 08:32:51 -08:00
jelveh 85877259a6 Update initgui.js 2025-12-20 18:26:02 -08:00
jelveh 0520251249 Remove spinner display in popup during temp user creation
Eliminated the spinner shown when creating a temporary user in popup mode and removed the corresponding hideSpinner call. This streamlines the user experience during account setup.
2025-12-20 18:13:27 -08:00
jelveh abd28d8935 Improve captcha modal styling and messaging 2025-12-20 18:03:00 -08:00
jelveh a058912c1f Style captcha modal for embedded popup context 2025-12-20 17:40:48 -08:00
KernelDeimos c43f3990d9 fix: import issues on run form benchmarks (somehow) 2025-12-19 23:16:17 -05:00
KernelDeimos c737a28c34 Revert "Revert 2206 eric/25 cj0 more benchmarks (#2208)"
This reverts commit 2be2dcaea0.
2025-12-19 23:16:17 -05:00
Daniel Salazar 2be2dcaea0 Revert 2206 eric/25 cj0 more benchmarks (#2208)
* Revert "perf: more benchmarks (2)"

This reverts commit 2c60faf516.

* Revert "perf: more benchmarks"

This reverts commit d3c1fc3103.
2025-12-19 19:57:22 -08:00
Daniel Salazar f360cf17e6 chore: update our required node version (#2204)
* feat: fix broken queue bench

* chore: update our required node version
2025-12-19 19:24:05 -08:00
KernelDeimos 2c60faf516 perf: more benchmarks (2) 2025-12-19 17:02:20 -05:00
KernelDeimos d3c1fc3103 perf: more benchmarks 2025-12-19 17:02:20 -05:00
KernelDeimos 75f3092077 bench: extract and benchmark CircularQueue
- Move CircularQueue class from AntiCSRFService to util directory
- Add benchmark to ensure we don't slow it down
2025-12-19 15:49:38 -05:00
KernelDeimos 49b90bde12 test: add benchmark config and first unit bench
Adds the necessary configuration and the `npm run bench` script, as well
as the first benchmark to verify everything is working. The first
benchmark is permissionUtils. This is important to benchmark because
permission strings are used often and there is some non-trivial logic
such as escaping of full-colon characters. Other overheads like database
access will be much more significant, but it may be useful to know how
much more significant in quantifiable terms.
2025-12-19 15:49:38 -05:00
Daniel Salazar a1689c4ea3 feat: dynamo in oss (#2195)
* feat: dynamo in oss

* fix: service name mismatch for dynamo client

* fix: dynalite boot

* fix: tests
2025-12-18 17:22:49 -08:00
Neal Shah 9aefed5515 add user iteration to all methods which return an App object (#2203) 2025-12-18 17:03:31 -05:00
jelveh af066356cf Show AI button regardless of email confirmation 2025-12-17 20:36:31 -08:00
jelveh 9d307d54ed Adjust font size in UsageLimitDialog message 2025-12-17 20:14:49 -08:00
jelveh 6d5b8e45c0 Remove email confirmation check before launching AI app 2025-12-17 17:25:53 -08:00
KernelDeimos 7228e63c8b perf(es): generate client-safe objects in parallel 2025-12-17 17:12:33 -05:00
KernelDeimos 6edd7debb8 perf: improve parallelization in SQLES
It turns out SQLES was doing some things very sequentially when this was
not necessary. This should make SQLES a lot faster in general.
2025-12-17 17:12:33 -05:00
Reynaldi Chernando 3b646328f7 Add gemini 3 flash to models (#2191) 2025-12-17 14:11:14 -08:00
KernelDeimos eea9d8b27e perf: split implied user-app permissions
It took a long time to figure out why this was happening, but
user-to-app permissions and dev-to-app permissions were being checked in
sequence instead of concurrently. It turns out it was a recursive call
in user-to-app permissions that was blocking. This recursive call was
not actually a dependency of the query for user-to-app permissions; it
was only needed for determining if default user-to-app permissions are
held by the user. This was fixed by simply splitting up these
non-dependent queries into two separate scanners.
2025-12-17 16:17:07 -05:00
KernelDeimos 576900ebcc clean: readdir optimization 2025-12-17 16:17:07 -05:00
Daniel Salazar a6617527db fix: types and tests? (#2193) 2025-12-17 13:11:51 -08:00
Neal Shah d76adcf831 add typescript transpilation for legacy node support ☹️ (#2190)
* add typescript transpilation for legacy node support ☹️

* add typescript as devdep
2025-12-17 02:56:56 -05:00
Reynaldi Chernando 28526eb6b7 Add flux.2 max for together provider (#2189) 2025-12-16 21:34:06 -08:00
Neal Shah 21fb86752a App telemetry user iteration (#2188)
* add app-telemetry interface, and user-iteration feature

* Rid app-user-count.ts from workspace imports

* Remove semicolon at the end of query :(
2025-12-16 19:26:27 -05:00
jelveh 2d5fb8576e Update OpenAiImageGenerationProvider.ts 2025-12-16 16:19:03 -08:00
jelveh 49ab36d8be Add GPT Image 1.5 model and cost mapping 2025-12-16 15:55:33 -08:00
jelveh a3bcc488de Update usage limit dialog to indicate insufficient funds 2025-12-16 11:15:50 -08:00
Nariman Jelveh dc78af3590 Add usage limit dialog and integrate with driverCall_ (#2185) 2025-12-16 10:37:26 -08:00
jelveh 1e864b4bd5 Update UIDashboard.js 2025-12-15 20:50:59 -08:00
Daniel Salazar ed51a042b4 telemetry: config telemetry to run by default (#2184) 2025-12-15 18:49:49 -08:00
jelveh 358b64124e Add extension events to dashboard initialization 2025-12-15 17:43:05 -08:00
KernelDeimos 9bac2cba07 perf: [+] readdirstat_uuid optimized implementation 2025-12-15 20:28:34 -05:00
Reynaldi Chernando dc827f90c4 Fix more puter.js typescript types (#2181)
* Fix networking types

* Fix os types

* Fix UI types

* Remove constructor in util.d.ts

* Fix worker types

* Fix puter.d.ts

* Fix apps types

* Change socket and tlssocket back to psocket and ptlssocket
2025-12-15 19:29:04 -05:00
Reynaldi Chernando 85c548d0d3 Fix speech2speech options (#2133) 2025-12-15 16:11:25 -08:00
jelveh 66cf679aab Delete devlog.md 2025-12-15 13:59:53 -08:00
KernelDeimos 6d36c90032 fix: add missing 'tel' runtime module 2025-12-15 14:35:05 -05:00
jelveh 5ba94092f7 Map 'xai' provider to 'xai-image-generation' 2025-12-14 16:05:50 -08:00
jelveh a030fcd9b8 Add xAI image generation provider integration 2025-12-14 15:46:28 -08:00
Daniel Salazar 54dd60d44b fix: missing video gen ai services in ai module (#2180) 2025-12-14 11:08:52 -08:00
Nariman Jelveh 560307d587 Remove unused putility features (#2168)
* Remove smol utility library and update usage

Deleted the smol utility library from putility, removed its documentation, and refactored code in linux.js to use native string methods instead of smol.split. This simplifies the codebase by eliminating a redundant utility.

* Remove `putility.libs.time` and inline time utilities

* Update imports and time constant usage in core modules

Replaced usage of time.SECOND with a local SECOND constant in ServerHealthService for clarity and removed unused import. Updated all service imports in TestCoreModule to explicitly include the .js extension for compatibility with ES module resolution.

* Remove unused `wrap_text` and `ansi_visible_length` functions

Deleted the wrap_text and ansi_visible_length utility functions from string.js, as they are no longer needed or used in the codebase.

* Remove `format_as_usd` utility and related docs

The format_as_usd function and its documentation have been removed from the codebase and README files. This cleans up unused or deprecated currency formatting utilities.

* Remove osclink utility and update references

The osclink function and its documentation have been removed from putility. All usages in backend modules have been updated to use plain URLs instead of OSC 8 hyperlinks. This simplifies string utilities and avoids terminal-specific formatting.

* Remove PosixError utility module

* Remove NariMethodsFeature and related references

Deleted the NariMethodsFeature module and removed its usage from AdvancedBase and PuterJSFileSystemModule. This simplifies the codebase by eliminating unused or deprecated NARI method support.
2025-12-13 17:59:16 -08:00
Daniel Salazar 6652a1d332 fix: make cache calls async on boot (#2173) 2025-12-13 17:00:02 -08:00
Daniel Salazar 25221e539d fix: bad caching query crashing our db (#2172)
* logs: add errors to cache log

* logs: add errors to cache log

* fix: bad caching query crashing our db
2025-12-13 16:48:36 -08:00
Daniel Salazar 5c9a98a7a1 Ds/main (#2171)
* logs: add errors to cache log

* logs: add errors to cache log
2025-12-13 15:48:37 -08:00
Daniel Salazar d7b3ba3bb0 cd: make our deploy reliably wait for server to be ready (#2170)
* chore: continue removing extra logs

* cd: make our deploy reliably wait for server to be ready
2025-12-13 14:34:44 -08:00
Daniel Salazar e79f8a46f0 chore: add better logging to broadcast connections (#2169)
* fix: await fetching app cache on init

* chore: add better logging to broadcast connections
2025-12-13 14:07:25 -08:00
Daniel Salazar bbd5f52320 chore: continue removing extra logs (#2159)
* fix: await fetching app cache on init

* await for methods on boot now
2025-12-13 13:34:25 -08:00
Nariman Jelveh 87ac67a340 Remove DevConsoleService and related dev console widgets (#2167)
* Remove DevConsoleService and related dev console widgets

Eliminates `DevConsoleService` and `NullDevConsoleService`, along with all code that registers or manages dev console widgets across the backend. Developer messages and notifications are now logged directly to the console. Removes related commands and test mocks, simplifying the developer experience and reducing code complexity.

* Remove MinLogService and related registration code

Deleted MinLogService.js and removed its registration from SelfHostedModule.js. This cleans up unused or deprecated logging functionality.

* Remove `DevSocketService` and related registration

* Increase test job timeouts in CI workflow

* Remove dev environment widget ops counter

Eliminated increment and decrement of the dev_batch-widget ops counter in BatchExecutor. This simplifies the code and removes dev-only UI tracking logic from the batch operation flow.

* Remove console Puter logo feature and related code

Deleted the src/fun/logos.js file and removed all references to the Puter logo display in WebServerService and documentation. This streamlines the server startup output and eliminates unused or unnecessary code.

* Update WebServerService.js

* Standardize console banner formatting in services
2025-12-13 13:31:16 -08:00
jelveh d07d5fd5cb Remove DevTODService and its registration 2025-12-13 11:33:06 -08:00
Nariman Jelveh 794ff1e255 Remove tag cache refresh logic from AppInformationService (#2166)
* Remove tag cache refresh logic from AppInformationService

Eliminated the _refresh_tags method and its scheduled interval from AppInformationService. This change removes the tag cache refresh functionality, likely due to refactoring or deprecation of tag-based app discovery.

* Remove AI usage testing contributor docs
2025-12-13 09:45:13 -08:00
jelveh 888fab42e1 Remove AI response normalization files 2025-12-13 00:23:35 -08:00
jelveh 9c5938e2fd Remove comment-writer and AI METADATA comments from backend source files 2025-12-13 00:16:31 -08:00
jelveh f838fe4ecc Remove Threads module from puter-js 2025-12-13 00:06:43 -08:00
Nariman Jelveh 8f7a735cc0 Remove dev-console-ui-utils and update related services (#2163)
* Remove dev-console-ui-utils and update related services

* Remove debug console.log statements from backend code

Eliminated various leftover console.log and debug print statements across multiple backend modules and services to clean up the codebase and reduce unnecessary logging in production.

* Remove unnecessary console.log statements
2025-12-12 23:46:39 -08:00
Nariman Jelveh b8ed8caa3a Remove CommentService and related tests (#2160)
Deleted the CommentService implementation and its test file, and unregistered the service from CoreModule. This removes all comment-related backend functionality.
2025-12-12 21:49:54 -08:00
Nariman Jelveh 6bb4e9dfae Remove Bootstrap 5.1.3 assets from public directory (#2161)
* Remove Bootstrap 5.1.3 assets from public directory

* Create bootstrap.min.css
2025-12-12 21:41:16 -08:00
Nariman Jelveh ae92233b95 Remove fat from puterjs (#2156)
* Refactor puter-js to remove putility and service layer

* Add fallback for IPC listener registration

* Remove TeePromise in favor of `createDeferred` pattern

* Update utils.js

* Bump version to 2.2.0 in package.json

* Remove model name normalization and driver mapping logic

Eliminated the code responsible for normalizing model names and mapping models to specific AI drivers. The default driver is now set to 'ai-chat', simplifying the model selection and driver assignment process.

* Simplify AIService selection logic in image generation

* Remove unused Together image model constants
2025-12-12 19:44:15 -08:00
Daniel Salazar ef69865dd1 chore: decrease uninmportant logs (#2158) 2025-12-12 18:50:01 -08:00
Daniel Salazar f3e143e74a fix: bad usageType (#2157) 2025-12-12 17:31:40 -08:00
Daniel Salazar 797b87b004 cleanup: remove dead cloudwatch call (#2155) 2025-12-12 17:08:26 -08:00
KernelDeimos 6c0daf58c4 perf: is()/is_above() determine when to fetch 2025-12-12 17:38:43 -05:00
KernelDeimos af9a2b8300 perf: don't await on modifying 'accessed' 2025-12-12 17:38:43 -05:00
KernelDeimos 3fe6b8d23a fix: fsNode.is() requiring unnecessary fetch
When you have two path selectors, .is() should compare path strings
instead of fetching any entries.
2025-12-12 17:38:43 -05:00
KernelDeimos 4b31204224 perf: condition for re-fetch in fsNode.exists() 2025-12-12 17:38:43 -05:00
jelveh 54c2d9768e Update package.json 2025-12-12 13:47:27 -08:00
jelveh 348e000863 Bump puter.js version to 2.1.15 and update metadata
Added a homepage field and specified the repository directory in package.json for improved project metadata.
2025-12-12 13:43:25 -08:00
jelveh bb697616c0 Refine signup form spacing and title styling 2025-12-12 13:28:18 -08:00
Reynaldi Chernando ce2a509221 Fix hosting types (#2153) 2025-12-12 12:55:59 -08:00
Reynaldi Chernando 17ca4c7c93 Fix speech2txt options (#2150) 2025-12-12 12:55:51 -08:00
Reynaldi Chernando e431ac265c Fix FS types (#2134) 2025-12-12 12:55:39 -08:00
Reynaldi Chernando 697b3424c7 Add missing AI types (#2151) 2025-12-12 12:55:20 -08:00
Reynaldi Chernando c950be13f2 Fix KV types (#2152) 2025-12-12 12:54:13 -08:00
jelveh 7dcf590cf1 Add hide-scrollbar class to sidebar and user options 2025-12-12 11:58:59 -08:00
Reynaldi Chernando 7b15ee0bd0 Add alias for gpt-5.2-chat (#2148) 2025-12-11 19:59:21 -08:00
jelveh bb7b71236f Add new GPT-5.2 chat models to OpenAI provider 2025-12-11 19:43:22 -08:00
jelveh e75259dfd0 Add GPT-5.2 model to OpenAI provider models 2025-12-11 19:07:30 -08:00
Daniel Salazar aa225e3049 fix: batch app info referral (#2146) 2025-12-11 18:31:22 -08:00
jelveh 77c7214a1d Optimize app stats cache update with aggregate queries 2025-12-11 18:08:38 -08:00
Daniel Salazar 9e2ae1c004 fix: bad ai calls (#2144) 2025-12-11 17:13:25 -08:00
Daniel Salazar 83eab0d6ac Revert "Revert: single ai image entry point (#2131)" (#2143)
This reverts commit 907d0db328.
2025-12-11 17:03:20 -08:00
jelveh 89fbcffc7a Remove backend documentation section from CONTRIBUTING.md 2025-12-11 17:03:12 -08:00
jelveh 83eff9da87 Remove style guide and first contribution sections 2025-12-11 17:00:46 -08:00
jelveh f961dd4acd Update CONTRIBUTING.md 2025-12-11 16:58:21 -08:00
Daniel Salazar a103ca9bcb cleanup: remove Library + bloated utils where possible (#2142) 2025-12-11 16:55:29 -08:00
Nariman Jelveh ef9f240a45 Remove terminal phoenix emulator (#2141)
* Remove terminal and phoenix built-in apps and emulator

This commit removes the terminal and phoenix built-in apps from the backend, database migrations, and permissions. It also deletes the entire emulator and phoenix/terminal app source directories, assets, and related configuration files. References to these apps in the backend module loader and router are removed, and related SQL migrations are updated to reflect their removal.

* Remove emulator references from SelfHostedModule

* Remove emulator integration and related references

* Remove parsers and pty modules

* Update package-lock.json
2025-12-11 16:53:21 -08:00
jelveh f07092164f Delete app.js 2025-12-11 15:29:55 -08:00
jelveh a423820e4b Remove unused backend HTML and module files
Deleted ThirdPartyDriversModule.js, html_footer.js, and html_head.js from the backend source directory. These files are no longer needed and have been removed to clean up the codebase.
2025-12-11 15:08:51 -08:00
Nariman Jelveh 6b7f6baeab Delete backend README links from README.md (#2140) 2025-12-11 13:34:30 -08:00
Daniel Salazar 57f5163e51 chore: remove deprecated threads (#2139) 2025-12-11 13:28:34 -08:00
Nariman Jelveh 7524933ca1 Remove backend-core-0 and inline validation helpers (#2138)
Deleted the src/backend-core-0 package and moved its validation helpers directly into src/backend/src/validation.js. Updated references in CoreModule.js and helpers.js to use the new local validation module. Adjusted ESLint configs to remove backend-core-0 references.
2025-12-11 13:22:32 -08:00
Daniel Salazar 907d0db328 Revert: single ai image entry point (#2131)
* Revert "fix: together ai image prices (#2130)"

This reverts commit 04c8b06616.

* Revert "feat: single image ai endpoint (#2129)"

This reverts commit 161ca74aa3.
2025-12-11 00:56:06 -08:00
Daniel Salazar 04c8b06616 fix: together ai image prices (#2130) 2025-12-10 23:46:52 -08:00
Daniel Salazar 161ca74aa3 feat: single image ai endpoint (#2129) 2025-12-10 23:29:11 -08:00
jelveh 4b2135f896 Update style.css 2025-12-10 22:56:38 -08:00
jelveh 6b71eb04ec Add box-sizing and responsive padding to sidebar 2025-12-10 22:28:15 -08:00
Daniel Salazar 1a0e2d3def fix: bad method name for together ai (#2128) 2025-12-10 20:45:41 -08:00
jelveh 902c1f7944 Add save account warning for temporary users 2025-12-10 20:10:01 -08:00
jelveh 0d2f4c3f2c Add window options to feedback and account modals 2025-12-10 19:44:04 -08:00
jelveh cfe497bd0c Update UIDashboard.js 2025-12-10 19:30:08 -08:00
jelveh 1ed8b2a86a Refactor dashboard modals and update danger zone UI 2025-12-10 19:22:13 -08:00
Neal Shah 6929e48b8e Fix ratio in TogetherImage (#2127) 2025-12-10 17:56:10 -05:00
Reynaldi Chernando bcd96523cb Add auth types (#2117) 2025-12-10 16:44:31 -05:00
jelveh ddf9bd1358 Add Security tab to dashboard with 2FA and session management 2025-12-10 12:10:20 -08:00
jelveh 357cb8bcca Simplify call to UIWindowConfirmUserDeletion 2025-12-09 23:55:49 -08:00
jelveh f18e349c21 Add profile-pic class to profile avatar div 2025-12-09 23:48:02 -08:00
jelveh 9806a8bc81 Add Account tab to dashboard UI 2025-12-09 23:25:37 -08:00
jelveh 00f3699335 Add chevron rotation for user menu toggle 2025-12-09 22:28:37 -08:00
jelveh de67d25baf Update recent apps grid layout and styling 2025-12-09 22:20:27 -08:00
jelveh 1e79d9e192 Merge branch 'main' of https://github.com/HeyPuter/puter 2025-12-09 17:09:03 -08:00
jelveh 462ec01de6 Add 'Show less' button to usage table 2025-12-09 17:09:01 -08:00
Daniel Salazar b40ca1df2c Revert: change to ai model names (#2123)
* Revert "fix: prevent loot qp if failing ai models? (#2122)"

This reverts commit 8d52cefe47.

* Revert "feat: rename ai models to match norm (#2121)"

This reverts commit 9da8aa0849.
2025-12-09 17:00:01 -08:00
Daniel Salazar 8d52cefe47 fix: prevent loop if failing ai models? (#2122) 2025-12-09 16:54:17 -08:00
jelveh 010c9b1a82 Update style.css 2025-12-09 16:50:11 -08:00
jelveh ab5f168cd7 Add expandable usage table with show more button 2025-12-09 16:42:52 -08:00
Daniel Salazar 9da8aa0849 feat: rename ai models to match norm (#2121) 2025-12-09 16:38:34 -08:00
KernelDeimos 2aa4cd857d type: add extension.span to api.d.ts 2025-12-09 19:17:05 -05:00
KernelDeimos 2e4a504cda fmt: apparently api.d.ts was out of sync with linter 2025-12-09 19:17:05 -05:00
Daniel Salazar e2ae313589 feat: refactor ai to have single entry point and follow defined model structure (#2114)
* feat: refactor ai to have single entry point and follow defined model structure

* fix: missing openrouter registration

* fix: dedupe models

* feat: provide usage in stream mode 🚀
2025-12-09 15:59:21 -08:00
jelveh 2ab99d38da Update TabHome.js 2025-12-09 15:58:51 -08:00
jelveh e9de337645 Show up to 8 recent apps on 4K screens in TabHome 2025-12-09 15:49:08 -08:00
jelveh dd1bb8416f Improve recent apps grid layout for dashboard 2025-12-09 15:43:22 -08:00
KernelDeimos d8dc438a7d dev: extension.span 2025-12-09 18:42:10 -05:00
KernelDeimos 1d7a5b7c58 fix: downgrade opentelemetry so it works again
We weren't able to see any custom spans, only the builtin
instrumentations for node.js. This commit downgrades opentelemetry so
that we can see custom spans in tools like jaeger as before.
2025-12-09 17:30:52 -05:00
KernelDeimos cb7c83f670 fix: add simple 30s cache to /healthcheck 2025-12-09 00:14:03 -05:00
jelveh 38da15853f Update style.css 2025-12-08 18:15:05 -08:00
KernelDeimos d0ea063d0f dev: update use of spans in extensions 2025-12-08 18:50:23 -05:00
KernelDeimos 64b0ba89cc doc(extensions): fix incorrect documentation link 2025-12-08 18:50:23 -05:00
KernelDeimos 87dbb34a8d fix: pass exporter to NodeSDK constructor
Previously a new ConsoleSpanExporter was passed to the constructor of
NodeSDK. This was possibly unintentional but it did not cause any
issues. After the recent update to opentelemetry, or perhaps the changes
introduced in 3c579dcc0d, this no longer
works as it prevents tools like Jaeger from getting any spans from
Puter's backend.
2025-12-08 18:41:21 -05:00
jelveh c9bbca875f Redesign dashboard usage and plan cards 2025-12-08 14:59:08 -08:00
Reynaldi Chernando 7b5d90d678 Fix AI types (#2100)
* Remove constructor and global methods

* Fix streaming type and stricter type

* Add missing chat options param

* Fix messages type

* Fix img2txt types

* Fix txt2img types

* remove unused

* Fix test mode in txt2img

* Fix txt2vid types

* Fix speech2txt types

* Fix speech2speech types

* Fix txt2speech types

* Add missing chat types

* Fix missing txt2speech types
2025-12-08 14:06:36 -08:00
jelveh f09cac99eb Update style.css 2025-12-08 13:27:19 -08:00
Daniel Salazar 910e6041fa fix: eleven labs metering costs (#2112) 2025-12-08 11:07:16 -08:00
jelveh 31460fc70b Update home tab label and card backgrounds 2025-12-07 01:14:32 -08:00
jelveh 94b2af9d88 Update welcome card UI for lighter theme 2025-12-07 00:49:09 -08:00
jelveh afc21a9903 Add user avatar to home tab welcome section 2025-12-07 00:27:16 -08:00
KernelDeimos b92dcc8146 chore: associate googlemail with gmail rules 2025-12-07 02:11:29 -05:00
jelveh 6f24176ea3 Add external link support for recent apps 2025-12-06 21:54:59 -08:00
jelveh dc2f4953eb Fix recent app title display logic in TabHome (jesus take the wheel!) 2025-12-06 21:41:18 -08:00
jelveh 08599efd78 Adjust recent apps display and update dashboard styles 2025-12-06 21:31:46 -08:00
jelveh c45c40c304 Update style.css 2025-12-06 21:21:11 -08:00
jelveh 1e7f815946 Improve recent apps display and style in TabHome 2025-12-06 20:57:05 -08:00
jelveh ba1855cff6 Add usage card to dashboard home tab 2025-12-06 20:32:00 -08:00
jelveh c2bcd3092d Add Home tab with bento dashboard layout 2025-12-06 19:40:07 -08:00
jelveh 622f53468b Adjust dashboard icons and app card styles 2025-12-06 19:13:47 -08:00
jelveh 7f7ab1957f Add Usage tab to dashboard with sortable usage table 2025-12-06 18:26:58 -08:00
jelveh ba6ea233ad Update style.css 2025-12-06 17:18:10 -08:00
jelveh 19c96e9797 Update style.css 2025-12-06 17:14:26 -08:00
Nariman Jelveh ed509ad286 Dashboard (#2104)
* Add dashboard UI and routing support

Introduces a new Dashboard UI component with sidebar navigation and user options. Updates backend routing to redirect /dashboard to the root path. Integrates dashboard mode detection and initialization in the GUI, including responsive styles and logic to open the dashboard or desktop as appropriate.

* Improve dashboard user menu and UI behavior

Added support for multiple logged-in users, session saving for temporary users, and improved context menu options in the dashboard. Updated CSS for user button state and adjusted font size for signup terms. Changed dashboard initialization to use UIDashboard instead of UIWindow.

* Add dynamic apps section to dashboard UI

* Add specific class for dashboard apps section

* Refactor dashboard tabs into modular components

* Update style.css

* Add Developers menu and improve signup window behavior

Added a 'Developers' menu item to the dashboard linking to developer.puter.com. Updated login and signup window logic to ensure the signup window opens centered and dominant, improving user experience when transitioning from login to signup.

* Update UIWindowLogin.js

* Refactor apps tab UI and improve app card interaction
2025-12-06 17:06:20 -08:00
KernelDeimos 277ee6ca5a rename: requestPermission -> request 2025-12-05 13:06:29 -05:00
Daniel Salazar ebeaf33412 npm: publish new readme (#2098)
* fix: togetherAi metering

* npm: publish new readme

* Revert "fix: togetherAi metering"

This reverts commit 2b3eb76d90.
2025-12-05 03:04:59 -08:00
KernelDeimos 2db3331729 tweak: add puter.perms.requestPermission
It calls requestPermission on the UI module. The method on the UI model
needs to still exist because the UI module is tightly-coupled with IPC.
A refactor of the IPC mechanism on the puter.js side could solve this.
2025-12-04 19:50:38 -05:00
KernelDeimos 237dc2ef9a fix: get subdomains permission working 2025-12-04 19:50:38 -05:00
KernelDeimos 349438458a dev: add user-friendly permission requests for apps/subdomains 2025-12-04 19:50:38 -05:00
KernelDeimos bee780cc69 dev: i12ize permission messages (no translations) 2025-12-04 19:45:22 -05:00
KernelDeimos 56301281d7 dev: ensure proper encoding in dialog 2025-12-04 19:45:22 -05:00
KernelDeimos d9875a5be5 dev: puter.perms methods to request directories
This commit adds methods to request standard directories like the
Desktop, Documents, Pictures, or Videos directory. Additionally, the
message displayed when permission for these directories is requested is
easier to read.
2025-12-04 19:45:22 -05:00
Nariman Jelveh 66786a0015 Update Node.js section header in README.md (#2095) 2025-12-04 11:26:01 -08:00
KernelDeimos 09b8c29e2f tweak: avoid use of puter global in Perms module 2025-12-04 13:26:22 -05:00
KernelDeimos ef6dea2bec fix: skip cache when checking user:<>:email:read 2025-12-04 13:26:22 -05:00
KernelDeimos 3d7cf1c1c4 dev: add await puter.perms.requestEmail() shorthand 2025-12-04 13:26:22 -05:00
KernelDeimos 1c9ed12044 dev: add permission dialog message for email:read 2025-12-04 13:26:22 -05:00
KernelDeimos 3ea309e93b fix: requestPermission Promise never settled
This bug took a long time to diagnose, so I also made an async/await
wrapper around #postMessageWithCallback called #postMessageAsync so that
similar promise resolving errors are less likely here in the future.
2025-12-04 13:26:22 -05:00
Neal Shah a202e57480 Add flux.2 costmaps (#2092) 2025-12-03 11:39:02 -05:00
Daniel Salazar 6419d57d84 types: fix puter-js type exports (#2090)
* chore: add typedefs for puter.js

* types: fix puter-js type exports
2025-12-02 21:36:46 -08:00
KernelDeimos 71e6a59d13 dev: add __import_identity__ to config for debug use
The vitest test suite can import different states of the same module, so
this value was very helpful in determining that this was happening and
eventually the cause.
2025-12-02 16:54:27 -05:00
KernelDeimos 06d56fd711 fix: update validation for permission endpoints
Permission endpoints would trigger 500 errors in cases where the request
did not have correct types for values in the request body. This migrates
all of these endpoints to use the new `validate_fields` function, which
is intended to make validation of fields clearer and more consistent.
2025-12-02 16:53:48 -05:00
KernelDeimos e5ac7af52d dev: add utility for field validation 2025-12-02 16:53:48 -05:00
KernelDeimos 11a18078be fix: improve response error handling in Perms module 2025-12-02 16:53:48 -05:00
Neal Shah 66d9344407 Fix turnstile auth (#2087)
* attempt to fix turnstile auth
2025-12-02 16:25:18 -05:00
Daniel Salazar 34134a2e35 chore: add typedefs for puter.js (#2086) 2025-12-02 13:04:26 -08:00
Daniel Salazar cce2c4ac27 fix: stricten undef checks (#2082) 2025-12-01 20:26:33 -08:00
Daniel Salazar d3beac0518 fix: wrong order for telemetery init (#2078) 2025-12-01 20:18:03 -08:00
Daniel Salazar 3c579dcc0d fix: TelemetryService (#2077) 2025-12-01 18:11:56 -08:00
KernelDeimos b42a106676 dev(perms): [+] apps-of-user:<user-uuid>:write
This commit also adds a new check to verify that the app which owns the
entity being edited matches. Previously this was not necessary because a
read on the same entity would have always performed the same check and
caused this operation to stop early. (now that an app may have
permission to read entities created by other apps, this is no longer the
case.)
2025-12-01 17:14:41 -05:00
KernelDeimos a71fa826b3 dev(perms): [+] apps-of-user:<user-uuid>:read 2025-12-01 17:14:41 -05:00
KernelDeimos cf9a867190 fix: inaccurate error on update of non-existing
...entity (app, subdomain, etc). When trying to update some non-existing
entity the error message can state that an entity with a particular UID
was not found even if a UID wasn't specified. The UID reported will in
fact be a randomly generated UID because of how default properties work
in entities. This fix makes the error message more specific about which
identifier was used when an entity was not found. This is accomplished
by printing the predicate in a human-readable format.
2025-12-01 17:14:41 -05:00
Daniel Salazar 405e02cf9c test: claudeService (#2074) 2025-12-01 13:39:55 -08:00
Daniel Salazar c77272012d ci: add test coverage (#2073)
* ci: add test coverage

* ci: add test coverage
2025-12-01 08:56:44 -08:00
Daniel Salazar d978c37e0b ci: package and docker fixes (#2072)
* ci: package and docker fixes

* ci: fix package conflicts
2025-12-01 02:10:36 -08:00
Daniel Salazar 0568b64821 ci: fix docker again (#2071) 2025-12-01 01:47:00 -08:00
Daniel Salazar cc5be578bf ci: cleanup docker build (#2070) 2025-12-01 01:25:08 -08:00
Daniel Salazar 45fb5c32b1 chore: various test related changes (#2069)
* fix: backend tests breaking with permision

* test: cleanup running tests

* chore: config.d.ts
2025-12-01 01:14:44 -08:00
Neal Shah 596f77d888 Working main 2025 11 29 (#2068)
* add logging hook to togetherai image service

* add gemini-3-pro-image to costmap
2025-11-30 11:39:34 -05:00
Daniel Salazar cea94d16cb fix: backend tests breaking with permision (#2067) 2025-11-29 13:50:27 -08:00
Daniel Salazar e8f00e1121 fix: typo in dbkvStore (#2066) 2025-11-29 13:18:37 -08:00
Daniel Salazar dccfa8085e chore: some type and eslint fixes for tests (#2065) 2025-11-28 23:38:04 -08:00
Neal Shah f99c78e4d3 Email read permission for whoami (#2064) 2025-11-28 17:34:26 -05:00
Daniel Salazar f6fa17a575 feat: KV testing (#2061) 2025-11-27 18:45:49 -08:00
KernelDeimos c4e380c140 test: add tests for services in CoreModule 2025-11-27 15:15:56 -05:00
Daniel Salazar f120bc9c58 fix: metering service alerts + missing claude costs (#2058)
* fix: missing haiku costs, updating opus 4.5 id to match documentation

* fix: improve alert logic for metering service misses
2025-11-27 11:45:56 -08:00
jelveh c6af50ea98 Update claudeCostMap.ts 2025-11-27 09:08:14 -08:00
KernelDeimos 8e2ed18fb3 refactor: introduce TestCoreModule for test kernel 2025-11-26 18:58:34 -05:00
Daniel Salazar 59e6418b00 feat: meteringService test suite (#2052) 2025-11-26 15:46:53 -08:00
Neal Shah 6dffa3d6f2 Worker + NodeJS support for puter.ai.txt2img and puter.ai.txt2vid (#2051)
* Attempt to get workers working with AI media generation

* add FileReader polyfill

* fix import path
2025-11-26 18:10:11 -05:00
Daniel Salazar 93eddd2238 feat: MeteringService test fixes for now (#2050) 2025-11-26 15:09:30 -08:00
Nariman Jelveh 6284b390b7 Revert "Create README.tel.md (#2045)" (#2049)
This reverts commit 94a411f30f.
2025-11-26 14:49:40 -08:00
rajucreate 94a411f30f Create README.tel.md (#2045) 2025-11-26 14:49:22 -08:00
PARTH PRATYUSHandNariman Jelveh 14a5f20404 Add Traditional Chinese (繁體中文) Translation for Issue #1501 (#2032)
* i18n(zhtw): add missing Traditional Chinese translations (fix #1501)

This PR adds missing Traditional Chinese (繁體中文) translations to the zhtw.js file.

Translations added:
- confirm_download_file_to_desktop
- downloading_file
- error_download_failed
- Resources
- Storage
- untar / untarring
- uploading / uploading_file
- tar / tarring / download_as_tar
- set_as_background
- error_user_or_path_not_found
- error_invalid_username

Closes #1501

* Fix formatting of confirm download message

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-11-26 14:45:30 -08:00
2400060033 d4f44be5e4 Update tsconfig.json (#2035)
This update fixes configuration issues in the TypeScript setup by standardizing the tsconfig.json. It sets modern compiler targets (ES2024), uses Node16 module resolution, enables strict type checking, and cleans up test-related exclusions. These changes improve build reliability, prevent casing inconsistencies, and ensure accurate source mapping during development.
2025-11-26 17:38:30 -05:00
KernelDeimos eda1c45ffb test: migrate _test tests to vitest tests 2025-11-26 16:32:07 -05:00
Daniel Salazar cb66c56a6b fix: tsconfig to ignore vite config files (#2048) 2025-11-26 13:26:09 -08:00
KernelDeimos 1a0e727113 clean: rename TestService.mts -> TestService.ts 2025-11-26 14:52:31 -05:00
KernelDeimos d6651498eb fix: minor issue in root package.json 2025-11-26 14:52:31 -05:00
KernelDeimos 5f78552005 fix: update MeteringService and add utility for TestKernel 2025-11-26 14:52:31 -05:00
KernelDeimos e95b0be371 fix: update import in TestService 2025-11-26 14:52:31 -05:00
Daniel Salazar a397707c7b fix: bad export 2025-11-26 14:52:31 -05:00
KernelDeimos 8a05b65ff3 dev(test): enable use of TestKernel in unit tests 2025-11-26 14:52:31 -05:00
Daniel Salazar 001e174b81 fix: oss boot error fixes (#2039) 2025-11-26 11:08:40 -08:00
Neal Shah 47ebbc1b90 Use aliases when calculating max_tokens (#2046) 2025-11-26 13:46:53 -05:00
jelveh 142ed0b902 Add cost mapping for Claude Opus 4.5 2025-11-25 18:51:54 -08:00
jelveh 014b5ac713 Enforce ownership of puter.site subdomains for apps 2025-11-25 15:43:14 -08:00
jelveh 6558bc26e9 Refactor AI model listing and provider retrieval 2025-11-25 13:49:39 -08:00
Daniel Salazar e2f1200ad5 test: add test infra to run vitest on all of backend wip (#2023) 2025-11-24 19:20:09 -08:00
KernelDeimos 8eee9ad1df fix(puterfs): use node crypto instead of Web API
By default node has a global `crypto` variable conforming to the
standard for the Web Crypto API. However, this `crypto` object does not
have the `createHash` function, so 'node:crypto' must be imported
instead.
2025-11-24 14:34:55 -05:00
jelveh 613f6379e7 Add Claude Opus 4.5 2025-11-24 11:33:24 -08:00
krishna3324andNariman Jelveh a355761359 docs: add Punjabi translation link to README (#2020)
* docs: add Punjabi translation link to README

The Punjabi (ਪੰਜਾਬੀ) translation README.pa.md was added 2 weeks ago but was missing from the translations list in the main README. This adds it to maintain completeness of the translations section.

* Fix Punjabi link formatting in README.md

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-11-24 09:04:53 -08:00
48d8762ccf Gemini nano banana pro updated (#2012)
* Update AI.js

* Update GeminiImageGenerationService.js

* Update cost map

* Gemini to OpenAI SDK refactor (#2014)

* WIP Gemini OpenAI refactor

* refactor: gemini open ai service + geminiCostMap

* Gemini Service fixes

* Cleaning up old Gemini cruft

---------

Co-authored-by: Daniel Salazar <[email protected]>

---------

Co-authored-by: Nihhaar0002 <[email protected]>
Co-authored-by: Daniel Salazar <[email protected]>
2025-11-24 10:36:00 +04:00
Neal ShahandDaniel Salazar ed2d1368ca Gemini to OpenAI SDK refactor (#2014)
* WIP Gemini OpenAI refactor

* refactor: gemini open ai service + geminiCostMap

* Gemini Service fixes

* Cleaning up old Gemini cruft

---------

Co-authored-by: Daniel Salazar <[email protected]>
2025-11-24 09:55:19 +04:00
jelveh 7e1d50d0d1 Add allenai to openrouter model prefix list 2025-11-23 21:20:23 -08:00
SuryaGanesh284andjelveh 9f9820923d Add missing Traditional Chinese translations to zhtw.js (#2013)
* Add missing Traditional Chinese translations to zhtw.js

* Update zhtw.js

---------

Co-authored-by: jelveh <[email protected]>
2025-11-23 15:49:02 -08:00
bangarumahesh22 385f4ecea2 Docs: improve clarity in README introduction (#2010) 2025-11-23 09:38:32 -08:00
Daniel Salazar 85d13a9d4b fix: openrouter missing usage (#2008) 2025-11-22 15:54:53 -08:00
Eswar Venkata Ram Charan Seeramandjelveh 02716d0e3e i18n(nn): finalize Norwegian Nynorsk translation fixes (Fixes #1514) (#2007)
* i18n(nn): fix typos & finalize translation cleanup

* Update nn.js

---------

Co-authored-by: jelveh <[email protected]>
2025-11-22 10:12:20 -08:00
Nariman Jelveh 133e3dc77c Add 11labs speech-to-speech voice changer integration (#2006) 2025-11-21 23:24:43 -08:00
Daniel Salazar 262b359633 fix: fallback models (#2005) 2025-11-21 20:09:19 -08:00
Reynaldi Chernando fdbd742d7a Add missing together image model prefixes (#1972) 2025-11-22 07:16:26 +04:00
Nariman Jelveh bb752a5bb5 Add ElevenLabs TTS provider integration (#2004)
* Add ElevenLabs TTS provider integration

Adds ElevenLabs text-to-speech support in the backend and frontend. Adds `ElevenLabsTTSService`, updates `PuterAIModule` to register the service, documents configuration, and integrates cost tracking with zero cost in `MeteringService` for now (todo). updates `AI.js` to support 11labs as a provider and adds related tests for `txt2speech` functionality.

* Update 11labs cost map values
2025-11-21 17:31:21 -08:00
Daniel Salazar 11e057557d fix: eslint autofixable errors (#2002) 2025-11-21 13:22:19 -08:00
Daniel Salazar f1773974c0 fix: only fallback to models that are immediately the same (#2001) 2025-11-21 10:46:43 -08:00
John Boulanger f6139bc79a fix: Add debounce to toolbar reveal when dragging windows to prevent accidental activation (#1989)
* fix: debounce toolbar display after dragging a window

* change naming convention for debounce to match others. (snake case)

* revert changes to package.json that werent meant to be comitted

* Revert "change naming convention for debounce to match others. (snake case)"

This reverts commit aaedee0dfa.

* revert commit aaedee0dfa

* use snake case for drag_release_debounce_timer
2025-11-20 23:52:13 -08:00
KernelDeimos 8dafafa749 ci: mandatory eslint rules for build
This commit adds verification for statically identifiable definite
errors. Sometimes global variables used will be falsely reported as
undefined variables in which case the new file
`mandatory.eslint.config.js` should be updated to include these
definitions in the narrowest scope possible that has these definitions
2025-11-20 21:34:21 -05:00
KernelDeimos 12559f7d28 lint: use this.services instead of global here
This is the last error for the mandatory eslint rules. Now we can put a
rule into place so that CI always fails when there's an undefined
variable, which I think is pretty cool.
2025-11-20 21:34:21 -05:00
KernelDeimos 7b38131b65 fix: desktop_items in whoami
There's a potential issue here because of an undefined reference, but I
can't seem to reproduce any problem caused by this. However without this
fix this line of code is guarenteed to throw an exception so this fix
should be safe.
2025-11-20 21:34:21 -05:00
KernelDeimos c4b5b48904 doc: add notes to AppInformationService
I was having issues getting to a branch that calls a non-existing
function so I wrote some comments about the issue here.
2025-11-20 21:34:21 -05:00
KernelDeimos 813ea63d21 fix: possible undefined when handling stuck stream
This is an error in a handler for a failure case so it shouldn't be
affecting users, but let's handle this error gracefully.

This was a symbol that became not defined after moving PuterFSProvider
to the extension.
2025-11-20 21:34:21 -05:00
KernelDeimos 92d03e5501 fix: size_measure_stream in streamutils 2025-11-20 21:34:21 -05:00
KernelDeimos f11d0f0c8b clean: remove unused method in DriverService 2025-11-20 21:34:21 -05:00
KernelDeimos 909f9afb9b link: format DriverService 2025-11-20 21:34:21 -05:00
KernelDeimos 2ae2d3c9af lint: format eggspress.js
It's about time to do this now. This file will for the first time (in...
ever?) be indented with 4 spaces instead of 2.
2025-11-20 21:34:21 -05:00
KernelDeimos 71a26156bd fix: add missing Context import to IconResult 2025-11-20 21:34:21 -05:00
KernelDeimos 5062e3c5ed fix: add missing ref to next()
We might get rid of this later, or re-write it, so this isn't really a
concern right now but this cleans up eslint error output.
2025-11-20 21:34:21 -05:00
KernelDeimos d429d2f5bc fix: incorrect variable ref in hl_move for shared 2025-11-20 21:34:21 -05:00
KernelDeimos e55bd4a796 lint: format hl_move.js 2025-11-20 21:34:21 -05:00
Daniel Salazar 02d95db7ed fix: open router cache token metering (#1988) 2025-11-20 17:49:05 -08:00
KernelDeimos fb41eaae23 fix: id2path import 2025-11-20 18:25:20 -05:00
KernelDeimos 3cdb182355 debug: add missing log message 2025-11-20 18:25:20 -05:00
Neal Shah b035fda778 Fix gemini when tools are null (#1992) 2025-11-21 01:57:39 +04:00
KernelDeimos 452e0b7001 doc: update documentation for TestKernel 2025-11-20 14:29:55 -05:00
KernelDeimos bb90595431 fix: move dependency in LocalDiskStorageController
LocalDiskStorageController was dependent on putility for TeePromise, but
since putility is a workspace module it's difficult for extensions to
access it (Puter backend core would need to expose it). Since TeePromise
itself is very small and will rarely (if ever) be changed I decided to
move it to a separate package on npm.
2025-11-19 17:08:15 -05:00
KernelDeimos 03db975e3e chore: attempt to disable memoryfs test
The test for memoryfs isn't relevant at the moment because it will be
updated to work with newly refactored filesystem code later.
2025-11-19 17:08:15 -05:00
KernelDeimos 1cb27fb25f dev: make puterfs storage controller configurable 2025-11-19 16:13:26 -05:00
KernelDeimos 91f948f1fc dev: LocalDiskStorageController with upload method
Begin work on LocalDiskStorageController in the `puterfs` extension.
This replaces LocalDiskStorageStrategy and LocalDiskStorageService from
the core. The `upload()` method is implemented to verify that it's
working.

This commit by itself will break other storage strategies. The next step
is to allow extensions to register storage controllers for puterfs. Part
of that work is done in this commit by emitting an event to register
storage controllers, but this commit does not include a way to
configure/select storage controllers.
2025-11-19 16:13:26 -05:00
KernelDeimos d7538cf3c0 refactor: merge FSEntryFetcher with FSEntryController 2025-11-19 16:13:26 -05:00
KernelDeimos d3881f2440 dev: decouple FSEntryFetcher by adding hasChild
Adding the hasChild method of FSNodeContext as well as a corresponding
method to filesystem providers is prerequisite to moving
FSEntryFetcher's logic into the new puterfs extension.
2025-11-19 14:30:42 -05:00
KernelDeimos cdcce31d03 rm: remove DatabaseFSEntryService from core 2025-11-19 14:30:42 -05:00
KernelDeimos 35d32f7fc8 dev(puterfs): move mkshortcut, make ll_rmdir...
...use readdir from the provider instead of calling
fast_get_direct_descendants directly on fsEntryService.

This change is prerequisite to removing FSEntryService from core.
2025-11-19 14:30:42 -05:00
Neal Shah 33a8814feb new gemini models (#1986) 2025-11-18 20:00:34 -05:00
KernelDeimos a50866ec76 dev(puterfs): move get_recursive_size to extension 2025-11-18 15:34:49 -05:00
KernelDeimos c9c745740d dev(puterfs): remove dependency on FSEntryService
This commit was ammended to fix a missing import of Context from 'core'.
2025-11-18 15:34:49 -05:00
KernelDeimos 94032ddafd move(puterfs): take PuterFSProvider out of main.js 2025-11-18 15:34:49 -05:00
KernelDeimos 0db322fda6 chore: move puterfs extension to esmodule 2025-11-18 15:34:49 -05:00
jelveh f51c0740c7 Bump puter.js version to 2.1.6 2025-11-17 12:18:40 -08:00
jelveh e894c694e6 Bump puter.js version to 2.1.5 2025-11-17 09:56:18 -08:00
jelveh 0e5ca01875 Bump puter.js version to 2.1.3 in package.json 2025-11-17 09:55:10 -08:00
jelveh 45cde630a0 puterParent on globalThis instead of window 2025-11-17 09:41:21 -08:00
Neal Shah 3fec2ed351 Move thumbnail mutation to getSafeEntry (#1980) 2025-11-16 21:38:48 -05:00
jelveh 064a5e6c67 Update OpenAI model max_tokens and cost map values 2025-11-14 23:31:53 -08:00
jelveh 968150db7e Update openrouterCostMap.ts 2025-11-14 23:24:17 -08:00
jelveh 0957dd29e7 add all gpt-5.1 models 2025-11-14 23:10:25 -08:00
Neal Shah 52978d4dd6 add puter.tools (#1973) 2025-11-14 14:16:43 -05:00
Nariman Jelveh 545b5a071e Add support for GPT-5.1 model and reasoning controls (#1967)
closes #1966
2025-11-13 19:23:04 -08:00
Toshit Chawda 849beecd4f fix: x86 not booting locally (#1959)
* fix: x86 not booting locally

* use cross instead of the host cargo
2025-11-13 21:01:48 -05:00
Neal Shah 5cad75e85a change claude service max_tokens calculation (#1962) 2025-11-13 13:29:22 -05:00
KernelDeimos 3aadaf8420 fix: explicit actor not passed to fs provider 2025-11-12 15:13:42 -05:00
KernelDeimos ba994f8d88 refactor(backend): remove PuterFSProvider from core 2025-11-12 14:51:21 -05:00
KernelDeimos 8d4f788888 dev(puterfs): move misc methods to extension
The get_capabilities and update_thumbnail methods in PuterFSProvider are
moved to the extension by this commit. This is prerequisite to the
removal of PuterFSProvider in the core.
2025-11-12 14:51:21 -05:00
KernelDeimos 2285f8b553 clean: remove unused from old PuterFSProvider
Now that most of the functionality from PuterFSProvider in core has been
moved to PuterFSProvider in the `puterfs` extension, there are a lot of
unused symbols which need to be cleaned up.

This cleanup reveals that `update_thumbnail` and `get_capabilities` are
the only remaining functions left before PuterFSProvider in core can be
fully removed.
2025-11-12 14:51:21 -05:00
jelveh 6d5f1efce4 Add support for condition image models in Together AI 2025-11-11 20:30:24 -08:00
Nariman Jelveh 7b93d7c15b Add Mistral OCR support and imrpove img2txt API (#1957)
Introduces Mistral OCR integration in backend and updates the `AIInterfaceService` and `MistralAIService` to support new OCR options and response normalization. Updates metering cost map for OCR and annotation usage. Refactors `DriverService` to support interface-specific service aliases. Expands the puter.js `AI.img2txt` API to support flexible options and provider selection, including Mistral OCR.
2025-11-11 17:06:44 -08:00
KernelDeimos fdc8582dde clean: remove log 2025-11-11 19:22:41 -05:00
KernelDeimos 705901fd2b fix: references to global_config in puterfs 2025-11-11 19:22:41 -05:00
KernelDeimos ea3dbcd411 dev(puterfs): move write_overwrite to extension 2025-11-11 15:32:03 -05:00
KernelDeimos a2cebf8c5b refactor(backend): migrate FileCacheService
FileCacheService was still a legacy service extending AdvancedBase. This
commit changes it to extend BaseService and implement the lifecycle
methods consistent with other services. This is a prerequisite for
moving write_overwrite which needs to import the service via
`extension.import` (not possible for legacy services) so that it may
invalidate file cache when a file is written to.
2025-11-11 15:32:03 -05:00
KernelDeimos bd81c533bc dev(puterfs): move write_new to extension 2025-11-11 15:32:03 -05:00
KernelDeimos 689fb91a0e dev(extensions): expose extension.errors API 2025-11-11 15:32:03 -05:00
Het Savani 2b8081d100 Fix: missing published/attached website icon for folder on different views (#1764) (#1945) 2025-11-10 22:28:10 -08:00
Neal Shah bb2c78ae2d Add failsafe incase max_tokens is 0 or negative for a model (#1954) 2025-11-09 19:22:34 -05:00
Neal Shah 3c3367ca52 Autodiscover ollama support (#1953) 2025-11-09 18:51:07 -05:00
Neal Shah 0077944bd4 Openrouter reasoning fixes (#1951)
* Fix for OpenRouter reasoning models
2025-11-09 15:33:36 -05:00
vipul264og 65c213f9a7 Add Punjabi (ਪੰਜਾਬੀ) translation README (#1944) 2025-11-09 00:25:19 -08:00
KernelDeimos 47f7c1146e tweak(apitest): reduce benchmark size
We want this to be fast enough that this benchmark doesn't take a long
time, but part of the effort of making it faster will be running the
benchmark repeatedly, and if it takes a long time then it will take
longer for us to make it faster.

This commit reduces the benchmark size for stat_intensive and
write_intensive so that they don't take several minutes to complete.
2025-11-09 00:37:23 -05:00
Hariz S. 7d78381fe1 Re-add direct download via URL parameter (#1914)
* Re-add direct download via URL parameter

* Add comments

* Confirm before downloading remote file

* Allow aborting remote downloads

* Preemptively add AbortController to fetch call
puter.net.fetch currently doesn't support it (yet!)

* Add filename to download dialog/progress dialogs
2025-11-07 23:32:06 -08:00
Eric Dubé e5e242512f Revert "docs: add complete French translation of README (#1936)"
This reverts commit cb60b0b1d8.
2025-11-07 17:53:48 -05:00
KernelDeimos 54310ad0ab chore: remove rollup, always use webpack
These two issues have affected us, but go away without rollup:
- https://github.com/npm/cli/issues/4828
- https://github.com/rollup/rollup/issues/6168

We can just use webpack instead; it has never caused build/npm issues.
This migration was done using AI, by pasting error messages over and
over again until everything worked. Since we're not actively working on
terminal and phoenix (dependents of rollup) currently it doesn't make
sense to focus on doing this migration manually, and any errors not
observed in basic use can be remedied later.
2025-11-07 17:17:54 -05:00
Daniel Salazar 7e21aad986 docs: prefix together ai model (#1939) 2025-11-07 12:23:56 -08:00
vipul264og cb60b0b1d8 docs: add complete French translation of README (#1936)
- Added a full French translation of the main README.
- Preserved all formatting, links, code blocks, and HTML elements.
- Ensures feature parity with the English version for French-speaking users.
2025-11-07 08:11:49 -08:00
Daniel Salazar 3592c4bfe8 chore: ts lint stuff (#1934) 2025-11-06 15:26:40 -08:00
KernelDeimos e602e5f6cc ux(gui): use standard color picker in theme dialog 2025-11-06 18:05:59 -05:00
KernelDeimos 8c9dfb880f dev(puterfs): move readdir to extension 2025-11-06 17:14:09 -05:00
KernelDeimos 7988dc9adf dev(puterfs): move 'move' to extension 2025-11-06 17:14:09 -05:00
Daniel Salazar 5d1d5125ab performance: batch metering service usage increments when relevant (#1930) 2025-11-06 12:32:47 -08:00
Nariman Jelveh c21b0a1f6e Revert "feat: Settings and modal UI/UX improvements (#1828)" (#1931)
This reverts commit 191916321b.
2025-11-06 11:32:56 -08:00
Utku 191916321b feat: Settings and modal UI/UX improvements (#1828)
* feat: comprehensive settings and modal UI/UX improvements

Redesigned settings interface and modal windows with improved visual
hierarchy, spacing, and modern styling throughout the application.

Settings UI improvements:
- Enhanced section headers with proper flexbox layout and centering
- Simplified storage usage display to single percentage with clearer info
- Improved settings cards with consistent spacing and hover states
- Redesigned session manager with horizontal card layout
- Reordered account settings (username → email → password)
- Removed duplicate password option from security tab

Form and input improvements:
- Increased container padding (20px → 24px) for better breathing room
- Tightened label-to-input gap (8px → 6px) for better visual grouping
- Enhanced labels with bolder weight (500 → 600) and refined color
- Larger input fields (12px 14px padding) with smoother corners (6px)
- Added hover states with border color transitions
- Removed distracting box-shadow focus rings across all inputs/selects

Button improvements:
- Modernized primary buttons with solid colors (removed gradients)
- Added flexbox centering for consistent text alignment
- Reduced button text size (13px) for cleaner appearance
- Improved default button styling with refined gray palette
- Better active/hover state transitions

Select dropdown improvements:
- Custom SVG chevron arrow with proper 12px right spacing
- Fixed select resizing issue on focus (removed global border/padding override)
- Full-width selects in modals with consistent styling
- Smooth hover states without size changes

Modal windows:
- Consistent 380px width for form modals, 400px for desktop bg settings
- Unified .settings-form-container class across all modals
- Proper ARIA labels and semantic HTML structure
- Error/success messages with refined colors and better contrast

Desktop background settings:
- Color blocks increased to 32px for easier interaction
- Fixed focus outline clipping with proper overflow handling
- Removed scale effects for cleaner interactions
- Flexbox layout for color grid with proper spacing
- Fixed palette icon display with inline background image

Window chrome:
- Increased default shadow (0 12px 24px, 0.12 opacity)
- Enhanced active window shadow (0 16px 40px, 0.18 opacity)
- Better visual depth and window hierarchy

File organization:
- Moved UIWindowManageSessions to Settings folder
- Created helpers/build_settings_card.js for reusable components
- Updated all imports to reflect new structure

* bring back shadow

* improve 2fa + fix theme not changing on cancel bug + fix couple more issues

* style polish

* remove unused styles

* i18n

* fix search bar clipping

* group reset & customize color buttons

* more polish

* enforce min width/height on resizable

* resizable settings and show full name on hover

* style tweaks
2025-11-06 10:14:32 -08:00
2400032286 ac47753879 Fix formatting: Add space after slash in German translation (#1925)
Changed 'German/ Deutsch' to 'German / Deutsch' to match the formatting style of all other translation entries in the list.
2025-11-06 10:08:10 -08:00
Reynaldi Chernando 03860ab779 Add missing puter env enums (#1926) 2025-11-06 10:07:52 -08:00
Nariman Jelveh 12e88e2c04 Revert "Add hindi readme (#1927)" (#1929)
This reverts commit b3f8e11be9.
2025-11-06 10:07:31 -08:00
Nariman Jelveh e4d60670a3 Revert "Add hindi readme (#1927)" (#1928)
This reverts commit b3f8e11be9.
2025-11-06 10:03:40 -08:00
PARTH PRATYUSHandsirparth b3f8e11be9 Add hindi readme (#1927)
* Added Hindi translation of README

* Added Hindi translation of README

---------

Co-authored-by: sirparth <[email protected]>
2025-11-06 10:03:24 -08:00
KernelDeimos 117eda190f dev(puterfs): move copy_tree to extension 2025-11-05 20:09:58 -05:00
KernelDeimos 2b22406181 dev(puterfs): move stat to extension 2025-11-05 20:09:58 -05:00
KernelDeimos 6a2cac5d57 fix: incorrect implementation of ll_mkdir
When ll_mkdir functionality was moved to PuterFSProvider, ACL and FSLock
concerns were erroneously moved into PuterFSProvider. The intended
design has ll_mkdir responsible for ACL and FSLock, and providers should
never be responsible for ACL.
2025-11-05 20:09:58 -05:00
Daniel Salazar 045ef0a4e7 chore: type fixes (#1920) 2025-11-05 16:32:36 -08:00
KernelDeimos 1877a26c6b dev(puterfs): move mkdir to extension
An important note: it was noticed during this change that mkdir in
PuterFSProvider implements its own ACL check, instead of the ACL check
being performed in ll_mkdir. This means permissions won't be checked for
other implementors of mkdir! This needs to be fixed before custom
filesystem implementations can be considered production-ready.
2025-11-05 19:22:10 -05:00
KernelDeimos 33cba30124 clean(backend): process.exit(1) -> throw new Error 2025-11-05 19:22:10 -05:00
KernelDeimos acb9c4660c dev(puterfs): move quick_check to extension 2025-11-05 19:22:10 -05:00
KernelDeimos f2ad7ddfb5 dev(puterfs): move read to extension 2025-11-05 19:22:10 -05:00
Daniel Salazar 0fd7100795 fix: allow mysql json object response (#1918) 2025-11-05 15:22:46 -08:00
KernelDeimos 656a01f2fa fix: error calling .startsWith on null mime_type
According to the package documentation: https://www.npmjs.com/package/mime
> null is returned in cases where an extension is not detected or recognized

This call to `.startsWith()` was causing an exception to be thrown upon
right-clicking files without an extension, making it impossible to fix
them.
2025-11-05 18:13:15 -05:00
KernelDeimos 75073403f8 clean: remove rmnode and lint PuterFSProvider 2025-11-05 16:06:35 -05:00
KernelDeimos 215bc9020b lint: configure eslint not operator spacing
The styleguide for Puter's backend expects spaces after top-level not
operators inside conditions. This commit adds an AI-generated eslint
plugin and, since it conflicts with the existing space-unary-ops plugin
from stylistic, also adds a wrapped version of space-unary-ops that
ignores top-level not operators so that this plugin will work as
expected.
2025-11-05 16:06:35 -05:00
KernelDeimos e8d9b7b35d dev(puterfs): move rmdir to extension 2025-11-05 16:06:35 -05:00
jelveh 3b3b9d0ee0 closes #1911 2025-11-05 07:58:20 -08:00
Nariman Jelveh cbbc4ce359 improve window snap logic to have delayed trigger 2025-11-04 21:44:10 -08:00
Daniel Salazar 490cd45336 fix: bad wrapper wrap (#1908) 2025-11-04 20:16:14 -08:00
KernelDeimos d7ea6769cb fix: check if system_prompts is an empty array
It was assumpted that `system_prompts[0]` could not be undefined which
is not accurate because sometimes there are no system prompts.
2025-11-04 22:32:57 -05:00
KernelDeimos b853383c6e clean: remove debug log from puterfs.unlink 2025-11-04 21:32:41 -05:00
KernelDeimos a5c26eaece clean: remove verbose log for getUserSubscription 2025-11-04 21:32:41 -05:00
KernelDeimos a0ff03b13d dev: implement unlink in puterfs extension 2025-11-04 21:32:41 -05:00
KernelDeimos 24b1570007 refactor: make TraceService a proper service
This service was registered within FilesystemService for legacy reasons
but now it needs to be accessed by an extension. In order for the
extension import to work as expected this service needs to be registered
at the same phase as other services.
2025-11-04 21:32:41 -05:00
KernelDeimos e7357054b0 fix: undefined svc_fs
This fixes PD incident Q3ZNFWILVOFKU3. This issue was not caught in
testing - in fact after deleting a user the files were deleted as
expected, but it's unclear to me how I observed that with this issue
present.
2025-11-04 21:32:41 -05:00
KernelDeimos 4b959f3f4b dev: add proxy for PuterFSProvider
This temporary proxy provider will allow methods of the puterfs
filesystem type to be moved to an extension incrementally instead of all
at once. See comment above the class for a more detailed explanation.
2025-11-04 21:32:41 -05:00
Daniel Salazar 5ff8c7e040 feat: rawBody parser, user metadata column + other misc fixes (#1904) 2025-11-04 18:19:55 -08:00
KernelDeimos cc7369d9d7 fix: also check this.entry.id when checking mysql_id
There is a case where this.entry.id has a value in FSNodeContext while
this.mysql_id does not. I was under the impression that this state was
not possibole. The cause of this eludes me. This commit does not correct
the root cause - it only adds a workaround to this issue by falling back
to this.entry.id if this.mysql_id is `undefined`.
2025-11-04 21:05:16 -05:00
KernelDeimos a44e1fc074 fix: access internal ID without assuming fetch
It might not be okay to assume an fsentry was already fetched when
updating the accessed time in ll_read. I'd like to know what changed
this to make this be the case, if it happens to be the case.
2025-11-04 20:34:44 -05:00
KernelDeimos 19314d6496 sync: implement read in MemoryFS 2025-11-04 13:58:46 -05:00
KernelDeimos 875ecc051b clean: remove dead code from ll_write
The `_storage_upload` method in ll_write.js is no longer used, which
also means the LLWriteBase class is no longer necessary.
2025-11-04 13:58:46 -05:00
KernelDeimos d936fc47b0 dev: move read implementation to PuterFSProvider 2025-11-04 13:58:46 -05:00
KernelDeimos db8f45f386 fix: rm another ref to storage, rm dupe meter
There were two references to `storage` in file.js but the search string
I used only detected one of them. I was looking for more references to
`storage` when I found this one. Also, I realized the metering updates
in file.js become redundant if ll_read is used instead so I've removed
those as well.
2025-11-04 13:58:46 -05:00
Nariman Jelveh f823eddfa5 make together.ai image and video models work! (#1881)
* make together ai image models work!

* add video models too!

* add costmaps for together ai image and video
2025-11-03 19:13:39 -08:00
Neal Shah aa8860b3ea Add cache_control support and haiku 4.5 (#1897)
* Add cache_control support and haiku 4.5
2025-11-03 17:52:03 -05:00
Nariman Jelveh 9ae4e7227b Revert "fix(i18n): complete and clean up German translation (#1893)" (#1898)
This reverts commit 4e91774b95.
2025-11-03 14:33:42 -08:00
POLKAM ARAVIND 4e91774b95 fix(i18n): complete and clean up German translation (#1893) 2025-11-03 14:33:25 -08:00
Reynaldi Chernando c82a7a0bf9 Add monthly and detailed app usage types (#1843) 2025-11-02 17:51:25 -08:00
jelveh 52751d5002 make Settings window resizable
fixes #1852
2025-11-02 14:52:10 -08:00
Daniel Salazar 85432c886e fix: adding more benign changes (#1891) 2025-11-02 06:48:56 -08:00
Daniel Salazar 11d2515cb2 fix: ts issue when building for deploy (#1890) 2025-11-02 06:36:02 -08:00
Daniel Salazar e8e8fa92c2 cleanup: more benign changes (#1889) 2025-11-02 06:30:30 -08:00
Daniel Salazar 93aaeef9e0 fix: add back non-functional changes (#1888) 2025-11-02 06:17:59 -08:00
Daniel Salazar 758bef0582 Revert: commits for user metadata changes (#1887) 2025-11-02 06:09:13 -08:00
Daniel Salazar 823c06c371 fix: don't set metadata until migration (#1886) 2025-11-02 04:42:08 -08:00
Daniel Salazar 89a3a3228f fix: bad amount of sql params (#1880) 2025-11-01 17:52:43 -07:00
Daniel Salazar 98cf4bbb08 fix: bad amount of sql params (#1879) 2025-11-01 17:48:54 -07:00
Daniel Salazar 7085bcbb93 fix: bad naming (#1878) 2025-11-01 17:42:22 -07:00
Daniel Salazar 71fb04cd55 fix: allow stripe header and commit db migration (#1877)
* fix: allow stripe header

* fix: commit db migration
2025-11-01 16:16:49 -07:00
Xiaochen Cui a0cd6ed781 ci: expose server logs (#1860) 2025-10-31 15:56:49 -07:00
Xiaochen Cui 38aa9009af ci: disable job "puterjs (browser env, playwright)" (#1871) 2025-10-31 15:56:21 -07:00
Daniel Salazar 603746951b feat: ui for dev account + util decorators for controllers in extension (#1864)
* fix: IPC trigger for dev account setup + util decorators for ext controllers

* feat: allow extension to bypass json

* fix: ts building in volatile
2025-10-31 15:48:21 -07:00
KernelDeimos 7cc79077d1 fix(fs): better errors for unresolved selectors
Adds an appropriate error at a couple different levels. The first is in
FilesystemService. Callers of FilesystemService.node are expected to
provide either an absolute path or an instance of a filesystem node
selector, but there wasn't an explicit check for this so instead an
arbitrary error (read property of undefined) would be thrown. The second
is a higher-level APIError in the batch executor that's a bit more
helpful than a 500 Internal Server Error.
2025-10-31 15:26:15 -04:00
Nariman Jelveh d6a168e402 Revert "Update Norwegian Nynorsk translations in nn.js (#1859)" (#1874)
This reverts commit 783cd24e8b.
2025-10-31 11:33:20 -07:00
Palla. Gnana Sai KiranandGnanasaikiran 783cd24e8b Update Norwegian Nynorsk translations in nn.js (#1859)
Co-authored-by: Gnanasaikiran <[email protected]>
2025-10-31 11:33:06 -07:00
KernelDeimos 08e9ab399a clean: use window.sleep in place of setTimeout
Also another change to make duration handling consistent for the two
blocks of code that have the "ensure 2 seconds" logic.
2025-10-30 19:40:50 -04:00
KernelDeimos e37e009305 refactor: reduce indentation and arithmetic
This commit reduces the indentation level and complex arithmetic inside
the createTempUser function in initgui. It is suspected that this change
should greatly reduce measures of the "cognitive complexity" metric.
2025-10-30 19:03:39 -04:00
KernelDeimos 52d4ca6caf fix: according to jquery spec, this is more robust
Apparently the callback operand of $.fn.fadeOut may be called more than
once if there are multiple matching elements. Although we expect there
to only be one element matching the selector `".captcha-modal"`, someone
editing the CSS and HTML would not expect such consequences to the
logic of captcha.
2025-10-30 19:03:39 -04:00
KernelDeimos ec505366e6 fix: do not animate non-existing captcha modal
Calling `.fadeOut()` on the result of a jquery selector (i.e. the
evaluation of `$('.some-element-class')`, when it returns an object with
`length=0`) is a NOOP. That's right, it doesn't throw an error; it just
does nothing. This was preventing a temporary user from being created
when `.captcha-modal` isn't present because [the code intended to execute
after the animation] was never run. (square brackets for clarity because
the English is inherently ambiguous)
2025-10-30 19:03:39 -04:00
jelveh e70c871c4d Update ExecService.js 2025-10-30 14:55:14 -07:00
jelveh 9b7c4205fe I swear taskbar is fixed now 2025-10-30 13:02:32 -07:00
KernelDeimos c12485995a dev: restore simplification in api.d.ts
The PR I merged before putting this one up had my changes to api.d.ts
which I thought where on this branch - turns out I only thought that
because this branch had that one as a parent.

However #1818 has a simplification that this change overwrites. I'd like
to keep this simplification so this commit is restoring it.
2025-10-30 14:06:28 -04:00
KernelDeimos 571cd91380 dev: update deleteUser to use FS provider
The previous implementation of deleteUser was hard-coded to use the
PuterFSProvider file system type's storage implementation specifically,
even if a different filesystem type is mounted as root or for a
particular user.

This change was tested by creating a user, adding some fsentries, and
then deleting that user. The following classes of filesystem entry were
checked:
- [x] user created directory (with contents)
  - [x] directory fsentry was deleted
- [x] user created directory (empty)
  - [x] directory fsentry was deleted
- [x] immutable directory
  - [x] directory fsentry was deleted
- [x] user created file
  - [x] file fsentry was deleted
  - [x] file storage was deleted
- [x] user created file in trash
  - [x] file fsentry was deleted
  - [x] file storage was deleted
2025-10-30 14:06:28 -04:00
KernelDeimos 896082ba62 refactor: use ll_read in file.js
Accessing the storage object directly duplicates effort of locating the
correct filesystem provider based on the mountpoint of the file with the
contents being requested; an effort that file.js did not perform which
made it incompatible with filesystem mountpoints.

This change has been made to make it easier to move filesystem type
implementations to extensions, because accessing storage directly will
not be supported after puterfs is an extension.
2025-10-30 14:06:28 -04:00
Xiaochen Cui 831d9017de ai: return reasoning tokens in the streaming mode (#1356) 2025-10-30 10:47:30 -04:00
jelveh 5d22ad1edb Update UIWindow.js 2025-10-29 18:30:36 -07:00
Nariman Jelveh 64f86daddb feat: add speech2text (#1855)
- A new stt driver in `AIInterfaceService` and `PuterAIModule`.
- added methods for audio transcription and translation in the speech-to-text interface.
- updated cost mapping for stt models in `openAiCostMap.ts`.
- Updated permissions and interfaces to support new speech-to-text features.
2025-10-29 12:04:09 -07:00
Nariman Jelveh b6af2df257 Revert "Complete Traditional Chinese translations (#1501) (#1822)" (#1856)
This reverts commit ff7f6d7f94.
2025-10-28 23:04:29 -07:00
Arun kumarandArun24-8 ff7f6d7f94 Complete Traditional Chinese translations (#1501) (#1822)
Co-authored-by: Arun24-8 <[email protected]>
2025-10-28 23:04:10 -07:00
Nariman Jelveh 861aeddf3e feat: add OpenAI support to text-to-speech (#1853)
- added support for OpenAI as a tts provider in `AIInterfaceService` and `PuterAIModule`.
- Updated cost mapping for OpenAI tts models in `openAiCostMap.ts`.
- improved `Txt2SpeechOptions` interface to include new parameters for provider, model, and response format.
- added tests for OpenAI provider in `txt2speech.test.js` to ensure functionality.
2025-10-28 18:51:04 -07:00
Daniel Salazar 62b6582d85 feat: meter ll_read for the person reading (#1854) 2025-10-28 18:35:27 -07:00
Nariman Jelveh 0507f1782d Merge branch 'main' of https://github.com/HeyPuter/puter 2025-10-28 17:09:40 -07:00
Nariman Jelveh 507b6d343e Fix multiple issues with taskbar and windows being affected by the side panel 2025-10-28 17:09:28 -07:00
Xiaochen Cui c93a53ead2 ci: init e2e test for browser env, tidy other tests (#1796)
* ci: init e2e test for browser env

stash changes

* test: update fsentry definition, add tests

stash changes

* test: pass puter-js mkdir test

* test: add test for puter-js move

* tidy code

* tidy code

* doc: add docs for playwright test

* recover memoryfs

* test: puter-js readdir/stat

* test: puter-js write

* test: puter-js read

* test: puter-js move_cart

* test: fix failed tests on move

* tests: rename files

* test: puter-js copy_cart

* tests: puter-js batch/delete, read config from file

* ci: add vitest

* ci: update names and timeout

* ci: simplify playwright-test

* ci: simplify api-test

* move "api-tester" from tools to tests

* test: update example config

* test: remove folder tests/api-tester/ci

* test: unify config location

* test: remove unused files

* ci: fix wrong config

* ci: fix wrong path

* test: add docs

* ci: update timeout, print artifact url
2025-10-28 16:35:37 -07:00
Eric Dubé c3d66503ab dev: add /update-fsentry-thumbnail (#1794) 2025-10-28 17:31:17 -04:00
Daniel Salazar 0bb14261c2 feat: devCenter open ui message (#1850) 2025-10-28 13:41:00 -07:00
Nariman Jelveh d7f10b2205 Update call.js (#1849) 2025-10-28 13:25:07 -07:00
Daniel Salazar ff9932b2f3 fix: dbkv raw import (#1848) 2025-10-28 13:04:54 -07:00
Nariman Jelveh b1e3430a9d Set correct URL for test video in txt2vid 2025-10-27 19:00:40 -07:00
Reynaldi Chernando 117f8e393d Add UploadOptions for Puter.js types (#1832)
* Add UploadOptions

* Add name option
2025-10-27 18:15:27 -07:00
Daniel Salazar d1ae2bfe80 chore: update typedefs and fix dbkv issue (#1840)
* chore: update typedefs

* fix:dbkv decr
2025-10-27 18:13:49 -07:00
KernelDeimos cd5d0ca5dc dev(extensions): [+] puterfs (copies memoryfs)
This extension has a copy of memoryfs which is exposed as `testfs`. The
purpose of this is to register a new filesystem type from an extension
to ensure it works as expected and to get feedback on a working example.
2025-10-27 19:54:36 -04:00
KernelDeimos dda1c00614 dev(extensions): exports and types for FS 2025-10-27 19:54:36 -04:00
KernelDeimos a36b76e030 dev(extensions): event to register FS providers 2025-10-27 19:54:36 -04:00
Hariz S. 2487251bb9 Improved public folder file links (#1687)
* Don't update URL when opening public files via direct URL

* Alert user when attempting to open a nonexistent file

* Fix toolbar autohide in public file urls

* Remove extraneous debug logs

* Properly define stat var in public folder URL handling

* Update window URL when focusing an app opened through file URL

* Localize error messages
2025-10-27 15:35:11 -07:00
Daniel Salazar fd8a88b8f4 fix: lessen alert triggering for metering (#1837) 2025-10-27 12:41:48 -07:00
Nariman Jelveh 2c7343115a Add sora 2 support (#1834)
* Update OpenAI package to version 6.7.0 and add video generation capabilities

- Updated `openai` dependency in `package-lock.json` and `package.json`.
- Introduced new permissions for video generation in `hardcoded-permissions.js`.
- Added video generation service in `AIInterfaceService.js` and registered it in `PuterAIModule.js`.
- Implemented coercion for video streams in `CoercionService.js`.
- Updated driver service to include video generation.
- Added `txt2video` method and options in `AI.js` and corresponding TypeScript definitions in `index.d.ts`.

* Update openaiVideoCostMap.ts

* Revert "Update openaiVideoCostMap.ts"

This reverts commit 9e66f93605.

* change `txt2video` to `txt2vid`
2025-10-27 12:27:52 -07:00
Nariman Jelveh 5ae8ed98eb Fix issues with Settings accessibility 2025-10-26 17:42:56 -07:00
Nariman Jelveh bce244b867 Remove taskbar item animation 2025-10-26 17:12:21 -07:00
Nariman Jelveh 3720369d87 default txt2img model set to gpt-image-1-mini 2025-10-26 11:52:28 -07:00
Nariman Jelveh 5476389795 add support for gpt-image-1-mini 2025-10-26 11:33:44 -07:00
Eric DubéandNariman Jelveh b73764d210 more reliable suspended (#1696)
* fix: remove verbose parameters log

* fix: more reliable check for suspended user

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-10-25 16:27:36 -07:00
NUDURUMATI H R N PRASANNA SAVITHRUandNariman Jelveh 6edb2a30e7 chore: update phrasing based on review (#1821)
* chore: update phrasing based on review

* Update nb.js

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-10-25 16:11:40 -07:00
Nariman Jelveh 46cb188877 Update ig.js 2025-10-25 15:11:08 -07:00
Reynaldi Chernando e11182f817 Add dedupeName to CreateAppOptions (#1783) 2025-10-25 15:09:25 -07:00
Tamalampudi Siva Harsha Vardhan ReddyandNariman Jelveh 1bfdab8825 i18n(ig): translate missing entries in src/gui/src/i18n/translations/… (#1820)
* i18n(ig): translate missing entries in src/gui/src/i18n/translations/ig.js

* add missing double quotes

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-10-25 15:07:48 -07:00
Neal Shah 20601ce5e4 fix: Switch to new OpenAI Moderation model (#1826) 2025-10-24 19:13:18 -04:00
Neal Shah d0c5f12682 optimization: change for (msg.. messages) in moderation to pass in everything in one call (#1825) 2025-10-24 17:44:15 -04:00
Daniel Salazar 3fb3cf0e60 fix: simplify export import typedef (#1818)
* fix: simplify export import typedef

* feat: expose kvstore methods in the service too

* chore: update versioning
2025-10-24 12:52:58 -07:00
Eric Dubé 1a1e9e8bb2 dev: add event to mutate app origin (#1823)
* dev: add event to mutate app origin

* fix: location of app origin event
2025-10-24 14:09:13 -04:00
Daniel Salazar 219fd2274c feat: allow for unlimitedAllowList + typedefs snuck in by accident (#1813)
* feat: allow for unlimitedAllowList

* feat: add clearer types to extensions
2025-10-23 13:57:32 -07:00
XiaochenCui ce38983e73 memoryfs: fix wrong args for fs.node 2025-10-23 15:05:47 -04:00
XiaochenCui 4fdca1e47b ci: capture the error during setup 2025-10-23 15:05:47 -04:00
Nariman Jelveh c4d4bc9758 remove progwin for desktop mkdir (#1814) 2025-10-22 18:52:35 -07:00
Daniel Salazar 256189a7de feat: route for global usage aggregate (#1810)
* feat: route for global usage aggregate

* feat: add globalUsageEndpoint to puter-js

* fix: globalUsage endpoint
2025-10-22 16:46:13 -07:00
Daniel Salazar c9ab01cf1e fix: usage limited issue whens treaming (#1806) 2025-10-22 11:22:59 -07:00
KernelDeimos 5b16774a9a fix: throw error not lorem when moderation fails
Instead of switching to test mode, which responds with "Lorem Ipsum"
sample output to test the API, throw an appropriate error message for
content moderation failures. This is especially useful when OpenAI's
moderation is way way way way too aggressive as this confuses users.
2025-10-22 13:59:53 -04:00
KernelDeimos 16e7fe9851 fix: openai configuration regression
I was not able to locate a change causing a configuration regression,
however I do know AI was working in my OSS clone and that I had no
reason to change my AI configuration in my `local.json` file. In any
case, it is clear that configuration was not working as intended.

This commit fixes PuterAIModule which was not enabling OpenAI services
when `openai` was configured within the `services` block, even though
the `services` block configuration is supposed to be the recommended
configuration and the global `openai` config object is supposed to be
deprecated.

This commit also fixes OpenAIImageGenerationService which was not
accepting the current parameter name for the API key (`apiKey`) and
instead only accepted the legacy key (`secret_key`) which created this
interesting problem where using the recommended parameter name would
prevent Puter from booting successfully.
2025-10-22 13:59:53 -04:00
KernelDeimos 06d6eb83e7 doc: dependencies when moving PuterFS to extension
This commit begins the plan towards moving PuterFS to an extension. It
is first necessary to analyze the dependencies and determine which
services and modules are part of PuterFS and which ones are not.
2025-10-22 13:59:40 -04:00
KernelDeimos b80c0ba79e chore: puter.js version 2.1.1 2025-10-22 13:59:19 -04:00
KernelDeimos 547acf6988 Revert "patch version bump for puter-js and putility in it"
This reverts commit 55d07acdee.
2025-10-22 13:59:19 -04:00
jelveh 55d07acdee patch version bump for puter-js and putility in it 2025-10-22 10:44:50 -07:00
KernelDeimos d398dc90fd chore: putility patch version 1.1.1 2025-10-22 13:32:56 -04:00
KernelDeimos 4a69cd26c2 chore: putility minor version 1.1.0 2025-10-22 13:18:34 -04:00
KernelDeimos ecad29a30e sync: update license headers in putility
The `putility` package had AGPL-3.0 license headers but it should be
under the MIT license because puter.js (the SDK) depends on it.
2025-10-22 13:18:34 -04:00
Eric Dubé c375b30810 Update putility to MIT
Huh, I thought it was already...
2025-10-22 12:18:55 -04:00
Daniel Salazar 9394b5e204 docs: metering and examples (#1803)
* chore: expose meteringService methods in wrapper while not in an extension

* docs: metering and examples
2025-10-21 17:25:46 -07:00
Daniel Salazar 16fd614b84 feat: rename meteringAndBilling to metering (#1800) 2025-10-21 14:59:24 -07:00
Daniel Salazar 435d26608a feat: shard apps as well to avoid hot partitions (#1799) 2025-10-21 13:30:34 -07:00
Daniel Salazar 6bbd9bdc9f feat: limit alerting (#1798) 2025-10-21 12:50:38 -07:00
Daniel Salazar 3229fe0b61 Revert "Revert: fs metering (#1790)" (#1795)
This reverts commit 4b14ef863c.
2025-10-21 11:07:05 -07:00
Daniel Salazar 4b14ef863c Revert: fs metering (#1790) 2025-10-20 21:58:44 -07:00
Daniel Salazar 760bc22743 fix: bad acl check returning early (#1789) 2025-10-20 20:13:43 -07:00
Daniel Salazar 0260a9cbce Revert "Revert "Revert "Revert "feat: alert when going over usage limits sign…"
This reverts commit f2265cca59.
2025-10-20 18:45:08 -07:00
Daniel Salazar f2265cca59 Revert "Revert "Revert "feat: alert when going over usage limits significantl…" (#1787)
This reverts commit 0d0cdce1cf.
2025-10-20 16:51:31 -07:00
Daniel Salazar 0d0cdce1cf Revert "Revert "feat: alert when going over usage limits significantly + egre…" (#1786)
This reverts commit 54d73b1998.
2025-10-20 15:56:34 -07:00
Daniel Salazar 54d73b1998 Revert "feat: alert when going over usage limits significantly + egress meter…" (#1785)
This reverts commit 27f24118f3.
2025-10-20 15:25:52 -07:00
Daniel Salazar 27f24118f3 feat: alert when going over usage limits significantly + egress metering (#1782)
* feat: alert when going over usage limits significantly + meter egress/ingress

* fix: metering roundings
2025-10-20 13:54:21 -07:00
Nariman Jelveh eb123d873f feat: introduce PANEL_WIDTH constant and refactor UIWindow for panel handling (#1780)
Added a constant for PANEL_WIDTH to standardize panel width across the application. Refactored UIWindow logic to utilize this constant for positioning and resizing, ensuring consistent behavior when panels are open. Restored the getSnapDimensions function to adjust available dimensions based on the taskbar position and open panels.
2025-10-17 18:43:59 -07:00
Neal Shah 3184e01307 add puter.workers.getLoggingHandle (#1779) 2025-10-17 17:03:57 -04:00
Xiaochen Cui d7a0a81991 ci: avoid potential hanging via hard limit (#1778)
* ci: avoid potential hanging via hard limit

* ci: remove build phase

* ci: print tmp_password for test
2025-10-17 12:29:56 -07:00
jelveh 76dcdd4927 Refresh the stat cache regularly 2025-10-16 20:57:23 -07:00
Nariman Jelveh 0713599281 Update stat.js (#1753) 2025-10-16 20:41:40 -07:00
Reynaldi Chernando 5a8f06db9e Remove fixed width in publish website input (#1747) 2025-10-16 20:40:40 -07:00
Xiaochen Cui 103bac32d8 ci: add timeout for api-test (#1768) 2025-10-16 20:15:22 -07:00
KernelDeimos 31fa030a38 devex: use 'stars' style for webserver notice
This change is made to make notices more consistent as well as presented
in a way that works well with dark and light terminal color schemes.
2025-10-16 20:09:37 -04:00
Nariman Jelveh 8fc533338a implement an extension event for IPC messages coming in (#1776) 2025-10-16 16:52:01 -07:00
Daniel Salazar 686c2bc966 fix: permission writeback to flat kv perissions (#1774) 2025-10-16 16:30:17 -07:00
KernelDeimos 1404f10333 devex: remove verbose logging on copy and paste 2025-10-16 19:17:53 -04:00
Nariman Jelveh d2346ff1c7 cleanup usage reporting (#1772) 2025-10-16 15:25:33 -07:00
KernelDeimos 9529d87e31 devex: add log tracing feature
simply set `trace_logs` to `true` in your config and you can easily
figure out where logs are coming from.
2025-10-16 18:00:04 -04:00
KernelDeimos dc6a931a23 fix: error logs are too verbose
There were some extra logs when an error triggers an alarm that don't
need to be there.
2025-10-16 18:00:04 -04:00
KernelDeimos 294fda2433 devex: cosmetic log fixes 2025-10-16 18:00:04 -04:00
KernelDeimos 68d3ccc774 devex: misc. log changes
- removes extra log from dev socket service
- changes SYSTEM logs so they don't look like warnings
- adds optional hiding of INFO label
2025-10-16 18:00:04 -04:00
KernelDeimos da0228b19f devex: hide system actor from extension log fields 2025-10-16 18:00:04 -04:00
KernelDeimos 6cdf91fbc9 devex: add log level support for extensions 2025-10-16 18:00:04 -04:00
KernelDeimos fd602aabac devex: get extensions on the service logger 2025-10-16 18:00:04 -04:00
KernelDeimos abcb2e9580 dev: handle 'console.log' through log service 2025-10-16 18:00:04 -04:00
KernelDeimos 13a70f5394 devex: update notices and better ANSI handling 2025-10-16 18:00:04 -04:00
KernelDeimos 5e6b628491 devex: more log reduction (2) 2025-10-16 18:00:04 -04:00
KernelDeimos 77b167eb0a doc: document the dev socket 2025-10-16 18:00:04 -04:00
KernelDeimos cd279f7355 devex: more log reduction 2025-10-16 18:00:04 -04:00
KernelDeimos 3a8bab920d devex: remove logs that print when uploading 2025-10-16 18:00:04 -04:00
KernelDeimos c6dc55d362 devex: add support for 'stars' to notice() 2025-10-16 18:00:04 -04:00
KernelDeimos 0373f20de6 devex: misc. log cleanups 2025-10-16 18:00:04 -04:00
Nariman Jelveh b1f70fa63e Put some stars around the credentials box 2025-10-16 18:00:04 -04:00
KernelDeimos 8efecdec18 devex: update default admin password output 2025-10-16 18:00:04 -04:00
KernelDeimos 482d88639c doc: document log configuration 2025-10-16 18:00:04 -04:00
KernelDeimos 8f05a13918 devex: re-enable Puter logo by default 2025-10-16 18:00:04 -04:00
KernelDeimos b53dc01b45 devex: show full time in dev log output 2025-10-16 18:00:04 -04:00
KernelDeimos 0892e476bd devex: disable dev console by default, add socket 2025-10-16 18:00:04 -04:00
KernelDeimos c68457c91c devex: no more tip of the day unless you ask for it 2025-10-16 18:00:04 -04:00
KernelDeimos afea8fe80d dev: introduce NullDevConsoleService
In the prod environment there is no instance of DevConsoleService. If
methods are called on the service without a check to see if it exists,
this results in "read on undefined" errors that can only be produced in
a prod environment. This was the cause of the issue caused by the
previous log cleanup PR where it looked like "websockets were broken".
The missing undefined check is fixed by #1734, but the change in this
commit will catch future cases.

Additionally, this change will help with moving away from the dev
console.
2025-10-16 18:00:04 -04:00
KernelDeimos 75a759015c devex: introduce service-level log configuration 2025-10-16 18:00:04 -04:00
KernelDeimos 0b6b871144 devex: disable logs for missing fsentries and cache
Often fsentry stats are used to see if an fsentry exists, so fsentry not
found logs are common and expected. This commit disables those by
default. Additionally, logging for cache events is disabled as well,
since those are only helpful when debugging cache specifically.
2025-10-16 18:00:04 -04:00
KernelDeimos 441622d526 devex: make http logs configurable 2025-10-16 18:00:04 -04:00
KernelDeimos 354da08f64 clean: non-functional changes to WebServerService 2025-10-16 18:00:04 -04:00
KernelDeimos 20c9ac7539 sync: package-lock.json 2025-10-16 18:00:04 -04:00
Nariman Jelveh 00e122d3d1 cleanup usage reporting (#1771) 2025-10-16 14:29:57 -07:00
Daniel Salazar 9bdb139f7a fix: bad null check (#1770) 2025-10-16 14:00:20 -07:00
Daniel Salazar c38da86293 fix: bad math check for max consumed credits (#1769) 2025-10-16 13:56:52 -07:00
Daniel Salazar fc7a51bd2f fix: NaN value for consumedPurchaseCredits accounting (#1767) 2025-10-16 13:21:11 -07:00
Nariman Jelveh 74f583024d Improve usage report UI (#1766)
* Update style.css

* take into account credits added to monthly allowances
2025-10-16 13:03:35 -07:00
Daniel Salazar b7cee87370 feat: purchase addons logic in metering (#1765) 2025-10-16 13:02:19 -07:00
Daniel Salazar 08e26af85d feat: enforce new metering + get rid of old methods (#1762)
* feat: enforce new metering + get rid of old methods

* fix: make openrouter metering more robust
2025-10-16 10:33:17 -07:00
Daniel Salazar 15b65dab7d fix: app monthly usage details error (#1761) 2025-10-16 00:50:05 -07:00
Nariman Jelveh 61fbc45e3c Add refresh button for updating usage data in Settings (#1760) 2025-10-15 23:42:18 -07:00
Nariman Jelveh aca1292886 adjust usage table styling (#1759) 2025-10-15 18:49:12 -07:00
jelveh 206633293c Update UITabUsage.js 2025-10-15 12:35:39 -07:00
jelveh 33f9036abc usage unit format hot fix 2025-10-15 12:26:55 -07:00
jelveh 9cdcb2f108 Update UITabUsage.js 2025-10-15 12:21:24 -07:00
Nariman Jelveh ed5d629e02 Detailed usage report (#1752)
* Implement detailed usage report table

- Added `number_format` function for flexible number formatting with options for decimals, separators, and negative formatting.
- Updated `UITabUsage.js` to include a toggle for viewing driver usage details, fetching and displaying usage data dynamically.
- Improved CSS styles for driver usage details to improve layout and interactivity.

* Update style.css

* Refactor driver usage display in UITabUsage.js

- Updated UITabUsage.js to improve the layout of driver usage information, including a new header structure for better organization.
- Added CSS styles for the new header layout and adjusted existing styles for improved visual consistency and interactivity.

* fix progress bar logic
2025-10-15 12:12:45 -07:00
Daniel Salazar b4cafaa5bb fix: alowance typo (#1756) 2025-10-15 12:09:57 -07:00
Daniel Salazar 7e8842e35d feat: add alarms to meteringService if cost for service is unexpectedly 0 (#1755)
* feat: add alarms to meteringService if cost for service is unexpectedly 0

* fix: better sub checks
2025-10-15 12:05:15 -07:00
Daniel Salazar 24a51c59ae fix: metering typos (#1754) 2025-10-15 10:39:18 -07:00
Daniel Salazar e51d0c4600 feat: metering service allowence checks and subscription integration 🚀 (#1749)
* feat: metering allowence checks

* fix: bad math
2025-10-15 02:28:25 -07:00
Daniel Salazar 96a58ced29 metering: new usage endpoint + puter-js changes for it (#1738)
* metering: new usage endpoint

* metering: new usage endpoint + puter-js changes for it
2025-10-14 12:44:40 -07:00
jelveh 2819ec7b06 Update index.js 2025-10-13 00:36:15 -07:00
Nariman Jelveh 661f13fc92 improve caching mechanism by deleting specific caches on item addition in FileSystem module (#1745) 2025-10-12 19:50:48 -07:00
Neal Shah 8bf13b1b82 add guard around sending thumbnail event if thumbnail url is blank or falsey (#1744) 2025-10-12 20:18:41 -04:00
Neal Shah 9e0ba954ff fix npm pacjage not importing init.cjs (#1743) 2025-10-12 19:46:04 -04:00
jelveh 6a72c261e2 closes #1722 2025-10-12 16:28:12 -07:00
Nariman Jelveh f083e6b060 Improve puterjs caching (#1739)
* add regular cache checking for popular directories

* Update index.js

* implement `readdir` request deduplication to improve performance

* Update index.js
2025-10-11 21:03:38 -07:00
Nariman Jelveh 35507b33b7 taskbar positioning hotfix 2025-10-10 18:22:56 -07:00
Nariman Jelveh 62341aa030 Update UITaskbar.js (#1737) 2025-10-10 18:00:51 -07:00
Daniel Salazar ef6c7b17f1 metering: rest of ai (#1736)
* metering: rest of ai

* fix: wrong cost name
2025-10-10 17:58:35 -07:00
Nariman Jelveh 5a4a1f16a4 Taskbar pos (#1735)
* Update UIWindow.js

* wip

* Update UITaskbar.js
2025-10-10 17:08:57 -07:00
KernelDeimos b6e12762ce fix: missing check for dev console service 2025-10-10 15:01:07 -04:00
KernelDeimos 70c7aa41ac Reapply "Logs Update" (#1730)
This reverts commit 8f7a68ace6.
2025-10-10 15:01:07 -04:00
Nariman Jelveh 9607706d11 fix: adjust toolbar positioning for sidepanel based on taskbar location (#1731)
* fix: adjust toolbar positioning for sidepanel based on taskbar location

* fix: update window width calculation for left position based on open panels
2025-10-09 21:16:26 -07:00
Neal Shah 8f7a68ace6 Revert "Logs Update" (#1730)
* Revert "fix: quick fix for config context issue"

This reverts commit 0c06040e6c.

* Revert "sync: package-lock.json"

This reverts commit 1e1bd0f2ba.

* Revert "devex: misc log cleanup"

This reverts commit a64a786528.

* Revert "devex: minimal first page load logs"

This reverts commit 196e463c59.

* Revert "devex: minimal initialization logs"

This reverts commit ea9c222c09.

* Revert "fix: add missing await in kv example extension"

This reverts commit 9b34e67d0d.

* Revert "devex: reduce logs at init"

This reverts commit fa221149c2.

* Revert "sync: package.json changes"

This reverts commit 4db73d75a5.

* Revert "fix: remove unused AWS SDK v2 import"

This reverts commit 4d8692fd31.

* Revert "devex: hide `npm install` output unless it fails"

This reverts commit fe03a4b598.

* Revert "devex: rollup via module instead of subprocess"

This reverts commit 360082d8bd.

* Revert "devex: webpack via module instead of subprocess"

This reverts commit 1449d12b0e.

* Optional chain logger
2025-10-09 23:08:01 -04:00
Daniel Salazar 2c614b2b99 cleanup: remove auxilary return for now (#1727) 2025-10-09 19:20:52 -07:00
Daniel Salazar a3c6c0b914 Revert "revert: revert devex changes (#1728)" (#1729)
This reverts commit fc725d0130.
2025-10-09 19:16:20 -07:00
Daniel Salazar fc725d0130 revert: revert devex changes (#1728)
* Revert "fix: quick fix for config context issue"

This reverts commit 0c06040e6c.

* Revert "sync: package-lock.json"

This reverts commit 1e1bd0f2ba.

* Revert "devex: misc log cleanup"

This reverts commit a64a786528.

* Revert "devex: minimal first page load logs"

This reverts commit 196e463c59.

* Revert "devex: minimal initialization logs"

This reverts commit ea9c222c09.

* Revert "fix: add missing await in kv example extension"

This reverts commit 9b34e67d0d.

* Revert "devex: reduce logs at init"

This reverts commit fa221149c2.

* Revert "sync: package.json changes"

This reverts commit 4db73d75a5.

* Revert "fix: remove unused AWS SDK v2 import"

This reverts commit 4d8692fd31.

* Revert "devex: hide `npm install` output unless it fails"

This reverts commit fe03a4b598.

* Revert "devex: rollup via module instead of subprocess"

This reverts commit 360082d8bd.

* Revert "devex: webpack via module instead of subprocess"

This reverts commit 1449d12b0e.
2025-10-09 18:43:03 -07:00
Daniel Salazar c0d96c7e97 fix: openrouter usage calculator (#1725) 2025-10-09 17:12:48 -07:00
KernelDeimos 0c06040e6c fix: quick fix for config context issue
I don't know what causes this
2025-10-09 19:39:02 -04:00
KernelDeimos 1e1bd0f2ba sync: package-lock.json 2025-10-09 19:39:02 -04:00
KernelDeimos a64a786528 devex: misc log cleanup 2025-10-09 19:39:02 -04:00
KernelDeimos 196e463c59 devex: minimal first page load logs 2025-10-09 19:39:02 -04:00
KernelDeimos ea9c222c09 devex: minimal initialization logs 2025-10-09 19:39:02 -04:00
KernelDeimos 9b34e67d0d fix: add missing await in kv example extension 2025-10-09 19:39:02 -04:00
KernelDeimos fa221149c2 devex: reduce logs at init
Moves more logs to debug level, removing a few that were unnecessary.
2025-10-09 19:39:02 -04:00
KernelDeimos 4db73d75a5 sync: package.json changes 2025-10-09 19:39:02 -04:00
KernelDeimos 4d8692fd31 fix: remove unused AWS SDK v2 import
This was done to reduce init logs by removing the AWS SDK v2 deprecation
notice from the output.
2025-10-09 19:39:02 -04:00
KernelDeimos fe03a4b598 devex: hide npm install output unless it fails
Since extensions are loaded as packages, the `npm install` outputs can
get very verbose. This change reduces log noise when Puter initializes.
2025-10-09 19:39:02 -04:00
KernelDeimos 360082d8bd devex: rollup via module instead of subprocess 2025-10-09 19:39:02 -04:00
KernelDeimos 1449d12b0e devex: webpack via module instead of subprocess
This was really really really (100 more "really"s) tedious compared to
what I had expected.
2025-10-09 19:39:02 -04:00
Daniel Salazar 248b199fa3 feat: add openrouter metering (#1724)
* feat: add openrouter metering

* fix: models promise await parenthesis

* fix: openRouter name for metering
2025-10-09 16:36:21 -07:00
Neal Shah 3703f7e14f Add in events for thumbnails (#1700) 2025-10-09 17:07:22 -04:00
Daniel Salazar 5450c85b3a fix: bad boolean check (#1721) 2025-10-09 11:15:47 -07:00
Nariman Jelveh 5a9284a2cb Update UIWindow.js (#1720) 2025-10-09 09:49:57 -07:00
Nariman Jelveh abc8d7fcce Npm run test puterjs (#1719)
* chore: add http-server as a dev dependency and update package scripts

* refactor: move maximized window positioning logic to UIWindow and remove from UITaskbar
2025-10-08 22:14:42 -07:00
Nariman Jelveh 6fdea68eec chore: add http-server as a dev dependency and update package scripts (#1718) 2025-10-08 19:13:05 -07:00
Daniel Salazar eea27be8eb fix: metering service global write and open ai default model (#1717) 2025-10-08 18:41:15 -07:00
Daniel Salazar 73a24af951 feat: meter claude ai (#1716)
* feat: meter claude ai

* fix: claude meteringService dep
2025-10-08 17:49:12 -07:00
Xiaochen Cui 89ad06afae ci: fix failure by upgrading library (#1713) 2025-10-08 17:17:37 -07:00
Daniel Salazar 3df1d31a37 fix: broken open ai moderation (#1714) 2025-10-08 16:41:32 -07:00
KernelDeimos e59f4e6c16 devex: reduce webpack verbosity 2025-10-08 19:25:53 -04:00
KernelDeimos 74ceb2fa1b devex: move more init logs to debug
Removes init/construct logs, moves many boot logs to debug level,
introduces debug level in BootLogger, moves "CONFIGURATION MUTATED AT
RUNTIME" message to debug level and allows config.js to output logs to
the standard logger in context.
2025-10-08 19:25:53 -04:00
KernelDeimos cae50b8859 dev: add experimental parallel init emit
This is put behind a flag for now because potential bugs that may arise
from this change are difficult to locate or predict.
2025-10-08 19:25:53 -04:00
Nariman Jelveh 64cfa8158d feat: immprove UIPopover and UIWindow behavior for sidepanel visibility (#1711)
- Adjust `UIPopover` positioning when a sidepanel is visible.
- Update `UIWindow` to manage visibility states and adjust toolbar positions accordingly.
- Modify CSS for AI Button to change z-index for better layering.
2025-10-08 15:40:14 -07:00
askmanu[bot] 0270b64bc4 Added reference documentation for: src/backend/src/modules/puterai/lib/Messages.js 2025-10-08 16:52:11 -04:00
askmanu[bot] 4fb06d3b3e Added reference documentation for: src/backend/src/modules/puterai/lib/GeminiSquareHole.js 2025-10-08 16:52:11 -04:00
askmanu[bot] aed3ce7ed7 Added reference documentation for: src/backend/src/modules/broadcast/connection/CLink.js 2025-10-08 16:52:11 -04:00
Daniel Salazar 248b38e732 fix: undefined alias array (#1709) 2025-10-08 13:12:58 -07:00
Daniel Salazar 0acb884ed0 feat: meter open ai (#1703)
* feat: meter open ai

* fix: dep injections & moderation

* feat: add paging
2025-10-08 12:58:05 -07:00
jelveh a70a621dd5 Update style.css 2025-10-08 12:33:56 -07:00
Nariman Jelveh 508ed920f6 Update globals.js (#1702) 2025-10-07 15:23:56 -07:00
Nariman Jelveh b02e6c86b0 Update helpers.js (#1701) 2025-10-07 14:36:02 -07:00
Daniel SalazarandNariman Jelveh d9c64a9378 feat: manage permission for user to user and dev to app file sharing (#1567)
* perf: move user-user perm checks to flat kv entries

* feat: manage permission for user to user and dev to app file sharing

* fix typings cuz macos sucks

* fix: mac os typecase

* fix: chore macOs typecase

* fix: bad join of permissions

* feat: add check-permissions endpoint for checking an users perms

* Add 'manage' to permission lists in the Sharing dialog

* fix: manage being allowed through our ACL

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-10-07 13:46:00 -07:00
Daniel Salazar 6d35496252 chore: publish npm (#1698)
* chore: bump puter-js version and publish

* chore: package-lock
2025-10-07 11:56:18 -07:00
Daniel Salazar 2a2a1f6a99 fix: backward compatibility for puter kv incr/decr (#1697) 2025-10-07 11:39:23 -07:00
KernelDeimos 44522f0a22 fix: remove verbose parameters log 2025-10-07 02:31:35 -04:00
Nariman Jelveh 70cde54f80 Update LogService.js 2025-10-06 22:16:53 -07:00
Nariman Jelveh dfccbdccce Update LogService.js 2025-10-06 21:58:14 -07:00
Nariman Jelveh 84a28b9637 Sidepanel (#1694)
* add AI side panel to UIDesktop

* integrated `UIAIChat` component into `UIDesktop` for AI interactions.
* added styles for AI side panel, including buttons and chat message formatting in style.css, enhancing user experience with AI features.

* add support for window-based side panels

* remove window resizing logic that is simply broken

* whitelisting added

* Add `showWindow` and `hideWindow` methods to Puter.js
2025-10-06 18:40:44 -07:00
Daniel Salazar e3f9455cae test: vitest tests for puter js (#1693) 2025-10-06 15:00:40 -07:00
Daniel Salazar f06bec4cd4 feat: extract and centralize cost maps (#1691) 2025-10-06 14:52:09 -07:00
ProgrammerIn-wonderland 44fcb5800b fix: options.no_options_auth should be optional chained 2025-10-06 13:46:57 -04:00
KernelDeimos a5fa16b7bb fix: preflight issue with protected endpoints
When /user-protected/change-password (and presumably other endpoints
under /user-protected) receive a preflight request they respond with
HTTP status 401. This is because `.use()` calls on the router apply to
all request methods erroneously.

This commit fixes the issue. Further investigation is required to
determine when preflight requests started happening on this endpoint.
2025-10-06 11:31:21 -04:00
Rajeshwar Singhandjelveh 3120d6a057 feat(Translation): added support for Armenian and also added Bulgarian (Closes #1523) (#1676)
* feat(Translation): added support for Armenian and also added Bulgarian

* fixed

* add license header to bg.js

* Update package-lock.json

---------

Co-authored-by: jelveh <[email protected]>
2025-10-05 22:59:58 -07:00
ProgrammerIn-wonderland 82732b9e96 Safari fix for TLS connections in puter 2025-10-05 02:06:36 -04:00
Nariman Jelveh 5b09dbb1f5 Update UIDesktop.js (#1682) 2025-10-04 18:14:54 -07:00
Nariman Jelveh 4dae0d6370 I18n for sys dirs (#1679)
* improve UIItem and UIWindow to support internationalization for system directory names. Updated UIItem to display localized names for trash, desktop, home, documents, pictures, videos, and public directories. Modified UIWindow to set the window title using localized names for the desktop and home paths.

* refactor UIWindow to use i18n for system directory titles. Updated window title settings for desktop, documents, pictures, videos, public, and trash paths to use localized names, improving user experience across different languages.
2025-10-04 13:04:31 -07:00
Nariman Jelveh 2cedb05a8a add option to automatically set window title to opened file's name (#1678)
* add option to automatically set window title to opened file's name

A new checkbox in the app edit section to allow users to automatically set the window title to the name of the opened file. Updated related functions to handle this new setting, ensuring it is saved and reset correctly.

* Update launch_app.js
2025-10-04 12:13:57 -07:00
gulizar ElhalilandNariman Jelveh 3d44609d80 Update ku.js (#1677)
* Update ku.js

translation has been added.

* Update ku.js

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-10-04 11:24:04 -07:00
KernelDeimos 74430da673 style: small change to test deploy
Arbitrary whitespace change just to test something.
2025-10-03 21:36:44 -04:00
Eric DubéandDaniel Salazar 4eaba05136 chore: update package-lock.json with npm v11.6.1
* try: update package-lock.json from Linux/x86 on 11.6.1

* darwin

* darwing

* dev: try updating rollup

* try: npm 11.6.1 delete package-lock.json and run `npm i`

* push darwin pacakge lock

* sync: package-lock.json with npm 11.6.1

---------

Co-authored-by: Daniel Salazar <[email protected]>
2025-10-03 20:18:13 -04:00
Nariman Jelveh db66fecadf Update style.css (#1671) 2025-10-03 16:24:44 -07:00
Nariman Jelveh 44bc7b7437 Replace "Save As..." with i18n('Save As…') (#1670) 2025-10-03 15:54:43 -07:00
Nariman Jelveh cc8a658122 Update UI.js (#1668) 2025-10-03 14:59:23 -07:00
KernelDeimos 39fdcec9bf fix: add missing utilities.js 2025-10-03 17:12:41 -04:00
KernelDeimos 9c5b96305a example(extensions): [+] example-kv 2025-10-03 16:53:23 -04:00
KernelDeimos 9ff59d9290 fix: system actor for extension lifecycle events
Using services such as `kv` which expect an actor in context would not
work in a handler for a lifecycle event such as `'init`' in an
extension. In core backend modules is it generally expected that if a
user actor is not in context a backend service will explicitly specify
that the system actor should be used with the `su` service's `sudo`
method. We cannot require extension developers to add this wrapping code
whenever they want to use kv.

In the future it might be better to have a specific "ExtensionActorType"
for this purpose.
2025-10-03 16:53:23 -04:00
ProgrammerIn-wonderland f60e02565f add conditional type overload for streaming 2025-10-03 16:38:44 -04:00
Kishan_Singh 1affbb4cc8 fix: support async iterator for AI chat streaming mode in types 2025-10-03 16:38:44 -04:00
Hariz 4eab7167e6 Disable browser context menu on launcher popover (#1648)
* Disable browser context menu on launcher popover

* Allow system context menu on launch search bar

* Remove extraneous debug log
2025-10-02 20:40:42 -07:00
Daniel Salazar 4a1aee0713 fix: increment for non-existent keys (#1649) 2025-10-02 15:51:56 -07:00
KernelDeimos 36b30ebf57 dev(extensions): [+] extension-examples:ii:hello-world 2025-10-02 18:35:20 -04:00
KernelDeimos aef8227454 doc(extensions): data import 2025-10-02 17:00:51 -04:00
KernelDeimos 54b8990c70 devex(extensions): simplify kv get and set methods
The basic `.get()` and `.set()` calls should be the same between
persistent key-value store (puter-kvstore) and in-memory cache (kv.js).
This commit wraps these methods to support the "shorthand" usage.
2025-10-02 16:53:59 -04:00
KernelDeimos b9f42f6daa fix: PayloadTooLargeError for JSON + base64 images
The `/drivers/call` endpoint hangs when the JSON middleware produces
(or, is going to produce?) a PayloadTooLargeError. Increasing the limit
avoids this issue for typical use.
2025-10-02 15:41:09 -04:00
Dan Tran a17ab22ab7 feat: Add missing Vietnamese translations (#1641) 2025-10-02 10:18:43 -07:00
Daniel Salazar cc3b0db6b1 feat: initial metering service supporting monthly tracking of service consumption (#1630) 2025-10-01 14:04:36 -07:00
KernelDeimos 36ddad0ecc lint: add config global to extensions 2025-10-01 16:58:46 -04:00
KernelDeimos 7137d1a178 doc: permission grant in extension drivers 2025-10-01 16:57:44 -04:00
KernelDeimos bfffdfdc36 doc(extensions): exports not front-and-center
The extension documentation mentions imports and exports together very
early on, but extension exports should be used sparingly. I suspect most
extensions with exports will be among Puter's builtin extensions.
2025-10-01 16:47:56 -04:00
KernelDeimos 9946d2ffc5 dev(extensions): event for extensions to grant permst 2025-10-01 16:46:59 -04:00
KernelDeimos 574088ea55 doc: improve extension documentation
- describe extension events
- link drivers documentation
2025-10-01 16:03:24 -04:00
KernelDeimos ec8111cc2f dev(extensions): improved configuration support
Extensions now read configuration objects under the "extensions" block
in the backend configuration. Additionally, a `config.json` for default
values directly in the extension's directory is now supported.
2025-10-01 15:29:13 -04:00
Yukirin 94c0490f34 Update id.js (#1638)
Added missing translations and re-translated some of existing translations
2025-10-01 10:46:43 -07:00
KernelDeimos 887536b811 fix: cleanup EngPortalService commands
- removes commands from EngPortalService that were previously moved to
  ParameterService
- renames `eng:test` to `eng:list-operations`

Closes #1624
2025-10-01 13:17:04 -04:00
Daniel Salazar 5b3bc9ddf4 fix: permission batch get (#1637) 2025-09-30 20:17:01 -07:00
biranzegelman97andNariman Jelveh 916f419e0f added missing hebrew translations + fixed some existing translation + changed he.js export variable from en to he (#1634)
* added missing hebrew translations + fixed some existing translation + changed he.js export variable from en to he

* remove "Missing translations" comment?

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-30 19:16:35 -07:00
Hariz 62f5cc54cf Fix bug with context menu positioning on page load (#1636)
* Fix bug with context menu positioning on page load

* Fix double context menu bug on mobile
2025-09-30 18:58:54 -07:00
Nariman Jelveh 6ee60f9c13 Closes #629 2025-09-30 18:27:33 -07:00
HarizandNariman Jelveh 6429dcf15e Add 'Set as Desktop Background' context menu item to images (#1635)
* Add 'Set as Desktop Background' context menu item

* Use the `mime` library to detect images in the `UIItem` context menu

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-30 18:06:09 -07:00
KernelDeimos c11a4008ee doc: improve comments in hellodriver.js 2025-09-30 17:12:09 -04:00
KernelDeimos 5cc182653e doc: document creating extensions through drivers 2025-09-30 16:33:34 -04:00
KernelDeimos 057eaa46ca dev(extensions): [+] hellodriver
The hellodriver extension provides a useful interface for generating
greetings at the same time as a simple example of how to implement
drivers.
2025-09-30 16:33:34 -04:00
KernelDeimos 87f2fbf36b clean: DriverService
Removes dead code and reduces branching. In the get_service_or_throw_
method, the changes in this commit show how the branching got more
redundnat in the previous change.
2025-09-30 16:33:34 -04:00
KernelDeimos 41820baba6 dev: add extension support in DriverService
Adds new events that DriverService emits: `create.interfaces` and
`create.drivers`. Returns the functionality of the "drivers" registry,
which now expects objects provided by extensions.
2025-09-30 16:33:30 -04:00
Nariman Jelveh eaa31ba18f Update copyright headers that were translated to non-english 2025-09-30 12:54:00 -07:00
Nariman Jelveh 343f042f39 feat: add tar and untar functionality for file management
- Implemented `tarItems` function to create tar archives from selected files or directories.
- Added `untarItem` function to extract tar archives.
- Updated UI to include options for downloading and tarring files.
- Enhanced item icon handling to display tar file icons.
- Added translations for tar and untar operations.

- Fixes #1629
2025-09-30 10:35:55 -07:00
Daniel Salazar 9c47a7f8ca perf: move user-user perm checks to flat kv entries (#1562) 2025-09-29 19:41:39 -07:00
Nariman Jelveh d085568674 Delete .github/ISSUE_TEMPLATE directory 2025-09-29 18:48:35 -07:00
KernelDeimos 1c64cb274b fix(ai): try overriding timeout to disable error
The Anthropic SDK preemptively throws an error if it thinks a response
is going to take longer than 10 minutes:
https://github.com/anthropics/anthropic-sdk-typescript#long-requests

According to this documentation, overriding the `timeout` option
disables this error. In this commit the option is changed to the default
value of 10 minutes plus an additional 1 second; it is assumed based on
the documentation's phrasing that it is not necessary to make the
timeout higher but simply to specify a value.
2025-09-29 15:08:23 -04:00
KernelDeimos df6fc8a432 test: fix test kernel after adding runtimle modules
RuntimeModules (a feature for extensions) can be accessed by core
modules through a registry exposed in Context by Kernel. However,
TestKernel was not exposing this same registry which caused an error
when module installation occurred during tests.
2025-09-29 14:27:07 -04:00
jelveh 208d25f371 Update ClaudeService.js 2025-09-29 11:20:34 -07:00
Andrei Onelandaskmanu[bot] d216887fa0 doc: add comments under filesystem, modules, entitystorage
* Added reference documentation for: src/backend/src/modules/puterfs/DatabaseFSEntryFetcher.js

* Added reference documentation for: src/backend/src/modules/dns/DNSService.js

* Added reference documentation for: src/backend/src/filesystem/ll_operations/ll_write.js

* Added reference documentation for: src/backend/src/filesystem/strategies/storage_a/LocalDiskStorageStrategy.js

* Added reference documentation for: src/backend/src/om/entitystorage/WriteByOwnerOnlyES.js

---------

Co-authored-by: askmanu[bot] <192355599+askmanu[bot]@users.noreply.github.com>
2025-09-29 14:16:50 -04:00
jelveh 5caf148ae9 Update ClaudeService.js 2025-09-29 11:16:13 -07:00
jelveh 847b3a07a4 Improve item.add cache invalidation logic so that it doesn't purge the entire cache 2025-09-29 00:02:03 -07:00
jelveh a69072b31b More precise cache invalidation in case of item rename 2025-09-28 23:43:36 -07:00
jelveh fe022cff1d Back to native purge to build from first principles?! 2025-09-28 22:50:55 -07:00
jelveh 1195e319a8 update kv.js version in package.json 2025-09-28 22:05:30 -07:00
Nariman Jelveh ebb0162d79 Increase cache efficiency 2025-09-28 21:30:31 -07:00
Nariman Jelveh 7382264648 more nuanced cache invalidation strategy with logging enabled by default 2025-09-28 20:35:51 -07:00
Nariman Jelveh a965df0cc0 Remove cache expiry in puter.js 2025-09-28 19:16:29 -07:00
Nariman Jelveh 72341c78dc Update index.js 2025-09-28 18:59:44 -07:00
jelveh ef74a1a660 fix: prevent unnecessary updates on socket events
Updated the `bindSocketEvents` method to check the `original_client_socket_id` before posting updates for 'cache.updated' and 'item.renamed' events. This prevents unnecessary updates when the event originates from the same client socket.
2025-09-28 14:35:45 -07:00
jelveh f1fd372933 refactor: improve metadata handling in WSPushService
Updated the `WSPushService` to pass additional metadata during user timestamp updates and event emissions for file system operations. This includes modifications to the `_on_fs_create`, `_on_fs_update`, `_on_fs_move`, and `_on_fs_pending` methods to ensure metadata is consistently included, improving the context for GUI updates.
2025-09-28 13:43:08 -07:00
jelveh 740089aff1 fixes #1622 2025-09-27 00:03:49 -07:00
Xiaochen Cui 891093fd2b fix a typo (#1627) 2025-09-26 21:45:00 -07:00
Haitamandjelveh 733c7b638d feat: Complete missing Ukrainian, Turkish and Thai translations (#1616)
* feat: Complete missing Ukrainian, Turkish and Thai translations

* add the trailing comma

---------

Co-authored-by: jelveh <[email protected]>
2025-09-26 21:40:20 -07:00
KernelDeimos baf261c0c4 fix: check if shraed files exist in ll_readshares
This may have been breaking the ability to see directories shared by
other users sometimes.
2025-09-26 18:59:23 -04:00
KernelDeimos 088ff4d696 fix: update path when renaming during save_account
We do update the path of all child directories by calling
filesystem.update_child_paths(), but this was never done for the user's
actual home directory itself (only everything under it).

The most ideal solution would be to delegate this behavior to the move
operation instead of updating the fsentries table directly, but making
this change right now has a high risk of breaking changes since this the
behavior in this file is very old.
2025-09-26 18:44:32 -04:00
Nariman Jelveh fae33301a8 fix the issue with last_valid_ts always being 0 2025-09-26 15:05:44 -07:00
mrtbgauandNariman Jelveh b8263fd8e0 feat: add missing Persian and Finnish translations (#1614)
* feat: add missing Persian translations

* feat: add missing Finnish translations

* Remove "Missing translations" comment

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-26 15:05:04 -07:00
KernelDeimos d85f5fad5e dev: expose 'kv' as 'cache' from data extension 2025-09-26 17:31:00 -04:00
KernelDeimos d5a2a34f53 dev(extensions): add extension.use
The extension.use method allows registering routers and generic handlers
(not wrapped by eggspress) to express.
2025-09-26 17:30:09 -04:00
KernelDeimos 601eb019a2 dev(extensions): [+] data
The data extension adds convenient access to the database and kvstore
via it's 'db' and 'kv' exports.

Example usage:
  const { db, kv } = extensions.import('data');
  await kv.set('some-key', 'some-value');
  await db.write('INSERT INTO something (a, b) VALUES (1, 2)');
2025-09-26 15:28:00 -04:00
KernelDeimos 63bf4eccbe dev: make services importable by extensions
For example you can access WebServerService with
extension.import('service:web')
2025-09-26 15:28:00 -04:00
KernelDeimos 0c30a9e157 fixup! dev(extensions): [+] whoami 2025-09-26 15:28:00 -04:00
KernelDeimos dabf8cac56 fix: add missing dep to whoami extension 2025-09-26 15:28:00 -04:00
KernelDeimos 570409ef15 doc: add more extension internals documentation 2025-09-26 15:28:00 -04:00
KernelDeimos 27d7668a72 dev: '@extension name' and priority in puter.json
Adds the '@extension name <name>' directive for single-file Puter
extensions, and adds support for defining priority in 'puter.json'.
2025-09-26 15:27:59 -04:00
KernelDeimos cb31c1d44e dev: add command to list extensions
This commit adds the `extension:list` command for listing extensions.
This command is itself defined in an extension. To make this possible,
an event called 'create.commands' is emitted form CommandService with
the event object holding a function that can be used to add commands.
2025-09-26 15:27:59 -04:00
KernelDeimos 7b4c62d1c3 lint: minor formatting issue with catch(e)
The custom eslint pluggin for the formatting rule I have for the
expressions in control structures isn't a good fit when the condition is
a single variable named by a single character. This happens a lot with
`catch`. `catch ( e ) {` has too much spacing, but `catch (e) {` looks
relatively normal.
2025-09-26 15:27:59 -04:00
KernelDeimos 62e77a15a2 conf: add block in eslint.config.js for extensions 2025-09-26 15:27:59 -04:00
KernelDeimos 353cf397cb dev: remove legacy whoami and use extension 2025-09-26 15:27:59 -04:00
KernelDeimos db5aef51b0 fix: missing await in extension loader 2025-09-26 15:27:59 -04:00
KernelDeimos ebbe18f72d dev(extensions): [+] whoami 2025-09-26 15:27:59 -04:00
KernelDeimos 943a3c7bab type(extensions): config and add core.util.helpers 2025-09-26 15:27:58 -04:00
KernelDeimos 1358e98c5b devex: add some types for extension intellisense 2025-09-26 15:27:58 -04:00
KernelDeimos dde652fb27 dev: expose 'core' from useapi as runtime module 2025-09-26 15:27:58 -04:00
KernelDeimos 15cb98107c doc: add extension documentation for core devs
Extensions need to be documented at different layers of concern:
1. How to use/run extensions
2. How to create extensions as a contributor
3. How extensions work under the hood

This documentation addresses the third layer, describing how Kernel
and core modules interact with extensions.
2025-09-26 15:27:58 -04:00
KernelDeimos 4353c2dc46 dev: expose 'web' from useapi as runtime module
This will allow extensions to import from the 'web' module:
const { Endpoint } = extension.import('web');
2025-09-26 15:27:58 -04:00
KernelDeimos f6be6952dc dev: export runtime module registry to context 2025-09-26 15:27:58 -04:00
KernelDeimos b328355a90 fix: apparently setters shadow getting
I thought you could:
  method() {}
  set method (v) { /* ... /* }

but you can't. You have to:
  get method() { return (function () {}).bind(this) }
  set method (v) { /* ... /* }

I don't know why a setter can't just only shadow setting, but that's
how they designed the language. ¯\_(ツ)_/¯
2025-09-26 15:27:57 -04:00
KernelDeimos 6ff3d154fa devex: .git is not an extension
This change makes sure Kernel skips `.git` directories when scanning
for extensions. This allows me to make a git repository containing
example extensions for Puter.
2025-09-26 15:27:57 -04:00
KernelDeimos bdd60c63d8 devex: add '{repo}' variable for extension paths
Previously '{source}' was added but this is a bit difficult to work
with since it's the path from the source file, which is usually the
'src/' directory under the repository. This won't be obvious anyone
who doesn't already know this. '{repo}' just points to the path of
the repository itself.
2025-09-26 15:27:57 -04:00
KernelDeimos 06cd14353a doc: document import/export mechanism for extensions 2025-09-26 15:27:57 -04:00
KernelDeimos e271476e0b tweak: alias 'runtime' to 'extension'
Extension developers should not have to remember what comes form
where between two different globals. This change makes Extension
effectively a facade (Facade Pattern) containing the behaviors
of both extensions and runtime modules.
2025-09-26 15:27:57 -04:00
KernelDeimos 9aef281ad2 dev: add runtime modules for imports and exports
RuntimeModule is a new construct which represents the import/export
mechanism for Puter extensions. This can be thought of as analogous
to node's Module class. These are called "runtime modules" because
extensions have less control of what they're consuming than a typical
npm module; i.e. `runtime.import('database')` will provide a version
of 'database' that's compatible with the importing extension, but the
version used can't be locked or otherwise determined by the extension.
2025-09-26 15:27:57 -04:00
Xiaochen CuiandNariman Jelveh 860388c3cb update client-cache logic (#1626)
* client-cache: remove pulling

* client-cache: fix wrong ts field

* client-cache: purge cache on any local update

* client-cache: last_updated_time -> last_valid_time

* client-cache: update cache on remote update

* client-cache: update last_valid_ts every sec

* client-cache: switch to localstorage

* do the cache and purge test when `setAuthToken` is called

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-26 11:44:12 -07:00
Nariman Jelveh a0b567da52 chore: update @heyputer/kv.js dependency to version 0.2.0 and initialize cache with dbName in puter-js (#1623) 2025-09-26 10:58:16 -07:00
Daniel Salazar 3fc183297f revert: eslint config rules (#1625) 2025-09-26 10:52:00 -07:00
Daniel SalazarandNeal Shah d70d412115 feat: DAV Locks support + refactor of DAV method handler (#1486)
* feat: DAV Locks support + refactor of DAV method handler

* format: Restore old whitespace for CoreModule.js

* fix: options route registering after likecycle hooks

---------

Co-authored-by: Neal Shah <[email protected]>
2025-09-26 11:00:29 -04:00
Xiaochen Cui 7bfa85d4fe client-cache: remove pulling (#1620)
* client-cache: remove pulling

* client-cache: fix wrong ts field

* client-cache: purge cache on any local update
2025-09-25 16:56:01 -07:00
Daniel Salazar 8d36e52ae7 Merge pull request #1621 from HeyPuter/DS/main
dep: updating node dep version to one that supports modules
2025-09-25 12:17:15 -07:00
Daniel Salazar 9705c58160 dep: updating node dep version to one that supports modules 2025-09-25 12:08:36 -07:00
OnitsagandNariman Jelveh 1cff4fd46a feat: Add missing Portuguese translations (#1615)
* feat: Add missing Portuguese translations

* feat: Add missing Swedish translations

* remove missing translations comment

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-25 11:47:04 -07:00
velzie 8b9fefa4a2 fix puterjs throwing errors after consuming message events not meant for it (#1612) 2025-09-25 11:11:34 -07:00
Thomas NGUYEN 72ee05fefb feat: Add missing Urdu translations (#1618) 2025-09-25 10:58:46 -07:00
Xiaochen Cui 681c084180 client-cache: update cache-invalidation policy to ts-based comparison (#1611) 2025-09-24 18:08:09 -07:00
Nariman Jelveh 8b7e764af9 add instancesOpen to puter.js UI 2025-09-24 17:03:36 -07:00
KernelDeimos fa436a7775 devex: make it impossible to commit eslint errors 2025-09-24 17:41:48 -04:00
KernelDeimos fe1d78d5bf conf(eslint): fix backend rule, -@stylistic/quotes
This commit fixes the block that's meant to match backend files. There
was an error in the arguments for '@stylistic/indent' which was
effectively disabling the entire block. In vscode, it is very unclear
that this is happening, so I had to manually run this command:

npx eslint "src/backend/**/*.js" --debug

This commit also disables @stylistic/quotes; I disagree with this
rule for several reasons:
1. Sometimes the appropriate quote depends on the contents:
   i.e. '""""' + "''''" is cleaner than '""""\'\'\'\''.
2. If you argue that mixing quotes between concatenated strings
   (like the previous example) is a bad idea, then I can further
   state that this rule forces me to mix quotes:
   `we use a ${templateString}` + "but can't do it here"
2025-09-24 16:58:28 -04:00
Khilfi KA 99ebbfa00d Add Bahasa Malaysia (Malay) i18n Support (#1609)
* Complete Bahasa Malaysia (Malay) translation of Puter

* Fix code styling

* Add Malay README.md

* Removed dash from `sub-projek`

* Make `Library` italic

* Add Malay language to `Translations` section
2025-09-24 12:44:41 -07:00
ProgrammerIn-wonderland cf05413b83 ux: Whitelist onlyoffice applications from copy dialog in IPC 2025-09-23 18:10:54 -04:00
Daniel Salazar 25de96c8c9 Merge pull request #1607 from HeyPuter/DS/main
chore: add jsdoc typings for KV interface
2025-09-23 14:26:48 -07:00
Daniel Salazar 8cc14fece3 chore: add jsdoc typings for KV interface 2025-09-23 14:26:35 -07:00
Daniel Salazar 06f89a8a80 Merge pull request #1606 from HeyPuter/DS/main
feat: allow setting puter origin via globalThis variables
2025-09-23 14:26:17 -07:00
Daniel Salazar bf76a1edea feat: allow setting puter origin via globalThis variables 2025-09-23 13:26:12 -07:00
KernelDeimos aae3da39f8 sync: package-lock.json 2025-09-23 15:03:09 -04:00
Hariz 67be35b6a0 Don't raise window if close/minimize btn clicked (#1589) 2025-09-22 18:52:57 -07:00
Nariman Jelveh e0316b9cbe remove unnecessary console.log() 2025-09-22 16:36:48 -07:00
KernelDeimos 1ea8f9ddf1 devex: performance monitor environment variable
Instead of requiring developers to keep changes in their git index to
use the performance monitor, make it configurable through the .env
file.
2025-09-22 19:31:03 -04:00
KernelDeimos f729eaa31f fix: use dynamic import for dotenv 2025-09-22 19:30:37 -04:00
KernelDeimos 15eb44d62d feat: add optional dotenv support
This adds an optional import for 'dotenv'. If dotenv is installed
via npm then the .env file will be loaded.
2025-09-22 19:13:05 -04:00
KernelDeimos 49341321f1 dev: add option to make the database slow
Adds a configuration parameter called "slow" to database config which
adds a hardcoded delay 70ms to database operations. This is useful
when testing for performance issues.
2025-09-22 19:10:48 -04:00
jelveh b93890b008 Update package.json 2025-09-21 22:36:40 -07:00
jelveh 502ef3c32b Update README.md for Puter.js: Enhance formatting, add installation instructions, and include community links 2025-09-21 22:33:13 -07:00
dependabot[bot] 4dfdd2839f build(deps): bump webpack from 5.89.0 to 5.101.3 in /src/puter-js (#1601)
Bumps [webpack](https://github.com/webpack/webpack) from 5.89.0 to 5.101.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.89.0...v5.101.3)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.101.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-21 14:50:30 -07:00
Nariman Jelveh 32962211b4 Revert "Enhance login GUI: improve layout and add show/hide password (#1599)" (#1600)
This reverts commit 9e07fa74b7.
2025-09-21 09:53:12 -07:00
SaifAttar003 9e07fa74b7 Enhance login GUI: improve layout and add show/hide password (#1599) 2025-09-21 09:52:55 -07:00
dependabot[bot] 8e3cc68701 build(deps): bump requests from 2.32.3 to 2.32.4 in /tools/api-tester/ci (#1598)
Bumps [requests](https://github.com/psf/requests) from 2.32.3 to 2.32.4.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.3...v2.32.4)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.32.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-21 00:49:21 -07:00
Hariz 3de3c21f66 Add context menu to apps in the start menu (#1487)
* Add context menu to apps in the start menu

* Start menu context menus: Close other menus

* More bugfixes for start menu context menus

* Start menu context menus: Add/remove from taskbar

* Bugfixes for adding to taskbar through start menu

* Highlight start menu icons when ctxmenu is opened

* Close context menus on start menu kbd navigation

* Reset start menu icon state when ctx menu closed

* Fix multiple start item context menus opening simultaneously

* Remove parent argument from start icon context menus
2025-09-20 18:52:14 -07:00
Daniel Salazar 6910b41a22 Merge pull request #1595 from HeyPuter/DS/main
npm: fix publish
2025-09-19 17:22:24 -07:00
Daniel Salazar 44284eb788 fix: typedefs 2025-09-19 17:12:01 -07:00
Daniel Salazar d6fbe94364 npm: fixed publish 2025-09-19 16:52:18 -07:00
dependabot[bot] a3cbee1b58 build(deps): bump serialize-javascript in /src/puter-js (#1594)
Bumps [serialize-javascript](https://github.com/yahoo/serialize-javascript) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/yahoo/serialize-javascript/releases)
- [Commits](https://github.com/yahoo/serialize-javascript/compare/v6.0.1...v6.0.2)

---
updated-dependencies:
- dependency-name: serialize-javascript
  dependency-version: 6.0.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-19 14:28:36 -07:00
Daniel Salazar 0ef2b1c05e Merge pull request #1593 from HeyPuter/DS/main
fix: package name
2025-09-19 14:02:36 -07:00
Daniel Salazar 9d5a09f0bc fix: package name 2025-09-19 14:01:03 -07:00
Daniel Salazar 3cb9040a94 Merge pull request #1592 from HeyPuter/DS/main
npm: release to npm
2025-09-19 13:58:50 -07:00
Daniel Salazar a936333006 npm: release to npm 2025-09-19 13:58:25 -07:00
jelveh a023c24c35 Update package.json 2025-09-19 13:55:19 -07:00
jelveh 41191c65d7 Update puter.js README.md 2025-09-19 13:52:54 -07:00
Xiaochen Cui c8500ba1ab test: add puterjs test to apiteste (#1590) 2025-09-19 13:27:47 -07:00
Xiaochen Cui 9d0199f858 add apitest to github actions (#1591) 2025-09-19 13:27:32 -07:00
coluccifrancesco 0c60ebd1d0 Update it.js (#1588)
I translated the last part of the document for the italian language.
All the updates are typo-checked for errors , and there's none.
The translation has been made keeping in mind the italian use of various terms, some of the english words haven't been translated due to the extended use of the orignal term in everyday vocabulary.
2025-09-19 11:07:02 -07:00
Daniel Salazar 770e5e071e Merge pull request #1587 from HeyPuter/DS/main
ci: drop support and testing for node 18
2025-09-19 10:29:39 -07:00
Daniel Salazar 493334b030 chore: update README for puter.js to publish on npm 2025-09-19 02:34:33 -07:00
jelveh 654dfa9124 Update style.css 2025-09-18 23:03:16 -07:00
jelveh c0b03e147b add redundant readdir to cache the home dir 2025-09-18 21:03:28 -07:00
Nariman Jelveh 7000831138 make whoami return last_activity_ts 2025-09-18 19:07:53 -07:00
Nariman Jelveh 31fffb087d Refactor file system operations in GUI and puter.js to use eventual consistency (#1579)
* Refactor file system operations in GUI and puter.js to use eventual consistency for stat and readdir calls

This update modifies multiple instances of file system operations to include a consistency option set to 'eventual'. This change aims to improve performance and responsiveness by allowing for eventual consistency in file system interactions across various components, including helpers, UI elements, and IPC handling.

* Update cache expiration time for file system operations in readdir and stat to 1 hour

* feat: add network connectivity monitoring and cache purging

This update introduces a new feature that monitors network connectivity and purges the cache when the connection is lost. The implementation includes event listeners for online/offline changes and visibility changes to ensure cache consistency during network disruptions.

* clean up logs
2025-09-18 17:13:39 -07:00
Daniel Salazar 466cc113c6 ci: drop support and testing for node 18 2025-09-18 16:10:44 -07:00
software developer, self taughtandNariman Jelveh 89d5030ae3 Add missing polish translation (#1584)
* add missing polish translation

* Clean up comments in pl.js translations

Removed comments about missing translations from the Polish translations file.

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-18 13:58:35 -07:00
dependabot[bot] 5fe28ee8e2 build(deps): bump serialize-javascript and mocha in /src/terminal (#1585)
Bumps [serialize-javascript](https://github.com/yahoo/serialize-javascript) to 6.0.2 and updates ancestor dependency [mocha](https://github.com/mochajs/mocha). These dependencies need to be updated together.


Updates `serialize-javascript` from 6.0.0 to 6.0.2
- [Release notes](https://github.com/yahoo/serialize-javascript/releases)
- [Commits](https://github.com/yahoo/serialize-javascript/compare/v6.0.0...v6.0.2)

Updates `mocha` from 10.2.0 to 10.8.2
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/main/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v10.2.0...v10.8.2)

---
updated-dependencies:
- dependency-name: serialize-javascript
  dependency-version: 6.0.2
  dependency-type: indirect
- dependency-name: mocha
  dependency-version: 10.8.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-18 12:04:44 -07:00
dependabot[bot] c9c92e806a build(deps-dev): bump rollup from 3.21.4 to 3.29.5 in /src/phoenix (#1583)
Bumps [rollup](https://github.com/rollup/rollup) from 3.21.4 to 3.29.5.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG-3.md)
- [Commits](https://github.com/rollup/rollup/compare/v3.21.4...v3.29.5)

---
updated-dependencies:
- dependency-name: rollup
  dependency-version: 3.29.5
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-18 10:38:52 -07:00
dependabot[bot] 1475183b06 build(deps): bump multer from 1.4.5-lts.2 to 2.0.2 (#1582)
Bumps [multer](https://github.com/expressjs/multer) from 1.4.5-lts.2 to 2.0.2.
- [Release notes](https://github.com/expressjs/multer/releases)
- [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/expressjs/multer/compare/v1.4.5-lts.2...v2.0.2)

---
updated-dependencies:
- dependency-name: multer
  dependency-version: 2.0.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-18 10:36:39 -07:00
dependabot[bot] a9699a9f77 build(deps): bump braces from 3.0.2 to 3.0.3 in /src/terminal (#1581)
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-version: 3.0.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-18 10:28:44 -07:00
dependabot[bot] ce237b5c4a build(deps): bump form-data from 4.0.2 to 4.0.4 in /test/integration (#1580)
Bumps [form-data](https://github.com/form-data/form-data) from 4.0.2 to 4.0.4.
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.2...v4.0.4)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-18 10:26:20 -07:00
jelveh abc0d7b16c Update refresh_item_container.js 2025-09-17 16:12:35 -07:00
jelveh e4ada292f1 Update index.js 2025-09-17 15:59:24 -07:00
ProgrammerIn-wonderland 8884c7f472 fix: get rid of preflight for non-apifs readdir/stat 2025-09-17 18:57:57 -04:00
Nariman Jelveh e37166dae0 Cache is king baby! Let's go 🚀 (#1574)
* Implement the first naive version of `readdir` cache

* Purge the entire cache on every single mutation

Right now we're going to use the very naive, but safe, approach to purge the entire cache whenever there is change in the user's fs. We're going to incrementally improve this; but for now, better safe than sorry!

* Add socket event listeners to flush cache on file system item changes

This update introduces event listeners for 'item.added', 'item.renamed', and 'item.moved' events, triggering a cache flush on each event to ensure data consistency in the file system module.

* increase exp time for the cache

* Update readdir.js

* Update index.js
2025-09-17 15:36:42 -07:00
Amritpandey5andjelveh 214fd3010e added missing values (#1577)
* added missing values

* Update de.js

---------

Co-authored-by: jelveh <[email protected]>
2025-09-17 14:09:35 -07:00
aaryanandjelveh f4af6874b0 doc: added missing Dutch translations (#1575)
* doc: added missing Dutch translations
- fixes #1515

* Update nl.js

---------

Co-authored-by: jelveh <[email protected]>
2025-09-17 08:56:06 -07:00
Neal Shah b1facfbabd fix: get rid of a console log 2025-09-16 19:46:53 -04:00
ProgrammerIn-wonderland a48f3e0274 get rid of noReallyItsJson 2025-09-16 19:46:53 -04:00
ProgrammerIn-wonderland 1e620c73bc make drivers and KV also preflightless 2025-09-16 19:46:53 -04:00
ProgrammerIn-wonderland 135d7b81a4 preflightless stat/readdir 2025-09-16 19:46:53 -04:00
Nariman Jelveh 079d060747 Make templates non blocking (#1573)
* refactor: update available_templates function for non-blocking template loading

- Changed the available_templates function to initiate loading templates asynchronously without blocking the UI.
- Initialized window.file_templates with an empty array and updated it once the templates are loaded.
- Added a console log in UIDesktop to track transaction duration upon completion.

* Update UIDesktop.js
2025-09-16 14:57:01 -07:00
Nariman Jelveh 6d17385f09 add getDuration() to the Transaction class 2025-09-16 14:31:55 -07:00
Jatin SharmaandNariman Jelveh b6da8ba9ce Complete Missing Hungarian Translations in hu.js (#1572)
* Update Hungarian translations in hu.js

* Update hu.js

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-16 13:39:32 -07:00
dtakahashi333 42302b12ac fix: add Japanese translations (#1519) (#1570) 2025-09-16 12:30:09 -07:00
Thiago (Teet) b2d38e2058 Fixes to PT-BR translation (br.js) (#1568)
Fixed spelling and missing accentuations

Adjusted capitalization for consistency with other strings

Made wording more natural in PT-BR (e.g. “site” instead of “website”, “Login” instead of “Início de Sessão”)
2025-09-15 23:39:36 -07:00
KernelDeimos c588ff20d0 clean: remove logs (obvious cases)
This commit removes debug logs that meet these criteria:
- used console.log instead of the log service
- were left in the source tree accidentally
- show up at boot or during stat/readdir operations

This is not a comprehensrve removal; this is a first pass to get a
few of the trivial cases.
2025-09-16 01:12:57 -04:00
Nariman Jelveh e4c2581623 Make readdir workd with uid in addition to path 2025-09-15 20:12:45 -07:00
KernelDeimos d482d7cdf5 dev: add immutable default directories to whoami 2025-09-15 22:11:02 -04:00
Nariman Jelveh eb53b86c8a feat: add optional input image fields to AIInterfaceService
- Introduced `input_image` and `input_image_mime_type` as optional parameters in the AIInterfaceService schema to enhance image processing capabilities.
2025-09-15 16:57:38 -07:00
Nariman Jelveh 4e8aad675d feat: improve image generation and coercion for data URLs
- Updated `GeminiImageGenerationService` to differentiate between data URLs and web URLs for image handling.
- Added coercion support in CoercionService for converting data URLs to streams, including extraction of content type.
- Documented the txt2img method in AI.js to clarify usage for text and image-to-image generation.
2025-09-15 15:45:54 -07:00
KernelDeimos 6480d37ec0 fix: make optimization for is_empty conditional
Usually Puter has a UID by this point, but if it ever doesn't we can
fall back on using the path with a `LIKE ? + '%'` query. However,
users before a particular date might have fsentries without a path,
so we need to perform a check on the user's timestamp to avoid issues.
2025-09-15 18:29:10 -04:00
KernelDeimos 3af84c0647 fix: is_empty sometimes being wrong
is_empty wasn't working correctly while running concurrently with
fetchEntry because because the check in fetchIsEmpty was too
specific. This commit fixes this issue while also adding support for
a 'path' parameter to is_empty.
2025-09-15 18:29:10 -04:00
Nariman Jelveh f4fc24bce3 feat: add support for image-to-image generation in GeminiImageGenerationService
- Enhanced the `generate` method to accept base64 encoded input images and their MIME types.
- Implemented validation for input image and MIME type to ensure proper usage.
- Updated the content construction logic to handle both text-to-image and image-to-image generation scenarios.
2025-09-15 15:08:06 -07:00
BarnakandNariman Jelveh 47acb141da Updating ru.js (#1566)
* Update ru.js

Added missing translations from english to russian

* Update ru.js

* Update ru.js

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-15 12:06:03 -07:00
KernelDeimos ef76d33cc2 fix: string coercion for email verify code
Some databases will automatically do this string coercion, but others
will not. This commit ensures the value is always a string.
2025-09-15 14:56:42 -04:00
Nariman Jelveh 5121dbd300 Update PuterHomepageService.js 2025-09-15 11:28:42 -07:00
Nariman Jelveh 5e16259209 Update UIWindowDesktopBGSettings.js 2025-09-15 11:13:49 -07:00
Nariman Jelveh 2db29a01ba Default wallpeper url for prod should be the CDNed one 2025-09-15 10:58:01 -07:00
Daniel Salazar 4e563b4238 Merge pull request #1560 from HeyPuter/DS/main
fix: expiry time for dbkv
2025-09-15 10:44:21 -07:00
Leo f89f429849 Romanian Translation Done (#1565)
* romanian translation

* romanian translation
2025-09-15 09:57:18 -07:00
KernelDeimos b92a4edb83 fix: missing return for app icons on init 2025-09-15 04:31:36 -04:00
KernelDeimos 4d92f4a3ce fix: missing span name ("fn is not defined" error) 2025-09-15 04:28:51 -04:00
KernelDeimos ed5464f0c0 tmp: disable refresh_app_cache
Earlier I actually thought this wasn't running in prod because when I
run Puter locally the "refresh app cache" message doesn't appear.
I ensured that minlog was off but I forgot that around the same time
I also disabled the "tick" log level by default. If it weren't for
that I would've realized this an hour ago. That said, it's kind of
odd that this seems to be the source of the leak, because this isn't
new behavior.
2025-09-15 04:15:19 -04:00
KernelDeimos 3a0733f557 debug: add annotation class for app objects 2025-09-15 04:00:27 -04:00
KernelDeimos 7d7291cde4 fix: add unlink() methods to clear ECMAP 2025-09-15 03:19:46 -04:00
KernelDeimos 509f1add4e tmp: for now, make refresh_apps_cache a noop 2025-09-15 02:47:11 -04:00
KernelDeimos f98c78504b fix: try disabling this 30 second app cache for now
OOM conditions happening... maybe this will fix it
2025-09-15 00:12:46 -04:00
Nariman Jelveh 735f16725d refactor: make theme service non-blocking and fix captcha issues (#1564)
Replaced inline styles with CSS classes for the captcha modal to improve maintainability and readability. Adjusted JavaScript to accommodate the new structure and ensure proper functionality. Enhanced error handling and loading state management during the captcha verification process.
2025-09-14 20:20:19 -07:00
KernelDeimos 42abfcc5e7 perf: huh, right... not sure how I missed that
These two async operations depend on fetchEntry, but they do not
depend on each other; they can be run in parallel.
2025-09-14 20:40:18 -04:00
KernelDeimos 27ab23e7b1 fix: read 'push' of undefined 2025-09-14 19:01:59 -04:00
KernelDeimos f3fdfea65b perf: add 30 second app cache
There used to be an app cache here that would be invalidated but I
think this may have been removed because the invalidation logic
was causing issues. A 30 second cache seems reasonable though, so
let's do that for now.
2025-09-14 19:01:59 -04:00
KernelDeimos 733b6a653e perf: further readdir improvements 2025-09-14 19:01:59 -04:00
Daniel Salazar 860f68a9a5 fix: expiry time for dbkv 2025-09-14 12:48:25 -07:00
Aryan Arlikar 9820794470 Translate and improve emojis (#1557)
* chore(i18n/emoji): improve clarity of confirmation and name validation emojis

* chore(i18n/emoji): improve clarity of confirmation and name validation emojis
2025-09-14 12:45:54 -07:00
Watson 4c5032ff47 Update ko.js with full Korean translations (#1558)
* Update ko.js with full Korean translations

* fix: update 'public' translation from '공개' (open) to '공용' (shared) for clarity
2025-09-14 11:22:24 -07:00
Webb321andNariman Jelveh cab3d130c7 fix: add Chinese transaltions (#1559)
* fix: add Chinese transaltions

* fix: formatting

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-14 10:55:41 -07:00
KernelDeimos 094dd183b2 fix: event multiplication introduced in ebf4d7 2025-09-13 22:41:09 -04:00
KernelDeimos 7872fd58ed perf: optimize extension loader
Parallelize as much as possible, and avoid reading data from the
package.json when the file was generated by the extension loader
in the first place.
2025-09-13 22:41:09 -04:00
KernelDeimos 7730877c91 dev: add extension initialization priority 2025-09-13 22:41:09 -04:00
KernelDeimos 55c53d9eee dev: extension registry and lifecycle
Adds `register`, `registry`, `preinit`, and related symbols to the
available extension globals.
2025-09-13 22:41:09 -04:00
KernelDeimos 9135632129 dev: add support for ES6 Module extensions
Previously ES6 Module extensions would only work on versions of node
with --experimental-require-module enabled by default, and provided the
entry file had no top-level await. This commit uses "await import"
conditionally if the "type" in package.json is set to "module".
2025-09-13 22:41:09 -04:00
Daniel Salazar 0608958117 Merge pull request #1555 from HeyPuter/DS/main
fix: br.js transaltions
2025-09-13 18:14:25 -07:00
Daniel Salazar 6b05c90a21 fix: br.js transaltions 2025-09-13 18:12:57 -07:00
Daniel Salazar 740fef2306 Merge pull request #1484 from HeyPuter/DS/main
feat: logging for queries in puter js
2025-09-13 18:12:31 -07:00
Daniel Salazar 5569af8961 Merge branch 'main' into DS/main 2025-09-13 18:10:08 -07:00
AlfreThiagoandNariman Jelveh 07f97deab5 Adding missing translations for Brazilian Portuguese. (#1554)
* Feat: Adding missing translations for Brazilian Portuguese. Fixes #1500

* Corrections in brazilian translation

* Clean up translation file by removing comments

Removed comments indicating missing translations in br.js.

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-13 17:30:41 -07:00
KernelDeimos a5882889dd perf: make stat really fast 2025-09-13 20:27:44 -04:00
KernelDeimos c70434d947 perf: avoid reduntant fetches due to concurrency
Sometimes the same fs entry is fetched multiple times concurrently
because of parallel methods with separation of concerns.

After this commit, only one parallel fetch will go through and the
others will wait for it. Subsequent fetches will not occur is the
data that was needed is already there.
2025-09-13 20:27:44 -04:00
KernelDeimos 6a129ba8cc perf: skip quick_check for only one provider
The 'quick_check' increases the amount of time it takes to perform a
stat operation significantly proportional to the time it takes to do
a stat because an fsentry fetch occurs before a transient
memoization map is available for an operation.
2025-09-13 20:27:44 -04:00
dependabot[bot] 915358cec4 build(deps-dev): bump rollup from 3.23.0 to 3.29.5 in /src/terminal (#1553)
Bumps [rollup](https://github.com/rollup/rollup) from 3.23.0 to 3.29.5.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG-3.md)
- [Commits](https://github.com/rollup/rollup/compare/v3.23.0...v3.29.5)

---
updated-dependencies:
- dependency-name: rollup
  dependency-version: 3.29.5
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 16:01:23 -07:00
dependabot[bot] 1f3e83a9a0 build(deps): bump path-to-regexp from 6.2.1 to 6.3.0 in /src/phoenix (#1552)
Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) from 6.2.1 to 6.3.0.
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v6.2.1...v6.3.0)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-version: 6.3.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 13:48:24 -07:00
Nariman Jelveh 1c64aee87e Update package-lock.json 2025-09-13 13:45:49 -07:00
dependabot[bot] 298cb83c48 build(deps): bump braces from 3.0.2 to 3.0.3 in /src/phoenix (#1551)
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-version: 3.0.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 13:43:31 -07:00
dependabot[bot] d746d3ef55 build(deps): bump serialize-javascript and mocha in /src/phoenix (#1550)
Bumps [serialize-javascript](https://github.com/yahoo/serialize-javascript) to 6.0.2 and updates ancestor dependency [mocha](https://github.com/mochajs/mocha). These dependencies need to be updated together.


Updates `serialize-javascript` from 6.0.0 to 6.0.2
- [Release notes](https://github.com/yahoo/serialize-javascript/releases)
- [Commits](https://github.com/yahoo/serialize-javascript/compare/v6.0.0...v6.0.2)

Updates `mocha` from 10.2.0 to 10.8.2
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/main/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v10.2.0...v10.8.2)

---
updated-dependencies:
- dependency-name: serialize-javascript
  dependency-version: 6.0.2
  dependency-type: indirect
- dependency-name: mocha
  dependency-version: 10.8.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 13:38:43 -07:00
dependabot[bot] 7e1a3c9ac7 build(deps): bump get-func-name from 2.0.0 to 2.0.2 in /tools/api-tester (#1549)
Bumps [get-func-name](https://github.com/chaijs/get-func-name) from 2.0.0 to 2.0.2.
- [Release notes](https://github.com/chaijs/get-func-name/releases)
- [Commits](https://github.com/chaijs/get-func-name/commits/v2.0.2)

---
updated-dependencies:
- dependency-name: get-func-name
  dependency-version: 2.0.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 13:30:47 -07:00
dependabot[bot] a38d8db965 build(deps): bump axios from 1.4.0 to 1.12.0 in /tools/api-tester (#1548)
Bumps [axios](https://github.com/axios/axios) from 1.4.0 to 1.12.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.4.0...v1.12.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.12.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 13:28:13 -07:00
dependabot[bot] 3c2639403c build(deps): bump form-data from 4.0.0 to 4.0.4 in /tools/api-tester (#1547)
Bumps [form-data](https://github.com/form-data/form-data) from 4.0.0 to 4.0.4.
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.0...v4.0.4)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 13:26:11 -07:00
Nariman Jelveh a582c0ee38 Update package-lock.json 2025-09-13 13:19:58 -07:00
Nariman Jelveh 8392396b1b Update Axios 2025-09-13 13:18:01 -07:00
Nariman Jelveh 338ae161d7 closes #1545 2025-09-13 13:16:37 -07:00
shadow-tawandjelveh ac9a42b8e2 Updating the Arabic (العربية) translation (#1543)
* the Arabic (العربية) translation of Puter is Completed

* Update ar.js

* updating the Arabic (العربية) translation of Puter

---------

Co-authored-by: jelveh <[email protected]>
2025-09-12 18:26:30 -07:00
KernelDeimos e926738d64 perf: add some new keys to initial fetch 2025-09-12 19:40:26 -04:00
KernelDeimos 7bc03fe17c perf: fix sequential kv gets for default apps 2025-09-12 19:33:43 -04:00
KernelDeimos 5d3863d473 style: user_preferences.default_apps
This snippet of code doesn't need to iterate over keys, it can iterate over
values instead. Also, this "let" can be a "const".
2025-09-12 19:23:24 -04:00
KernelDeimos 5119efaf79 Reapply "feat: support Gemini imagegen service"
This reverts commit 05071b4338.
2025-09-12 19:16:58 -04:00
KernelDeimos c40c138aa2 fix: I have no idea how I didn't catch this
Apparently this just never happens when I use Puter locally.
2025-09-12 19:09:41 -04:00
KernelDeimos 05071b4338 Revert "feat: support Gemini imagegen service"
This reverts commit e13b008c79.

This is being done temporarily to debug something else without
confounding variables.
2025-09-12 18:43:20 -04:00
ProgrammerIn-wonderland e13b008c79 feat: support Gemini imagegen service 2025-09-12 18:17:31 -04:00
KernelDeimos b3e2b69c4d perf: execution context memoization map for filesystem
This commit adds an object called ECMAP. This object is a transient
memoization store for use by FSNodeContext.
2025-09-12 18:13:41 -04:00
KernelDeimos 43a0be33ca fix: selector handling from 8cfa0ece
For instances where svc_fs.node was called and explicitly passed a
NodePathSelector (instead of being passed a legacy-style object
with a path attribute) this code was failing. This commit moves the
affected code snippet after input coercion and updates references
to use the coerced input.

style: formatting changes were applied to the code. Instead of using
nested conditional blocks we use labelled breaks
2025-09-12 16:59:47 -04:00
KernelDeimos c508189455 fix: missing condition in ownership check
Not sure when this went away, but we were always getting the
permission though the file path instead of ID/UUID from what it
looks like, which was hiding this problem.
2025-09-12 16:45:39 -04:00
KernelDeimos b8354cc4a6 perf: always shortcut is-owner implicator 2025-09-12 15:26:09 -04:00
Nariman Jelveh 8cfa0ece15 Hit the cache under the user object when trying to resolve paths to system directories 2025-09-12 11:43:49 -07:00
Nariman Jelveh a1eb954221 Short-circuit for apps accessing their own AppData directory. 2025-09-11 22:03:27 -07:00
Nariman Jelveh 7511a1518c Short-circuit the permission check for users accessing their own files 2025-09-11 21:41:42 -07:00
KernelDeimos 9582297547 perf: naive permission cache
Add a simple 20 second cache with kv.js to the scan_ method of
PermissionService. This will not improve the performance for
the permission system, but it will invoke it less often.
2025-09-11 22:37:09 -04:00
KernelDeimos 7dfb05f589 fix: try skipping any directory in extensions named gui
Putting the constants at the top of these files breaks things, but
skipping any directory named "gui" is probably safe.
2025-09-11 20:15:19 -04:00
Neal Shah acda7b73ef New image models (#1542)
* Refactor OpenAIImageGenerationService to more easily support new models, add GPT-image-1

* set default image model to gpt-image-1
2025-09-11 20:00:22 -04:00
KernelDeimos 709f5444b2 fix: skip files with //!noprepend at the top
This is a quick solution for javascript files that should not have Puter
extension code prepended to the top of them. We may want to do something
different in the future like skipping directories named "gui" or
following imports (we can only do that with ESM though) or actually
having a way to run ES modules in their own global context (which is
avaialble in node.js as vm.Module under an experimental flag, but there
is no way to use the default linker for imports in the module);
basically there's no good way to do this and it is very unfortunate.
2025-09-11 18:08:15 -04:00
Siddharthan P S 76eb76c277 i18n(ta): complete missing Tamil translations in ta.js (#1541) 2025-09-11 12:12:42 -07:00
Md. Sabbir Ahmed ef16f904ce dev: add missing bengali translations (#1537) 2025-09-10 22:18:19 -07:00
shadow-tawandjelveh 8f928b1442 the Arabic (العربية) translation of Puter is Completed (#1538)
* the Arabic (العربية) translation of Puter is Completed

* Update ar.js

---------

Co-authored-by: jelveh <[email protected]>
2025-09-10 22:15:50 -07:00
f8edb1d31e Adding missing Spanish translations (#1536)
* feat: adding missing Spanish translations. This fixes #1530

* fix: fixing typos

* remove the `Missing translations` comment

---------

Co-authored-by: RicMonster1 <[email protected]>
Co-authored-by: jelveh <[email protected]>
2025-09-10 22:11:13 -07:00
Daniel Salazar 63433880ec Merge pull request #1497 from HeyPuter/DS/expireAt
feat: add expiry support to DBKV, and eslint config
2025-09-10 17:18:13 -07:00
ProgrammerIn-wonderland b3191e3b5d fix: Remove polluting logging in __all__.js 2025-09-10 14:44:16 -04:00
Daniel Salazar f8ea790824 feat: add expiry support to DBKV, and eslint config 2025-09-10 11:33:21 -07:00
Deepam Goyal 3f746b94de feat(i18n): add missing Hindi translations (#1525) (#1534) 2025-09-10 09:33:03 -07:00
jelveh 7ff5786038 add missing keys and placeholders to i18n 2025-09-09 20:27:58 -07:00
KernelDeimos eb6c23dd83 sync: package-lock.json
Previous commit to do this contained accidental other changes that I
staged and forgot about. This commit really only contains the sync for
package-json. This was broken for a while - since when we did work on
AWS secrets manager.
2025-09-09 22:37:36 -04:00
KernelDeimos 5a66bdeb20 Revert "sync: package-lock.json"
This reverts commit 281d9ebaae.
2025-09-09 22:37:12 -04:00
KernelDeimos 281d9ebaae sync: package-lock.json
This got out of sync after the AWSSecretsPopulator commit, I think.
2025-09-09 22:31:01 -04:00
Nariman Jelveh bb6bcd05c2 Remove unnecessary comment from some i18n files 2025-09-09 19:01:53 -07:00
Tarun sainiandNariman Jelveh fb04c55216 feat(UI): Differentiate tablet UI based on pointer capabilities (#1482)
* feat: Differentiate tablets by pointer type

Reclassifies tablets with a mouse/trackpad to use the desktop UI.

This is detected by checking for `(hover: hover)` media query capabilities. This ensures that touch-only tablets retain their original, touch-friendly mobile UI while fixing the bug for users with pointer devices.

* Make sure `matchMedia` exists before using it

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-09 18:58:04 -07:00
Nariman Jelveh c59dbcfaa2 Revert "Refactor GeminiService for modularity, error handling, and readabilit…" (#1496)
This reverts commit 318ecb9f49.
2025-09-09 18:00:43 -07:00
Imroz 318ecb9f49 Refactor GeminiService for modularity, error handling, and readability (#1438) 2025-09-09 18:00:29 -07:00
Xiaochen Cui 046e905857 captcha: complete the docs (#1494) 2025-09-09 17:49:38 -07:00
KernelDeimos d198e26629 fix: oops, it's not puter.config here
abuse.js is not an extension, but I was treating it like an extension.
2025-09-09 19:09:39 -04:00
KernelDeimos 2ba6152c70 dev: add stack trace for database in jaegar
When using opentelemetry to analyze the system with jaegar, I found this
additional information helpful.
2025-09-09 19:05:33 -04:00
KernelDeimos 7d4c7bae20 dev: improve error message in UIDesktop
This error message in UIDesktop caused me confusion earlier because it
didn't provide any indication of where the error came from. This commit
adds a string behind the error to specify that it happened while trying
to launch an app.
2025-09-09 19:04:44 -04:00
KernelDeimos 6120515300 dev: allow passing JWT options to create_access_token 2025-09-09 19:04:12 -04:00
KernelDeimos 2954b6225b fix: add undefined check for gui metadata
This commit adds an undefined check for metadata from Puter's desktop
GUI inside a filesystem operation frame; this information won't always
be available.
2025-09-09 19:03:01 -04:00
KernelDeimos 8e6fba9e66 dev: options to disable undesirable checks in dev
Allows disabling abuse checks undefined origin checks with config
parameters to make development more convenient. The approach before this
change has been to manually comment out these lines of code.
2025-09-09 19:01:27 -04:00
KernelDeimos a4d1855b70 fix: add missing file
File missing from previous commit
2025-09-09 15:42:00 -04:00
KernelDeimos 34501e34b7 dev(kernel): make extension variable more global-like
The extension pseudo-global was only available at the root synchronous
execution context of a module loaded as an extension, which meant it
wasn't available for such things as handler functions for listeners even
though it looks like it should be lexically scoped.

This commit writes a `const` to the top of javascript files in the
runtime copy of an extension so that it works as nearly to a real global
as possible.

A real global isn't possible here for two reasons. First, running in the
same v8 VM as Puter means we can't have distinct global objects with the
same name across different extensions. Second, we can't use node:vm
because we would then be unable to support ES modules, which are
experimental in node:vm and also there's no equivalent to createRequire
for the linker even if we wanted to require the
--experimental-vm-modules flag in our package.json. This seems to be the
best we can do given the state of affairs of the runtime.
2025-09-09 15:37:22 -04:00
Daniel Salazar caa383d5cd feat: logging for queries in puter js 2025-09-09 12:08:21 -07:00
KernelDeimos 8c2e459f3c fix: third times the charm 2025-09-09 13:44:53 -04:00
KernelDeimos b44278197e dry: query parameter makes more sense for /healthcheck 2025-09-09 13:32:08 -04:00
KernelDeimos 8242ade01b mon: add alternative to /healthcheck
Some monitoring services want a system to look like it's failing hard
instead of a system being able to report that it's failing successfully.
This commit adds an alternative to healthcheck that throws 500 when any
service is failing, as though reporting such depended on the services
working, to appease these monitoring services and their semantically
incorrect nature of operation.

This commit message sets the precedent for "mon:" as a conventional
commit style prefix for changes related to system health and monitoring.
2025-09-09 13:14:11 -04:00
KernelDeimos 48982cac84 perf(kernel): parallelize extension installation
This optimization speends up load time for Puter significantly when many
extensions are present. This is also necessary for subsequent changes
which may require prepending code to all the source files inside an
extension, which would be too slow without this optimization.
2025-09-09 03:25:04 -04:00
KernelDeimos 6919974d66 dev: minlog is off by default for Archlinux
We can assume Arch users are comfortable with making configuration
changes and observing high volume log output (maybe not true for
alternative distributions of arch, but for base Arch absolutely) so it
probably makes sense to have the log minimizer off for these cases.
2025-09-08 21:37:46 -04:00
Nariman Jelveh c2bd222532 Create BUG-BOUNTY.md (#1483)
* Create BUG-BOUNTY.md

* Update BUG-BOUNTY.md
2025-09-08 18:38:40 -07:00
Zac0511 6904017183 Update fr.js (#1493)
Added missing translations from latest updates
2025-09-08 14:43:20 -07:00
ProgrammerIn-wonderland 72e66da8a1 fix: webdav MOVE/COPY escaping bug 2025-09-08 11:45:51 -04:00
Nariman Jelveh bd818d86be Revert "Fix mac setup bug (#1449)" (#1492)
This reverts commit dfcf234d47.
2025-09-07 16:08:40 -07:00
Pranav AgoneandPranav Agone dfcf234d47 Fix mac setup bug (#1449)
* fix(desktop): prevent horizontal scrolling by constraining window drag #710

* docs: Force add config.example.json for Mac Docker setup (#1427)

---------

Co-authored-by: Pranav Agone <[email protected]>
2025-09-07 16:08:21 -07:00
Vara Rahul RajanaandNariman Jelveh cddfa0ca11 fix(gui): prevent background apps from stealing focus (#1491)
* fix(gui): prevent background apps from stealing focus

* remove the `background` option as it's not really needed or used in other parts

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-09-07 15:44:32 -07:00
Nariman Jelveh d324814e06 Update AI.js 2025-09-07 13:15:00 -07:00
Nariman Jelveh 47012a67ab Update UIWindowPublishWebsite.js 2025-09-05 17:33:38 -07:00
ProgrammerIn-wonderland ecff560480 fix: Use APIErrror.create in place of newAPIError 2025-09-05 20:26:39 -04:00
Hariz 4a0de7b2fc Reduce bottom bound on dragging UIItems (#1485) 2025-09-05 17:17:22 -07:00
ProgrammerIn-wonderland ba2609be28 fix: APIErrors in entri service 2025-09-05 20:14:25 -04:00
ProgrammerIn-wonderland 7e0b8c66c4 fix: use correct API error in entri-service 2025-09-05 19:10:40 -04:00
ProgrammerIn-wonderland 7082059fa4 dev: Add deleteMapping to entri service, add extra validation for getConfig 2025-09-05 19:03:04 -04:00
ProgrammerIn-wonderland 35c66f7d42 webdav range support and URI encode fixes 2025-09-05 18:18:03 -04:00
KernelDeimos e6eff9940d dev(backend): emit rename through EventService
While previously the /rename endpoint sent only a websocket message to
the client, move didn't fire a rename event if the name of the file had
changed. This commit adds a more generalized rename event that can be
reliably used to update a UI whenever the name of a file changes.
2025-09-05 12:57:38 -04:00
KernelDeimos 994233aa0a clean: remove a couple of verbose logs 2025-09-05 12:57:38 -04:00
Hariz 85451447c4 Fix buggy arrow key navigation in start menu (#1477)
* Fix buggy arrow key navigation in start menu

* More fixes for start menu keyboard navigation

* Fix issue with start menu searchbar focus

* Rewritten start menu keyboard navigation
2025-09-05 00:19:23 -07:00
Nariman Jelveh bf9be900cc Update UIItem.js 2025-09-04 19:38:02 -07:00
Nariman Jelveh a68f0edc41 Don't allow items to be dragged out of the viewport 2025-09-04 19:36:03 -07:00
Nariman Jelveh 55c173c0b7 surgically accurate item name editor sizing 2025-09-04 12:36:30 -07:00
Neal ShahandDaniel Salazar 628459209c fix: puter workers url 🐛 (#1480)
* fix: puter workers url 🐛

---------

Co-authored-by: Daniel Salazar <[email protected]>
2025-09-03 12:41:01 -04:00
Nariman Jelveh 222117c39a Revert "docs: Add documentation for Entity Storage internals (#1478)" (#1479)
This reverts commit 6ef404aa54.
2025-09-03 08:13:01 -07:00
Tarun saini 6ef404aa54 docs: Add documentation for Entity Storage internals (#1478) 2025-09-03 08:12:37 -07:00
jelveh ea056aa9f3 Update OpenAICompletionService.js 2025-08-31 09:06:38 -07:00
jelveh 3f3895b0b4 Update AI.js 2025-08-30 00:07:09 -07:00
Nariman Jelveh 99ee3279c3 Update AI.js 2025-08-29 18:31:13 -07:00
ProgrammerIn-wonderland 23b65eee49 Disable AWSSecretsPopulator 2025-08-29 20:38:42 -04:00
ProgrammerIn-wonderland c61b736ac8 AWS Secrets populator support 2025-08-29 20:30:06 -04:00
KernelDeimos 43232ccc32 fix: less copying of service configs 2025-08-29 19:30:48 -04:00
KernelDeimos aebc758cbf fix: objutil 2025-08-29 19:06:36 -04:00
KernelDeimos e4262201d8 dev: update objutil 2025-08-29 18:41:28 -04:00
KernelDeimos d05696f1a7 dev: object value transform iterator utility
When you need to transform strings or other primitives inside an object
and preserve the object's structure in an optimally memory-efficient
way, this does that.
2025-08-29 17:33:45 -04:00
KernelDeimos d1b4458c74 fix: possible missing path properties in /sign
When /sign is called with UIDs instead of paths, it is possible to get a
response without 'path' properties present in "signed fs item" objects.
This commit addresses the issue by fetching paths from FS node objects
as a last resort.
2025-08-29 16:08:17 -04:00
Nariman Jelveh d4674d7ddd Use the correct blue background for the logo in the loading CAPTCHA 2025-08-28 15:58:33 -07:00
KernelDeimos 6d8889e434 dev: add config.__set_config_object__() 2025-08-28 18:28:29 -04:00
Nariman Jelveh 4c8d170202 Merge branch 'main' of https://github.com/HeyPuter/puter 2025-08-28 15:27:40 -07:00
Nariman Jelveh 23be92e64c keep the signup button enabled by default 2025-08-28 15:27:13 -07:00
Xiaochen Cui 0c39f83078 captcha: imporve condition checks for cloudflare turnstile (#1469)
* captcha: imporve condition checks for cloudflare turnstile

* captcha: fix undefined "resetTurnstile" func

* captcha: set appearance

* captcha: add the missing prefix
2025-08-28 15:23:26 -07:00
Xiaochen Cui a98cc45f22 feat: memory filesystem provider
* Reapply "dev: memory filesystem"

This reverts commit 6f3bace4c4.

* fs: improve the robustess of set/get_storage api
2025-08-28 16:08:21 -04:00
KernelDeimos 481b18b228 fix: hoist resetTurnstile 2025-08-28 14:12:25 -04:00
jelveh 245a04047e Update initgui.js 2025-08-27 17:29:34 -07:00
ProgrammerIn-wonderland 42d561416e Merge branch 'XiaochenCui-captcha' 2025-08-27 20:02:08 -04:00
ProgrammerIn-wonderland 4027ad951f Merge branch 'captcha' of https://github.com/XiaochenCui/puter into XiaochenCui-captcha 2025-08-27 20:01:57 -04:00
ProgrammerIn-wonderland f0d1a424a6 dev: Range header support in puter hosting (puter.site) 2025-08-27 19:19:36 -04:00
XiaochenCui bb2c51b840 captcha: add captcha widget to the signup window 2025-08-27 16:19:06 -07:00
ProgrammerIn-wonderland 45c8bfa335 expose offset && byte_count in fs.read 2025-08-27 18:55:17 -04:00
ProgrammerIn-wonderland e48179a1f9 fix: improve support for unbounded range headers 2025-08-27 18:01:19 -04:00
ProgrammerIn-wonderland 9863f92aaa better range header support 2025-08-27 17:33:11 -04:00
KernelDeimos 6f3bace4c4 Revert "dev: memory filesystem"
This reverts commit 1f6bbe1672.
2025-08-27 14:26:03 -04:00
Xiaochen Cui 1f6bbe1672 dev: memory filesystem
* fs/memory-provider: passed all apitests

* test: write benchmark

* fs: add benchmark for stat-intensive scenario

* apitest: update duration

* fs: remove "NodeSelector", add checks to memoryfs, passed simple test

* test: update apitest

* debug: remove a debug stmt
2025-08-27 14:12:31 -04:00
XiaochenCui c34bd8177c test: fix apitest, add new unit tests and benchmarks, normalize output 2025-08-27 13:48:00 -04:00
ProgrammerIn-wonderland c0c601ac8f return partial content header 2025-08-26 18:43:29 -04:00
KernelDeimos 4a996c556a fix: issue cancelling replace during save by move 2025-08-26 18:36:44 -04:00
ProgrammerIn-wonderland 1b25dc6e50 change capitalization of getReadURL.js 2025-08-26 18:27:10 -04:00
ProgrammerIn-wonderland 542cda38b7 create getReadUrl 2025-08-26 18:17:03 -04:00
jelveh d2ea480dc6 clean: log 2025-08-26 14:53:42 -07:00
KernelDeimos 2a9310edf2 clean: log 2025-08-26 17:49:48 -04:00
KernelDeimos 64f7f928d6 dev: add expiresIn 2025-08-26 17:26:54 -04:00
DHANUSH RAJAandNariman Jelveh 607b555961 fix: remove unnecessary scrollbar from Account page (#1307)fix: remove unnecessary scrollbar from Account page (#1307)Fix account scrollbar issue by changing overflow:hidden to overflow:v… (#1465)
* Fix account scrollbar issue by changing overflow:hidden to overflow:visibleFix scrollbar issue by changing overflow:hidden to overflow:visibleUpdate UITabAccount.js

* Update license URL in UITabAccount.js and improve code formatting

---------

Co-authored-by: Nariman Jelveh <[email protected]>
2025-08-26 14:24:24 -07:00
KernelDeimos 915bcf5f07 fix: sometimes WebServer log doesn't have context 2025-08-26 16:46:17 -04:00
KernelDeimos b2d43a0783 dev: add access token permission scanner 2025-08-26 16:17:28 -04:00
ProgrammerIn-wonderland 3dc4bb0d7d dev: add range header to /token_read 2025-08-26 14:55:36 -04:00
ProgrammerIn-wonderland c610fc98e9 update ll_read cache logic to be more respectful of Range header 2025-08-26 14:41:26 -04:00
ProgrammerIn-wonderland 122a93af18 dev: direct range header support in /read 2025-08-26 14:15:43 -04:00
ProgrammerIn-wonderland a08948f905 fix: Diswhitelist credential sharing for CORS 2025-08-26 13:35:40 -04:00
Nariman Jelveh 4c3a68ee51 feat: improve 404 error handling in Puter sites with custom page support (#1466)
- Implement a new method to serve a custom 404.html file if it exists in the subdomain root path.
- Update existing error responses to utilize the new custom 404 handling.
- Ensure fallback to default error handling if the custom file is not found or an error occurs during reading.
2025-08-25 16:08:49 -07:00
Nikhil 090d1afa9c feat: update Norwegian Nynorsk (nn.js) translations (#1463)
- Add translations for all previously missing keys in nn.js
- Add translations for UI elements including window titles, alerts, and desktop UI
- Maintain consistent formatting with proper indentation
- Add contextual English comments to aid future translators
- Ensure all keys follow correct naming conventions

Fixes #366
2025-08-24 11:28:23 -07:00
ProgrammerIn-wonderland 1907e2db6a fix error in macOS's metadata rejection 2025-08-22 17:05:59 -04:00
Neal Shah c1f83bd85f macOS webdav pollution fix (#1462) 2025-08-22 16:59:17 -04:00
Karthikayan 6b11ee1b3a bug: fix tamil language selection text (#1460) 2025-08-22 11:13:39 -07:00
Neal Shah 64126179cc Fix: Microsoft office Bearer issue (#1461) 2025-08-22 14:01:28 -04:00
Nariman Jelveh 76584b9f87 Update UIWindowPublishWebsite.js 2025-08-21 18:24:00 -07:00
Nariman Jelveh 9e648e3e97 Revert prev update 2025-08-21 18:08:29 -07:00
Nariman Jelveh 5d50f838c3 Update UIWindowPublishWebsite.js 2025-08-21 17:45:34 -07:00
Nariman Jelveh 992b10b566 Add UI for custom domains 2025-08-21 16:12:15 -07:00
ProgrammerIn-wonderland a770c5ade6 Merge branch 'main' of https://github.com/HeyPuter/puter 2025-08-21 17:12:26 -04:00
ProgrammerIn-wonderland 439f5fa850 fix: dav: Allow macOS x-epected-entity-length 2025-08-21 17:12:24 -04:00
jelveh 0eb47ac1d3 Update DeepSeekService.js 2025-08-21 10:01:53 -07:00
Nariman Jelveh 91a45c25de Update apps.js 2025-08-20 14:53:01 -07:00
XiaochenCui 04ef8fbc0f fs: fix wrong file content on read 2025-08-20 13:45:30 -04:00
KernelDeimos 018059258b fix: allow paths like %appdata%/subdir
This commit expands on the previously implemented '%appdata%' value for
the 'path' option for "Open File" dialogs and allows it to be a prefix
for arbitrary subdirectories under an app's AppData directory.
2025-08-20 12:42:41 -04:00
KernelDeimos 47e2e8ee78 feat: add 'path' option to showOpenFileDialog
This commit adds a 'path' option to showOpenFileDialog by supporting it
in the relevant conditional block in IPC.js. A special path "%appdata%",
which would otherwise produce an error in the file explorer (so no
conflict is possible), will resolve to the appdata directory of the
current app.
2025-08-20 12:42:41 -04:00
Andrei OnelandEric Dubé 986b0f66e8 doc: putility
* Added reference documentation for: src/putility/src/bases/BasicBase.js

* Added reference documentation for: src/putility/src/libs/context.js

* Added reference documentation for: src/putility/src/libs/log.js

* Added reference documentation for: src/putility/src/concepts/Service.js

* Update src/putility/src/bases/BasicBase.js

Co-authored-by: Eric Dubé <[email protected]>

* Update src/putility/src/concepts/Service.js

Co-authored-by: Eric Dubé <[email protected]>

---------

Co-authored-by: Eric Dubé <[email protected]>
2025-08-18 19:04:44 -04:00
Andrei Onel 7849776605 doc: various jsdoc additions
* Added reference documentation for: src/backend/src/services/auth/Actor.js

* Added reference documentation for: src/backend/src/om/proptypes/__all__.js

* Added reference documentation for: src/backend/src/middleware/anticsrf.js

* Added reference documentation for: src/backend/src/services/auth/AntiCSRFService.js

* Revert "Added reference documentation for: src/backend/src/om/proptypes/__all__.js"

This reverts commit a9bb0fb48b.
2025-08-18 19:01:27 -04:00
ProgrammerIn-wonderland a27f4b60e4 fix: webdav service name for undefined origin 2025-08-18 18:03:57 -04:00
ProgrammerIn-wonderland a046f186d8 fix: webdavfs class init method name init to _init 2025-08-18 17:50:13 -04:00
Neal Shah fcb5aa4078 Dav (#1450)
* Windows WebDav support

* feat: 2fa support for dav

* fix auth cookie when Basic auth present

* dev: dav: refactor handler, support root level navigation

* dev: dav: JSDOCing important things

* fix: possible edge case of password containing colon character

* feat: direct token login for webdav

* set cookie to not be session cookie

* fx: webdav undefined origin support
2025-08-18 17:32:29 -04:00
jelveh b1e3fb136a Merge branch 'main' of https://github.com/HeyPuter/puter 2025-08-18 00:35:55 -07:00
jelveh caa77e61e6 Update apps.js 2025-08-18 00:35:47 -07:00
Shahidpathan22 4f983ff400 Added Norwegian Bokmål translations for missing keys (#1447)
* Added Norwegian Bokmål translations for missing keys

* Added Norwegian Bokmål translations for missing keys
2025-08-17 12:06:29 -07:00
Nariman Jelveh 7202060903 Revert "fix(desktop): prevent horizontal scrolling by constraining window dra…" (#1446)
This reverts commit c93c2965d2.
2025-08-17 00:51:16 -07:00
Pranav AgoneandPranav Agone c93c2965d2 fix(desktop): prevent horizontal scrolling by constraining window drag #710 (#1443)
Co-authored-by: Pranav Agone <[email protected]>
2025-08-17 00:50:47 -07:00
jelveh 81e3428177 Update refresh_item_container.js 2025-08-16 14:20:06 -07:00
jelveh b7860ee099 Update launch_app.js 2025-08-16 13:46:10 -07:00
jelveh bc4cb61331 add transaction for opening apps 2025-08-16 13:43:25 -07:00
jelveh 2ed16b8b43 add support for transactions 2025-08-16 13:15:04 -07:00
Andrew Poženel - SloDevTeamandjelveh 58fa69a2aa Update sl.js (#1445)
* Update sl.js

Added Slovene/Slovenian translation

* Update sl.js

---------

Co-authored-by: jelveh <[email protected]>
2025-08-16 09:46:15 -07:00
jelveh 470dbc8d6b Update UI.js 2025-08-15 23:42:17 -07:00
jelveh d807672af7 close #1103 2025-08-15 23:33:53 -07:00
jelveh 89dd335208 close #1134 2025-08-15 23:01:34 -07:00
Nariman Jelveh 91e6749645 Create template file for the Slovenian i18n 2025-08-15 16:21:07 -07:00
KernelDeimos 7375cb7382 dev: add .undefinedOnCancel to open dialog too 2025-08-15 09:48:37 -07:00
KernelDeimos 5522cfbd52 feat: make it possible to pass signed files to launchApp
Allow apps to launch new instances or other apps with specific files.
The files must be passed as file signature objects, ensuring it was a
file the app was granted access to through a user action.
2025-08-15 09:48:37 -07:00
KernelDeimos e8d63819a8 fix: add .undefinedOnCancel to showSaveFilePicker 2025-08-15 09:48:37 -07:00
KernelDeimos 6b0865e284 feat: add copy mode save
Adds a 'copy' mode to showSaveFilePicker. In this mode, a source file is
copied to the target file. The file may not exist in another apps
AppData directory. Unlike the 'move' mode, the file can be outside of
the app's AppData directory (a "user" file); in this situation the user
will be prompted to grant permission for the copy action. The app will
have access to the newly-created copy.
2025-08-15 09:48:37 -07:00
jelveh 483ba14af8 Update ExecService.js 2025-08-14 23:40:52 -07:00
Nariman Jelveh 8b97657205 Merge pull request #1441 from HeyPuter/launchapp-imrpvements
send source app data to opened app
2025-08-14 23:30:13 -07:00
jelveh 7277be75a8 Update ExecService.js 2025-08-14 23:25:24 -07:00
jelveh bcfb9accb1 Update ExecService.js 2025-08-14 23:22:48 -07:00
jelveh 3747365f9a send source app data to opened app 2025-08-14 23:17:50 -07:00
ProgrammerIn-wonderland aa4bd72b92 take DomainModule to be not DNSModule 2025-08-14 19:00:57 -04:00
ProgrammerIn-wonderland 1a9ff9e954 fix: (for node 18) import parse-domain as esmodule 2025-08-14 18:47:23 -04:00
ProgrammerIn-wonderland 686053a0fe dev: add verification for entri webhooks 2025-08-14 18:32:22 -04:00
ProgrammerIn-wonderland aac6ff14ac custom domains webhook 2025-08-14 18:32:22 -04:00
ProgrammerIn-wonderland d105b341d5 Entri token service 2025-08-14 18:32:22 -04:00
ProgrammerIn-wonderland 58800e5d19 rebase fixes 2025-08-14 18:32:22 -04:00
KernelDeimos 65b288d58d dev: enable DNSModule for local instances 2025-08-14 18:32:22 -04:00
KernelDeimos 4fadd26459 dev: add TXT record verification for domain names 2025-08-14 18:32:22 -04:00
KernelDeimos df602d5edb dev: continue work on custom domains
Adds service for querying controlling user for a domain. If no user is
verified as allowed to control the domain then we give control to the
'admin' user (to support local configurations of Puter).

After this point, I find myself a bit stuck because DNS queries are
incredibly difficult to test locally when you use tailscale.
2025-08-14 18:32:22 -04:00
KernelDeimos 49b0805014 dev: custom domain routing (the easy part)
With this commit alone, any user can specify "domain" on their
subdomains. This means they could affect the route for domains they
don't control, so this is not production-ready without further changes.
2025-08-14 18:32:22 -04:00
Nariman Jelveh 436f2d679f Update WebServerService.js 2025-08-14 12:04:47 -07:00
Nariman Jelveh 8e43fff19d Update WebServerService.js 2025-08-14 11:50:05 -07:00
Nariman Jelveh e225cb92f6 Update WebServerService.js 2025-08-14 11:41:41 -07:00
jelveh 2ddce7166f Add sentry-trace and baggage to allowed headers 2025-08-13 12:38:56 -07:00
KernelDeimos 4ba2f97da0 fix: move temp users to 'user' group when email is confirmed
Temporary users can go through email confirmation which effectively
makes these users registered/permanent users. When email is confirmed
they should be moved to the default group for registered users.
2025-08-13 15:15:36 -04:00
Xiaochen Cui ffc9246070 dev: consolidate fs.written to fs.write (#1392) 2025-08-13 13:21:07 -04:00
jelveh 1e720a7aca Add a subtle gap between maximized window and vertical taskbars 2025-08-08 23:46:59 -07:00
ProgrammerIn-wonderland 282acfb048 filter workers from hosting list 2025-08-08 15:00:40 -04:00
jelveh 478591b676 Update IPC.js 2025-08-08 00:58:22 -07:00
KernelDeimos 5b8c13c147 todo: does this break in different languages? 2025-08-07 18:16:57 -04:00
ProgrammerIn-wonderland 0deaaf4736 accept appName in place of appId 2025-08-07 16:15:20 -04:00
ProgrammerIn-wonderland 82c1f64b37 remove todo comment 2025-08-07 16:15:20 -04:00
ProgrammerIn-wonderland c8c7e22007 add check so workers can only be associated with the context's app 2025-08-07 16:15:20 -04:00
ProgrammerIn-wonderland 66288f798e add ability to specify app for worker 2025-08-07 16:15:20 -04:00
jelveh acc29a35c4 add gpt-5-chat-latest 2025-08-07 11:52:11 -07:00
jelveh c10e6ccd8f Update index.html 2025-08-07 11:48:04 -07:00
jelveh 3ba2c9d052 add gpt 5! 2025-08-07 11:28:26 -07:00
jelveh 312efb947d add Claude Opus 4.1 2025-08-06 23:56:04 -07:00
jelveh 9b1cba407e Update style.css 2025-08-06 22:35:27 -07:00
jelveh d647c7686d Create icon.png 2025-08-06 22:27:14 -07:00
jelveh 41a62326bf Improve Apps class to enforce required fields and improve title handling. Added validation for name and index URL, as they are mandatory for app creation. Updated title assignment to default to name if not provided. 2025-08-06 19:41:14 -07:00
Nariman Jelveh e8f6b06723 Add spinner visibility for worker creation process in dev center 2025-08-06 18:56:17 -07:00
Nariman Jelveh ac35dc55f0 Hide dev-center spinner at the correct time when refreshing lists 2025-08-06 15:41:37 -07:00
ProgrammerIn-wonderland 49d4cbc486 remove driver lsmod check 2025-08-06 15:43:32 -04:00
KernelDeimos 7b1fb5d9a6 fix: confirm email with code flow
It wasn't working:
- erroneously expected `email` parameter in request
- sqlite compatibility issue
- incorrect branching, fixed with guard clause
2025-08-06 14:58:33 -04:00
jelveh f06abf96b3 Update apps.js 2025-08-06 09:34:21 -07:00
Nariman Jelveh a73d10826c adjust website and worker counters in dev center after a deletion 2025-08-05 19:32:31 -07:00
Nariman Jelveh 5968da1202 Merge pull request #1417 from HeyPuter/workers-in-dev-center
Workers and websites in dev center
2025-08-05 19:06:44 -07:00
jelveh 23d2d504f0 Improve table heading visuals 2025-08-05 09:48:50 -07:00
jelveh 64a5de3cc4 fix dev docs link 2025-08-05 09:09:41 -07:00
jelveh 6bccf7dc7d Update style.css 2025-08-05 09:03:35 -07:00
jelveh 5ccdd627ee Add functionality to remove app, website, and worker cards with dedicated functions; streamline deletion process and improve UI updates for empty states. 2025-08-05 08:49:30 -07:00
jelveh 636bf6b8b3 Implement shift-click functionality for checkbox selection in apps, websites, and workers; improve UI responsiveness by updating row activation based on checkbox state. 2025-08-04 23:18:01 -07:00
jelveh 90f1232b87 Refactor dropped items handling in dev-center.js to use window scope and improve UI updates; minor UI adjustment in websites.js and handle empty file paths in workers.js 2025-08-04 22:47:17 -07:00
jelveh 162aa485d0 Add directory change functionality for websites and update UI alert handling 2025-08-04 22:27:07 -07:00
jelveh 59dade2736 fix the bug with directory picker selecting the current directory 2025-08-04 22:18:22 -07:00
jelveh b6fcb78f6e wip 2025-08-04 22:08:32 -07:00
jelveh 9f8c0d3227 Update index.html 2025-08-04 15:25:14 -07:00
jelveh a6db0f1092 Update style.css 2025-08-04 15:20:37 -07:00
jelveh 0d6423a8b1 Enforce email confirmation via GUI for deploying workers 2025-08-04 14:35:28 -07:00
jelveh ab8cdb2d57 Add requestEmailConfirmation to puter.ui 2025-08-04 14:11:55 -07:00
jelveh 39bd825866 fix search functionality by managing 'has-value' class for input fields in websites and workers search 2025-08-04 13:24:36 -07:00
jelveh dc8b7ecb34 update app count when a new app is created 2025-08-04 13:09:50 -07:00
jelveh 1d1b484bca Update workers.js 2025-08-04 00:04:11 -07:00
Nariman Jelveh a340c9a0b7 fix sorting in websites tab 2025-08-03 19:47:45 -07:00
Nariman Jelveh b59b19f8b3 Creating workers or websites start with selecting a file/folder 2025-08-03 19:25:18 -07:00
Nariman Jelveh 59c297db49 search is now isolated to the active tab 2025-08-03 19:06:45 -07:00
Nariman Jelveh 3df0bac9dc count websites and workers at start 2025-08-03 18:39:14 -07:00
Nariman Jelveh 2691818f6e Update index.html 2025-08-03 18:24:02 -07:00
Nariman Jelveh 1bc8de8112 make workers sortable by file path 2025-08-03 18:24:02 -07:00
Nariman Jelveh 12f574ed70 move libs back to original location 2025-08-03 18:24:02 -07:00
Nariman Jelveh 8f18a841b3 Add file column to worker table and enable file path launching 2025-08-03 18:24:02 -07:00
Nariman Jelveh 80ccb2d48b Update workers.js 2025-08-03 18:24:02 -07:00
Nariman Jelveh 4550e4f4fd remove unnecessary console.logs in Login 2025-08-03 18:24:02 -07:00
jelveh 2d0d253f96 Update apps.js 2025-08-03 18:24:02 -07:00
jelveh 30db54f062 Remove context menu from entries 2025-08-03 18:24:02 -07:00
jelveh 3b707c31a7 Search websites supports conenct directory matching 2025-08-03 18:24:02 -07:00
jelveh 99739173d6 Show connected directory on websites list 2025-08-03 18:24:02 -07:00
jelveh f0dba7ca60 Show connected directory for websites 2025-08-03 18:24:02 -07:00
jelveh 36a2f2f7b8 fix issue with deplot area not showing up 2025-08-03 18:24:02 -07:00
jelveh 615de5ec11 wip 2025-08-03 18:24:02 -07:00
jelveh bb7bb532ab wip 2025-08-03 18:24:01 -07:00
jelveh 7fceb804a7 better interaction when deleting websites etc 2025-08-03 18:24:01 -07:00
jelveh 82339b69a3 Add "No websites notice" 2025-08-03 18:24:01 -07:00
jelveh 7c30472bdf add websites tab 2025-08-03 18:24:01 -07:00
Nariman Jelveh e0d7a4aa17 Refactor app and worker management UI with context menus and improved delete functionality 2025-08-03 18:24:01 -07:00
Nariman Jelveh 2f30ce3d4d layout fix 2025-08-03 18:24:01 -07:00
Nariman Jelveh 4b43b24e50 multiple style improvements 2025-08-03 18:24:01 -07:00
Nariman Jelveh c5159a6da2 Update style.css 2025-08-03 18:24:01 -07:00
Nariman Jelveh 32bdd70ed0 improve worker counting 2025-08-03 18:24:01 -07:00
Nariman Jelveh 2d4b5984ed Implement 'Delete' and 'Delete Selected' for workers 2025-08-03 18:24:01 -07:00
Nariman Jelveh 970ba0bd77 enable checkboxes for workers table 2025-08-03 18:24:01 -07:00
Nariman Jelveh fab062b0fe Add the workers and websites tabs 2025-08-03 18:24:01 -07:00
Nariman Jelveh b2cf01e57c Add 'My Workers' tab 2025-08-03 18:24:01 -07:00
ProgrammerIn-wonderland 33629a7acd dev: migrate away from puter.drivers.call() 2025-08-03 17:21:35 -07:00
ProgrammerIn-wonderland 7d4ee75619 fix: return "null" for file_path and file_uid if backing file is nonexistent 2025-08-03 16:19:10 -07:00
ProgrammerIn-wonderland 94b6538851 dev: workers, return iso timestamp instead 2025-08-02 16:44:38 -07:00
ProgrammerIn-wonderland 15eefb1122 dev: expose file_uid in worker calls 2025-08-02 16:29:01 -07:00
ProgrammerIn-wonderland f8e95c4002 dev: query backend for workers.list() and workers.get() now to get path too 2025-08-02 16:24:07 -07:00
Neal Shah a586083b02 change worker API (#1411) 2025-08-02 15:30:45 -07:00
Nariman JelvehandProgrammerIn-wonderland 54aaed3459 Gui deploy workers (#1409)
* add deploy as worker context menu item

* Update UIWindowPublishWorker.js

* quick fix

* Update new_context_menu_item.js

* Show spinner when publishing workers

* Improve worker default file

* fix

---------

Co-authored-by: ProgrammerIn-wonderland <[email protected]>
2025-08-01 14:52:58 -07:00
Neal Shah 6578d4d91c remove sessionStorage params (#1408) 2025-07-31 16:06:37 -07:00
Nariman Jelveh b78e5c4444 Update initgui.js 2025-07-31 13:32:41 -07:00
Nariman Jelveh 26e9d9e0e3 Add the attempt_temp_user_creation option to puter.auth.signIn() 2025-07-31 13:05:40 -07:00
Prathamesh Wankhede d7b731a413 Update nb.js (#1404)
feat(i18n): completed missing Norwegian Bokmål translations in nb.js
2025-07-31 12:35:24 -07:00
Neal Shah 3d227e0798 Update worker limit (#1405)
* Update worker limit

* Handle error for when a mapping has no routes
2025-07-31 12:34:19 -07:00
Rohan Rawat 0f91503eb5 docs: added utils.js build script documentation (#1402) 2025-07-31 12:22:52 -07:00
Neal Shah 81ecb13370 Support a few more incoming and global objects in workers (#1401)
* no more global puter object in workers

* also support my as a global in workers

* support incoming user object in workers

* also support myself in puter workers
2025-07-30 19:39:34 -07:00
ProgrammerIn-wonderland 8e58fabb71 improve error handling, user specific worker limit 2025-07-30 15:43:16 -07:00
ProgrammerIn-wonderland 299e7b6e10 Make puter.workers.get() return more info 2025-07-30 12:21:24 -07:00
ProgrammerIn-wonderland 3e2e42fa53 Add coersion to JSON response in workers 2025-07-30 12:21:24 -07:00
ProgrammerIn-wonderland 616ddf8467 Supoport multiple domains to one worker 2025-07-30 11:53:03 -07:00
ProgrammerIn-wonderland d5f0137c0a Make worker names global && return improve error handling for APIError 2025-07-30 11:53:03 -07:00
XiaochenCui 85a0f71bfd hotfix: emit the missing event, fix check condition 2025-07-30 10:25:13 -07:00
Neal Shah 3016eb6363 ask user for auth if no token (#1389) 2025-07-29 20:45:40 -07:00
Neal Shah 402c407f81 Allow - in worker name
Sent from my iPhone
2025-07-29 20:03:13 -07:00
ProgrammerIn-wonderland a2126d5dd6 worker global s2w -> router 2025-07-29 22:03:58 -04:00
Karan Singhandjelveh a15fdd0b6d dev: Replaced human-readable text with i18n keys (#1382)
* dev: Replaced human-readable text with i18n keys

* Add two missing keys in UIDesktop.js

* more i18n keys!

* add more keys

* Update UIWindow.js

---------

Co-authored-by: jelveh <[email protected]>
2025-07-29 17:57:18 -07:00
Nariman Jelveh 9a7d34aec9 do not await kv when setting taskbar position 2025-07-29 17:43:07 -07:00
Emmanuel Ferdman 1d27fffb10 Fix issue in invalid social media url
Signed-off-by: Emmanuel Ferdman <[email protected]>
2025-07-29 20:26:09 -04:00
Emmanuel Ferdman 2c4da6f558 Fix issue in invalid social media url
Signed-off-by: Emmanuel Ferdman <[email protected]>
2025-07-29 20:26:09 -04:00
ProgrammerIn-wonderland 5b49e877d9 add protocol to URL returned by puter worker 2025-07-29 20:13:15 -04:00
XiaochenCui 27c1e62687 fs: ll_write -> provider.write 2025-07-29 19:29:35 -04:00
XiaochenCui 026a908a23 fs: ll_mkdir -> provider.mkdir 2025-07-29 19:29:35 -04:00
ProgrammerIn-wonderland 1b1d22e166 puter.workers.exec() 2025-07-29 18:42:33 -04:00
ProgrammerIn-wonderland f962a6a838 Allow relative paths for creating puter s2w workers 2025-07-29 16:18:14 -04:00
ProgrammerIn-wonderland 050ad0f785 add worker file limit 2025-07-29 16:18:14 -04:00
ProgrammerIn-wonderland ba0f4e3f86 remove unneeded logs 2025-07-29 16:18:14 -04:00
ProgrammerIn-wonderland 2fe52cb972 Filesystem backed web workers 2025-07-29 16:18:14 -04:00
ProgrammerIn-wonderland 173340e887 Move s2w workers to be backed by files and commit that information to subdomains database 2025-07-29 16:18:14 -04:00
ProgrammerIn-wonderland 27b9cb0b4c Add "coerce to response" if compatible type is returned by an s2w route 2025-07-29 16:18:14 -04:00
ProgrammerIn-wonderland 02e49a44be Making streaming drivers ReadableStreamable 2025-07-29 16:18:14 -04:00
KernelDeimos cbb833f3de Revert "sync: update OpenAI moderation to use new model"
This reverts commit 1b56bdc526.

OpenAI told us to switch to this model for moderation, but this model
clearly isn't ready for production use yet.
2025-07-29 16:08:05 -04:00
Nariman Jelveh 88011cfb1f Update README.md 2025-07-29 12:23:41 -07:00
KernelDeimos d4250d65aa fix: don't encrypt session UUID if there isn't one 2025-07-29 13:35:03 -04:00
Glenn Dmello ec586e834a modified nb.js (#1381) 2025-07-29 10:22:39 -07:00
XiaochenCui dea6069398 fs/stat: return_permissions -> return_shares, update tests as well 2025-07-29 13:17:55 -04:00
XiaochenCui 97eeadb3e4 fs: fix failed tests in move and stat 2025-07-29 13:17:55 -04:00
Nariman Jelveh f3b09cf170 Update index.js 2025-07-28 22:03:25 -07:00
Nariman Jelveh b5a1be6823 Update style.css 2025-07-28 21:02:29 -07:00
Nariman Jelveh 12f4c2c3d2 Fix the issue with Properties window not working in Explore 2025-07-28 20:08:11 -07:00
KernelDeimos 1b56bdc526 sync: update OpenAI moderation to use new model 2025-07-28 20:47:56 -04:00
Nariman Jelveh 1df1afca37 Update index.js 2025-07-28 16:17:35 -07:00
Nariman Jelveh 75fc436b54 add dividers in the taskbar 2025-07-28 16:17:23 -07:00
KernelDeimos 0257c1475e dev: add async getter for 'owner' on FSNodeContext 2025-07-28 18:30:02 -04:00
KernelDeimos 925b1ff4b4 dev: add fs.written event
Unlike fs.write, fs.written is only emitted after the contents of the
fily have been fully streamed and comitted to the delegate storage.
2025-07-28 18:23:00 -04:00
KernelDeimos f2a29d5228 fix: prevent entity mutation during upsert
In EntityStoreService, update and upsert both make use of the
detect_identifier utility function to get an identifier to pass through
to (eventually) SQLES.

For `update`, the `id` object is passed as the argument. Properties are
removed from this object when "redundant identifiers" are extracted to
create the update predicate.

For `upsert`, the `entity` object is passed and `id` is ignored. It is
suspected that this was done for reasons of improved developer
experience for developers using the API. The mutation behavior of
detect_identifier caused issues when trying to modify a property that
can also be used as an identifier, without having another identifier
available. (i.e. need to get UID of a subdomain to change the
`subdomain` property instead of just using `subdomain` to identify it).

This commit modifies the default behavior of detect_identifier to not
remove properties, then adds a flag to preserve the previous behavior
which is set TRUE by `update` since it's widelely used by puter.js and
has higher impact for potential regressions.
2025-07-28 17:41:46 -04:00
KernelDeimos 9f8cd18fd8 dev: add bypass for Entity Storage validation 2025-07-28 15:10:44 -04:00
jelveh 89ea1ae699 Update security.txt 2025-07-28 09:16:24 -07:00
Nariman Jelveh cfa7e23e84 Fix the selectable positioning and sizing issues in Explore. All set! 2025-07-27 20:20:19 -07:00
Nariman Jelveh e1f52ebd88 Update UIWindow.js 2025-07-27 20:09:34 -07:00
Nariman Jelveh 2e30f292f4 Improve selection visualization logic for Explore widnows.
This doesn't completely fix the misalignment of selection area but improves a lot of issues with it. A temporary, middle-ground solution until I implement the full-on selection area rendering
2025-07-27 18:52:37 -07:00
Nariman Jelveh 2cd3245b49 Update package-lock.json 2025-07-27 15:35:50 -07:00
jelveh bc842ad371 Update viselect.min.js 2025-07-27 11:32:37 -07:00
jelveh 783a0385d3 Remove Slider component 2025-07-27 11:04:45 -07:00
jelveh 8a697652d9 Use regular UIWindow component in UIWindowTaskManager 2025-07-25 23:59:29 -07:00
jelveh cadaff441c Remove unnecessary onAppend callbacks 2025-07-25 23:39:21 -07:00
jelveh dd76ac27ae Update UITaskbar.js 2025-07-25 20:22:38 -07:00
KernelDeimos d17b466e37 fix: properly update owner object in FSNodeContext 2025-07-25 22:12:19 -04:00
jelveh 01e4faa762 Update UITaskbar.js 2025-07-24 12:54:45 -07:00
jelveh 261bfd1c03 Adjust taskbar items' height and width based on number of items in the taskbar 2025-07-24 12:06:38 -07:00
Yasir Rafique e9184902ea chore: add Prettier config 2025-07-24 13:09:46 -04:00
Nariman Jelveh bfd1f8faab Configurable taskbar position (#1372)
* feat(gui): Enhance taskbar functionality and positioning

- Implement dynamic taskbar position management with options for left, bottom, and right placements.
- Update desktop dimensions and window positioning based on taskbar position.
- Add context menu options for changing taskbar position on desktop devices.
- Ensure mobile devices always display the taskbar at the bottom.
- Introduce CSS styles for taskbar positioning and adjust desktop padding accordingly.

* feat(gui): Reinitialize tooltips based on taskbar position

- Implement dynamic tooltip positioning for taskbar items based on the current taskbar location (left, right, bottom).
- Ensure tooltips are destroyed and recreated when the taskbar position is updated, enhancing user experience and consistency.

* feat(gui): Improve taskbar and tooltip positioning

- Add support for dynamic tooltip positioning for the 'top' taskbar location.
- Adjust CSS styles for arrow tooltips to enhance visual alignment and positioning.
- Refine taskbar item positioning for left and right placements to ensure consistent appearance.

* Improve popover positioning based on taskbar location

- Improve `UIPopover` positioning logic to account for left and right taskbar placements.
- Adjust Y position of popovers to ensure they appear correctly below toolbars for left/right taskbars.
- Update CSS styles for arrow tooltips to enforce consistent positioning with !important declarations.

* Refactor context menu positioning logic in UITaskbarItem

- Introduce a helper function to dynamically calculate context menu position based on the taskbar's location (top, bottom, left, right).
- Ensure context menus are positioned correctly relative to the taskbar item, improving usability across different taskbar placements.

* Fix UITaskbar window height calculation for consistent positioning

- Adjust the height calculation for windows in the UITaskbar to remove an unnecessary offset, ensuring accurate window sizing relative to the toolbar height.
- This change improves the visual consistency of maximized windows across different taskbar placements.

* Enhance window snapping and positioning based on taskbar location

- Introduce a new function to calculate snap dimensions and positions dynamically based on the taskbar's location (left, right, bottom).
- Update window snapping logic to ensure windows are positioned correctly relative to the taskbar, improving usability and visual consistency.
- Adjust boundary checks for window placement to account for taskbar height and position, enhancing the overall user experience.

* Update default taskbar position to 'left' and adjust CSS padding for desktop layout

- Change the default taskbar position from 'bottom' to 'left' in UITaskbar.
- Modify CSS to increase left padding for desktop taskbar positioning, enhancing layout consistency.

* Improve CSS for desktop layout with height adjustments

- Update CSS styles for input fields and desktop taskbar to set height to 100vh, ensuring consistent full-page layout across different screen sizes.
- This change improves the visual consistency and usability of the interface.

* Improve desktop selectable interactivity and taskbar tooltip behavior

- Add functionality to mark the desktop as selectable active, improving user interaction with desktop elements.
- Update tooltip display logic to only show when the desktop is not in a selectable state, enhancing usability.
- Adjust CSS styles for desktop layout, ensuring consistent behavior and appearance when the desktop is active or inactive.

* Update default taskbar position logic for first-time and existing users

- Set the taskbar position to 'left' for first-time visitors and default to 'bottom' for returning users without a saved preference.
- This change improves the user experience by providing a more intuitive initial layout for new users while maintaining consistency for existing users.
2025-07-23 15:48:23 -07:00
jelveh 5b46f0bcb1 use openrouter for qwen models 2025-07-22 16:21:56 -07:00
XiaochenCui fee100dddd fs/mkdir: add docs spec, update tests, update apitest 2025-07-22 12:46:03 -04:00
XiaochenCui 7e20039ef4 fs/mkdir: update check logic, update test cases 2025-07-22 12:46:03 -04:00
XiaochenCui f906c1ebad fs: adapt to different mkdir api, block write to root dir, add tests 2025-07-22 12:46:03 -04:00
Neal Shah 6d09566ba7 Allow multipage apps in puterjs (#1368)
* Allow multipage apps in puterjs

* Don't error on browsers which dont support sessionStorage
2025-07-21 14:02:46 -07:00
Nariman Jelveh e14e1acd95 Revert "feat(gui): Add animation effects to the taskbar (#1365)" (#1366)
This reverts commit 212bc88c8f.
2025-07-19 11:12:28 -07:00
GitHubliuzhijie 212bc88c8f feat(gui): Add animation effects to the taskbar (#1365)
- Add new animation functionality to the taskbar; icons will enlarge when the mouse hovers over them
- Introduce new CSS properties and styles to support the animation effects
- Implement mouse move and leave event handling in UITaskbar
- Add UITaskBarCreateCurve and UITask components
2025-07-19 11:11:57 -07:00
jelveh 1b1517d570 add subdomain middleware for extensions 2025-07-18 20:54:26 -07:00
jelveh b8ffc1ada0 Allow CORS on /extensions/ 2025-07-18 20:27:50 -07:00
Neal Shah 0858f9932b Support streaming drivers in XMLHTTPRequest-less platforms (nodejs, serviceworker) (#1364)
* xmlhttpreq partial support pt1

* XMLHTTPRequest shim cleanup

* fix check for x-ndjson

* change credit header at top of xhr shim
2025-07-18 14:35:08 -07:00
Josh Josephandjelveh f9995a219d Fixed issue: #1033 (Added app category display in Dev Center in main app list) (#1350)
* Update README.md

* Fixed issue:  #1033 (Added app category display in Dev Center in main app list)

* Fixed issue:  #1033  (Added app category display in Dev Center in main app list)

* test 1033

* Fixed issue: #1033 (Added app category display in Dev Center in main app list)

* Fixed issue: #1033 (Added app category display in Dev Center in main app list)

* Center the app checkbox

---------

Co-authored-by: jelveh <[email protected]>
2025-07-17 21:03:17 -07:00
Igor Moraes 17a11a3a8b Update Portuguese and Spanish translation README (#1363)
* Update Portuguese translation of README

* Update Portuguese and Spanish translation readme
2025-07-17 20:35:37 -07:00
Neal Shah 481210b6a6 event.puter//user puter and automatic cors exemption handling in puter workers (#1342)
* event.puter

* automatic opt out cors handling

* remove "starting puterjs initialization" log

* Set compatibility date

* remove body log
2025-07-17 15:37:34 -07:00
jelveh cc2670444c Reject promise in signIn is user closes auth window 2025-07-16 18:45:20 -07:00
jelveh 5a7ba5d4ad Do not show file operations in the context menu of root dir 2025-07-15 18:04:04 -07:00
Eric Dubé d5749691b3 doc: link related future work 2025-07-15 16:13:39 -04:00
XiaochenCui 0a8e4f985e mkdir: return 403 error for mkdir action in the root dir 2025-07-15 16:13:39 -04:00
jelveh c75d9b9544 use openrouter for grok 2025-07-13 13:08:18 -07:00
jelveh 05a74b3152 do not preselect tests 2025-07-11 17:03:33 -07:00
jelveh e387abe2f6 Make 'Signup' window draggable 2025-07-11 16:28:37 -07:00
jelveh ef95cd493c MORE TESTS!! 2025-07-11 16:27:14 -07:00
KernelDeimos 963b248582 fix: get sharp far away from bundlers as possible 2025-07-10 16:20:12 -04:00
KernelDeimos 4575b24c51 chore: update sharp because GH issue template 2025-07-10 14:30:00 -04:00
KernelDeimos e85a2703f4 sync: update XAi models 2025-07-09 23:27:24 -04:00
jelveh 3def1d4d7c feat: implement authentication UI in Puter.js's test UI
- Added login and logout functionality with corresponding UI elements.
- Enhanced layout for user information display and login button.
- Integrated authentication state checks to update UI based on user sign-in status.
- Improved button styles and interactions for better user experience.
2025-07-09 16:42:54 -07:00
jelveh 9c74e295bd style: enhance run.html layout and user interaction
- Added user-select: none to disable text selection for better UX.
- Adjusted margins for buttons and elements to improve spacing and alignment.
- Modified the layout of the navigation bar for a cleaner appearance.
2025-07-09 16:20:58 -07:00
jelveh 9ca1f0639a feat: implement settings management and modal in puter.js test framework
- Added a settings button to open a modal for configuring Puter.js URL and API Origin.
- Implemented functions to load and save settings to localStorage.
- Dynamically load the Puter.js script based on user-defined settings.
- Styled the modal and its components for better user experience.
2025-07-09 16:10:06 -07:00
Xiaochen Cui 0b6dbe587a feat(aws/polly): add new apis to puter-js, add new args to txt2speech (#1337) 2025-07-09 15:38:17 -04:00
KernelDeimos 50d520f099 fix: file cleanup for Claude when streaming 2025-07-09 15:12:15 -04:00
KernelDeimos 2c8da38db0 dev: add puter_path support for OpenAI 2025-07-09 15:12:15 -04:00
KernelDeimos ba3ff03569 dev: add finally_fn for cleanup tasks in AI impls 2025-07-09 15:12:15 -04:00
KernelDeimos 389967b659 clean: code does not need to announce it was updated
This broke the jsdoc comment for _init in OpenAICompletionService
2025-07-09 15:12:15 -04:00
jelveh 1573f1dd81 Add tests for puter.ai.txt2speech 2025-07-09 11:54:15 -07:00
KernelDeimos 71f298ea43 debug: make sure this stack trace gets logged 2025-07-08 19:39:53 -04:00
KernelDeimos 2158e8e8c6 dev: add puter file upload via ai.chat for Claude
This commit implements uploading Puter files through ai.chat using
Claude's beta "file inputs" feature. To use this, simply specify
`puter_path` in a content part, and that content part will be
transformed into the correct type of content part for the specified file
and the file will be uploaded.
2025-07-08 19:38:13 -04:00
Neal Shah d8a4180b4f Puter.js workers api (#1339) 2025-07-08 13:29:02 -07:00
Zac0511 858929a3b9 Add a basic Firebase Studio config file (#1338) 2025-07-08 08:32:19 -07:00
jelveh 1952549f5a Add new Mistral model coercions to puter.js 2025-07-07 23:07:32 -07:00
jelveh f50ac9e8f9 Update Mistral models 2025-07-07 22:50:47 -07:00
KernelDeimos cbfb9283d1 fix: add safeguard in case server response is wrong 2025-07-07 17:25:01 -04:00
KernelDeimos 405564f55f fix: update refresh_actor cache invalidation 2025-07-07 15:20:43 -04:00
jelveh 74a01a8752 Add reset results functionality to test UI
- Introduced a "Reset results" button to clear test container backgrounds and remove error messages.
- Implemented hover styles for the reset button to enhance user interaction.
- Ensured the reset functionality hides the progress panel and resets progress tracking.
2025-07-06 18:54:31 -07:00
jelveh 190f8352f0 Add performance tests for get and set methods in kv module
- Introduced two new tests: testGetPerformance and testSetPerformance.
- Each test measures the execution time of the respective method and asserts that it completes in under 100ms.
- Ensured correct value retrieval and performance metrics are logged for both tests.
2025-07-06 17:52:32 -07:00
jelveh 41cb7a06b7 Implement progress panel for test execution tracking
- Added a progress panel to display real-time test execution status, including current test, progress percentage, and elapsed time.
- Introduced styles for the progress panel and its components to enhance visibility and user experience.
- Implemented JavaScript functions to manage progress tracking, including starting and stopping timers, and updating the panel with test results.
- Ensured the progress panel is responsive to test selections and updates dynamically during test execution.
2025-07-06 15:42:02 -07:00
jelveh f23216b122 partially selected checkboxes should are reflected in the heading master checkbox 2025-07-06 15:20:12 -07:00
jelveh f06c13a427 Update test counter styles for improved visibility
- Adjusted the styles for the test counter to enhance its appearance.
- Removed inline styles from the test counter span for cleaner HTML structure.
- Ensured consistent font size and color for better readability.
2025-07-06 15:16:11 -07:00
jelveh a605ef42a1 Enhance test UI with navigation and counter display
- Added a fixed navigation bar for improved accessibility and layout.
- Introduced a test counter to display the number of selected tests.
- Updated styles for better alignment and spacing in the test UI.
- Ensured the counter updates dynamically based on checkbox selections.
2025-07-06 15:11:47 -07:00
jelveh b4143a6f39 Enhance test UI with master checkbox functionality
- Updated the test UI to include a master checkbox that controls the selection of individual test checkboxes.
- Implemented logic to update the master checkbox state based on the selection of individual checkboxes and group checkboxes.
- Adjusted the margin for h2 checkboxes for improved layout.
2025-07-06 14:59:51 -07:00
jelveh afa6333224 Merge branch 'main' of https://github.com/heyputer/puter 2025-07-06 14:55:03 -07:00
jelveh e58d6f0770 Enhance test UI with sticky headers and checkbox groups
- Added sticky positioning for h2 headers in the test section.
- Updated h2 elements to include checkboxes for grouping tests (File System, Key Value Store, AI).
- Implemented event listeners to synchronize individual test checkboxes with their respective group checkboxes.
- Simplified select/unselect all functionality to update group checkboxes accordingly.
2025-07-06 14:54:55 -07:00
KernelDeimos f6e6e8dff8 fix: shortcut KV permissions
All users have access to KV, however the permission system is used
because:
1. KV is a driver, and all drivers have access checks
2. The rate limit policy comes from the permission system

This change uses support for implicit permission shortcuts to prevent
any of the permission association tables from being read. It also
hard-codes the policy so that KV's rate-limit policy is not read from
the policy.json file.
2025-07-06 15:59:07 -04:00
KernelDeimos 3f0e7659f3 dev: add support to imply shortcut permissions
Permission implicators with the "shortcut" option will be checked prior
to concurrent permission scanning. If any of these permissions are
granted, then the concurrent phase of permission scanning will not be
invoked; instead, the user will only see the shortcut permission.

It may be useful to add an option in the future for a full permission
scan, which could be useful in such things as a user interface to help
with permission management.
2025-07-06 15:59:07 -04:00
KernelDeimos 3f483c5bf5 dev: add otel spans for permission scans and db 2025-07-06 15:59:07 -04:00
KernelDeimos fd956cb1cd fix: improvements to jaeger trace service
- migrate config location (legacy location still supported)
- allow passing additional otel options when creating spans
2025-07-06 15:59:07 -04:00
Neal Shah bddc872e00 feat: puter workers
* experimental Cloudflare Workers for Platforms support

* add support for the puter driver

* stop hardcoding api.puter.localhost

* support destroy from express route as well

* initial worker support

* xhrshim + fixes (incomplete)

* change order of readyState + load event

* remove some debug logs

* change worker/puterUtils into a cjs module

* Cloudflare workers eventtarget workaround

* worker preamble webpack

* edit worker readme to reflect reality

* allow a way to code in api endpoint instead of hardcoding it to api.puter.com

* move cloudflare eventtarget fix to puter-portable template

This is so it gets run before the rest of puter-js initializes

* remove express route for worker
2025-07-05 17:01:44 -04:00
jelveh 8fa8dd0987 Add tests for App Directory isolation 2025-07-05 12:24:45 -07:00
jelveh af9bf0980c Add puter.ai streaming test 2025-07-05 11:36:29 -07:00
jelveh a2d05af556 Add support for Uint8Array in puter.fs.write 2025-07-05 11:18:13 -07:00
jelveh b0a2590426 Remove redundant tests in puter.js 2025-07-05 10:53:14 -07:00
jelveh 779ee8d5d2 Add human-readable descriptions to Puter.js tests 2025-07-05 10:50:06 -07:00
jelveh 1fb1edd621 remove unused tests from GUI 2025-07-05 10:26:56 -07:00
jelveh 4ca7e852d8 fix toolbar showing scroll on disabling autohide 2025-07-05 09:41:00 -07:00
jelveh 7ccc704694 Use better font for the test UI 2025-07-04 19:14:18 -07:00
jelveh a02a228bf6 Add a 'test' button to each test in Puter.js's test suite 2025-07-04 19:12:06 -07:00
jelveh 6da8ebfe96 Fix the copy assertion rule in puter.js test suites 2025-07-04 19:05:04 -07:00
jelveh 9698761b2b AND MOOOAREEE AI tests 2025-07-04 19:01:16 -07:00
jelveh 3fdee779c7 MOAAAAREEE AI tests! 2025-07-04 18:43:10 -07:00
jelveh 478aed7bda Add basic tests for puter.ai 2025-07-04 18:20:31 -07:00
Nariman Jelveh 3eef18c578 Remove captcha from frotnend (#1335) 2025-07-04 16:31:42 -07:00
KernelDeimos f3c658c011 chore: sync package-lock.json 2025-07-04 18:30:00 -04:00
KernelDeimos 354b116b42 fix: make sharp optional 2025-07-04 18:29:29 -04:00
KernelDeimos 502204a7b7 test: update tests, migrate backend to vitest
Backend had tests written in mocha as well as a test written for jest
(created by an AI utility, wasn't compatible with mocha tests). The AI
generated test had merit so it was migrated to vitest along with all the
mocha tests, which supports conventions from both frameworks.

Vitest also has an excellent watcher cli.

The root repo package.json now runs unit tests in backend. Before it was
only running tests defined in the _test method of backend services.
2025-07-04 18:21:45 -04:00
Nariman Jelveh 87e15cac2d Update SECURITY.md to use the warning tag in the markdown 2025-07-04 06:51:48 -07:00
Xiaochen CuiandEric Dubé ade213b88b fix: return proper error message when the model is not found (#1331)
* fix: return proper error message when the model is not found

* use global source for the domain

Co-authored-by: Eric Dubé <[email protected]>

---------

Co-authored-by: Eric Dubé <[email protected]>

Closes #1326
2025-07-03 17:58:04 -04:00
KernelDeimos c7970fd1a8 fix: include base reserved words by default 2025-07-03 17:41:10 -04:00
jelveh b0b131f214 add expire mthod to puter.kv 2025-07-02 22:54:55 -07:00
jelveh 6df1d4d5f2 Fix puter.js test for incr and decr in KV 2025-07-02 22:31:25 -07:00
jelveh 2bad220602 Update KVStoreInterfaceService.js 2025-07-02 20:10:00 -07:00
jelveh 0947b90c87 Make puter.js tests print out error results 2025-07-02 20:06:25 -07:00
jelveh 37d09a63d4 Only support language and voice (ordered) in puter.js txt2speech 2025-07-02 18:08:54 -07:00
Nariman Jelveh aa3032da8e Add preliminary support for different voices (#1325) 2025-07-02 17:09:48 -07:00
jelveh 62e786faa6 Do not activate toolbar when desktop selectable is active 2025-07-02 16:14:18 -07:00
jelveh 7285a27be4 Fix toolbar autohide/hide timing 2025-07-01 22:42:50 -07:00
Nariman Jelveh 2103374854 Dynamic toolbar: allow users to customize toolbar sticky (#1330)
* close #1329
2025-07-01 18:37:36 -07:00
Nariman Jelveh 485f9a6f14 Don't hide the toolbar on mobile and tablet (#1328) 2025-06-30 17:18:56 -07:00
Nariman Jelveh 9700488aff Merge pull request #1324 from HeyPuter/dynamic-toolbar
Dynamic toolbar
2025-06-30 16:53:35 -07:00
jelveh edf00a5fd4 Update style.css 2025-06-30 10:24:24 -07:00
jelveh 278bb29ee5 better coloring and delay 2025-06-30 07:01:16 -07:00
jelveh 0864be054c When a window is being dragged don't activate toolbar (duh!) 2025-06-29 19:36:03 -07:00
jelveh 40260a9fb2 full support for fullpage mode 2025-06-29 19:17:58 -07:00
jelveh ad68ddeacc make window snap animation appear faster 2025-06-29 17:36:58 -07:00
jelveh 54ae9c1ca9 the first time toolbar is shown, keep it open until user hovers over it at least once 2025-06-29 16:57:24 -07:00
jelveh b1de89e1ec Update tr.js 2025-06-29 16:03:41 -07:00
jelveh 3db99aa67b Puter will now support only one type of menubar, and that's the in-window type 2025-06-29 15:58:53 -07:00
jelveh 0895418f0c Improve the logic behind hiding the toolbar after clicks and other interactions 2025-06-29 15:18:20 -07:00
jelveh b0fdf1f63d Implement the basics of a dynamic toolbar
Dynamic toolbar will hide and show automatically depending on user actions and state of the app. This is to save screen real estate.
2025-06-29 14:21:40 -07:00
jelveh 657a615d9e Update AI.js 2025-06-28 23:28:31 -07:00
Nariman Jelveh 2ddd26b13d Merge pull request #1319 from Krisss46/fixing-arrow-key-behaviour
fix: arrow key navigation in Explorer (#1089)
2025-06-28 20:44:56 -07:00
Krisss46 5fd5017080 fix: arrow keys unresponsive when selecting items with offset center points 2025-06-29 03:05:17 +01:00
jelveh 9a847760bc Fix #1231 2025-06-28 12:38:39 -07:00
Nariman Jelveh a135c354fb Merge pull request #1318 from XiaochenCui/xiaochen/dev
dev: extension prefix update, doc helper & docs update
2025-06-28 11:29:24 -07:00
Krisss46 ae07a5e316 fix: arrow key navigation 2025-06-28 16:12:12 +01:00
Nariman Jelveh 9b9733c9c2 Merge pull request #1219 from rodrick-mpofu/feature/desktop-shortcut-link
feat: add desktop link shortcuts (refs #682)
2025-06-27 23:27:51 -07:00
jelveh 06f5601a2e Update package.json 2025-06-27 23:10:53 -07:00
jelveh 75d22b010c Update package-lock.json 2025-06-27 23:09:25 -07:00
jelveh c4e32474b2 Remove some redundant checks and favicon handling logic 2025-06-27 23:05:53 -07:00
jelveh ad62182566 Update new_context_menu_item.js 2025-06-27 22:53:49 -07:00
jelveh 1df874c581 remove refresh_item_container since it's not used 2025-06-27 22:49:58 -07:00
jelveh aeac392a7c Remove mods and favicons 2025-06-27 22:46:34 -07:00
Nariman Jelveh 196f996435 Merge branch 'main' into feature/desktop-shortcut-link 2025-06-27 22:45:38 -07:00
XiaochenCui 0b7474340f dev: extension prefix update, doc helper & docs update 2025-06-27 16:29:16 -07:00
KernelDeimos 7f6b302636 fix: remaining issues with fake-chat/costly 2025-06-27 14:31:26 -04:00
KernelDeimos f46d47d2a8 fix: cost testing model 2025-06-27 14:19:03 -04:00
jelveh 1ad113bbbf Update package-lock.json 2025-06-26 22:59:02 -07:00
Nariman Jelveh c7f4df63da Merge pull request #1314 from bilalkhantanoli/nn-translation-completion
fix(i18n): Complete Norwegian Nynorsk translation
2025-06-26 22:45:56 -07:00
KernelDeimos ae4dc23c37 fix: incorrect pricing 2025-06-26 22:06:32 -04:00
KernelDeimos 60a9be12ba fix: update package-lock.json 2025-06-25 15:00:07 -04:00
Bilal 807d7bd698 fix: complete Norwegian Nynorsk translation 2025-06-22 12:25:22 +05:00
jelveh 7896c59ef8 Remove terminal and draw from Launch menu 2025-06-21 22:42:48 -07:00
KernelDeimos 2d9526ba40 fix: install 2025-06-21 22:00:26 -04:00
KernelDeimos 43122801bf fix: various AI fixes
- fix mis-handling of aliased models and DRY so it doesn't happen again
- fix where we try to get model details for a pseudo model
  (usage-limited)
- fix metering with non-streaming mistral requests
2025-06-21 21:39:52 -04:00
KernelDeimos ddfd11713e tweak: change default model to gpt-4.1-nano 2025-06-21 20:28:53 -04:00
KernelDeimos 52f79061ce dev: add cost-calculated event for AI chat 2025-06-21 20:21:49 -04:00
KernelDeimos d9a6a03740 tweak: update pricing for 4o-mini 2025-06-21 20:21:32 -04:00
jelveh c3d2ce5d0e Add max_tokens to all models' metadata 2025-06-21 16:13:50 -07:00
KernelDeimos ebefca2c24 dev: add some max_tokens values 2025-06-21 18:02:00 -04:00
jelveh 6f6bb5a484 Remove Convert, IPGeo, NewsData, Firebase, Mail, Analytics, and Weather 2025-06-21 14:57:58 -07:00
KernelDeimos 4b5955b459 fix: add missing unit conversion step 2025-06-21 17:12:55 -04:00
KernelDeimos 62d72676af dev: enable custom text and fix max_tokens for fake-chat 2025-06-21 05:13:59 -04:00
KernelDeimos 2e90e8dc96 fix: streaming in FakeChatService 2025-06-21 03:21:54 -04:00
KernelDeimos 9235ddd6f3 dev: change message in ai service 2025-06-21 02:19:04 -04:00
KernelDeimos 1a85eeca5c dev: add value to prompt validation event 2025-06-21 02:03:11 -04:00
KernelDeimos 3f5de6d493 fix: use correct path for openrouter max tokens 2025-06-21 01:43:54 -04:00
KernelDeimos 26fb2e704f dev: apparently LLM APIs can't do Math.min 2025-06-21 00:28:38 -04:00
KernelDeimos 52b778a2e7 dev: improve use metering 2025-06-20 23:04:46 -04:00
KernelDeimos a7d1bf0e99 fix: remove dormant condition operand from signup.js 2025-06-20 19:41:06 -04:00
Nariman Jelveh 0accd41e13 Merge pull request #1311 from Rohanpawar9921/docs/rohan-readme-hindi
docs(i18n): update Hindi translation of README
2025-06-19 21:05:56 -07:00
jelveh d3d7e38c3e Remove the Email, Exec, and Convert modules in Puter.js 2025-06-19 20:50:45 -07:00
KernelDeimos db960d585a fix: add support for new Endpoint usage 2025-06-19 23:46:23 -04:00
KernelDeimos 5903f1fb31 fix: incorrect call to APIError from configurable_auth 2025-06-19 23:44:45 -04:00
KernelDeimos 5b7b524080 fix: add one I missed previous commit 2025-06-19 23:37:03 -04:00
KernelDeimos e5e88073c1 dev: add some useapi exports to CoreModule 2025-06-19 23:27:57 -04:00
Rohanpawer9921 f97a23a181 docs(i18n): update Hindi translation of README 2025-06-18 10:29:24 +05:30
KernelDeimos 3918917f31 dev: add appdata_app property to stat response 2025-06-18 00:22:15 -04:00
KernelDeimos 659879812d fix: necessary updates happen for move save too 2025-06-18 00:21:23 -04:00
KernelDeimos 8b56d1131c clean: move handle_url_save for readability 2025-06-17 22:16:00 -04:00
KernelDeimos 771eb37c7f dev: add save file by moving from appdata 2025-06-17 22:14:40 -04:00
KernelDeimos 0eb436678b move: handle_same_name_exists to helpers.js 2025-06-17 21:11:44 -04:00
KernelDeimos a4b412dc46 refactor: IPC/showSaveFilePicker 2025-06-17 21:03:32 -04:00
KernelDeimos a8164c1108 doc: document event buses and http (unfinished) 2025-06-17 13:13:02 -04:00
KernelDeimos 352ec6d883 dev: allow apps to sign files in their AppData 2025-06-17 13:12:25 -04:00
KernelDeimos 6315020cc0 dev: regex rules for undefined origin allowed
This commit allows using a regex to specify a route that's allowed to
not have an "Origin" header specified. This is necessary for parametized
URLs.
2025-06-16 18:16:18 -04:00
KernelDeimos 24cae79291 dev: expose LLOWrite to Puter extensions 2025-06-16 17:26:03 -04:00
KernelDeimos 152a5578fc fix: issue using ll_write outside of hl_write
Using LLOWrite outside of HLWrite, which is useful inside a Puter
extension when a simple write operation is being invoked by the backend,
required passing a thumbnail. However, sometimes this is not necessary.
This commit makes it possible run an LLOWrite operation without passing
a thumbnail stream.
2025-06-16 17:23:40 -04:00
KernelDeimos 914b077e1a doc: document config and logging in services 2025-06-11 18:03:51 -04:00
Nariman Jelveh 1652fb496c Delete experiments directory 2025-06-10 15:13:12 -07:00
Nariman Jelveh 2bebc4ba9f Delete badges directory 2025-06-10 15:11:16 -07:00
Nariman Jelveh d34fc897fa Update README.md 2025-06-10 15:10:47 -07:00
Nariman Jelveh 8d6ed96fc7 Delete src/git directory 2025-06-10 15:08:44 -07:00
Nariman Jelveh af84f60f7b Delete awesome directory 2025-06-10 15:07:17 -07:00
Nariman Jelveh 5ed4a28495 Delete addlicense.yml 2025-06-10 15:06:08 -07:00
Nariman Jelveh 4ade2e3fb3 Delete index.html 2025-06-10 14:58:39 -07:00
KernelDeimos 5c2155491d dev: updates for extension-hosted apps
The following changes make it easier to host web apps from inside a
Puter extension:
- expose express module to prevent mixing versoins
- allow registration of URLs exempt from origin requirement
2025-06-06 15:52:21 -04:00
KernelDeimos ca84ed34bf dev: meta driver with usages method 2025-06-05 19:14:04 -04:00
KernelDeimos 20ba064181 dev: log actor uid with created wisp tokens 2025-06-03 16:28:13 -04:00
ATAG bdbe773ff2 doc: add freebsd-specific instructions to first-run-issues.md
Fix the missing 'sharp' dependency on FreeBSD, since it doesn't have prebuilt binaries for this OS.
2025-06-03 15:19:56 -04:00
Krishna d885ea5772 fix: enable and fix date command tests
Closes #796
2025-06-03 15:04:01 -04:00
KernelDeimos a402528018 dev: add explicit error for undefined auth token 2025-06-03 14:52:01 -04:00
jelveh 5bfd10f845 Enable fullpage_on_loading by default for new apps 2025-06-01 22:10:21 -07:00
KernelDeimos e9b249c74f doc: clarify formatting changes in PRs 2025-05-30 17:28:05 -04:00
Tanmay Patwary feb45d192f doc: clarify CostService usage and improve metered services discoverability 2025-05-28 02:52:49 -04:00
Nariman Jelveh a39af1884e Merge pull request #1286 from ProgrammerIn-wonderland/main 2025-05-27 13:37:39 -07:00
ProgrammerIn-wonderland 99cf2cad67 remove log 2025-05-27 16:36:23 -04:00
ProgrammerIn-wonderland 54ec707f7f support for request bodies 2025-05-27 16:34:58 -04:00
jelveh 345c628262 add the code option to puter.print 2025-05-26 15:38:38 -07:00
Nariman Jelveh e227b92f36 Merge pull request #1284 from ProgrammerIn-wonderland/main
Networking: dont sent authentication header if puter.authToken is undefined
2025-05-26 15:06:52 -07:00
ProgrammerIn-wonderland d1a9bed107 Networking: dont sent authentication header if puter.authToken is undefined 2025-05-26 18:05:59 -04:00
Neal Shah bcbf852f5c tweak: make auth UI not required for now (#1283) 2025-05-26 17:36:28 -04:00
KernelDeimos 1024fe28c3 dev: update wisp service for guest tokens 2025-05-26 17:28:50 -04:00
Tanmay Patwary 7831d12d42 chore: sync extension events documentation with backend changes 2025-05-26 17:03:38 -04:00
KernelDeimos ccdb678937 fix: save_account lock timeout
There was a setTimeout here that was supposed to be replaced with the
timeout feature on LockService, but it looks like that never happened.
2025-05-26 13:31:03 -04:00
KernelDeimos 1a0718028b dev: migrate toolbar labels to i18n 2025-05-26 13:04:10 -04:00
KernelDeimos 9c78c0d3f7 dev: rename 'puter.log' to 'puter.logger' 2025-05-26 11:31:16 -04:00
jelveh 951bc0ea7a Only show Puter Dialog when needed 2025-05-23 19:50:47 -07:00
KernelDeimos dbdebec635 dev: disable preauth for now 2025-05-23 17:50:14 -04:00
KernelDeimos 340871295e dev: pre-auth 2025-05-23 17:33:24 -04:00
KernelDeimos 6363f6307c dev: make it possible to handle requests from extension 2025-05-23 17:00:15 -04:00
KernelDeimos fde1a11515 dev: add request.will-be-handled event 2025-05-23 16:23:46 -04:00
KernelDeimos ca3acf13c1 fix: wrong symbol in previous commit 2025-05-22 15:42:43 -04:00
KernelDeimos 2cd5b3cb49 fix: prevent health check from surpressing traces
Stack traces aren't logged when a health check failure occurs. This was
caused by interfacing with AlarmService directly instead of using the
error service.
2025-05-22 15:20:05 -04:00
jelveh 5a6b299e78 Update AI.js 2025-05-22 11:13:01 -07:00
jelveh d2cc550c96 add claude sonnet 4 and claude opus 4 2025-05-22 10:45:26 -07:00
jelveh 491cf506de Update index.js 2025-05-21 19:51:30 -07:00
jelveh b703b60977 omg this is getting out of hand 2025-05-21 19:40:50 -07:00
jelveh f765180c1b well, puter.log is taken so going to change puter.print instead 2025-05-21 19:21:52 -07:00
jelveh f6786b8895 introduce the puter.log() method 2025-05-21 18:50:15 -07:00
jelveh 7f699302a4 Trying out the XSS-safe approach for puter.print 2025-05-21 18:11:51 -07:00
Nariman Jelveh bd8d141879 Merge pull request #1273 from ProgrammerIn-wonderland/main
Housekeeping: Get rid of puter.http/puter.https
2025-05-20 18:56:03 -07:00
ProgrammerIn-wonderland 6af0cddfc6 Housekeeping: Get rid of puter.http/puter.https 2025-05-20 21:38:34 -04:00
Nariman Jelveh cfdf2b304e Merge pull request #1272 from ProgrammerIn-wonderland/main
fix TLS stream premature close issue
2025-05-20 18:29:35 -07:00
ProgrammerIn-wonderland 75f0e043ea fix TLS stream premature close issue 2025-05-20 21:26:44 -04:00
Nariman Jelveh aeac68750b Merge pull request #1271 from ProgrammerIn-wonderland/main
Add support for chunked encoding in puter.net.fetch
2025-05-20 18:23:56 -07:00
ProgrammerIn-wonderland 0d48389c40 code formatting 2025-05-20 21:04:34 -04:00
ProgrammerIn-wonderland 7a6df9a63f change todo 2025-05-20 21:03:28 -04:00
ProgrammerIn-wonderland af2df13619 add support for chunked encoding 2025-05-20 21:01:09 -04:00
Nariman Jelveh 17e50243f9 Merge pull request #1270 from ProgrammerIn-wonderland/main
fix accidental checking of requestHead when responseHead should be checked
2025-05-20 15:03:36 -07:00
ProgrammerIn-wonderland 2a16a2502b fix accidental checking of requestHead when responseHead should be checked 2025-05-20 18:01:57 -04:00
Nariman Jelveh 9b3aa2508d Merge pull request #1269 from ProgrammerIn-wonderland/main
Puter.net.fetch -- cors exempt wisp based fetch
2025-05-20 14:29:29 -07:00
ProgrammerIn-wonderland 95f1656780 initial puter.net.fetch implementation 2025-05-20 17:27:10 -04:00
ProgrammerIn-wonderland 9fdca11070 fix auth flow on subsequent loads 2025-05-20 16:40:38 -04:00
KernelDeimos 8d371b9e7b dev: remove default token limit from Openrouter 2025-05-19 18:52:05 -04:00
KernelDeimos 76b973cd41 dev: add additional debugging for stream AI errors 2025-05-19 17:24:47 -04:00
KernelDeimos 8a0619af26 dev: reduce visible log output by default
- introduce concern-based log categories
- ensure debug-level logs aren't shown without DEBUG env variable
- remove some unnecessary/outdated logs
- add concern fields to services and log instantiations
2025-05-19 16:41:42 -04:00
KernelDeimos cecc9f23dc fix: pass dedupe_name to mkshortcut via batch 2025-05-18 21:00:58 -04:00
jelveh 93645cd0ae remove redundant console.logs 2025-05-18 17:37:40 -07:00
KernelDeimos 1c19086592 fix: add necessary supporting code for funding update 2025-05-17 22:15:21 -04:00
jelveh ea405e5cb6 Update style.css 2025-05-17 15:47:50 -07:00
jelveh 84e190cb59 Revert broken code for deleting profile picture 2025-05-17 15:20:59 -07:00
jelveh d7b9f1e866 Remove the Flexer component from the Security tab in settings 2025-05-17 14:30:57 -07:00
jelveh b23d8b504d Remove Spinner.js 2025-05-17 14:17:56 -07:00
jelveh 4862bac495 Remove StringView.js 2025-05-17 14:10:34 -07:00
jelveh 7d88a8b959 Update UIWindowTaskManager.js 2025-05-17 14:02:24 -07:00
jelveh ab1cbb257c Remove the Table component 2025-05-17 13:50:14 -07:00
jelveh dc399d8774 Update style.css 2025-05-17 13:18:05 -07:00
jelveh a28cb11c34 Make the sidebar in settings fixed 2025-05-17 13:16:52 -07:00
jelveh 17a77f97a1 add correct i18n keys for the professional subscription tier 2025-05-17 13:00:54 -07:00
jelveh a1b96b7130 Allow users to open Settings and specific tabs from a URL 2025-05-17 12:30:27 -07:00
KernelDeimos 7823fdfab0 dev: add lazy render option for UIElement 2025-05-17 15:23:14 -04:00
Nariman Jelveh da66b03163 Merge pull request #1268 from ProgrammerIn-wonderland/main
change initialization order to make wisp socket on first use of network
2025-05-16 14:19:51 -07:00
ProgrammerIn-wonderland f944d76261 change initialization order to make wisp socket on first use of networking 2025-05-16 17:18:28 -04:00
Nariman Jelveh 7f1f98ae70 Merge pull request #1267 from ProgrammerIn-wonderland/main
Add reauthentication for unauthenticated web clients when Socket api is called
2025-05-16 11:18:28 -07:00
ProgrammerIn-wonderland 73e6830b1f Add reauthentication for unauthenticated web clients 2025-05-16 13:45:55 -04:00
jelveh 39a59970bb remove startup chime 2025-05-15 23:26:10 -07:00
jelveh f942c13be0 Revert UIItem refactor and fix the position of Create Shortcut in the context menu 2025-05-15 23:21:11 -07:00
jelveh 0012fd3970 Remove unused imports all over the codebase 2025-05-15 22:34:14 -07:00
jelveh 8dcf75ba54 Update ui_item.js 2025-05-15 17:47:05 -07:00
KernelDeimos 5f14dc720b fix: build error 2025-05-15 20:44:54 -04:00
jelveh 9c14a21fdd Use i18n for "Share With..." 2025-05-15 17:12:13 -07:00
KernelDeimos 880760c602 ux: use financial units instead of SI for credits
Instead of K, M, G, T, P it's K, M, B, T, Q.
2025-05-15 14:05:35 -04:00
KernelDeimos 3290440f4b dev: document auth and permissions 2025-05-15 14:05:35 -04:00
jelveh 0e0bfd6d7c Update PuterDialog.js 2025-05-13 17:34:11 -07:00
KernelDeimos 3dbe89f3dc dev: migrate "Create Shortcut" to DRY multi/single 2025-05-12 17:34:04 -04:00
KernelDeimos aa049b2c5a dev: factor out menu items functions in UIItem
The large if...else block for single-item vs multi-item selection
context menu items makes it difficult to extract common behaviors
between the two. For example, the "create shortcut" menu item could be
added by the same code snippet in both cases, and that snippet might
have conditional logic for the number of items (with 1 as a special
case).

The reason to move branching logic to the code snippets that handle
individual menu items is because the previous change to fix shortcuts in
shared directories revealed cross-cutting concerns in branching logic.
Since both single-item and multi-item "create shortcut" options both
have branching to handle the shared directory case, they are now more
similar than different.
2025-05-12 16:39:21 -04:00
KernelDeimos 73ab4baa60 dev: SI suffix for usage meter 2025-05-12 15:18:02 -04:00
KernelDeimos 72a45500d5 fix: cannot create shortcut for shared file
Closes #1263
2025-05-12 13:25:38 -04:00
KernelDeimos 518449cfdd fix: share issue 2025-05-09 17:04:00 -04:00
KernelDeimos 9bf48e7289 fix: fallback behavior related to fake-chat service
Fallbacks from or to the fake-chat service should not be allowed.
Fallbacks to the "costly" model from fake-chat could result in
unintended charges and fallbacks to real models from fake-chat could
result in service abuse.
2025-05-05 16:10:52 -04:00
KernelDeimos 34787bbb0c fix: gone 2025-05-03 21:27:21 -04:00
KernelDeimos 77f3bf2177 fix: ui bug in settings window 2025-05-02 16:01:26 -04:00
KernelDeimos 75aebd6d35 fix: sqlite syntax inconsistency
The SQL statement for creating a group uses syntax that only works under
sqlite. This was caused by introducing anomaly detection when a user
creates a large number of groups in quick succession.
2025-05-02 14:34:46 -04:00
KernelDeimos 4647e2d9c0 dev: add experimental firebase authentication
This adds an experimental custom token authentication endpoint to Puter.
This is disabled unless the firebase-auth service is explicitly
configured, and is not yet ready for production use.
2025-05-01 17:14:25 -04:00
Nivedita Rani 284b89a5fd fix: iframe overlap issue (PR 1250)
* Removed css property overflow: hidden at the parent container which was interfering with the layout calculations and was forcefully clipping child elements

* Replace css property overflow: hidden  with contain: paint to fix stacking without masking border-radius

Fixes #1233
2025-05-01 13:55:17 -04:00
KernelDeimos ea241540b9 dev: add WeatherService
- adds weather service
- updates IdentificationService to add ip_user property
2025-04-29 13:43:53 -04:00
KernelDeimos 29dbf3a517 dev: URLs to files in public directories
Already existing was the functionality to go to puter.local/@username to
access the Public folder belonging to "username". This commit adds the
ability for relative paths such as puter.local/@username/document.md to
access /username/Public/document.md in the suggested app for handling
".md" files.
2025-04-28 17:40:02 -04:00
KernelDeimos 3856ddcc8f dev: add default parameters for driver interfaces 2025-04-25 16:03:22 -04:00
KernelDeimos c5c17bae3a dev: add cost calculation for NewsDataService 2025-04-25 14:14:58 -04:00
KernelDeimos 78ae6f6bf2 dev: begin implementing driver for newsdata.io 2025-04-24 17:04:30 -04:00
KernelDeimos 89b8c8de1d fix: add missing null check 2025-04-24 16:09:32 -04:00
KernelDeimos b7efa6f894 fix: handle problematic null or undefined case
This is the product of a couple hours of debugging. We can now remove
the uuid entry from the cache for a deleted user without the strange
lockup behavior that was being observed previously. However, it is still
explained exactly how this happened; while this commit addresses the
cause it does not represent an actual understanding of the issue.

What is known is the following:
- /delete-own-user can trigger a complete lockup
- this happens when invalidate_cached_user is called
- kv.del('users:uuid:<uuid of user>') triggers the issue
- ... because get_user returns null and
- configurable_auth middleware accepts the null value
- configurable_auth middleware DOES call next()
- it is unknown why a lockup occurs after this
2025-04-24 14:41:05 -04:00
KernelDeimos 210ecaba8f tmp: comment out user uuid del 2025-04-23 22:33:25 -04:00
KernelDeimos 2b0c8fcaf0 dev: expose Context and ready event to extensions 2025-04-23 15:51:28 -04:00
KernelDeimos abf5852b93 dev: better log support for extensions 2025-04-23 15:28:15 -04:00
KernelDeimos a3ae60861c dev: add injected logger support
This allows a logger to be specified in the execution context. If
LogService sees this, it will perform its usual logging but also call
the injected logger.
2025-04-23 14:49:18 -04:00
KernelDeimos 017328420d dev: add support for an "any" interface
Driver interfaces don't require specifying the structure of the return
value when it's a JSON object, but parameters require specifying what
parameters can be provided. This commit adds a special wildcard
parameter for interface definitions. When the wildcard parameter is set,
the entire input object is considered as if it were the value of one
parameter.
2025-04-22 16:29:55 -04:00
KernelDeimos 790e3bdffc dev: puter.call
Instead of puter.drivers.call, make it puter.call. This is accomplished
by allowing puter.js modules to mutate the `puter` object on
initialization. Support for an optional `_init` method, similar to
backend services, is added to Puter modules to help with this.
2025-04-22 15:21:36 -04:00
KernelDeimos 9935f5a0be dev: simplify calling drivers with matching names
This commit modifies puter.js to allow calling an
interface+service+method with matching names without redundantly
specifying. The 'ip-geo' service is also renamed to ipgeo to match its
method name and allow a simple:

puter.drivers.call('ipgeo', { ip: '1.2.3.4' })
2025-04-22 14:01:01 -04:00
KernelDeimos 1764b99c22 dev: add log messages for cost records 2025-04-22 13:14:41 -04:00
KernelDeimos 7e7e2897b2 dev: improve actor logs
This commit adds the concept of a toLogFields method on objects which
will determine how they're turned into log fields in LogService. This
method is now implemented on actor to prevent errors when the object is
passed to log functions without being stringified first.
2025-04-22 12:52:09 -04:00
KernelDeimos b80052f177 dev: add cost service integration to IPGeoService 2025-04-22 12:07:13 -04:00
KernelDeimos 7945586050 dev: ip geolocation driver (initial development) 2025-04-21 17:53:39 -04:00
KernelDeimos 8ff2e93e66 tweak: add limit to deleteUser file select
I wasn't able to reprod any memory leak from a user having a large
number of files locally, but it's showing up in logs and maybe could add
up with lots of temp users getting auto-removed. It's worth a shot.
2025-04-19 15:45:33 -04:00
KernelDeimos f7b302b024 fix: potential log error 2025-04-19 14:27:14 -04:00
KernelDeimos c254b39afe fix: consistent email check in confirm-email 2025-04-19 11:07:13 -04:00
KernelDeimos c959ef3b83 dev: add actor to log context when available 2025-04-18 16:55:11 -04:00
KernelDeimos fdfa4cbc7c dev: log memory info periodically 2025-04-18 16:26:52 -04:00
KernelDeimos cc72508b75 dev: remove default system prompt 2025-04-17 15:35:35 -04:00
jelveh 2cdcc5ffcd Add o3 and o4-mini models 2025-04-16 11:06:57 -07:00
jelveh b17dc58ca6 remove unused imported modules 2025-04-15 23:44:11 -07:00
jelveh 19574e5bb1 Update OpenAICompletionService.js 2025-04-15 23:33:03 -07:00
jelveh c732263958 Update AI.js 2025-04-15 23:24:53 -07:00
jelveh cab933f1c2 Update AI.js 2025-04-14 12:56:32 -07:00
jelveh 68860d8876 Update AI.js 2025-04-14 12:52:54 -07:00
jelveh 42f0ac5785 Use OpenAI for `o1-mini1 2025-04-14 12:44:58 -07:00
jelveh 90d16c35e2 Add missing openai models 2025-04-14 12:36:07 -07:00
jelveh 16b8adc4ed add new GPT models 2025-04-14 12:26:04 -07:00
jelveh 2d7ca7f2e1 better error message for invalid emails 2025-04-13 18:24:06 -07:00
jelveh 398b1578a5 Update signup.js 2025-04-13 17:56:56 -07:00
jelveh 2949e16be2 Update signup.js 2025-04-13 17:38:53 -07:00
jelveh c9c441210b Update signup.js 2025-04-13 17:08:58 -07:00
jelveh 4ea7754133 Update initgui.js 2025-04-13 16:52:23 -07:00
jelveh f14b0d1ac9 this didn't work, reverting 2025-04-13 16:39:31 -07:00
jelveh 1b83966c26 Update signup.js 2025-04-13 16:24:19 -07:00
KernelDeimos 107adce68b dev: disallow "auto" model
This model seems to cause us problems
2025-04-12 16:53:53 -04:00
jelveh daa95d8c39 Update AI.js 2025-04-10 20:17:35 -07:00
KernelDeimos dc2e406cc6 fix: use event service 2025-04-10 15:45:46 -04:00
KernelDeimos c7c7f78255 Revert "tmp: temporary timeout to test a theory"
This reverts commit d1e4ed7f63.
2025-04-10 01:40:21 -04:00
KernelDeimos d1e4ed7f63 tmp: temporary timeout to test a theory 2025-04-10 01:32:53 -04:00
KernelDeimos 3f0e990398 dev: polling in usage tab 2025-04-09 14:34:32 -04:00
KernelDeimos f0c06931bd fix: check funding with no args 2025-04-09 14:34:32 -04:00
KernelDeimos 2c9bc8f9e0 dev: instant update for usage in settings 2025-04-09 14:34:32 -04:00
KernelDeimos 0176a1f629 dev: update usages tab 2025-04-09 14:34:32 -04:00
KernelDeimos b5848012a9 delete: monthly usage limiting 2025-04-09 14:34:32 -04:00
KernelDeimos fc677ef61f dev: migrate judge0 and convertapi to cost service 2025-04-09 14:34:32 -04:00
KernelDeimos b57b907ba6 dev: migrate textract to use cost service 2025-04-09 14:34:32 -04:00
KernelDeimos 8d175bd3fa doc: test values for PermissiveCreditService 2025-04-09 14:34:32 -04:00
KernelDeimos c9d4eec018 dev: migrate polly to use cost service 2025-04-09 14:34:32 -04:00
KernelDeimos 82a4ab0884 dev: migrate image gen service to use cost service 2025-04-09 14:34:32 -04:00
KernelDeimos 14304143af dev: migrate image generation to use cost service 2025-04-09 14:34:32 -04:00
KernelDeimos b9b9c95f84 dev: minimum cost option 2025-04-09 14:34:32 -04:00
KernelDeimos 0201b93013 fix: redundant report-usage call in FakeChatService 2025-04-09 14:34:32 -04:00
KernelDeimos d0edb2c1f3 fix: async handling for events
There were issues with async handling in events which can make it
difficult to use event handlers to mutate values provided by an emitter.

This is not an optimal solution: this will await event listeners in
sequence. Ideally, event listeners should be awaited concurrently.
2025-04-09 14:34:32 -04:00
KernelDeimos 1f7073ef76 dev: add services property to extensions
A small change that adds ".services" to the "extension" global in an
extension, so extensions can more easily talk to other services.
2025-04-09 14:34:32 -04:00
KernelDeimos 21bd427cef refactor: generalize handling of costly services
Usage/cost tracking per user was over-fitted to LLM/AI services. This
commit adds CostService and updates AIChatService to use that instead of
updating the `ai_usage` table. The `ai_usage` table is now considered
deprecated.

A service called PermissiveCreditService is enabled by default in
SelfHostedModule. This is so users who host their own Puter instances
don't have to worry about usage limits, since they're providing their
own keys anyway.
2025-04-09 14:34:32 -04:00
KernelDeimos 0347a38136 fix: handle all temp user errors by reloading 2025-04-09 13:27:30 -04:00
KernelDeimos c8d52b3203 style: captcha refresh button 2025-04-08 16:54:36 -04:00
KernelDeimos d0e06e83c0 dev: add ip to captcha middleware event 2025-04-08 16:54:36 -04:00
jelveh 592acbcae6 remove "anthropic/" from model name 2025-04-08 12:34:23 -07:00
KernelDeimos 27fd7b3670 fix: broken model parameter 2025-04-08 13:27:56 -04:00
Nariman Jelveh fd910f36cf Merge pull request #1169 from shushannap/FAtranslation
tweak: reorder and fix Farsi translation of i18n keys
2025-04-08 08:41:16 -07:00
KernelDeimos 95ddfe3909 fix: error handling in ThreadService 2025-04-07 19:02:52 -04:00
KernelDeimos fc11eba070 fix: puter.js threads error handling 2025-04-07 18:43:21 -04:00
KernelDeimos 3e98d13f6b doc: document driver endpoint 2025-04-07 14:37:45 -04:00
KernelDeimos 9a12db2066 fix: .startsWith on undefined 2025-04-04 17:58:06 -04:00
jelveh 4fb772796f Update AI.js 2025-04-04 14:43:53 -07:00
EvaNtziou dad72c5bd7 feat: button to remove profile image #1245 (#1246)
* Restored and updated UITabAccount.js, style.css
* Update UITabAccount.js

Closes: 1245
2025-04-04 16:00:53 -04:00
jelveh 80060e863d Use openrouter for llama models 2025-04-03 17:23:26 -07:00
Nariman Jelveh ddb04431cc Update README.md 2025-04-02 18:48:22 -07:00
jelveh 590973f50d Update AI.js 2025-04-02 12:04:38 -07:00
KernelDeimos fb01bb474a fix: edge case during email change
Previous logic was:
- on email change, update temporary value
- send email to confirm new email
- temporary value is moved to real email

This doesn't work when an account has not yet confirmed their email
after signup (i.e. user's email_confirmed is still 0). Well, it actually
does work, but the user is only able to confirm the change to their
email and not set their account as having a confirmed email.

New logic has a branch for this case; IFF email_confirmed=0:
- change account confirm code
- send new account confirm email
2025-04-01 12:41:49 -04:00
KernelDeimos 7a3365a25c refactor: begin migrating utility code
I'm calling this approach a "re-core"; see src/backend-core-0/README.md
for more information about this.
2025-03-31 22:09:29 -04:00
KernelDeimos f2305ff289 fix: how did this get here 2025-03-31 20:22:13 -04:00
KernelDeimos e5f23e815d dev: disable textex by default
it's too verbose now
2025-03-31 20:07:19 -04:00
KernelDeimos f80105af6d fix: sure, but how 'bout a logo that isn't broken
A logo addition from another PR snuck in. This definitely makes it
consistent with signup, but this logo broken! This commit makes it be
not broken anymore.
2025-03-31 19:33:55 -04:00
Eric Dubé b7defab2d2 refactor: Migrate interfaces.js to new registration mechanism (#1239)
* refactor: migrate interfaces.js to new registration mechanism

- Created EntityStoreInterfaceService for crud-q interface\n- Created AnalyticsInterfaceService for puter-analytics interface\n- Added InterfacesModule to load these services\n- Removed interfaces.js\n\nCloses #1131

ai: true

* chore: remove interfaces.js file

ai: true

* fix: DRY CRUD interfaces

This comment is flagged as AI-generated, but Claude rate-limited before
it could actually make the commit so this commit was made by hand. Well,
while I'm writing this commit message I may as well mention that Claud's
rate limits are relentless and it has become impossible to use Claude
for some purposes as a result.

ai: true

* refactor: replace interfaces module with separate Module.js files for entitystore and analytics

- Removed interfaces module\n- Added EntityStoreModule.js to entitystore module\n- Added AnalyticsModule.js to analytics module\n- Updated main index.js to use the new modules directly\n\nai: true

ai: true

* fix: modules exported and registered incorrectly

* feat: add KVStoreModule for puter-kvstore interface

- Created KVStoreModule.js\n- Created KVStoreInterfaceService.js to register the puter-kvstore interface\n- Updated exports.js to include the new module\n\nai: true

* fix: remove index.js from kvstore module

- Removed unnecessary index.js file from kvstore module\n\nai: true

* fix: remove index.js files from analytics and entitystore modules

- Removed unnecessary index.js files from analytics and entitystore modules\n\nai: true

* fix: cleanup mycoder mistakes again

...because it actually threw out my previous commit where I already did
this.
2025-03-31 19:32:38 -04:00
Krista Vlastou 647ae35c84 Added a confirm password field and a show password option 2025-03-31 16:30:55 -04:00
KernelDeimos 6451f1b4e9 fix: error handling error in UIWindowSignup
Caused-By: ad4b3e7aeb
2025-03-31 13:22:31 -04:00
jelveh da2a8de307 Update UITabUsage.js 2025-03-29 16:51:24 -07:00
jelveh 1d1b4f81b5 clean up html and css 2025-03-29 12:31:23 -07:00
KernelDeimos a276a82e44 fix: put guard around startup chime 2025-03-29 14:57:45 -04:00
KernelDeimos 7c1fb4c3bf dev: improve puter.js convert interface 2025-03-28 22:39:28 -04:00
Jonathan Mahrt GuyouandEric Dubé ad4b3e7aeb feat: captcha
* Added Revis distributed cash to enhance our Captcha Verification system so that we prevent our system from replay attacks

* Fix: There was an error with the implementation of Redis, so I reverted to our previous version that uses in memory storage

* Integrated the captcha verification system into our sign in Form. The captcha verification system now works on both login and sign int

* Remove test files from captcha module

* Update src/backend/src/modules/captcha/middleware/captcha-middleware.js

Co-authored-by: Eric Dubé <[email protected]>

* Update src/backend/src/modules/captcha/middleware/captcha-middleware.js

Co-authored-by: Eric Dubé <[email protected]>

* Now the captcha can be requested on condition, this llaows extenstions to control wether a captcha should be required,
I fixed the code in CaptchaModule to use config
and got rid of the lines that made captcha middleware available since it wasn't used anywhre

* I split the middleware into two distinct parts, so that the frontend can now determine captach requirements. PuterHomePageService can set GUI parameters for captcha requirements. The /whoarewe endpoint provides captcha requirement information and the extensuo system integration is maintained

* Fix security issues with password handling in URL query parameters

* Made sure that the enter key, submits the login request instead of refreshing the captcha

* In development we can now disable the Captcha verification system by running it with CAPTCHA_ENABLED=false npm start

* Went back and modified checkCaptcha so that it checks at the start to check what CAPTCHA_ENABLED is equal to

* Refactor captcha system to use configuration values instead of environment variables

* Fix captcha verification and align with project standards

* Update src/backend/src/modules/captcha/README.md

Co-authored-by: Eric Dubé <[email protected]>

* fix: incorrect service name

* dev: use Endpoint for captcha endpoints

Use Endpoint class, which uses eggspress behind the scenes, which handles
async errors in handlers automatically.

* dev: add extension support and simplify captcha

- removed extra error handling
- removed dormant code
- no distinction between login and signup (for now)

* clean: remove local files

* fix: undefined edge case

---------

Co-authored-by: Eric Dubé <[email protected]>
2025-03-28 19:46:56 -04:00
rodrick-mpofu bf16e20447 fix: remove duplicate icons and hide .weblink extension 2025-03-28 05:17:02 -04:00
KernelDeimos f73958ee8c chore: update package-lock.json 2025-03-28 05:01:49 -04:00
Eric Dubé 45c072ff93 feat: add public endpoint for models list (#1228)
* feat: add public endpoint for models list

- Created ChatAPIService for public endpoints\n- Added /chat/models and /chat/models/details endpoints\n- Registered service in CoreModule\n- Added tests for the new service\n\nCloses #1227

ai: true

* Update src/backend/src/services/ChatAPIService.js
2025-03-27 17:12:09 -04:00
Ntwari Bruce 39048a9e2e dev: ai command tool use / function calling (#1194)
* Enhanced ai command to perfom other commands

* Enhance AI Command in Puter's shell

* Enahanced ai command to use tooling/function calling

* Fixed circular dependency and added list function to Builtincommand

* Fixed circular dependency and system prompt
2025-03-27 14:31:24 -04:00
KernelDeimos 9180261472 doc: add style doc for backend 2025-03-26 18:07:12 -04:00
Krista Vlastou 4b7e09e157 fix: npm install error on Windows (spawn EINVAL) (#1214) 2025-03-26 14:58:46 -04:00
rodrick-mpofu 94853d33bf Implement link shortcut feature (refs #682) 2025-03-25 02:24:20 -04:00
KernelDeimos 3d3af13979 feat: add startup chime feature
Added ability to play Puter chime sound at startup after login
with a toggle in personalization settings to enable/disable it.

ai: true
2025-03-24 23:19:36 -04:00
KernelDeimos bcd8d0cc82 tweak: clarify Nodemailer section in email testing documentation
- Clarified that the Nodemailer example is for testing MailHog setup\n- Added information about how Puter uses Nodemailer\n- Added references to the EmailService class

ai: true
2025-03-24 21:55:34 -04:00
KernelDeimos 71fd94131e tweak: improve email testing documentation formatting and flow
- Reorganized sections for better readability\n- Added clearer headings and instructions\n- Improved troubleshooting section\n- Enhanced overall document structure

ai: true
2025-03-24 21:50:36 -04:00
gautamthegozi 94d148430a doc: Documentation for Email Testing (#1204)
* Documentation for Email Testing

* Documentation fix

* Fix
2025-03-24 21:48:36 -04:00
KernelDeimos 7bd0c8e3f2 doc: add documentation for robots 2025-03-24 17:58:47 -04:00
Eric Dubé c683b812bc doc: Improve PuterAI module documentation structure (#1216)
* docs: improve PuterAI module documentation structure

- Update docmeta.md to describe top-level doc structure\n- Create README.md for PuterAI module documentation\n- Move requests.md content to api_examples.md\n- Add ai_usage_testing.md in contributors directory\n\nCloses #1215\n\nai: true

* docs: remove original requests.md after content migration

Content has been migrated to api_examples.md with improved organization and structure.\n\nai: true
2025-03-24 17:52:00 -04:00
KernelDeimos 6a3b20f0a8 fix: clarify variable names in puter.ai.chat method
- Renamed 'options' to 'requestParams' to clearly indicate parameters sent to the backend driver\n- Renamed 'settings' to 'userParams' to clearly indicate parameters provided by the user\n- Updated comments to be more descriptive about the purpose of each variable\n\nFixes #1212\n\nai: true
2025-03-24 16:17:58 -04:00
KernelDeimos 64d1b6e663 dev: allow specifying chat driver in puter.js 2025-03-24 15:58:32 -04:00
KernelDeimos 617fb49178 fix: allow fake-chat to report usage for costly model
Modified the event handler in AIChatService to only skip usage reporting for fake-chat when it's not using the costly model, allowing the costly model to properly report its usage and costs.

ai: true
2025-03-24 15:54:40 -04:00
KernelDeimos 7a2851d2cc fix: add _init method to register FakeChatService as a provider
Added _init method to FakeChatService to register itself as a provider with AIChatService, ensuring that the service and its models are properly recognized by the system.

ai: true
2025-03-24 15:54:40 -04:00
KernelDeimos 42c6f92048 feat: add costly model to FakeChatService
Added a new 'costly' model to FakeChatService that simulates incurring costs similar to real AI services. This model can be used for testing cost tracking without incurring actual external API costs.

ai: true
2025-03-24 15:54:40 -04:00
Eric Dubé 67a898ea33 fix: update check_usage_ to only consider past month usage (#1209)
This change modifies the SQL query in check_usage_ to only consider AI usage from the past month when checking against limits, rather than all historical usage.

ai: true
2025-03-24 13:40:01 -04:00
Eric Dubé 1266ef2179 fix(ux): Make it easier to add file extensions to an app in bulk (#1205)
* Add support for pasting multiple file extensions at once in Dev Center

* Fix bulk file extension paste functionality in Dev Center

* fix: add try-catch around tippy

* Fix issues with bulk file extension pasting and add comma key support

* Fix issue with duplicate red tags appearing temporarily

* Implement robust bulk file extension paste functionality in Dev Center

* Fix security issue with JSON.stringify to properly escape < characters
2025-03-23 23:00:17 -04:00
hisham-maarraoui b0efff7a4f feat: show/hide desktop icons option in context menu
* feat: hide icons/show icons feature added to the right-click/secondary click menu on the desktop

* Fix: Changes made to the hide/show desktop icons feature after receiving feedback in the first pull request

* CSS rule added to static CSS file instead of being implemented dynamically
2025-03-21 16:23:17 -04:00
kira-offgrid 868ef4e5a4 fix: cleanup example so bots don't flag it 2025-03-21 13:23:21 -04:00
Anuja Mishra 50817f601e dev: Standardized OpenAI config format and updated documentation issue #1180 (#1195)
* Standardized OpenAI config format and updated documentation issue #1180

* Addressed review comments
2025-03-20 12:50:51 -04:00
KernelDeimos 33a7811e8f fix: alerts being completely broken
PR 1175 introduced a bug that wasn't caught where alert messages are not
properly assigned. Additionally, the default alert type was "warning"
which is a regression. This commit makes "info" the default alert type
and ensures options.message is the first candidate for the alert message
contents.
2025-03-19 12:37:18 -04:00
KernelDeimos 5c3f447b4c dev: expose config path to root context 2025-03-18 15:23:50 -04:00
Franciszek 9cb6b13bb6 i18n: Polish Translation fix (#1193)
* Update README.pl.md

Things I would change:

Line 1: System Operacyjny Internetu -> System Operacyjny Internet
Line 25: system operacyjny internetu -> internetowy system operacyjny
(Original Translation is more like Internet's OS, not Internet OS)

Line 36: Rozwój Lokalny ->  Instalacja Lokalna
(Original does not mean programming, but more like growth or evolution)

Line 97: Połącz się z opiekunami -> Skontaktuj się z opiekunami 
(Original has meaning, like connecting by cable, not contacting)

* Update README.pl.md

Changed:
Instalacja Lokalna -> Lokalne Środowisko Programistyczne.
2025-03-18 12:13:34 -04:00
Het Savani dab5e0a281 fix: file manager sidebar headings contrast (#1191) 2025-03-17 14:05:25 -04:00
KernelDeimos be59f57d68 dev: update puter.js imports to work in cli
This is a step towards getting puter.js to run in node instead of just
in the browser. In node, all the relative imports need to end with the
file extension, and the "type" option in package.json needs to match the
import mechanism used. It was also necessary to migrate
webpack.config.js to ESM syntax, which I would not have done if the
tooling didn't force me to.
2025-03-17 13:21:15 -04:00
ajaykrishnaswamyandEric Dubé 782e858b3c Update (and automate) events docs (#1164)
* documentation: new documentation for emit features

* Update events documentation and doc_helper.js script

* Update package.json

Co-authored-by: Eric Dubé <[email protected]>

* added manual_overrides.json.js file

* Update doc_helper.js to resolve paths relative to project root and update events documentation

* created a new events.md generated file, differences can be seen.

* added and populated events.md file. Can now compare new and old versions

---------

Co-authored-by: Eric Dubé <[email protected]>
2025-03-16 12:41:14 -04:00
KernelDeimos 947dca96a2 chore: remove eslint.config.js
ESLint cannot support our preferred code style for backend without
writing custom plugins. On frontend, we already decided ESLint wasn't a
good fit several months ago. This commit removes the eslint config to
avoid other developer's editors making unwanted whitespace changes.

In backend, we use spaces within control structure parens. This really
does make the code easier to read. In the future, maybe we'll write our
own linter.
2025-03-16 00:52:56 -04:00
Arunabh Sharmaandavijh 004e47a4a9 feat: add API to get a list of all available models (#1160)
* add API to get a list of all available models

* modified listModels() and listModelProviders() for readability.

* remove dead code

---------

Co-authored-by: avijh <[email protected]>
2025-03-16 00:31:33 -04:00
Andrew ShiromaandRishabh Shinde bf3d63a083 feat: create and export UsageLimitedChatService (#1182)
* feat: create and export UsageLimitedChatService for when user exceeds usage limit

* tweak: change comment on usage-limited-chat to better explain action

* fixed whitespace

* tweak: remove test-app from gitignore

* tweak: remove extra spacing in AIChatService usage-limited-chat comment

* tweak: fixed whitespace

* tweak: remove tabbed whitespace in AIChatService

* tweak: remove .qodo from gitignore

* tweak: remove extra enter in AIChatService

* Revert "tweak: remove .qodo from gitignore"

tweak: correct mistake on removing extra enter

This reverts commit e066e294fa.

* tweak: add space at fallback and remove whitespace tabs

* tweak: remove whitespace on brackets

* tweak: remove .qodo and test-app from gitignore

* tweak: add accidentally deleted enter back in

---------

Co-authored-by: Rishabh Shinde <[email protected]>
2025-03-15 19:48:09 -04:00
Arunabh Sharma 9626175d3a chore: upgrade supported node version to 23.9 (#1184)
* upgrade node version to 23.9

* update package-lock.json
2025-03-15 16:03:46 -04:00
Tanveer Brar 3cdbcd83b3 feat: GUI Permission Dialog (#1177)
* Added requestPermission endpoint in SDK, updated IPC handler HeyPuter/puter#1150

* - Updated UIWindowRequestPermission.js to accept multiple permission types
- Updated dialog message for permission window in UIWindowRequestPermission.js
- Updated parameters for call to UIWindowRequestPermission in IPC.js
- Added search_uid.js endpoint to allow GUI searches for fsentry by file UUID HeyPuter#1150

* Updated body and header for Permission Request Dialog HeyPuter#1150
- Replace app uid with app name for header in UIWindowRequestPermission.js
- Added path for file permission request body in UIWindowRequestPermission.js
- Removed previously added search_uid.js api implementation previously as it is replaced by simpler call in gui

* Updated permission description generation in UIWindowRequestPermission.js HeyPuter#1150

* Removed incorrect web handling in IPC.js HeyPuter#1150

* Formatting fixes
2025-03-14 19:37:28 -04:00
Aman PurohitandEric Dubé a278a6140b feat: UIAlert with dynamic icon types and default button configurations (#1175)
* UIAlert with dynamic icon types and default button configurations

* Update src/gui/src/UI/UIAlert.js

Co-authored-by: Eric Dubé <[email protected]>

* Update src/gui/src/UI/UIAlert.js

Co-authored-by: Eric Dubé <[email protected]>

* fix: improve error handling in UIAlert component and reseting package-lock

* fix: update UIAlert to use 'type' for alert type selection

* fix: update UIAlert to use 'type' for button configuration

---------

Co-authored-by: Eric Dubé <[email protected]>
2025-03-14 19:18:38 -04:00
Saish Pawar 505e7abda2 fix: reposition clock to right (#1181) 2025-03-14 18:38:57 -04:00
KernelDeimos 5c50eb1f8b fix(gui): logo placement with no clock using margin
Flex isn't being used in the top bar correctly, which is causing
unpredictable issues when people implement new elements on the top bar.
The best solution for this is to use proper flex values but right now
it's important to get the layout back to normal for production so I'm
implementing this sub-par fix where we always include a spacer element.
2025-03-14 03:09:08 -04:00
KernelDeimos 8edcf7575d fix(gui): clock padding moving other elements 2025-03-13 14:54:46 -04:00
Saish Pawar 672e2e70ad dev: moved current datetime to toolbar as a widget (#1172)
* move current datetime to toolbar as a widget

* revert interval to 1000ms
2025-03-13 13:28:57 -04:00
Gautam Kumar 11043e9ba1 doc: make default URL easier to notice
* Update README.md

Without clear instructions it wasted a few hours just for setting up.
Atleast no one will face issues with domain name in localhost now

* Making LocalHost website visible

* Making LocalHost website visible v2
2025-03-13 12:09:15 -04:00
Saish Pawar 6236d00ea2 fix: made protocol dynamic in the publishURL displayed on 'Publish As Website' dialogbox (#1170)
* change https to http on UIWindowPublishWebsite

* fix: made protocol string dynamic in the publish as website dialogbox
2025-03-12 15:58:11 -04:00
KernelDeimos 3e74f42c4d fix: thread delete events 2025-03-12 14:57:53 -04:00
KernelDeimos 41d5dbc0da fix: incorrect addition of https prefix for peers 2025-03-12 14:57:42 -04:00
KernelDeimos ad7b7b9513 fix: don't show register when user signup is disabled
closes #1087
2025-03-12 14:52:23 -04:00
Shushanna 433f15bacd tweak: reorder and fix Farsi translation of i18n keys 2025-03-11 21:20:05 -07:00
KernelDeimos 76bedf5f8f fix: thread subscription updates across regions 2025-03-10 16:29:00 -04:00
KernelDeimos 252647cea6 fix: issues with thread subscriptions
I really screwed that up on my first attempt. Puter apps don't trigger
the user-connected websocket event, which rendered thread subscriptions
in apps useless. Furthermore, the uuid of the thread that was subscribed
too wasn't present in the event, which is also pretty useless.
2025-03-09 20:28:22 -04:00
KernelDeimos 26591e4171 fix: wrong parameter count 2025-03-09 16:48:35 -04:00
KernelDeimos 249d883592 dev: add missing constructors to new puter.js methods
- Also add subscribe() to threads module so I don't lose it in a git
  stash
2025-03-09 16:48:35 -04:00
KernelDeimos daa3449f29 dev: begin adding developer app permissions 2025-03-09 16:48:35 -04:00
Andy Cordero 33c304879a fix(gui): color of the UI on dark mode (e.g. windows control, active sidebar) (#1161)
* update theme service to improve color handling and SVG icon styling

* enhance sidebar item colors for better visibility

* Fix the whitespace
2025-03-09 16:30:16 -04:00
Ntwari Bruce 7ed779bbf3 feat: enhanced ai command to perfom other commands (#1156)
* Enhanced ai command to perfom other commands

* Enhance AI Command in Puter's shell
2025-03-08 17:47:53 -05:00
KernelDeimos 8c497935cf dev: thread subscriptions 2025-03-07 17:27:29 -05:00
KernelDeimos 60cecedc87 dev: add user information to threads 2025-03-07 15:31:40 -05:00
KernelDeimos 03045e2737 fix: temperature and max_tokens (interface + OpenAI) 2025-03-07 15:24:22 -05:00
Braulio Fernandes 2a288e6cf0 add temp and max_tokens to Gemini Service 2025-03-07 13:57:25 -05:00
Braulio Fernandes 1e6e70b553 add temperature and max_tokens parameters to complete method 2025-03-07 13:57:25 -05:00
Braulio Fernandes 2e90919424 add max_tokens and temperature for completion with Claude 2025-03-07 13:57:25 -05:00
Braulio Fernandes 986dc9ea1f add temp and max_tokens to options request obj 2025-03-07 13:57:25 -05:00
KernelDeimos 59da18f2a3 dev: expose shell to ANSIShell coreutil commands 2025-03-07 11:41:49 -05:00
jelveh f897eee3e7 Update RecommendedAppsService.js 2025-03-07 08:25:33 -08:00
KernelDeimos 96199cbb54 fix: small fixes for threads 2025-03-05 16:55:09 -05:00
KernelDeimos 53c865c973 dev: add group management SDK 2025-03-05 15:24:52 -05:00
KernelDeimos 7aa3cb7312 dev: puter.js support for group management 2025-03-04 16:43:23 -05:00
KernelDeimos f0a6e493a1 dev: register puter.perms module 2025-03-04 14:39:32 -05:00
KernelDeimos 1f05df68eb dev: add threads module for puter.js 2025-03-04 14:38:30 -05:00
KernelDeimos 01ba6168d9 dev: make thread endpoints more conventional 2025-03-04 14:38:30 -05:00
KernelDeimos 9f3ce50994 dev: add read and list endpoints 2025-03-04 14:38:30 -05:00
KernelDeimos fdf10ef549 dev: add threads delete endpoint 2025-03-04 14:38:30 -05:00
KernelDeimos 90d9b41ec3 dev: add threads API with create and edit 2025-03-04 14:38:30 -05:00
KernelDeimos 02ddfcc567 dev: add puter.perms module to puter.js 2025-03-04 14:37:41 -05:00
KernelDeimos 3276faa5f0 fix: permission request 500 errors
As far as I remember, PermissionService was not using APIError because
it was considered to be only for errors from API endpoints and not
internal calls. However, this never made very much sense: APIError is
really more like "error that Puter's backend actually knows how to
handle" at this point; everything should be APIError and APIError should
probably eventually be renamed.
2025-03-04 13:56:51 -05:00
KernelDeimos 1e86039cf5 dev: add PUT, DELETE to eggspress 2025-03-04 12:58:55 -05:00
Eric Dubé eca5da9c1f Update issue templates 2025-03-03 14:50:06 -05:00
KernelDeimos cfa5c7e715 fix: puter subdomain error response
We were sending a JSON error in what should have been an HTML response.
Additionally, the error message wasn't very clear about the nature of
the problem.
2025-03-03 13:06:14 -05:00
jelveh ae9f5efed0 send event after toolbar is ready and after account is saved 2025-02-28 10:28:40 -08:00
jelveh b56f5c5998 Revert "Remove the Button component from some UI components"
This reverts commit 1eb4c6034e.
2025-02-28 09:23:32 -08:00
jelveh 5c62742fa3 remove unnecessary console.log 2025-02-28 00:14:56 -08:00
jelveh 1eb4c6034e Remove the Button component from some UI components 2025-02-27 23:53:52 -08:00
jelveh c55a13dcd8 Update en.js 2025-02-27 23:19:00 -08:00
KernelDeimos ec0a721143 fix: message coercion bug affecting vision 2025-02-27 14:49:55 -05:00
KernelDeimos 18170f77e2 doc: link videos 2025-02-26 15:42:09 -05:00
KernelDeimos 4486490039 doc: document configuration 2025-02-26 14:59:13 -05:00
KernelDeimos 3666b9f3a2 feat: essential configuration options for deployers
This commit makes everything a ton easier for deployers, adding
configuration options to allow nip.io domains or all origins to access
Puter for ideal LAN or VPN configurations.
2025-02-26 14:18:28 -05:00
KernelDeimos d3da9da9c5 meta: update index.html 2025-02-26 11:35:07 -05:00
KernelDeimos 12a29275c0 meta: add index.html to test something
I'm going to see if a static GitHub Pages page can fetch our GitHub
issues, so I need to commit this file to the repo.
2025-02-26 11:28:45 -05:00
KernelDeimos 3bd12fb5f2 doc: document event core.fs.create.directory
issue: https://github.com/HeyPuter/puter/issues/1122
2025-02-25 18:18:55 -05:00
KernelDeimos e6b3cb3666 fix: get event docs back in sync
I used 'fix' for this instead of 'doc' because I am also adding a
package for code that generates markdown, so this doesn't have the
zero-risk nature typically associated with a "doc: " commit.
2025-02-25 17:52:54 -05:00
KernelDeimos 04f9225af3 chore: update package-lock.json 2025-02-25 17:48:03 -05:00
KernelDeimos 794778d665 fix: dev-center undefined error
I uploaded a video for this one but just realized I never made a commit
for it - it was hiding in my git stash.

So here will be a rare situation that the video link is able to be
placed inside the commit message: https://youtu.be/8XiFR1o5Vuk
2025-02-25 17:21:08 -05:00
KernelDeimos eda376b6cc doc: make first sidebar items make sense 2025-02-25 15:31:40 -05:00
KernelDeimos 2a7bd2ad8d doc: update doc/README.md and genwiki 2025-02-25 15:23:58 -05:00
KernelDeimos efe6f4cb80 doc: update doc/README.md 2025-02-25 15:20:11 -05:00
KernelDeimos 23e5d22439 doc: move el() documentation to gui/doc 2025-02-25 14:57:35 -05:00
KernelDeimos 99684d80e4 doc: generate wiki from repository docs 2025-02-25 14:56:12 -05:00
KernelDeimos 7f372fd1be doc: improve backend intro doc 2025-02-24 16:28:08 -05:00
KernelDeimos 7fd1f9aa5f doc: document backend key locations 2025-02-24 16:28:08 -05:00
KernelDeimos 34fdf3abd9 doc: improve docs organization
- Move extension docs back into this repo
- Add index README.md under `doc/`
- Improve documentation of project structure
2025-02-24 16:28:08 -05:00
KernelDeimos 8ed1f801b8 dev: attempt adding Claude 3.7
At this commit support is not tested. I was unable to get the AI module
in puter.js to call 3.7 instead of the old 3.5 model.
2025-02-24 14:13:43 -05:00
KernelDeimos 759c32ac72 fix: errors after stream starts 2025-02-24 11:42:30 -05:00
Nariman Jelveh ad5be196cc Update README.md 2025-02-24 01:28:37 -08:00
KernelDeimos d081c4f2fe fix(security): patch express via path-to-regexp
As far as I can tell from the block post:
https://blakeembrey.com/posts/2024-09-web-redos/
this vulnerability should not affect releases of Puter before this
update because we do not have any routes with multiple parameters where
the second parameter does not start with '.' or '/'.

However, for the sake of good security hygiene and so `npm audit` looks
nice, we're upgrading the package. (better late than never)
2025-02-21 23:42:47 -05:00
Nariman Jelveh 1cae7fc7d4 Update #DoesItRunPuter.md 2025-02-21 13:26:31 -08:00
KernelDeimos 2ee380ec16 fix: o3 tools with array parameters
Apparently the o3 model things items is a required property for array
types in JSON schema. This is not the case, but we fixed it anyway.
2025-02-20 15:57:50 -05:00
KernelDeimos 7e82c947b1 fix: path update in legacy rename behavior
Change username doesn't go through ll_move, and does not adhere to DRY
alongside the /rename operation. This led to an inconsistency where the
rename behavior in the change username operation didn't update the
cached fsentry path.
2025-02-20 14:10:22 -05:00
KernelDeimos 145d836b9f test: unit test tool calls 2025-02-20 09:41:59 -05:00
KernelDeimos d66e38cc66 fix: message coercion for tool call message
Some services can't tolerate a message with tool calls and an empty
array set on the content property, despite the fact that OpenAI does
seem to support this.
2025-02-19 15:32:07 -05:00
KernelDeimos 9d181741de dev: gemini function calling 2025-02-19 13:16:27 -05:00
Nariman Jelveh d8c49d8b2d Merge pull request #1121 from HeyPuter/revert-1072-fix/success-msg-deploy
Revert "Fix : the issue with the success message not displaying after deployment"
2025-02-17 19:29:54 -08:00
Nariman Jelveh e2d120d81f Revert "Fix : the issue with the success message not displaying after deployment" 2025-02-17 19:29:45 -08:00
Nariman Jelveh 96c4030541 Merge pull request #1072 from mariatouil/fix/success-msg-deploy
Fix : the issue with the success message not displaying after deployment
2025-02-17 19:29:40 -08:00
KernelDeimos 1b5a64043a dev: add openrouter implementation 2025-02-17 18:46:48 -05:00
KernelDeimos 7e76b657bb fix: recursive delete error 2025-02-17 15:31:54 -05:00
Nariman Jelveh d0f32ee2b8 Merge pull request #1119 from Zac0511/patch-4 2025-02-17 09:40:04 -08:00
KernelDeimos feb2ca126f dev: validate attachments 2025-02-17 10:46:02 -05:00
Zac0511 6d8b733cba Update fr.js
Modified 2 translations
2025-02-17 12:49:10 +01:00
Nariman Jelveh 4bc6bf242f Update README.md 2025-02-16 19:46:09 -08:00
jelveh fe5f7cb878 Fix window height when maximized in full page mode 2025-02-15 13:02:57 -08:00
KernelDeimos 870e4aa938 fix: move AppCommandProvider to the end 2025-02-14 16:05:36 -05:00
KernelDeimos 8828d03f86 dev: add gemini to puter.js 2025-02-14 12:15:13 -05:00
KernelDeimos 5513e1c93b dev: add godmode toggle command for apps 2025-02-14 11:16:41 -05:00
KernelDeimos fbd5ffd85d dev: fix cache refresh for invalid origins 2025-02-14 10:29:30 -05:00
ProgrammerIn-wonderland cfa1447df6 fix Uncaught TypeError: Cannot read properties of undefined (reading 'closeCallBack') 2025-02-13 23:22:58 -05:00
KernelDeimos 29834f02c0 release: 2.5.1 2025-02-13 21:50:39 -05:00
KernelDeimos 0bcbc8f784 fix: phoenix changelog 2025-02-13 17:48:21 -05:00
KernelDeimos abd66309c8 dev: update phoenix changelog 2025-02-13 16:57:00 -05:00
KernelDeimos a2413b12b0 dev: de-couple requiring a read from fallback read
IMPORTANT: requires update to database access implementations
2025-02-13 15:11:02 -05:00
Nariman Jelveh 7fca9b79ea Merge pull request #1113 from ProgrammerIn-wonderland/main
Added tab completion to PDEs
2025-02-12 13:43:44 -08:00
ProgrammerIn-wonderland ffaa91f849 Added tab compleition to PDEs 2025-02-12 16:42:24 -05:00
Nariman Jelveh b32011f10f Merge pull request #1111 from HeyPuter/revert-1109-add/browser-ides
Revert "Added Browser IDEs"
2025-02-11 19:37:49 -08:00
Nariman Jelveh 50d5713e8f Revert "Added Browser IDEs" 2025-02-11 19:37:36 -08:00
Nariman Jelveh 1133c4656a Merge pull request #1109 from mojafa/add/browser-ides
Added Browser IDEs
2025-02-11 19:37:18 -08:00
ProgrammerIn-wonderland fd387597bb PDE command provider 2025-02-11 17:49:31 -05:00
KernelDeimos 5169d4bb40 dev: add stream support to Gemini 2025-02-11 16:24:57 -05:00
KernelDeimos b74ec1f69c dev: add Gemini support (non-streaming) 2025-02-11 14:57:17 -05:00
KernelDeimos 74319b44af dev: add more information to lock logs 2025-02-11 14:40:38 -05:00
KernelDeimos c2c5d88336 fix: update package.json 2025-02-11 12:29:01 -05:00
KernelDeimos fa4b38cd02 fix: oops, no export (putility.libs.event) 2025-02-11 11:23:55 -05:00
KernelDeimos e49af481ba dev: make it easier to use putility emitter 2025-02-11 11:10:02 -05:00
KernelDeimos a803d55cfb fix: broken test in putility 2025-02-11 10:54:03 -05:00
mojafa ab704ce4d7 added browser IDE support
Signed-off-by: mojafa <[email protected]>
2025-02-11 03:23:34 +03:00
KernelDeimos 70fde95255 fix: parse body before auth for /down 2025-02-10 17:54:23 -05:00
KernelDeimos e5c3769bd8 fix: fix previous fix 2025-02-10 17:42:12 -05:00
KernelDeimos 390230c5a0 fix: potential fix for /down auth
This is a temporary  workaround for a bug de-syncing http session
cookies.
2025-02-10 17:35:19 -05:00
KernelDeimos 2000b8909f fix: allow command provider to not implement complete method 2025-02-10 17:22:10 -05:00
KernelDeimos ad2ed295b1 dev: fix app close messages from ExecService 2025-02-10 13:59:47 -05:00
jelveh a3513c22a2 do not repeat session picking in popup for file pickers 2025-02-07 18:07:02 -08:00
jelveh 4d380ffa8a remove unnecessary confirmation dialog for file/directory pickers in popups 2025-02-07 17:47:58 -08:00
KernelDeimos 6dcb3777ca dev: fix index_url issue 2025-02-07 15:57:29 -05:00
KernelDeimos ca17f38929 dev: normalize Mistral, get tool calls working
Mistral has a lot of unnecessary quirks because the SDK coerces to
snake_case. We should see if the OpenAI client works with Mistral, and
it it does we'll use that instead so we don't have to maintain all these
exceptional cases.
2025-02-07 15:27:28 -05:00
KernelDeimos 735f275e7c dev: normalize Groq (tool use works) 2025-02-07 14:01:34 -05:00
KernelDeimos 29cd14a01d dev: XAI streaming function calls 2025-02-07 12:55:34 -05:00
jelveh 84b2400650 it fixes it surely! 2025-02-06 19:52:54 -08:00
jelveh d4b4df06fd Use the fetch API in Puter.js's Convert module 2025-02-06 19:45:10 -08:00
jelveh 1e5deabcdb Update package-lock.json 2025-02-06 18:20:12 -08:00
jelveh 949d3ab17c add Convert modules to Puter.js 2025-02-06 18:19:12 -08:00
KernelDeimos 62cf10072a dev: include cost information in usage reports
This adds an incremental migration from models reporting input and
output tokens, to models reporting full token information. This means
AIChatService doesn't need to lookup the model details or know about the
different types of tokens supported by every model.
2025-02-06 17:34:57 -05:00
KernelDeimos f7147ab312 dev: generalize how OpenAIUtil handles usage
The current implementation would break for XAIService because it gets
cumulative usage reports as the stream goes on (whereas OpenAI and
DeepSeek only provide this at the end of the stream).
2025-02-06 17:34:57 -05:00
KernelDeimos 16e2729b1d dev: migrate XAIService to normalized messages 2025-02-06 17:34:57 -05:00
KernelDeimos ce0ab02f39 dev: add file output mode for convert 2025-02-06 17:34:57 -05:00
KernelDeimos 5e30958a14 tweak: enable convert module on selfhosted run 2025-02-06 17:34:57 -05:00
KernelDeimos 2b0e173975 dev: add convert module (and ConvertAPI) 2025-02-06 17:34:57 -05:00
ProgrammerIn-wonderland 12806a2395 only close TLS socket once 2025-02-06 17:13:04 -05:00
ProgrammerIn-wonderland 26666fe666 new API puter.net.generateWispV1URL() 2025-02-05 16:56:57 -05:00
KernelDeimos c8bed6eaee dev: add deepseek tool calls 2025-02-05 15:32:35 -05:00
KernelDeimos d4eff82d3c dev: add email attachments 2025-02-05 14:12:05 -05:00
KernelDeimos da4a1a182b dev: de-couple OpenAI SDK utilities from service
This change will be helpful for making behavior across OpenAI-compatible
APIs consistent.
2025-02-05 11:36:07 -05:00
KernelDeimos 50383aab59 dev: try this for now 2025-02-04 16:45:42 -05:00
KernelDeimos e6fc773706 fix: unfixed fix from earlier 2025-02-04 16:36:06 -05:00
KernelDeimos 9dbba292c4 dev: coerce semantics of tool calls/use in messages
If these APIs were standardized this would have been so much less
painful, but alas, tool calls are implemented completely differently
between Claude and OpenAI. Good job guys.
2025-02-04 16:15:47 -05:00
KernelDeimos 484bb5c201 fix: parser error for empty json buffer 2025-02-04 15:42:03 -05:00
KernelDeimos d2358d234b fix: fix name and id for openai tool calls 2025-02-04 14:36:30 -05:00
KernelDeimos 29c0241119 fix: let messages with tool_calls have content=null 2025-02-04 14:21:14 -05:00
KernelDeimos 8f27742038 fix: repair stream end 2025-02-04 14:09:28 -05:00
KernelDeimos e2797c38d0 fix: add type=text 2025-02-04 14:02:01 -05:00
KernelDeimos 747614c28b dev: integrate stream normalization for OpenAI 2025-02-04 13:57:10 -05:00
KernelDeimos 437467e0ce dev: integrate stream normalization for Claude 2025-02-04 13:10:14 -05:00
Nariman Jelveh 0ce8fdc9f6 Merge pull request #1037 from HeyPuter/Add-TRADEMARK.md
Create TRADEMARK.md
2025-02-03 14:23:24 -08:00
jelveh 4e17908664 Update TRADEMARK.md 2025-02-03 14:22:01 -08:00
KernelDeimos f54b7b7b3d dev: PoC for stream normalization 2025-02-03 16:57:13 -05:00
KernelDeimos f0434435c4 dev: option to normalize AI response (non-streaming) 2025-02-03 14:03:27 -05:00
KernelDeimos 57231d31e4 dev: add email module to run-selfhosted 2025-02-03 13:14:52 -05:00
KernelDeimos cfa3fde436 dev: error handling and text encoding 2025-02-03 13:11:29 -05:00
KernelDeimos 55d052cfc2 fix: various issues with Mail module 2025-02-03 12:25:22 -05:00
KernelDeimos e281dc92e3 dev: add mail module 2025-02-03 10:08:39 -05:00
KernelDeimos dc90999fee dev: enable gpt-o3-mini 2025-01-31 14:48:49 -05:00
KernelDeimos d88dedb66c dev: normalize Claude input
- add merging of same-role messages for all normalized inputs
- generalize Claude-specific system message extraction
- remove redundant behavior from Claude
2025-01-31 11:22:06 -05:00
KernelDeimos 40aa52225f dev: make ai fallback configurable 2025-01-31 10:32:36 -05:00
Nariman Jelveh e257dceb93 Merge pull request #1100 from Zac0511/patch-4
Update fr.js
2025-01-31 05:04:24 -08:00
Zac0511 6c2fa4d398 Update fr.js
Fixed some translations and deleted a copy of billing translations
2025-01-31 09:50:49 +01:00
KernelDeimos 2d12949a08 dev: improve user request error detection 2025-01-30 15:40:10 -05:00
KernelDeimos 60eef2fc67 fix: buffer incomplete JSON objects from AI stream
- simplify ndjson stream to get complete lines instead of chunks
- add buffering for incomplete lines
2025-01-30 15:21:05 -05:00
KernelDeimos af3d732fc4 dev: async await for puter-exec 2025-01-30 13:37:15 -05:00
KernelDeimos d0eca6dafb Revert "dev: remove redundant message adaption from claude"
This reverts commit 0c42613ff0.
2025-01-30 12:23:27 -05:00
KernelDeimos 760eb55b69 Revert "fix: mistake in 0c42613"
This reverts commit 8ffd0004b3.
2025-01-30 12:23:06 -05:00
KernelDeimos 8ffd0004b3 fix: mistake in 0c42613 2025-01-30 12:19:07 -05:00
KernelDeimos 05ced4e625 Revert "dev: remove max_tokens from Claude"
This reverts commit 3bce60893e.
2025-01-30 12:18:26 -05:00
KernelDeimos 3bce60893e dev: remove max_tokens from Claude 2025-01-30 12:09:35 -05:00
KernelDeimos 0c42613ff0 dev: remove redundant message adaption from claude 2025-01-30 10:11:52 -05:00
KernelDeimos babe9f8ede dev: remove now-redundant token count logic from openai service 2025-01-29 16:58:30 -05:00
KernelDeimos 7151723894 dev: use message normalization and clean up openai service 2025-01-29 16:45:15 -05:00
KernelDeimos 0009ededfa dev: implement generic extract_text for ai messages 2025-01-29 16:08:30 -05:00
KernelDeimos e9279ffb36 dev: implement message normalization 2025-01-29 15:28:14 -05:00
KernelDeimos e6ad54be19 dev: puterjs exec module (2) 2025-01-29 13:58:21 -05:00
KernelDeimos cbe02a4489 dev: puterjs exec module 2025-01-29 13:57:50 -05:00
KernelDeimos 77d6bb2d8c dev: always select highest version of the specified language 2025-01-29 10:31:58 -05:00
KernelDeimos dcd47bc4cf fix: fix microcents to USD conversion in AIChatService
This only affects a value sent to TrackSpendingService. Cost
calculations related to user's quotas / billing remain unaffected.
2025-01-28 16:45:48 -05:00
KernelDeimos 913c1b7836 test: add unit test for TimeWindow
TimeWindow is used by TrackSpendingService for two purposes:
- tracking cost within a time window
- preventing duplicate alarms within a cooldown period

It is important to test this to ensure alarms related to AI costs are
accurate.
2025-01-28 16:16:00 -05:00
KernelDeimos 1dad2e8716 dev: allow specifying runtime version 2025-01-28 14:25:45 -05:00
KernelDeimos c852a287e8 dev: push exec submission updates to client 2025-01-28 13:41:26 -05:00
KernelDeimos 4005e9667c dev: implement custom backoff strategy for judge0 2025-01-28 13:27:26 -05:00
KernelDeimos 5718071c08 dev: add judge0 exec and polling 2025-01-28 12:55:54 -05:00
KernelDeimos 0fac03a05a fix: claude duplicate messages in stream 2025-01-28 11:27:47 -05:00
KernelDeimos c96d3b546c dev: update selfhosted default modules 2025-01-28 10:37:39 -05:00
KernelDeimos 3451308e48 dev: tweak supported languages list 2025-01-28 10:20:31 -05:00
KernelDeimos 5b04d1afe1 dev: increase alarm threshold for ai use 2025-01-28 00:35:40 -05:00
KernelDeimos 97f86e564f dev: oh my Claude
Sometimes tool use requests are streamed as JSON, but sometimes they're
streamed as an empty string (causing the JSON parser to error). Had they
not streamed anything we actually would've responded correctly, but
what they stream implies "this empty string is the JSON input" which is
incorrect. Oh well.
2025-01-27 21:32:50 -05:00
KernelDeimos 3f99d975c0 dev: initial work on judge0 implementation 2025-01-27 16:19:16 -05:00
KernelDeimos 81ee52b00f dev: add puterexec module 2025-01-27 15:38:29 -05:00
KernelDeimos 4d826c0602 dev: process language information from judge0 2025-01-27 14:50:40 -05:00
KernelDeimos ecc89678d1 doc: add examples of streaming tool use 2025-01-27 14:13:01 -05:00
KernelDeimos 5ad53e061a dev: get streaming tool use to work in Claude 2025-01-27 13:53:56 -05:00
KernelDeimos d00061ae2f dev: improve accuracy of TrackSpendingService 2025-01-27 11:36:54 -05:00
jelveh 52c1adb7eb Update globals.js 2025-01-26 17:05:43 -08:00
jelveh bb348e4bd5 Update UIWindowMyWebsites.js 2025-01-26 11:20:07 -08:00
KernelDeimos 6083e3ac52 fix: skip request-count usage check via AIChatService 2025-01-24 17:58:04 -05:00
KernelDeimos db9597a7b5 doc: add example function calling requests 2025-01-24 16:35:46 -05:00
KernelDeimos aae18e6878 dev: support POST requests in puter.http 2025-01-24 15:38:19 -05:00
KernelDeimos c7f3e0b937 fix: remove log from InternetModule 2025-01-23 21:27:14 -05:00
KernelDeimos 1fde01aa04 dev: enable tool use for Claude 2025-01-23 20:21:14 -05:00
KernelDeimos e9f6266062 dev: add deepseek AI to backend 2025-01-23 20:07:41 -05:00
KernelDeimos 40030ebc94 dev: enable tool-use in Claude 2025-01-23 16:46:13 -05:00
KernelDeimos 54a104276b dev: add tools normalization/converting 2025-01-23 16:15:32 -05:00
KernelDeimos bcdec32ba2 doc: log some AI responses 2025-01-23 15:20:31 -05:00
KernelDeimos 06452f5283 fix: small workaround for duplicate close 2025-01-23 14:58:23 -05:00
KernelDeimos 36dc9664ad fix: race condition and buffer issue in puter.http
The call to sock.write() wasn't waiting for the 'open' event, which
worked fine over non-TLS sockets by chance. Also, responses with only
a single WISP packet were resulting in buffered response data not
being sent to the caller.
2025-01-23 14:14:13 -05:00
KernelDeimos 3f5b34cd34 fix: missing some buffer contents in no-keepalive 2025-01-23 13:43:21 -05:00
KernelDeimos ee136f4168 dev: add extra safeguards for system user 2025-01-23 11:46:36 -05:00
KernelDeimos 7909cae76e dev: check 'invalid_request_error' hint from openai 2025-01-23 11:46:36 -05:00
jelveh 6f7ab2ab17 Update RecommendedAppsService.js 2025-01-22 21:38:07 -08:00
jelveh bfdf815f61 Update RecommendedAppsService.js 2025-01-22 21:34:27 -08:00
jelveh 925077916e Update RecommendedAppsService.js 2025-01-22 21:29:30 -08:00
KernelDeimos 9cbb741a8a fix: new edge cases with function calls / tools 2025-01-22 19:55:33 -05:00
KernelDeimos 1256614ec2 dev: add support for tools 2025-01-22 19:28:05 -05:00
KernelDeimos cf7aa27543 fix: oops, we're passing negative values; let's just remove this 2025-01-22 18:13:41 -05:00
KernelDeimos 61824ea04b fix: oops we still need that 2025-01-22 18:04:56 -05:00
KernelDeimos 7f50da5082 dev: use Connection: close for http requests by default 2025-01-22 17:46:51 -05:00
KernelDeimos 8143e5700f fix: remove hard-coded token limit for OpenAI 2025-01-22 17:28:18 -05:00
KernelDeimos 2b505caf98 dev: implement puter.http 2025-01-22 16:16:36 -05:00
KernelDeimos 6f39365b24 fix: wisp relay authentication 2025-01-22 14:20:53 -05:00
KernelDeimos 591c6c0fd3 dev: add wisp relay service 2025-01-22 11:45:58 -05:00
KernelDeimos 4c72e9d285 dev: separate process management from DevWatcherService 2025-01-22 10:08:06 -05:00
KernelDeimos 44c6f57c7a dev: add system kv access for extensions 2025-01-20 13:33:02 -05:00
KernelDeimos e8f5450cb0 fix: reduce code paths for querystrings 2025-01-20 10:34:25 -05:00
jelveh 4e578e9b28 update copyright date 2025-01-19 22:27:31 -08:00
jelveh 55f3f07ee5 Implement puter.ui.wasLaunchedWithItems() 2025-01-19 22:20:19 -08:00
Nariman Jelveh f13fa2553c Merge pull request #1093 from AryanTavish/main
Complete the Norwegian Bokmål (Norsk Bokmål) translation of Puter
2025-01-19 16:34:45 -08:00
jelveh ed2eea7c6b Update nb.js 2025-01-19 16:34:28 -08:00
Aryan Tavish 967da6ba24 Update nb.js (removed object billing to make indivisual string keys )
For example, instead of:

billing = {
    change_payment_method: "Endre",
    // ...
}
changed to:

'billing.change_payment_method': "Endre",
// ...
2025-01-18 10:19:30 +05:30
KernelDeimos d03952b237 fix: icons 2025-01-17 18:28:19 -05:00
Nariman Jelveh f27ef665ee Merge pull request #1094 from ProgrammerIn-wonderland/main
more socket fixes
2025-01-17 14:08:14 -08:00
ProgrammerIn-wonderland 01fc301f1e replace hardcoded api.puter.com with puter.APIOrigin 2025-01-17 17:05:51 -05:00
ProgrammerIn-wonderland 5798fcd042 automatic reconnection on disconnect 2025-01-17 17:05:42 -05:00
KernelDeimos 17d0738d62 dev: no_temp_user event setting 2025-01-17 13:09:00 -05:00
Nariman Jelveh 7d24fa2b32 Update nb.js 2025-01-16 19:07:44 -08:00
aryantavish 3883af2e96 Complete the Norwegian Bokmål (Norsk Bokmål) translation of Puter 2025-01-17 07:40:08 +05:30
KernelDeimos 56ae760bea dev: extension support for request measurements 2025-01-15 11:59:30 -05:00
KernelDeimos 38ccc82c8e fix: subdomains to deleted files tried to deref fs node 2025-01-15 11:11:57 -05:00
KernelDeimos 37ca89228c fix: app icon empty string should be skipped 2025-01-15 11:11:57 -05:00
Nariman Jelveh 8cff90bdc3 Merge pull request #1092 from ProgrammerIn-wonderland/main
move try-catch outside of loop in TLS readstream
2025-01-15 08:00:31 -08:00
ProgrammerIn-wonderland f177732a0e move try-catch outside of loop in TLS readstream 2025-01-15 10:11:58 -05:00
Nariman Jelveh d638f371d0 Merge pull request #1091 from ProgrammerIn-wonderland/main
add 0x01 and 0x03 wisp messages
2025-01-14 21:03:21 -08:00
ProgrammerIn-wonderland b35cf776aa add 0x01 and 0x03 wisp messages 2025-01-15 00:01:43 -05:00
Nariman Jelveh 4fd6da9903 Merge pull request #1090 from ProgrammerIn-wonderland/main
TLS Support through rustls-wasm
2025-01-14 21:01:29 -08:00
ProgrammerIn-wonderland 98be5c1323 error handling on TLS handshake and reporting wisp errors to client 2025-01-14 23:54:47 -05:00
ProgrammerIn-wonderland 6261d7c90c WIP TLS support 2025-01-14 21:20:00 -05:00
Nariman Jelveh 365fac907c Merge pull request #1088 from ProgrammerIn-wonderland/main
add close to psocket
2025-01-14 14:52:46 -08:00
ProgrammerIn-wonderland a5e4840920 add close() 2025-01-14 17:51:24 -05:00
KernelDeimos 766c235cc7 fix: save_account case for disable_user_signup 2025-01-14 17:23:39 -05:00
Raiu 8d5860d733 feature: disable creation of temp_users and user signup through config 2025-01-14 17:06:14 -05:00
Raiu 78ac033a1c fix: use .get() for Map lookup. fix: correctly set url and url_paths. fix: null check to throw error. 2025-01-14 17:06:14 -05:00
KernelDeimos 7fa0822584 dev: measure response data amount 2025-01-14 16:17:55 -05:00
KernelDeimos 113ed31336 fix: ensure puter.signup emit resolves 2025-01-14 14:41:27 -05:00
KernelDeimos ca9e74ece4 dev: measure request transfer amount 2025-01-14 13:43:50 -05:00
KernelDeimos 4f3a6f7bbc dev: ll_rmdir,ll_rmnode -> provider.(rmdir,unlink) 2025-01-14 13:06:41 -05:00
KernelDeimos 5bf11adff3 dev: add utility to measure bytes in a stream 2025-01-14 10:45:23 -05:00
KernelDeimos 202e7f06e2 test: cleanup and tweak batch test
One of the test cases has been rendered redundant so it has been
removed. Another test was changed to overwrite a file as it's expected
to already exist.
2025-01-14 09:42:20 -05:00
KernelDeimos d9822a4f09 fix: --onlycase param broke cartesian tests 2025-01-14 09:18:33 -05:00
KernelDeimos f359ae193e fix: empty response when mkdir is a no-op 2025-01-13 15:27:02 -05:00
KernelDeimos 807c3ba5ec fix: mkdir with create_missing when some parents exist
There was an issue affecting mkdir requests with create_missing_parents
set to true which prevented the correct behavior if some of the listed
parents were already present. This commit ensures mkdir selects the
deepest existing node as the parent before proceeding.
2025-01-13 15:16:52 -05:00
KernelDeimos fb7025164e fix: possible out-or-order response objects from batch 2025-01-13 14:39:43 -05:00
KernelDeimos 5ef75e5df3 fix: app data check error in write 2025-01-13 14:11:26 -05:00
KernelDeimos 9215937064 test: remove tests for unsupported behavior in mkdir 2025-01-13 13:54:59 -05:00
KernelDeimos c9215d9e86 test: update outdated test cases 2025-01-13 11:38:00 -05:00
KernelDeimos 9d9d97fd00 fix: missing parent dirs created in move 2025-01-13 10:07:49 -05:00
KernelDeimos 6f4b1bf94a fix: missing changes to run-selfhosted.js 2025-01-13 09:11:39 -05:00
jelveh 706a2403e1 When navigating context menu using keyboard skip over item dividers 2025-01-11 14:59:03 -08:00
KernelDeimos d6bbba7bf0 fix: appease mocha's import requirements 2025-01-10 17:40:02 -05:00
KernelDeimos 6a6bfa034f fix: error msg for invalid puter-ocr urls 2025-01-10 17:37:44 -05:00
KernelDeimos 14cc8f7bc0 doc: notes about mountpoint hurdles 2025-01-10 16:44:46 -05:00
KernelDeimos e1bdee1abe dev: ability to run api tests from puter terminal 2025-01-10 16:24:08 -05:00
KernelDeimos 2993b887bd dev: experimental local-terminal service 2025-01-10 14:12:30 -05:00
KernelDeimos 7293fdbbfa dev: ll_move -> provider.move 2025-01-10 13:10:43 -05:00
KernelDeimos 28c5800d06 sync: package-lock.json 2025-01-10 10:27:40 -05:00
KernelDeimos 75aaaa66a8 fix: improper 500 in wisp token verify 2025-01-10 10:27:40 -05:00
KernelDeimos 7aa886d573 fix: actor param in legacy /write 2025-01-10 10:27:40 -05:00
jelveh a295420f58 fix: new desktop height calculation when resizing browser window 2025-01-09 16:15:32 -08:00
KernelDeimos 8fabf014a9 fix: circular imports 2025-01-09 19:07:31 -05:00
KernelDeimos eac2ddf8da sync: backend ver with puter ver 2025-01-09 19:07:31 -05:00
jelveh eb59c1a102 Don't console.log auth token 2025-01-09 15:32:33 -08:00
Nariman Jelveh d65ee6cfb1 Merge pull request #1085 from ProgrammerIn-wonderland/main
networking API beginnings
2025-01-09 15:25:40 -08:00
ProgrammerIn-wonderland 1ed3bccaa5 networking API beginnings 2025-01-09 18:11:28 -05:00
KernelDeimos d9a8ea095c dev: try removing npm registry from Dockerfile 2025-01-09 17:38:53 -05:00
KernelDeimos dd86724941 dev: add cartesian case selector 2025-01-09 16:36:37 -05:00
KernelDeimos 405d9b35aa move: api-tester to monorepo 2025-01-09 15:51:50 -05:00
KernelDeimos 44ad3c5781 fix: test and improve boolify 2025-01-09 15:45:15 -05:00
KernelDeimos f60c008158 fix: skip test files in mod lib loading 2025-01-09 15:41:40 -05:00
KernelDeimos 6d196d59f0 fix: shortcut issue 2025-01-09 11:51:26 -05:00
KernelDeimos 740fdb592e fix: test for get-launch-apps 2025-01-09 11:10:41 -05:00
KernelDeimos 3097b86597 fix: add package-lock.json 2025-01-09 10:24:12 -05:00
KernelDeimos 8963eb0c4f fix: try redundant npm install after build stage 2025-01-08 15:23:03 -05:00
KernelDeimos 686d3de518 fix: I'ma buy GitHub a coffee and spill it on their servers if this works 2025-01-08 14:47:49 -05:00
KernelDeimos a13af7e31a fix: oh, right; there's two of them 2025-01-08 12:20:05 -05:00
KernelDeimos 63b3376b48 dev: try upgrading docker node version 2025-01-08 12:11:43 -05:00
KernelDeimos 0cb1ca7989 chore: date and update version 2025-01-07 15:51:44 -05:00
KernelDeimos 691be3802b doc: update CHANGELOG.md 2025-01-07 15:50:26 -05:00
KernelDeimos 4085d508b0 dev: update release notes generator 2025-01-07 15:33:53 -05:00
KernelDeimos 803f440d55 fix: terminal not loading in self-hosted 2025-01-07 15:13:35 -05:00
KernelDeimos f5a7b06d40 doc: fix generated comment errors (batch 2) 2025-01-07 14:35:54 -05:00
KernelDeimos 7deb0c5692 fix: don't call /rao in gui 2025-01-06 21:20:13 -05:00
jelveh 6a184d52b4 Update copyright notice dates in license headers 2025-01-06 15:18:22 -08:00
KernelDeimos 540821c759 doc: fix generated comment errors (batch 1) 2025-01-06 16:47:30 -05:00
KernelDeimos 15898fe5b7 chore: update license headers 2025-01-06 11:55:17 -05:00
KernelDeimos 0fb05309c2 doc: miscellaneous comment fixes 2025-01-06 11:24:18 -05:00
KernelDeimos 57befd310d doc: fix comments for list(), models(), complete() 2025-01-06 10:04:54 -05:00
jelveh 9c181516fc lol there was an empty file in there! 2025-01-05 23:20:17 -08:00
jelveh 5f81299bf0 cleaned up as much as i could 2025-01-05 23:14:47 -08:00
jelveh f3f1a1f188 Copyright notice fix 2025-01-05 22:39:20 -08:00
Nariman Jelveh 737a3a0ebc Merge pull request #1082 from ahmadkani/main
English README translated to Persian language
2025-01-04 14:54:22 -08:00
Ahmad e633d11dbb English document translated to Persian language 2025-01-04 10:47:36 +03:30
jelveh a03314f8b8 Update dev-center.js 2025-01-03 21:05:55 -08:00
KernelDeimos 9b0f220556 dev: request /rao from sites 2025-01-03 14:32:24 -05:00
KernelDeimos 71f221dd07 dev: ll_copy -> provider.copy_tree 2025-01-03 14:32:24 -05:00
KernelDeimos 8a9164d7c5 fix: missing ll_copy import 2025-01-03 13:28:03 -05:00
jelveh 34fcae9c56 Update UIWindow.js 2025-01-03 09:48:00 -08:00
jelveh 3e3db2327e Update UIWindow.js 2025-01-03 09:42:15 -08:00
KernelDeimos 63401f2c83 dev: DRY base64 app icons from streams 2025-01-03 11:46:01 -05:00
KernelDeimos 06a67a3b22 dev: migrate /rao to actor-capable auth 2025-01-03 10:24:46 -05:00
jelveh cd5866dd6b Update UITaskbarItem.js 2025-01-02 18:48:24 -08:00
jelveh 6fbd00f2ec Update style.css 2025-01-02 18:14:49 -08:00
jelveh 1ef8c36135 quick fix 2025-01-02 18:05:38 -08:00
jelveh ddd1c254f0 Update style.css 2025-01-02 17:20:47 -08:00
jelveh 3a47bc69d9 Add tooltips to vague icons in Dev Center 2025-01-02 17:14:08 -08:00
KernelDeimos a8fc4669e8 dev: fix default origins in puter.js 2025-01-02 16:23:02 -05:00
jelveh f1d0f9cd1f Update style.css 2025-01-02 11:04:00 -08:00
KernelDeimos 3e4c8ab56b dev: add wisp auth endpoints 2025-01-02 12:45:52 -05:00
KernelDeimos 13003c486f fix: bad uuid reference to resourceService 2025-01-02 10:53:37 -05:00
jelveh 626c453f19 Add more sub-sections to ACCEPTABLE USES 2025-01-01 10:46:25 -08:00
jelveh 3856ec476d Update TRADEMARK.md 2025-01-01 10:16:06 -08:00
jelveh 0c5f780f59 Merge branch 'main' of https://github.com/heyputer/puter 2025-01-01 10:01:41 -08:00
Nariman Jelveh 314d373527 Merge pull request #1079 from HeyPuter/revert-1050-issue-1000-drag-drop-fix
Revert "Fix: drag-and-drop issue: files not appearing on desktop automatically"
2025-01-01 09:49:44 -08:00
Nariman Jelveh 774a75401a Revert "Fix: drag-and-drop issue: files not appearing on desktop automatically" 2025-01-01 09:49:33 -08:00
Nariman Jelveh 55687bb412 Merge pull request #1050 from mariatouil/issue-1000-drag-drop-fix
Fix: drag-and-drop issue: files not appearing on desktop automatically
2025-01-01 09:49:23 -08:00
jelveh 4691af3a6f Update AppInformationService.js 2024-12-31 21:27:42 -08:00
jelveh a0da1e06e3 Use puter.ui's spinner for all spinners in Dev Center 2024-12-31 20:46:05 -08:00
KernelDeimos ad8a3978c0 fix: allow localhost for development 2024-12-31 17:16:09 -05:00
KernelDeimos 29471a752f dev: ll_readdir -> provider.readdir 2024-12-31 15:43:04 -05:00
KernelDeimos 0ef1849013 dev: make puterfs a mountpoint 2024-12-31 15:43:04 -05:00
jelveh 5d8ccf8c9e Use the correct date formatting in get_stats depending on DB engine 2024-12-31 11:21:08 -08:00
jelveh 13e5f7f69f Replace non-existent timestamp column with ts in get_stats 2024-12-31 10:53:46 -08:00
KernelDeimos 9d578b8d1f dev: begin de-coupling FSNodeContext/PuterFS 2024-12-31 13:15:01 -05:00
KernelDeimos f7196991fc refactor: rm legacy FSAccessContext and systemfs 2024-12-31 10:33:39 -05:00
jelveh 539b31cc5b Don't allow dropping of Launcher icons after trash in taskbar. 2024-12-30 22:02:42 -08:00
jelveh 4da9f525da delete components that aren't used 2024-12-30 20:39:51 -08:00
KernelDeimos 2728761d3c dev: remove unnecessary filesystem methods
These used to serve a purpose but now they only cause a dependency loop
between LL*/HL* operations and FilesystemService itself, making it
difficult to strategize filesystem behavior.
2024-12-30 15:52:10 -05:00
KernelDeimos dacbbf033d fix: rewrite confusing log message 2024-12-30 15:34:12 -05:00
KernelDeimos 233260233c fix: AppInformationService initialization 2024-12-30 15:23:37 -05:00
KernelDeimos 47a4313d92 fix: dev center app icon SVG issue 2024-12-30 13:39:12 -05:00
KernelDeimos 23eab63776 fix: app icon double-encode bug
When getting a stream for an SVG icon from AppIconService with a
previously-fetched stored icon provided, a double-encoding bug was
preventing a valid image from being obtained.
2024-12-30 13:38:41 -05:00
KernelDeimos a6b9d33d27 fix: first read of recommended apps 2024-12-30 12:55:44 -05:00
KernelDeimos 055ba7d9df dev: move recommended apps to service with cache invalidation
Adds an event for app invalidation.

Moves iconify_apps to AppIconService and adds RecommenededAppsService,
which holds some logic that used to be in get-launch-apps. The event for
app invalidation is then used by RecommenededAppsService to determine
when to clear the recommended apps cache.
2024-12-30 12:38:51 -05:00
KernelDeimos c1961dd54e dev: move app services to apps module
Moves AppIconService, OldAppNameService, and ProtectedAppService to the
new apps module to keep things organized, and updates imports. There
were no interesting init errors. Services creating a database at init
were tested for failures but this wasn't an issue. It turns out
initializing with a database accessor before the db service inits is
okay, but using that database accessor at init is not.
2024-12-30 11:03:27 -05:00
KernelDeimos 2de442be92 dev: add apps module, migrate AppInformationService
There are now several services related to apps, and
RecommendedAppsService is about to be added, making this a good time to
create a separate module for these services and migrate the legacy
service AppInformationService.

During migration it was realized that most of the initialization needed
to occur at boot.consolidation rather than boot.init because the
database needs to be initialized first.
2024-12-30 10:19:02 -05:00
jelveh 3ffb3cbc74 Remove credentialless from Dev Center advanced section 2024-12-29 22:13:11 -08:00
jelveh a105192882 Update dev-center.js 2024-12-29 21:53:43 -08:00
jelveh 3b60e9913e Update dev-center.js 2024-12-29 19:25:13 -08:00
jelveh cc0abf9f3b Update style.css 2024-12-29 18:47:32 -08:00
jelveh 0d0f429bd8 Add icons to dev center sub tabs 2024-12-29 18:44:06 -08:00
jelveh c9fe08cea5 Update style.css 2024-12-29 18:00:12 -08:00
jelveh 5da8872315 Update dev-center.js 2024-12-29 17:20:59 -08:00
jelveh be24f2acec Update dev-center.js 2024-12-29 16:53:09 -08:00
jelveh bc0e7e12b5 Add better grouping and chart labeling for dev center analytics 2024-12-29 16:42:31 -08:00
jelveh 4f88ee37de Analytics for apps 😎 2024-12-29 14:55:59 -08:00
Nariman Jelveh 3b7a051d79 Add Ritesh Sahu to SECURITY-ACKNOWLEDGEMENTS.md 2024-12-29 10:24:33 -08:00
jelveh 2bdaac6177 Update fuzz.js 2024-12-28 16:49:26 -08:00
jelveh 14cb77d544 Update fuzz.js 2024-12-28 15:42:40 -08:00
jelveh c58788805d Update dev-center.js 2024-12-28 14:48:01 -08:00
jelveh 3eff05d97d add a little STYLE to analytics 2024-12-27 22:05:15 -08:00
jelveh 116c3d358a add simple analytics tab for Dev Center 2024-12-27 21:52:17 -08:00
jelveh ac8068a139 No need for params when passing params to Apps driver 2024-12-27 18:24:09 -08:00
jelveh d7aa08b345 Revert "if clichouse exists hit it in _refresh_app_stats"
This reverts commit 9867d26432.
2024-12-27 17:53:43 -08:00
jelveh 9867d26432 if clichouse exists hit it in _refresh_app_stats 2024-12-27 17:47:19 -08:00
jelveh 7252d2ef4f Check cache first when returning stats for the all period in the AppInformationService 2024-12-27 17:21:17 -08:00
jelveh 027f52d0fd Update AppInformationService.js 2024-12-27 16:55:31 -08:00
jelveh 9f5a138047 add analytics to the Apps driver 2024-12-27 14:39:51 -08:00
KernelDeimos c3fb0bca41 doc: document how to create a driver 2024-12-27 17:23:30 -05:00
KernelDeimos 396498f88a dev: try a different approach for trigger_download 2024-12-27 15:27:03 -05:00
KernelDeimos 5e844205b3 dev: update/cleanup PerformanceMonitor 2024-12-27 13:15:55 -05:00
KernelDeimos 33d094322f dev: change cache score for fs 2024-12-27 10:58:53 -05:00
jelveh 8daf1a5469 Update keyboard.js 2024-12-26 20:57:40 -08:00
jelveh c58c0facda Update get-launch-apps.js 2024-12-26 20:30:20 -08:00
jelveh 93aa83bdf7 change apps in taskbar and launcher 2024-12-26 20:21:46 -08:00
jelveh 5f5eeb2a06 Use alerts to show error message when signing up temp user 2024-12-26 17:28:46 -08:00
jelveh e74aa13187 Send puter.signup event before signup process starts 2024-12-26 17:14:11 -08:00
jelveh 76654e65de Fix the issue with contextmenu going completely nuts when opened near the right edge of the screen 2024-12-26 13:43:34 -08:00
jelveh 68fb7e8291 Update AppInformationService.js 2024-12-25 18:26:20 -08:00
jelveh e263c2be95 Update AppInformationService.js 2024-12-25 18:21:36 -08:00
jelveh 89eb6a80e1 AppInformationService can now use clickhouse to pull metrics 2024-12-25 17:57:22 -08:00
jelveh 3d32f4123b Send more infor in the puter.app_open event 2024-12-24 22:52:07 -08:00
KernelDeimos efd4730f75 fix: prefix peer addresses with protocol 2024-12-24 16:49:22 -05:00
KernelDeimos d386096467 feat: hash-based distributed cache inval 2024-12-24 16:19:58 -05:00
KernelDeimos eb7494ce55 dev: measure cache rate and fix an edge-case 2024-12-24 14:04:22 -05:00
KernelDeimos 7c29d7c16d dev: smaller readdir app icons 2024-12-24 13:11:39 -05:00
jelveh 0859543ca3 Update TRADEMARK.md 2024-12-23 21:51:15 -08:00
KernelDeimos 498d6ed3d8 clean: remove unnecessary additional method 2024-12-23 15:49:15 -05:00
KernelDeimos 728ecbfb03 fix: clone message object 2024-12-23 15:27:25 -05:00
jelveh 38adf9fce3 Update TRADEMARK.md 2024-12-23 12:13:29 -08:00
KernelDeimos 35cc83a560 dev: filter topic ARNs (and tweaks) 2024-12-23 14:58:39 -05:00
KernelDeimos 5ed2f39ec7 dev: add Amazon SNS integration
There were a few things which made this rather difficult:
- AWS SDK doesn't appear to have a utility to validate message
  signatures.
- The only available node.js module that does this is known to be
  unreliable.
- SNS sends 'text/plain' MIME type even though the data is in JSON
  format, so a middleware had to be added to account for this.
- We don't accept POST requests with no Origin header. Since SNS doesn't
  send the Origin header, an exception had to be made for this.
- The endpoint needs to be public and SNS doesn't seem to have a
  proxying utility for developers such as what Stripe has.
- Because of the above point, debugging time was affected by deployment
  time to the staging server.
2024-12-23 14:53:18 -05:00
KernelDeimos 2dc6c4737b fix: timing for PrefixLogger call to /whoami
This commit fixes the timing of the /whoami call used for the
PrefixLogger (a logger for puter.js that displays app names) to ensure
the API origin and token are available. This is done by waiting for a
service called 'api-access' to be initialized first.

This was discovered while testing changes for /whoami responses that
display icons, because the current behavior breaks the call for
non-puter.com instances.
2024-12-23 11:50:30 -05:00
KernelDeimos cb2653b84d dev: no icons form /whoami calls without icon_size
Calls to `/whoami` generally don't require app icons. Fetching icons of
the smallest size still incurs round-trip latency from the database and
S3, as well as additional delay for any retries due to failed icon
generation.

Although this is technically a regression in `/whoami`, the impact is
localized to Puter's desktop only because apps are not allowed to
receive taskbar icons.
2024-12-23 11:26:44 -05:00
KernelDeimos d1bec45df6 dev: fallback icon read 2024-12-23 10:45:04 -05:00
jelveh 665f5559e1 make email confirmation window responsive 2024-12-23 06:59:09 -08:00
KernelDeimos e56a62c539 fix: try catching icon read errors before stream
Current issue with get-launch-apps wasn't fixed by catching errors while
reading the stream so this next attempt catches errors from the call to
start reading.

If the error occurs asynchronously this may not work either.
2024-12-23 09:50:01 -05:00
jelveh e736e428d6 disable email confirmation digit input while confirming 2024-12-23 06:43:46 -08:00
KernelDeimos ada051b9b8 fix: try catching on stream_to_buffer 2024-12-23 09:40:22 -05:00
jelveh d922c848ce request 64x64 icon sizes when opening apps 2024-12-23 06:17:16 -08:00
Nariman Jelveh eb26eacdc2 Merge pull request #1078 from HeyPuter/revert-1076-patch-1
Revert "Create devcontainer.json"
2024-12-22 12:07:28 -08:00
Nariman Jelveh ce0b4b9394 Revert "Create devcontainer.json" 2024-12-22 12:07:17 -08:00
Nariman Jelveh 613c75f1ed Merge pull request #1076 from akamas/patch-1
Create devcontainer.json
2024-12-22 12:07:09 -08:00
jelveh 6c1226bc8c emit an event when an app is opened 2024-12-21 22:44:20 -08:00
jelveh 55073189bb cleanup 2024-12-21 21:30:32 -08:00
jelveh 0beb442fa6 remove unused imports in helpers.js 2024-12-21 21:10:08 -08:00
jelveh e5f8127e21 Update app.js 2024-12-21 18:40:17 -08:00
KernelDeimos 5d049e8f06 fix: check if row.timestamp is Date 2024-12-21 14:57:37 -05:00
SAnker f4d36a271d Create devcontainer.json 2024-12-21 08:52:16 +01:00
Nariman Jelveh 770b957b42 Merge pull request #1024 from HatemLamia/add-french-translation
feat: Complete the  French (Français) translation of Puter #975
2024-12-20 17:59:24 -08:00
jelveh 76fbe9b4ce request 64x64 icons for Taskbar via /whoami 2024-12-20 14:06:37 -08:00
KernelDeimos e732859ff8 dev: icon_size for taskbar items 2024-12-20 16:39:05 -05:00
jelveh 530db18bae request 64x64 icons for taskbar and launch menu 2024-12-20 13:29:01 -08:00
KernelDeimos ee3f0c6e08 dev: do base64 svg check outside of get-launch-apps 2024-12-20 16:09:49 -05:00
Nariman Jelveh 77db3da1cf Merge pull request #1075 from joswin18/add-malalayalam-translations
Complete Malayalam translation based on English file #754
2024-12-20 12:48:22 -08:00
KernelDeimos df10a7c332 dev: add icon_size query for get-launch-apps 2024-12-20 15:08:10 -05:00
joswin18 3921241c46 Add Malayalam translations for missing keys in ml.js 2024-12-21 01:23:06 +05:30
KernelDeimos f14e1fefcf fix: AppES PD alert
This happened because the return signature of get_app_icon was changed
so that the MIME type can be returned when the uploaded or default icon
is being used as a fallback. AppES was not updated to account for this
change.
2024-12-20 13:56:32 -05:00
KernelDeimos a504c6ba2a perf: optimize recommended apps 2024-12-20 13:16:00 -05:00
KernelDeimos 3da571c39a test: unit-test get-launch-apps 2024-12-20 12:07:34 -05:00
KernelDeimos c6c3844763 chore: update kv.js 2024-12-20 12:07:24 -05:00
KernelDeimos 2a5073687d perf: reorder get-launch-apps behavior
As the recommended app list is hard-coded, these apps should be fetched
first as they don't depend on a database request.
2024-12-20 12:07:24 -05:00
jelveh e6194f028d support icon_size in the apps module of Puter.js and Dev Center 2024-12-20 06:58:02 -08:00
KernelDeimos 648d6e036d fix: fix for previous fix 2024-12-20 09:25:30 -05:00
KernelDeimos 4f3a1618b1 fix: fix fallback icon behavior in get_icon_stream 2024-12-20 09:12:50 -05:00
jelveh b1833ce1d7 close #1073 2024-12-19 19:35:22 -08:00
Hatem Lamia 4a77c93ce6 Merge branch 'main' into add-french-translation 2024-12-19 23:10:22 +01:00
KernelDeimos 9c86614df5 fix: revert test change 2024-12-19 13:22:50 -05:00
KernelDeimos 0d53020739 dev: fix a timestamp bug in old name expiry 2024-12-19 13:22:00 -05:00
KernelDeimos 6d2966f314 dev: AppES predicate transform for old name retry lookup 2024-12-19 13:22:00 -05:00
KernelDeimos c775a2e860 dev: option to follow old app names in get_app 2024-12-19 13:22:00 -05:00
KernelDeimos 0ccb3b2eed dev: track old app names 2024-12-19 13:22:00 -05:00
maria touilzak 408631dce9 Bug: Success Message Not Displayed After Deployment 2024-12-19 11:39:03 +01:00
Nariman Jelveh 40abd568e3 Merge pull request #1067 from bill-c-law/explorer-table-too-wide
Fix explorer table extra white space on right
2024-12-18 16:06:36 -08:00
jelveh 7a98616c86 Restore package-lock.json from master 2024-12-18 15:39:11 -08:00
jelveh 8c9f92cb61 cleanup 2024-12-18 15:31:14 -08:00
KernelDeimos c69006e185 fix: acl check for subdomain on access 2024-12-18 14:51:30 -05:00
KernelDeimos 81ad3243b1 dev: entity storage parameters + app icon size 2024-12-18 14:12:42 -05:00
KernelDeimos f032faa06d dev: add fallback for missing icons 2024-12-18 13:04:52 -05:00
KernelDeimos 7ec6621111 dev: make code more compatible with migration branch 2024-12-18 12:20:47 -05:00
KernelDeimos 90967ab109 dev: add ico support 2024-12-18 12:05:11 -05:00
KernelDeimos 8a3d74d30c dev: add bmp support for app icons 2024-12-18 11:23:04 -05:00
KernelDeimos d67a6f0e0c doc: document and cleanup app icons 2024-12-17 15:17:31 -05:00
KernelDeimos fc87897a3d dev: parallelize app icon generation 2024-12-17 14:56:07 -05:00
KernelDeimos 925ebd5310 fix: attempt fix for prod issue with app icons 2024-12-17 13:51:33 -05:00
bill-c-law c5198a03fe Fix explorer table extra white space on right
Fix explorer table was always too wide with extra white space on right side causing an unnecessary horizontal scrollbar.  Changed width for both the header row and item rows from 100vw to 100%, and added min-width.
2024-12-17 13:25:42 -05:00
KernelDeimos 046ef3cb4f dev: add endpoint to read app icons 2024-12-17 12:57:24 -05:00
KernelDeimos 20d27d59bf dev: create pre-sized icons for apps 2024-12-17 12:57:03 -05:00
jelveh 905be23854 Larger launch icons 2024-12-17 09:17:38 -08:00
jelveh 453b7d9ac9 Enforce taskbar height 2024-12-17 09:13:43 -08:00
Nariman Jelveh 971383ef58 Merge pull request #1065 from bestlaw66/patch-1
Update README.zh.md
2024-12-17 09:01:40 -08:00
KernelDeimos 4a0e4d51b5 git: update .gitignore 2024-12-17 10:27:11 -05:00
KernelDeimos f87769b445 fix: remove redundant notification query 2024-12-17 10:23:20 -05:00
KernelDeimos 2336a62b4f fix: share only emails email_confirmed recipients 2024-12-17 10:00:43 -05:00
jelveh 63efee390a Fix login using QR code 2024-12-17 06:48:40 -08:00
jelveh 47908f01a9 Add that sweet sweet subtle shadow for taskbar 2024-12-16 16:17:35 -08:00
jelveh 3c9a6b9d19 swipe to scroll Explore on mobile 2024-12-16 16:01:43 -08:00
jelveh c9ab994042 Make progress window mobile friendly 2024-12-16 15:30:42 -08:00
jelveh 8019fd6b73 Update style.css 2024-12-16 15:21:17 -08:00
jelveh ec2cb250b8 Update initgui.js 2024-12-16 15:16:04 -08:00
jelveh 35059098c3 Update style.css 2024-12-16 15:08:37 -08:00
jelveh 08d23ffca9 Update style.css 2024-12-16 14:58:03 -08:00
jelveh a06f9c1ec1 Update style.css 2024-12-16 14:52:43 -08:00
jelveh 24ca4e6ad8 Update style.css 2024-12-16 14:44:55 -08:00
jelveh b1c057e3a6 Update style.css 2024-12-16 14:35:15 -08:00
jelveh 276c9aab96 allow smooth swipe-to-scroll on mobile 2024-12-16 14:29:43 -08:00
jelveh 4e964d82ad ok, apple is horrible. 2024-12-16 14:22:10 -08:00
jelveh 1c5d59da79 Update style.css 2024-12-16 14:19:05 -08:00
jelveh 07de2aba30 Update style.css 2024-12-16 14:13:53 -08:00
jelveh ba7247e75d More aggressive measures to disable pinch/pan zoom on touch devices 2024-12-16 14:05:17 -08:00
KernelDeimos fd6f8bf225 perf: single request for gui boot kv keys 2024-12-16 16:54:08 -05:00
KernelDeimos 7ba1b7656b fix: database issue with KBKV update 2024-12-16 16:54:08 -05:00
jelveh 7f036223f6 Update initgui.js 2024-12-16 13:35:18 -08:00
jelveh 380a4b45ef Add user-scalable=no to the desktop 2024-12-16 13:30:16 -08:00
jelveh 89aa02ccec allow web-share in iframes 2024-12-16 12:58:51 -08:00
KernelDeimos 5a68691290 perf: multiple kv keys 2024-12-16 15:38:30 -05:00
jelveh 29d4eefbae Update style.css 2024-12-16 07:25:11 -08:00
jelveh 6014b1ea36 append custom_script_tags_str to the HTML of homepage 2024-12-16 07:09:37 -08:00
jelveh 3d761f008b Emit add_script_tags_to_homepage_html event before building the HTML of homepage 2024-12-16 07:01:44 -08:00
jelveh 556258847a Fix sizing for windows snapping given the new taskbar 2024-12-15 21:49:31 -08:00
jelveh d7c6229aea update search position in both desktop and launcher 2024-12-15 21:39:05 -08:00
jelveh b893a47595 Update style.css 2024-12-15 19:28:46 -08:00
jelveh ab5bc17991 set correct size for home screen on mobile 2024-12-15 19:23:30 -08:00
jelveh 949f97eb2e add mobile responsiveness for otp, login, and password recovery 2024-12-15 17:52:57 -08:00
jelveh 66bcf8a296 Update style.css 2024-12-14 20:55:10 -08:00
jelveh 1266fb8a29 Update style.css 2024-12-14 20:44:20 -08:00
jelveh 37ef58eb04 make Launcher mobile-friendly 2024-12-14 20:32:34 -08:00
jelveh 5ba957b14a add smooth scrolling for mobile taskbar 2024-12-14 19:31:41 -08:00
jelveh a90beab0b1 show all taskbar items on mobile as well. 2024-12-14 19:18:56 -08:00
jelveh cfbf98efdd fix more mobile styles 2024-12-14 17:09:03 -08:00
jelveh 803f54dec2 Update style.css 2024-12-14 16:57:19 -08:00
jelveh 6565c740f3 fix minimize not working on mobile 2024-12-14 16:50:43 -08:00
jelveh 26b046b512 Fix multiple issues with mobile responsiveness 2024-12-14 16:39:12 -08:00
jelveh 1a99581d0e fix minor css issues 2024-12-14 13:39:23 -08:00
jelveh 2061d571b0 fix issue with empty file associations input breaking the save process in Dev Center 2024-12-14 13:26:52 -08:00
jelveh ce36a685fc new taskbar is here! 2024-12-14 10:52:53 -08:00
jelveh 94e7f5deb4 fix: taskbar items of apps should always appear before Trash 2024-12-13 20:42:56 -08:00
jelveh 134f9d2934 Update UIWindowPublishWebsite.js 2024-12-13 19:18:06 -08:00
jelveh 54b93cc349 add a copy button next to App UID in Dev Center 2024-12-13 18:37:43 -08:00
jelveh 65d918866e fix: fullpage mode 2024-12-13 16:10:44 -08:00
KernelDeimos 45f6bc12eb dev: move and simplify writeFile write 2024-12-13 16:49:04 -05:00
KernelDeimos 8045d60e88 clean: cleanup copy and move 2024-12-13 16:04:48 -05:00
KernelDeimos e208b99d21 fix(security): verify dest_node uid matches signature 2024-12-13 15:53:12 -05:00
KernelDeimos e840544ee0 dev: DRY destination node handling 2024-12-13 15:30:55 -05:00
KernelDeimos 6b6c295a87 dev: rewrite and move writeFile rename 2024-12-13 14:49:03 -05:00
KernelDeimos 298609c6e9 fix: bug in writeFile rename 2024-12-13 13:35:55 -05:00
KernelDeimos 96a5c3c213 dev: move and simplify writeFile trash and delete 2024-12-13 13:18:34 -05:00
KernelDeimos d23c33c377 dev: cleanup writeFile: copy, move, mkdir 2024-12-13 12:37:16 -05:00
KernelDeimos 4b3f71b25e dev: migrate listenerutil, remove duplicate 2024-12-13 10:20:31 -05:00
bestlaw66 05a7e28f55 Update README.zh.md
在国内有大部分用户都在使用宝塔面板管理服务器,因此增加使用宝塔面板部署的教程,可视化的部署方式可以帮助用户更加便捷的部署
2024-12-13 12:13:10 +08:00
jelveh c792f4a345 fix: remove unnecessary item_path definition in delete fs api 2024-12-12 18:07:50 -08:00
KernelDeimos 06aeae518b clean: miscellaneous cleanups 2024-12-12 16:42:16 -05:00
KernelDeimos 332939308e clean: remove test functions 2024-12-12 14:47:26 -05:00
KernelDeimos 168dbad295 dev: organize share sequence 2024-12-12 14:47:26 -05:00
KernelDeimos 69e9df1ae2 fix: add missing permissions 2024-12-12 14:46:25 -05:00
Nariman Jelveh b89cd9529d Merge pull request #1063 from charlottekatzmann/patch-1
Update da.js #875
2024-12-12 11:46:49 -08:00
Charlotte Katzmann 46365beb7b Update da.js #875 2024-12-12 20:36:19 +01:00
Nariman Jelveh 54076d9d7f Merge pull request #1060 from biocyberman/translation/danish
Finish Danish translation, resolve issue #875
2024-12-12 11:00:37 -08:00
Nariman Jelveh 0a18cbb19d Merge branch 'main' into translation/danish 2024-12-12 11:00:30 -08:00
Nariman Jelveh 1aaba0016a Merge pull request #1061 from MPiya/#875
#875 Complete the Danish (Dansk) translation of Puter
2024-12-12 10:58:56 -08:00
Nariman Jelveh a879c83369 Merge branch 'main' into #875 2024-12-12 10:58:47 -08:00
Nariman Jelveh 63c5aa2215 Merge pull request #1062 from lauritsbonde/laurits/danish-translation
add missing danish translations
2024-12-12 10:58:20 -08:00
lauritsbonde 5126571217 add missing danish translations 2024-12-12 19:48:34 +01:00
KernelDeimos 651076a39b doc: document permission scanning 2024-12-12 13:47:03 -05:00
Chris fb346807e7 Add Danish missing translation 2024-12-12 19:45:38 +01:00
Vang Le-Quy 78cf0f403f Finish Danish translation, resolve issue #875 2024-12-12 19:41:39 +01:00
KernelDeimos 4e47c8bf9d clean: cleanup utils directory 2024-12-12 13:02:22 -05:00
KernelDeimos d5ecac4d0f dev: update deprecated use of __proto__ 2024-12-12 12:23:58 -05:00
KernelDeimos 951fb32f57 dev: add another response to AIChatService 2024-12-12 10:51:08 -05:00
Nariman Jelveh ee85a6d5e2 Merge pull request #1055 from themermabrouk/feature/issue-#975/finish-French-translations
feature(issue #975) finish French translations
2024-12-12 07:42:58 -08:00
Nariman Jelveh 713226081e Merge branch 'main' into feature/issue-#975/finish-French-translations 2024-12-12 07:42:45 -08:00
Nariman Jelveh 07d8e3b229 Merge pull request #1058 from hexsproductions/update-fr-translation
Add missing French translations (#975)
2024-12-12 07:38:32 -08:00
hexsproductions 52d077cc19 Add missing French translations (#975) 2024-12-12 15:59:55 +01:00
KernelDeimos d4ca9d438c dev: fix issue with prompt validation 2024-12-12 09:51:43 -05:00
Nariman Jelveh 5f37f7f48f Merge pull request #1047 from dev-wonny/#966-korean-translation-update
Complete Korean translation for ko.js (#966)
2024-12-12 06:39:34 -08:00
Nariman Jelveh 4a6dfc31e8 Merge pull request #1057 from HeyPuter/revert-1043-patch-1
Revert "Resolved Issue #965: Completed Kurdish Translations"
2024-12-11 18:47:44 -08:00
Nariman Jelveh 1b71184b13 Revert "Resolved Issue #965: Completed Kurdish Translations" 2024-12-11 18:47:34 -08:00
Nariman Jelveh 3203159f59 Merge pull request #1043 from Abdulbasit0123/patch-1
Resolved Issue #965: Completed Kurdish Translations
2024-12-11 18:47:30 -08:00
Nariman Jelveh 3bd32bb13b Merge branch 'main' into patch-1 2024-12-11 18:46:52 -08:00
jelveh 51ad4e12d4 Update index.html 2024-12-11 18:40:38 -08:00
Nariman Jelveh d570c2fbff Merge pull request #1056 from alizargit/main
Update dev-center.js to improve UX
2024-12-11 18:39:45 -08:00
Ali Z 5412408538 Update dev-center.js 2024-12-11 18:36:13 -08:00
KernelDeimos 6ca701139a fix: logic from previous commit 2024-12-11 20:55:49 -05:00
KernelDeimos c6e814daa8 fix: add fallback moderation in case openai goes down 2024-12-11 20:51:23 -05:00
themer 0efac5c77e feature(issue #975) finish French translations 2024-12-12 00:43:55 +01:00
Nariman Jelveh 97a1616305 Merge pull request #1054 from landof/patch-1
Fix languages orders in translations.js
2024-12-11 15:16:36 -08:00
landof 56a5671488 Fix languages orders in translations.js 2024-12-11 15:06:33 -08:00
KernelDeimos 4ff5bec40e clean: remove spans on deprecated calls 2024-12-11 16:52:14 -05:00
KernelDeimos cbe15a42bd dev: update TelemetryService 2024-12-11 16:36:20 -05:00
KernelDeimos 08dbef7b8c dev: add a feature to hook tracing into context 2024-12-11 16:02:45 -05:00
KernelDeimos c2b094a351 dev: return otel/jaegar tracing to working state 2024-12-11 15:25:55 -05:00
KernelDeimos dac5458b2e dev: migrate DatabaseFSEntryFetcher to puterfs module 2024-12-11 13:35:37 -05:00
KernelDeimos 4e0ce06982 clean: remove unused caching mechanism 2024-12-11 13:35:37 -05:00
KernelDeimos df20cb8e6c clean: filesystem batch 2024-12-11 13:35:16 -05:00
Nariman Jelveh 04cc9c2e05 Merge branch 'main' into #966-korean-translation-update 2024-12-11 09:54:50 -08:00
Nariman Jelveh 658af1fff0 Update ko.js 2024-12-11 09:45:37 -08:00
Nariman Jelveh fb0a091506 Merge pull request #1053 from HeyPuter/revert-1051-fix/stuck-new-app-loading-983
Revert "fix: resolve issue #983 - Stuck on Creating new app loading s…
2024-12-11 09:45:04 -08:00
Nariman Jelveh 51ab24314e Revert "fix: resolve issue #983 - Stuck on Creating new app loading screen" 2024-12-11 09:44:31 -08:00
Nariman Jelveh f800cf2dc9 Merge pull request #1051 from mariatouil/fix/stuck-new-app-loading-983
fix: resolve issue #983 - Stuck on Creating new app loading screen
2024-12-11 09:44:27 -08:00
Nariman Jelveh 040a6a7513 Merge pull request #1052 from vasarmilan/feature-hun-translation
Add Hungarian translations
2024-12-11 09:43:42 -08:00
Nariman Jelveh 653f493d27 Merge branch 'main' into feature-hun-translation 2024-12-11 09:43:30 -08:00
Nariman Jelveh 5422a239e4 Merge pull request #1048 from phellinger/hungarian-translation-update-#972
Complete Hungarian translation of Puter #972
2024-12-11 09:41:30 -08:00
vasarmilan e148bcb909 Add Hungarian translations 2024-12-11 18:00:57 +01:00
KernelDeimos ed48a16ced clean: remove newly-unused imports 2024-12-11 12:00:42 -05:00
KernelDeimos 4d9cc9bd83 fix: permission strings for ES services 2024-12-11 11:25:29 -05:00
Nariman Jelveh 2cf959dc2c Merge pull request #1046 from nicola-laura/korean-translation
Korean translation improvement (#966)
2024-12-11 08:24:07 -08:00
Nariman Jelveh 74d95aa366 Update ko.js 2024-12-11 08:21:47 -08:00
Nariman Jelveh 530b7ac647 Merge pull request #1044 from ismailix/965
kurdish translate ismailix
2024-12-11 08:20:43 -08:00
Nariman Jelveh 13518d0ff6 Update ku.js 2024-12-11 08:20:24 -08:00
maria touilzak c75c9d0383 fix: resolve issue #983 - Stuck on Creating new app loading screen 2024-12-11 16:56:21 +01:00
maria touilzak 96c7576607 Fix: drag-and-drop issue: files not appearing on desktop automatically 2024-12-11 15:34:05 +01:00
phellinger 7d2787d26b feat: complete Hungarian translation of Puter #972 2024-12-11 13:08:01 +01:00
“devwonny” ca3d669a10 Complete Korean translation for ko.js (#966)
Complete Korean translation for ko.js (#966)
https://github.com/HeyPuter/puter/issues/966
2024-12-11 19:44:48 +09:00
Nicola fefc4ac304 added missing translations and suggested improvements to existing translations (#966) 2024-12-11 17:56:14 +09:00
Nariman Jelveh 5889e4c25c Merge pull request #1045 from rdsingh120/main
Added Spanish translations for all the missing translations.
2024-12-10 19:07:21 -08:00
Ripudaman Singh 4b454a8706 Added Spanish translations for all the missing translations. 2024-12-10 20:38:47 -05:00
jelveh df34ee048a fix bug with 'Show All' in taskbar items 2024-12-10 17:04:33 -08:00
KernelDeimos 1dc2a6af81 dev: simplify get-launch-apps 2024-12-10 17:10:53 -05:00
KernelDeimos 1beda5b23d clean: cleanup filesystem routes 2024-12-10 16:40:38 -05:00
KernelDeimos cd7755da6b clean: misc cleanups 2024-12-10 15:58:22 -05:00
KernelDeimos ff62d9009e refactor: allow service-specific API errors to be registered 2024-12-10 15:23:54 -05:00
igorunmek af3b6fd152 kurdish translate upwork ismailix 2024-12-10 22:41:27 +03:00
KernelDeimos 8557c54527 clean: cleanup log outputs 2024-12-10 14:19:01 -05:00
KernelDeimos 1b578019f9 fix: provide actor context to ws event 2024-12-10 14:06:14 -05:00
KernelDeimos 96008233ba fix: context error in user connected event 2024-12-10 13:45:31 -05:00
KernelDeimos 6bb9437268 clean: remove legacy driver support 2024-12-10 13:18:42 -05:00
KernelDeimos b9d53b77a2 refactor: migrate kv driver invocation 2024-12-10 12:54:13 -05:00
KernelDeimos 2fcc257ae1 refactor: migrate entity storage driver invocation 2024-12-10 11:40:49 -05:00
KernelDeimos 193833f4f9 clean: remove legacy driver module 2024-12-10 10:38:40 -05:00
Ken 9965f219d8 refactor: adjust max_tokens for specific models
fix: fix issue when there is an assistant role
2024-12-10 09:17:16 -05:00
KernelDeimos 01395f302e fix: signup 500 for temp user 2024-12-10 09:09:25 -05:00
Nariman Jelveh 192958e88b Merge pull request #1042 from saud-saeed/main
Update Swedish translations in sv.js
2024-12-10 05:44:27 -08:00
Nariman Jelveh 62f4318914 Update sv.js 2024-12-10 05:44:14 -08:00
Abdulbasit 9d97ee849d Resolved issue #965, completed Kurdish translations
I completed the translation for Kurdish and fixed some typos of the already translated phrases and sentences.
2024-12-10 13:42:38 +03:00
Saud Saeed 84c1efbf5f Update Swedish translations in sv.js
fix: Resolve issue #960 by adding missing Swedish (Svenska) translations
2024-12-10 11:21:18 +01:00
Nariman Jelveh 56f57e4ab9 Merge pull request #1039 from Agastya18/feat/add-Escape-key
feat: add Escape key functionality to UIPrompt for closing the prompt
2024-12-09 23:08:54 -08:00
Nariman Jelveh 13c34211ed Merge pull request #1040 from twuttiwat/patch-1
Add missing Thai translations in th.js
2024-12-09 22:04:28 -08:00
Nariman Jelveh cf845d3ac1 Update th.js 2024-12-09 22:03:45 -08:00
Teerawat Wuttiwat 529c5376e4 Add missing Thai translations in th.js 2024-12-10 11:58:01 +07:00
agastya gaur e1b6c83813 feat: add Escape key functionality to UIPrompt for closing the prompt 2024-12-10 08:26:55 +05:30
Nariman Jelveh dd43c0acfa Merge pull request #1038 from Exclusiveideas/igbo-translation-updates
fixed "Complete the Igbo translation of Puter #969" issue
2024-12-09 18:43:42 -08:00
Nariman Jelveh bc30012087 Merge branch 'main' into igbo-translation-updates 2024-12-09 18:43:31 -08:00
Exclusiveideas cb7d4eaaf9 fixed "Complete the Igbo translation of Puter #969" issue 2024-12-10 03:31:48 +01:00
jelveh f2e2473a7d Create TRADEMARK.md 2024-12-09 18:24:51 -08:00
jelveh 6eec8a821b Merge branch 'main' of https://github.com/heyputer/puter 2024-12-09 18:19:30 -08:00
jelveh 7aa056f1e3 remove Missing translations comment from ig.js 2024-12-09 16:50:52 -08:00
Nariman Jelveh cd472f30e7 Merge pull request #1036 from HeyPuter/revert-1035-main
Revert "Update missing translations for Igbo"
2024-12-09 16:45:03 -08:00
Nariman Jelveh b04b09042e Revert "Update missing translations for Igbo" 2024-12-09 16:44:23 -08:00
Nariman Jelveh 6dfa795423 Merge pull request #1035 from Nathaniyell/main
Update missing translations for Igbo
2024-12-09 16:44:00 -08:00
Nariman Jelveh 49d7ad8eaa Update ig.js 2024-12-09 16:41:37 -08:00
Nathaniel Essien 803377868c Merge branch 'main' into main 2024-12-10 01:38:57 +01:00
Nariman Jelveh 444950ef8d Merge pull request #1034 from Victor-Evogor/main
Complete Igbo translations for missing keys (#969)
2024-12-09 16:37:17 -08:00
Nathaniyell 6f4d57a3c6 fix: correct Igbo translation for "Free" in billing terms 2024-12-10 01:36:05 +01:00
Nathaniyell f0f19e727e feat: add missing Igbo translations for billing-related terms 2024-12-10 01:35:24 +01:00
Victor Evogor 6b15eaed1c Complete Igbo translations for missing keys (#969) 2024-12-10 01:16:57 +01:00
KernelDeimos acf8ae302e fix: bad import for TeePromise 2024-12-09 18:03:45 -05:00
KernelDeimos 7acb096add fix: sorting bug in AIChatService 2024-12-09 16:31:53 -05:00
KernelDeimos 0f2641b88f clean: remove some unused code/comments 2024-12-09 16:31:53 -05:00
Nguyễn Tuấn Anh b2ea8a3888 feat: set max token to 8096 2024-12-09 16:31:36 -05:00
KernelDeimos 6c0f04706d move: MountpointService 2024-12-09 16:03:18 -05:00
KernelDeimos 4917848c60 refactor: move SizeService and DRY capacity usage
This commit also fixes a but that was discovered in calculating the size
of files during a copy operation.
2024-12-09 15:50:44 -05:00
KernelDeimos db00f0ae67 dev: cleanup filesystem utilities 2024-12-09 14:42:14 -05:00
KernelDeimos 3f5bc7163f dev: cleanup config.js 2024-12-09 14:08:46 -05:00
KernelDeimos 537d0d47ec dev: cleanup RuntimeEnvironment.js 2024-12-09 13:49:40 -05:00
KernelDeimos 7839d52925 dev: address TODO comment in Kernel.js 2024-12-09 13:14:10 -05:00
KernelDeimos c36dd1b3d3 refactor: extension loading 2024-12-09 12:05:23 -05:00
KernelDeimos 070937c7e6 clean: remove some unused vars 2024-12-09 12:05:23 -05:00
KernelDeimos 7af8afb053 refactor: address TODO; de-couple some services from FilesystemService 2024-12-09 12:05:11 -05:00
Nariman Jelveh bec3a28d33 Merge pull request #1028 from loismbferraz/issue-963-complete-portuguese-translation
portuguese translations for #963 issue added
2024-12-09 08:41:22 -08:00
loismbferraz c614b8a789 portuguese translations for #963 issue added 2024-12-09 16:23:38 +00:00
Nariman Jelveh 4c3a053a0a Merge pull request #1026 from nathnapa88/patch-1
Update th.js
2024-12-09 07:58:49 -08:00
nathnapa88 0a746f1e32 Update th.js 2024-12-09 15:42:10 +00:00
Nariman Jelveh d075718bf2 Merge pull request #1025 from hoursing/main
feat: Complete the Vietnamese translation of Puter #954
2024-12-09 06:37:07 -08:00
Nariman Jelveh c7e0ce6dd1 Merge branch 'main' into main 2024-12-09 06:36:55 -08:00
Nariman Jelveh 333f0ea42f Merge pull request #1023 from lephuongnam22/main
(#954) Add Vietnamese translations for billing-related terms
2024-12-09 06:21:16 -08:00
Nariman Jelveh 4643e8a523 Merge branch 'main' into main 2024-12-09 06:21:07 -08:00
Nariman Jelveh 25d3bac454 Merge pull request #1021 from vulct174/main
feat: add Vietnamese translations for billing in vi.js
2024-12-09 06:18:25 -08:00
Nariman Jelveh 0197e1489c Merge branch 'main' into main 2024-12-09 06:18:16 -08:00
Nariman Jelveh a1858fb495 Merge pull request #1020 from lvluu/feature/issue-954
feat: (#954) Add Vietnamese translations for billing-related terms
2024-12-09 06:14:06 -08:00
Nariman Jelveh 6890935d01 Update vi.js 2024-12-09 06:13:43 -08:00
hoursing 56489c33f6 feat: Complete the Vietnamese translation of Puter #954 2024-12-09 17:33:28 +07:00
lamia c840bc8161 feat: Complete the French (Français) translation of Puter #975 2024-12-09 09:49:41 +01:00
Nam Le ba876745b3 Update translation 2024-12-09 19:04:58 +11:00
Nam Le bbd0183320 Update text translation 2024-12-09 18:59:16 +11:00
Nariman Jelveh 4477f8f6e8 Merge pull request #1022 from akuumaa/issue-952
feat: Complete the German (Deutsch) translation of Puter #952
2024-12-08 23:20:20 -08:00
Nam Le 2dfc58fc2d (#954) Add Vietnamese translations for billing-related terms 2024-12-09 18:13:15 +11:00
akuumaa 05fef6749e feat: Complete the German (Deutsch) translation of Puter 2024-12-09 07:17:31 +01:00
lvluu 267a55aae5 feat: (#954) Add Vietnamese translations for billing-related terms 2024-12-09 12:59:38 +07:00
VuLCT 3e26dbe6a0 feat: add vietnamese translations for billing in vi.js 2024-12-09 12:42:18 +07:00
Nariman Jelveh d98b6e385c Merge pull request #1010 from cprogrammer1209/PUTER-ta-dec8
Added to new Tamil Words to the ta.js file.
2024-12-08 20:14:46 -08:00
Nariman Jelveh 9104ac0bd9 Merge pull request #1019 from Elisassa/update-zhTW-translation
Added Traditional Chinese translations
2024-12-08 17:27:44 -08:00
Nariman Jelveh fc09a26277 Update zhtw.js 2024-12-08 17:27:29 -08:00
Elisassa 35f2a4f594 Added Traditional Chinese translations 2024-12-08 19:35:55 -05:00
Nariman Jelveh a16fd36ad3 Merge pull request #1018 from dmytro-nesteruk/main
tweak: update ua translations;
2024-12-08 15:50:55 -08:00
Nariman Jelveh 3ad7c8437f Merge pull request #1017 from RamiIbrahim2002/arabic-translation-issue-948
Update Arabic translations for issue #948
2024-12-08 15:49:23 -08:00
Nariman Jelveh 80e4d040c7 Merge branch 'main' into arabic-translation-issue-948 2024-12-08 15:49:01 -08:00
Nariman Jelveh 89819204c1 Merge pull request #1016 from hasanayoub/fix-ar-translation_issue_948
Completed Arabic translations for issue #948
2024-12-08 15:46:03 -08:00
jelveh 320278dfdf Update ar.js 2024-12-08 15:45:19 -08:00
Nariman Jelveh 183b8105f9 Update ar.js 2024-12-08 15:19:52 -08:00
Dmytro Nesteruk 118605f054 tweak: updated ua translations; 2024-12-09 00:34:55 +02:00
Dmytro Nesteruk 208a38603d tweak: update ua translations; 2024-12-08 23:17:35 +02:00
hasanayoub 4c1b78f73b Completed Arabic translations for issue #948 2024-12-09 00:11:59 +03:00
RamiIbrahim2002 3f0f3dab51 Update Arabic translations for issue #948 2024-12-08 22:07:51 +01:00
Nariman Jelveh 974feeade3 Merge pull request #1015 from nafisa45/main
Add Bengali translations for billing module strings
2024-12-08 13:00:09 -08:00
Nariman Jelveh 05ecd2547b Update bn.js 2024-12-08 12:59:23 -08:00
nafisa45 de6e5ddb25 I have updated the undefined part of the translation with the intact %strong% and (%%) 2024-12-09 01:32:19 -05:00
Nariman Jelveh c4931c30ee Merge pull request #1014 from gwyneblaidd/main
Complete the Ukrainian (Українська) translation of Puter · Issue #956 · HeyPuter/puter
2024-12-08 12:39:03 -08:00
jelveh ceaf6cb24a Update ua.js 2024-12-08 12:38:38 -08:00
gwyneblaidd 2bbf11f91b Update ua.js 2024-12-08 22:31:59 +02:00
gwyneblaidd 255f102d16 Update ua.js 2024-12-08 22:24:18 +02:00
Nariman Jelveh e7f3ac6fa8 Merge pull request #1013 from CriDM/add-italian-translations
Added missing Italian translations (#968)
2024-12-08 11:49:59 -08:00
Nariman Jelveh badd4c218e Merge branch 'main' into add-italian-translations 2024-12-08 11:48:32 -08:00
Nariman Jelveh 7e1766bbdc Merge pull request #1012 from danielpetrica/patch-2
Update it.js
2024-12-08 11:47:46 -08:00
Nariman Jelveh 77c7d347a4 Update it.js 2024-12-08 11:47:15 -08:00
Daniel, Petrica Andrei-Daniel 5d8854f628 Update it.js 2024-12-08 20:39:36 +01:00
CriDM c6fa98b3b7 Added missing Italian translations (#968) 2024-12-08 20:35:56 +01:00
Nariman Jelveh 996c8097b7 Merge pull request #1011 from HeyPuter/revert-1009-warning_dialog
Revert "Created test cases for issue #878 "
2024-12-08 11:32:04 -08:00
Nariman Jelveh 40ea2a3f02 Revert "Created test cases for issue #878 " 2024-12-08 11:31:47 -08:00
Nariman Jelveh 575b4bd34c Merge pull request #1009 from LeeMEow23/warning_dialog
Created test cases for issue #878
2024-12-08 11:31:42 -08:00
Nariman Jelveh c8894c7d4c Merge branch 'main' into warning_dialog 2024-12-08 11:29:52 -08:00
root 019a8c1d93 Added to new Tamil Words 2024-12-08 23:30:21 +05:30
e5z26 2ca1f71595 removed jsdom in test file
removed because wasn't being used
2024-12-07 19:09:22 -05:00
Nariman Jelveh 4c5f427ac2 Merge pull request #1008 from HeyPuter/revert-1007-patch-1
Revert "Update id.js"
2024-12-07 11:46:15 -08:00
Nariman Jelveh e6a171e8f1 Revert "Update id.js" 2024-12-07 11:46:05 -08:00
Nariman Jelveh 777ac3a8ca Merge pull request #1007 from zefta27/patch-1
Update id.js
2024-12-07 11:45:36 -08:00
Nariman Jelveh f97394ded1 Merge branch 'main' into patch-1 2024-12-07 11:45:17 -08:00
Nariman Jelveh 0b71e2a723 Merge pull request #1004 from wildanhkm/wildanhkm/feat/id-translations
update id translations
2024-12-07 11:21:23 -08:00
Nariman Jelveh 8fc570d076 Merge branch 'main' into wildanhkm/feat/id-translations 2024-12-07 11:21:15 -08:00
Nariman Jelveh e030cd3d03 Merge pull request #1006 from arrafi-ahmed/issue-970
Fix issue #970
2024-12-07 10:34:01 -08:00
Nariman Jelveh e9ac20b8b0 Update id.js 2024-12-07 10:30:28 -08:00
Nariman Jelveh aa82e06e14 Merge pull request #1005 from arthur-adriansens/main
Close apps by clicking on icons (issue #944) + awesome animations!
2024-12-07 10:27:11 -08:00
jelveh 383b4841ae fix the issue with windows losing focus right after they're opened 2024-12-07 10:16:25 -08:00
Zefta Adetya b3426b52d1 Update id.js
Replacing undefined text
2024-12-08 00:37:18 +07:00
raf 34ab6dbdff Fix issue #970: [updated undefined values for bahasa translation] 2024-12-07 23:47:58 +07:00
wildanhkm 1d6bc54ae6 update id translations 2024-12-07 23:20:47 +07:00
Arthur 6a2f5f0eee Added sattisfying taskbar icon animation 2024-12-07 16:20:22 +00:00
Arthur 90b7e449b7 Added "Toggling apps to minimize once it clicked" #944 feature 2024-12-07 15:46:01 +00:00
Nariman Jelveh 8ea6ac1b48 Merge pull request #1003 from sumi1239/feature/kr-translations
feat: added a few Korean translatations
2024-12-06 17:52:33 -08:00
William Shiozawa b23e800f4e feat: added a few Korean translatations 2024-12-06 17:36:21 -08:00
jelveh 71bb8ba881 remove "Missing translations" comment from Hebrew i18n file. 2024-12-06 14:09:32 -08:00
KernelDeimos b34b8efea9 clean: remove some unused variables 2024-12-06 17:03:16 -05:00
KernelDeimos cb4bcba7ec clean: cleanup helpers.js 2024-12-06 17:03:16 -05:00
KernelDeimos 7db3be5716 clean: remove unused variables in filesystem 2024-12-06 17:03:16 -05:00
Nariman Jelveh f93a754273 Merge pull request #1002 from Tristramit/Tristramit-patch-1
Update he.js
2024-12-06 14:02:50 -08:00
KernelDeimos c566d48433 clean: fix errors found by find-unused-exports 2024-12-06 15:40:59 -05:00
Amos Weislib 197be1c0bc Update he.js
Few corrections
2024-12-06 21:36:58 +01:00
KernelDeimos 7232406680 clean: remove unused imports from phoenix 2024-12-06 15:28:07 -05:00
jelveh 87f4f3d2dd fix unmatched double quote 2024-12-06 12:23:52 -08:00
KernelDeimos c87db23faa refactor: combine parsely and strataparse into @heyputer/parsers 2024-12-06 15:08:23 -05:00
KernelDeimos 62a010b1b2 doc: clarify the distinction between CoreModule and Core2Module 2024-12-06 13:05:03 -05:00
KernelDeimos 73f738c9d9 doc: add more extensions documentation 2024-12-06 13:05:03 -05:00
KernelDeimos 1679648780 doc: document the test kernel 2024-12-06 13:05:03 -05:00
KernelDeimos 1e0fb1c3c5 doc: document kernel behavior 2024-12-06 13:05:03 -05:00
KernelDeimos 9aeecb650a doc: generate and edit comments for tools 2024-12-06 13:05:03 -05:00
Amos Weislib 299a88103e Update he.js
referencing issue
#974
2024-12-06 19:05:00 +01:00
Nariman Jelveh c6455d53e4 Merge pull request #1001 from HeorhiiPavlovskyi/Issue-961
Issue #961, filled missing translations, Updating ru.js
2024-12-06 09:59:44 -08:00
Nariman Jelveh 0935c56842 Update ru.js 2024-12-06 09:58:01 -08:00
unknown 9d91649ca1 Update ru.js 2024-12-06 19:48:47 +02:00
KernelDeimos 545e7db5bd fix: test issues from contextlink removal
Apparently there were two things:
- had to remove contextlink from the test command (that was expected)
- can't import libs from putility in the test environment. The error
  produced for this doesn't really explain why.
2024-12-06 12:09:23 -05:00
Nariman Jelveh fad2c944ab Merge pull request #999 from JJooaa/finnish-translations
Fixes issue [#976]: Add missing Finnish translations.
2024-12-06 08:59:52 -08:00
Nariman Jelveh 741d8f0bb4 Update fi.js 2024-12-06 08:46:41 -08:00
KernelDeimos 2c24fe5532 doc: document tools directory (README.md) 2024-12-06 11:39:07 -05:00
KernelDeimos d1e8d51173 clean: remove contextlink
Updates references in phoenix shell to use context from putility.
2024-12-06 11:17:14 -05:00
Justin Oeni 540132cc71 Added two files to test hasGitDirectory and showGitWarningDialog 2024-12-06 10:42:44 -05:00
KernelDeimos 72c496df4b clean: remove early typescript trial 2024-12-06 10:38:55 -05:00
JJooaa 6abbf8440b update: add missing finnish translations 2024-12-06 16:55:05 +08:00
Nariman Jelveh 7f37c42219 Merge pull request #997 from bertsrl/patch-1
Update ro.js
2024-12-05 23:53:24 -08:00
Nariman Jelveh 50a2f3d275 Merge pull request #998 from smikayel/improvement/Armenian_localozation
add translation for missing sentancies
2024-12-05 23:46:26 -08:00
Nariman Jelveh e2fbe80cce Merge pull request #995 from kirney23/main
japanese translations
2024-12-05 23:44:41 -08:00
Nariman Jelveh 1e573b654a Merge branch 'main' into main 2024-12-05 23:44:23 -08:00
Nariman Jelveh aa00830168 Merge pull request #996 from hutajoullach/main
Japanese translation issue number 967
2024-12-05 23:40:19 -08:00
smikayel d6e20dcb20 add translation for missing sentancies 2024-12-06 11:39:09 +04:00
Berty 76308479c6 Update ro.js
Updated the romanian translations.

I kept the terms "Professional" and "Business" in English as they are commonly used this way in Romanian in IT services context

I adapted the forms of address to second person singular ("tu") instead of formal ("dumneavoastră") to maintain a friendly and modern tone

I maintained consistency with existing translations in the file
Placeholders (%strong%, %%) were kept in grammatically correct positions for Romanian language
2024-12-06 09:36:50 +02:00
HutaJoullach 0ed5aaed2c japanese-translation-issue-number-967 2024-12-06 16:24:14 +09:00
kirney23 b3ce0e93fb Update ja.js 2024-12-06 11:38:53 +09:00
Nariman Jelveh 984b5d617d Merge pull request #994 from samueldev900/samueldev900_brazillian_translation
feat: add brazillian translations for billing-related terms in br.js
2024-12-05 15:43:32 -08:00
Nariman Jelveh b41e8b09ad Update br.js 2024-12-05 15:40:32 -08:00
Samuel Oliveira fdfc90a931 feat: add brazillian translations for billing-related terms in br.js (revision) 2024-12-05 20:29:37 -03:00
Samuel Oliveira e66df14862 feat: add brazillian translations for billing-related terms in br.js 2024-12-05 20:18:41 -03:00
KernelDeimos e301247bfc dev: add an example module and service 2024-12-05 16:58:15 -05:00
KernelDeimos 82457fbc9f doc: document smol (SmolUtil) lib 2024-12-05 16:16:44 -05:00
KernelDeimos 7de23ce68d move: SmolUtil and ServerHealthService 2024-12-05 16:16:44 -05:00
Nariman Jelveh f9c6f82440 Merge pull request #993 from paulinek13/polish-translation
sync(i18n): add Polish translations for billing-related terms
2024-12-05 12:55:17 -08:00
Paulina Kalicka 15f9aded26 sync(i18n): add Polish translations for billing-related terms 2024-12-05 21:18:20 +01:00
KernelDeimos 09b0d744d5 clean: remove redundant promise.js 2024-12-05 15:08:33 -05:00
KernelDeimos 86a9c959e0 doc: document commonly-used putility libraries 2024-12-05 14:36:34 -05:00
KernelDeimos 58dea19cd9 move strutil and time.js to putility 2024-12-05 14:00:21 -05:00
KernelDeimos e279dc6e5f fix: add missing import 2024-12-05 13:56:08 -05:00
KernelDeimos 7424fd888d doc: update and generate docs 2024-12-05 13:29:10 -05:00
KernelDeimos 3df5f649a4 dev: migrate ExpectationService and PagerService 2024-12-05 13:20:06 -05:00
KernelDeimos a2072c5fac doc: move/clean ErrorService
Some documentation comments were missing or inaccurate so these were
also edited after moving.
2024-12-05 12:10:07 -05:00
KernelDeimos e5a7d1c1bb doc: edit/generate CoreModule2 docs 2024-12-05 12:10:07 -05:00
Nariman Jelveh f1ece26418 Merge pull request #990 from ICODER32/patch-1
Update ur.js
2024-12-05 08:59:03 -08:00
Nariman Jelveh f17a53018b Update ur.js 2024-12-05 08:57:31 -08:00
Nariman Jelveh a6b86c5947 Merge pull request #989 from arthur-adriansens/dutch
Added new Dutch translation
2024-12-05 08:56:16 -08:00
KernelDeimos 036016b20b dev: move/clean AlarmService and related utils 2024-12-05 11:41:41 -05:00
M Ibtisam Anwar d9a08de959 Update ur.js
Updated undefined urdu translations
2024-12-05 21:09:21 +05:00
Arthur f1d9ac5208 changed to single quotes 2024-12-05 16:41:38 +01:00
Arthur 18784b2677 completed Dutch translation #979 2024-12-05 16:33:03 +01:00
KernelDeimos 13a895b76b fix: fake_chat default model and usage errors 2024-12-05 09:34:51 -05:00
KernelDeimos 1e2f9df110 doc: remove comment error 2024-12-05 09:14:30 -05:00
Nariman Jelveh 9ddaab3010 Merge pull request #981 from rowin-C/filetype-association
feat: added tagify in Filetype-Association input in dev center
2024-12-04 18:13:46 -08:00
KernelDeimos a1c2226561 fix: update test kernel 2024-12-04 20:40:42 -05:00
Nariman Jelveh 223802f631 Merge pull request #986 from githubalexliu/translate_zh
Translated to Chinese
2024-12-04 16:53:10 -08:00
Nariman Jelveh 4653273d9a Update zh.js 2024-12-04 16:51:29 -08:00
githubalexliu c1aa637005 Translated to Chinese 2024-12-04 19:26:32 -05:00
jelveh 591cf0f45e tweak for fluid ux 2024-12-04 16:22:06 -08:00
jelveh 12ca609046 invalidate user cache when hitting /get-dev-profile 2024-12-04 15:13:54 -08:00
KernelDeimos 169c1aa3a7 doc: generate puterai docs and is a docgen bug 2024-12-04 16:58:45 -05:00
KernelDeimos 8848055f1b doc: update CONTRIBUTING.md 2024-12-04 16:33:45 -05:00
KernelDeimos 9992252083 doc: add file structure image 2024-12-04 16:32:30 -05:00
KernelDeimos 7eb5e59d94 dev: move some utils, LogService, to new module 2024-12-04 14:45:42 -05:00
KernelDeimos 5c3a65060d dev: include library functions in module docgen 2024-12-04 14:42:22 -05:00
KernelDeimos 5fa0a0263d dev: cleanup docgen and add method logging 2024-12-04 14:42:22 -05:00
KernelDeimos 0b36e72c80 doc: re-comment LogService 2024-12-04 14:42:22 -05:00
KernelDeimos 2453baa234 dev: make a module where utilities will go 2024-12-04 14:42:22 -05:00
Nariman Jelveh 5e7ea5f3b0 Merge pull request #985 from Agastya18/farsi-translation
Translate billing-related strings to Persian in fa.js
2024-12-04 10:20:35 -08:00
Nariman Jelveh a99ee51b00 Update fa.js 2024-12-04 10:19:09 -08:00
agastya gaur e395571256 Translate billing-related strings to Persian in fa.js 2024-12-04 22:32:45 +05:30
KernelDeimos 9e5429b9ab dev: improve module docgen
- fixes some bugs
- adds list of relative requires
2024-12-04 10:43:49 -05:00
jelveh b2dae896e6 expand support for more filestypes 2024-12-04 07:17:06 -08:00
Nariman Jelveh c0257c482f Merge pull request #982 from rowin-C/hindi-translation
tweak: added missing hindi translation
2024-12-04 07:00:23 -08:00
Nariman Jelveh cc7683a7fe Update hi.js 2024-12-04 06:59:59 -08:00
Nariman Jelveh b6e4f518fd Merge pull request #984 from ulaski/add-missing-turkish-translations
Add missing turkish translations
2024-12-04 06:53:04 -08:00
Nariman Jelveh 8cfefebfb6 Update tr.js 2024-12-04 06:52:36 -08:00
Ulas Kilicaslan e2f603d792 Add missing turkish translations 2024-12-04 15:12:25 +03:00
ron 4f82658d94 tweak: added missing hindi translation 2024-12-04 14:26:04 +05:30
ron 0cd1f151b5 feat: added tagify in Filetype-Association input in dev center 2024-12-04 12:35:36 +05:30
Nariman Jelveh 70c2fd6ee5 Merge pull request #980 from LeeMEow23/warning_dialog
Added the warning dialog
2024-12-03 19:17:32 -08:00
jelveh 59ac89db85 handle the return value of skipWarning 2024-12-03 19:10:14 -08:00
jelveh b4938659d1 disable copy/paste from local environment.
It never worked and has ruined the experience with regular copy/paste on Puter
2024-12-03 18:58:22 -08:00
Your Name 5302d3a62e Added the warning dialog
If the system detects any sensitive files, it will pop up the dialog showing the warning and provide the user with options of continuing or not.
2024-12-03 18:08:08 -05:00
jelveh 02e62f1625 wake up babe new i18n keys dropped 2024-12-03 14:18:19 -08:00
KernelDeimos c1bcd84715 chore: update package-lock.json 2024-12-03 17:07:37 -05:00
KernelDeimos 67ab8a1710 doc: first run of module documenter 2024-12-03 17:07:37 -05:00
KernelDeimos ac372204fa dev: move web service utilities 2024-12-03 17:07:37 -05:00
KernelDeimos 1922feab1e dev: add module documentation generator 2024-12-03 17:07:37 -05:00
Nariman Jelveh 46263cc1ad Update #DoesItRunPuter.md 2024-12-03 12:05:19 -08:00
KernelDeimos 10f6e5458e refactor: move WebServerService and socketio to module 2024-12-03 14:19:26 -05:00
KernelDeimos 3887ce05da dev: de-couple legacy mkdir and remove it
A legacy mkdir function was still being used by the
generate_system_fsentries function. However, it wasn't necessary because
we now associate fsentries by uuid, eliminating the requirement to
create the home directory separately from its subdirectories.

The old mkdir function was removed, and generate_system_fsentries was
moved to a new service called UserService, which is intended to
eventually hold all methods related creating, removing, and updating
users.
2024-12-03 13:04:12 -05:00
KernelDeimos 87db20de14 dev: add user.email-changed event 2024-12-03 10:05:24 -05:00
Nariman Jelveh e8d4408dca Revert "File association format (#946)" (#947)
This reverts commit f0d1de7e44.
2024-12-03 06:43:40 -08:00
Sauhbagya Prasad f0d1de7e44 File association format (#946)
* added validation function

* tagify implementation (incomplete)

* tagify implementation (completed)

* feat:implemented Tagify and filetype validation on filetype associaction in dev center

* tweak: removed unnessary tagify from dependency (its streamed from CDN)

* removed unnecessary tagify import
2024-12-03 06:43:16 -08:00
KernelDeimos 614f065e17 tweak: disable 4o-mini and mistral in comment writer 2024-12-02 12:18:46 -05:00
KernelDeimos b40d4534a7 fix: correct AI comment faults
Currently the AI comment writer is trusting the AI to write comment
markers. This means sometimes the syntax of a source file is broken by
comment generation. The instructions in the prompt were pretty clear, so
rather than --fixup'ing the previous commit I'm adding these changes
separately as an interesting case study of how different models behave.

Following this result, I am going to be removing mistral from the
comment writer. It is the most likely to misbehave.

I will also be removing gpt-4o-mini, which sometimes included source
lines despite the "no surrounding text" instruction.
2024-12-02 12:05:13 -05:00
KernelDeimos f75010b355 doc: (skip if using git bisect) ai comments 2024-12-02 11:47:47 -05:00
KernelDeimos 0a1be464d1 tweak: fix "all" option 2024-12-02 11:45:13 -05:00
KernelDeimos aadb261b29 dev: interactive prompt for file limit 2024-12-02 11:09:50 -05:00
KernelDeimos ac44aaf393 doc: make comment writer self-commented 2024-12-02 11:01:23 -05:00
KernelDeimos 7e4ae19aff dev: tweak comment writer to fix some problems 2024-12-02 11:00:50 -05:00
KernelDeimos 857718538b fix: update package-lock.json 2024-12-02 10:26:52 -05:00
KernelDeimos 7a8687cd2c doc: ai generated comments 2024-12-02 10:26:52 -05:00
KernelDeimos 2dfeeeda27 dev: update comment generator 2024-12-02 10:22:58 -05:00
Nariman Jelveh 67ee264239 Merge pull request #945 from MherFrangyan/patch-1
Update hy.js
2024-12-01 22:30:05 -08:00
jelveh 40dccb7741 Update en.js 2024-12-01 22:27:40 -08:00
Mher 1d217e2d59 Update hy.js
added translate
2024-12-02 10:24:09 +04:00
jelveh 6e6bd34463 Update en.js 2024-12-01 22:09:39 -08:00
jelveh 61f54369d7 add more i18n keys for billing 2024-12-01 19:20:25 -08:00
jelveh 9dda9c8dbf add more i18n keys 2024-12-01 19:13:51 -08:00
jelveh 349ae24636 add more keys for billing i18n 2024-12-01 18:51:47 -08:00
jelveh 5ced83195d add more i18n keys for billing 2024-12-01 16:45:53 -08:00
KernelDeimos ab4ba76433 fix: ignore two calls with undefined origin 2024-12-01 19:41:08 -05:00
KernelDeimos 340c7a821f fix: undefined APIOrigin 2024-12-01 19:29:47 -05:00
Nariman Jelveh ae42f6301f Merge pull request #938 from mithunmunsi/fix-issue-871
Fixes issue #871
2024-12-01 14:51:46 -08:00
Nariman Jelveh f0b5765cd7 Merge branch 'main' into fix-issue-871 2024-12-01 14:50:13 -08:00
KernelDeimos 3d2648e4ec chore: update package-lock.json 2024-12-01 15:29:35 -05:00
jelveh e056fafc50 clean up unsed imports 2024-12-01 10:10:30 -08:00
jelveh b874863986 Update signup.js 2024-11-30 23:01:04 -08:00
jelveh 88339c4044 add more billing keys for i18n 2024-11-30 17:40:54 -08:00
Nariman Jelveh a715cec1e6 Merge pull request #943 from enweazudaniel/patch-1
Update ig.js
2024-11-30 13:26:11 -08:00
enweazudaniel f672c28245 Update ig.js 2024-11-30 21:16:36 +01:00
jelveh badc654968 add i18n entries for billing and offerings 2024-11-30 11:13:01 -08:00
jelveh 67ca4ccf20 fix: add id to the setting menu item in user option menu 2024-11-29 19:40:54 -08:00
jelveh e662c782b7 fix: add an id to My Websites content menu item 2024-11-29 19:26:13 -08:00
Nariman Jelveh 73864c93cf Merge pull request #942 from Aliieeee/update-finnish-translations
Review Undefined Words and Correct it
2024-11-29 15:49:25 -08:00
Ali Hassan e9ba0833da Review Undefined Words and Correct it 2024-11-30 00:34:06 +02:00
jelveh 9b74a2e177 Update it.js 2024-11-29 14:22:56 -08:00
Nariman Jelveh 0223429e3b Merge pull request #940 from mkalevo/finnish-translation-#871
#871 added missing Finnish translations in fi.js
2024-11-29 13:48:11 -08:00
Nariman Jelveh c97d64da91 Update fi.js 2024-11-29 13:47:10 -08:00
Nariman Jelveh 489eba0423 Merge pull request #939 from danielpetrica/patch-1
Update it.js
2024-11-29 13:44:30 -08:00
Nariman Jelveh 5d5b20f40a Merge branch 'main' into patch-1 2024-11-29 13:44:01 -08:00
Nariman Jelveh ac21708c46 Merge pull request #937 from puyab91/italian_translation
PR_836_italian translation
2024-11-29 13:41:07 -08:00
Daniel, Petrica Andrei-Daniel 8c0c31cd09 Update it.js 2024-11-29 22:35:38 +01:00
mkalevo 60e87bdf92 #871 added missing Finnish translations in fi.js 2024-11-29 20:44:56 +00:00
Daniel, Petrica Andrei-Daniel cb70bb2b62 Update it.js 2024-11-29 21:28:56 +01:00
Mithun Munsi 57bdd39d7a Fixes issue #871 2024-11-29 22:25:06 +02:00
KernelDeimos 9f726b3e75 dev: add ai comment generator 2024-11-29 15:22:24 -05:00
puya.bahrani f2243859cf italian translation 2024-11-29 21:12:17 +01:00
Nariman Jelveh c3a042371c Merge pull request #936 from HeyPuter/revert-935-update-italian-translations
Revert "Update Italian translations"
2024-11-29 10:29:55 -08:00
Nariman Jelveh 4ac33675a3 Revert "Update Italian translations" 2024-11-29 10:29:46 -08:00
Nariman Jelveh f4e05440ae Merge pull request #935 from RidvanPlluzhina/update-italian-translations
Update Italian translations
2024-11-29 10:28:52 -08:00
RidvanPlluzhina d2bab8c7e8 Update Italian translations 2024-11-29 19:26:17 +01:00
Nariman Jelveh 1cfb3f5a75 Merge pull request #934 from ria147/ria147/update-dev-center
Enable Save button in Dev Center only when settings change and add a Reset button
2024-11-29 07:27:10 -08:00
jelveh 9ba0f2410c set correct base64 value for icon and socialImage 2024-11-29 07:16:59 -08:00
jelveh 92cd65261e also track icon and socialImage 2024-11-29 06:53:29 -08:00
ria147 3f1804eb2a dev: enable/disable reset button iff changes are made 2024-11-29 01:03:53 -05:00
ria147 e5788b6e47 dev: add functionality to reset edit button 2024-11-29 00:58:09 -05:00
ria147 55ffd801e0 feat: add reset edit changes button to dev-center 2024-11-29 00:47:40 -05:00
ria147 63a0053da8 feat: enable/disable save button in dev-center iff changes made 2024-11-29 00:30:57 -05:00
Nariman Jelveh 42378ecc4c Merge pull request #932 from kingflamez/polish-translation
Added missing Polish translation
2024-11-28 01:30:15 -08:00
kingflamez 09665a8d7b added missing polish translation 2024-11-28 08:16:34 +01:00
kingflamez bd35710548 added missing polish translation 2024-11-28 08:15:32 +01:00
jelveh 6bef127c24 Update de.js 2024-11-27 19:13:55 -08:00
Nariman Jelveh 061341db19 Merge pull request #929 from ahamiltonnn/German-translation
Added German translation
2024-11-27 19:12:09 -08:00
Austin Hamilton 80f3ffa5fa Added missing placeholders 2024-11-27 20:08:31 -07:00
jelveh c30f06b0f2 Update he.js 2024-11-27 19:08:05 -08:00
Nariman Jelveh 210e08b678 Merge pull request #930 from AmitMaymon/patch-1
Update he.js
2024-11-27 19:06:23 -08:00
AmitMaymon 8d846d3c37 Update he.js
Translated the unfinished hebrew translation
2024-11-28 05:01:16 +02:00
Austin Hamilton 73d7152652 Added german translation 2024-11-27 20:01:00 -07:00
jelveh 8dec78b090 fix: remove unnecessary integrity and crossorigin attributes in dev center when linking to jquery 2024-11-27 17:56:45 -08:00
KernelDeimos c5cd8cc219 dev: register PermissionUtil 2024-11-27 16:29:57 -05:00
KernelDeimos d014814c36 dev: allow services to register usage info 2024-11-27 16:19:50 -05:00
jelveh f94631949f tweak: return created timestamp of apps in query 2024-11-27 13:16:02 -08:00
KernelDeimos d2c1878ed4 dev: add usage check hook for ai services 2024-11-27 16:09:04 -05:00
Nariman Jelveh 237dc94377 Merge pull request #928 from Nathaniyell/main
Update Igbo translation of words #864
2024-11-27 11:41:56 -08:00
Nariman Jelveh 7c41396a62 Update ig.js 2024-11-27 11:40:21 -08:00
Nathaniyell 589ca4771e update ig.js 2024-11-27 20:31:22 +01:00
Nathaniyell 5ac5b8bd48 git add update translation of words 2024-11-27 20:27:26 +01:00
KernelDeimos 9ddc84e6cf dev: record token-based usages 2024-11-27 13:53:33 -05:00
Nariman Jelveh e96bae5b7d Merge pull request #927 from keimindev/feature/add-Korean
Issues #861-Add missing Korean translations
2024-11-27 06:19:52 -08:00
Nariman Jelveh f60834f043 Merge branch 'main' into feature/add-Korean 2024-11-27 06:19:29 -08:00
Nariman Jelveh a6e31ee7f5 Merge pull request #925 from Fumnanya92/Fumnanya92-update-igbo-translations
Update ig.js
2024-11-27 05:57:35 -08:00
Nariman Jelveh 1c4a66da44 Update ig.js 2024-11-27 05:53:36 -08:00
Nariman Jelveh 9397004b86 Merge pull request #926 from hpark75/korean-000861-ko-js-missing
KOREAN-000861: Missing translations done
2024-11-27 05:43:35 -08:00
Nariman Jelveh d7f31e91e1 Merge branch 'main' into korean-000861-ko-js-missing 2024-11-27 05:43:25 -08:00
Nariman Jelveh e9888c12ac Merge pull request #922 from anapimolodec/861-korean
added Korean translations
2024-11-27 05:40:43 -08:00
Nariman Jelveh 27f65e54c8 Update ko.js 2024-11-27 05:40:07 -08:00
keimindev 55e9fabf35 Add missing Korean translations 2024-11-27 19:05:58 +09:00
Hee b8e358b658 KOREAN-000861: Missing translations done 2024-11-27 06:58:16 -03:00
Fumnanya92 da3251d2cc Update ig.js
Complete missing Igbo translations in src/gui/src/i18n/translations/ig.js

- Translated all missing keys in the Igbo localization file.
- Ensured cultural appropriateness and accurate representation of English text.
- Carefully handled placeholders like %strong% for proper placement within the translated text.
2024-11-27 09:15:56 +01:00
Nariman Jelveh 6204ddd5c6 Merge pull request #924 from denisugiarto/update-id-translation
update id.js
2024-11-26 20:54:53 -08:00
Nariman Jelveh bc95875f2d Merge pull request #923 from monyxie/zh-translations
Update zh translations
2024-11-26 20:50:54 -08:00
deni sugiarto 0592d2709e update id.js 2024-11-27 11:18:52 +07:00
Aiaru 71e7a12b35 added translations 2024-11-27 13:00:19 +09:00
Max Xie 77eb1c0a3d Update zh translations 2024-11-27 11:54:06 +08:00
Nariman Jelveh 6d6e3e67ab Merge pull request #921 from junian/patch-1
Update id.js #865
2024-11-26 19:15:42 -08:00
Nariman Jelveh a4217ae169 Update id.js 2024-11-26 19:14:30 -08:00
Junian Triajianto 2f6d7323ca Update id.js 2024-11-27 10:08:28 +07:00
Junian Triajianto 2238b933a7 Update id.js #865 2024-11-27 10:04:10 +07:00
KernelDeimos 811732cb56 dev: switch xai to openai client, get streaming counts 2024-11-26 16:45:33 -05:00
KernelDeimos 0d90b588aa dev: get streaming token counts on everything (except xAI) 2024-11-26 16:45:33 -05:00
KernelDeimos 2dd9417234 dev: get token counts on all services 2024-11-26 16:45:33 -05:00
jelveh f3d270ccbc fix: remove inactive links in README 2024-11-26 13:39:42 -08:00
Nariman Jelveh bcf36491b4 Merge pull request #920 from gng92/patch-2
Update hy.js
2024-11-26 11:23:13 -08:00
Nariman Jelveh e4f2066bb4 Update hy.js 2024-11-26 11:22:52 -08:00
gng92 63660b004d Update hy.js
Missing translations added
2024-11-26 23:19:04 +04:00
Nariman Jelveh ecedba4120 Merge pull request #919 from Rebandradha/main
"Complete Kurdish Translation for ku.js"Completed missing Kurdish translations in ku.js
2024-11-26 10:22:26 -08:00
jelveh 4686e210c3 Update ku.js 2024-11-26 10:21:23 -08:00
KernelDeimos fe1a4cfd4d fix: improve backend mod error handling 2024-11-26 13:20:44 -05:00
Nariman Jelveh 885a58c97d Update ku.js 2024-11-26 10:19:13 -08:00
Nariman Jelveh f27c824682 Merge pull request #918 from HeyPuter/revert-917-main
Revert "Improve your word choice to make it easier for Indonesians to underst…"
2024-11-26 09:40:34 -08:00
Nariman Jelveh 2884fe7183 Revert "Improve your word choice to make it easier for Indonesians to underst…" 2024-11-26 09:40:02 -08:00
Nariman Jelveh 1c145119f0 Merge pull request #917 from rhecustein/main
Improve your word choice to make it easier for Indonesians to underst…
2024-11-26 09:39:55 -08:00
Bintang Wijaya d0642d7806 Merge branch 'main' into main 2024-11-27 00:04:12 +07:00
rebandradha 14cc4904bd Completed missing Kurdish translations in ku.js 2024-11-26 20:04:06 +03:00
jelveh 63450ccd49 Update id.js 2024-11-26 08:58:35 -08:00
Nariman Jelveh e424e905aa Merge pull request #916 from DigitalGenius-ui/update-transulation
new transulations are added
2024-11-26 08:56:24 -08:00
rhecustein ab1bceab06 Improve your word choice to make it easier for Indonesians to understand. 2024-11-26 23:37:58 +07:00
KernelDeimos b25d55e596 dev: configurable extension dirs 2024-11-26 11:10:28 -05:00
DigitalGenius-ui b3f5a7b846 new transulations are added 2024-11-26 23:54:51 +08:00
Nariman Jelveh a54f51db90 Merge pull request #915 from bestlucky123/fix_issue_862
Fix: Japanese Translation for i18n (Issue 862)
2024-11-26 06:19:07 -08:00
Nariman Jelveh 0cf9304683 Update ja.js 2024-11-26 06:18:44 -08:00
bestlucky123 fceaf714c3 Fix: Japanese Translation for i18n 2024-11-26 18:35:29 +09:00
KernelDeimos 871416f461 dev: migrate openai to new controller (last one) 2024-11-25 15:54:11 -05:00
KernelDeimos 3f4efb9948 dev: implement ai model fallback 2024-11-25 14:58:21 -05:00
KernelDeimos 0d86233b45 dev: migrate together-ai to new controller 2024-11-25 12:10:22 -05:00
KernelDeimos 5746c7156a dev: migrate Mistral to new controller 2024-11-25 12:10:22 -05:00
KernelDeimos e6928cf6c7 sync: add llama-3.1-70b-specdec 2024-11-25 12:10:22 -05:00
KernelDeimos 4015c531f5 dev: migrate Groq to new controller 2024-11-25 12:10:22 -05:00
KernelDeimos 2c3eb93d22 sync: model info 2024-11-25 12:10:22 -05:00
Nariman Jelveh 0b4adb6bc1 Merge pull request #914 from JessicaFredin/update-swedish-translations
Update Swedish translations in sv.js
2024-11-25 08:29:28 -08:00
Nariman Jelveh ecd6c4e781 Update sv.js 2024-11-25 08:27:02 -08:00
Nariman Jelveh c86b1175b3 Merge pull request #912 from BertramYe/BertramYe-patch-add-Chinese-(中文)-translation-of-Puter
Update zh.js
2024-11-25 08:14:03 -08:00
Nariman Jelveh d65828930a Merge branch 'main' into BertramYe-patch-add-Chinese-(中文)-translation-of-Puter 2024-11-25 08:13:49 -08:00
Nariman Jelveh 91b4ca77cb Merge pull request #913 from SoarUI/main
update issues/#845
2024-11-25 08:11:54 -08:00
Nariman Jelveh 0273192105 Update zh.js 2024-11-25 08:11:34 -08:00
JessicaFredin b734ed75b6 Update Swedish translations in sv.js 2024-11-25 17:10:09 +01:00
BertramYe 76faf79f5a Update zh.js
fix the issue of `Complete the Chinese (中文) translation of Puter #845`
2024-11-25 23:57:03 +08:00
Nariman Jelveh b51618d5aa Merge pull request #911 from mardax007/main
Updated nl.js with missing translations
2024-11-25 07:39:59 -08:00
Mardax d590f53c46 Update nl.js 2024-11-25 15:39:21 +00:00
jelveh e0a577f5a5 Update nl.js 2024-11-25 07:35:50 -08:00
soarui 957513737d update issues/#845 2024-11-25 10:35:31 -05:00
Mardax 638c805a95 Update nl.js 2024-11-25 15:32:08 +00:00
Nariman Jelveh 0c6e8ca4ed Merge pull request #910 from monish-j/fix-hindi-translations
Fix missing Hindi translations in hi.js
2024-11-25 06:57:51 -08:00
jelveh b73a3bbfd8 Update hi.js 2024-11-25 06:57:22 -08:00
Monish Jaiswal 5ec3bbcf24 Fix missing Hindi translations in hi.js 2024-11-25 14:07:19 +05:30
jelveh 9a0edc80e4 tweak: decrease the opacity of the overlay for showSpinner 2024-11-24 21:09:45 -08:00
jelveh 8817a25b65 Update UIWindowQR.js 2024-11-24 15:51:36 -08:00
KernelDeimos 7fa11a4ca0 dev: apply openai moderation to claude and xai 2024-11-24 18:14:50 -05:00
KernelDeimos ef7047ede4 dev: allow extensions to audit prompts 2024-11-24 18:14:50 -05:00
KernelDeimos df42d433c9 ops: don't allow no origin 2024-11-24 18:14:50 -05:00
Nariman Jelveh 39c7df9bb5 Merge pull request #909 from Zac0511/patch-3
Update fr.js
2024-11-24 15:06:00 -08:00
jelveh 66016b9db6 feat: record signup metadata for abuse prevention 2024-11-24 13:00:43 -08:00
KernelDeimos e0df5429ce dev: add validator middleware 2024-11-24 14:27:37 -05:00
KernelDeimos 78da140cd6 dev: add server id 2024-11-24 13:37:13 -05:00
KernelDeimos 86bf08ccc0 dev: add metadata column 2024-11-24 13:34:54 -05:00
Zac0511 6b90c3f44d Update fr.js 2024-11-24 09:23:54 +01:00
Nariman Jelveh 4ed0af7921 Merge pull request #908 from AmirH-Sal/patch-1
Update fa.js
2024-11-23 21:07:18 -08:00
jelveh ff0cbef37b Update fa.js 2024-11-23 21:05:49 -08:00
AmirH-Sal 3b3d8cb316 Update fa.js 2024-11-23 20:56:45 -08:00
jelveh 3cedd17b8e fix: app query should return app metadata 2024-11-23 19:08:40 -08:00
jelveh f77f05062f tweak: improve minor ux for dev center 2024-11-23 14:50:02 -08:00
jelveh 7cf215ab67 feat: add support for categories in the Dev Center 2024-11-23 14:35:46 -08:00
jelveh 10b2ae6542 style: improve the flow and code of the Save Account flow 2024-11-23 14:14:30 -08:00
jelveh fc5aca1f72 feat: puter.js's showSpinner() will keep the spinner active for at least 1200ms 2024-11-23 13:23:20 -08:00
jelveh 966d98e469 tweak: showWorking -> showSpinner 2024-11-23 13:04:53 -08:00
jelveh 0980f7c585 tweak: trim description in the output html for homepage 2024-11-23 11:03:54 -08:00
jelveh b6a9d957aa tweak: clean up some dead imports 2024-11-23 10:44:45 -08:00
jelveh 5ec2d8f6ba Merge branch 'main' of https://github.com/heyputer/puter 2024-11-23 08:48:34 -08:00
jelveh a2c7b379f8 fix: safe parsing of app metadata 2024-11-23 08:48:14 -08:00
Nariman Jelveh 06996d238b Merge pull request #907 from rsdribeiroIT/portuguese_language
Update pt.js
2024-11-23 08:32:57 -08:00
jelveh d35308fd04 Update pt.js 2024-11-23 08:25:59 -08:00
[email protected] f5fc234dbb Update pt.js 2024-11-23 16:17:35 +00:00
Nariman Jelveh 2e6f10bee9 Merge pull request #905 from yeldynov/main
update ru.js
2024-11-23 07:14:21 -08:00
jelveh 2adf836f8a Update ru.js 2024-11-23 07:09:56 -08:00
Nariman Jelveh b7ceacfb8d Merge pull request #906 from PeterZsigmond/complete-hungarian-translation
Complete the Hungarian (Magyar) translation of Puter (Issue #867)
2024-11-23 06:39:33 -08:00
Peter Zsigmond b84c6a04a7 Add missing Hungarian translations in hu.js 2024-11-23 12:39:46 +01:00
Nikita Yeldynov 5de3fe8b46 update ru.js 2024-11-23 11:02:05 +02:00
jelveh be36d31509 feat: allow developers to set social media images for their apps 2024-11-22 17:59:00 -08:00
KernelDeimos 791c6f11f4 dev: max tokens for claude 2024-11-22 17:42:01 -05:00
KernelDeimos 3ed1453939 tool: token count testing 2024-11-22 17:21:48 -05:00
Nariman Jelveh 4b5a3128f3 Merge pull request #904 from saltimbanc/main
Update ro.js
2024-11-22 14:05:46 -08:00
Titus 53e00bec4f Update ro.js 2024-11-22 23:50:30 +02:00
KernelDeimos aa3dcea462 refactor: central controller for all LLM services
Adds AIChatService, an implementor of puter-chat-completion which can
delegate to other implementors (implementors that have registered with
AIChatService at initialization) based on details of the request.

Makes AIChatService the test implementation. AIChatService then
delegates to FakeChatService when in test mode.

Adds `models()` method to puter-chat-completion. This method, instead of
returning only the names of supported models, includes other details
such as the cost and maximum output size.

Implements `models()` on Claude and XAI.

Registers Claude and XAI with AIChatService.
2024-11-22 15:52:37 -05:00
KernelDeimos 791f7748c7 fix: configuration for browser launch
Makes browser launch on startup configurable. Also, by default, users of
Arch Linux will not be subjected to this behavior (they won't like it).
2024-11-22 13:58:33 -05:00
KernelDeimos 960a9ec9ee dev: set claude back 2024-11-22 11:28:44 -05:00
Nariman Jelveh d77c5f40b2 Merge pull request #903 from Kumara2mahe/missing-translation-issue851-mahendra
Add missing tamil translations; issue #851
2024-11-22 08:07:18 -08:00
Nariman Jelveh 35e4089a6f Update ta.js 2024-11-22 08:02:43 -08:00
Kumara2mahe ae9317a9ed Add missing tamil translations 2024-11-22 21:20:50 +05:30
KernelDeimos ee7bedd558 fix: previous fix 2024-11-22 10:37:00 -05:00
KernelDeimos 56710e17f3 fix: always adapt model for ClaudeEnough 2024-11-22 10:34:21 -05:00
KernelDeimos 1e15696096 Eh, Claude enough...
Replaces Claude with Grok pretending to be Claude. This is in lieu of a
proper fallback system which will be implemented later.

Grok will always say it's pretending to be Claude rather than
identifying itself as Claude.
2024-11-22 10:13:49 -05:00
jelveh f500fb4706 fix: automatically open browser when starting only if in dev env 2024-11-22 07:11:05 -08:00
jelveh 70096a8d6f fix(deps): update multiple dependencies 2024-11-22 06:35:22 -08:00
KernelDeimos f533dca1a6 fix: image generation supports test mode 2024-11-22 09:22:24 -05:00
jelveh 2d4312972a feat: automatically open the browser when starting Puter 2024-11-21 22:51:43 -08:00
jelveh 1062363096 feat: spinner for the showWorking() overlay in puter.js 2024-11-21 19:41:39 -08:00
Nariman Jelveh 1811545818 Merge pull request #902 from DavidReque/feat/loading-overlay
Improved Work Overlay Behavior
2024-11-21 19:28:42 -08:00
David Requeno 0385a2b32d tweak: enhance working overlay behavior 2024-11-21 21:14:13 -06:00
Nariman Jelveh 93d7340cc0 Merge pull request #898 from kemal-akar/main
Turkish translations completed and missing parts fixed (Issue #849)
2024-11-21 16:07:20 -08:00
jelveh d36e63c519 Update tr.js 2024-11-21 16:06:55 -08:00
Nariman Jelveh 21c99a90eb Merge pull request #900 from HeyPuter/revert-715-main
Revert "Added installation instructions for public hosting to readme"
2024-11-21 16:02:42 -08:00
Nariman Jelveh 971aa4cd0a Revert "Added installation instructions for public hosting to readme" 2024-11-21 16:02:27 -08:00
Nariman Jelveh 3f34301fc5 Merge pull request #715 from decipher2k/main
Added installation instructions for public hosting to readme
2024-11-21 16:02:08 -08:00
Nariman Jelveh 90c3acdef5 Merge pull request #899 from pashak1207/main
Fix: Resolved issue #848 - Ukrainian translation
2024-11-21 15:26:11 -08:00
pashak1207 ee705e5c1c Fix: Resolved issue #848 - Ukrainian translation 2024-11-21 23:39:51 +02:00
Kemal Akar 325483c2ac Turkish translations completed and missing parts fixed (Issue #849) 2024-11-22 00:26:57 +03:00
KernelDeimos 7f30ec46e7 test: add more thumbnailer tests 2024-11-21 15:45:37 -05:00
Nariman Jelveh 41e28badcd Merge pull request #897 from mark10112/thai-translation
Update th.js
2024-11-21 12:08:41 -08:00
jelveh 73c66bebf7 Update th.js 2024-11-21 12:08:31 -08:00
DESKTOP-Q7DI747\User 7e888248d1 thai missing translations 2024-11-22 02:32:42 +07:00
KernelDeimos 03817cd5c7 dev: thumbnail tests and readings 2024-11-21 14:09:56 -05:00
Nariman Jelveh 415d39e86d Merge pull request #896 from afaq-karim/translation/urdu-847
feat(i18n): update Urdu localization with missing translations
2024-11-21 10:48:53 -08:00
jelveh c140cd158b Update ur.js 2024-11-21 10:48:37 -08:00
afaq-karim 0c4b994644 feat(i18n): update Urdu localization with missing translations 2024-11-21 23:42:18 +05:00
KernelDeimos 1363de7cbf text: add test for privacy_aware_path 2024-11-21 12:06:02 -05:00
KernelDeimos d30d62f558 fix: share issue with prefix usernames 2024-11-21 11:40:08 -05:00
KernelDeimos d93fd419e4 dev: add human_readable_age to /whoami 2024-11-21 11:03:40 -05:00
Nariman Jelveh 14f52bcd1f Merge pull request #892 from nlaburu/i18n_gui_french
fix french missing translations
2024-11-21 05:51:49 -08:00
jelveh 4ce0670370 Update fr.js 2024-11-21 05:51:35 -08:00
Noah 6992ce06cb Merge branch 'HeyPuter:main' into i18n_gui_french 2024-11-21 11:05:36 +01:00
nlaburu a998e4b4cc fix missing placeholders in fr.js 2024-11-21 11:04:58 +01:00
Nariman Jelveh dd11cc0256 Merge pull request #895 from kiwipix/patch-3
Update zhtw.js
2024-11-20 20:07:13 -08:00
jelveh 46053f3e7c Update zhtw.js 2024-11-20 20:04:00 -08:00
kiwipix 2f15d129b6 Update zhtw.js
add translation for missing items
2024-11-21 11:53:08 +08:00
Nariman Jelveh cf8bf308a7 Merge pull request #894 from tien0412/patch-1
finish translation for vi.js
2024-11-20 19:49:40 -08:00
Nariman Jelveh 4d0d8e125b Update vi.js 2024-11-20 19:49:26 -08:00
tien0412 12cc753903 finish translation for vi.js 2024-11-21 10:29:42 +07:00
KernelDeimos 16257a7b54 fix: permission grants in open_item 2024-11-20 21:00:03 -05:00
nlaburu 99cd9b2315 fix french missing translations 2024-11-21 00:48:36 +01:00
jelveh bfacfc2a4e fix: sharing notification click opening directories 2024-11-20 15:44:17 -08:00
Nariman Jelveh 505865f3bf Merge pull request #891 from LuizGribner/feature/br-translation
Translate completed to Portuguese-BR
2024-11-20 15:25:19 -08:00
Nariman Jelveh ca2f7b4326 Update br.js 2024-11-20 15:23:19 -08:00
jelveh 035de8e73e Update UIDesktop.js 2024-11-20 15:21:05 -08:00
Luiz Gribner f5247c9dfe Translate completed to Portuguese-BR 2024-11-20 19:55:38 -03:00
KernelDeimos 5e463e1db8 dev: validate metadata 2024-11-20 17:17:23 -05:00
KernelDeimos e6986d5216 dev: add share metadata and messages 2024-11-20 17:01:32 -05:00
Nariman Jelveh 9dff04f8d5 Merge pull request #890 from HeyPuter/revert-886-motabbir
Revert "Added missing translations for Bengali localization (#842)"
2024-11-20 12:55:42 -08:00
Nariman Jelveh 63d4a604fa Revert "Added missing translations for Bengali localization (#842)" 2024-11-20 12:53:02 -08:00
Nariman Jelveh 1b98f0486f Merge pull request #886 from motabbirhossain/motabbir
Added missing translations for Bengali localization (#842)
2024-11-20 12:52:54 -08:00
Nariman Jelveh 546a268ed9 Merge branch 'main' into motabbir 2024-11-20 12:52:44 -08:00
KernelDeimos c7419d18df dev: add /acl/set-user-user 2024-11-20 15:36:00 -05:00
KernelDeimos 70d8e837af dev: prevent sharing a file to the same user twice 2024-11-20 15:23:46 -05:00
KernelDeimos 4396630453 dev: add /acl/stat-user-user
This new endpoint shows permissions granted by the current user to the
specified user in the scope of a specified filesystem node, including
permissions on the affecting parent nodes.

This is related to two future tasks:
- prevent users from sharing a file with the same user twice
- add an endpoint to modify the access mode of a shared file
2024-11-20 14:57:20 -05:00
Nariman Jelveh ea4cde82fc Merge pull request #889 from Barkatzx/update-bn.js
issue #842
2024-11-20 11:37:43 -08:00
Nariman Jelveh b76ab955b1 Merge branch 'main' into update-bn.js 2024-11-20 11:37:35 -08:00
Nariman Jelveh cedde40cd4 Merge pull request #887 from kazi331/patch-2
Update bn.js
2024-11-20 11:27:38 -08:00
jelveh d0bf94c5d0 Update bn.js 2024-11-20 11:18:59 -08:00
Nariman Jelveh 3bb4de4f90 Merge pull request #888 from NadaAly56/fix-arabic-translation
fixixng arabic translation
2024-11-20 10:27:15 -08:00
jelveh ac4cc95be5 Update ar.js 2024-11-20 10:26:21 -08:00
Nariman Jelveh 0abddf5fea Merge branch 'main' into patch-2 2024-11-20 10:24:44 -08:00
Barkatzx b0046ceb26 issue #842 2024-11-21 00:23:25 +06:00
Nariman Jelveh dc5f699ec6 Merge pull request #885 from FahimFBA/issue-842
Filled the missing Bengali translation and updated the old translation
2024-11-20 10:15:47 -08:00
jelveh be566cb7c1 Update bn.js 2024-11-20 10:15:30 -08:00
nada f0012fdf87 fixixng arabic translation 2024-11-20 19:30:26 +02:00
KernelDeimos d911754e2b dev: fix test_mode flag 2024-11-20 12:03:39 -05:00
Kazi Shariful Islam 4ca1bddbd1 Update bn.js
updated with manual translation
2024-11-20 22:57:27 +06:00
motabbirhossain d43e79243a Added missing translations for Bengali localization (#842) 2024-11-20 22:46:17 +06:00
FahimFBA 0d1e676ce1 update translation: login2fa_otp_instructions 2024-11-20 22:22:53 +06:00
FahimFBA 98e2331a56 update translation: setup2fa_4_instructions 2024-11-20 22:22:33 +06:00
FahimFBA af7be2c917 update translation: setup2fa_3_step_heading 2024-11-20 22:21:59 +06:00
FahimFBA f85adbe7ec update translation: setup2fa_1_instructions 2024-11-20 22:21:46 +06:00
FahimFBA 43a2afc843 update translation: undo 2024-11-20 22:20:49 +06:00
FahimFBA d2eae20223 update translation:two_factor_enabled 2024-11-20 22:20:26 +06:00
FahimFBA 16e6307bca update translation: two_factor_disabled 2024-11-20 22:20:11 +06:00
FahimFBA 9fd977761c update translation: skip 2024-11-20 22:19:15 +06:00
FahimFBA fdd0c67b1d update translation: reset_colors 2024-11-20 22:18:28 +06:00
FahimFBA 7a8da04634 update translation: replace_all 2024-11-20 22:17:50 +06:00
FahimFBA b89a5ad523 update translation: refer_friends_social_media_c2a 2024-11-20 22:17:27 +06:00
FahimFBA eb19ec0c48 update translation: refer_friends_c2a 2024-11-20 22:17:11 +06:00
FahimFBA 26250800de update translation: personalization 2024-11-20 22:16:08 +06:00
FahimFBA fd7e762850 update translation: passwords_do_not_match 2024-11-20 22:15:51 +06:00
FahimFBA 47717f1d41 update translation: password_reset_sent 2024-11-20 22:15:33 +06:00
FahimFBA 90a2a44c45 update translation: password_requirements 2024-11-20 22:15:10 +06:00
FahimFBA 90fa5f184c update translation: password_recovery_rate_limit 2024-11-20 22:14:45 +06:00
FahimFBA 38fec34d56 update translation: open_with 2024-11-20 22:14:12 +06:00
FahimFBA af2e1687ca update translation: open_in_new_window 2024-11-20 22:13:57 +06:00
FahimFBA 88efa1c89c update translation: lightness 2024-11-20 22:13:11 +06:00
FahimFBA c6a734896d update translation: items_in_trash_cannot_be_renamed 2024-11-20 22:12:43 +06:00
FahimFBA f6a4a7864a update translation: hide_all_windows 2024-11-20 22:12:23 +06:00
FahimFBA b8adacabc1 update translation: force_quit 2024-11-20 22:11:44 +06:00
FahimFBA 9314b949ff update translation: feedback_sent_confirmation 2024-11-20 22:11:04 +06:00
FahimFBA 9e918042b1 update translation: email_invalid 2024-11-20 22:09:31 +06:00
FahimFBA faf5a48ee1 update translation: email_change_confirmation_sent 2024-11-20 22:09:11 +06:00
FahimFBA 67cc5b03ad update translation: dont_allow 2024-11-20 22:08:45 +06:00
FahimFBA 3bbacdeaea update translation: disable_2fa_instructions 2024-11-20 22:08:21 +06:00
FahimFBA 451b23eb4c update translation: disable_2fa_confirm 2024-11-20 22:08:06 +06:00
FahimFBA a7f032a325 update translation: disable_2fa 2024-11-20 22:07:52 +06:00
FahimFBA b267547ea7 update translation: deploy_as_app 2024-11-20 22:07:23 +06:00
FahimFBA c2da4527b7 update translation: date_modified 2024-11-20 22:06:59 +06:00
FahimFBA 6bef43468a update translation: close_all 2024-11-20 22:06:34 +06:00
FahimFBA 20c49b6a05 update translation: clock_visible_auto 2024-11-20 22:06:14 +06:00
FahimFBA 127a241b84 update translation: confirm_delete_user 2024-11-20 22:05:30 +06:00
FahimFBA 4555a21fa1 update translation: confirm_code_2fa_instruction 2024-11-20 22:04:54 +06:00
FahimFBA e5229f4c7e update translation: confirm_code_2fa_instruction 2024-11-20 22:04:32 +06:00
FahimFBA 3114eb2dd5 update translation: confirming too many request
confirm_code_generic_too_many_requests
2024-11-20 22:04:12 +06:00
FahimFBA 3c07c30933 update translation: confirmation for referral
confirm_account_for_free_referral_storage_c2a
2024-11-20 22:03:17 +06:00
FahimFBA 41ec3a9698 update translation: confirm_2fa_recovery 2024-11-20 22:02:34 +06:00
FahimFBA 3c31791fe6 update translation: confirm 2024-11-20 22:01:58 +06:00
FahimFBA d9d5c09f15 update translation: confirm 2024-11-20 22:01:14 +06:00
FahimFBA c6a01e3060 update translation: change_always_open_with 2024-11-20 22:00:05 +06:00
FahimFBA 0d75306379 update translation: close_all_windows_and_log_out 2024-11-20 21:58:59 +06:00
FahimFBA ea1d46e27d update translation: change_ui_colors 2024-11-20 21:57:59 +06:00
FahimFBA 8ade96a54d update translation: change_email 2024-11-20 21:57:42 +06:00
FahimFBA 7b15d804df update translation: change_desktop_background 2024-11-20 21:57:22 +06:00
FahimFBA ede6ed4a0c add translation: This user already has access to this item 2024-11-20 21:54:25 +06:00
FahimFBA b76d2922c3 add translation: You can't share with yourself. 2024-11-20 21:53:25 +06:00
FahimFBA 3bd07dfabd add translation: Owner 2024-11-20 21:52:59 +06:00
FahimFBA 712852b3aa add translation: Share With… 2024-11-20 21:52:39 +06:00
FahimFBA e43e646f54 add translation: People with access 2024-11-20 21:52:20 +06:00
FahimFBA efbe0e0f7e add translation: Viewer 2024-11-20 21:51:48 +06:00
FahimFBA 6ac6870b9a add translation: Editor 2024-11-20 21:51:29 +06:00
FahimFBA f468c172f4 add translation: zipping 2024-11-20 21:51:10 +06:00
FahimFBA 84a68a3688 add translation: sequencing 2024-11-20 21:50:42 +06:00
FahimFBA f9b2a81d00 add translation: unzipping 2024-11-20 21:49:45 +06:00
FahimFBA 27da49dcd3 add translation: writing 2024-11-20 21:49:21 +06:00
FahimFBA be7d651f7f add translation: reading 2024-11-20 21:48:59 +06:00
FahimFBA a820721f74 add translation: password_strength_error 2024-11-20 21:47:09 +06:00
FahimFBA da2dee842a add translation: password_required 2024-11-20 21:45:49 +06:00
FahimFBA ae20fd5afa add translation: password_recovery_unknown_error 2024-11-20 21:45:19 +06:00
FahimFBA 86a54b9415 add translation: password_recovery_token_invalid 2024-11-20 21:43:36 +06:00
FahimFBA 1fa0bebfd5 update translation for: Clock Visibility 2024-11-20 21:42:44 +06:00
FahimFBA e3782f7b42 add translation for: clock_visibility 2024-11-20 21:41:41 +06:00
FahimFBA 2d522537ee add translation for: change 2024-11-20 21:41:07 +06:00
Nariman Jelveh 5ab87979bc Merge pull request #882 from Abhinav-Bansal751/main
Update es.js
2024-11-19 21:45:34 -08:00
jelveh 2c86240399 fix: add placeholders 2024-11-19 21:42:29 -08:00
Bansal b2afeb162a Update es.js 2024-11-20 11:02:54 +05:30
jelveh 35fd15854a fix: capitalize Hindi in i18n 2024-11-19 17:54:28 -08:00
jelveh f693211348 add: missing translation keys to different language files 2024-11-19 17:02:47 -08:00
KernelDeimos 36ca7f63aa dev: update referral and share notifs 2024-11-19 16:47:41 -05:00
KernelDeimos 0fa3be9d43 clean: cleanup backend logs 2024-11-19 15:00:04 -05:00
KernelDeimos dca7892fca sync: update CoreModule 2024-11-19 14:39:17 -05:00
KernelDeimos e0f4c527f4 dev: migrate referral service and use user.email-confirmed event 2024-11-19 14:31:33 -05:00
jelveh 65e6d6c09f fix: give camera and recorder write permission to Desktop 2024-11-19 10:52:42 -08:00
KernelDeimos 01725ffebf fix: potential null-or-undefined in DriverService 2024-11-19 13:08:58 -05:00
KernelDeimos 7ed557f375 dev: add fake chat service, for testing 2024-11-19 13:08:39 -05:00
KernelDeimos 86789920c4 dev: apply all relevant shares on verified email 2024-11-19 12:40:03 -05:00
KernelDeimos 0fd3b1e611 fix: usage bug 2024-11-19 11:08:54 -05:00
KernelDeimos 7e7234b2f3 fix: update share email 2024-11-19 10:28:42 -05:00
jelveh 4cc63b2580 Update UIWindowShare.js 2024-11-18 11:29:15 -08:00
jelveh 905b5d851e fix: allow scrolling of user list in share window 2024-11-18 10:40:15 -08:00
jelveh 0e45132c05 feat: show profile pics in sharing notifications 2024-11-18 07:22:13 -08:00
jelveh b11016dab3 fix: mobile detection 2024-11-17 11:33:42 -08:00
jelveh 7a7c14fb04 fix: mobile-friendly taskbar 2024-11-17 11:06:10 -08:00
jelveh 0885937f03 feat: Implement profile pictures 2024-11-16 19:07:09 -08:00
KernelDeimos 59fa600f2b dev: edge rate limit for email share 2024-11-16 20:04:23 -05:00
KernelDeimos e0128aa88c fix: prevent permission cycles 2024-11-15 18:47:47 -05:00
jelveh e482b00a30 fix: launchApp on explorer supports ~ now 2024-11-15 15:38:59 -08:00
jelveh 8fefd4a61f feat: allow launchApp to open explorer at a specific path 2024-11-15 15:29:23 -08:00
jelveh cdd1a8c4e3 feat: Require email confirmation before sharing 2024-11-15 12:07:48 -08:00
Eric Dubé 98bd10c82b Revert "added a chime playback"
This reverts commit 2eaf1080d6.
2024-11-15 13:41:31 -05:00
Eric Dubé 5fd11cc607 Revert "added event listener to play chime on the first click"
This reverts commit 4885a76a75.
2024-11-15 13:41:31 -05:00
Eric Dubé fa5d731641 Revert "."
This reverts commit 1919cb3d99.
2024-11-15 13:41:31 -05:00
Eric Dubé f8ac0dbdb7 Revert "play chime only once"
This reverts commit edeb79d92c.
2024-11-15 13:41:31 -05:00
KernelDeimos 08779ac455 dev: make share feature flag reflect user state 2024-11-15 13:40:24 -05:00
KernelDeimos 14b962b459 dev: add function-flag feature flag type 2024-11-15 13:34:56 -05:00
4nshuman edeb79d92c play chime only once 2024-11-15 12:43:17 -05:00
4nshuman 1919cb3d99 . 2024-11-15 12:43:17 -05:00
4nshuman 4885a76a75 added event listener to play chime on the first click 2024-11-15 12:43:17 -05:00
4nshuman 2eaf1080d6 added a chime playback 2024-11-15 12:43:17 -05:00
KernelDeimos 69bfa60199 fix: only allow UserActorType for ShareService 2024-11-15 12:09:31 -05:00
jelveh 045259cefb feat: show unread notification count in the browser tab's title 2024-11-14 17:19:21 -08:00
KernelDeimos b1ffb8eca1 fix: new sessions miss notifications 2024-11-14 19:26:15 -05:00
jelveh d0f16c8105 fix: don't allow sharing with recipient just shared with 2024-11-14 15:38:26 -08:00
KernelDeimos 085d808817 fix: add username to comments 2024-11-14 18:09:46 -05:00
jelveh d91435db57 Merge branch 'main' of https://github.com/heyputer/puter 2024-11-14 14:45:43 -08:00
jelveh cf4b6aa1c2 feat: in Share window, display access level next to recipient 2024-11-14 14:45:35 -08:00
KernelDeimos db79a72daa feat(backend): add comments for fsentries 2024-11-14 17:45:20 -05:00
jelveh 0cbe0139d7 feat: when sharing, users can choose between 'viewer' and 'editor' for permissions 2024-11-14 14:08:49 -08:00
jelveh a6650ee2d8 feat: handle notif.ack in desktop 2024-11-14 12:52:15 -08:00
KernelDeimos 9e303a2f7c fix: occasional db error from notics 2024-11-14 15:18:28 -05:00
KernelDeimos 00e0fb350a dev: add notif.ack message 2024-11-14 15:18:28 -05:00
KernelDeimos 3f3f4e6cb9 fix: un-awked notif check in wrong place 2024-11-14 15:18:28 -05:00
jelveh 9d40ad9b4e Update UIWindow.js 2024-11-14 09:55:39 -08:00
jelveh 9d7987fae5 fix: disabled sortable on sharing section in the sidebar 2024-11-14 09:37:06 -08:00
KernelDeimos 665471f9f0 fix: add mixxing context to BroadcastService 2024-11-13 23:25:44 -05:00
KernelDeimos 22dd42ef7f fix: attempt at fixing broadcast 2024-11-13 23:13:45 -05:00
KernelDeimos cd22425a3d fix: replace ll_readshares with better approach
Recursively checking for files with 'see' permission? What was I
thinking? This replaces the disasterously awful approach of scanning a
user's entire file tree to find shares, with an approach which instead
selects on the permissions table and extracts file UUIDs from
permissions.
2024-11-13 22:44:54 -05:00
KernelDeimos 34836e374f fix: only add enabled_logs when not empty 2024-11-13 22:15:09 -05:00
KernelDeimos caf8d2a055 dev: track ll_readshares depth 2024-11-13 21:14:56 -05:00
KernelDeimos 249dc06201 fix: don't check share permission anymore 2024-11-13 20:39:58 -05:00
jelveh 94b10c78b7 tweak: sharing style 2024-11-13 17:30:03 -08:00
jelveh b5bb95e2d7 feat: add error handling to the share flow 2024-11-13 15:59:29 -08:00
jelveh 9a311058ef tweak: disable sidebar_items polling 2024-11-13 15:45:02 -08:00
jelveh 599c7ad0a1 Update UIElement.js 2024-11-13 14:43:30 -08:00
jelveh 622205ae51 tweak: enable sharing 2024-11-13 13:49:17 -08:00
KernelDeimos 27cc07e985 fix: files shared array in notification 2024-11-13 15:02:10 -05:00
KernelDeimos 89aab03905 tweak: enable share 2024-11-13 13:15:22 -05:00
KernelDeimos 8f59c2614d tweak: put groups manager behind a flag 2024-11-13 12:54:54 -05:00
KernelDeimos 5725bd8c66 fix: report path for broken files as /-void/ 2024-11-13 12:11:48 -05:00
Nariman Jelveh c53107db67 Merge pull request #830 from Zac0511/patch-2
Update README.fr.md
2024-11-12 22:28:23 -08:00
jelveh 7ca0a02fa4 tweak: safe data URI strings for icons in search 2024-11-12 20:45:53 -08:00
jelveh 55d2af189e feat: search 2024-11-12 20:20:43 -08:00
KernelDeimos b589512c9d feat: search endpoint 2024-11-12 17:58:43 -05:00
jelveh ac3317aea9 fix: issue with popover closing when clicked 2024-11-12 13:27:29 -08:00
jelveh 1adfe5c709 feat: the socialLink UI component 2024-11-12 12:40:14 -08:00
jelveh 45ecce4653 Update style.css 2024-11-11 20:49:49 -08:00
jelveh a70cb49a30 tweak: style improvement 2024-11-11 17:31:43 -08:00
jelveh 27c01c9bd9 feat: Reaload App option in the window title bar context menu 2024-11-11 11:46:28 -08:00
KernelDeimos a08e9758fe fix: groups manager location 2024-11-11 14:40:50 -05:00
jelveh a9679910c6 Update style.css 2024-11-10 10:46:13 -08:00
KernelDeimos 402ffb0fd1 fix: don't show kvstore in usages 2024-11-10 13:33:41 -05:00
KernelDeimos 4f9d9a54ef fix: add missing id for task_manager menu item 2024-11-10 12:46:42 -05:00
Nariman Jelveh 6c44032293 fix: Update security.txt canonical URL 2024-11-10 08:55:51 -08:00
Nariman Jelveh d6307cc389 Create FUNDING.yml 2024-11-10 08:48:12 -08:00
KernelDeimos fc0cb2dde4 tweak: usage endpoint 2024-11-09 17:41:16 -05:00
KernelDeimos 85020109b3 dev: add virtual groups for computed permissions 2024-11-09 17:40:47 -05:00
KernelDeimos a324c91560 dev: add quick window to see what groups a user is in
I need this for development/debugging purposes. I figure I may as well
start developing the system dialog we'll eventually have to create
rather than make a temporary debugging element. This window could
eventually become a full-featured group manager, and can easily be moved
to a settings tab.
2024-11-09 15:57:28 -05:00
KernelDeimos 59984bb930 dev: recursive log toggle for puter.js 2024-11-09 15:14:37 -05:00
KernelDeimos 6f5f11da09 dev: allow other backend services to set gui_params 2024-11-08 16:04:55 -05:00
jelveh e8f67da9a3 fix: update apps cache by reading from primary db 2024-11-08 10:56:00 -08:00
KernelDeimos 164d5ef167 test: update TestKernel 2024-11-08 12:13:30 -05:00
Zac0511 acfa912cde Update README.fr.md 2024-11-08 10:17:55 +01:00
Zac0511 bb3b38c9ed Update README.fr.md
Added a link to Puter.com
2024-11-08 10:12:58 +01:00
KernelDeimos 28adcf533f feat(ai): add xAI grok-beta 2024-11-07 15:01:13 -05:00
KernelDeimos d613c5fc83 log: when app is launched 2024-11-07 14:27:02 -05:00
KernelDeimos 5caa2c0e3a fix: logging in AppConnection 2024-11-07 14:26:30 -05:00
KernelDeimos 5d416e2316 refactor: simplify module constructors
This was a really small refactor - about 30mins - that moves the concern
of common constructor args for modules outside of each individual call.

A Context object is now used for common constructor arguments. Some of
the values on this object - such as APIOrigin and authToken - are
following values on the instance of the Puter class. This means that for
some modules it is already possible to eliminate the setAuthToken and
setAPIOrigin listeners (out of scope for this commit). Any which remain
could eventually be replaced with a listener on the Context object
itself.

This commit also moves the initSubmodules method to the top of the class
so that it's easier for new devs to find, in case they're looking into
an issue on a specific module rather than the Puter class itself.
2024-11-07 13:29:18 -05:00
Nariman Jelveh 63d6573fba docs: add link to Self-Hosting Documentation in README.md 2024-11-06 17:34:32 -08:00
jelveh 1a6d648a6e fix: persist clock visibility change 2024-11-05 18:31:03 -08:00
KernelDeimos ba2eb716f5 dev: add prefix logger 2024-11-05 15:57:55 -05:00
KernelDeimos da0022abf0 feat: add puter.auth.whoami() 2024-11-05 15:49:51 -05:00
KernelDeimos 755736edee feat: add puter.log 2024-11-05 15:31:44 -05:00
KernelDeimos e71fe11e32 dev: add toggle logging, and fix issues in logger 2024-11-05 15:31:17 -05:00
KernelDeimos b0cbcdf743 dev: add logger to putility 2024-11-05 15:03:21 -05:00
KernelDeimos fe8d6af1b5 sync: update claude model (take 2) 2024-11-04 22:46:57 -05:00
KernelDeimos 52a54d2248 sync: update claude model 2024-11-04 22:28:34 -05:00
jelveh 9263cbaedd Merge branch 'main' of https://github.com/heyputer/puter 2024-11-04 17:33:13 -08:00
jelveh 9590bbdad1 fix: don't access metadata.credentialless if it doesn't exist 2024-11-04 17:33:08 -08:00
KernelDeimos 16b9f09e66 fix: reinitialize settings tabs for DOM events 2024-11-04 19:25:04 -05:00
KernelDeimos 856688f884 dev: add database and config access for extensions 2024-11-04 16:42:42 -05:00
jelveh c44b9ab8d5 fix: use correct cursor when hovering over sidebar items 2024-11-04 10:08:11 -08:00
jelveh 79cff7ba29 Update style.css 2024-11-04 09:33:48 -08:00
jelveh 4e7979b50e Update style.css 2024-11-03 20:57:53 -08:00
jelveh 1056231004 feat: collapsible sidebar menu in Dev Center 2024-11-03 20:50:46 -08:00
jelveh 06d5dd763d tweak: dev center table visible when overflowing 2024-11-03 20:13:35 -08:00
jelveh 666912a8a3 revert style update 2024-11-03 17:20:09 -08:00
jelveh 452e3383e8 Update style.css 2024-11-03 17:18:12 -08:00
jelveh 05950b0fc3 tweak: automatically update sidebar_items every 2 seconds 2024-11-03 17:13:24 -08:00
jelveh 2e122c2cab Update style.css 2024-11-03 16:16:00 -08:00
jelveh ff30de1d69 feat: customize the order of Explorer sidebar items 2024-11-03 16:00:39 -08:00
jelveh 121043d312 fix: issue with context menu divider item stealing the event from previous item 2024-11-02 18:54:30 -07:00
jelveh 0315cb3337 fix: issue with non-scrollable window body and document Context Menu 2024-11-02 17:51:07 -07:00
KernelDeimos 05573dad51 tweak: load mods from extensions directory 2024-11-01 19:29:16 -04:00
KernelDeimos f836ac30a9 fix: temporary fix because .on can't call ensure_service 2024-11-01 18:21:05 -04:00
KernelDeimos 84989367a7 dev: hook extensions into service event bus 2024-11-01 17:42:12 -04:00
KernelDeimos 58f34b948a dev: simplify module/extension setup 2024-11-01 16:13:00 -04:00
KernelDeimos 7569e8a703 tweak: endpoints are authorized by default 2024-11-01 15:43:40 -04:00
KernelDeimos 4b6c70fa5e dev: expose more core definitions to extensions 2024-11-01 15:43:27 -04:00
KernelDeimos a614145250 dev: run npm install after copying extensions 2024-11-01 15:26:39 -04:00
KernelDeimos d958c01111 dev: add support for single-file extensions 2024-11-01 14:42:42 -04:00
KernelDeimos 3f6900f26b dev: add get() and post() to extension API 2024-11-01 14:41:29 -04:00
KernelDeimos d1ebbbe3c7 chore: update kdmod package.json to avoid confusion 2024-10-31 18:20:00 -04:00
KernelDeimos 0a47daa289 fix: issues in kdmod
The kdmod module was broken since we renamed packages/ to src/. Also,
the update to mod loading for some unknown reason now requires each call
to require to end with `.js`. As far as I know, this was working
previously.
2024-10-31 18:15:41 -04:00
KernelDeimos 14d45a27ed feat: add extension API for modules
Allows modules to register a listener to the 'install' event without
creating a Module class. This changes how external modules are
installed.

External modules are now referred to as "extensions"; this commit does
not update the term but does use 'extension' as the name of the global.
2024-10-31 18:08:27 -04:00
KernelDeimos f36718005f sync: add wiki as a submodule 2024-10-31 18:08:30 -04:00
Zac0511 f2fc8ba5cf Edit "Puter version" title and description in the bug report template
A quick edit to replace "Puter version (if accessible)" by "Puter version" and a new description to say that its not required.
2024-10-31 13:54:42 -04:00
KernelDeimos 9a0c5b4f74 dev: support no-response endpoints in Collector
The no_response option is added to Collector::post. If an endpoint
returns an empty response, this option must be set to avoid a JSON parse
error.
2024-10-30 18:52:47 -04:00
Nariman Jelveh 96b64f6b53 Merge pull request #817 from djelacik/main
minor documentation fixes
2024-10-30 08:26:35 -07:00
DeveloperDaniell 05169e9e1e minor documentation fixes 2024-10-30 16:36:43 +02:00
jelveh dc478382fb tweak: don't break if contact_us is not found 2024-10-29 23:44:54 -07:00
jelveh fc5e15f2a6 feat: first extension that implements a custom user options menu 2024-10-29 22:55:26 -07:00
jelveh b018571a86 feat: add support for extensions 2024-10-29 18:37:32 -07:00
KernelDeimos 14f477a633 fix: Collector bug on undefined body 2024-10-29 18:56:11 -04:00
KernelDeimos b9625945ae dev: expose save account and email confirm 2024-10-29 18:56:11 -04:00
KernelDeimos 463c96c69a fix: hyphenize_confirm_code bug 2024-10-29 18:56:11 -04:00
KernelDeimos 38adb5741b fix: app close issue in phoenix 2024-10-29 16:19:58 -04:00
KernelDeimos b30de5bf78 fix: reading JSON string from service_usage_monthly
This was hilariously difficult to debug. This isn't the first time an
issue like this occurred; this happens because of a deviation between
mysql and sqlite, where a JSON-typed column in mysql will return as a
native object in queries, whereas a JSON-typed column in sqlite is a
string column and will therefore return as an un-parsed JSON string in
queries.
2024-10-29 13:18:53 -04:00
KernelDeimos 7ba16d1c21 fix: recently broke counting service sql 2024-10-28 19:14:15 -04:00
KernelDeimos f1087953b5 fix: ignore invalid entries from service_usage_monthly 2024-10-28 19:09:17 -04:00
KernelDeimos 193da63304 fix: service usage screen
This fixes service monthly usage counts as shown in Settings.
2024-10-28 18:47:40 -04:00
KernelDeimos c0b109d4d2 dev: add get_proxy_object to util/context 2024-10-28 15:11:26 -04:00
KernelDeimos 3649dff9aa dev: add module lib installation to useapi 2024-10-28 15:11:26 -04:00
jelveh 3d85edf537 Update UIWindow.js 2024-10-27 21:33:08 -07:00
jelveh 54ae69b7b7 feat: add an 'Upload' button at the bottom of OpenFilePicker 2024-10-27 21:32:39 -07:00
jelveh cd8a080d72 tweak: user-friendly badges for apps in Dev Center 2024-10-27 21:09:18 -07:00
Nariman Jelveh b7c50fc2bb docs: add Garry's Mod to #DoesItRunPuter 2024-10-27 15:58:54 -07:00
jelveh af511c05e3 feat: Allow apps to toggle credentialless via Dev Center 2024-10-27 14:44:06 -07:00
KernelDeimos 4dc1e01682 fix: continue work on blocked_email_domains (2) 2024-10-27 15:46:21 -04:00
jelveh 161be7fe6b remove 'About' from taskbar apps 2024-10-26 09:56:57 -07:00
KernelDeimos 515051dabf fix: continue work on blocked_email_domains 2024-10-26 03:28:45 -04:00
KernelDeimos c22a69ffb1 fix: errors thrown by launch_app
Fixes errors that were noticed being thrown by launch_app, specifically
in the branch of logic when launch_app is called NOT via ExecService.
This branch of logic was added to fix an issue where notepad wasn't
prompting to save unsaved changes on close because data-appusessdk was
not properly set to true. The fix still worked, despite throwing these
errors, because setting data-appUsesSDK to true is the first thing it
does. However, broadcast messages to apps launched with launch_app NOT
via ExecService would have been broken.
2024-10-26 03:07:02 -04:00
jelveh a9bbcf908d Update style.css 2024-10-25 11:36:50 -07:00
KernelDeimos f3a9e784a3 dev: add can iterate check 2024-10-25 14:27:42 -04:00
KernelDeimos b98c5a349e dev: make anti-csrf more convenient 2024-10-24 23:11:07 -04:00
KernelDeimos f55b7ac0b8 dev: ensure existing app tokens don't break (for now) 2024-10-24 19:54:29 -04:00
KernelDeimos 6b8fbda14c dev: allow app tokens to identify user sessions 2024-10-24 19:51:54 -04:00
KernelDeimos bc51d4bd52 fix: notepad save issue 2024-10-24 02:28:19 -04:00
KernelDeimos 87f7fc0265 tweak: clarify blocked domain message 2024-10-24 00:57:21 -04:00
KernelDeimos 955b087297 feat: add config for blocked email domains 2024-10-24 00:38:40 -04:00
KernelDeimos 988039eade dev: src prop for images 2024-10-23 22:59:18 -04:00
KernelDeimos 25e9ed8227 dev: make el() yet more convenient 2024-10-23 01:08:16 -04:00
KernelDeimos 5965ab5de0 dev: allow UIElement to be used as settings tab 2024-10-22 23:55:42 -04:00
KernelDeimos 0bb80d2933 doc: add todo regarding /whoami 2024-10-22 21:54:48 -04:00
KernelDeimos 37bb98b965 dev(gui): add UIElement 2024-10-22 21:54:48 -04:00
jelveh 37aa2b1d06 tweak: improve the usage bar visibility 2024-10-22 17:39:38 -07:00
jelveh 4e8c7455aa tweak: Move clock settings to the 'Personalization' tab of 'Settings' 2024-10-22 17:18:16 -07:00
jelveh 6f702c3927 Going to /settings will open the Settings in full page mode 2024-10-22 16:46:06 -07:00
KernelDeimos c6bc42f551 fix: height 100% on flexer and step view 2024-10-22 18:10:16 -04:00
KernelDeimos 368c20cf57 dev: updates and URL collector 2024-10-21 22:57:25 -04:00
KernelDeimos 12e0cecf02 fix: wait no 2024-10-21 18:12:08 -04:00
KernelDeimos c8f913d710 fix: phoenix incorrect lookup order 2024-10-21 18:07:45 -04:00
ProgrammerIn-wonderland 891e799e5e WIP symlink, net_device virtio, move fixes, upload binary fixes 2024-10-21 17:04:57 -04:00
jelveh 13248a99bf feat: add support for fadeIn effect for UIWindow 2024-10-21 07:48:06 -07:00
jelveh 99ce3bde19 fix: turns out we don't support utm_source I learn something new about Puter every day! 2024-10-20 20:42:34 -07:00
jelveh 5e27055215 tweak: add utm_source to GitHub link 2024-10-20 20:26:31 -07:00
jelveh 920a2f2427 tweak: make backdrop darker to increase focus on active window 2024-10-20 20:15:19 -07:00
KernelDeimos 60fdce9052 sync: put app-center in the taskbar 2024-10-20 20:30:35 -04:00
KernelDeimos 8b1a935c93 sync: developer is in /dist now 2024-10-20 20:30:11 -04:00
KernelDeimos e0b9072129 fix: issue with service scripts that use TestView 2024-10-19 21:17:57 -04:00
Nariman Jelveh 90e7098cc7 Merge pull request #787 from 4nshuman/issue/zip-operation
Issue/zip operation
2024-10-19 15:45:39 -07:00
KernelDeimos b5535ae3ca dev: add dev2 env 2024-10-19 18:22:09 -04:00
KernelDeimos 0fb4f73d76 chore: remove noisy logs 2024-10-19 17:31:46 -04:00
4nshuman 63b4da5be8 connected upload's inbuilt progress counter 2024-10-20 02:07:07 +05:30
4nshuman fabc21ecf7 fixed sorting logic on directory list 2024-10-20 02:00:58 +05:30
4nshuman a646b02e45 provide incremental directories to mkdir 2024-10-20 02:00:35 +05:30
jelveh c29122c23f tweak: use different icons for system directories in the sidebar 2024-10-19 12:59:24 -07:00
4nshuman 4fdea7db66 offloaded write operations to Upload module 2024-10-20 00:06:30 +05:30
4nshuman f32b1cfce8 added option to create parent directories for programmatic file drops 2024-10-20 00:05:40 +05:30
4nshuman fc461c8735 added absolute file path processing 2024-10-20 00:04:36 +05:30
4nshuman d39b7a8972 record unique directory list 2024-10-19 23:52:21 +05:30
jelveh 74baab49f4 tweak: improve welcome window footer link color 2024-10-19 10:35:56 -07:00
jelveh 564ff65363 feat: welcome screen to quickly explain what Puter is 2024-10-19 10:28:03 -07:00
KernelDeimos 480d996279 dev: proof-of-concept for fs postMessage relay
Adds a filesystem relay service to GUI-side which currently reports an
exmaple fsentry for /stat and /readdir. Added filesystem services for
both sides. Moved filesystem implementations from src/modules to src/lib
since they're being called by services now rather than modules.

This functionality is effectively disabled unless
src/puter-js/src/services/Filesystem.js is updated to use init_app_fs_()
when the environment is 'app'.
2024-10-19 03:46:47 -04:00
KernelDeimos 6e5d5c2021 dev: clone property descriptors in Context 2024-10-19 03:45:41 -04:00
KernelDeimos c2a475f3c0 dev: lay the groundwork for client FS relay
Adds XDIncomingService to manage messages from another window. IPC now
registers with XDIncoming and reports whether it was handled, that way
messages intended to reach GUI can be reliably ignored.

On GUI-side, XDIncomingService will be used by FSRelayService (not yet
implemented) to handle requests for filesystem operations from another
window.

On App-side, XDIncomingService might be used by the PostMessageFS
client-side filesystem implementation terminal to listen for filesystem
events that were relayed by GUI (after a permission check) from their
original websocket source. Either that, or we'll open a filesystem
socket for each app using that app's token.

NoPuterYetService was added because IPC.js is loaded before
globalThis.puter exists, and was the easiest way to still allow IPC's
listener to be registered with XDIncomingService.

APIAccessService was added. This service currently holds auth_token and
api_token and does nothing else. FilesystemService listens to this to
maintain a websocket connection. APIAccessService will help to manage
the complexity of all further code dependent on being informed about
changes to the auth token or origin. Currently in puter.js these are
passed around to several modules which manage the same piece of state
information independantly.
2024-10-18 23:10:19 -04:00
KernelDeimos bc5d09fe31 dev: hooks and sequencing functions for ServiceManager 2024-10-18 23:10:19 -04:00
jelveh 2f6f2b7d7c Set autoDedupe to true for creating new apps in Dev Center 2024-10-18 18:44:06 -07:00
KernelDeimos 143cfb5654 fix: 1954f8-related issue #2
mkdir operation was passing user instead if actor. I really think I
changed this already; getting a crazy deja-vu feeling about it. Maybe a
commit was lost somewhere along the road, but not sure.
2024-10-18 21:24:05 -04:00
jelveh b1411cd622 Add dedupeName for to puter.apps and Dev Center 2024-10-18 18:02:37 -07:00
jelveh 8ed5db1734 Merge branch 'main' of https://github.com/heyputer/puter 2024-10-18 17:50:25 -07:00
jelveh 14fc963dd4 Show approval badges and lock in Dev Center 2024-10-18 17:48:14 -07:00
KernelDeimos b9c157b28e tweak: start from 1 2024-10-18 20:48:09 -04:00
KernelDeimos 66e8b37f70 dev: add dedupe_name option for app creation 2024-10-18 20:42:41 -04:00
KernelDeimos 4ce2dccc76 dev: update app approved_for props visibility
Allows owner users to read the approved_for properties on their own apps
2024-10-18 20:12:19 -04:00
KernelDeimos f5865daede fix: 1954f8-related issue
get-user-app-token was calling ll_mkdir with 'user' instead of 'actor'
2024-10-18 19:58:44 -04:00
KernelDeimos 1954f86680 fix(security): always use actor 2024-10-18 19:15:40 -04:00
KernelDeimos 94e15dbfa8 test: fix topics test and ServiceManager 2024-10-18 19:13:06 -04:00
jelveh 598a08ec45 Allow users to cancel a deploy operation before start 2024-10-18 16:07:01 -07:00
KernelDeimos 3c5d2af8c8 fix: small issue in Service.js 2024-10-18 15:53:40 -04:00
jelveh 29f5820129 Fix settings sidebar margin 2024-10-18 12:45:27 -07:00
KernelDeimos fb1216d488 fix: prevent code from breaking just because it was bundled 2024-10-18 15:06:08 -04:00
KernelDeimos 7922314840 dev: add generic pub/sub system for use anywhere
Dispatching and listening to events is non-trivial. The apparent
triviality is in implementing a list of listeners and calling them. The
non-triviality is in the nature of what happens to a system when it has
multiple different interfaces to register listeners and publish events.

This commit adds TopicsFeature, which allows any class extending
AdvancedBase to declare topics. A topic is a simple pub/sub channel.
TopicsFeature will manage the state of listeners so the class doesn't
need to. A GC-friendly mechanism for detaching listeners is also provided.
2024-10-17 22:56:00 -04:00
KernelDeimos 9b1f1817f5 dev: move service interface to trait 2024-10-17 22:56:00 -04:00
KernelDeimos 273a51fc53 dev: add ServiceManager
The ServiceManager will replace manual management of services within
initgui, and will also be used within puter.js. Eventually Puter's
backend might use this instead of the existing Container class, although
this will be a large change that needs to be done incrementally.

The difference between ServiceManager and Container is the logic behind
when initialization occurs. Rather than have all services initialized at
once when Container's init() method is called, services are initialized
as soon as their dependencies have been initialized.
2024-10-17 22:56:00 -04:00
jelveh 2a81825a6b Update default apps in the Launch menu 2024-10-17 16:14:24 -07:00
KernelDeimos 9535100c85 doc: add brainstorming for mountpoints 2024-10-17 03:00:35 -04:00
KernelDeimos 7980aafbd9 doc: add devlog from puter.js 2024-10-17 01:19:06 -04:00
ProgrammerIn-wonderland f0b7214a07 working persistence 2024-10-15 18:30:08 -04:00
ProgrammerIn-wonderland aae6fff340 adding locking to puter-save 2024-10-15 18:30:08 -04:00
ProgrammerIn-wonderland f0bc10f1e8 WIP persistence 2024-10-15 18:30:08 -04:00
KernelDeimos 1ea6d270f8 dev: add endpoint for GUI to query app file access 2024-10-15 16:19:11 -04:00
KernelDeimos fd7bd339ca dev: add Context to putility 2024-10-15 16:17:37 -04:00
Nariman Jelveh a2216aaea2 Merge pull request #805 from lohitkotni/patch-1
Update README.te.md
2024-10-14 20:53:37 -07:00
Surya Lohith Kotni a8e843297e Update README.te.md
fixed typo
2024-10-15 09:20:10 +05:30
Ibrahim H. 12a38b8258 Show a badge on README 2024-10-14 22:18:36 -04:00
Ibrahim H. f9b9565dab Create test workflow
basic test workflow setup, this allows checking that everything is fine on node v18 up to v22.
2024-10-14 22:18:36 -04:00
Zac0511 40f8634f24 Update bug_report.yaml 2024-10-14 22:16:04 -04:00
Zac0511 a22d9199f3 Update bug_report.yaml 2024-10-14 22:16:04 -04:00
Zac0511 551aed30be Update bug_report.yaml 2024-10-14 22:16:04 -04:00
Zac0511 0cd8404e87 Update and rename bug_report.md to bug_report.yaml 2024-10-14 22:16:04 -04:00
KernelDeimos 149684de01 dev: allow emulator app to access user files 2024-10-14 15:46:19 -04:00
KernelDeimos 9e88096e7e clean: remove a console.log 2024-10-14 15:19:52 -04:00
KernelDeimos e011df1a20 move: PuterAPIFilesystem 2024-10-14 15:19:18 -04:00
Nariman Jelveh 0f5f8bc591 Merge pull request #803 from lohitkotni/main
added telugu language translation
2024-10-14 09:20:57 -07:00
KernelDeimos 6d23369512 sync: add new page 2024-10-14 12:18:04 -04:00
loko 14bd643d4f added telugu language translation 2024-10-14 21:40:57 +05:30
KernelDeimos 3762037576 dev: oops 2024-10-12 00:01:33 -04:00
KernelDeimos 11fbcb27b0 dev: cache readdir 2024-10-11 23:51:38 -04:00
KernelDeimos 77f6bdcd6d dev: make puter.fs cache togglable 2024-10-11 18:39:58 -04:00
KernelDeimos 6ee7caaee1 dev: apply TTL cache for stat entries
Adds CachedFilesystem layer to client filesystem chain. Currently only
stat is implemented. The stat implementation will hold onto an entry for
3 seconds as per hardcoded configuration. Eventually, once invalidation
via websockets is working, this TTL should be extended.
2024-10-11 18:39:58 -04:00
KernelDeimos fc9a371e09 dev: add more to NariMethodsFeature 2024-10-11 18:39:58 -04:00
KernelDeimos 43c5402b7c feat(putility): trait method override support
Support for trait method overrides will make it possible to use putility
traits with the decorator pattern while using a proxy class to avoid
redundant re-implementation of proxy methods.

Use of the pattern described above will occur in the implementation of
client-side filesystem caching.
2024-10-11 18:39:58 -04:00
KernelDeimos c12ae2a923 dev: prepare puter.js fs for decorator pattern
- de-coupled xhr callback passing from the interface of the underlying
  filesystem implementation.
- This makes the interface to delegate calls more suitable for use with
  the decorator pattern.
- The decorator pattern will be used to manage the complexity of the
  caching layer by separating the concerns of different caching methods.
2024-10-11 18:39:58 -04:00
ProgrammerIn-wonderland 4f8304ec15 switch ne2k_pci to virtio 2024-10-11 18:14:38 -04:00
ProgrammerIn-wonderland d9805c0cab delete prompt-path 2024-10-11 17:06:32 -04:00
ProgrammerIn-wonderland fb41d2a51c change PWD to not use prompt-path and fix unicode issues 2024-10-11 17:06:32 -04:00
KernelDeimos 010282edf2 fix: don't display all apps for extensionless files
This hides database entries with empty types from the list of suggested
apps for files that have no extension. These entries should also be
removed from the database and the bug causing them should be fixed in
dev center.
2024-10-11 14:51:52 -04:00
KernelDeimos 38dcb60d3f fix: creating app shortcut in self-hosted
For some reason ll_write has an undefined `actor` when clicking "Add
Shortcut to Desktop" from Dev Center. This should be investigated
further.
2024-10-11 14:50:35 -04:00
Nariman Jelveh 3157186f4f close #798 2024-10-10 17:40:17 -07:00
KernelDeimos d4b96a17c8 dev: add RWLock to putility 2024-10-10 18:47:07 -04:00
KernelDeimos 37e7b6ad70 fix: disable thumbnails for AppData uploads 2024-10-10 15:03:22 -04:00
KernelDeimos 823ab28448 test: update test invocation 2024-10-10 03:19:28 -04:00
ProgrammerIn-wonderland b8490248c5 update 9p-puter driver with error handling 2024-10-09 20:36:03 -04:00
ProgrammerIn-wonderland 1e7e516d73 change submodule url 2024-10-09 20:36:03 -04:00
ProgrammerIn-wonderland 979bd06d70 9p automounting 2024-10-09 20:36:03 -04:00
ProgrammerIn-wonderland b145e30a90 feat: v86 9p server support 2024-10-09 20:36:03 -04:00
Nariman Jelveh d449367db5 Update loading.svg 2024-10-09 10:04:09 -07:00
Nariman Jelveh 9890e3a8be close #771 2024-10-08 19:51:57 -07:00
Nariman Jelveh d0940ccd21 close #776 2024-10-08 18:59:14 -07:00
KernelDeimos 0b9a9eec99 doc: oops 2024-10-08 18:41:01 -04:00
KernelDeimos 57d6da0858 doc: add scratch.md 2024-10-08 18:39:55 -04:00
KernelDeimos 7f1b870d30 feat: support readdir for directory symlinks 2024-10-08 18:31:39 -04:00
KernelDeimos c2a9506b48 fix: thumbnail service updates 2024-10-08 01:41:18 -04:00
ProgrammerIn-wonderland ed0a83ca9d dev: update v86, switch twisp to epoxy-server with twisp feature 2024-10-07 22:04:41 -04:00
4nshuman 857c3b88b3 added fflate to lint check 2024-10-06 21:27:03 +05:30
4nshuman 822d850513 purge JSZip 2024-10-06 21:25:46 +05:30
4nshuman e252567c88 Added progress dialog details 2024-10-06 21:19:42 +05:30
4nshuman f0f8e454f9 added Promises to handle multiple file creation and closing progress dialog 2024-10-06 20:27:12 +05:30
4nshuman a09dd29416 added empty directory check and file creation 2024-10-06 20:25:40 +05:30
4nshuman e992e4d5d4 unzipped directory creation 2024-10-06 20:25:10 +05:30
4nshuman 2a82579eb8 added unzip error handler 2024-10-06 20:23:10 +05:30
4nshuman a79cc040e8 implemented fflate unzip operation 2024-10-06 20:22:50 +05:30
4nshuman e5f0f46633 added blob to uInt8Array conversion 2024-10-06 20:22:07 +05:30
4nshuman 9a2e701683 eleminate JSZip invocation 2024-10-06 20:21:29 +05:30
4nshuman 00f2dbdcf0 added window hide delay config 2024-10-06 20:18:30 +05:30
4nshuman b9d7a1d2a1 added zip support for empty directories 2024-10-06 17:33:30 +05:30
4nshuman b9b8229099 fixed comments phrasing 2024-10-06 16:19:46 +05:30
4nshuman 5b477c2cac fixed module name 2024-10-06 16:10:40 +05:30
4nshuman 09d10cb29b rectified progress window for unzip operation 2024-10-06 16:03:09 +05:30
4nshuman f6541fc793 convention implemented definition header 2024-10-06 16:01:18 +05:30
4nshuman deb8c4e13b added status message terms 2024-10-06 16:00:01 +05:30
4nshuman a93236118f redirected unzip to helper method 2024-10-06 15:32:31 +05:30
4nshuman a9bebdd7f0 fixed typo 2024-10-06 15:26:26 +05:30
4nshuman dfe71d5965 modified zipping operationand integrated fflate 2024-10-05 23:47:22 +05:30
4nshuman f05f7454e9 added helper method to convert binary large object to uInt8Array for zipping operations 2024-10-05 23:45:54 +05:30
4nshuman 582c411c00 added fflate min js to the library 2024-10-05 23:44:04 +05:30
4nshuman f3625ed907 added terms for status message on zip operation 2024-10-05 23:43:43 +05:30
4nshuman 4c7b75ed67 added fflate on static asset and libPath 2024-10-05 23:43:15 +05:30
4nshuman 1929aaf5ef added fflate on libPath on puter-gui 2024-10-05 23:42:43 +05:30
4nshuman 01aaa07e87 added zip progress counter configurations 2024-10-05 23:41:45 +05:30
KernelDeimos c7b08d1b5e doc: tweak 2024-10-04 16:09:02 -04:00
KernelDeimos 1e0b8cfe7c doc: add troubleshooting steps for no build-essentials 2024-10-04 16:02:05 -04:00
KernelDeimos c135649551 move: notes.md 2024-10-03 18:20:51 -04:00
KernelDeimos 196531d118 dev: update handling of duplicate emails 2024-10-03 17:04:47 -04:00
KernelDeimos 822f3b8c45 dev: add notes and some updates to email logic 2024-10-03 14:54:40 -04:00
KernelDeimos 2c3065a70f test: register test for CleanEmailService 2024-10-02 21:30:14 -04:00
KernelDeimos 054b9c2864 dev: add service for cleaning email addresses 2024-10-02 17:51:43 -04:00
KernelDeimos 9db55fc5f7 fix: remove redundant openai model fallback 2024-10-02 15:14:46 -04:00
KernelDeimos 29fd595cf9 dev: rootfs-v0.2.0 2024-10-02 15:13:57 -04:00
KernelDeimos 9985996686 fix: app pseudonym in wrong conditional block 2024-09-30 20:38:25 -04:00
KernelDeimos 4febd81169 dev: app pseudonyms 2024-09-30 19:35:34 -04:00
KernelDeimos 8bc4122bea tweak: change phoenix help text when launched with -c 2024-09-30 19:16:10 -04:00
KernelDeimos 5ed8823a16 tidy: remove a console log 2024-09-30 18:11:25 -04:00
KernelDeimos 5317adf8a4 feat: allow passing cli args via url 2024-09-30 18:09:28 -04:00
KernelDeimos b6c0cb6abc feat: add -c flag for phoenix 2024-09-30 16:50:18 -04:00
KernelDeimos 6e1ed7ab04 dev: update emu load indicator 2024-09-30 16:50:03 -04:00
KernelDeimos 04c05a5bb8 fix: properly add owner object to fsentries 2024-09-27 16:30:13 -04:00
KernelDeimos a70d0dd088 fix: add progress bar fix 2024-09-27 15:08:19 -04:00
KernelDeimos eab2721f89 dev: use streaming decompression 2024-09-26 18:49:29 -04:00
KernelDeimos 545ac0097f tweak: ascii tux (important) 2024-09-26 18:28:13 -04:00
KernelDeimos 45cd3b79bb tweak: disable grace period by default 2024-09-26 15:47:47 -04:00
KernelDeimos 259877b677 fix: allow ETX to propagate to bash 2024-09-26 15:47:35 -04:00
KernelDeimos 08601ae2af feat: progress indicator for emulator 2024-09-25 23:47:10 -04:00
KernelDeimos d0535cf10b dev: add wasm bench 2024-09-25 21:45:03 -04:00
KernelDeimos fff8993200 fix: error deleting entry from My Websites window
This could not be tested locally due to another but only affecting
self-hosted installations. This will be tested in staging in the
meantime while the other bug is being fixed.
2024-09-23 17:55:54 -04:00
KernelDeimos b1b725a2eb tweak: image from CDN (for real this time) 2024-09-23 15:07:26 -04:00
KernelDeimos 68c4274dc3 tweak: image from CDN 2024-09-23 14:54:01 -04:00
Nariman Jelveh 288411c377 Update style.css 2024-09-22 15:46:48 -07:00
KernelDeimos 27b66254e3 dev: compress default image with brotli 2024-09-22 17:49:00 -04:00
Nariman Jelveh 3ce8da37eb close #772 2024-09-22 12:40:38 -07:00
KernelDeimos 07d3592d88 tweak: don't auto-start puter-linux for now 2024-09-21 15:39:19 -04:00
Nariman Jelveh 18fed60341 Merge pull request #770 from ruthwikchikoti/issue#736
feat: translate README.md to Dutch
2024-09-21 12:15:48 -07:00
Ruthwik Chikoti 31e2773743 feat: translate README.md to Dutch 2024-09-21 18:21:27 +05:30
Nariman Jelveh bd91839551 Don't allow background processes to change the browser's URL 2024-09-19 17:41:37 -07:00
KernelDeimos 4311b482fd fix: second half of connectToInstance 2024-09-18 21:02:51 -04:00
KernelDeimos cb324cc125 fix: error in process.handle_connection 2024-09-18 20:55:00 -04:00
KernelDeimos f4dd195245 dev: fix previous commit 2024-09-18 17:04:48 -04:00
KernelDeimos afc0ac8548 dev: attempt to fix process select issue 2024-09-18 17:01:02 -04:00
KernelDeimos 439653458e fix: quick patch to avoid columnify error 2024-09-18 16:22:26 -04:00
KernelDeimos 0456893789 dev: add emulator prod deployment 2024-09-18 16:21:07 -04:00
KernelDeimos f2acd83b72 fix: upsert subdomain check to insert only 2024-09-18 16:21:07 -04:00
KernelDeimos e3431cd7f5 dev: add build script for relay 2024-09-18 16:21:07 -04:00
KernelDeimos 48873b6d23 git: add epoxy-tls submodule 2024-09-18 16:21:07 -04:00
KernelDeimos 8aed3d9454 dev: prep for network build 2024-09-18 16:21:07 -04:00
KernelDeimos 25817bf6a2 dev: add puter-linux app to db migrations 2024-09-18 16:21:07 -04:00
KernelDeimos 4589ed95be dev: handle pty close
Return to phoenix shell when a pty stream is closed by twisp.

Pipes in phoenix with commands from the emulator do not appear to be
working properly, but something in there is working.
2024-09-18 16:21:07 -04:00
KernelDeimos 404fbaa4cb dev: add terminal multiplexing
This involves establishing the protocol through which phoenix instances
run a command on the emulator. The pty is able to communicate with the
terminal in both directions. This commit adds logs to be removed later.

There are a few things left that this commit does not address:
- handling close of delegate process
- handling sigint from phoenix to delegate process
- closing the connection to twisp
2024-09-18 16:21:07 -04:00
KernelDeimos bc83e90e33 tweak: use virtualization-optimized kernel 2024-09-18 16:21:07 -04:00
KernelDeimos e3d4a5f3b3 dev: multi-instance many-to-many app-to-app comms
I'll elaborate here because the commit name is confusing. Any time an
app gets a connection to another app, either because it launched that
app (or was launched by that app) or requested a connection to that app,
the ID the app gets to represent the app it's communicating with is now
a pseudo app id rather than the app instance ID. This accomplishes two
things:

1. It's more secure. There are multiple places where GUI assumes that
   knowing an app's instance ID means you can do things as that app.
2. Between the same two apps, there may now be more than one connection.
   This is useful for situations like Phoenix shell talking to the
   emulator in multiple separate instances to pipe commands. (this is
   coming later)
2024-09-18 16:21:07 -04:00
KernelDeimos 62634b0afe feat: add connectToInstance method to puter.ui 2024-09-18 16:21:07 -04:00
KernelDeimos e2cb6194bb dev: add startup apps, start emulator by default 2024-09-18 16:21:07 -04:00
KernelDeimos e1ec84877a dev: resize handling 2024-09-18 16:21:07 -04:00
KernelDeimos db3e0b5ce8 fix: simplify callback listener and fix async bug 2024-09-18 16:21:07 -04:00
KernelDeimos 21383eec3c dev: get basic PTY integration working 2024-09-18 16:21:07 -04:00
KernelDeimos 28adc4e5d5 dev: add emulator page 2024-09-18 16:21:07 -04:00
KernelDeimos 41e7526372 dev: add twisp submodule 2024-09-18 16:21:07 -04:00
KernelDeimos 2c0b8428c5 dev: add emulator image build 2024-09-18 16:21:07 -04:00
Nariman Jelveh 95112a9de6 Merge pull request #765 from 4nshuman/issue/737
Added Swedish translation | Other fixes
2024-09-14 09:32:10 -07:00
4nshuman cadd7453c4 added german translation link to the list 2024-09-14 20:17:02 +05:30
4nshuman 50c6e74f99 added swedish translation to the list 2024-09-14 20:16:35 +05:30
4nshuman a45def27a5 fixed translation list alphabetical order 2024-09-14 20:15:59 +05:30
4nshuman 8f6b3c07a9 added swedish translation file 2024-09-14 20:15:09 +05:30
4nshuman cc794fb70b added translation for german alt on image tag 2024-09-14 20:14:52 +05:30
Nariman Jelveh 480a1c440c Merge pull request #763 from bibekp-dev/Issue670/EnglishToGerman
Issue670/english to german
2024-09-12 09:48:08 -07:00
Bibek Panda c204cd366a Created and updated README.de.md for English To German Translation
German translation changes are committed in README.de.md file
2024-09-12 13:03:07 +05:30
Bibek Panda c0b3010192 Create README.de.md 2024-09-12 12:58:03 +05:30
Nariman Jelveh 58040c7596 Merge pull request #762 from the-heidi/patch-1 2024-09-11 20:35:20 -07:00
the-heidi 0743189ddb Update README.ko.md to fix phrasing issues 2024-09-11 20:30:38 -07:00
KernelDeimos 33de98107f fix: email change on account with unverified email
Changing the email address on an account that did not already have a
confirmed email would result in the email_confirmed column never being
set. This commit fixes that.

Additionally, an SQL statement using the unconfirmed email to identify a
row was changed so it now uses the user ID instead, which is safer.

Resolves: 759
2024-09-10 14:04:32 -04:00
Nariman Jelveh d38fb9f0e1 Update README.md 2024-09-10 08:59:41 -07:00
Nariman Jelveh 351b8cca3b Merge pull request #760 from gyarfasB/huntext
feat: hungarian readme translation
2024-09-10 08:53:59 -07:00
Gyárfás Balázs 89d11e3b0f translation-hun-readme 2024-09-10 14:02:10 +02:00
Nariman Jelveh a4a349a64a Update README.md 2024-09-07 09:50:04 -07:00
Nariman Jelveh 11ddbf70c8 Add link to Ukrainian README from the English README 2024-09-07 09:49:40 -07:00
Nariman Jelveh 6e7def5a66 Merge pull request #757 from SergiyZyuzko/translation/ukrainian
Ukrainian Translation added
2024-09-07 09:47:02 -07:00
Sergiy abb44b6d68 Ukrainian Translation added 2024-09-07 16:41:31 +00:00
KernelDeimos cc4ab1cb36 fix: html-webpack-plugin dev dep 2024-09-04 23:56:23 -04:00
KernelDeimos 6bdcae769d fix: double-echo in phoenix 2024-09-04 23:56:23 -04:00
KernelDeimos a33d721e21 fix phoenix WINSZ handling 2024-09-04 23:56:23 -04:00
Nariman Jelveh 7139d29749 Add link to Malayalam README in the English README 2024-09-04 22:03:26 -04:00
Nariman Jelveh 9e988eb012 Merge pull request #753 from rinogodson/malayalam-translation
Add Malayalam translation to README.md
2024-09-04 21:59:43 -04:00
Rino Godson 72c90778e8 Add Malayalam translation to README.md 2024-09-05 07:12:27 +05:30
Nariman Jelveh 64597e28fb temporarily remove lang files for further testing 2024-09-03 14:56:14 -04:00
Nariman Jelveh 1c5f48d451 Merge pull request #741 from Pulkitxm/translation_Ukrainian
translate README.md to Ukrainian
2024-09-03 14:52:59 -04:00
Nariman Jelveh 43eb614499 Merge pull request #743 from Pulkitxm/translation_Dutch
Add Dutch Readme content
2024-09-03 14:52:34 -04:00
Nariman Jelveh 25bb0652b8 Merge pull request #742 from Pulkitxm/translation_Swedish
Add Swedish Readme content
2024-09-03 14:52:24 -04:00
KernelDeimos 4910838ab1 fix: webpack error reporting + unintentional whitespace changes 2024-09-03 14:44:51 -04:00
Nariman Jelveh 57c2d72e21 Update UIWindow.js 2024-09-03 14:24:58 -04:00
Nariman Jelveh 8e56ac5ec7 Update UIWindow.js 2024-09-03 14:14:19 -04:00
Nariman Jelveh 9528cb0614 Add link to Armenian README in the English README 2024-09-03 11:55:05 -04:00
Nariman Jelveh 377c9f04b1 Merge branch 'main' of https://github.com/HeyPuter/puter into main 2024-09-03 11:54:03 -04:00
Nariman Jelveh 9411f994e3 Merge pull request #751 from gng92/patch-1
Create README.hy.md
2024-09-03 11:53:36 -04:00
gng92 e8713dc5a5 Create README.hy.md
Added Armenian translation for ./doc/i18n/README.en.md (issue #735 )
2024-09-03 19:44:42 +04:00
KernelDeimos ed7d6dcbfb fix: dist 2024-09-02 21:30:22 -04:00
KernelDeimos d35026467e fix: use jq el for focus 2024-09-02 20:52:46 -04:00
KernelDeimos cd39bb5aa0 fix: fix sourcemap 2024-09-02 20:50:15 -04:00
KernelDeimos d07929da1b dev: add v86 submodule and app 2024-09-02 20:49:48 -04:00
Nariman Jelveh 1f7a4782d8 Merge branch 'main' of https://github.com/HeyPuter/puter into main 2024-09-02 17:44:24 -04:00
Nariman Jelveh 94ec23b4c7 Remove fa.js temporarily 2024-09-02 17:44:17 -04:00
KernelDeimos 5ab3d88393 cleanup 2024-09-02 17:37:38 -04:00
KernelDeimos 18a24f614f dev: update ipc ready and app launched events 2024-09-02 17:37:38 -04:00
Nariman Jelveh 65c23ecd93 Merge pull request #748 from Sky-De/FarsiReadme
README.en.md translated to Farsi and added to project
2024-09-02 16:02:03 -04:00
skyDe 512f22857a README.en.md translated to Farsi and added to project 2024-09-01 06:18:06 -08:00
Nariman Jelveh 8e5711bf38 add link to Hebrew README 2024-08-31 14:41:49 -04:00
Nariman Jelveh 9acbd09da9 Merge pull request #747 from OrelsProjects/issue-732-translate-readme.md-from-english-to-hebrew
Create README.he.md
2024-08-31 14:41:00 -04:00
Orelsgit 4c936197e7 Create README.he.md 2024-08-31 21:00:25 +03:00
Nariman Jelveh e58de0db84 Merge pull request #746 from fauzipadlaw/main
No need word repetition for gambar  in Indonesian
2024-08-31 13:46:09 -04:00
Muhammad Fauzi 3acabc6c79 Merge branch 'HeyPuter:main' into main 2024-08-31 23:46:25 +07:00
Muhammad Fauzi ddbb4207f2 Update Pictures translation to Gambar, no word repetition for plural
The literal translation for Pictures IS Gambar-gambar, but after reviewing how it looks on live demo Puter, this translation seems a bit off, since other word like Videos is not Video-video, documents is not Dokumen-dokumen.

So, I think it's better to just translate Pictures to Gambar only. Indonesian actually does not care about singular and plural. If we really need to emphasize it plural, we just repeat the word. Which in this context, it is not that necessary to emphasize it.
2024-08-31 23:46:06 +07:00
Pulkit 4d1dd7a6db Add Dutch Readme content 2024-08-31 12:15:07 +05:30
Pulkit 194b150636 Add Swedish Readme content 2024-08-31 12:10:07 +05:30
Pulkit fe5ee39584 Add Ukrainian Readme content 2024-08-31 12:02:58 +05:30
Nariman Jelveh e295f64a90 Update README.md 2024-08-31 00:19:04 -04:00
Nariman Jelveh bb787a9ffc Merge pull request #740 from Pulkitxm/main
translate README.md to finnish
2024-08-30 21:14:52 -07:00
Pulkit ee0f063e22 Add finnish Readme content 2024-08-31 07:50:48 +05:30
KernelDeimos c9d09a78b6 fix: remove now-redundant loadScript call 2024-08-30 15:24:01 -07:00
KernelDeimos 46a0f714d1 fix: env for dev build 2024-08-30 15:24:01 -07:00
KernelDeimos 3092300a01 fix: mistakes 2024-08-30 15:24:01 -07:00
KernelDeimos 4b8910169a fix: add env to EmitPlugin config 2024-08-30 15:24:01 -07:00
KernelDeimos 72946f920c fix: remove accidentally left-over code 2024-08-30 15:24:01 -07:00
KernelDeimos 8ad435a0ea dev: bundle gui in dev 2024-08-30 15:24:01 -07:00
Nariman Jelveh 0d01d1f800 Update package-lock.json 2024-08-29 19:45:05 -07:00
KernelDeimos a4e9c7bdd7 rename folder 2024-08-29 22:24:55 -04:00
KernelDeimos cf24c3dd2a rename 2024-08-29 22:21:07 -04:00
KernelDeimos 3361043b9d chore: rename putil 2024-08-29 14:14:35 -07:00
KernelDeimos 5f7d1f589a fix: don't var when no var 2024-08-29 17:03:51 -04:00
Nariman Jelveh d43fc62d89 Remove menu-aim from the list of statically linked libs 2024-08-29 13:33:37 -07:00
KernelDeimos 1cd21ee658 tweak: cleanup and comment 2024-08-28 19:10:35 -07:00
KernelDeimos c86df11abd dev: launchApp as registered ipc handler
Add launchApp as a registered ipc handler, which will allow communication
between iframes (apps/puter.js) to be simplified.
2024-08-28 19:10:35 -07:00
KernelDeimos 813ee95cee fix: fallback to read access in /sign 2024-08-28 17:53:36 -04:00
Nariman Jelveh fa4bef8873 Update README.md 2024-08-28 14:35:39 -07:00
Nariman Jelveh 2c3d30d119 Merge pull request #727 from EngrAdnanAhmad/README-URDU
Translated README section to Urdu with correct clickable links
2024-08-28 14:34:30 -07:00
EngrAdnanAhmad a17f8408eb Translated README section to Urdu with correct clickable links 2024-08-29 02:26:52 +05:00
Nariman Jelveh f11dd8609d Merge pull request #726 from Zac0511/main
Update README.md
2024-08-28 13:09:24 -07:00
pikagaufre 8e4962beed Update README.md 2024-08-28 20:07:12 +00:00
Nariman Jelveh 18cfef65b8 Attempt to open apps from URL only if user is authenticated and desktop is loaded 2024-08-27 20:02:01 -07:00
KernelDeimos d1d0a9cccc tweak: update license for puter-wisp 2024-08-27 22:40:27 -04:00
KernelDeimos a4766278e4 tweak: package name for @heyputer/puter-wisp 2024-08-27 22:37:22 -04:00
KernelDeimos 2d1cb0050d dev: puter-wisp 2024-08-27 22:20:32 -04:00
Nariman Jelveh 2385457d12 Remove the redundant image/ prefix in base64 encoded app icons in dev center 2024-08-27 18:04:04 -07:00
Nariman Jelveh d285c2097f use flexbox for app navbar in dev center 2024-08-27 17:34:09 -07:00
Nariman Jelveh b1c91758da Fix sort bug in dev center 2024-08-27 17:27:40 -07:00
Nariman Jelveh 45925bacb6 Improve the usability of the Settings tab in Dev Center 2024-08-27 17:11:48 -07:00
KernelDeimos aa61c3009c fix: typo in a default file 2024-08-26 17:43:33 -04:00
KernelDeimos d2c7477b3b fix(docker): ensure temp admin pass shows 2024-08-26 17:42:15 -04:00
Nariman Jelveh 683c20ca7f Add links to Korean and Polish READMEs in the English README 2024-08-26 09:22:39 -07:00
Nariman Jelveh 4eda3244de Merge pull request #719 from VinayakPaka/issue-688
translated README.en.md from English to Polish
2024-08-26 09:19:27 -07:00
Nariman Jelveh 262cbc8de2 Merge pull request #718 from yomalbalooshi/main
Added README.ar.md
2024-08-26 08:51:52 -07:00
VinayakPaka 11304d82c3 translated README.en.md from English to Polish 2024-08-26 20:34:51 +05:30
Yasmeen Albalooshi 577e0d4ed9 Update README.md to have Arabic Translation 2024-08-26 10:54:05 +03:00
Yasmeen 5857248651 Add Arabic Translation file 2024-08-26 10:49:51 +03:00
decipher 155aab57d3 Removed else statement for closing registration in signup.js 2024-08-26 04:59:08 +02:00
Nariman Jelveh da5635b576 Show an error if file containing puter.js is loaded using the file: protocol 2024-08-25 14:38:19 -07:00
KernelDeimos 9a622004ea fix: fix 500 when check-app has bad url 2024-08-25 16:54:19 -04:00
Eric Dubé d8dc3ac122 Update instructions.md 2024-08-25 16:21:48 -04:00
Nariman Jelveh cd2eb656a1 Add link to Thai README in the English README 2024-08-25 12:30:42 -07:00
Nariman Jelveh dd5eff9780 Merge pull request #717 from Panyakornk/patch-1
Create README.th.md
2024-08-25 12:21:39 -07:00
Panyakornk 28a7f0ba1f Create README.th.md 2024-08-26 01:00:44 +07:00
decipher 222d7dede3 Added configuration option for closing registration
Set config.registration_closed=true; in ./src/backend/src/config.js to close registration
2024-08-25 19:28:12 +02:00
decipher 56b73b385d Update README.md 2024-08-25 18:06:21 +02:00
decipher 9c7dc53fc9 Update README.md
Added "Installation on public server"
2024-08-25 18:03:15 +02:00
Nariman Jelveh b43ecb490a Place github link and icon in the toolbar 2024-08-24 11:41:42 -07:00
Nariman Jelveh 3a82d13985 Merge pull request #712 from catalin-lungu/feature/english-to-romanian
Fixes issue #677: Translate README.md from English to Romanian
2024-08-24 10:46:59 -07:00
Catalin ea87223c46 Fixes issue #677: Translate README.md from English to Romanian 2024-08-24 20:31:47 +03:00
Nariman Jelveh 852f2ea944 Update README.md 2024-08-23 23:09:04 -07:00
Nariman Jelveh 9b0bd4f820 Add link to Romanian README in the English README 2024-08-23 23:08:15 -07:00
Nariman Jelveh 5af56a64c1 Merge pull request #711 from Atharva089/main
Added the README.ro.md file
2024-08-23 23:06:53 -07:00
Nariman Jelveh b5e4962e71 Update README.ro.md 2024-08-23 23:06:10 -07:00
Atharva Chavan 02c2801891 Added the README.ro.md file
Translated the README.en.md file from English to Romanian language.
2024-08-24 10:50:37 +05:30
KernelDeimos eb18550f41 fix(puterai): close streams 2024-08-23 19:42:53 -04:00
KernelDeimos 5a616f67dd fix(puterjs): fix settings object check 2024-08-23 16:39:30 -04:00
KernelDeimos 7f9d1e90b1 chore(puterai): update model 2024-08-23 16:09:22 -04:00
KernelDeimos 6cf7d0ae27 doc: update CONTRIBUTING.md 2024-08-23 15:09:25 -04:00
Nariman Jelveh cdc3947585 Merge pull request #709 from fauzipadlaw/main
Add link to Indonesian in main readme
2024-08-23 10:47:06 -07:00
Muhammad Fauzi c1ac30820d Merge branch 'main' of github.com:fauzipadlaw/puter 2024-08-24 00:29:06 +07:00
Muhammad Fauzi 194d0bcc6d Add link to Indonesian Readme in the English Readme 2024-08-24 00:28:27 +07:00
Nariman Jelveh 48324735ee Merge pull request #708 from fauzipadlaw/main
Add README.id.md
2024-08-23 10:18:51 -07:00
Muhammad Fauzi a549fc86bc Add README.id.md 2024-08-24 00:05:28 +07:00
KernelDeimos 53e7a91f18 feat(puterai): add groq 2024-08-23 00:16:29 -04:00
KernelDeimos 937528f767 fix(security): signing in public folders 2024-08-22 23:48:30 -04:00
Nariman Jelveh 2d39b9be77 Update index.js 2024-08-22 20:47:02 -07:00
KernelDeimos 055c628afd feat(puterai): add mistral 2024-08-22 23:28:08 -04:00
KernelDeimos fd86934bc9 feat: add method to list models 2024-08-22 22:24:03 -04:00
Nariman Jelveh 702618f81d Add link to Tamil Readme in the English Readme 2024-08-22 12:52:17 -07:00
Nariman Jelveh 617d7d7f55 Merge pull request #706 from yanniro2/main
Add Tamil readme file
2024-08-22 12:50:50 -07:00
Nariman Jelveh ff02b7bb9f Delete .vscode/settings.json 2024-08-22 12:50:29 -07:00
Nariman Jelveh d4e955a9e0 Add link to French README in the English README 2024-08-22 11:57:53 -07:00
Nariman Jelveh 9de4067e33 Merge pull request #707 from Morraycage/feat/fr-readme
feat(readme): add french readme respecting format and styling
2024-08-22 11:56:28 -07:00
Niroyan Kugaruban 2b507d1dd0 change 2024-08-22 14:47:24 -04:00
Nariman Jelveh 766a388660 fix badge url 2024-08-22 11:45:28 -07:00
Nariman Jelveh d36ef2d770 Fix image tag for the badge 2024-08-22 11:38:19 -07:00
Sayf Roumane 02e7e27796 feat(readme): add french readme respecting format and styling 2024-08-22 20:30:43 +02:00
KernelDeimos 7600d9b07c feat: add streaming to XHR driver client 2024-08-22 14:28:43 -04:00
Niroyan Kugaruban bdd24c69a5 Add Tamil readme file 2024-08-22 13:44:12 -04:00
Nariman Jelveh fa96c6d146 Add link to Bengali README to English README 2024-08-22 08:22:18 -07:00
Nariman Jelveh 502b346039 Merge pull request #705 from Priyanshu1035/readme
Added README.bn.md
2024-08-22 08:16:23 -07:00
Nariman Jelveh 07ca9ff6ea Fix license link 2024-08-22 08:15:27 -07:00
Priyanshu1035 ae1469e760 Merge branch 'readme' of https://github.com/Priyanshu1035/puter into readme 2024-08-22 19:29:49 +05:30
Priyanshu1035 4415e76a0b readmeinbengali 2024-08-22 19:29:10 +05:30
Nariman Jelveh 67e5219639 Merge branch 'main' of https://github.com/HeyPuter/puter into main 2024-08-21 20:59:51 -07:00
Nariman Jelveh 6135054b3b add stream flag to the chat() method of puter.ai 2024-08-21 20:59:42 -07:00
KernelDeimos c08b897d4a fix(puterai): adapt message role for claude 2024-08-21 23:50:09 -04:00
Nariman Jelveh 3bface8c66 if first args in puter.chat is a string, it's the prompt 2024-08-21 20:38:03 -07:00
Nariman Jelveh dadaf5e8b1 Merge branch 'main' of https://github.com/HeyPuter/puter into main 2024-08-21 20:19:34 -07:00
Nariman Jelveh 43c18377eb Add support for multiple AI drivers via puter.js 2024-08-21 20:19:26 -07:00
KernelDeimos 21539a1651 tweak: let driver be called service 2024-08-21 23:18:12 -04:00
KernelDeimos bdfdf2331b feat(puterai): add togetherai 2024-08-21 23:17:02 -04:00
KernelDeimos 7b254e8676 tweak(puerai): add model parameter 2024-08-21 23:15:53 -04:00
KernelDeimos 439f52b5a3 feat(puterjs): add drivers module 2024-08-21 18:31:16 -04:00
KernelDeimos 32f0edb93a feat(api): add /lsmod 2024-08-21 18:31:16 -04:00
KernelDeimos d009cd0aaf feat(puterai): add claude 2024-08-21 18:31:16 -04:00
KernelDeimos 9d5963cdf5 feat(puterai): add streaming 2024-08-21 18:31:16 -04:00
Nariman Jelveh 2678679ab7 Correct the order of README translation links 2024-08-21 14:11:16 -07:00
Nariman Jelveh 7024e2ec91 Add ketboards.js to prod dependencies 2024-08-20 19:51:21 -07:00
Nariman Jelveh 921f522732 Remove redundant console.log 2024-08-20 19:37:35 -07:00
Nariman Jelveh 0b97bff1a2 Open public folders via URL only if deskotp has finished loading 2024-08-20 19:29:11 -07:00
Nariman Jelveh 5caf59f1bc make logger return empty string 2024-08-20 19:05:34 -07:00
KernelDeimos a002ad08e5 fix(security): remove unconfirmed_email from /whoami for apps 2024-08-20 21:42:42 -04:00
Nariman Jelveh b737570f73 Merge pull request #703 from FabioDePalma/ita
added readme file in Italian
2024-08-20 00:19:18 -07:00
FabioDePalma aa610befb1 added readme file in Italian 2024-08-20 09:05:13 +02:00
Nariman Jelveh 45d35eec72 Merge pull request #702 from Sam-SSTU/main
add Chinese, add language tag
2024-08-19 19:36:37 -07:00
Nariman Jelveh a3eb52702d Remove language badges and add link to the Chinese README inside the English README 2024-08-19 19:36:20 -07:00
Sam-SSTU fca88a82cc add Chinese, add language tag 2024-08-20 09:56:16 +08:00
KernelDeimos a7cdb70251 fix: ll_write 2024-08-19 21:27:53 -04:00
Nariman Jelveh 0705c2919f Remove redundant console.log()s 2024-08-19 15:21:51 -07:00
KernelDeimos cb4cab529a fix: don't try to sanitize null owners 2024-08-19 16:46:49 -04:00
KernelDeimos 3d92d0c619 tweak: show full scan in dev console 2024-08-19 14:50:32 -04:00
KernelDeimos 14820481b9 fix: missing key for feature flag perm check 2024-08-19 14:49:17 -04:00
KernelDeimos 6b4a19e12a fix: implicit app permissions bug 2024-08-19 00:58:23 -04:00
KernelDeimos 48fea77a20 fix: share services and features with apps 2024-08-18 22:44:27 -04:00
KernelDeimos 3819584d11 fix: admin user public folder 2024-08-18 15:55:01 -04:00
KernelDeimos 2386d87229 feat: add writable attribute to fs items 2024-08-18 15:55:01 -04:00
Nariman Jelveh fc26f88e60 Add link to the Vietnamese README in the English README 2024-08-18 11:22:17 -07:00
Nariman Jelveh d6c0af0b88 Merge pull request #700 from Priyanshu1035/readme
Added Readme in Vietnamese
2024-08-18 11:19:33 -07:00
Nariman Jelveh 625ae0eade Fix URL encoding of Vietnamese string 2024-08-18 11:18:42 -07:00
Priyanshu1035 380e946bbf updated PR to revert accidental changes 2024-08-18 23:23:58 +05:30
KernelDeimos b6b64d3bcc fix: add anti-csrf token for /revoke-session 2024-08-18 01:07:04 -04:00
KernelDeimos 9fa12d43fc fix: only show 2fa when available 2024-08-18 00:42:58 -04:00
KernelDeimos 6e325fa000 fix: requirement for email_confirmed in backend 2024-08-18 00:42:58 -04:00
Nariman Jelveh 38a6793c16 Merge pull request #698 from jsdmas/korean-language 2024-08-17 20:12:35 -07:00
JinHo Jang 11fb02c67b Create README.ko.md 2024-08-18 11:55:53 +09:00
KernelDeimos ef245b70df fix: do primary read of user after setting email_confirmed 2024-08-17 17:20:31 -04:00
KernelDeimos 0519b4a71b fix: require confirmed email for public folder 2024-08-17 16:36:59 -04:00
Nariman Jelveh 3f520e13f3 remove cover iframe for public folders 2024-08-17 12:29:32 -07:00
KernelDeimos ceecf54357 chore: sync versions 2024-08-17 15:13:12 -04:00
Nariman Jelveh 4e37064f47 fix issues public folder paths 2024-08-17 11:34:53 -07:00
Nariman Jelveh 88e8e33dc2 take into account feature flags for sharing 2024-08-17 11:11:36 -07:00
Nariman Jelveh 54d248e40b Add link to Turkish README in the English Readme 2024-08-17 09:53:38 -07:00
Nariman Jelveh 933ff7f1d0 Merge pull request #695 from emrhngngr/turkish-language
Created Read.me in Turkish.
2024-08-17 09:22:39 -07:00
Nariman Jelveh f43b52b0e1 fix the markdown link for the license 2024-08-17 09:15:00 -07:00
Emirhan 1c0adfc89a Created Read.me in Turkish. 2024-08-17 13:50:52 +03:00
KernelDeimos 4561b8937d feat: report feature flags in /whoami 2024-08-15 19:14:59 -04:00
Nariman Jelveh 8e39f41dd4 Encode Japanese string in the badge URL in README 2024-08-15 15:11:23 -07:00
Nariman Jelveh 8cb415675b Add link to Japanese README in the English Readme 2024-08-15 15:06:55 -07:00
Nariman Jelveh 276ace9f51 Merge pull request #691 from calreed-prof/main
Translate README.md to japanese
2024-08-15 15:04:24 -07:00
calreed-prof ac673cfae5 Created README.jp.md 2024-08-15 15:58:07 -06:00
Nariman Jelveh ada4bf9bbd Merge pull request #690 from abhishekpaturkar/issue-666-readme-hindi
added readme translation into hindi
2024-08-15 12:15:28 -07:00
abhishekpaturkar 70bf4bdfa1 translate README.md into hindi 2024-08-15 23:01:29 +05:30
Nariman Jelveh c5d112248a Merge pull request #689 from eltociear/patch-4
chore: update SystemFSEntryService.js
2024-08-15 08:38:46 -07:00
Ikko Eltociear Ashimine 959a0f4e39 chore: update SystemFSEntryService.js
propery -> property
2024-08-16 00:25:30 +09:00
KernelDeimos d032ab7d24 chore: update tiktoken 2024-08-14 21:08:29 -04:00
KernelDeimos a821dc67d5 tweak: add driver to implicit admin permissions 2024-08-14 19:42:57 -04:00
Nariman Jelveh 471514ea43 Add link to Spanish README in the English Readme 2024-08-14 15:05:51 -07:00
Nariman Jelveh 81cba63ea8 Merge pull request #685 from juank0205/issue-664-readme-spanish
translate README.md to spanish
2024-08-14 15:04:03 -07:00
KernelDeimos 209555c1d9 feat: make public folders a config opt-in 2024-08-14 17:20:49 -04:00
KernelDeimos 461ea3eae6 feat: add feature flag for /share 2024-08-14 17:20:49 -04:00
KernelDeimos d4319ea072 fix: sqlite condition in MonthlyUsageService 2024-08-14 17:20:09 -04:00
juank0205 0d3af0048f translate README.md to spanish 2024-08-14 16:09:26 -05:00
Nariman Jelveh bf4ba3f1d6 Update README.md 2024-08-14 12:38:00 -07:00
Nariman Jelveh df8ec416cd Merge pull request #683 from NFFY88/fix-readme-links
fix broken links in readme
2024-08-14 12:18:03 -07:00
Danil Buslaev 11695846fa fix broken links in readme 2024-08-14 21:34:44 +03:00
Nariman Jelveh 4cd94df90c Use the correct local dev address in README files 2024-08-14 10:54:09 -07:00
Nariman Jelveh 4a553ca67c Merge pull request #681 from NFFY88/russian-readme 2024-08-14 10:13:38 -07:00
Danil Buslaev 82dec20c07 added translation link to readme 2024-08-14 19:45:14 +03:00
Danil Buslaev 93d475b6b3 added readme translation into Russian 2024-08-14 19:20:18 +03:00
Nariman Jelveh c98d1ca25e Add link to the Portuguese README in the English README 2024-08-14 08:23:09 -07:00
Nariman Jelveh eea26207af Merge pull request #680 from TatianaMagnus/672-add-readme-portuguese-translation
672 Adding readme portuguese translation
2024-08-14 08:20:51 -07:00
Tatiana Magnus Vianna 3dd3ae02ae Adding readme portuguese translation 2024-08-14 11:51:38 -03:00
Nariman Jelveh 4f8786fc8f Add link to Danish README in the English Readme 2024-08-14 07:40:37 -07:00
Nariman Jelveh 94124eb576 Merge pull request #679 from JesHansen/issue/678-translate-readme-to-danish
Add Danish translation of README.en.md
2024-08-14 07:30:20 -07:00
Jes Bak Hansen ebaec99741 Add Danish translation of README.en.md 2024-08-14 15:40:45 +02:00
Nariman Jelveh f7924f30bc Create README.en.md 2024-08-14 00:59:58 -07:00
Nariman Jelveh f00e0cf4a6 Add YouTube link to README.md 2024-08-13 20:42:40 -07:00
Nariman Jelveh 448da65366 Merge pull request #662 from looz0/patch-1
Add security email to contact section
2024-08-12 19:33:24 -07:00
looz0 902bde3c2d Add security email to contact section 2024-08-12 19:20:21 -07:00
Nariman Jelveh e44d3d8133 Merge pull request #661 from Ranegg/Ranegg-fi-translations
Added Finnish translations related to issue #536
2024-08-12 10:04:01 -07:00
Ranegg cb8d0fa011 Added Finnish translations related to issue #536 2024-08-12 19:35:41 +03:00
Nariman Jelveh 5c7701d5de Merge pull request #659 from JoelSjogren/fix-548
completed translation english to swedish in sv.js
2024-08-11 09:59:42 -07:00
Joel Sjögren 0c4690e39c completed translation english to swedish in sv.js 2024-08-11 10:54:57 +02:00
Nariman Jelveh 37edb78fe9 Merge pull request #658 from NGunjyal01/fix/533/Translation-English-To-Danish
completed translation english to danish in da.js
2024-08-10 16:30:46 -07:00
KernelDeimos 3f07ead1b9 fix: add context to event listener aiife 2024-08-09 16:50:39 -04:00
unknown 00e8b81d16 completed translation english to danish in da.js 2024-08-09 23:16:52 +05:30
Nariman Jelveh 2898ff681f Merge pull request #657 from NGunjyal01/fix/531-Translatio-English-To-Portuguese
Completed Translation of English To Portuguese(Portugal)
2024-08-09 09:37:36 -07:00
unknown 200cc4680b Completed Transaltion of English To Portuguese from Portugal 2024-08-09 20:34:23 +05:30
KernelDeimos e60632343b sync: cross origin + small gui updates 2024-08-08 21:24:10 -04:00
KernelDeimos 783cf57934 sync: update hardcoded permissions 2024-08-08 17:23:30 -04:00
KernelDeimos 5b74b4affa fix: missing method in SLink 2024-08-08 17:22:34 -04:00
KernelDeimos e2f35b4844 dev: CLink and SLink classes 2024-08-08 15:13:32 -04:00
KernelDeimos c213b21bee move: BroadcastService to [+] BroadcastModule 2024-08-08 15:13:32 -04:00
KernelDeimos cea29645fe feat: add message encryption between Puter peers 2024-08-08 15:13:32 -04:00
KernelDeimos 476acae0e0 fix: disable unconfigured ai services 2024-08-05 16:04:25 -04:00
KernelDeimos c97688706e tweak: add boot error help 2024-08-05 15:59:09 -04:00
KernelDeimos 7aece26f4b tweak: add default driver mapping 2024-08-03 21:07:56 -04:00
KernelDeimos 9a9bd5eaf0 feat: add test_mode flag 2024-08-03 21:07:56 -04:00
KernelDeimos 78fa77d920 feat: add tts driver to puterai module 2024-08-03 21:07:56 -04:00
KernelDeimos fb26fdbc56 feat: add image generation driver to puterai module 2024-08-03 21:07:56 -04:00
KernelDeimos 4e3bd1831e feat: add chat completions driver to puterai module 2024-08-03 21:07:56 -04:00
KernelDeimos ef6671da18 feat: add --overwrite-config and configurable uuid masking
This is in preparation for the chat completions driver. OpenAI asks that
a user ID be provided in requests when service is being provided to
other users, so we deterministically generate different UUIDs for this
purpose to prevent user information from being exposed.
2024-08-03 21:07:56 -04:00
KernelDeimos f924d48b02 feat: add textract driver to puterai module 2024-08-03 21:07:56 -04:00
KernelDeimos b520783bf4 fix: add missing driver parameter to /call endpoint 2024-08-03 21:07:56 -04:00
KernelDeimos 1f059c330c dev: update FileFacade to use LLRead 2024-08-03 21:07:56 -04:00
Nariman Jelveh 475eb13fb3 add checkmark to selected language in the settings window 2024-08-02 14:00:44 -07:00
Nariman Jelveh 5db00abeaf Merge pull request #654 from Razy-F/Hebrew-translation 2024-08-02 08:01:06 -07:00
Nariman Jelveh fcb38aee87 Update translations.js to add Hebrew files 2024-08-01 23:53:56 -07:00
Razy F fa2702183c Add the new he.js translation filee 2024-08-02 09:06:34 +03:00
Nariman Jelveh a2255521f2 Escape rootItems in Dev Center before printing 2024-08-01 18:54:10 -07:00
Nariman Jelveh 09289b5004 Update README.md 2024-08-01 17:04:45 -07:00
Nariman Jelveh 53b67b3631 Merge pull request #650 from de1eb/main
Updated Korean translation file
2024-08-01 00:14:15 -07:00
Nariman Jelveh 11658beb18 Merge branch 'main' into main 2024-08-01 00:03:03 -07:00
Nariman Jelveh ed4d74d27d Merge pull request #648 from ljyamada/issue514
Complete Korean translation #541
2024-07-31 23:53:54 -07:00
Noru V e8b57debe9 Updated plural suffix problem related to showing the number of items when you use Explorer 2024-08-01 11:09:18 +09:00
Noru V 1063b6c1ab Updated Korean translation file 2024-08-01 10:28:24 +09:00
haruto eeda878554 Complete Korean translation #541
Complete Korean translation based on English file #541
2024-08-01 10:00:19 +09:00
Nariman Jelveh b35428ddd3 Merge pull request #646 from RandomStrangerOnTheInternet/main
Update Dutch translations
2024-07-31 17:07:16 -04:00
KernelDeimos 8b11937365 dev: fix incomplete support for multipart driver requests 2024-07-31 17:06:50 -04:00
KernelDeimos 7a09c5c47a doc: add example requests 2024-07-31 17:06:50 -04:00
KernelDeimos c28f2cb4df dev: add service to test images through drivers 2024-07-31 17:06:50 -04:00
Nariman Jelveh ade66bd1da escape unescaped single quote causing syntax error 2024-07-31 17:04:22 -04:00
RandomStrangerOnTheInternet c7ab7e04a6 Update Dutch translations (fixes https://github.com/HeyPuter/puter/issues/543) 2024-07-31 22:56:36 +02:00
Nariman Jelveh 1e753843d2 Remove some of the unused component imports 2024-07-28 12:41:52 -07:00
KernelDeimos 02504690cf test: add database migration tests 2024-07-28 04:02:16 -04:00
KernelDeimos d0e461e206 fix: sqlite migrations error
This issue was caused by an INSERT statement which adds the admin user
to the admin group. The admin user is created at initialization, so for
new installs it does not exist at the time migration scripts are run.
Additionally, new javascript-coded migrations (.mig.js) would not have
run for new installs because of redundant (WET; not DRY) code for
initial setup.

This commit also improves error handling of the migration service, which
was necessary to diagnose this issue.

In the future, setup always needs to be tested after updating migration
scripts, even though migration of existing databases is where most of
the issues will happen.

Resolves: #639
2024-07-27 18:54:17 -04:00
Nariman Jelveh 1c5ef01668 Merge pull request #640 from BryarGh/edit-kurdish-template
Update Kurdish language template
2024-07-27 14:47:04 -07:00
Nariman Jelveh c717746646 Use the english version of the license header but retain the credit to Bryar Ghafoor 2024-07-27 14:07:24 -07:00
Bryar Ghafoor fe119756b5 Update Kurdish language template 2024-07-27 23:19:24 +03:00
KernelDeimos 70787ffa2c tweak: print new password when resetting pass via server console 2024-07-26 22:43:11 -04:00
Nariman Jelveh 840436a04c Merge pull request #638 from fauzipadlaw/main
Add Indonesian Translation for i18n
2024-07-26 12:54:05 -07:00
Muhammad Fauzi 033643b0e7 feat: Add Indonesian Translation for i18n 2024-07-27 02:45:05 +07:00
KernelDeimos 654e0b9333 move: move selfhosting-related services to a module 2024-07-26 01:23:22 -04:00
KernelDeimos 6213806aba dev: move driver arg types to a registry 2024-07-25 23:19:54 -04:00
KernelDeimos af3180a57f dev: add monthly usage to new call method 2024-07-25 23:19:54 -04:00
KernelDeimos 8be7a7d219 dev: add logical rate-limit to new call method 2024-07-25 23:19:54 -04:00
KernelDeimos 780a993465 dev: move policy selection to call_new_ 2024-07-25 23:19:54 -04:00
KernelDeimos ea409d1578 dev: begin using Invoker for driver calls 2024-07-25 23:19:54 -04:00
KernelDeimos 20b58ddcb5 dev: add Invoker 2024-07-25 23:19:54 -04:00
KernelDeimos 9e38e048c1 dev: prepare to implement policy enforcer 2024-07-25 23:19:54 -04:00
KernelDeimos e514dfcf50 fix: prevent large logs from service events (2) 2024-07-25 23:19:54 -04:00
KernelDeimos d5ec40078f dev: begin adding new driver call method 2024-07-25 23:19:54 -04:00
KernelDeimos e0d30f041b dev: move implied system perms 2024-07-25 23:19:54 -04:00
KernelDeimos 984ae9e6a2 feat: add password reset from server console 2024-07-25 23:19:54 -04:00
KernelDeimos 580fbdb113 tweak: record time for permission scans 2024-07-25 23:19:54 -04:00
KernelDeimos cca19ad495 dev: remove svc_permission.check 2024-07-25 23:19:54 -04:00
KernelDeimos 191be84e32 dev: migrate svc_permission check() to scan() 2024-07-25 23:19:54 -04:00
KernelDeimos 3b85e4eeba dev: migrate ACLService to use scan() 2024-07-25 23:19:54 -04:00
KernelDeimos a0f0151446 dev: improve permission scan reading 2024-07-25 23:19:54 -04:00
KernelDeimos 4a6055d239 dev: add user-app to permission scanning 2024-07-25 23:19:54 -04:00
KernelDeimos 54471fada9 feat: add server command to scan permissions 2024-07-25 23:19:54 -04:00
KernelDeimos c9ded89b22 feat: grant user driver perms from admin 2024-07-25 23:19:54 -04:00
KernelDeimos f0c36a1cdf feat: replace default_user with admin 2024-07-25 23:19:54 -04:00
KernelDeimos d1261460ba dev: obtain driver permission from system user 2024-07-25 23:19:54 -04:00
KernelDeimos ab156297a7 feat: add system user 2024-07-25 23:19:54 -04:00
KernelDeimos 2cd68100d2 refactor: add traits and services as drivers 2024-07-25 23:19:54 -04:00
KernelDeimos 8beda66328 data: add extra sound 2024-07-25 18:28:16 -04:00
KernelDeimos 5fee393b67 data: add startup and shutdown chimes 2024-07-25 18:01:10 -04:00
Nariman Jelveh f30bbbd375 Add translation template for Kurdish 2024-07-25 14:48:12 -07:00
Nariman Jelveh e7c72e079b Merge pull request #633 from Zac0511/main
Add badges
2024-07-25 10:36:35 -07:00
Zac0511 6cfea963a0 Add badges
Added install badges, Puter.js badges, and source Figma files
2024-07-25 17:33:10 +02:00
Nariman Jelveh a28df490ba Merge pull request #632 from Zac0511/patch-2
Update README.md
2024-07-25 08:07:41 -07:00
Zac0511 5c49e83378 Update README.md
Added the license shield
2024-07-25 13:00:28 +02:00
Zac0511 d22abb36cb Update README.md
Added two shields displaying the repo size and latest version, and gets updated automatically
2024-07-25 12:22:24 +02:00
Nariman Jelveh 8a5302c8e2 Merge pull request #619 from secondtruth/issue-template-meta
Add issue template for meta suggestions
2024-07-24 16:34:46 -07:00
Nariman Jelveh 9250e23d96 Update meta.md 2024-07-24 16:34:33 -07:00
Zac0511 bef38dfc96 meta: Create config.yml to add Puter Discord to the issue screen (#631)
This adds a config file which will show the Puter Discord Server in the issue menu, allowing users to quickly ask help on the Puter Discord
2024-07-24 16:24:19 -04:00
Nariman Jelveh 22d7134802 Pass window.crossOriginIsolated value to the popup 2024-07-24 12:36:19 -07:00
KernelDeimos 48c819ac73 chore: update SLA for chat model
Resolves: #630
2024-07-24 13:35:26 -04:00
KernelDeimos fa9cc8efcf fix: prevent large logs from service events (1) 2024-07-24 02:31:45 -04:00
KernelDeimos 5d5f5660b4 feat: add options to disable winston and devwatch 2024-07-24 01:52:07 -04:00
Nariman Jelveh cc0800d60a Remove unnecessary console.log calls 2024-07-22 19:43:50 -07:00
KernelDeimos 203669a79f release: v2.4.2 2024-07-22 20:23:40 -04:00
Nariman Jelveh f8b39630ab Merge pull request #628 from HeyPuter/eric/fix-templates
Write contents from template when creating a file from a tempalte
2024-07-22 16:53:01 -07:00
Nariman Jelveh 5d58764316 Use join. to build target path 2024-07-22 16:38:45 -07:00
KernelDeimos 5d2a6fce30 fix: fix templates 2024-07-22 17:10:58 -04:00
Nariman Jelveh 1f7f094282 Merge pull request #627 from Koppeks/koppeks/templates_folder_contextmenu
Templates folder feature
2024-07-22 11:33:02 -07:00
Nariman Jelveh d8dd218089 Don't show No templates found for now. 2024-07-22 11:31:01 -07:00
Nariman Jelveh a9801fc10d place available_templates call in update_auth_data to guarantee that user object exists 2024-07-22 11:07:57 -07:00
Nariman Jelveh 2d5a0bb894 closes #614 2024-07-21 17:01:24 -07:00
Koppeks a0113788f9 remove extra comments 2024-07-21 17:32:33 -03:00
Nariman Jelveh 5cf74a0ad9 Merge pull request #624 from enweazudaniel/main
Update ig.js
2024-07-21 09:18:31 -07:00
enweazudaniel 382fb24dbb Update ig.js 2024-07-21 17:04:33 +01:00
KernelDeimos 8f87770ceb fix: popup login in co isolation mode 2024-07-20 20:46:03 -04:00
KernelDeimos 2a5cec7ee9 fix: add necessary iframe attributes for co isolation 2024-07-20 18:54:08 -04:00
Nariman Jelveh 1579cbccf0 Merge pull request #620 from pvhuwung/i18n/vietnamese-translation
Add Vietnamese Translation for i18n
2024-07-20 14:12:24 -07:00
pvhuwung 02e1b1e8f5 chore: fix confirm for type_confirm_to_delete_account 2024-07-21 04:03:37 +07:00
Pham Viet Hung *David f4a45d74e7 Merge branch 'HeyPuter:main' into i18n/vietnamese-translation 2024-07-21 04:53:48 +08:00
pvhuwung c2d3d69dbe feat: add vietnamese localization-a 2024-07-21 03:53:14 +07:00
Nariman Jelveh 71f4b4d71f When setting size/position of app window make sure it's not an empty string 2024-07-20 13:34:36 -07:00
Nariman Jelveh 452b7495b1 use app-request as label for app idea issues 2024-07-20 11:46:20 -07:00
Nariman Jelveh ace14e99fa Merge pull request #618 from secondtruth/issue-template-app-idea
Add issue template for app ideas
2024-07-20 11:41:50 -07:00
Christian Neff fe63839bbb Add issue template for meta suggestions 2024-07-20 19:38:22 +02:00
Christian Neff b3c1b128e2 Add issue template for app ideas 2024-07-20 18:09:37 +02:00
Nariman Jelveh b6a433ce0c Merge pull request #616 from stariver1862/patch-1
Complete Traditional Chinese translation based on English file #550
2024-07-20 08:06:07 -07:00
Nariman Jelveh 3a09e84838 fix: syntax error and formatting issue 2024-07-20 08:05:14 -07:00
Nariman Jelveh 4990ba01cc Merge branch 'main' into patch-1 2024-07-20 07:47:38 -07:00
Nariman Jelveh 6b5c31ddfe Merge pull request #615 from mlgzackfly/update-translations
fix(i18n): Complete Traditional Chinese translation based on English file #550
2024-07-20 07:33:49 -07:00
WHL b9e73b7288 Update zhtw.js, Complete Traditional Chinese translation based on English file #550 2024-07-20 22:18:05 +08:00
mlgzackfly 37fd666a9a fix(i18n): update zhtw.js to match en.js 2024-07-20 19:36:45 +08:00
Koppeks f897e84498 Temporal commit for issue #432 2024-07-19 19:42:47 -03:00
Nariman Jelveh eae51e945b Merge branch 'main' of https://github.com/HeyPuter/puter into main 2024-07-19 13:11:35 -07:00
Nariman Jelveh 98e69642d0 fix: launch_app not considering explorer as a special case 2024-07-19 13:11:26 -07:00
Nariman Jelveh 45c29b6220 Merge pull request #611 from Alfika07/main
Fixed Tamil translation
2024-07-19 08:52:58 -07:00
Nariman Jelveh f2bb551e75 Change english_name from English to Tamil 2024-07-19 08:52:19 -07:00
Alfika07 8a3d0430f3 Add Tamil translation to translations.js 2024-07-19 09:46:04 +02:00
Alfika07 333d6e3b65 Move Tamil translation to the rest of translations 2024-07-19 09:43:23 +02:00
KernelDeimos e58da265ba try cross-origin isolation only on sites 2024-07-18 20:58:09 -04:00
KernelDeimos 7043b9400c fix: well kinda (HOSTNAME in phoenix) 2024-07-18 20:16:08 -04:00
Nariman Jelveh eeda9fb568 close #409 2024-07-18 16:06:45 -07:00
KernelDeimos ae25711a13 update package.json for local testing 2024-07-18 17:02:31 -04:00
KernelDeimos 602a19895c fix: it was github actions the entire time 2024-07-18 16:58:36 -04:00
KernelDeimos 614f2c5061 fix: fix CI attempt #7 2024-07-18 16:44:11 -04:00
KernelDeimos 9d549b192d fix: fix CI attempt #6 2024-07-18 16:38:56 -04:00
KernelDeimos 74adcddc1d fix: fix CI attempt #5 2024-07-18 16:36:44 -04:00
Nariman Jelveh 5a4328e449 Update Dockerfile 2024-07-18 13:33:02 -07:00
Nariman Jelveh 8b5f58c156 Merge branch 'main' of https://github.com/HeyPuter/puter into main 2024-07-18 13:30:14 -07:00
Nariman Jelveh d9a90a67c1 let me try fixing mocha! 2024-07-18 13:30:05 -07:00
KernelDeimos 84b993bce9 fix: fix CI attempt #4 2024-07-18 16:27:36 -04:00
KernelDeimos 3bca973f5f fix: fix CI attempt #3 2024-07-18 16:20:57 -04:00
KernelDeimos aebe89a1ac fix: fix CI attempt #2 2024-07-18 16:16:31 -04:00
KernelDeimos 58c199c153 fix: run mocha within packages in monorepo 2024-07-18 16:10:45 -04:00
Nariman Jelveh 82fa2d0862 close #169 2024-07-18 13:01:14 -07:00
KernelDeimos ad3d318d07 fix: make webpack output not look like errors 2024-07-18 14:50:53 -04:00
KernelDeimos e539932070 feat: add cross_origin_isolation option 2024-07-18 14:23:03 -04:00
KernelDeimos 8c8904cb36 doc: update documentation for boot sequence 2024-07-18 14:23:03 -04:00
Nariman Jelveh f9333b3d1e feat: add option to disable temporary users 2024-07-18 12:59:42 -04:00
KernelDeimos ba50d0f96d feat: add some default groups 2024-07-18 01:08:49 -04:00
Nariman Jelveh 8e7306c23b Add support for dropping multiple Puter items onto Dev Center (close #311) 2024-07-17 20:56:36 -07:00
Nariman Jelveh e6833253c7 close #276 2024-07-17 20:14:07 -07:00
Nariman Jelveh 4d6edff169 Escape arguments passed to dev-center 2024-07-17 18:32:02 -07:00
KernelDeimos 29f919c98a sync: package-lock.json 2024-07-17 17:15:29 -04:00
Nariman Jelveh 45f131f8ea No scrollbar for session list 2024-07-17 14:05:49 -07:00
Nariman Jelveh d80f2fa847 fix: fix path issues under win32 platform 2024-07-17 13:36:22 -07:00
KernelDeimos 5c636d4fd2 fix: remove abnoxious debug file 2024-07-17 13:55:55 -04:00
Nariman Jelveh f28836180e Merge pull request #603 from ohm69/pl-trans
Translation improvements, mainly style and context-based
2024-07-17 08:06:30 -07:00
Michal Hobot 8bece96f62 Translation improvements, mainly style and context-based
After using a Polish-translated puter I found out several places for improvement
2024-07-17 15:43:23 +02:00
Nariman Jelveh 6c29427e16 close #174 2024-07-16 19:06:46 -07:00
Nariman Jelveh 9bfee0862f Merge pull request #600 from Koppeks/koppeks/translation-es
Translation to Spanish
2024-07-16 18:14:44 -07:00
Nariman Jelveh 9d8a46814d Merge pull request #597 from bryanthaboi/main
Directions for Windows / Docker Composer
2024-07-16 16:38:42 -07:00
Nariman Jelveh c19c18bfcf Bring both Windows and Linux/Mac instructions under Docker Compose 2024-07-16 16:32:42 -07:00
Koppeks 151527825f update translation file es.js to be up to date with the file en.js 2024-07-16 20:30:42 -03:00
Nariman Jelveh cc4c93b77f Update README.md 2024-07-16 15:56:59 -07:00
Nariman Jelveh 3ca92955cb Make the screenshot a little larger 2024-07-16 15:56:37 -07:00
Nariman Jelveh 9bc427ced2 Merge pull request #598 from ohm69/patch-1
Translate en.js as of 2024-07-10
2024-07-16 09:09:44 -07:00
Michal Hobot 8e297cd7e3 Translate en.js as of 2024-07-10 2024-07-16 17:55:34 +02:00
bryanthaboi 5833b391f1 Update README.md 2024-07-16 09:17:35 -04:00
bryanthaboi 64e4299ac0 Update README.md 2024-07-16 09:10:38 -04:00
KernelDeimos 747d7dea89 Update SECURITY-ACKNOWLEDGEMENTS.md 2024-07-15 20:03:14 -04:00
Nariman Jelveh c80526900b Merge pull request #594 from Szab54/patch-1
Update translations.js to Hungarian lang
2024-07-15 12:39:07 -07:00
Nariman Jelveh 1b12a413fe Merge pull request #595 from Szab54/patch-3
Create hu.js hungarian language
2024-07-15 12:38:33 -07:00
XYCert 69a80ab3d2 Create hu.js hungarian language 2024-07-15 21:04:38 +02:00
XYCert 56820cf6ee Update translations.js to Hungarian lang 2024-07-15 20:58:31 +02:00
KernelDeimos a259755fe5 Fix broken link 2024-07-15 13:22:15 -04:00
KernelDeimos 7a12e699de Update SECURITY-ACKNOWLEDGEMENTS.md 2024-07-15 13:21:05 -04:00
Nariman Jelveh 7f0365202e Merge pull request #593 from Varun710/tamil-translation
Tamil translation
2024-07-14 22:36:13 -07:00
Varun710 81781f80af Tamil translation 2024-07-15 00:27:35 -05:00
Nariman Jelveh 93f4e52983 Update README.md to add Mastodon link 2024-07-14 16:43:56 -07:00
Nariman Jelveh b52c31133e Merge pull request #591 from LNLenost/patch-1
Fixed grammar issues/untranslated stings in italian translation
2024-07-14 10:44:37 -07:00
LNLenost 84e31eff2f Update it.js 2024-07-14 19:34:09 +02:00
Nariman Jelveh 46cbe077bc Merge pull request #590 from narek-gh/armenian-translation
Update Armenian translation based on English file
2024-07-13 14:25:31 -07:00
Narek 3b8af7cc5c Update Armenian translation file 2024-07-14 00:11:15 +04:00
Nariman Jelveh 9afb1b78b8 Fix blackfortresslabs.com URL 2024-07-11 18:36:29 -07:00
Nariman Jelveh ae04a09c90 Take into account that godmode might be either integer or boolean 2024-07-11 18:07:09 -07:00
KernelDeimos e8f4c328bf fix: read_only fields in ES 2024-07-11 21:00:14 -04:00
Nariman Jelveh 7b4e95139f Shorten Reddit link 2024-07-11 17:24:57 -07:00
KernelDeimos 6a2fbc1925 fix(security): hoist acl check in ll_read 2024-07-11 20:09:39 -04:00
KernelDeimos ab74f1ee8d release: v2.4.1 2024-07-11 19:41:08 -04:00
Nariman Jelveh b790bab9c0 Merge pull request #585 from HeyPuter/eric/rename-traits-to-features
refactor(backend): rename traits to features
2024-07-11 14:37:12 -07:00
KernelDeimos f7d15bae41 refactor(backend): rename traits to features 2024-07-11 16:50:09 -04:00
Nariman Jelveh 01a248e96e Merge pull request #579 from Waheed4719/issue#530
Issue#530 - Update bengali translations
2024-07-10 17:55:59 -07:00
Waheed Uddin Ahmed cff488f4f4 Update bn.js file formatting 2024-07-11 06:46:34 +06:00
Waheed Uddin Ahmed 92abc9947f Issue#530 - Update bengali translations 2024-07-11 06:42:52 +06:00
KernelDeimos 7aadae58ce fix: remove flag that breaks puter-js webpack 2024-07-10 17:18:54 -04:00
KernelDeimos 5b1924f312 chore: remove duplicate headers 2024-07-10 16:53:54 -04:00
KernelDeimos e6e92dc7b2 dev(license-headers): add dupe detector 2024-07-10 16:50:41 -04:00
KernelDeimos 6728dd2571 dev(license-headers): fix excludes list 2024-07-10 16:25:14 -04:00
KernelDeimos 2bf9f60bb0 dev(license-headers): implement skip and replace 2024-07-10 16:12:09 -04:00
KernelDeimos d0a5a57c88 dev(tools): add conflict prompt to license-headers 2024-07-10 14:57:39 -04:00
Nariman Jelveh f006c9ed26 Rename #DoesItRunPuter?.md to #DoesItRunPuter.md 2024-07-10 11:53:11 -07:00
Nariman Jelveh 6013466bcb Rename DoesItRunPuter.md to #DoesItRunPuter?.md 2024-07-10 11:52:34 -07:00
Nariman Jelveh 435e1786a3 Rename doesitrunputer.md to DoesItRunPuter.md 2024-07-10 11:38:56 -07:00
Nariman Jelveh e96bba850f move #DoesItRunPuter from README.md to ./awesome 2024-07-10 11:38:03 -07:00
Nariman Jelveh 2378f1a833 Delete .vscode directory 2024-07-10 11:30:15 -07:00
KernelDeimos 713b1f5889 dev(tools): add missing header adding to license-headers 2024-07-10 14:10:31 -04:00
KernelDeimos fac08c4152 doc: remove extra log in doc snippet 2024-07-10 13:52:20 -04:00
Nariman Jelveh 059a1fe565 Merge pull request #576 from sbondor/fix/romanian-translations
Added missing Romanian translations.
2024-07-10 10:43:59 -07:00
Sergiu Bondor 8440f566b9 Added missing Romanian translations. 2024-07-10 19:49:45 +03:00
Nariman Jelveh adb0f9dc23 Merge pull request #575 from xslendix/main
Add Romanian translations
2024-07-10 06:25:05 -07:00
Slendi 473b6512c6 Add 2FA Romanian translations
Signed-off-by: Slendi <[email protected]>
2024-07-10 11:37:06 +03:00
KernelDeimos 67139ef91b dev(tools): add license header adder thingy 2024-07-10 00:41:08 -04:00
Nariman Jelveh c76af1ab21 Merge pull request #574 from askdkc/japanese-translation
Add Japanese translation
2024-07-09 19:29:31 -07:00
askdkc 31748506b7 Create ja.js for Japanese Translation 2024-07-10 11:22:16 +09:00
askdkc 47ec74f0aa Add Japanese Translation 2024-07-10 11:20:29 +09:00
Nariman Jelveh 5e4582dda6 Update README.md 2024-07-09 19:18:14 -07:00
Nariman Jelveh 3bd3be7dee Update README.md 2024-07-09 19:15:50 -07:00
Nariman Jelveh e5243ec560 Delete .github/ISSUE_TEMPLATE/driver-request.md 2024-07-09 19:05:04 -07:00
Nariman Jelveh e745f67273 Add 'Support' section to README.md 2024-07-09 19:04:09 -07:00
Nariman Jelveh 831b2e259e Add ladybird to #DIRP and move the license section to the bottom 2024-07-09 16:54:54 -07:00
Nariman Jelveh 069b5e0033 Merge pull request #573 from HeyPuter/fix-CI-network-issues
Move `.commit` to `/tools`
2024-07-09 16:18:10 -07:00
KernelDeimos fafa36c73f move: move dev-server.js back to gui
I'm not sure why it was here, I thought I moved it already.
2024-07-09 19:01:49 -04:00
Nariman Jelveh eebf379205 Move .commit to /tools 2024-07-09 15:58:55 -07:00
Nariman Jelveh 4e15c5fcf4 Merge pull request #572 from HeyPuter/fix-CI-network-issues
retry npm 3 times to account for the flakiness of the process
2024-07-09 15:14:21 -07:00
Nariman Jelveh 10d77f17aa retry npm 3 times to account for the flakiness of the process 2024-07-09 15:12:19 -07:00
Nariman Jelveh 4daa1f2c25 Merge pull request #571 from micheledinelli/main
Add documentation instructions to get started with My Websites
2024-07-09 14:56:40 -07:00
micheledinelli 6c4c73a9e8 Add documentation instructions to get started with My Websites 2024-07-09 23:33:11 +02:00
Nariman Jelveh 00eabd7b10 remove duplicate and/or incorrect license headers 2024-07-09 13:50:20 -07:00
Nariman Jelveh 3b59ecedd1 Merge pull request #567 from stronkexe/main
Completing Arabic translation based on English file.
2024-07-09 08:21:04 -07:00
Nariman Jelveh 871f4cab0c Merge branch 'main' into main 2024-07-09 08:16:28 -07:00
Nariman Jelveh 1d52a559ff Remove more duplicate license headers 2024-07-09 08:14:33 -07:00
Nariman Jelveh ab164c3a0a Merge pull request #570 from micheledinelli/main
Completing Italian translation based on English file
2024-07-09 07:59:11 -07:00
micheledinelli f5a8ee1c6a Completing Italian translation based on English file 2024-07-09 16:55:45 +02:00
Nariman Jelveh 7fa2dd535f remove all duplicated license headers 2024-07-09 07:51:54 -07:00
micheledinelli a96abb5793 Completing Italian translation based on English file. 2024-07-09 16:49:19 +02:00
Nariman Jelveh 1f4297f746 Remove extra license header from ar.js 2024-07-09 07:48:35 -07:00
stronkexe 78a0acea69 Completing Arabic translation based on English file 2024-07-09 09:35:07 +01:00
KernelDeimos 3a7221dba5 chore: cleanup root directory 2024-07-09 04:18:55 -04:00
KernelDeimos bda4aed2e8 chore: add missing license headers 2024-07-09 04:10:33 -04:00
KernelDeimos 365d795c3f doc: omit cp of .env.example in local build instructions
This command contradicts the statement that Puter will find the
next available port when port 4100 is in use.
2024-07-09 04:03:58 -04:00
KernelDeimos a1ff375931 doc: update comment_prefixes.md 2024-07-09 03:40:46 -04:00
KernelDeimos 50036e954d dev: add js-parse-and-output experiment 2024-07-09 03:40:34 -04:00
KernelDeimos 0b39c76c40 move: incubator to experiments
This name is easier to understand and more generalizable.
2024-07-09 03:19:31 -04:00
KernelDeimos 47f76ccc89 dev: add file walker 2024-07-09 03:15:51 -04:00
Nariman Jelveh d3a9ba847a Move icon credits to the GUI project directory 2024-07-08 22:23:02 -07:00
Nariman Jelveh 338004474f Add jsdoc-style comments for a number of functions 2024-07-08 17:52:43 -07:00
Nariman Jelveh 535475b3c3 Improve getMimeType to remove trailing dot in the extension if preset 2024-07-08 17:33:09 -07:00
Nariman Jelveh 073b501e41 Merge pull request #566 from matheussss1/update-br-translation
feat: update BR translation
2024-07-08 14:40:29 -07:00
Matheus Carvalho 42a6b3938a feat: update BR translation 2024-07-08 18:33:39 -03:00
KernelDeimos a9338b45c1 chore: update package.json 2024-07-08 17:31:50 -04:00
Nariman Jelveh 8b9d57dc88 Merge pull request #565 from medelm1/update-arabic-translations
Update Arabic translations in ar.js
2024-07-08 14:03:09 -07:00
Nariman Jelveh 7d92304e7f Update ar.js 2024-07-08 13:59:45 -07:00
Nariman Jelveh 7844965489 Merge branch 'update-arabic-translations' of https://github.com/medelm1/puter into pr/565 2024-07-08 13:59:18 -07:00
Nariman Jelveh 8bdd489eaf Add missing commas 2024-07-08 13:59:13 -07:00
Med Elm fe5be7f3cf Update Arabic translations in src/gui/src/i18n/translations/ar.js to match English version in src/gui/src/i18n/translations/en.js 2024-07-08 13:59:13 -07:00
Nariman Jelveh 42496f9319 Add missing commas 2024-07-08 13:58:50 -07:00
KernelDeimos 48f99fb807 dev: add script to replace release-please 2024-07-08 16:57:02 -04:00
Med Elm bffa192805 Update Arabic translations in src/gui/src/i18n/translations/ar.js to match English version in src/gui/src/i18n/translations/en.js 2024-07-08 21:44:19 +01:00
Nariman Jelveh 26e9b0b2de Merge pull request #564 from Speedyjet/Russian_and_Ukrainian
Russian and ukrainian
2024-07-08 13:18:33 -07:00
Nariman Jelveh e061b1f488 Merge pull request #560 from Speedyjet/translations_russian_and_ukrainian
Russian translation fixed
2024-07-08 13:14:45 -07:00
Nariman Jelveh d2c68308bb Merge branch 'main' into translations_russian_and_ukrainian 2024-07-08 13:08:55 -07:00
Oleh Brusentsov e61039faf4 Ukrainian updated 2024-07-08 21:44:42 +02:00
Nariman Jelveh a1dd354787 Merge pull request #561 from julijatol/main
Update ru.js issue #547
2024-07-08 12:29:54 -07:00
KernelDeimos 3ed7916856 feat: JSON support for kv driver 2024-07-08 15:27:54 -04:00
Yuliya Tolstikova 17145d0be6 Update ru.js issue #547 2024-07-08 15:12:48 -04:00
Oleh Brusentsov 8836011428 Russian translation fixed 2024-07-08 20:44:53 +02:00
1999 changed files with 247009 additions and 191753 deletions

No files matched your search

-6
View File
@@ -1,6 +0,0 @@
# === FOR EMPTY COMMITS ===
# Select reason for empty commit:
- [ ] Add conventional commit message for changelog
- [x] Forgot to use conventional commit style
# Increment this value if nothing above was changed
0
+36
View File
@@ -1,4 +1,40 @@
.dockerignore
Dockerfile
docker-compose.yml
# Dev / build artifacts (recreated inside the build stage)
node_modules
dist
src/gui/dist
src/puter-js/dist
*.tsbuildinfo
# Local runtime data
volatile
config.json
config.dev.json
/puter
# OS / editor
.DS_Store
.vscode
.idea
# Git / CI
.git
.github
# Logs
*.log
npm-debug.log*
.npm
# Tests / coverage
coverage
.nyc_output
# Secrets
.env
.env.*
creds*
*.pem
+18 -1
View File
@@ -1 +1,18 @@
PORT=4000
# Copy this file to `.env`, fill in the secrets, and `docker compose -f
# docker-compose.full.yml up -d`. None of the defaults below are safe for
# anything beyond a local laptop test.
# ── Public-facing ports (nginx) ---------------------------------------
HTTP_PORT=80
# HTTPS_PORT=443 # uncomment after you enable TLS in nginx/nginx.conf
# ── MariaDB ------------------------------------------------------------
MARIADB_ROOT_PASSWORD=replace-with-strong-password
MARIADB_DATABASE=puter
MARIADB_USER=puter
MARIADB_PASSWORD=replace-with-strong-password
# ── S3 (RustFS) --------------------------------------------------------
S3_ACCESS_KEY=puter
S3_SECRET_KEY=replace-with-strong-secret
S3_BUCKET=puter-local
+1
View File
@@ -0,0 +1 @@
github: ['HeyPuter']
-25
View File
@@ -1,25 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Issue Description**
**Steps to Reproduce**
**Expected & Actual Behavior**
**Addition Information or Screenshots (if applicable)**
**Deployment**
- [ ] Production (puter.com)
- [ ] Development (`npm run start`)
- [ ] Docker (via `docker run`)
- [ ] Docker (via `docker-compose`)
**Puter version (if accessible)**
> Click the profile button on the top-right, then "Settings". The version number will be printed at the bottom
-10
View File
@@ -1,10 +0,0 @@
---
name: Driver Request
about: Request a driver on Puter
title: ''
labels: ''
assignees: ''
---
> Drivers are services that apps on Puter can use. For example, drivers support many of the features in the [Puter SDK](https://docs.puter.com/). If you're not sure if what you're suggesting is a driver, you should use the "Feature Request" template instead.
-10
View File
@@ -1,10 +0,0 @@
---
name: Feature request
about: Suggest an idea for Puter
title: ''
labels: idea
assignees: ''
---
@@ -1,10 +0,0 @@
---
name: Idea for Improvement
about: An enhancement for an existing feature on Puter
title: ''
labels: enhancement
assignees: ''
---
@@ -0,0 +1,49 @@
name: AI Provider Integration Tests
# Hits real provider APIs with cheap models, so this workflow is
# manually triggered only. Each provider's test reads its credential
# from PUTER_TEST_AI_<PROVIDER>_API_KEY and skips itself silently if
# the secret is missing.
on:
workflow_dispatch:
permissions:
contents: read
jobs:
ai-test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run AI provider integration tests
# Vitest treats positional args as filename substring filters.
# The pattern matches every `*.integration.test.ts` file and
# nothing else — the regular backend test suite stays out.
run: npm run test:backend -- integration.test
env:
CI: 'true'
PUTER_TEST_AI_CLAUDE_API_KEY: ${{ secrets.PUTER_TEST_AI_CLAUDE_API_KEY }}
PUTER_TEST_AI_OPENAI_API_KEY: ${{ secrets.PUTER_TEST_AI_OPENAI_API_KEY }}
PUTER_TEST_AI_GEMINI_API_KEY: ${{ secrets.PUTER_TEST_AI_GEMINI_API_KEY }}
PUTER_TEST_AI_GROQ_API_KEY: ${{ secrets.PUTER_TEST_AI_GROQ_API_KEY }}
PUTER_TEST_AI_MISTRAL_API_KEY: ${{ secrets.PUTER_TEST_AI_MISTRAL_API_KEY }}
PUTER_TEST_AI_DEEPSEEK_API_KEY: ${{ secrets.PUTER_TEST_AI_DEEPSEEK_API_KEY }}
PUTER_TEST_AI_XAI_API_KEY: ${{ secrets.PUTER_TEST_AI_XAI_API_KEY }}
PUTER_TEST_AI_OPENROUTER_API_KEY: ${{ secrets.PUTER_TEST_AI_OPENROUTER_API_KEY }}
PUTER_TEST_AI_TOGETHER_API_KEY: ${{ secrets.PUTER_TEST_AI_TOGETHER_API_KEY }}
PUTER_TEST_AI_MOONSHOT_API_KEY: ${{ secrets.PUTER_TEST_AI_MOONSHOT_API_KEY }}
PUTER_TEST_AI_ZAI_API_KEY: ${{ secrets.PUTER_TEST_AI_ZAI_API_KEY }}
PUTER_TEST_AI_ELEVENLABS_API_KEY: ${{ secrets.PUTER_TEST_AI_ELEVENLABS_API_KEY }}
+77
View File
@@ -0,0 +1,77 @@
name: Backend Tests
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- ref: ${{ github.base_ref }}
artifact: base
- ref: ${{ github.head_ref }}
artifact: pr
steps:
- name: Checkout ${{ matrix.ref }}
uses: actions/checkout@v4
with:
ref: ${{ matrix.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run backend tests with coverage
run: npm run test:backend -- --coverage
env:
CI: 'true'
- name: Upload coverage artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: backend-coverage-${{ matrix.artifact }}
path: src/backend/coverage/
retention-days: 14
report-coverage:
needs: test
if: always()
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download PR coverage
uses: actions/download-artifact@v4
with:
name: backend-coverage-pr
path: src/backend/coverage
- name: Download base coverage
uses: actions/download-artifact@v4
with:
name: backend-coverage-base
path: coverage-base
- name: Report coverage on PR
uses: davelosert/vitest-coverage-report-action@v2
with:
json-summary-path: src/backend/coverage/coverage-summary.json
json-final-path: src/backend/coverage/coverage-final.json
json-summary-compare-path: coverage-base/coverage-summary.json
-31
View File
@@ -1,31 +0,0 @@
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
name: Node.js CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x, 21.x, 22.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm run build --if-present
- run: npm test
+87 -70
View File
@@ -1,84 +1,101 @@
#
name: Docker Image CI
# Configures this workflow to run every time a change is pushed to the
# branch called `main`.
# Two ways in:
# - push of a calver tag (YY.MM or YY.MM.p) → publishes <version>, latest, main
# - workflow_dispatch → publishes latest + main from whichever ref the user
# picks in the Actions UI. Used to fast-forward :latest/:main when the
# branch has moved ahead of the most recent release tag.
on:
push:
tags:
- '*.*.*'
branches:
- 'main'
push:
tags:
- '[0-9][0-9].[0-9][0-9]'
- '[0-9][0-9].[0-9][0-9].[0-9]*'
workflow_dispatch:
inputs:
push_latest:
description: 'Push :latest tag'
type: boolean
default: true
push_main:
description: 'Push :main tag'
type: boolean
default: true
# Defines two custom environment variables for the workflow. These are used
# for the Container registry domain, and a name for the Docker image that
# this workflow builds.
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
# There is a single job in this workflow. It's configured to run on the
# latest available version of Ubuntu.
jobs:
build-and-push-image:
runs-on: ubuntu-latest
build-and-push-image:
runs-on: ubuntu-latest
# Sets the permissions granted to the `GITHUB_TOKEN` for the actions
# in this job.
permissions:
contents: read
packages: write
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
steps:
- name: Validate calver tag
if: github.event_name == 'push'
env:
REF_NAME: ${{ github.ref_name }}
run: |
if ! [[ "$REF_NAME" =~ ^[0-9]{2}\.[0-9]{2}(\.[0-9]+)?$ ]]; then
echo "Tag '$REF_NAME' does not match YY.MM or YY.MM.p calver format."
exit 1
fi
# Uses the `docker/login-action` action to log in to the Container
# registry using the account and password that will publish the packages.
# Once published, the packages are scoped to the account defined here.
- name: Log in to GitHub Package Container registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Log in to GitHub Package Container registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about)
# to extract tags and labels that will be applied to the specified image.
# The `id` "meta" allows the output of this step to be referenced in
# a subsequent step. The `images` value provides the base name for the
# tags and labels.
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: "${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}"
tags: |
type=semver,pattern={{version}}
type=ref,event=branch
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
# This step uses the `docker/build-push-action` action to build the
# image, based on your repository's `Dockerfile`. If the build succeeds,
# it pushes the image to GitHub Packages.
# It uses the `context` parameter to define the build's context as the
# set of files located in the specified path. For more information, see
# "[Usage](https://github.com/docker/build-push-action#usage)" in the
# README of the `docker/build-push-action` repository.
# It uses the `tags` and `labels` parameters to tag and label the image
# with the output from the "meta" step.
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
platforms: linux/amd64,linux/arm64
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
heyputer/puter
# type=ref,event=tag only emits on tag pushes, so manual runs skip
# the calver tag and just publish whichever of latest / main the
# dispatch inputs asked for. On a tag push, both default to true.
tags: |
type=ref,event=tag
type=raw,value=latest,enable=${{ github.event_name == 'push' || inputs.push_latest }}
type=raw,value=main,enable=${{ github.event_name == 'push' || inputs.push_main }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
platforms: linux/amd64,linux/arm64
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Sync README to Docker Hub
uses: peter-evans/dockerhub-description@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: heyputer/puter
readme-filepath: ./README.md
+18
View File
@@ -0,0 +1,18 @@
name: Notify HeyPuter
on:
push:
branches:
- main
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Trigger heyputer build
run: |
curl -X POST \
-H "Authorization: token ${{ secrets.HEYPUTER_DISPATCH_TOKEN }}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/HeyPuter/heyputer/dispatches \
-d '{"event_type":"puter-main-updated","client_payload":{"puter_ref":"main"}}'
+72
View File
@@ -0,0 +1,72 @@
name: Tag Alias
# Retags an existing image in GHCR under a custom name, without rebuilding.
# Uses `docker buildx imagetools create` so the multi-arch manifest is preserved.
# Re-running with the same name updates the alias to point at a different source tag.
on:
workflow_dispatch:
inputs:
name:
description: "Alias name (e.g., potato)"
required: true
source_tag:
description: "Source tag to alias from"
required: false
default: "latest"
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
alias:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Validate alias name
env:
NAME: ${{ inputs.name }}
run: |
if ! [[ "$NAME" =~ ^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$ ]]; then
echo "Invalid alias name '$NAME' (allowed: [A-Za-z0-9_.-], must start with [A-Za-z0-9_], max 128 chars)."
exit 1
fi
if [[ "$NAME" == "latest" || "$NAME" == "main" ]]; then
echo "Alias name '$NAME' is reserved by the build workflow."
exit 1
fi
if [[ "$NAME" =~ ^[0-9]{2}\.[0-9]{2}(\.[0-9]+)?$ ]]; then
echo "Alias name '$NAME' looks like a calver tag — pick a non-version name."
exit 1
fi
- name: Log in to GitHub Package Container registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Create alias tag
env:
IMAGE: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
NAME: ${{ inputs.name }}
SOURCE_TAG: ${{ inputs.source_tag }}
run: |
SRC="${IMAGE}:${SOURCE_TAG}"
DST="${IMAGE}:${NAME}"
echo "Aliasing $DST -> $SRC"
docker buildx imagetools create -t "$DST" "$SRC"
{
echo "### 🏷️ Tag Alias"
echo ""
echo "- Source: \`$SRC\`"
echo "- Alias: \`$DST\`"
} >> "$GITHUB_STEP_SUMMARY"
+45 -1
View File
@@ -16,13 +16,57 @@ dist/
.vscode/**/*
!.vscode/extensions.json
!.vscode/launch.json
!.vscode/settings.json
!.vscode/tasks.json
# Local env files
.env
!.env.example
# Per-developer / deployment config override. `config.default.json` ships in
# the repo and is the authoritative source; `config.json` (if present) wins
# at runtime for the local machine only.
config.json
# this is for jetbrain IDEs
.idea/
/puter
# Local Netlify folder
.netlify
src/emulator/release/
# ======================================================================
# vscode
# ======================================================================
# vscode configuration
.vscode/
# JS language server, ref: https://code.visualstudio.com/docs/languages/jsconfig
jsconfig.json
# ======================================================================
# playwright test (currently only test the file-system)
# ======================================================================
tests/client-config.yaml
# ======================================================================
# python
# ======================================================================
__pycache__/
# ======================================================================
# other
# ======================================================================
# AI STUFF
AGENTS.md
.roo
# source maps
*.map
coverage/
*.log
undefined
servers.json
config.*.json
File renamed without changes.
+15
View File
@@ -0,0 +1,15 @@
#!/usr/bin/env sh
files=$(git diff --cached --name-only --diff-filter=ACMR | \
grep -E '^(src/backend|extensions)/.*\.(js|mjs|cjs|ts)$' || true)
if [ -z "$files" ]; then
exit 0
fi
echo "$files" | xargs npx eslint --fix --no-warn-ignored
status=$?
echo "$files" | xargs git add
exit $status
+1
View File
@@ -0,0 +1 @@
engine-strict=true
+4
View File
@@ -0,0 +1,4 @@
node_modules
dist
build
**/*.dbmig.js
+4
View File
@@ -0,0 +1,4 @@
{
"tabWidth": 4,
"singleQuote": true
}
-7
View File
@@ -1,7 +0,0 @@
{
"cSpell.words": [
"dnsmasq",
"heyputer",
"Puter"
]
}
+95
View File
@@ -0,0 +1,95 @@
# AGENTS.md
Guidance for AI coding agents working in this repository. Read this before making changes. FOLLOW GUIDANCE AS CLOSELY AS POSSIBLE. If you think the guidance is wrong, raise an issue or flag a maintainer — don't just do what you think is right. This is the source of truth for how we write code, tests, and docs in this repo.
## Documentation Index
Use these as the source of truth before exploring further:
- [README.md](README.md) — project overview and quickstart.
- [doc/architecture.md](doc/architecture.md) — backend layered stack (controllers → drivers → services → stores → clients), `PuterServer` wiring, `Context` (ALS), and extensions.
- [doc/self-hosting.md](doc/self-hosting.md) — running Puter outside hosted infra.
- [CONTRIBUTING.md](CONTRIBUTING.md) — testing, security, AI-assisted code, PR conventions, Boy Scout Rule.
- [SECURITY.md](SECURITY.md) — how to report vulnerabilities (do not file them publicly).
- [BUG-BOUNTY.md](BUG-BOUNTY.md) — bounty program scope.
- [TRADEMARK.md](TRADEMARK.md) — trademark usage.
---
## Backend
The backend is organized as a layered stack inspired by Controller–Service–Repository with dependency injection. Every layer only depends on the layers beneath it, and `PuterServer` ([src/backend/server.ts](src/backend/server.ts)) wires the whole thing together.
### Layers (top → bottom)
| Layer | Lives in | Responsibility |
| --------------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Controllers** | [src/backend/controllers/](src/backend/controllers/) | Route handlers. Parse + validate input, apply per-route gates (auth, subdomain, rate limit, body parsers via `RouteOptions`), call services, format responses. |
| **Drivers** | [src/backend/drivers/](src/backend/drivers/) | Optional. RPC-style handlers exposed over `/drivers/*`. Thin shells that validate RPC inputs and call into services/stores. |
| **Services** | [src/backend/services/](src/backend/services/) | Business logic. Assume the caller is already authenticated/authorized — services do not run auth gates themselves. |
| **Stores** | [src/backend/stores/](src/backend/stores/) | Persistence. Wraps clients with the domain shape services consume (rows, entities, KV namespaces). |
| **Clients** | [src/backend/clients/](src/backend/clients/) | Adapters for external/internal services (sql, redis, s3, dynamo, email, event bus). Knows protocols, not domain concepts. |
| **Config** | `config.*.json` → `IConfig` | Flat, typed config object every layer receives at construction. |
Each layer receives the layers beneath it through its constructor. Dependencies are explicit and traceable from `PuterServer`.
### Cross-layer rules
- **Don't reach across layers.** Controllers do not poke clients directly; services do not register routes. If you want to, the abstraction is wrong — fix the abstraction.
- **Don't call sideways within a layer for code reuse.** If two services need the same logic, lift it into a util/helper. Services should not depend on other services for shared code.
- **Prefer explicit arguments over `Context` (ALS).** Reach for [Context](src/backend/core/context.ts) only when the value is genuinely request-scoped and would otherwise thread through many layers. Today it's used sparingly — mostly for `actor` and `req`.
### Extensions
Extensions live in [extensions/](extensions/) and parallel the layered stack. They are for **non-crucial parts of the system** — things Puter still works without if removed. If a feature is load-bearing for clients, it belongs in core, not in an extension (see [whoami](extensions/whoami.ts) as the cautionary example).
The `extension` global ([src/backend/extensions.ts](src/backend/extensions.ts)) exposes:
- `extension.registerClient/Store/Service/Driver/Controller(name, Class)` for first-class additions.
- `extension.on(event, handler)` and `extension.get/post/put/delete/patch/use(path, opts?, handler)` for the lightweight common case. `opts` is the same `RouteOptions` controllers use.
- `extension.import('client' | 'store' | 'service' | 'controller' | 'driver')` returns a lazy proxy to instantiated objects. `extension.config` exposes live config.
### Language & file conventions
- **Modules:** We transpile and build as needed — write ES modules, not CommonJS.
- **TypeScript preferred for new files.** Existing JS is fine; convert opportunistically when you're already touching a file.
- **Reuse types before inventing them.** Search for an existing type first; extend it if close. Only define a new type when nothing fits.
- **Make new types findable.** Co-locate them with the layer/module that owns them, export from the obvious entry point, and use a descriptive `PascalCase` name. Don't hide types in random files where future readers won't grep them.
- **Naming:** `camelCase` for variables/functions, `PascalCase` for classes and for files containing a class (`AuthService.ts`, `KVStoreDriver.ts`).
### Comments
Keep comments light. Prefer self-documenting code — clear names, small functions, obvious flow. Add a comment **only** when:
- The _why_ is non-obvious (a hidden constraint, a workaround, a subtle invariant).
- A non-trivial usage detail would otherwise trip the next reader.
Don't restate what the code already says. Don't write comments that reference the current task or PR — those rot.
### Tests
When adding new behavior (function, endpoint, driver method, branch of logic), add a test for it.
- Use Vitest for unit and integration tests. Test files go next to the code they test, named `*.test.ts` or `*.test.js`.
- **Mock data, not methods.** Stub the inputs (fixtures, fake rows, sample payloads) rather than mocking the function under test or the layer beneath it. Over-mocking produces tests that pass while production breaks. If you must mock, mock at a real boundary (a client/external service), not within the same layer you're testing.
- Prefer test server over mocking deps. We have existing test utilities for running full test server to boot deps based on config. (see [src/backend/testUtil.ts](src/backend/testUtil.ts)).
- **Hit a real database / real client where reasonable.** Integration shapes catch the things unit tests with mocks miss.
- **Regression tests for bug fixes.** A test that fails before your fix and passes after is the cheapest insurance against the bug coming back.
- If something is genuinely hard to test (UI animation, third-party glue), skip it but say so in the PR.
### Security & privacy
Before opening a PR, scan the diff for:
- Logs, error messages, or responses leaking internal paths, secrets, tokens, env vars, or other users' data.
- Debug routes, test credentials, commented-out auth checks.
- Endpoints returning more than the caller actually needs.
When in doubt, return less. Auth-, permission-, or data-export-related changes deserve an explicit callout in the PR description.
### Working rules of thumb
- **Run it, don't just compile it.** "It type-checks" is not "it works." Exercise the code path end-to-end at least once.
- **Read the neighbors before writing.** Match the shape of similar things already in the tree. If you genuinely think the existing pattern is wrong, raise it — don't quietly diverge.
- **Boy Scout Rule, proportional to the change.** Fix the obvious typo, dead import, or missing typehint in files you're already touching. Don't ride a refactor along with a bug fix — that just makes review harder.
- **Understand what you commit.** AI assistance is fine; shipping code you couldn't defend in review is not.
+66
View File
@@ -0,0 +1,66 @@
# Puter Bug Bounty Program
We at **Puter** are committed to maintaining a secure experience for our users and community. We greatly value the contributions of security researchers and welcome responsible disclosure of security issues.
## Scope
The following are in scope for this program:
* **The Puter open-source project** (available at [github.com/HeyPuter/puter](https://github.com/HeyPuter/puter))
* **`puter.com`**
* **`api.puter.com`**
Out-of-scope:
* Third-party services, applications, or libraries not maintained by Puter.
* Social engineering attacks (e.g., phishing against staff).
* Denial of Service (DoS), spam, or volumetric attacks.
* Physical security issues.
## Rules of Engagement
To participate, you must:
1. **Report responsibly**: Provide detailed steps to reproduce the issue, including proof-of-concept code or screenshots where applicable.
2. **Do no harm**: Do not exfiltrate, modify, or delete data. Only access your own account or test data.
3. **Respect availability**: Do not perform denial-of-service attacks or automated scans that degrade service.
4. **Follow disclosure policy**: Do not publicly disclose vulnerabilities until we have confirmed and patched the issue.
5. **Act in good faith**: Make every effort to avoid privacy violations, destruction of data, and interruption or degradation of services.
Reports that do not meet these guidelines may not be eligible for a reward.
## Reporting Process
To report a vulnerability, email us at: **[[email protected]](mailto:[email protected])**.
Include:
* A description of the vulnerability
* Steps to reproduce
* Potential impact
* Suggested remediation (if available)
We aim to acknowledge receipt within **72 hours** and provide a resolution timeline.
## Reward Structure
We offer monetary rewards based on the severity of the vulnerability, as determined by our internal assessment (using CVSS as a guide).
* **Critical: \$1,000 – \$2,000**
* **High: \$500 – \$1,000**
* **Medium: \$200 – \$500**
* **Low: \$50 – \$100**
Non-security issues, suggestions, and best practices feedback are always welcome, but may not qualify for a reward.
If multiple researchers report the same issue, the bounty will be awarded to the first eligible report we receive.
## Payments Disclaimer
All reward amounts are **guidelines only**. Final decisions about eligibility, severity classification, and payout amount are made at the sole discretion of the Puter security team. We reserve the right to determine whether a report qualifies for a bounty, and whether any payment will be issued at all. Submitting a report does not guarantee compensation.
### Payment Method Requirement
At this time, **payments will only be made via PayPal**. To be eligible to receive a bounty, researchers must have a valid PayPal account capable of receiving payments. We are unable to process payments through other services or methods at this time.
## Legal Safe Harbor
If you make a good-faith effort to comply with this policy, we will consider your research to be authorized. If you inadvertently access data outside your own account, stop immediately and include details in your report so we can investigate and remediate.
-213
View File
@@ -1,213 +0,0 @@
# Changelog
## 2.4.0 (2024-07-08)
### Features
* add (pt-br) translation for system settings. ([77211c4](https://github.com/HeyPuter/puter/commit/77211c4f71b0285fb3060f7e5c8d493b4d7c4f0c))
* add /group/list endpoint ([d55f38c](https://github.com/HeyPuter/puter/commit/d55f38ca68899c3574cfe328d2b206b1143ff0d4))
* add /share/file-by-username endpoint ([5d214c7](https://github.com/HeyPuter/puter/commit/5d214c7b52887b594af6be497f1892baf7d77679))
* add /sharelink/request endpoint ([742f625](https://github.com/HeyPuter/puter/commit/742f625309f9f4cfa70cf7d2fe5b03fd164913ea))
* add /show urls ([079e25a](https://github.com/HeyPuter/puter/commit/079e25a9fe8e179f26d72378856058eb656e2314))
* add app metadata ([f7216b9](https://github.com/HeyPuter/puter/commit/f7216b95672b38802b288ef5b022e947017ff311))
* add appdata permission (if applicable) on app share ([9751fd9](https://github.com/HeyPuter/puter/commit/9751fd92a50e75385cffed0ca847d5076ba98c92))
* add cookie for site token ([a813fbb](https://github.com/HeyPuter/puter/commit/a813fbbb88bcfb8b9a61976e2a4fc4aab943fc88))
* add cross-server event broadcasting ([1207a15](https://github.com/HeyPuter/puter/commit/1207a158bdc88a90b14d31d03387ce353c176a9c))
* add debug mod ([16b1649](https://github.com/HeyPuter/puter/commit/16b1649ff62fd87a4dda5d2e1c68941c864c5da4))
* add endpoints for share tokens ([301ffaf](https://github.com/HeyPuter/puter/commit/301ffaf61dbb4fca1a855650ab80707ae6d9f602))
* Add exit status code to apps ([7674da4](https://github.com/HeyPuter/puter/commit/7674da4cd225bcad34079251c5600fc32e32248b))
* add external mod loading ([eb05fbd](https://github.com/HeyPuter/puter/commit/eb05fbd2dc4877553b5118a069a9afdc32bea137))
* add group management endpoints ([4216346](https://github.com/HeyPuter/puter/commit/4216346384d90dcba429dbcb175e6f86482d19f4))
* add group permission endpoints ([c374b0c](https://github.com/HeyPuter/puter/commit/c374b0cbca761e7c8a47d56a09551f2e9378066a))
* add mark-read endpoint ([0101f42](https://github.com/HeyPuter/puter/commit/0101f425d480705c20df4919a76f66e987f5790f))
* add permission rewriter for app by name ([16c4907](https://github.com/HeyPuter/puter/commit/16c4907be592dae31ed3c1aa3fac3b9655255d6f))
* add protected apps ([f2f3d6f](https://github.com/HeyPuter/puter/commit/f2f3d6ff460932698fb8da7309fbce3e96132950))
* add protected subdomains ([86fca17](https://github.com/HeyPuter/puter/commit/86fca17fb17c0c24397c29b49b133deadea1de8b))
* add querystring-informed errors ([e7c0b83](https://github.com/HeyPuter/puter/commit/e7c0b8320a6829315d9154d6d513bab4491c47ea))
* add readdir delegate for shares in a user directory ([8424d44](https://github.com/HeyPuter/puter/commit/8424d446099ac30ccf829c57d43eef1f235618e4))
* add readdir delegate for sharing user homedirs ([19a5eb0](https://github.com/HeyPuter/puter/commit/19a5eb00763f3ac31df8483fb59cb7a96c448745))
* add service for notifications ([a1e6887](https://github.com/HeyPuter/puter/commit/a1e6887bf93da21b9482040b3e30ee083fb23477))
* add service to test file share logic ([332371f](https://github.com/HeyPuter/puter/commit/332371fccb198462948a440419adc7a26d671a23))
* add share list to stat ([8c49ba2](https://github.com/HeyPuter/puter/commit/8c49ba2553ce6bee20eb5b6f2721bc80f639e98a))
* add share service and share-by-email to /share ([db5990a](https://github.com/HeyPuter/puter/commit/db5990a98935817c0e16d30e921bb99c57a98fc8))
* add subdomain permission (if applicable) on app share ([13e2f72](https://github.com/HeyPuter/puter/commit/13e2f72c9f33f485570f13f45341246b1a05879f))
* add user-group permission check ([0014940](https://github.com/HeyPuter/puter/commit/00149402e041443aa3ac571fbe97a9a85f95564b))
* **backend:** add script service ([30550fc](https://github.com/HeyPuter/puter/commit/30550fcddda18469735499546de502d29b85e2ad))
* **backend:** Add tab completion to server console command arguments ([fa81dca](https://github.com/HeyPuter/puter/commit/fa81dca9507b7fa0f82099b75f2ab89c865626ac))
* **backend:** Add tab-completion to server console command names ([e1e76c6](https://github.com/HeyPuter/puter/commit/e1e76c6be71fdeb3b6246307b626734d8dc26f86))
* **backend:** add tip of day ([2d8e624](https://github.com/HeyPuter/puter/commit/2d8e6240c61dc6301f49cbdcd1c3b04736f9ca93))
* **backend:** allow services to provide user properties ([522664d](https://github.com/HeyPuter/puter/commit/522664d415c33342500defec309c2ff15bc94804))
* **backend:** allow services to provide whoami values ([fccabf1](https://github.com/HeyPuter/puter/commit/fccabf1bc0c4418f3599222616dd63bf98c14fe1))
* **backend:** improve logger and reduce logs ([4bdad75](https://github.com/HeyPuter/puter/commit/4bdad75766d0617a164024b39b79bf5373c495a6))
* Display app icon and description in embeds ([ef298ce](https://github.com/HeyPuter/puter/commit/ef298ce3aa3ce90224e883fb0ba33f9cd3a3da44))
* get first test working on share-test service ([88d6bee](https://github.com/HeyPuter/puter/commit/88d6bee9546f36d689c53ec7fe95f01f772f5211))
* **git:** Add --color and --no-color options ([d6dd1a5](https://github.com/HeyPuter/puter/commit/d6dd1a5bb0a2b2bba2cfe86d2e51ff2a6e42841c))
* **git:** Add a --debug option, which sets the DEBUG global ([fa3df72](https://github.com/HeyPuter/puter/commit/fa3df72f6ed2d45a440ebc2aacbbae67bf042478))
* **git:** Add authentication to clone, fetch, and pull. ([364d580](https://github.com/HeyPuter/puter/commit/364d580ff896691ee70d3735f495c720651a9f41))
* **git:** Add diff display to `show` and `log` subcommands ([3cad1ec](https://github.com/HeyPuter/puter/commit/3cad1ec436f99a78f782ab9576325d4341284964))
* **git:** Add start-revision and file arguments to `git log` ([49c2f16](https://github.com/HeyPuter/puter/commit/49c2f163515d2130c17a6f6a6a16bc27ea69336a))
* **git:** Allow checking out a commit instead of a branch ([057b3ac](https://github.com/HeyPuter/puter/commit/057b3acf00af49c005b9bf7069c5d22983a32e1e))
* **git:** Color output for `git status` files ([bab5204](https://github.com/HeyPuter/puter/commit/bab5204209aa2efc0c053643677a78db6ede0929))
* **git:** Display file contents as a string for `git show FILE_OID` ([a680371](https://github.com/HeyPuter/puter/commit/a68037111a04580cfa2688694a68ef6ac7a495fa))
* **git:** Display ref names in `git log` and `git show` ([45cdfcb](https://github.com/HeyPuter/puter/commit/45cdfcb5bfa66937b33054a127e0b17001f3faa4))
* **git:** Format output closer to canonical git ([60976b1](https://github.com/HeyPuter/puter/commit/60976b1ed61984d9d290f3a0ae99dd97632e9909))
* **git:** Handle detached HEAD in `git status` and `git branch --list` ([2c9b1a3](https://github.com/HeyPuter/puter/commit/2c9b1a3ffc3d5e282ffe5b83a86314e99445bbc6))
* **git:** Implement `git branch` ([ad4f132](https://github.com/HeyPuter/puter/commit/ad4f13255d52f8226f22800c16b388cf0e6384d7))
* **git:** Implement `git checkout` ([35e4453](https://github.com/HeyPuter/puter/commit/35e4453930bc4e151887f83c97efec19cc15da70))
* **git:** Implement `git cherry-pick` ([2e4259d](https://github.com/HeyPuter/puter/commit/2e4259d267b3cfafd5cefc57a02643c6432fec4d))
* **git:** Implement `git clone` ([95c8235](https://github.com/HeyPuter/puter/commit/95c8235a4a1fea39a46c40df04cb1004a2fe7b23))
* **git:** Implement `git diff` ([622b6a9](https://github.com/HeyPuter/puter/commit/622b6a9b921c3c03efc0b519c9a26c6701d80e50))
* **git:** Implement `git fetch` ([98a4b9e](https://github.com/HeyPuter/puter/commit/98a4b9ede39b94c0c6b6b8345d7551359961186a))
* **git:** Implement `git pull` ([eb2b6a0](https://github.com/HeyPuter/puter/commit/eb2b6a08b03cee0612885412cd4b03c9564044e3))
* **git:** Implement `git push` ([8c70229](https://github.com/HeyPuter/puter/commit/8c70229a188b743220db076a740a992fd7971301))
* **git:** Implement `git remote` ([43ce0d5](https://github.com/HeyPuter/puter/commit/43ce0d5b45d4eb4f296afcaaa1ecadc125c53e89))
* **git:** Implement `git restore` ([4ba8a32](https://github.com/HeyPuter/puter/commit/4ba8a32b45d395f28433572db5644d630776789e))
* **git:** Make `git add` work for deleted files ([9551544](https://github.com/HeyPuter/puter/commit/955154468f48e45028dad2e916708d6a763affad))
* **git:** Make shorten_hash() guaranteed to produce a unique hash ([dd10a37](https://github.com/HeyPuter/puter/commit/dd10a377493c0d8f10a1ac8779dc27f3f3bf6c37))
* **git:** Resolve more forms of commit reference ([b6906bb](https://github.com/HeyPuter/puter/commit/b6906bbcaaa50fc8a8c60beb6d2d38bcb7dda758))
* **git:** Understand references like `HEAD^` and `main~3` ([711dbc0](https://github.com/HeyPuter/puter/commit/711dbc0d2fde9c2ddc6c86f64fb4caa7837c9dcb))
* implicit access from apps to shared appdata dirs ([31d4eb0](https://github.com/HeyPuter/puter/commit/31d4eb090efb340fdfb7cb6b751145e859624eeb))
* introduce notification selection via driver ([c5334b0](https://github.com/HeyPuter/puter/commit/c5334b0e19cf9762f536ec482c3ff872e9c12399))
* multi-recipient multi-file share endpoint ([846fdc2](https://github.com/HeyPuter/puter/commit/846fdc20d4a887a1f8a4f3bda4fafe41efab2733))
* **parsely:** Add a fail() parser ([5656d9d](https://github.com/HeyPuter/puter/commit/5656d9d42f76202a534ad640d3a4e287e0e40418))
* **parsely:** Add stringUntil() parser ([d46b043](https://github.com/HeyPuter/puter/commit/d46b043c5d16f1205d61de3f3ba43ed8ad7bff93))
* **phoenix:** Add --dump and --file options to sed ([f250f86](https://github.com/HeyPuter/puter/commit/f250f86446a506f24fa2ad396328e3a2212a68d0))
* **phoenix:** Add more commands to sed, including labels and branching ([306014a](https://github.com/HeyPuter/puter/commit/306014adc77a7ca155feb95d1146cb46ee075b52))
* **phoenix:** Expose parsed arg tokens to apps that request them ([4067c82](https://github.com/HeyPuter/puter/commit/4067c82486c99cad20f41927ad39ebea438b717f))
* **phoenix:** Implement an `exit` builtin ([3184d34](https://github.com/HeyPuter/puter/commit/3184d3482c7b95c0fd1fc0745555ff82fc9a8c99))
* **phoenix:** Implement parsing of sed scripts ([0d4f907](https://github.com/HeyPuter/puter/commit/0d4f907b6675b15bd50a55f50aa28f0803b18b7b))
* **phoenix:** Make `clear` clear scrollback unless `-x` is given ([75a989a](https://github.com/HeyPuter/puter/commit/75a989a7b69bfdfdf69e5f0365027c5b27d8bfc6))
* **Phoenix:** Pass command line arguments and ENV when launching apps ([8f1c4fc](https://github.com/HeyPuter/puter/commit/8f1c4fcda98e72a7b970e8c6fc2fe39a5e012264))
* **phoenix:** Respond to exit status codes ([5de3052](https://github.com/HeyPuter/puter/commit/5de305202656a172b187dac87543d6c1c69a2958))
* **phoenix:** Show actual host name in prompt and neofetch ([4539408](https://github.com/HeyPuter/puter/commit/4539408a218a50244dc615cf7de56c29dcac53e6))
* rate-limit for excessive groups ([4af279a](https://github.com/HeyPuter/puter/commit/4af279a72fc9de89ddc3ba51806ca3760a36265d))
* re-send unreads on login ([02fc4d8](https://github.com/HeyPuter/puter/commit/02fc4d86b7166fb4803be5d28e2a593d6b7d9785))
* register dev center to apps ([10f4d7d](https://github.com/HeyPuter/puter/commit/10f4d7d50ce9314f9c3888c74cb17c8ebbecee98))
* send notification when file gets shared ([2f6c428](https://github.com/HeyPuter/puter/commit/2f6c428a403a006f7878861d2f0356c3294519be))
* start directory index frame ([fb1e2f2](https://github.com/HeyPuter/puter/commit/fb1e2f21fb67aefe0602f6c978199c7cd019bbf7))
* support canonical puter.js url in dev ([fd41ae2](https://github.com/HeyPuter/puter/commit/fd41ae217c7a9f7229326f62a829471580a744bd))
* **ui:** add new components ([577bd59](https://github.com/HeyPuter/puter/commit/577bd59b6cc94810e851ad544f8234e25a4e6e27))
* **ui:** add new components ([38ba425](https://github.com/HeyPuter/puter/commit/38ba42575ce9f3506f8ce219b9580202b3ed9993))
* **ui:** allow component-based settings tabs ([1245960](https://github.com/HeyPuter/puter/commit/124596058a286241b51dd87ce2fc1a68478cb5b8))
* update share endpoint to support more things ([dd5fde5](https://github.com/HeyPuter/puter/commit/dd5fde5130c1840ab598e6622766ae835142e58a))
### Bug Fixes
* add app_uid param to kv interface ([f7a0549](https://github.com/HeyPuter/puter/commit/f7a054956b8739a3bc305a49faee929ea0da1e15))
* add missing columns for public directory update ([b10302a](https://github.com/HeyPuter/puter/commit/b10302ad744fd9c58f9735743e075815183c772c))
* Add missing file extension to 0009_app-prefix-fix.sql in DB init ([a8160a8](https://github.com/HeyPuter/puter/commit/a8160a8cdcdd6aff98728a6f1643d93386e6bb5a))
* add permission implicator for file modes ([e63ab3a](https://github.com/HeyPuter/puter/commit/e63ab3a67f6555eb13d6af477a8da9f1b54d6608))
* add stream limit ([ceba309](https://github.com/HeyPuter/puter/commit/ceba309dbd4df89f310d1a530f939a5b7991f4c7))
* **backend:** remove a bad thing that really doesn't work ([8d22276](https://github.com/HeyPuter/puter/commit/8d22276f13106f7642d11da30b1500817a20ad43))
* bug introduced when refactoring /share to Sequence ([ecb9978](https://github.com/HeyPuter/puter/commit/ecb997885c1efb766827c84d2ffb8dc6ddabe992))
* check subdomain earlier for /apps ([4e3a24e](https://github.com/HeyPuter/puter/commit/4e3a24e6093e279e210765e07e436f4e63b74072))
* column nullability blunder ([1429d6f](https://github.com/HeyPuter/puter/commit/1429d6f57c67dff51fc41ca0c2868f8d000845f1))
* Correct APIError imports ([062e23b](https://github.com/HeyPuter/puter/commit/062e23b5c9673db1f8b0ff0469289d52dd1e3f99))
* correct shown flag behavior ([632c536](https://github.com/HeyPuter/puter/commit/632c5366161ff8fbbd4d60c61dfbe52dad488a2c))
* database migration ([9b39309](https://github.com/HeyPuter/puter/commit/9b39309e18a2927d25fe794d91da4e4d068c4bca))
* do not delegate to select on read like ever that is really dumb ([a2a10b9](https://github.com/HeyPuter/puter/commit/a2a10b94be59403e03fb08bec5d7c056ce5b554f))
* docker runtime fail because stdout columns ([94c0449](https://github.com/HeyPuter/puter/commit/94c0449437ce4cb26d00a15a3f277bc7b09367b4))
* fix issues with apps in /share endpoint ([0cf90ee](https://github.com/HeyPuter/puter/commit/0cf90ee39af6548d271dec45ed8ee9e6df1cd14d))
* fix owner ids for default apps ([283f409](https://github.com/HeyPuter/puter/commit/283f409a662d126e7f3ce811f1467ac6fab9a522))
* fix permission cascade properly this time ([de58866](https://github.com/HeyPuter/puter/commit/de5886698e1eae2b250baac174b57029f3244e96))
* Fix phoenix app prefix and TokenService test ([afb9d86](https://github.com/HeyPuter/puter/commit/afb9d866b5091058711db931cde904947e661c15))
* fix that fix ([b126b67](https://github.com/HeyPuter/puter/commit/b126b670940a0e20cfe7bd0eba3db891bab5c142))
* fix typo ([ce328b7](https://github.com/HeyPuter/puter/commit/ce328b7245ad741b64c5885f64f806fc98a55d84))
* **git:** Make git commit display detached HEAD correctly ([73d0f5a](https://github.com/HeyPuter/puter/commit/73d0f5a90cb5dcbadfc6d0fd22f14e8bc0e61f86))
* group permission audit table ([7d2f6d2](https://github.com/HeyPuter/puter/commit/7d2f6d256f56e30d752e9999c6e8bde68f9d9637))
* handle subpaths under another user ([d128cee](https://github.com/HeyPuter/puter/commit/d128ceed6f4928fa0793815feb2e2715cd273ff8))
* handling of batch requests with zero files ([c0063a8](https://github.com/HeyPuter/puter/commit/c0063a871fd891a1774f1bee00e86170fed249fa))
* i forgot to test reloading ([7eabb43](https://github.com/HeyPuter/puter/commit/7eabb43bd4257b4129d67eaeda2aa27e8268dc78))
* improve console experience on mac ([15465bf](https://github.com/HeyPuter/puter/commit/15465bfc5035a64762f7c86a3d38af8be6be5b59))
* incorrect error from suggested_apps ([b648817](https://github.com/HeyPuter/puter/commit/b648817f2743c2b6214ebe4177d921c9b9027594))
* Make polyfilled import.meta.filename getter a valid function ([85c6798](https://github.com/HeyPuter/puter/commit/85c679844869b6b05fcbda231d8dc7026a66da97))
* null email in request to /share ([bf63144](https://github.com/HeyPuter/puter/commit/bf63144f7a79c48bd650ae851ddd0c8a10d748c3))
* Only run Component initialization functions once ([5b43358](https://github.com/HeyPuter/puter/commit/5b43358219402bee3eadf4a0f184a4b924d3293b))
* oops ([a136ee5](https://github.com/HeyPuter/puter/commit/a136ee5edd3149798a0d82f494f423f503b65f00))
* **parsely:** Make Repeat parser work when no separator is given ([9b4d16f](https://github.com/HeyPuter/puter/commit/9b4d16fbe9d5698c57f9da725a22b528a7d7cac2))
* peers array assumption ([10cbf08](https://github.com/HeyPuter/puter/commit/10cbf08233620440aa39f5302deaac4f59f02247))
* **phoenix:** Add missing newlines to sed command output ([e047b0b](https://github.com/HeyPuter/puter/commit/e047b0bf302284da61e677432e4cc25b531b24f2))
* **phoenix:** Gracefully handle completing a non-existent path ([d76e713](https://github.com/HeyPuter/puter/commit/d76e7130cba9f0ca05940abafe4fd1a41464aa83))
* property validation on some permission endpoints ([0855f2b](https://github.com/HeyPuter/puter/commit/0855f2b36eca3bbdaa8429cbde3aa1242e8e96ee))
* readdir on file ([a72ec97](https://github.com/HeyPuter/puter/commit/a72ec9799ac3bd76ceafa22cce149e373a13f3b9))
* remove last component when share URL is file ([1166e69](https://github.com/HeyPuter/puter/commit/1166e69c76688d1811701c56cd4df9d38e286793))
* remove legacy permission check in stat ([f2c6e01](https://github.com/HeyPuter/puter/commit/f2c6e01296e4214336e63bc2d69bcbf17f59890f))
* Remove null or duplicate app entries from suggest_app_for_fsentry() ([6900233](https://github.com/HeyPuter/puter/commit/6900233c5aaa2d1a49f495e9f9a060796757a91e))
* **security:** Move token for socket.io to request body ([49b257e](https://github.com/HeyPuter/puter/commit/49b257ecffbb1e12090b86a67528a5ad09da69db))
* switch share notif username to sender ([cd65217](https://github.com/HeyPuter/puter/commit/cd65217f5cda1c986ee231e2eeeef5abefa36ecb))
* **Terminal:** Accept input from Chrome on Android ([4ef3e53](https://github.com/HeyPuter/puter/commit/4ef3e53de34f0097950a7e707ca2483863beafb5))
* Throw an error when readdir is called on a non-directory ([46eb4ed](https://github.com/HeyPuter/puter/commit/46eb4ed2b96c235e10e15645a30d2f192a1af0de))
* type error in puter-site ([d96f924](https://github.com/HeyPuter/puter/commit/d96f924cad7a13ea6e9084bb0ebb79ecc5fcb8a3))
* ui color input attributes ([d9c4fbb](https://github.com/HeyPuter/puter/commit/d9c4fbbd1dcce12ee05ee33652a5fa518196463d))
* **ui:** improve Component base class ([f8780d0](https://github.com/HeyPuter/puter/commit/f8780d032b10138851c22af53b8610c578139acc))
* update email share object ([9033f6f](https://github.com/HeyPuter/puter/commit/9033f6f8c74ef8739294d640ac1c7eba95519bbd))
* update PD alert custom details ([2f16322](https://github.com/HeyPuter/puter/commit/2f163221bdde09425cae11ef7f8e4eb0b10c7103))
* update test kernel ([55c609b](https://github.com/HeyPuter/puter/commit/55c609b3fec4ef018febc6e88c44a6277960d728))
* validate size metadata ([2008db0](https://github.com/HeyPuter/puter/commit/2008db08524259264a0c8186a34fc75d7a133f5f))
## 2.3.0 (2024-05-22)
### Features
* add /healthcheck endpoint ([c166560](https://github.com/HeyPuter/puter/commit/c166560ff4ab5a453d3ec4f97326c995deb7f522))
* Add command names to phoenix tab-completion ([cf0eee1](https://github.com/HeyPuter/puter/commit/cf0eee1fa35328e05aefc8a425b5977efe5f4ec9))
* add option to change desktop background to default ([03f05f3](https://github.com/HeyPuter/puter/commit/03f05f316f11e8afe5fcee40b2b80a0de5e6826f))
* allow apps to add a menubar via puter.js ([331d9e7](https://github.com/HeyPuter/puter/commit/331d9e75428ec7609394f59b1755374c7340f83e))
* Allow querying puter-apps driver by partial app names ([dc5b010](https://github.com/HeyPuter/puter/commit/dc5b010d0913d2151b4851f8da5df72d2c8f42e7))
* Display upload errors in UIWindowProgress dialog ([edebbee](https://github.com/HeyPuter/puter/commit/edebbee9e7e9efbb33bf709b637c103be40d15a8))
* Implement 'Like' predicate in entity storage ([a854a0d](https://github.com/HeyPuter/puter/commit/a854a0dc0aa79a31695db833184c5ca3698632a9))
* improve password recovery experience ([04432df](https://github.com/HeyPuter/puter/commit/04432df5540811710ce1cc47ce6c136e5453bccb))
* **security:** add ip rate limiting ([ccf1afc](https://github.com/HeyPuter/puter/commit/ccf1afc93c24ee7f9a126216209a185d6b4d9fe4))
* Show "Deleting /foo" in progress window when deleting files ([f07c13a](https://github.com/HeyPuter/puter/commit/f07c13a50cee790eec44bce2f6e56fbcbf73f9b0))
### Bug Fixes
* Add missing file extension to 0009_app-prefix-fix.sql in DB init ([a8160a8](https://github.com/HeyPuter/puter/commit/a8160a8cdcdd6aff98728a6f1643d93386e6bb5a))
* Add missing TextEncoder to PTT ([8d4a1e0](https://github.com/HeyPuter/puter/commit/8d4a1e0ed3872e2c82b9e4be9b6d8b359e9cea09))
* Correct APIError imports ([062e23b](https://github.com/HeyPuter/puter/commit/062e23b5c9673db1f8b0ff0469289d52dd1e3f99))
* Correct grep output when asking for line numbers ([c8a20ca](https://github.com/HeyPuter/puter/commit/c8a20cadbfd539d185d32f4558916825fcf265ba))
* Correct inverted instanceof check in SignalReader.read() ([d4c2b49](https://github.com/HeyPuter/puter/commit/d4c2b492ef4864804776d3cb7d24797fdc536886))
* Correct variables used in errors in sign.js ([fa7c6be](https://github.com/HeyPuter/puter/commit/fa7c6bee9699527028be0ae9759155bc67c52324))
* Eliminates duplicate translation keys ([5800350](https://github.com/HeyPuter/puter/commit/5800350b253994dea410afff64e3df2a171e7775))
* fix error handling for outdated node versions ([4c1d5a4](https://github.com/HeyPuter/puter/commit/4c1d5a4b6d009ce075897d499d3517219bd745a4))
* Fix phoenix app prefix and TokenService test ([afb9d86](https://github.com/HeyPuter/puter/commit/afb9d866b5091058711db931cde904947e661c15))
* increase QR code size ([d2de46e](https://github.com/HeyPuter/puter/commit/d2de46edfbc05d132d5c929f6935b82515fbbda0))
* Make PathCommandProvider reject queries with path separators ([d733119](https://github.com/HeyPuter/puter/commit/d73311945610417a1ebc7bb0723ced0a599594b4))
* Make url variable accessible to all users of it ([2f30ae7](https://github.com/HeyPuter/puter/commit/2f30ae7a825adcd8da95888c38fe39c34acee0ff))
* Only run Component initialization functions once ([5b43358](https://github.com/HeyPuter/puter/commit/5b43358219402bee3eadf4a0f184a4b924d3293b))
* Parse octal echo escapes ([6ad8f5e](https://github.com/HeyPuter/puter/commit/6ad8f5e06abd050d319271f818d72debf5bc8e44))
* reduce token lengths ([5a76bad](https://github.com/HeyPuter/puter/commit/5a76bad28dfd8ec89a309941e410a54927fae22d))
* reliability issue :bug: ([1d546d9](https://github.com/HeyPuter/puter/commit/1d546d9ef70ef9066ad5838e9782ae330d289f29))
* Remove null or duplicate app entries from suggest_app_for_fsentry() ([6900233](https://github.com/HeyPuter/puter/commit/6900233c5aaa2d1a49f495e9f9a060796757a91e))
* **security:** always use application/octet-stream ([74e213a](https://github.com/HeyPuter/puter/commit/74e213a534dbf2844c8cebeee7eb59ec70de306e))
* **security:** Fix session revocation ([eb166a6](https://github.com/HeyPuter/puter/commit/eb166a67a9f0caf4fd77f9e27dc8209c2fc51f4c))
* **security:** Move token for socket.io to request body ([49b257e](https://github.com/HeyPuter/puter/commit/49b257ecffbb1e12090b86a67528a5ad09da69db))
* **security:** Prevent email enumeration ([ed70314](https://github.com/HeyPuter/puter/commit/ed703146863f896df76c98fad7127c6748c0ef9b))
* **security:** skip cache when checking old passwd ([7800ef6](https://github.com/HeyPuter/puter/commit/7800ef61029c8d1ba47491b4028a0cb972298725))
* **Terminal:** Accept input from Chrome on Android ([4ef3e53](https://github.com/HeyPuter/puter/commit/4ef3e53de34f0097950a7e707ca2483863beafb5))
* test release-please action [#3](https://github.com/HeyPuter/puter/issues/3) ([8fb0a66](https://github.com/HeyPuter/puter/commit/8fb0a66ef21921990e564e5f61c0e80e7f929dc7))
* test release-please action [#4](https://github.com/HeyPuter/puter/issues/4) ([f392de7](https://github.com/HeyPuter/puter/commit/f392de722a5232b622ed91b656a31cdc443c2e84))
* typographical error :bug: ([2949f71](https://github.com/HeyPuter/puter/commit/2949f71691eb0a258888c5d2a5bb496d2fe64a23))
* typographical errors :bug: ([4d30740](https://github.com/HeyPuter/puter/commit/4d30740198402cd1cc61b9ea4c45e006b69ec87e))
* Use correct variable for version number ([52d5299](https://github.com/HeyPuter/puter/commit/52d52993744dffa9f7f59a232da5df9077560731))
* use primary read in signup ([30f17ad](https://github.com/HeyPuter/puter/commit/30f17ade3a893d2283316e581836607e2029f9b9))
## [2.2.0](https://github.com/HeyPuter/puter/compare/v2.1.1...v2.2.0) (2024-04-23)
### Features
* add /healthcheck endpoint ([c166560](https://github.com/HeyPuter/puter/commit/c166560ff4ab5a453d3ec4f97326c995deb7f522))
* allow apps to add a menubar via puter.js ([331d9e7](https://github.com/HeyPuter/puter/commit/331d9e75428ec7609394f59b1755374c7340f83e))
## [2.1.1](https://github.com/HeyPuter/puter/compare/v2.1.0...v2.1.1) (2024-04-22)
### Bug Fixes
* test release-please action [#3](https://github.com/HeyPuter/puter/issues/3) ([8fb0a66](https://github.com/HeyPuter/puter/commit/8fb0a66ef21921990e564e5f61c0e80e7f929dc7))
* test release-please action [#4](https://github.com/HeyPuter/puter/issues/4) ([f392de7](https://github.com/HeyPuter/puter/commit/f392de722a5232b622ed91b656a31cdc443c2e84))
+27 -78
View File
@@ -1,101 +1,50 @@
# Contributing to Puter
# Contributing to Puter Backend
Welcome to Puter, the open-source distributed internet operating system. We're excited to have you contribute to our project, whether you're reporting bugs, suggesting new features, or contributing code. This guide will help you get started with contributing to Puter in different ways.
Thanks for contributing. These rules aren't strictly enforced — but following them makes every PR easier. If anything's unclear, ping a core maintainer or open the PR and ask.
<br>
New to the backend? Start with [doc/architecture.md](doc/architecture.md).
# Report bugs
---
Before reporting a bug, please check our [the issues on our GitHub repository](https://github.com/HeyPuter/puter/issues) to see if the bug has already been reported. If it has, you can add a comment to the existing issue with any additional information you have.
## 1. Test it. Run it.
If you find a new bug in Puter, please [open an issue on our GitHub repository](https://github.com/HeyPuter/puter/issues/new). We'll do our best to address the issue as soon as possible. When reporting a bug, please include as much information as possible, including:
Run the affected code path end-to-end before opening a PR. "It builds" is not "it works."
- A clear and descriptive title
- A description of the issue
- Steps to reproduce the bug
- Expected behavior
- Actual behavior
- Screenshots, if applicable
- Your host operating system and browser
- Your Puter version, location, ...
Add tests for new behavior, endpoints, or bug fixes. If something's genuinely hard to test, say so in the PR.
Please open a separate issue for each bug you find.
## 2. Follow existing patterns
Maintainers will apply the appropriate labels to your issue.
Match the shape of similar code already in the repo. [doc/architecture.md](doc/architecture.md) is the source of truth for layers, wiring, and naming. If you think a pattern is wrong, raise it — don't quietly diverge.
<br>
## 3. Don't expose system or user information
# Suggest new features
Scan your diff for stray logs, debug routes, internal paths, secrets, tokens, or user data in errors/responses. When in doubt, return less. Flag any auth, permission, or data-export changes in the PR description.
If you have an idea for a new feature in Puter, please open a new discussion thread on our [GitHub repository](https://github.com/HeyPuter/puter/discussions) to discuss your idea with the community. We'll do our best to respond to your suggestion as soon as possible.
For private security reports, see [SECURITY.md](SECURITY.md).
When suggesting a new feature, please include as much information as possible, including:
## 4. AI-assisted code is fine — understood code is required
- A clear and descriptive title
- A description of the feature
- The problem the feature will solve
- Any relevant screenshots or mockups
- Any relevant links or resources
Don't commit code you couldn't have written, debugged, or defended yourself. Read the diff, run it, and be ready to explain it in review.
<br>
## 5. Update docs for API changes
# Contribute code
If you change puter-js APIs (drivers or endpoints used by puter-js), update [developer docs](src/docs/). puter-js itself may also need updating.
If you'd like to contribute code to Puter, you need to fork the project and submit a pull request. If this is your first time contributing to an open-source project, we recommend reading this short guide by GitHub on [how to contribute to a project](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project).
## 6. Boy Scout Rule — leave it 1% better
We'll review your pull request and work with you to get your changes merged into the project.
![Boy Scout Rule](https://imgs.search.brave.com/DMmIWl5-NuZVtrR9kXBb06AKF8kturkgSW9UMb2-6m4/rs:fit:860:0:0:0/g:ce/aHR0cHM6Ly9sYXdz/b2Zzb2Z0d2FyZWVu/Z2luZWVyaW5nLmNv/bS9pbWFnZXMvbGF3/cy9ib3ktc2NvdXQt/cnVsZS5wbmc)
## Your first code contribution
Fix the typo, the dead import, the missing test, the bit you had to read twice. Keep cleanup proportional to the change — no refactors riding along on bug fixes.
We maintain a list of issues that are good for first-time contributors. You can find these issues by searching for the [`good first issue`](https://github.com/HeyPuter/puter/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) label in our [GitHub repository](https://github.com/HeyPuter/puter). These issues are designed to be relatively easy to fix, and we're happy to help you get started. Pick an issue that interests you, and leave a comment on the issue to let us know you're working on it.
---
<br>
## Opening a PR
## Documentation for Contributors
- One thing per PR where possible.
- Describe **what** and **why**; the diff shows how.
- Mention how you tested user-visible changes.
- Drafts welcome.
See [doc/contributors/index.md](./doc/contributors/index.md) for more information.
---
<br>
## Commit Messages
Use the imperative, as is the convention in the Linux kernel:
- correct: `Improve performance of readdir`
- incorrect: `Improved readdir`
- incorrect: `Improving readdir`
We have the following exceptions to this rule:
- If the commit message is in _past tense_, it's a shorthand for the following:
- `Apply changes that would be applied after one had <past tense message>`
- If the commit message is in _present tense_, it's shorthand for the following:
- `Apply changes that would be applied after <present-tense message>`
For example, the following are correct:
- `Improved readdir`
- interpret this as: `Apply changes that would be applied after one had improved readdir`
- `Improving readdir`
- interpret this as: `Apply changes that would be applied after improving readdir`
<br>
## Code Review
Once you've submitted your pull request, the project maintainers will review your changes. We may suggest some changes or improvements. This is a normal part of the process, and your contributions are greatly appreciated!
<br>
## Contribution License Agreement (CLA)
Like many open source projects, we require contributors to sign a Contribution License Agreement (CLA) before we can accept your code. When you open a pull request for the first time, a bot will automatically add a comment with a link to the CLA. You can sign the CLA electronically by following the link and filling out the form.
<br>
# Getting Help
If you have any questions about Puter, please feel free to reach out to us through the following channels:
- [Discord](https://discord.com/invite/PQcx7Teh8u)
- [Reddit](https://www.reddit.com/r/Puter/)
- [Twitter](https://twitter.com/HeyPuter)
- [Email](mailto:[email protected])
Questions? Message a core maintainer. Welcome aboard.
+69 -45
View File
@@ -1,64 +1,88 @@
# /!\ NOTICE /!\
# syntax=docker/dockerfile:1.7
#
# OSS Puter image — multi-arch (linux/amd64, linux/arm64).
#
# Build & push:
# docker buildx build --platform linux/amd64,linux/arm64 \
# -t ghcr.io/heyputer/puter:latest --push .
#
# Local single-arch build:
# docker build -t puter .
#
# Self-hosters inject configuration by mounting a config.json at
# /etc/puter/config.json. It is deep-merged over the bundled
# config.default.json, so partial overrides work. Absent file = defaults.
# Many of the developers DO NOT USE the Dockerfile or image.
# While we do test new changes to Docker configuration, it's
# possible that future changes to the repo might break it.
# When changing this file, please try to make it as resiliant
# to such changes as possible; developers shouldn't need to
# worry about Docker unless the build/run process changes.
# ---- Build stage ----
FROM node:24-slim AS build
# Build stage
FROM node:21-alpine AS build
WORKDIR /opt/puter
# Install build dependencies
RUN apk add --no-cache git python3 make g++ \
&& ln -sf /usr/bin/python3 /usr/bin/python
# Build toolchain needed for native deps (bcrypt, sharp, better-sqlite3, …).
RUN apt-get update && \
apt-get install -y --no-install-recommends python3 make g++ git && \
rm -rf /var/lib/apt/lists/*
# Set up working directory
WORKDIR /app
ENV HUSKY=0
ENV npm_config_fund=false
ENV npm_config_audit=false
# Copy package.json and package-lock.json
COPY package*.json ./
# ---- Dependency layer ---------------------------------------------------
# Copy ONLY package manifests + lockfile first so the npm-install layer
# stays cached when only source files change.
COPY package.json package-lock.json ./
COPY src/backend/package.json src/backend/
COPY src/gui/package.json src/gui/
COPY src/puter-js/package.json src/puter-js/package-lock.json src/puter-js/
COPY src/worker/package.json src/worker/
COPY src/docs/package.json src/docs/
# Copy the source files
# extensionSetup.mjs runs as the postinstall hook during npm ci. (No-ops
# unless any packages/puter/extensions/* gain a package.json.)
COPY tools/extensionSetup.mjs tools/extensionSetup.mjs
RUN --mount=type=cache,target=/root/.npm \
npm ci
# ---- Source layer -------------------------------------------------------
COPY . .
# Install node modules
RUN npm cache clean --force \
&& npm ci
# Compile backend TS, then build GUI + puter-js webpack bundles in
# parallel. The GUI/puter-js bundles are how /dist/bundle.min.{js,css}
# and /sdk/puter.js fall back to local assets when the kernel-config
# CDN keys are unset.
RUN npm run build:ts
RUN set -e; \
(cd src/gui && node ./build.js) & gui_pid=$!; \
(cd src/puter-js && npm run build) & pjs_pid=$!; \
wait $gui_pid; \
wait $pjs_pid
# Run the build command if necessary
RUN cd src/gui && npm run build && cd -
# ---- Runtime stage (slim — no build tools) ----
FROM node:24-slim
# Production stage
FROM node:21-alpine
WORKDIR /opt/puter
# Set labels
LABEL repo="https://github.com/HeyPuter/puter"
LABEL license="AGPL-3.0,https://github.com/HeyPuter/puter/blob/master/LICENSE.txt"
LABEL version="1.2.46-beta-1"
# git: runtime version probe. wget: HEALTHCHECK.
RUN apt-get update && \
apt-get install -y --no-install-recommends git wget && \
rm -rf /var/lib/apt/lists/*
# Install git (required by Puter to check version)
RUN apk add --no-cache git
COPY --from=build --chown=node:node /opt/puter .
# Set up working directory
RUN mkdir -p /opt/puter/app
WORKDIR /opt/puter/app
RUN mkdir -p /etc/puter /var/puter && \
chown -R node:node /etc/puter /var/puter
# Copy built artifacts and necessary files from the build stage
COPY --from=build /app/src/gui/dist ./dist
COPY --from=build /app/node_modules ./node_modules
COPY . .
# Set permissions
RUN chown -R node:node /opt/puter/app
USER node
# Self-hosters mount their override at this exact path. The v2 loader
# deep-merges it over config.default.json (see backend/index.ts).
ENV PUTER_CONFIG_PATH=/etc/puter/config.json
ENV NODE_OPTIONS=--enable-source-maps
EXPOSE 4100
HEALTHCHECK --interval=30s --timeout=3s \
USER node
HEALTHCHECK --interval=30s --timeout=3s --start-period=30s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://puter.localhost:4100/test || exit 1
ENV NO_VAR_RUNTUME=1
CMD ["npm", "start"]
CMD ["node", "-r", "./dist/src/backend/telemetry.js", "./dist/src/backend/index.js"]
+72 -54
View File
@@ -1,37 +1,39 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">The Internet OS! Free, Open-Source, and Self-Hostable.</h3>
<h3 align="center">The Open-Source Internet Computer!</h3>
<p align="center">
<a href="https://puter.com/"><strong>« LIVE DEMO »</strong></a>
<a href="https://puter.com/?ref=github.com"><strong>« LIVE DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
<a href="https://puter.com/?ref=github.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
<a href="https://apps.puter.com/">App Store</a>
·
<a href="https://developer.puter.com" target="_blank">Developers</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
·
<a href="https://hackerone.com/puter_h1b">Bug Bounty</a>
<a href="https://twitter.com/HeyPuter">X</a>
</p>
<h3 align="center"><img width="700" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot.webp"></h3>
<br/>
## Puter
Puter is an advanced, open-source internet operating system designed to be feature-rich, exceptionally fast, and highly extensible. Puter can be used as:
Puter is an advanced, open-source, self-hostable internet computer designed to be feature-rich, fast, and highly extensible.
- A privacy-first personal cloud to keep all your files, apps, and games in one secure place, accessible from anywhere at any time.
- A platform for building and publishing websites, web apps, and games.
- An alternative to Dropbox, Google Drive, OneDrive, etc. with a fresh interface and powerful features.
- A remote desktop environment for servers and workstations.
- A friendly, open-source project and community to learn about web development, cloud computing, distributed systems, and much more!
### For Users
Puter's goal is to provide you with every app and feature you need to work, create, and play under one roof. From a simple [Notepad](https://online-notepad.com) and [Voice Recorder](https://voice-recorder.com) to [Spreadsheet](https://apps.puter.com/app/spreadsheet) and [Camera](https://online-camera.com), Puter wants to be the all-in-one solution for your digital life.
### For Developers
Puter provides everything you need to build and publish web apps and games. From [AI](https://developer.puter.com/ai/) to [Cloud Storage](https://developer.puter.com/object-storage/) and [Database](https://developer.puter.com/key-value-database/) to [Serverless Workers](https://developer.puter.com/serverless-workers/), Puter has you covered. Puter also helps you get users! Once you build your app, you can publish it on our [App Store](https://apps.puter.com/) to reach and monetize users.
<br/>
@@ -43,34 +45,30 @@ Puter is an advanced, open-source internet operating system designed to be featu
```bash
git clone https://github.com/HeyPuter/puter
cd puter
cp .env.example .env
npm install
npm start
```
**→** This should launch Puter at http://puter.localhost:4100
This will launch Puter at http://localhost:4000 (or the next available port).
<br/>
### 🐳 Docker
### 🚀 Self-Hosting
#### Linux/macOS
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
curl -fsSL https://puter.com/selfhost | sh
```
<br/>
#### Windows
### 🐙 Docker Compose
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```powershell
irm https://puter.com/selfhost?os=windows | iex
```
**→** For more details, see [Self-Hosting Puter](./doc/self-hosting.md).
<br/>
### ☁️ Puter.com
@@ -79,40 +77,60 @@ Puter is available as a hosted service at [**puter.com**](https://puter.com).
<br/>
## Support
Connect with the maintainers and community through these channels:
## License
- Bug report or feature request? Please [open an issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Security issues or abuse reports? [[email protected]](mailto:[email protected])
- Email maintainers at [[email protected]](mailto:[email protected])
This repository is licensed under AGPL-3.0; However, our SDK (puter.js) is also available under Apache 2.0, as indicated by the license file in that section (packages/puter-js) of this repository.
We are always happy to help you with any questions you may have. Don't hesitate to ask!
<br/>
## #DoesItRunPuter
## License
- [Minecraft](https://twitter.com/HeyPuter/status/1771957571496092036) | [video](https://www.youtube.com/watch?v=GIowZUXkg5g)
- [Samsung Watch](https://twitter.com/CharmunkDev/status/1781501714543030554)
- [PlayStation 4](https://twitter.com/HeyPuter/status/1767978053014270059)
- [Skyworth TV](https://twitter.com/ericalexdube/status/1767983049277411564)
- [A Fridge!](https://twitter.com/HeyPuter/status/1778890003797745842)
- [Oculus Quest 2](https://twitter.com/HeyPuter/status/1768664081756754012)
- [Tesla Model 3](https://twitter.com/EricLighthall/status/1781479732997214501)
- [Tesla Model S](https://twitter.com/HeyPuter/status/1767971178864587057)
- [Tesla Model Y](https://twitter.com/HeyPuter/status/1772858333751636310)
- [Nintendo Switch](https://twitter.com/HeyPuter/status/1780645795240538518)
- [Steam Deck](https://twitter.com/everythingSung/status/1782162352403828793)
This repository, including all its contents, sub-projects, modules, and components, is licensed under [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) unless explicitly stated otherwise. Third-party libraries included in this repository may be subject to their own licenses.
<br/>
## Credits
## Translations
The default wallpaper is created by [Milad Fakurian](https://unsplash.com/photos/blue-orange-and-yellow-wallpaper-E8Ufcyxz514) and published on [Unsplash](https://unsplash.com/).
Icons by [Papirus](https://github.com/PapirusDevelopmentTeam/papirus-icon-theme) under GPL-3.0 license.
Icons by [Iconoir](https://iconoir.com/) under MIT license.
Icons by [Elementary Icons](https://github.com/elementary/icons) under GPL-3.0 license.
Icons by [Tabler Icons](https://tabler.io/) under MIT license.
Icons by [bootstrap-icons](https://icons.getbootstrap.com/) under MIT license.
- [Arabic / العربية](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ar.md)
- [Armenian / Հայերեն](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hy.md)
- [Bengali / বাংলা](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.bn.md)
- [Chinese / 中文](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.zh.md)
- [Danish / Dansk](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.da.md)
- [English](https://github.com/HeyPuter/puter/blob/main/README.md)
- [Farsi / فارسی](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fa.md)
- [Finnish / Suomi](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fi.md)
- [French / Français](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fr.md)
- [German / Deutsch](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.de.md)
- [Hebrew/ עברית](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.he.md)
- [Hindi / हिंदी](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hi.md)
- [Hungarian / Magyar](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hu.md)
- [Indonesian / Bahasa Indonesia](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.id.md)
- [Italian / Italiano](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.it.md)
- [Japanese / 日本語](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.jp.md)
- [Korean / 한국어](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ko.md)
- [Malay / Bahasa Malaysia](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.my.md)
- [Malayalam / മലയാളം](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ml.md)
- [Polish / Polski](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pl.md)
- [Portuguese / Português](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pt.md)
- [Punjabi / ਪੰਜਾਬੀ](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pa.md)
- [Romanian / Română](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ro.md)
- [Russian / Русский](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ru.md)
- [Spanish / Español](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.es.md)
- [Swedish / Svenska](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.sv.md)
- [Tamil / தமிழ்](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ta.md)
- [Telugu / తెలుగు](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.te.md)
- [Thai / ไทย](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.th.md)
- [Turkish / Türkçe](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.tr.md)
- [Ukrainian / Українська](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ua.md)
- [Urdu / اردو](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ur.md)
- [Vietnamese / Tiếng Việt](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.vi.md)
+3 -1
View File
@@ -3,5 +3,7 @@ We would like to thank the following security researchers for their responsible
# 2024
- Tim Suess: [GitHub](https://github.com/blackfortresslabs) | [Email]([email protected]) | [Website](blackfortresslabs.com)
- Ritesh Sahu [GitHub](https://github.com/riteshs4hu/) | [X](https://x.com/riteshs4hu) | [Website](https://medium.com/@riteshs4hu)
- Tim Suess: [GitHub](https://github.com/blackfortresslabs) | [Email]([email protected]) | [Website](https://www.blackfortresslabs.com)
- xyzeva: [Github](https://github.com/xyzeva) | [Email](mailto:[email protected]) | [Website](https://kibty.town/)
- Yusuf Kelany: [GitHub](https://github.com/YusufYaser) | [X](https://x.com/RealYusufYaser) | [Website](https://yusufyaser.xyz)
+2 -2
View File
@@ -14,7 +14,8 @@ If you believe you've found a security issue in software that is maintained in t
To submit a vulnerability report, please contact us at security@puter.com. Your submission will be reviewed and validated by a member of our team.
**⚠ Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests. ⚠**
> [!WARNING]
> Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.
<br>
@@ -37,4 +38,3 @@ Please submit a report to us before engaging in conduct that may be inconsistent
* Please provide detailed reports with reproducible steps and a clearly defined impact.
* Include the version number of the vulnerable package in your report
* Social engineering (e.g. phishing, vishing, smishing) is prohibited.
+214
View File
@@ -0,0 +1,214 @@
# Trademark Guidelines
Version 1.0 dated January 1, 2025
<img src="https://puter.com/images/logo.png" alt="Puter Technologies Inc. Logo" width="150"/>
<br>
This trademark policy was prepared to help you understand how to use the Puter trademarks, service marks and logos with Puter Technologies Inc.'s Puter software.
While some of our software is available under a free and open source software license, that copyright license does not include a license to use our trademark, and this Policy is intended to explain how to use our marks consistent with background law and community expectation.
This Policy covers:
1. Our **word** trademarks and service marks: Puter Technologies Inc., Puter, Puter.com
2. Our **logos**: The Puter Technologies Inc. logo at the top of this policy
This policy encompasses all trademarks and service marks, whether they are registered or not.
<br>
<br>
## 1. GENERAL GUIDELINES
Whenever you use one of our marks, you must always do so in a way that does not mislead anyone about what they are getting and from whom. For example, you cannot say you are providing the Puter software when you're providing a modified version of it, because recipients may not understand the differences between your modified versions and our own.
You also cannot use our logo on your website in a way that suggests that your website is an official website or that we endorse your website.
You can, though, say you like the Puter software, that you participate in the Puter community, that you are providing an unmodified version of the Puter software.
You may not use or register our marks, or variations of them as part of your own trademark, service mark, domain name, company name, trade name, product name or service name.
Trademark law does not allow your use of names or trademarks that are too similar to ours. You therefore may not use an obvious variation of any of our marks or any phonetic equivalent, foreign language equivalent, takeoff, or abbreviation for a similar or compatible product or service. We would consider the following too similar to one of our Marks:
- MyPuter
- PuterFooBar
<br>
<br>
## 2. ACCEPTABLE USES
<br>
### Distribution of Unmodified Software
When you redistribute an unmodified copy of Puter software, you must retain all trademarks, logos, and notices we have placed on the software to identify its origin. This includes:
* Binary distributions exactly as we provide them
* Source code distributions exactly as we provide them
* Documentation and other materials directly from our official repositories
<br>
### Distribution of Modified Software
If you distribute a modified version of Puter software, you:
* Must remove all Puter logos from the modified software
* May use our word marks (but not logos) to accurately describe the software's origin
* Must clearly indicate that the software has been modified
* Must include a notice stating: "This software is a modified version of Puter software and is not endorsed by Puter Technologies Inc."
Example of acceptable description: "This software is derived from Puter software and includes modifications for [describe your changes]."
<br>
### Compatibility Statements
You may use our word marks (but not logos) to accurately describe your software's compatibility with Puter software under these conditions:
* Your statements about compatibility must be accurate and not misleading
* You must include the following notice: "Puter is a trademark of Puter Technologies Inc. This [product/service] is not affiliated with or endorsed by Puter Technologies Inc."
* You may not suggest that Puter Technologies Inc. has certified or approved your software
<br>
### Products Built for Puter
You may describe your product as working with or being built for Puter if:
* Your product is fully compatible with the documented Puter APIs
* Your product name follows this format: "[Your Product Name] for Puter"
* You include this notice in all materials: "Puter is a trademark of Puter Technologies Inc. [Your Product Name] is not affiliated with or endorsed by Puter Technologies Inc."
* Your branding and marketing materials do not create confusion about the source of your product
<br>
### Open Source Projects
For open source projects that interact with or extend Puter software:
* You may use "puter" as part of your project name only if:
* The name is in the format "[descriptor]-puter" (e.g., "auth-puter", "backup-puter")
* The project's README clearly states it's not officially associated with Puter
* The project maintains compatibility with current Puter APIs
* You must not use our logos without explicit permission
* You must include appropriate trademark attribution notices
<br>
### Community Activities
You may use our word marks (but not logos) for non-commercial community activities:
* User groups and meetups focused on Puter software
* Educational content about Puter software
* Blog posts, videos, articles, or tutorials about Puter software
Conditions for community use:
* Activities must be non-commercial
* Any fees charged must only cover actual costs
* You must include appropriate trademark attribution
* You must not suggest official endorsement without explicit permission
<br>
### Merchandise and Promotional Items
You may not create merchandise or promotional items bearing our marks without explicit written permission from Puter Technologies Inc.
<br>
### Academic and Research Use
You may use our word marks (but not logos) in:
* Academic papers
* Research publications
* Technical documentation
* Educational materials
Include appropriate citations and trademark attributions in such uses.
<br>
### Online Content and Social Media
When using our marks in online content:
* You may use our word marks in hashtags, handles, or usernames if:
* The content is clearly about Puter software
* You don't imply official status
* You include appropriate trademark attribution
* You must not register social media accounts that could be confused with official Puter accounts
<br>
### APIs and Development
When developing with Puter APIs:
* You may use our word marks to accurately describe your integration
* You must not use our marks in a way that suggests your API or service is endorse by
Puter or provided by Puter
* You must include appropriate trademark attribution
All uses described above must also comply with the General Guidelines section of this policy and maintain the integrity of our marks as described in the How to Display Our Marks section.
<br>
### No Domain Names
You must not register any domain that includes our word marks or any variant or combination of them.
<br>
<br>
## 3. HOW TO DISPLAY OUR MARKS
When you have the right to use our mark, here is how to display it.
<br>
### Trademark marking and legends
The first or most prominent mention of a mark on a webpage, document, or documentation should be accompanied by a symbol indicating whether the mark is a registered trademark ("®") or an unregistered trademark ("™"). If you don't know which applies, contact us.
Place the following notice at the foot of the page where you have used the mark: "Puter is trademark of Puter Technologies Inc."
<br>
### Use of trademarks in text
**Always use trademarks in their exact form with the correct spelling, neither abbreviated, hyphenated, or combined with any other word or words.**
Unacceptable: Puter-DB
**Don't pluralize a trademark.**
Unacceptable: I have seventeen Puters running in my lab.
**Always use a trademark as an adjective modifying a noun.**
Unacceptable: This is a Puter.
Acceptable: This is a Puter software application.
<br>
### Use of Logos
You may not change any logo except to scale it. This means you may not add decorative elements, change the colors, change the proportions, distort it, add elements, or combine it with other logos.
However, when the context requires the use of black-and-white graphics and the logo is color, you may reproduce the logo in a manner that produces a black-and-white image.
<br>
<br>
## This Document
These guidelines are based on the Model Trademark Guidelines, available at http://www.modeltrademarkguidelines.org., used under a Creative Commons Attribution 3.0 Unported license: https://creativecommons.org/licenses/by/3.0/deed.en_US.
+43
View File
@@ -0,0 +1,43 @@
{
"config_name": "oss-default",
"env": "dev",
"port": 4100,
"protocol": "http",
"domain": "puter.localhost",
"cookie_name": "puter_auth_token",
"jwt_secret": "dev-jwt-secret-change-me",
"url_signature_secret": "dev-url-signature-secret-change-me",
"allow_all_host_values": true,
"allow_no_host_header": true,
"no_devwatch": false,
"enable_public_folders": true,
"is_storage_limited": false,
"min_pass_length": 6,
"static_hosting_domain": "site.puter.localhost",
"static_hosting_domain_alt": "host.puter.localhost",
"private_app_hosting_domain": "app.puter.localhost",
"private_app_hosting_domain_alt": "dev.puter.localhost",
"captcha": { "enabled": false },
"default_user_group": "78b1b1dd-c959-44d2-b02c-8735671f9997",
"default_temp_group": "b7220104-7905-4985-b996-649fdcdb3c8f",
"storage_capacity": 104857600,
"strict_email_verification_required": false,
"gui_assets_root": "./src/gui",
"puterjs_root": "./src/puter-js/dist",
"builtin_apps": {
"dev-center": "./src/dev-center"
},
"extensions": [
"./extensions"
],
"database": {
"engine": "sqlite",
"path": "volatile/runtime/puter-database.sqlite"
},
"s3": {
"localConfig": {
"dataDir": "volatile/runtime/fauxqs-data",
"s3StorageDir": "volatile/runtime/fauxqs-s3-data"
}
}
}
+352
View File
@@ -0,0 +1,352 @@
{
// Comprehensive template — every key the OSS backend or shipped (non-prod)
// extensions read. Copy to `config.json` and trim what you don't need;
// unset keys fall back to documented defaults. See
// `src/backend/types.ts` for the per-field source of truth.
//
// Each setting lives at exactly one canonical key — there are no fallback
// aliases. Values shown are illustrative, not production secrets.
//
// Keys consumed only by closed-source / hosted-prod extensions (clickhouse,
// cacheUpdateHandler, pages, prodMeteringAndBilling, …) are intentionally
// omitted.
// ── Environment / identity ──────────────────────────────────────────
"config_name": "template",
// `dev` opens a browser on boot, skips blocked-email checks, and runs the
// dev-time webpack watcher; `prod` serves pre-built bundles.
"env": "dev",
"version": "0.0.0",
// Stable identity for this server node — used by pager alerts and
// graceful-shutdown coordination.
"serverId": "node-1",
// ── Networking / URLs ───────────────────────────────────────────────
// Port Puter listens on internally.
"port": 4100,
// Externally-visible port (set this when behind a reverse proxy on 80/443).
"pub_port": 4100,
"protocol": "http",
"domain": "puter.localhost",
// Fully-qualified externally-visible URL. Computed from protocol/domain/
// pub_port if unset.
"origin": "http://puter.localhost:4100",
// Public base URL for the API subdomain (used to build signed URLs and
// surfaced to the client by the `installedApps` and `whoami` extensions).
"api_base_url": "http://api.puter.localhost:4100",
// Subdomains Puter routes on. Wildcard DNS (`*.<domain>`) must point at
// this server for site/app hosting to work.
"static_hosting_domain": "site.puter.localhost",
"static_hosting_domain_alt": "host.puter.localhost",
"private_app_hosting_domain": "app.puter.localhost",
"private_app_hosting_domain_alt": "dev.puter.localhost",
// Host-header / domain handling. Defaults below are the dev-friendly
// settings; tighten for any public install.
"allow_all_host_values": true,
"allow_no_host_header": true,
"allow_nipio_domains": false,
"custom_domains_enabled": false,
"enable_ip_validation": false,
// Express `trust proxy` setting — set to the number of reverse-proxy
// hops in front of the server (1 = nginx/Cloudflare, 2 = CF→ALB→app),
// or to a CIDR / IP / list. `false` (safe default) makes `req.ip` the
// direct socket peer. NEVER set to `true` in prod — it trusts every hop
// and makes X-Forwarded-For forgeable.
"trust_proxy": false,
"no_browser_launch": false,
// ── Dev watcher (devWatcher extension) ──────────────────────────────
// Rebuilds GUI + puter.js on file changes when running from source.
// Ignored when `env: "prod"` unless `devwatch.enabled: true`.
"no_devwatch": false,
"devwatch": {
// Delay after watcher startup before boot continues. Lets webpack
// emit its first build so the homepage doesn't 404 on bundle.min.js.
"ready_delay_ms": 5000
},
// ── Auth / session ──────────────────────────────────────────────────
// ALWAYS replace these for any public install — `openssl rand -hex 64`.
"jwt_secret": "change-me",
"url_signature_secret": "change-me",
"cookie_name": "puter_auth_token",
"min_pass_length": 6,
"allow_system_login": false,
"strict_email_verification_required": false,
"captcha": {
"enabled": false,
"difficulty": "medium"
},
"oidc": {
"providers": {
// Google uses OIDC discovery — only ids are required.
"google": {
"client_id": "",
"client_secret": "",
"scopes": "openid email profile"
},
// Custom OIDC providers must also supply the three endpoints.
"custom-oidc": {
"client_id": "",
"client_secret": "",
"authorization_endpoint": "",
"token_endpoint": "",
"userinfo_endpoint": "",
"scopes": "openid email profile"
}
}
},
// ── Groups / provisioning ───────────────────────────────────────────
// UIDs of the persistent groups new users are auto-enrolled in.
"default_user_group": "78b1b1dd-c959-44d2-b02c-8735671f9997",
"default_temp_group": "b7220104-7905-4985-b996-649fdcdb3c8f",
// When true, ACL grants read/list on `/<user>/Public` to any actor.
"enable_public_folders": true,
// ── Storage / S3 ────────────────────────────────────────────────────
"s3": {
// Local fauxqs (in-process S3-compatible) — used in dev and the
// bundled-defaults Docker mode. Files land under `dataDir`.
"localConfig": {
"inMemory": false,
"host": "127.0.0.1",
"port": 4566,
"dataDir": "volatile/runtime/fauxqs-data",
"s3StorageDir": "volatile/runtime/fauxqs-s3-data"
},
// For real / external S3, replace `localConfig` above with `s3Config`.
"_remote_example": {
"s3Config": {
"useCredentialChain": false,
"endpoint": "https://s3.example.com",
// Endpoint used in presigned URLs handed to the browser. Set
// this when the server-side endpoint isn't reachable from the
// browser (e.g. docker-internal `http://s3:9000`).
"publicEndpoint": "",
"accessKeyId": "",
"secretAccessKey": "",
"region": "us-west-2",
// Set true for RustFS / MinIO / fauxqs (path-style URLs).
// Real AWS S3 wants virtual-hosted — leave unset / false.
"forcePathStyle": false
}
}
},
"s3_bucket": "puter-local",
"s3_region": "us-west-2",
"region": "us-west-2",
// Default per-user storage cap (bytes). 100 MB.
"storage_capacity": 104857600,
"is_storage_limited": false,
"available_device_storage": 0,
// ── Thumbnails (thumbnails extension) ───────────────────────────────
// Optional dedicated S3-compatible bucket for generated thumbnails.
// When unset (or `endpoint` empty), the extension falls back to the
// main S3 client / bucket above.
"thumbnailStore": {
"name": "puter-local",
"endpoint": "",
"credentials": {
"accessKeyId": "",
"secretAccessKey": ""
}
},
// ── Database ────────────────────────────────────────────────────────
"database": {
// `sqlite` for single-node / dev; `mysql` for self-host with MariaDB.
"engine": "sqlite",
// sqlite — file path on disk
"path": "volatile/runtime/puter-database.sqlite",
"targetVersion": 0,
// mysql — connection details
"host": "",
"port": 3306,
"user": "",
"password": "",
"database": "",
// Optional read-replica pool. Reads route here when populated.
"replica": {
"host": "",
"port": 3306,
"user": "",
"password": "",
"database": ""
}
// mysql self-host bootstrap: set `migrationPaths` to apply the bundled
// schema on first boot. Idempotent — safe to leave on.
// "migrationPaths": ["./src/backend/clients/database/migrations/mysql"]
},
// ── DynamoDB (KV store) ─────────────────────────────────────────────
"dynamo": {
// Local emulator (dynamodb-local) endpoint. Drop this field for real
// AWS DynamoDB.
"endpoint": "http://localhost:8000",
// Set true when pointing at a local emulator so Puter creates the KV
// table on boot. NEVER set against real AWS — provision via IaC.
// "bootstrapTables": true,
"path": "",
// Credentials. NOTE: snake_case here, unlike `s3.s3Config` below.
// For dynamodb-local, any non-empty values work.
"aws": {
"access_key": "",
"secret_key": "",
"region": "us-west-2"
}
},
// ── Redis / Valkey (cache + cross-node rate limit) ──────────────────
"redis": {
// True → in-process redis-mock (dev / single-node).
"useMock": true,
// Cluster nodes for ioredis. For a single Valkey/Redis container,
// run it in cluster mode (one node, all slots).
"startupNodes": [
{
"host": "127.0.0.1",
"port": 7000
}
]
// Defaults to true (matches prod ElastiCache). Set false for plain-TCP
// self-host Valkey/Redis.
// "tls": false
},
// ── Email (transactional) ───────────────────────────────────────────
// Nodemailer transport — used for password resets, email confirmation, etc.
"email": {
"from": "\"Puter\" <[email protected]>",
"host": "smtp.example.com",
"port": 587,
"secure": false,
"service": "",
"auth": {
"user": "",
"pass": ""
}
},
// ── Rate limiting ───────────────────────────────────────────────────
// `memory` for single-node, `redis` for multi-node (default), `kv` for
// dynamo-backed counters.
"rate_limit": {
"backend": "redis"
},
// ── AI / integration providers ──────────────────────────────────────
// All AI drivers (chat, image, video, TTS, OCR, STT) read from here.
// Provider id == driver-side identifier. Leave empty / omit to disable.
"providers": {
// ─ Chat / completion ─
"claude": { "apiKey": "" },
"openai-completion": { "apiKey": "" },
"gemini": { "apiKey": "" },
"groq": { "apiKey": "" },
"deepseek": { "apiKey": "" },
"mistral": { "apiKey": "" },
"xai": { "apiKey": "" },
"moonshot": { "apiKey": "" },
"openrouter": {
"apiKey": "",
"apiBaseUrl": "https://openrouter.ai/api/v1"
},
"together-ai": { "apiKey": "" },
// Local Ollama. `enabled: false` skips the auto-probe at startup
// (otherwise Puter logs ECONNREFUSED on every boot when no Ollama
// is running).
"ollama": {
"enabled": false,
"apiBaseUrl": "http://localhost:11434"
},
// ─ Image generation ─
"openai-image-generation": { "apiKey": "" },
"gemini-image-generation": { "apiKey": "" },
"together-image-generation": { "apiKey": "" },
"cloudflare-image-generation": {
"apiToken": "",
"accountId": "",
"apiBaseUrl": "https://api.cloudflare.com/client/v4"
},
"xai-image-generation": { "apiKey": "" },
// ─ Video generation ─
"openai-video-generation": { "apiKey": "" },
"together-video-generation": { "apiKey": "" },
"gemini-video-generation": { "apiKey": "" },
// ─ Speech / OCR ─
"openai": { "apiKey": "" },
"elevenlabs": {
"apiKey": "",
"apiBaseUrl": "https://api.elevenlabs.io",
"defaultVoiceId": "",
"speechToSpeechModelId": ""
},
"aws-polly": {
"access_key": "",
"secret_key": "",
"region": "us-west-2"
},
"aws-textract": {
"access_key": "",
"secret_key": "",
"region": "us-west-2"
},
"mistral-ocr": { "apiKey": "" }
},
// ── GUI / static mounts ─────────────────────────────────────────────
"gui_assets_root": "./src/gui",
"gui_profile": "development",
"builtin_apps": {
"dev-center": "./src/dev-center"
},
// Force the bundled GUI even in dev — set true when running from a
// pre-built tree without webpack-dev-server.
"use_bundled_gui": false,
"gui_bundle": "/dist/bundle.min.js",
"gui_css": "/dist/bundle.min.css",
"gui_puterjs_bundle": "https://js.puter.com/v2/",
"gui_params": {
"title": "Puter",
"short_description": "Your personal cloud computer",
"social_media_image": ""
},
// Optional roots for native app bundles and custom puter.js builds.
"native_apps_root": "",
"client_libs_root": "",
"puterjs_root": "./src/puter-js/dist",
// ── Feature flags (whoami extension) ────────────────────────────────
// Flat `{ flag_name: boolean }` bag. Server-only by default — flags are
// only surfaced to the client if their key is on the allowlist in
// `extensions/whoami.ts` (CLIENT_VISIBLE_FEATURE_FLAGS).
"feature_flags": {
"example_flag": false
},
// ── Misc / safety ───────────────────────────────────────────────────
// TLDs / domains rejected at signup (prod only).
"blockedEmailDomains": [],
"support_email": "[email protected]",
// Worker / subdomain names users can't claim.
"reserved_words": [],
"max_subdomains_per_user": 10,
"server_health": {
"db_liveness_latency_fail_ms": 1500,
"stale_health_loop_fail_ms": 0
},
// ── Extensions ──────────────────────────────────────────────────────
// Directories scanned for extension entrypoints (`*.ts` / subdirs).
"extensions": [
"./extensions"
],
// ── Metering ────────────────────────────────────────────────────────
// When true, all metering checks pass — no per-actor limits enforced.
"unlimitedMetering": false
}
-58
View File
@@ -1,58 +0,0 @@
import express from "express";
import { generateDevHtml, build } from "./utils.js";
import { argv } from 'node:process';
import chalk from 'chalk';
import dotenv from 'dotenv';
dotenv.config();
const app = express();
let port = process.env.PORT ?? 4000; // Starting port
const maxAttempts = 10; // Maximum number of ports to try
const env = argv[2] ?? "dev";
const startServer = (attempt, useAnyFreePort = false) => {
if (attempt > maxAttempts) {
useAnyFreePort = true; // Use any port that is free
}
const server = app.listen(useAnyFreePort ? 0 : port, () => {
console.log("\n-----------------------------------------------------------\n");
console.log(`Puter is now live at: `, chalk.underline.blue(`http://localhost:${server.address().port}`));
console.log("\n-----------------------------------------------------------\n");
}).on('error', (err) => {
if (err.code === 'EADDRINUSE') { // Check if the error is because the port is already in use
console.error(chalk.red(`ERROR: Port ${port} is already in use. Trying next port...`));
port++; // Increment the port number
startServer(attempt + 1); // Try the next port
}
});
};
// Start the server with the first attempt
startServer(1);
// build the GUI
build();
app.get(["/", "/app/*", "/action/*"], (req, res) => {
res.send(generateDevHtml({
env: env,
api_origin: "https://api.puter.com",
title: "Puter",
max_item_name_length: 150,
require_email_verification_to_publish_website: false,
short_description: `Puter is a privacy-first personal cloud that houses all your files, apps, and games in one private and secure place, accessible from anywhere at any time.`,
}));
})
app.use(express.static('./'));
if(env === "prod"){
// make sure to serve the ./dist/ folder maps to the root of the website
app.use(express.static('./dist/'));
}
if(env === "dev"){
app.use(express.static('./src/'));
}
export { app };
-5
View File
@@ -1,5 +0,0 @@
# API Documentation
Note that this documentation is different from the [puter.js docs](https://docs.puter.com).
The scope of the documentation in this directory includes both stable API endpoints that
are used by **puter.js**, as well as API endpoints that may be subject to future changes.
-9
View File
@@ -1,9 +0,0 @@
# Share Links
A **share link** is a link to Puter's origin which contains a token
in the query string (the key is `share_token`; ex:
`http://puter.localhost:4100?share_token=...`).
This token can be used to apply permissions to the user of the
current session **if and only if** this user's email is confirmed
and matches the share link's associated email.
-219
View File
@@ -1,219 +0,0 @@
# Group Endpoints
## POST `/group/create` (auth required)
### Description
Creates a group and returns a UID (UUID formatted).
Groups do not have names, or any other descriptive attributes.
Instead they are always identified with a UUID, and they have
a `metadata` property.
The `metadata` property will always be given back to the client
in the same way it was provided. The `extra` property, also an
object, may be changed by the backend. The behavior of setting
any property on `extra` is currently undefined as all properties
are reserved for future use.
### Parameters
- **metadata:** _- optional_
- **accepts:** `object`
- **description:** arbitrary metadata to describe the group
- **extra:** _- optional_
- **accepts:** `object`
- **description:** extra parameters (server may change these)
### Request Example
```javascript
await fetch(`${window.api_origin}/group/create`, {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
metadata: { title: 'Some Title' }
}),
"method": "POST",
});
// { uid: '9c644a1c-3e43-4df4-ab67-de5b68b235b6' }
```
### Response Example
```json
{
"uid": "9c644a1c-3e43-4df4-ab67-de5b68b235b6"
}
```
## POST `/group/add-users`
### Description
Adds one or more users to a group
### Parameters
- **uid:** _- required_
- **accepts:** `string`
UUID of an existing group
- **users:** `Array<string>`
usernames of users to add to the group
### Request Example
```javascript
await fetch(`${window.api_origin}/group/add-users`, {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
uid: '9c644a1c-3e43-4df4-ab67-de5b68b235b6',
users: ['first_user', 'second_user'],
}),
"method": "POST",
});
```
## POST `/group/remove-users`
### Description
Remove one or more users from a group
### Parameters
- **uid:** _- required_
- **accepts:** `string`
UUID of an existing group
- **users:** `Array<string>`
usernames of users to remove from the group
### Request Example
```javascript
await fetch(`${window.api_origin}/group/add-users`, {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
uid: '9c644a1c-3e43-4df4-ab67-de5b68b235b6',
users: ['first_user', 'second_user'],
}),
"method": "POST",
});
```
## GET `/group/list`
### Description
List groups associated with the current user
### Parameters
_none_
### Response Example
```json
{
"owned_groups": [
{
"uid": "c3bd4047-fc65-4da8-9363-e52195890de4",
"metadata": {},
"members": [
"default_user"
]
}
],
"in_groups": [
{
"uid": "c3bd4047-fc65-4da8-9363-e52195890de4",
"metadata": {},
"members": [
"default_user"
]
}
]
}
```
# Group Permission Endpoints
## POST `/grant-user-group`
Grant permission from the current user to a group.
This creates an association between the user and the
group for this permission; the group will only have
the permission effectively while the user who granted
permission has the permission.
### Parameters
- **group_uid:** _- required_
- **accepts:** `string`
UUID of an existing group
- **permission:** _- required_
- **accepts:** `string`
A permission string
### Request Example
```javascript
await fetch("http://puter.localhost:4100/auth/grant-user-group", {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
group_uid: '9c644a1c-3e43-4df4-ab67-de5b68b235b6',
permission: 'fs:/someuser/somedir/somefile:read'
}),
"method": "POST",
});
```
## POST `/revoke-user-group`
Revoke permission granted from the current user
to a group.
### Parameters
- **group_uid:** _- required_
- **accepts:** `string`
UUID of an existing group
- **permission:** _- required_
- **accepts:** `string`
A permission string
### Request Example
```javascript
await fetch("http://puter.localhost:4100/auth/grant-user-group", {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
group_uid: '9c644a1c-3e43-4df4-ab67-de5b68b235b6',
permission: 'fs:/someuser/somedir/somefile:read'
}),
"method": "POST",
});
```
- > **TODO** figure out how to manage documentation that could
reasonably show up in two files. For example: this is a group
endpoint as well as a permission system endpoint.
(architecturally it's a permission system endpoint, and
the permissions feature depends on the groups feature;
at least until a time when PermissionService is refactored
so a service like GroupService can mutate the permission
check sequences)
-112
View File
@@ -1,112 +0,0 @@
# Notification Endpoints
Endpoints for managing notifications.
## POST `/notif/mark-ack` (auth required)
### Description
The `/notif/mark-ack` endpoint marks the specified notification
as "acknowledged". This indicates that the user has chosen to either
dismiss or act on this notification.
### Parameters
| Name | Description | Default Value |
| ---- | ----------- | -------- |
| uid | UUID associated with the notification | **required** |
### Response
This endpoint responds with an empty object (`{}`).
## POST `/notif/mark-read` (auth required)
### Description
The `/notif/mark-read` endpoint marks that the specified notification
has been shown to the user. It will not "pop up" as a new notification
if they load the gui again.
### Parameters
| Name | Description | Default Value |
| ---- | ----------- | -------- |
| uid | UUID associated with the notification | **required** |
### Response
This endpoint responds with an empty object (`{}`).
### Request Example
```javascript
await fetch("https://api.puter.local/notif/mark-read", {
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
body: JSON.stringify({
uid: 'a14ea3d5-828b-42f9-9613-35f43b0a3cb8',
}),
method: "POST",
});
```
## ENTITY STORAGE `puter-notifications`
The `puter-notifications` driver is an Entity Storage driver.
It is read-only.
### Request Examples
#### Select Unread Notifications
```javascript
await fetch("http://api.puter.localhost:4100/drivers/call", {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
interface: 'puter-notifications',
method: 'select',
args: { predicate: ['unread'] }
}),
"method": "POST",
});
```
#### Select First 200 Notifications
```javascript
await fetch("http://api.puter.localhost:4100/drivers/call", {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
interface: 'puter-notifications',
method: 'select',
args: {}
}),
"method": "POST",
});
```
#### Select Next 200 Notifications
```javascript
await fetch("http://api.puter.localhost:4100/drivers/call", {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
interface: 'puter-notifications',
method: 'select',
args: { offset: 200 }
}),
"method": "POST",
});
```
-367
View File
@@ -1,367 +0,0 @@
# Share Endpoints
Share endpoints allow sharing files with other users.
## POST `/share` (auth required)
### Description
The `/share` endpoint shares 1 or more filesystem items
with one or more recipients. The recipients will receive
some notification about the shared item, making this
different from calling `/grant-user-user` with a permission.
When users are **specified by email** they will receive
a [share link](./concepts/share-link.md).
Each item specified in the `shares` property is a tag-typed
object of type `fs-share` or `app-share`.
#### File Shares (`fs-share`)
File shares grant permission to a file or directory. By default
this is read permission. If `access` is specified as `"write"`,
then write permission will be granted.
#### App Shares (`app-share`)
App shares grant permission to read a protected app.
##### subdomain permission
If there is a subdomain associated with the app, and the owner
of the subdomain is the same as the owner of the app, then
permission to access the subdomain will be granted.
Note that the subdomain is only associated if the subdomain
entry has `associated_app_id` set according to the app's id,
and will not be considered "associated" if only the index_url
happens to match the subdomain url.
##### appdata permission
If the app has `shared_appdata` set to `true` in its metadata
object, the recipient of the share will also get write permission
to the app owner's corresponding appdata directory. The appdata
directory must exist for this to work as expected
(otherwise the permission rewrite rule fails since the uuid
can't be determined).
### Example
```json
{
"recipients": [
"user_that_gets_shared_to",
"[email protected]"
],
"shares": [
{
"$": "app-share",
"name": "some-app-name"
},
{
"$": "app-share",
"uid": "app-SOME-APP-UID"
},
{
"$": "fs-share",
"path": "/some/file/or/directory"
},
{
"$": "fs-share",
"path": "SOME-FILE-UUID"
}
]
}
```
### Parameters
- **recipients** _- required_
- **accepts:** `string | Array<string>`
- **description:**
recipients for the filesystem entries being shared.
- **notes:**
- validation on `string`: email or username
- requirement of at least one value
- **shares:** _- required_
- **accepts:** `object | Array<object>`
- object is [type-tagged](./type-tagged.md)
- type is either [file-share](./types/file-share.md)
or [app-share](./types/app-share.md)
- **notes:**
- requirement that file/directory or app exists
- requirement of at least one entry
- **dry_run:** _- optional_
- **accepts:** `bool`
- **description:**
when true, only validation will occur
### Response
- **$:** `api:share`
- **$version:** `v0.0.0`
- **status:** one of: `"success"`, `"mixed"`, `"aborted"`
- **recipients:** array of: `api:status-report` or
`heyputer:api/APIError`
- **paths:** array of: `api:status-report` or
`heyputer:api/APIError`
- **dry_run:** `true` if present
### Request Example
```javascript
await fetch("http://puter.localhost:4100/share", {
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
body: JSON.stringify({
recipients: [
"user_that_gets_shared_to",
"[email protected]"
],
shares: [
{
$: "app-share",
name: "some-app-name"
},
{
$: "app-share",
uid: "app-SOME-APP-UID"
},
{
$: "fs-share",
path: "/some/file/or/directory"
},
{
$: "fs-share",
path: "SOME-FILE-UUID"
}
]
}),
method: "POST",
});
```
### Success Response
```json
{
"$": "api:share",
"$version": "v0.0.0",
"status": "success",
"recipients": [
{
"$": "api:status-report",
"status": "success"
}
],
"paths": [
{
"$": "api:status-report",
"status": "success"
}
],
"dry_run": true
}
```
### Error response (missing file)
```json
{
"$": "api:share",
"$version": "v0.0.0",
"status": "mixed",
"recipients": [
{
"$": "api:status-report",
"status": "success"
}
],
"paths": [
{
"$": "heyputer:api/APIError",
"code": "subject_does_not_exist",
"message": "File or directory not found.",
"status": 404
}
],
"dry_run": true
}
```
### Error response (missing user)
```json
{
"$": "api:share",
"$version": "v0.0.0",
"status": "mixed",
"recipients": [
{
"$": "heyputer:api/APIError",
"code": "user_does_not_exist",
"message": "The user `non_existing_user` does not exist.",
"username": "non_existing_user",
"status": 422
}
],
"paths": [
{
"$": "api:status-report",
"status": "success"
}
],
"dry_run": true
}
```
## POST `/sharelink/check` (no auth)
### Description
The `/sharelink/check` endpoint verifies that a token provided
by a share link is valid.
### Example
```javascript
await fetch(`${config.api_origin}/sharelink/check`, {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
token: '...',
}),
"method": "POST",
});
```
### Parameters
- **token:** _- required_
- **accepts:** `string`
The token from the querystring parameter
### Response
A type-tagged object, either of type `api:share` or `api:error`
### Success Response
```json
{
"$": "api:share",
"uid": "836671d4-ac5d-4bd3-bc0a-ec357e0d8f02",
"email": "[email protected]"
}
```
### Error Response
```json
{
"$": "api:error",
"message":"Field `token` is required.",
"key":"token",
"code":"field_missing"
}
```
## POST `/sharelink/apply` (no auth)
### Description
The `/sharelink/apply` endpoint applies a share to the current
user **if and only if** that user's email is confirmed and matches
the email associated with the share.
### Example
```javascript
await fetch(`${config.api_origin}/sharelink/apply`, {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
uid: '836671d4-ac5d-4bd3-bc0a-ec357e0d8f02',
}),
"method": "POST",
});
```
### Parameters
- **uid:** _- required_
- **accepts:** `string`
The uid of an existing share, received using `/sharelink/check`
### Response
A type-tagged object, either of type `api:status-report` or `api:error`
### Success Response
```json
{"$":"api:status-report","status":"success"}
```
### Error Response
```json
{
"message": "This share can not be applied to this user.",
"code": "can_not_apply_to_this_user"
}
```
## POST `/sharelink/request` (no auth)
### Description
The `/sharelink/request` endpoint requests the permissions associated
with a share link to the issuer of the share (user that sent the share).
This can be used when a user is logged in, but that user's email does
not match the email associated with the share.
### Example
```javascript
await fetch(`${config.api_origin}/sharelink/request`, {
"headers": {
"Content-Type": "application/json",
"Authorization": `Bearer ${puter.authToken}`,
},
"body": JSON.stringify({
uid: '836671d4-ac5d-4bd3-bc0a-ec357e0d8f02',
}),
"method": "POST",
});
```
### Parameters
- **uid:** _- required_
- **accepts:** `string`
The uid of an existing share, received using `/sharelink/check`
### Response
A type-tagged object, either of type `api:status-report` or `api:error`
### Success Response
```json
{"$":"api:status-report","status":"success"}
```
### Error Response
```json
{
"message": "This share is already valid for this user; POST to /apply for access",
"code": "no_need_to_request"
}
```
-79
View File
@@ -1,79 +0,0 @@
# Type-Tagged Objects
```js
{
"$": "some-type",
"$version": "0.0.0",
"some_property": "some value",
}
```
## What's a Type-Tagged Object?
Type-Tagged objects are a convention understood by Puter's backend
to communicate meta information along with a JSON object.
The key feature of Type-Tagged Objects is the type key: `"$"`.
## Why Type-Tagged Objects?
The primary reason: to have a consistent convention we can use
anywhere.
- Since other services rarely use `$` in their property names,
we can safely use this without introducing reserved words and
re-mapping property names.
- Some places we use this convention might not need it, but
staying consistent means API end-users can
[do more with less code](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself).
## Specification
- The `"$"` key indicates a type (or class) of object
- Any other key beginning with `$` is a **meta-key**
- Other keys are not allowed to contain `$`
- `"$version"` must follow [semver](https://semver.org/)
- Keys with multiple `"$"` symbols are reserved for future use
## Alternative Representations
Puter's API will always send results in the format described
above, which is called the "Standard Representation"
Any endpoint which accepts a Type-Tagged Object will also
accept these alternative representations:
### Structured Representation
Depending on the architecture of your client, this format
may be more convenient to work with:
```json
{
"$": "$meta-body",
"type": "some-type",
"meta": { "version": "0.0.0" },
"body": { "some_property": "some value" }
}
```
### Array Representation
In the array representation, meta values go at the end.
```json
["some-type",
{ "some_property": "some value" },
{ "version": "0.0.0" }
]
```
If the second element of the list is not an object, it
will implicitly be placed in a property called value.
The following are equivalent:
```json
["some-type", "hello"]
```
```json
["some-type", { "value": "hello" }]
```
-26
View File
@@ -1,26 +0,0 @@
# `{"$": "app-share"}` - File Share
## Structure
- **name:** name of the app
- **uid:** name of the app
## Notes
- One of `name` or `uid` **must** be specified
## Examples
Share app by name
```json
{
"$": "app-share",
"name": "some-app-name"
}
```
Share app by uid
```json
{
"$": "app-share",
"uid": "app-0a7337f7-0f8a-49ca-b71a-38d39304fe04"
}
```
-32
View File
@@ -1,32 +0,0 @@
# `{"$": "file-share"}` - File Share
## Structure
- **path:** file or directory's path or uuid
- **access:** one of: `"read"`, `"write"` (default: `"read"`)
## Examples
Share with read access
```json
{
"$": "file-share",
"path": "/some/path"
}
```
Share with write access
```json
{
"$": "file-share",
"path": "/some/path",
"access": "write"
}
```
Using a UUID
```json
{
"$": "file-share",
"path": "b912c381-0c0b-466c-95a6-f9a4fc680a7d"
}
```
+104
View File
@@ -0,0 +1,104 @@
# Backend Architecture
Loosely inspired by the Controller–Service–Repository pattern with dependency injection. The backend is organized as a stack of layers where each layer only depends on the layers beneath it, and `PuterServer` ([src/backend/server.ts](../src/backend/server.ts)) instantiates each layer in order and hands the instances down to the next.
## Layers
```mermaid
block-beta
columns 1
REQ["HTTP request"]
CTRL["Controllers — route handlers, gates, I/O shaping"]
DRV["Drivers (optional) — RPC handlers on /drivers/*"]
SVC["Services — business logic, no auth"]
STR["Stores — persistence / domain shapes"]
CLI["Clients — sql, redis, s3, dynamo, email, …"]
CFG["Config — IConfig"]
REQ --> CTRL
CTRL --> DRV
DRV --> SVC
SVC --> STR
STR --> CLI
CLI --> CFG
style REQ fill:#0ea5e9,stroke:#0369a1,color:#fff
style CTRL fill:#1d4ed8,stroke:#1e3a8a,color:#fff
style DRV fill:#2563eb,stroke:#1e40af,color:#fff
style SVC fill:#4f46e5,stroke:#3730a3,color:#fff
style STR fill:#7c3aed,stroke:#5b21b6,color:#fff
style CLI fill:#9333ea,stroke:#6b21a8,color:#fff
style CFG fill:#334155,stroke:#1e293b,color:#fff
```
Each layer only depends on the layers beneath it, and every dependency is injected through the constructor by `PuterServer`. Extensions sit alongside this stack and can register into any layer — see [Extensions](#extensions) below.
| Layer | Lives in | Responsibility |
| --- | --- | --- |
| **Controllers** | [src/backend/controllers/](../src/backend/controllers/) | Route handlers. Parse + validate input, apply per-route gates (auth, subdomain, rate limit, body parsers — see `RouteOptions`), call into services, format responses. |
| **Drivers** | [src/backend/drivers/](../src/backend/drivers/) | Optional. RPC-style handlers exposed over the `/drivers/*` surface (`puter-kvstore`, `puter-chat-completion`, …). A driver is a thin shell that validates RPC inputs and calls into services/stores; controllers can hold a typed reference to drivers when they need the same logic over HTTP. |
| **Services** | [src/backend/services/](../src/backend/services/) | Business logic. Assume the caller is already authenticated/authorized — services do not run auth gates themselves. |
| **Stores** | [src/backend/stores/](../src/backend/stores/) | Persistence and storage logic. Wraps clients with the domain shape services consume (rows, entities, KV namespaces). |
| **Clients** | [src/backend/clients/](../src/backend/clients/) | Adapters for external/internal services (sql, redis, s3, dynamodb, email, event bus, …). Knows protocols, not domain concepts. |
| **Config** | `config.*.json` → `IConfig` | The flat, typed config object every layer receives at construction. |
Each layer receives the layers beneath it through its constructor, so dependencies are explicit and traceable from `PuterServer`. A controller does not reach into a client directly; if it needs one, the right move is usually a service.
## Entry point: `PuterServer`
`PuterServer` is the bootstrap. It:
1. Loads any configured extension directories (`config.extensions`) so extensions can register before instantiation begins.
2. Instantiates each layer in order — clients → stores → services → drivers → controllers — merging in anything extensions have registered for that layer.
3. Wires global middleware, mounts controller routes through `PuterRouter` (which translates `RouteOptions` into the gate/parser middleware chain), and mounts extension routes through the same materializer.
4. Fires `onServerStart` hooks across every layer once HTTP is listening, and `onServerPrepareShutdown` / `onServerShutdown` on the way down.
## Context (ALS)
We use [`Context`](../src/backend/core/context.ts) — backed by `AsyncLocalStorage` — to carry per-request state without threading it through every function signature. It is used **sparingly**, mostly for `actor` and `req`. The request-context middleware opens a scope per request after the auth probe runs; anything inside a request handler can call `Context.get('actor')` / `Context.get('req')` instead of plumbing it as an argument.
Prefer explicit arguments. Reach for `Context` only when the value is truly request-scoped and would otherwise need to thread through many layers.
## Extensions
Extensions live alongside core ([packages/puter/extensions/](../extensions/)) and parallel the layered stack. They are meant for **non-crucial parts of the system** — things Puter still works without if removed.
- **Good extensions**: [thumbnails](../extensions/thumbnails.ts), [serverInfo](../extensions/serverInfo.ts), [devWatcher](../extensions/devWatcher.ts) — opt-in features cleanly bolted on.
- **Should probably be core**: [metering](../extensions/metering.ts), [appTelemetry](../extensions/appTelemetry.ts) — clients now expect these to be present, so the "extension" framing is misleading.
- **Shouldn't have been an extension**: [whoami](../extensions/whoami.ts) — it's load-bearing for every authenticated client. Keep this one in mind as a cautionary example when deciding whether something belongs in an extension.
### Extension API
The `extension` global ([src/backend/extensions.ts](../src/backend/extensions.ts)) exposes:
- **Layer registration** for first-class additions:
- `extension.registerClient(name, ClientClass)`
- `extension.registerStore(name, StoreClass)`
- `extension.registerService(name, ServiceClass)`
- `extension.registerDriver(name, DriverClass)`
- `extension.registerController(name, ControllerClass)`
- **Lightweight wrappers** for the common case where a full class isn't worth it:
- `extension.on(event, handler)` — subscribe to event-bus events.
- `extension.get(path, opts?, handler)` / `.post` / `.put` / `.delete` / `.patch` / `.head` / `.options` / `.all` / `.use` — register routes. The `opts` shape is the same `RouteOptions` controllers use, so `subdomain`, `requireAuth`, `adminOnly`, body parsers, etc. all work identically.
- **Cross-layer access**: `extension.import('client' | 'store' | 'service' | 'controller' | 'driver')` returns a lazy proxy to instantiated objects, and `extension.config` exposes the live config.
```ts
import { extension } from '@heyputer/backend/src/extensions';
const services = extension.import('service');
extension.get('/healthcheck/deep', { subdomain: 'api', adminOnly: true }, async (_req, res) => {
res.json({ ok: await services.health.runDeepCheck() });
});
extension.on('user.signup', (_key, data) => {
console.log('new user', data.user.username);
});
```
## Conventions
- **TypeScript preferred** in new code where feasible. Existing JS is fine; convert opportunistically when you're already touching a file.
- **`camelCase`** for variable/function names; **`PascalCase`** for classes and for files that contain a class (`AuthService.ts`, `KVStoreDriver.ts`).
- **Deduplicate**. If two services need the same logic, lift it into a util/helper rather than calling sideways across the same layer — services should not depend on other services for code reuse.
- **Don't reach across layers.** Controllers do not poke clients directly; services do not register routes. If you find yourself wanting to, that's usually a signal the abstraction is wrong.
-28
View File
@@ -1,28 +0,0 @@
# Comment Prefixes
Comments have prefixes using
[Conventional: Comments](https://conventionalcomments.org/)
as a **loose** guideline, and using this markdown file as a
the actual guideline.
This document will be updated on an _as-needed_ basis.
## The rules
- A comment line always looks like this:
- A whitespace character
- Optional prefix matching `/[a-z-]+\([a-z-]a+\):/`
- A whitespace character
- The comment
- Formalized prefixes must follow the rules below
- Any other prefix can be used. After some uses it
might be good to formalize it, but that's not a hard rule.
## Formalized prefixes
- `todo:` is interchangable with the famous `TODO:`, **except:**
when lowercase (`todo:`) it can include a scope: `todo(security):`.
- `track:` is used to track common patterns.
- Anything written after `track:` must be registered in
[track-comments.md](../devmeta/track-comments.md)
-2
View File
@@ -1,2 +0,0 @@
### `vscode`
- `es6-string-html`
-25
View File
@@ -1,25 +0,0 @@
# Contributing to Puter
## Essential / General Knowledge
### Repository Dichotomy
- Puter's GUI is at the root; `/src` is the GUI
- Puter's backend is a workspace npm package;
it resides in `packages/backend(/src)`
The above may seem counter-intuitive; backend and frontend are siblings, right?
Consider this: by a different intuition, the backend is at a "deeper" level
of function; this directory structure better adheres to soon-to-be contributors
sifting around through the files to discover "what's what".
The directory `volatile` exists _for your convenience_ to simplify running
Puter for development. When Puter is run
run with the backend with this repository as its working directory, it
will use `volatile/config` and `volatile/runtime` instead of
`/etc/puter` and `/var/puter`.
## See Next
- [Backend Documentation](../../packages/backend/doc/contributors/index.md)
<!-- - [Frontend Documentation](./frontend.md) -->
-59
View File
@@ -1,59 +0,0 @@
# Track Comments
Comments beginning with `// track:`. See
[comment_prefixes.md](../contributors/comment_prefixes.md)
## Track Comment Registry
- `track: type check`:
A condition that's used to check the type of an imput.
- `track: adapt`
A value can by adapted from another type at this line.
- `track: bounds check`:
A condition that's used to check the bounds of an array
or other list-like entity.
- `track: ruleset`
A series of conditions that early-return or `continue`
- `track: object description in comment`
A comment above the creation of some object which
could potentially have a `description` property.
This is especially relevant if the object is stored
in some kind of registry where multiple objects
could be listed in the console.
- `track: slice a prefix`
A common pattern where a prefix string is "sliced off"
of another string to obtain a significant value, such
as an indentifier.
- `track: actor type`
The sub-type of an Actor object is checked.
- `track: scoping iife`
An immediately-invoked function expression specifically
used to reduce scope clutter.
- `track: good candidate for sequence`
Some code involves a series of similar steps,
or there's a common behavior that should happen
in between. The Sequence class is good for this so
it might be a worthy migration.
- `track: opposite condition of sibling`
A sibling class, function, method, or other construct of
source code has a boolean expression which always evaluates
to the opposite of the one below this track comment.
- `track: null check before processing`
An object could be undefined or null, additional processing
occurs after a null check, and the unprocessed object is not
relevant to the rest of the code. If the code for obtaining
the object and processing it is moved to a function outside,
then the null check should result in a early return of null;
this code with the track comment may have additional logic
for the null/undefined case.
- `track: manual safe object`
This code manually creates a new "client-safe" version of
some object that's in scope. This could be either to pass
onto the browser or to pass to something like the
notification service.
- `track: common operations on multiple items`
A patterm which emerges when multiple variables have
common operations done upon them in sequence.
It may be applicable to write an iterator in the
future, or something will come up that require
these to be handled with a modular approach instead.
-12
View File
@@ -1,12 +0,0 @@
# Meta Documentation
## Notes
- > This document is a work-in-progress
## Rules
### "is" and "is not"
- When "A is B", always bold "is": "A **is** B" (`A **is** B`)
- When "A is not B", always bold "not": "A is **not** B" (`A is **not** B`)
+129
View File
@@ -0,0 +1,129 @@
<h3 align="center"><img width="80" alt="Puter.com، الحاسوب السحابي الشخصي: جميع ملفاتك وتطبيقاتك وألعابك في مكان واحد يمكن الوصول إليه من أي مكان في أي وقت." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">نظام تشغيل الإنترنت! مجاني ومفتوح المصدر وقابل للاستضافة الذاتية.</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« عرض توضيحي مباشر »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">مجموعة أدوات التطوير</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">ديسكورد</a>
·
<a href="https://reddit.com/r/puter">ريديت</a>
·
<a href="https://twitter.com/HeyPuter">إكس (تويتر)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="لقطة شاشة" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## بيوتر
<div dir="rtl">
<p>بيوتر هو نظام تشغيل إنترنت متقدم ومفتوح المصدر، مصمم ليكون غنيًا بالميزات وسريعًا بشكل استثنائي وقابلًا للتوسع بدرجة كبيرة. يمكن استخدام بيوتر كـ:</p>
<ul>
<li>سحابة شخصية تعطي الأولوية للخصوصية لحفظ جميع ملفاتك وتطبيقاتك وألعابك في مكان آمن واحد، يمكن الوصول إليه من أي مكان وفي أي وقت.</li>
<li>منصة لبناء ونشر المواقع الإلكترونية وتطبيقات الويب والألعاب</li>
<li>بديل لـ Dropbox وGoogle Drive وOneDrive وغيرها، مع واجهة جديدة وميزات قوية.</li>
<li>بيئة سطح مكتب عن بُعد للخوادم ومحطات العمل.</li>
<li>مشروع ومجتمع ودود ومفتوح المصدر للتعلم عن تطوير الويب والحوسبة السحابية والأنظمة الموزعة والكثير غير ذلك!</li>
</ul>
</div>
<br/>
## البدء
### 💻 التطوير المحلي
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
سيؤدي هذا إلى تشغيل Puter على http://puter.localhost:4100 (أو المنفذ التالي المتاح).
<br/>
### 🐳 دوكر
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 دوكر كومبوز
#### لينكس/ماك
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### ويندوز
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ موقع Puter.com
متاح Puter كخدمة مستضافة على[**puter.com**](https://puter.com)الموقع
<br/>
## متطلبات النظام
- **Operating Systems:** لينكس، ماك، ويندوز
- **RAM** ٢ جيجابايت كحد أدنى (يوصى بـ ٤ جيجابايت)
- **Disk Space:** ١ جيجابايت مساحة حرة
- **Node.js:** الإصدار ١٦+ (يوصى بالإصدار ٢٢+)
- **npm:** أحدث إصدار مستقر
<br/>
## الدعم
تواصل مع المشرفين والمجتمع من خلال هذه القنوات:
- تقرير عن خطأ أو طلب ميزة؟ الرجاء [فتح مشكلة](https://github.com/HeyPuter/puter/issues/new/choose)
- دسكورد: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- إكس (تويتر): [x.com/HeyPuter](https://x.com/HeyPuter)
- ريديت: [/reddit.com/r/puter](https://www.reddit.com/r/puter/)
- ماستودون: [mastodon.social/@puter](https://mastodon.social/@puter)
- مشاكل أمنية؟ [[email protected]](mailto:[email protected])
- البريد الإلكتروني للمشرفين [[email protected]](mailto:[email protected])
نحن دائمًا سعداء لمساعدتك في أي أسئلة قد تكون لديك. لا تتردد في السؤال!
<br/>
## الترخيص
هذا المستودع، بما في ذلك جميع محتوياته ومشاريعه الفرعية ووحداته ومكوناته، مرخص تحت [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) ما لم ينص على خلاف ذلك صراحةً. قد تخضع المكتبات الخارجية المدرجة في هذا المستودع لتراخيصها الخاصة.
<br/>
+124
View File
@@ -0,0 +1,124 @@
<h3 align="center"><img width="80" alt="Puter.com, ব্যক্তিগত ক্লাউড কম্পিউটার: আপনার সমস্ত ফাইল, অ্যাপস, এবং গেম এক জায়গায়, যেকোনো সময়, যেকোনো স্থান থেকে অ্যাক্সেসযোগ্য।" src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">ইন্টারনেট ওএস! ফ্রি, ওপেন-সোর্স, এবং সেল্ফ-হোস্টেবল।</h3>
<p align="center">
<img alt="GitHub রেপোর আকার " src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub রিলিজ" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub লাইসেন্স" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« লাইভ ডেমো »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">এসডিকে</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">ডিসকর্ড</a>
·
<a href="https://reddit.com/r/puter">রেডিট</a>
·
<a href="https://twitter.com/HeyPuter">X (টুইটার)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="স্ক্রিনশট" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter একটি উন্নত, ওপেন-সোর্স ইন্টারনেট অপারেটিং সিস্টেম যা বৈশিষ্ট্যপূর্ণ, অত্যন্ত দ্রুত এবং উচ্চ মাত্রায় সম্প্রসারণযোগ্য। Puter ব্যবহার করা যেতে পারে:
- একটি প্রাইভেসি-প্রথম পার্সোনাল ক্লাউড হিসাবে যা আপনার সমস্ত ফাইল, অ্যাপস এবং গেমসকে এক জায়গায় নিরাপদে রাখে, যেকোনো সময় যেকোনো স্থান থেকে অ্যাক্সেসযোগ্য।
- ওয়েবসাইট, ওয়েব অ্যাপ এবং গেম তৈরি ও প্রকাশ করার একটি প্ল্যাটফর্ম হিসাবে।
- ড্রপবক্স, গুগল ড্রাইভ, ওয়ানড্রাইভ ইত্যাদির বিকল্প হিসাবে একটি নতুন ইন্টারফেস এবং শক্তিশালী বৈশিষ্ট্য সহ।
- সার্ভার এবং ওয়ার্কস্টেশনের জন্য একটি রিমোট ডেস্কটপ এনভায়রনমেন্ট হিসাবে।
- ওয়েব ডেভেলপমেন্ট, ক্লাউড কম্পিউটিং, ডিস্ট্রিবিউটেড সিস্টেম এবং আরও অনেক কিছু শিখতে একটি বন্ধুত্বপূর্ণ, ওপেন-সোর্স প্রকল্প এবং কমিউনিটি হিসাবে!
<br/>
## শুরু করার জন্য
## 💻 লোকাল ডেভেলপমেন্ট
```bash
Copy code
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
এটি Puter কে http://puter.localhost:4100 (অথবা পরবর্তী উপলব্ধ পোর্টে) চালু করবে।
<br/>
## 🐳 ডকার
```bash
Copy code
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
## 🐙 ডকার কম্পোজ
## লিনাক্স/ম্যাকওএস
```bash
Copy code
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
## উইন্ডোজ
```powershell
Copy code
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
## ☁️ Puter.com
Puter [**puter.com**](https://puter.com) এ হোস্টেড সার্ভিস হিসেবে উপলব্ধ।
<br/>
## সিস্টেম রিকোয়ারমেন্টস
- **অপারেটিং সিস্টেম:** লিনাক্স, ম্যাকওএস, উইন্ডোজ
- **র‍্যাম:** ২জিবি ন্যূনতম (৪জিবি প্রস্তাবিত)
- **ডিস্ক স্পেস:** ১জিবি ফ্রি স্পেস
- **Node.js:** সংস্করণ ১৬+ (সংস্করণ ২২+ প্রস্তাবিত)
- **npm:** সর্বশেষ স্থিতিশীল সংস্করণ
<br/>
## সাপোর্ট
মেইনটেইনার এবং কমিউনিটির সাথে এই চ্যানেলগুলির মাধ্যমে সংযোগ করুন:
- বাগ রিপোর্ট বা ফিচার রিকোয়েস্ট? অনুগ্রহ করে একটি ইস্যু খুলুন।
- ডিসকর্ড: discord.com/invite/PQcx7Teh8u
- X (টুইটার): x.com/HeyPuter
- রেডিট: reddit.com/r/puter/
- মাস্টডন: mastodon.social/@puter
- সিকিউরিটি ইস্যু? security@puter.com
- মেইনটেইনারদের ইমেইল করুন hi@puter.com এ
আপনার যেকোনো প্রশ্নের জন্য আমরা সবসময় সাহায্য করতে প্রস্তুত। জিজ্ঞাসা করতে দ্বিধা করবেন না!
<br/>
## লাইসেন্স
এই রিপোজিটরি, এর সমস্ত বিষয়বস্তু, সাব-প্রকল্প, মডিউল, এবং কম্পোনেন্ট সহ [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) লাইসেন্সের অধীনে লাইসেন্সকৃত, যদি অন্যথায় স্পষ্টভাবে উল্লেখ না করা হয়। এই রিপোজিটরিতে অন্তর্ভুক্ত তৃতীয় পক্ষের লাইব্রেরিগুলি তাদের নিজস্ব লাইসেন্সের অধীনে হতে পারে।
<br/>
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, Den Personlige Cloudcomputer: Alle dine filer, apps og spil på ét sted tilgængelige fra hvor som helst til enhver tid." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Internet OS'et! Gratis, Open-Source og kan selvhostes.</h3>
<p align="center">
<img alt="GitHub repo størrelse" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Udgivelse" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub Licens" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« LIVE DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="skærmbillede" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter er et avanceret, open-source internetoperativsystem designet til at være funktionsrigt, exceptionelt hurtigt og meget udvideligt. Puter kan bruges som:
- En privatlivsfokuseret personlig sky til at opbevare alle dine filer, apps og spil på ét sikkert sted, tilgængeligt hvor som helst og når som helst.
- En platform til at bygge og publicere hjemmesider, webapplikationer og spil.
- Et alternativ til Dropbox, Google Drive, OneDrive osv. med et friskt interface og kraftfulde funktioner.
- Et fjernskrivebordsmiljø for servere og arbejdsstationer.
- Et venligt, open-source projekt og fællesskab til at lære om webudvikling, cloud computing, distribuerede systemer og meget mere!
<br/>
## Kom godt i gang
### 💻 Lokal Udvikling
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Dette vil starte Puter på http://puter.localhost:4100 (eller den næste tilgængelige port).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter er tilgængelig som en hosted tjeneste på [**puter.com**](https://puter.com).
<br/>
## Systemkrav
- **Operativsystemer:** Linux, macOS, Windows
- **RAM:** 2GB minimum (4GB anbefales)
- **Diskplads:** 1GB fri plads
- **Node.js:** Version 16+ (Version 22+ anbefales)
- **npm:** Seneste stabile version
<br/>
## Support
Kom i kontakt med vedligeholderne og fællesskabet gennem disse kanaler:
- Bugrapport eller funktionønske? Åbn [venligst en sag](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Sikkerhedsspørgsmål? [[email protected]](mailto:[email protected])
- Send email til vedligeholdere på [[email protected]](mailto:[email protected])
Vi er altid glade for at hjælpe dig med eventuelle spørgsmål, du måtte have. Tøv ikke med at spørge!
<br/>
## Licens
Dette repository, inklusive alt dets indhold, underprojekter, moduler og komponenter, er licenseret under [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), medmindre andet er udtrykkeligt angivet. Tredjepartsbiblioteker inkluderet i dette repository kan være underlagt deres egne licenser.
<br/>
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, Der persönliche Cloud-Computer: Alle Ihre Dateien, Apps und Spiele an einem Ort, jederzeit und überall zugänglich." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Das Internet-Betriebssystem! Kostenlos, Open-Source und selbst hostbar.</h3>
<p align="center">
<img alt="GitHub Repo-Größe" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Veröffentlichung" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=neueste%20Version"> <img alt="GitHub Lizenz" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« LIVE DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="Bildschirmfoto" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter ist ein fortschrittliches, Open-Source-Internet-Betriebssystem, das funktionsreich, außergewöhnlich schnell und hochgradig erweiterbar konzipiert wurde. Puter kann verwendet werden als:
- Eine datenschutzfreundliche persönliche Cloud, um alle Ihre Dateien, Apps und Spiele an einem sicheren Ort aufzubewahren, jederzeit und überall zugänglich.
- Eine Plattform zum Erstellen und Veröffentlichen von Websites, Webanwendungen und Spielen.
- Eine Alternative zu Dropbox, Google Drive, OneDrive usw. mit einer frischen Benutzeroberfläche und leistungsstarken Funktionen.
- Eine Remote-Desktop-Umgebung für Server und Workstations.
- Ein freundliches, Open-Source-Projekt und eine Community, um mehr über Webentwicklung, Cloud Computing, verteilte Systeme und vieles mehr zu lernen!
<br/>
## Erste Schritte
### 💻 Lokale Entwicklung
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Dies startet Puter unter http://puter.localhost:4100 (oder dem nächsten verfügbaren Port).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter ist als gehosteter Dienst unter [**puter.com**](https://puter.com) verfügbar.
<br/>
## Systemanforderungen
- **Betriebssysteme:** Linux, macOS, Windows
- **RAM:** Mindestens 2GB (4GB empfohlen)
- **Festplattenspeicher:** 1GB freier Speicherplatz
- **Node.js:** Version 16+ (Version 22+ empfohlen)
- **npm:** Neueste stabile Version
<br/>
## Unterstützung
Verbinden Sie sich mit den Maintainern und der Community über diese Kanäle:
- Fehlerbericht oder Funktionsanfrage? Bitte [öffnen Sie ein Issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Sicherheitsprobleme? [[email protected]](mailto:[email protected])
- E-Mail an die Maintainer: [[email protected]](mailto:[email protected])
Wir helfen Ihnen gerne bei allen Fragen, die Sie haben könnten. Zögern Sie nicht zu fragen!
<br/>
## Lizenz
Dieses Repository, einschließlich aller Inhalte, Unterprojekte, Module und Komponenten, ist unter [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) lizenziert, sofern nicht ausdrücklich anders angegeben. In diesem Repository enthaltene Bibliotheken von Drittanbietern können ihren eigenen Lizenzen unterliegen.
<br/>
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">The Internet OS! Free, Open-Source, and Self-Hostable.</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« LIVE DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter is an advanced, open-source internet operating system designed to be feature-rich, exceptionally fast, and highly extensible. Puter can be used as:
- A privacy-first personal cloud to keep all your files, apps, and games in one secure place, accessible from anywhere at any time.
- A platform for building and publishing websites, web apps, and games.
- An alternative to Dropbox, Google Drive, OneDrive, etc. with a fresh interface and powerful features.
- A remote desktop environment for servers and workstations.
- A friendly, open-source project and community to learn about web development, cloud computing, distributed systems, and much more!
<br/>
## Getting Started
### 💻 Local Development
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
This will launch Puter at http://puter.localhost:4100 (or the next available port).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter is available as a hosted service at [**puter.com**](https://puter.com).
<br/>
## System Requirements
- **Operating Systems:** Linux, macOS, Windows
- **RAM:** 2GB minimum (4GB recommended)
- **Disk Space:** 1GB free space
- **Node.js:** Version 16+ (Version 22+ recommended)
- **npm:** Latest stable version
<br/>
## Support
Connect with the maintainers and community through these channels:
- Bug report or feature request? Please [open an issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Security issues? [[email protected]](mailto:[email protected])
- Email maintainers at [[email protected]](mailto:[email protected])
We are always happy to help you with any questions you may have. Don't hesitate to ask!
<br/>
## License
This repository, including all its contents, sub-projects, modules, and components, is licensed under [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) unless explicitly stated otherwise. Third-party libraries included in this repository may be subject to their own licenses.
<br/>
+171
View File
@@ -0,0 +1,171 @@
<h3 align="center"><img width="80" alt="Puter.com, El Computador Personal en Nube: Todos tus archivos, apps y juegos en un solo lugar accesible desde cualquier lugar en cualquier momento" src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">El Sistema Operativo de Internet! Gratis, de Código abierto, y Autohospedable.</h3>
<p align="center">
<a href="https://puter.com/"><strong>« DEMO EN VIVO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://apps.puter.com/">App Store</a>
·
<a href="https://developer.puter.com" target="_blank">Developers</a>
·
<a href="https://github.com/heyputer/puter-cli" target="_blank">CLI</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://x.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter es un sistema operativo en internet avanzado y de código abierto, diseñado para ser rico en funcionalidades, excepcionalmente rápido y altamente extensible. Puter puede ser usado como:
- Una nube personal privada para almacenar todos tus archivos, aplicaciones y juegos en un lugar seguro, accesible y desde cualquier lugar en cualquier momento.
- Una plataforma para construir y publicar páginas web, aplicativos sobre la web y juegos.
- Una alternativa a Dropbox, Google Drive, OneDrive, etc. con una interfaz fresca y llena de funcionalidades.
- Un entorno de escritorio remoto para servidores y estaciones de trabajo.
- Un proyecto y comunidad abiertas y amigables para aprender sobre desarrollo web, computación en la nube, sistemas distribuidos y mucho más!
<br/>
## Primeros Pasos
### 💻 Desarrollo Local
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
✨ Esto ejecutará Puter en http://puter.localhost:4100 (o el siguiente puerto disponible).
Si esto no funciona, consulta [First Run Issues](./doc/self-hosters/first-run-issues.md) para obtener pasos de solución de problemas.
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
✨ Esto ejecutará Puter en http://puter.localhost:4100 (o el siguiente puerto disponible).
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
✨ Esto ejecutará Puter en http://puter.localhost:4100 (o el siguiente puerto disponible).
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
✨ Esto ejecutará Puter en http://puter.localhost:4100 (o el siguiente puerto disponible).
<br/>
### 🚀 Auto-Hospedaje
Para guías detalladas sobre cómo auto-hospedar Puter, incluyendo opciones de configuración y mejores prácticas, consulta nuestra [Documentación de Auto-Hospedaje](https://github.com/HeyPuter/puter/blob/main/doc/self-hosters/instructions.md).
### ☁️ Puter.com
Puter está disponible como servicio alojado en [**puter.com**](https://puter.com).
<br/>
## Requerimientos del sistema
- **Sistemas operativos:** Linux, macOS, Windows
- **RAM:** 2GB mínimo (4GB recomendados)
- **Almacenamiento:** 1GB de espacio libre
- **Node.js:** Versión 16+ (Versión 23+ recomendada)
- **npm:** Última version estable
<br/>
## Soporte
Conéctate con los mantenedores y la comunidad a través de estos canales:
- Reporte de bug o solicitud de funcionalidad? Por favor [abrir un issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Problemas de seguridad? [[email protected]](mailto:[email protected])
- Envia un email a los mantenedores en [[email protected]](mailto:[email protected])
Estamos siempre felices de ayudar con cualquier pregunta que puedas tener. No dudes en preguntar!
<br/>
## Licencia
Este repositorio, incluyendo todo su contenido, sub-proyectos, modulos y componentes, esta licenciado bajo [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) a menos que se indique explícitamente lo contrario. Librerías de terceros incluidos en este repositorio pueden estar sujetas a sus propias licencias.
<br/>
## Traducciones
- [Arabic / العربية](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ar.md)
- [Armenian / Հայերեն](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hy.md)
- [Bengali / বাংলা](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.bn.md)
- [Chinese / 中文](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.zh.md)
- [Danish / Dansk](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.da.md)
- [English](https://github.com/HeyPuter/puter/blob/main/README.md)
- [Farsi / فارسی](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fa.md)
- [Finnish / Suomi](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fi.md)
- [French / Français](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fr.md)
- [German/ Deutsch](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.de.md)
- [Hebrew/ עברית](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.he.md)
- [Hindi / हिंदी](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hi.md)
- [Hungarian / Magyar](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hu.md)
- [Indonesian / Bahasa Indonesia](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.id.md)
- [Italian / Italiano](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.it.md)
- [Japanese / 日本語](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.jp.md)
- [Korean / 한국어](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ko.md)
- [Malayalam / മലയാളം](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ml.md)
- [Polish / Polski](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pl.md)
- [Portuguese / Português](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pt.md)
- [Romanian / Română](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ro.md)
- [Russian / Русский](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ru.md)
- [Spanish / Español](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.es.md)
- [Swedish / Svenska](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.sv.md)
- [Tamil / தமிழ்](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ta.md)
- [Telugu / తెలుగు](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.te.md)
- [Thai / ไทย](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.th.md)
- [Turkish / Türkçe](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.tr.md)
- [Ukrainian / Українська](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ua.md)
- [Urdu / اردو](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ur.md)
- [Vietnamese / Tiếng Việt](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.vi.md)
+133
View File
@@ -0,0 +1,133 @@
<h3 align="center"><img width="80" alt="Puter.com، رایانش ابری شخصی: همه فایل‌ها، برنامه‌ها و بازی‌های شما در یک مکان قابل دسترسی از هر جا و در هر زمان." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">سیستم‌عامل اینترنت! رایگان، متن‌باز، و قابل میزبانی شخصی.</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« نسخه نمایشی زنده »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">مستندات توسعه‌دهندگان</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">دیسکورد</a>
·
<a href="https://reddit.com/r/puter">ردیت</a>
·
<a href="https://twitter.com/HeyPuter">ایکس (توییتر)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="عکس صفحه" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## پیوتر
<div dir="rtl">
<p>پیوتر یک سیستم عامل تحت وب پیشرفته‌ی متن‌باز است که به منظور ایجاد ویژگی‌های متنوع، سرعت بسیار بالا، و مقیاس‌پذیری طراحی شده است. از پیوتر می‌توان به‌عنوان:</p>
<ul>
<li>یک فضای ابری شخصی که بر حریم خصوصی تمرکز دارد و تمام فایل‌ها، برنامه‌ها، و بازی‌های شما را در یک مکان امن ذخیره می‌کند، قابل دسترسی از هر جا و در هر زمان.</li>
<li>پلتفرمی برای ساخت و انتشار وب‌سایت‌ها، اپلیکیشن‌های وب، و بازی‌ها.</li>
<li>جایگزینی برای Dropbox، Google Drive، OneDrive، و سایر موارد، با یک رابط کاربری مدرن و قابلیت‌های قدرتمند.</li>
<li>یک محیط دسکتاپ از راه دور برای سرورها و ایستگاه‌های کاری.</li>
<li> یک پروژه و جامعه‌ی متن‌باز دوستانه برای یادگیری توسعه وب، رایانش ابری، سیستم‌های توزیع‌شده، و موارد دیگر نام برد!</li>
</ul>
</div>
<br/>
## نحوه‌ی استفاده
### 💻 توسعه‌ی محلی
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
این کار پیوتر را در http://puter.localhost:4100 (یا پورت در دسترس بعدی) اجرا می‌کند.
<br/>
### 🐳 داکر
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 داکر کامپوز
#### لینوکس/مک
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### ویندوز
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ وبگاه Puter.com
پیوتر به‌عنوان یک سرویس میزبانی‌شده در وبگاه [**puter.com**](https://puter.com) موجود است.
## پیش‌نیازهای سیستم
- **سیستم‌عامل‌ها:** لینوکس، مک، ویندوز
- **RAM** حداقل ۲ گیگابایت (پیشنهاد: ۴ گیگابایت)
- **فضای دیسک:** ۱ گیگابایت فضای خالی
- **Node.js:** نسخه ۱۶+ (پیشنهاد: نسخه ۲۲+)
- **npm:** آخرین نسخه پایدار
<br/>
## پشتیبانی
با مدیران و انجمن از طریق این کانال‌ها در تماس باشید:
- گزارش اشکال یا درخواست ویژگی؟ لطفاً [Isuue باز کنید](https://github.com/HeyPuter/puter/issues/new/choose)
- دیسکورد: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- ایکس (توییتر): [x.com/HeyPuter](https://x.com/HeyPuter)
- ردیت: [/reddit.com/r/puter](https://www.reddit.com/r/puter/)
- ماستودون: [mastodon.social/@puter](https://mastodon.social/@puter)
- مشکلات امنیتی؟ [[email protected]](mailto:[email protected])
- ایمیل مدیران: [[email protected]](mailto:[email protected])
ما همیشه از پاسخگویی به سوالات شما خرسند هستیم. در سوال پرسیدن درنگ نکنید!
## گواهی
این مخزن، شامل تمام محتویات، پروژه‌های فرعی، ماژول‌ها و اجزای آن، تحت مجوز [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) است مگر آنکه خلاف آن به‌طور صریح ذکر شده باشد. کتابخانه‌های خارجی ممکن است گواهی‌های جداگانه داشته باشند.
<br/>
+126
View File
@@ -0,0 +1,126 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Internetin käyttöjärjestelmä! Ilmainen, avoimen lähdekoodin ja itse isännöitävä.</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=viimeisin%20versio"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« LIVE DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="näyttökuva" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter on kehittynyt, avoimen lähdekoodin internetin käyttöjärjestelmä, joka on suunniteltu olemaan ominaisuuksiltaan rikas, poikkeuksellisen nopea ja erittäin laajennettava. Puteria voidaan käyttää:
- Yksityisyyttä kunnioittavana henkilökohtaisena pilvenä, johon voit tallentaa kaikki tiedostosi, sovelluksesi ja pelisi turvallisesti yhdessä paikassa, josta ne ovat saatavilla missä tahansa ja milloin tahansa.
- Alustana verkkosivustojen, web-sovellusten ja pelien rakentamiseen ja julkaisemiseen.
- Vaihtoehtona Dropboxille, Google Drivelle, OneDrivelle jne. tuoreella käyttöliittymällä ja tehokkailla ominaisuuksilla.
- Etätyöpöytäympäristönä palvelimille ja työasemille.
- Ystävällisenä, avoimen lähdekoodin projektina ja yhteisönä, jossa voit oppia verkkokehityksestä, pilvipalveluista, hajautetuista järjestelmistä ja paljon muusta!
<br/>
## Aloittaminen
### 💻 Paikallinen kehitys
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Tämä käynnistää Puterin osoitteessa http://puter.localhost:4100 (tai seuraavassa vapaassa portissa).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter on saatavilla isännöitynä palveluna osoitteessa [**puter.com**](https://puter.com).
<br/>
## Järjestelmävaatimukset
- **Käyttöjärjestelmät:** Linux, macOS, Windows
- **RAM:** Vähintään 2GB (Suositeltu 4GB)
- **Levytila:** 1GB vapaata tilaa
- **Node.js:** Versio 16+ (Suositeltu versio 22+)
- **npm:** Uusin vakaa versio
<br/>
## Tuki
Ota yhteyttä ylläpitäjiin ja yhteisöön näiden kanavien kautta:
- Onko sinulla virheraportti tai ominaisuuspyyntö? Ole hyvä ja [avaa uusi issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Turvallisuusongelmat? [[email protected]](mailto:[email protected])
- Ota yhteyttä ylläpitäjiin sähköpostitse osoitteessa [[email protected]](mailto:[email protected])
Olemme aina valmiita auttamaan sinua kaikissa kysymyksissäsi. Älä epäröi kysyä!
<br/>
## Lisenssi
Tämä repository, mukaan lukien kaikki sen sisältö, aliprojektit, moduulit ja komponentit, on lisensoitu [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt)-lisenssillä, ellei toisin mainita. Tämän repositoryn mukana tulevat kolmannen osapuolen kirjastot voivat olla omien lisenssiensä alaisia.
<br/>
+125
View File
@@ -0,0 +1,125 @@
<h3 align="center"><img width="80" alt="Puter.com, L'ordinateur cloud personnel : Tous vos fichiers, applications et jeux en un seul endroit accessible de partout à tout moment." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">L'OS Internet ! Gratuit, open-source et auto-hébergeable.</h3>
<p align="center">
<img alt="Taille du dépôt GitHub" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="Version GitHub" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=derni%C3%A8re%20version"> <img alt="Licence GitHub" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« DÉMO EN DIRECT »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="capture d'écran" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter est un système d'exploitation internet avancé, open-source, conçu pour être riche en fonctionnalités, extrêmement rapide et hautement extensible. Puter peut être utilisé comme :
- Un cloud personnel axé sur la confidentialité pour garder tous vos fichiers, applications et jeux en un seul endroit sécurisé, accessible de partout à tout moment.
- Une plateforme pour créer et publier des sites web, des applications web et des jeux.
- Une alternative à Dropbox, Google Drive, OneDrive, etc. avec une interface renouvelée et des fonctionnalités puissantes.
- Un environnement de bureau à distance pour serveurs et stations de travail.
- Un projet et une communauté open-source accueillants pour apprendre le développement web, l'informatique en nuage, les systèmes distribués, et bien plus encore !
<br/>
## Démarrage
### 💻 Développement Local
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Cela lancera Puter à http://puter.localhost:4100 (ou au port disponible suivant).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter est disponible en tant que service hébergé sur [**puter.com**](https://puter.com).
<br/>
## Configuration système requise
- **Systèmes d'exploitation:** Linux, macOS, Windows
- **RAM:** Minimum 2 Go (4 Go recommandés)
- **Espace disque:** 1 Go d'espace libre
- **Node.js:** Version 16+ (Version 22+ recommandée)
- **npm:** Dernière version stable
<br/>
## Support
Connectez-vous avec les mainteneurs et la communauté via ces canaux :
- Un bug ou une demande de fonctionnalité ? Veuillez [ouvrir une issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Problèmes de sécurité ? [[email protected]](mailto:[email protected])
- Email des mainteneurs à [[email protected]](mailto:[email protected])
Nous sommes toujours heureux de vous aider avec toutes les questions que vous pourriez avoir. N'hésitez pas à nous demander !
<br/>
## License
Ce dépôt, y compris tout son contenu, sous-projets, modules et composants, est licencié sous [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) sauf indication contraire explicite. Les bibliothèques tierces incluses dans ce dépôt peuvent être soumises à leurs propres licences.
<br/>
+130
View File
@@ -0,0 +1,130 @@
<h3 align="center"><img width="80" alt="Puter.com,
הענן הפרטי: כל הקבצים, האפליקציות והמשחקים שלך במקום אחד נגיש מכל מקום ובכל זמן." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center" dir="rtl">מערכת ההפעלה של האינטרנט! חינמית, קוד פתוח וניתנת לאחסון עצמאי.</h3>
<p align="center">
<img alt="GitHub גודל ספרית" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub גרסא" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub רישיון" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« הדגמה לייב »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="צילום מסך" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
<div dir="rtl">
<p div="rtl">
מערכת ההפעלה Puter הינה ספרית קוד פתוח, מתקדמת, עשירה בתכנים, מהירה במיוחד וניתנת להרחבה.
אפשר להישתמש ב Puter כ:</p>
<ul>
<li>ענן אישי עם פרטיות מקסימלית, לשמירת הקבצים, האפליקציות והמשחקים שלך במקום מאובטח אחד, נגיש מכל מקום ובכל זמן.</li>
<li>פלטפורמה לבניית ופרסום אתרים, אפליקציות ומשחקים.</li>
<li>אלטרנטיבה ל-Dropbox, Google Drive, OneDrive וכו' עם ממשק מרענן ותכנים חזקים.</li>
<li>סביבה לעבודה מרחוק לשרתים ותחנות עבודה.</li>
<li>פרוייקט ידידותי, קוד פתוח וקהילה ללמידה על פיתוח אינטרנט, פיתוח בענן, מערכות מבוזרות ועוד הרבה!</li>
<ul>
</div>
<br/>
## בוא נתחיל
### 💻 פיתוח מקומי (Localhost)
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
פקודה זו תפעיל את Puter בכתובת http://puter.localhost:4100 (או בפורט הפנוי הבא).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
מערכת ההפעלה Puter זמינה כשירות אחסון ב- [**puter.com**](https://puter.com).
<br/>
## דרישות מערכת
- **מערכות הפעלה:** Linux, macOS, Windows
- **RAM:** לפחות 2GB, מומלץ 4GB
- **מקום פנוי בדיסק:** 1GB
- **Node.js:** גרסה 16+ (מומלץ גרסה 22+)
- **npm:** הגרסה היציבה האחרונה
<br/>
## תמיכה
צור קשר עם המפתחים והקהילה דרך הערוצים הבאים:
- דיווח על באג או בקשה לתוכן? אנא [פתח פניה](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter](https://www.reddit.com/r/puter.)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- בעיות אבטחה? [[email protected]](mailto:[email protected])
- שלח אימייל למפתחים ב [[email protected]](mailto:[email protected])
אנחנו תמיד שמחים לעזור עם כל שאלה שיש. אל תהסס לשאול!
<br/>
## רישיון
ספריה זו, כולל כל התכנים שלה, תתי הפרויקטים, המודולים והרכיבים שלה, מורשית תחת [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) אלא אם נאמר אחרת במפורש. לספריות צד שלישי הכלולות בספרייה זו עשויות להיות רישיונות משלהן.
<br/>
+182
View File
@@ -0,0 +1,182 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: आपकी सारी फाइलें, ऐप्स, और गेम एक ही जगह, जिसे कहीं से भी कभी भी एक्सेस किया जा सकता है।" src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">इंटरनेट ओएस! फ्री, ओपन-सोर्स, और सेल्फ-होस्टेबल।</h3>
<p align="center">
<a href="https://puter.com/?ref=github.com"><strong>« लाइव डेमो »</strong></a>
<br />
<br />
<a href="https://puter.com/?ref=github.com">Puter.com</a>
·
<a href="https://apps.puter.com/">ऐप स्टोर</a>
·
<a href="https://developer.puter.com" target="_blank">डेवलपर्स</a>
·
<a href="https://github.com/heyputer/puter-cli" target="_blank">CLI</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter क्या है?
Puter एक एडवांस्ड, ओपन-सोर्स इंटरनेट ऑपरेटिंग सिस्टम है जिसे फीचर-रिच, तेज़ और एक्सटेंडेबल बनाने के लिए डिज़ाइन किया गया है। Puter का उपयोग आप निम्नलिखित चीजों के लिए कर सकते हैं:
- एक प्राइवेसी-फर्स्ट पर्सनल क्लाउड, जो आपकी सभी फाइलों, ऐप्स और गेम्स को एक सेफ जगह पर रखता है, जिसे आप कहीं से भी कभी भी एक्सेस कर सकते हैं।
- वेबसाइट्स, वेब ऐप्स और गेम्स बनाने और पब्लिश करने का एक प्लेटफ़ॉर्म।
- Dropbox, Google Drive, OneDrive आदि का एक शानदार और पावरफुल इंटरफ़ेस वाला विकल्प।
- सर्वर और वर्कस्टेशन के लिए एक रिमोट डेस्कटॉप एनवायरनमेंट।
- एक फ्रेंडली ओपन-सोर्स प्रोजेक्ट और कम्युनिटी, जहां आप वेब डेवलपमेंट, क्लाउड कंप्यूटिंग, डिस्ट्रीब्यूटेड सिस्टम्स और बहुत कुछ सीख सकते हैं।
<br/>
## शुरुआत कैसे करें?
### 💻 लोकल डेवलपमेंट
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
✨ यह Puter को
<font color="red"> http://puter.localhost:4100 </font> (या अगले उपलब्ध पोर्ट) पर लॉन्च करेगा।
अगर यह काम नहीं करता, तो [First Run Issues](./doc/self-hosters/first-run-issues.md) देखें।
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
✨ यह Puter को
<font color="red"> http://puter.localhost:4100</font> (या अगले उपलब्ध पोर्ट) पर लॉन्च करेगा।
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
✨ यह <font color="red"> http://puter.localhost:4100 </font>
(या अगले उपलब्ध पोर्ट) पर उपलब्ध होगा।
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
✨ यह Puter को
<font color="red"> http://puter.localhost:4100 (or the next available port). </font> (या अगले उपलब्ध पोर्ट) पर लॉन्च करेगा।
<br/>
### 🚀 सेल्फ-होस्टिंग
सेल्फ-होस्टिंग के लिए विस्तृत गाइड, कॉन्फ़िगरेशन ऑप्शन्स और बेस्ट प्रैक्टिसेज जानने के लिए हमारी [Self-Hosting Documentation](https://github.com/HeyPuter/puter/blob/main/doc/self-hosters/instructions.md) देखें।
<br/>
### ☁️ Puter.com
Puter [**puter.com**](https://puter.com) पर एक होस्टेड सर्विस के रूप में भी उपलब्ध है।
<br/>
## सिस्टम आवश्यकताएँ
* **ऑपरेटिंग सिस्टम्स:** Linux, macOS, Windows
* **RAM:** कम से कम 2GB (4GB रिकमेंडेड)
* **डिस्क स्पेस:** 1GB फ्री स्पेस
* **Node.js:** वर्जन 16+ (वर्जन 23+ रिकमेंडेड)
* **npm:** लेटेस्ट स्टेबल वर्जन
<br/>
## सपोर्ट
नीचे दिए गए माध्यमों से आप मेंटेनर्स और कम्युनिटी से जुड़ सकते हैं:
* बग रिपोर्ट या फीचर रिक्वेस्ट? [यहाँ issue खोलें](https://github.com/HeyPuter/puter/issues/new/choose)।
* Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
* X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
* Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
* Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
* सिक्योरिटी इशूज़? [[email protected]](mailto:[email protected])
* ईमेल करें: [[email protected]](mailto:[email protected])
आपके किसी भी सवाल में मदद करने के लिए हम हमेशा तैयार हैं!
<br/>
## लाइसेंस
यह रिपॉज़िटरी और इसके सभी कंटेंट्स [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) लाइसेंस के अंतर्गत आते हैं जब तक कि कुछ और स्पष्ट रूप से ना लिखा हो। इसमें शामिल थर्ड-पार्टी लाइब्रेरीज़ अपने-अपने लाइसेंस के अधीन हो सकती हैं।
<br/>
## अनुवाद
Puter के डॉक्यूमेंटेशन कई भाषाओं में उपलब्ध हैं, जिनमें शामिल हैं:
- [Arabic / العربية](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ar.md)
- [Armenian / Հայերեն](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hy.md)
- [Bengali / বাংলা](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.bn.md)
- [Chinese / 中文](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.zh.md)
- [Danish / Dansk](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.da.md)
- [English](https://github.com/HeyPuter/puter/blob/main/README.md)
- [Farsi / فارسی](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fa.md)
- [Finnish / Suomi](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fi.md)
- [French / Français](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fr.md)
- [German/ Deutsch](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.de.md)
- [Hebrew/ עברית](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.he.md)
- [Hindi / हिंदी](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hi.md)
- [Hungarian / Magyar](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hu.md)
- [Indonesian / Bahasa Indonesia](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.id.md)
- [Italian / Italiano](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.it.md)
- [Japanese / 日本語](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.jp.md)
- [Korean / 한국어](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ko.md)
- [Malayalam / മലയാളം](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ml.md)
- [Polish / Polski](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pl.md)
- [Portuguese / Português](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pt.md)
- [Romanian / Română](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ro.md)
- [Russian / Русский](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ru.md)
- [Spanish / Español](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.es.md)
- [Swedish / Svenska](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.sv.md)
- [Tamil / தமிழ்](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ta.md)
- [Telugu / తెలుగు](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.te.md)
- [Thai / ไทย](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.th.md)
- [Turkish / Türkçe](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.tr.md)
- [Ukrainian / Українська](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ua.md)
- [Urdu / اردو](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ur.md)
- [Vietnamese / Tiếng Việt](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.vi.md)
+128
View File
@@ -0,0 +1,128 @@
<h3 align="center"><img width="80" alt="Puter.com, A személyi felhő számítógép: Minden fájl, alkalmazás és játék egy helyen elérhető bárhonnan, bármikor." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Az internetes oprendszer! Ingyenes, nyílt-forráskódú, saját szerveren futtatható.</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« ÉLŐ DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
A Puter egy fejlett, nyílt forráskódú internetes operációs rendszer, amelyet úgy terveztek, hogy funkciókban gazdag, kivételesen gyors és nagymértékben bővíthető legyen. A Puter a következőképpen használható:
- Egy adatvédelmet előtérbe helyező személyes felhő, amely minden fájlt, alkalmazást és játékot egy biztonságos helyen tart. Bárhonnan és bármikor elérhető.
- Egy platform weboldalak, web-appok, és játékok készítéséhez/közzétételéhez.
- A Dropbox, Google Drive, OneDrive (stb.) alternatívája megújult felülettel és hatékony funkciókkal.
- Egy távoli desktop-környezet szervereknek és workstation-öknek.
- Egy barátságos, nyílt forráskódú projekt és közösség, amely a webfejlesztéssel, a felhőalapú számítástechnikával, elosztott rendszerekkel és sok más érdekes témával foglalkozik!
<br/>
## Első lépések
### 💻 Helyi (lokális) fejlesztés
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Ezzel a http://puter.localhost:4100 -on futtatjuk Putert. (vagy a legközelebbi elérhető porton).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
A Puter elérhető hostolt szolgáltatásként a [**puter.com**](https://puter.com) címen.
<br/>
## Rendszerkövetelmények
- **Operációs rendszerek:** Linux, macOS, Windows
- **RAM:** 2GB minimum (4GB ajánlott)
- **Tárhely:** 1GB szabad tárhely
- **Node.js:** 16+ (22+ verzió ajánlott)
- **npm:** legújabb stabil verzió
<br/>
## Támogatás
Lépj kapcsolatba a fejlesztőkkel és a közösséggel az alábbi platformokon:
- Észrevételeid/javaslataid vannak? Az [alábbi linken](https://github.com/HeyPuter/puter/issues/new/choose) megoszthatod velünk.
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Biztonsági hibák? [[email protected]](mailto:[email protected])
- A fejlesztőket a [[email protected]](mailto:[email protected]) email címen érheted el.
Mindig örömmel segítünk bármilyen felmerülő kérdésben. Bátran kérdezz tőlünk!
<br/>
## License
Ez a repo, beleértve annak minden tartalmát, alprojektjeit, moduljait és komponenseit, az [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) licenc alatt áll, hacsak másképp nem rendelkeznek róla. A repoban szereplő harmadik fél által fejlesztett könyvtárak saját licencfeltételek alá eshetnek.
<br/>
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Ինտերնետ ՕՀ! Անվճար, բաց կոդով և ինքնահոսթ հնարավորությամբ։</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« Օնլայն դեմո »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter-ը առաջադեմ, բաց կոդով ինտերնետային օպերացիոն համակարգ է, որը նախագծված է լինել ֆունկցիոնալ հարուստ, բացառիկ արագ և բարձր ընդլայնելի։ Puter-ը կարող է օգտագործվել հետևյալ կերպ․
- Անձնական ամպային համակարգ՝ առաջնային գաղտնիությամբ, որը թույլ է տալիս պահել ձեր բոլոր ֆայլերը, հավելվածները և խաղերը մեկ անվտանգ վայրում, որը հասանելի է ցանկացած վայրից և ցանկացած ժամանակ։
- Պլատֆորմ կայքերի, վեբ հավելվածների և խաղերի ստեղծման և հրապարակման համար։
- Dropbox, Google Drive, OneDrive և այլ ծառայությունների այլընտրանք՝ նոր ինտերֆեյսով և հզոր գործառույթներով։
- Հեռավոր աշխատասեղանի միջավայր սերվերների և աշխատանքային կայանների համար։
- Պարզ, բաց կոդով նախագիծ և համայնք՝ վեբ ծրագրավորման, ամպային հաշվարկների, բաշխված համակարգերի և այլ թեմաների մասին սովորելու համար։
<br/>
## Սկսել
### 💻 Լոկալ ծրագրավորում
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Սա կգործակի Puter-ը հետևյալ հասցեով՝ http://puter.localhost:4100 (կամ հաջորդ հասանելի պորտով)։
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter-ը հասանելի է որպես հյուրընկալվող ծառայություն [**puter.com**](https://puter.com).
<br/>
## System Requirements
- **Օպերացիոն համակարգ:** Linux, macOS, Windows
- **Օպերատիվ հիշողություն:** 2GB նվազագույնը (4GB խորհուրդ է տրվում)
- **Համակարգչի հիշողություն:** 1GB ազատ տարածություն
- **Node.js:** Տարբերակ 16+ (Տարբերակ 22+ խորհուրդ է տրվում)
- **npm:** Վերջին կայուն տարբերակը
<br/>
## Աջակցություն
Կապվեք համակարգողների և համայնքի հետ այս կայքերի միջոցով՝
- Սխալների կամ գործառույթի հարցում՝ (https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Անվտանգության խնդիրներ՝ [[email protected]](mailto:[email protected])
- Email maintainers at [[email protected]](mailto:[email protected])
Մենք միշտ ուրախ ենք օգնել ձեզ ցանկացած հարցում։ Մի կաշկանդվեք հարցնել։
<br/>
## Լիցենզիա
Այս պահոցարանը, ներառյալ բոլոր իր բովանդակությունը, ենթա-պրոյեկտները, մոդուլները և բաղադրիչները, լիցենզավորվում են [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) լիցենզիայի տակ, եթե այլ կերպ հստակ նշված չէ։ Այս պահոցարանում ներառված երրորդ կողմի գրադարանները կարող են ենթարկվել իրենց սեփական լիցենզիաներին։
<br/>
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, Komputer Cloud Pribadi: Semua file, aplikasi, dan permainan Anda berada di satu tempat yang dapat diakses dari mana saja kapan saja." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Sistem Operasi Internet! Gratis, Sumber Terbuka, dan Dapat Dihosting Sendiri.</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« LIVE DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter adalah sistem operasi internet canggih, open-source, yang dirancang untuk menjadi kaya fitur, sangat cepat, dan sangat dapat diperluas. Puter dapat digunakan sebagai:
- Cloud pribadi yang mengutamakan privasi untuk menyimpan semua file, aplikasi, dan permainan Anda di satu tempat yang aman, yang dapat diakses dari mana saja kapan saja.
- Platform untuk membangun dan mempublikasikan situs web, aplikasi web, dan permainan.
- Alternatif untuk Dropbox, Google Drive, OneDrive, dll. Dengan antarmuka baru dan fitur-fitur canggih.
- Lingkungan desktop jarak jauh untuk server dan workstation.
- Proyek dan komunitas open-source yang ramah untuk belajar tentang pengembangan web, komputasi gemawan (cloud), sistem terdistribusi, dan banyak lagi!
<br/>
## Memulai
### 💻 Pengembangan Lokal
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Ini akan menjalankan Puter di http://puter.localhost:4100 (atau di port berikutnya yang tersedia)
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter tersedia sebagai layanan yang telah dihosting di [**puter.com**](https://puter.com).
<br/>
## Persyaratan Sistem
- **Sistem Operasi:** Linux, macOS, Windows
- **RAM:** 2GB minimal (rekomendasi 4GB)
- **Penyimpanan:** 1GB ruang tersedia
- **Node.js:** Version 16+ (rekomendasi versi 22+)
- **npm:** Versi stabil termutakhir
<br/>
## Dukuangan
Terhubung dengan maintainer dan komunitas melalui saluran-saluran berikut:
- Laporan bug atau permintaan fitur? Silakan [buat issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Isu keamanan? [[email protected]](mailto:[email protected])
- Email maintainers di [[email protected]](mailto:[email protected])
Kami selalu senang membantu Anda dengan pertanyaan apa pun yang Anda miliki. Jangan ragu untuk bertanya!
<br/>
## Lisensi
Repositori ini, termasuk semua isinya, sub-proyek, modul, dan komponen, dilisensikan di bawah [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) kecuali dinyatakan sebaliknya secara eksplisit. Perpustakaan pihak ketiga yang termasuk dalam repositori ini mungkin tunduk pada lisensinya sendiri.
<br/>
+128
View File
@@ -0,0 +1,128 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Il sistema operativo di Internet! Gratuito, Open-Source e Auto-Hostabile.</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« LIVE DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter è un sistema operativo di Internet avanzato e open-source, progettato per essere ricco di funzionalità, eccezionalmente veloce e altamente estensibile. Puter può essere utilizzato come:
- Un cloud personale che tiene conto della privacy per conservare tutti i file, le app e i giochi in un luogo sicuro, accessibile da qualsiasi luogo e in qualsiasi momento.
- Una piattaforma per creare e pubblicare siti web, app e giochi.
- Un'alternativa a Dropbox, Google Drive, OneDrive, ecc. con un'interfaccia nuova e funzioni potenti.
- Un ambiente desktop remoto per server e workstation.
- Un progetto e una comunità open-source amichevole per imparare lo sviluppo web, il cloud computing, i sistemi distribuiti e molto altro ancora!
<br/>
## Getting Started
### 💻 Local Development
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
In questo modo Puter verrà avviato all'indirizzo http://puter.localhost:4100 (o alla prossima porta disponibile).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter è disponibile come servizio in hosting su [**puter.com**](https://puter.com).
<br/>
## Requisiti di Sistema
- **Sistema Operativo:** Linux, macOS, Windows
- **RAM:** 2GB minimi (4GB raccomandati)
- **Spazio su Disco:** 1GB liberi
- **Node.js:** Versione 16+ (Versione 22+ raccomandati)
- **npm:** Ultima versione stabile
<br/>
## Supporto
Collegatevi con i maintainers e la comunità attraverso questi canali:
- Segnalazione di bug o richiesta di funzionalità? Perfavore [aprire una issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Problemi di sicurezza? [[email protected]](mailto:[email protected])
- Email maintainers a [[email protected]](mailto:[email protected])
Siamo sempre felici di aiutarvi con qualsiasi domanda. Non esitate a chiedere!
<br/>
## Licenza
Questo repository, compresi tutti i suoi contenuti, sottoprogetti, moduli e componenti, è concesso in licenza [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), a meno che non sia esplicitamente indicato diversamente. Le librerie di terze parti incluse in questo repository possono essere soggette alle loro licenze.
<br/>
+123
View File
@@ -0,0 +1,123 @@
<h3 align="center"><img width="80" alt="Puter.com, あなたのファイル、アプリ、ゲームをどこからでもアクセス可能にするパーソナルクラウドコンピュータ" src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">インターネットOS!無料、オープンソース、セルフホスト可能。</h3>
<p align="center">
<img alt="GitHub リポジトリサイズ" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub リリース" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=%E6%9C%80%E6%96%B0%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3"> <img alt="GitHub ライセンス" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« ライブデモ »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="スクリーンショット" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puterは、機能豊富で非常に高速、そして高い拡張性を持つ、先進的なオープンソースのインターネットオペレーティングシステムです。Puterは以下の用途に利用できます:
- プライバシーを最優先するパーソナルクラウドとして、あなたのファイル、アプリ、ゲームを一か所で安全に管理し、どこからでもアクセス可能に。
- ウェブサイト、ウェブアプリ、ゲームの作成と公開のためのプラットフォーム。
- Dropbox、Google Drive、OneDriveなどの代替として、新しいインターフェースと強力な機能を提供。
- サーバーやワークステーションのためのリモートデスクトップ環境。
- ウェブ開発、クラウドコンピューティング、分散システムなどを学ぶための、フレンドリーでオープンなコミュニティとプロジェクト。
<br/>
## はじめに
### 💻 ローカル開発
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
これでPuterが http://puter.localhost:4100 (または次に利用可能なポート)で起動します。
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puterは[**puter.com**](https://puter.com)でホストサービスとして利用可能です。
<br/>
## システム要件
- **オペレーティングシステム:** Linux, macOS, Windows
- **RAM:** 最小2GB(推奨4GB)
- **ディスクスペース:** 1GBの空き容量
- **Node.js:** バージョン16以上(推奨バージョン22以上)
- **npm:** 最新の安定バージョン
<br/>
## サポート
メンテナーやコミュニティと以下のチャンネルを通じてつながりましょう:
- バグ報告や機能リクエストがありますか? [issueを開く](https://github.com/HeyPuter/puter/issues/new/choose) してください。
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- セキュリティの問題? [[email protected]](mailto:[email protected])
- メンテナーへのメールは [[email protected]](mailto:[email protected]) まで
質問があれば、いつでもお気軽にお問い合わせください!
<br/>
## ライセンス
このリポジトリ、ならびにそのすべてのコンテンツ、サブプロジェクト、モジュール、コンポーネントは、[AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt)の下でライセンスされています。明示的に異なるライセンスが示されている場合を除きます。このリポジトリに含まれるサードパーティのライブラリは、それぞれのライセンスが適用される場合があります。
<br/>
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Puter: 인터넷 OS! 무료이고 오픈소스이며 자체 호스팅이 가능합니다.</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« 시연 영상 »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter는 오픈소스 인터넷 운영 체제로, 매우 빠르고 확장성이 뛰어나며 새로운 인터페이스와 다양한 기능을 갖추고 있습니다. Puter는 다음과 같이 사용될 수 있습니다:
- 모든 파일, 앱, 게임을 한 곳에 안전하게 보관하고 언제 어디서나 접근할 수 있는 프라이버시 중심의 개인 클라우드로 사용할 수 있습니다.
- 웹사이트, 웹 앱, 게임을 구축하고 배포하는 플랫폼으로 활용할 수 있습니다.
- Dropbox, Google Drive, OneDrive 등의 대안으로 사용할 수 있으며 보다 발전된 기능과 인터페이스를 제공합니다.
- 서버와 워크스테이션을 위한 원격 데스크톱 환경으로 활용할 수 있습니다.
- 웹 개발, 클라우드 컴퓨팅, 분산 시스템 등에 대해 배울 수 있는 친근한 오픈소스 프로젝트이자 커뮤니티입니다!
<br/>
## 시작하기
### 💻 로컬 환경 개발
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
위처럼 실행할 시 Puter는 http://puter.localhost:4100 (또는 사용 가능한 다음 포트)에서 실행됩니다.
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter는 [**puter.com**](https://puter.com)에서 호스팅 서비스로 이용할 수 있습니다.
<br/>
## 시스템 요구사항
- **Operating Systems:** Linux, macOS, Windows
- **RAM:** 2GB minimum (4GB recommended)
- **Disk Space:** 1GB free space
- **Node.js:** Version 16+ (Version 22+ recommended)
- **npm:** Latest stable version
<br/>
## 지원
다음 채널을 통해 관리자 및 커뮤니티와 소통하세요:
- 버그 신고나 기능 요청이 있으신가요? [이슈를 열어주세요.](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- 보안 관련 문제는 [[email protected]](mailto:[email protected]) 으로 연락주세요.
- 관리자에게 이메일 보내기: [[email protected]](mailto:[email protected])
어떤 질문이든 기꺼이 도와드리겠습니다. 언제든 물어보세요!
<br/>
## 라이선스
이 저장소는 모든 내용, 하위 프로젝트, 모듈 및 구성 요소를 포함하여 명시적으로 달리 명시되지 않는 한 [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) 라이선스 하에 제공됩니다. 이 저장소에 포함된 제3자 라이브러리는 해당 라이브러리의 고유 라이선스를 따를 수 있습니다.
<br/>
+128
View File
@@ -0,0 +1,128 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">ഇന്റർനെറ്റ് ഓപ്പറേറ്റിംഗ് സിസ്റ്റം!<br> സൗജന്യവും, ഓപ്പൺ സോഴ്സും സ്വയം ഹോസ്റ്റ് ചെയ്യാൻ പറ്റുന്നതും</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« ലൈവ് ഡെമോ »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## പ്യൂട്ടർ (Puter)
ഫീച്ചറുകളാൽ സമ്പുഷ്ടവും അസാധാരണമാംവിധം വേഗതയേറിയതും,വളരെ വിപുലീകരിക്കാവുന്നതുമായ ഒരു നൂതന, ഓപ്പൺ സോഴ്‌സ് ഇന്റർനെറ്റ് ഓപ്പറേറ്റിംഗ് സിസ്റ്റമാണ് പ്യൂട്ടർ. പ്യൂട്ടർ ഇനിപ്പറയുന്ന രീതിയിൽ ഉപയോഗിക്കാം:
- നിങ്ങളുടെ എല്ലാ ഫയലുകളും ആപ്പുകളും ഗെയിമുകളും ഒരു സുരക്ഷിത സ്ഥലത്ത് സൂക്ഷിക്കുന്നതിനുള്ള, സ്വകാര്യതയ്ക്ക് മുൻഗണന കൊടുക്കുന്ന ആദ്യത്തെ വ്യക്തിഗത ക്ലൗഡ്, എവിടെ നിന്നും എപ്പോൾ വേണമെങ്കിലും ആക്‌സസ് ചെയ്യാൻ കഴിയും.
- വെബ്‌സൈറ്റുകൾ, വെബ് ആപ്പുകൾ, ഗെയിമുകൾ എന്നിവ നിർമ്മിക്കുന്നതിനും പ്രസിദ്ധീകരിക്കുന്നതിനുമുള്ള ഒരു പ്ലാറ്റ്ഫോം.
- പുതിയ ഇന്റർഫേസും, ശക്തമായ ഫീച്ചറുകളും അടങ്ങിയ, ഡ്രോപ്പ്‌ബോക്‌സ്, ഗൂഗിൾ ഡ്രൈവ്, വൺഡ്രൈവ് മുതലായവയ്‌ക്കുള്ള ബദൽ.
- സെർവറുകൾക്കും വർക്ക്സ്റ്റേഷനുകൾക്കും, ഒരു വിദൂര ഡെസ്ക്ടോപ്പ് പരിസ്ഥിതി.
- വെബ് ഡെവലപ്മെന്റ്, ക്ലൗഡ് കംപ്യൂട്ടിംഗ്, ഡിസ്ട്രിബ്യൂട്ടഡ് സിസ്റ്റങ്ങൾ എന്നിവയെ കുറിച്ചും, അതിലേറെ കാര്യങ്ങളെ കുറിച്ചും അറിയാനുള്ള സൗഹൃദപരവും ഓപ്പൺ സോഴ്സുമായ പ്രോജക്റ്റും കമ്മ്യൂണിറ്റിയും!
<br/>
## തുടങ്ങാനായി
### 💻 ലോക്കൽ ഡെവലപ്മെന്റ്
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
ഇത് http://puter.localhost:4100 (അല്ലെങ്കിൽ അടുത്ത ലഭ്യമായ പോർട്ടിൽ) എന്നതിൽ Puter സമാരംഭിക്കും
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
പ്യൂട്ടർ [**puter.com**](https://puter.com) എന്നതിൽ ഹോസ്റ്റ് ചെയ്‌ത സേവനമായി ലഭ്യമാണ്.
<br/>
## സിസ്റ്റത്തിന്റെ ആവശ്യകതകൾ
- **ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങൾ:** ലിനക്സ്, മാക്ക് ഒഎസ്, വിൻഡോസ്
- **RAM:** 2GB കുറഞ്ഞത് (4GB ശുപാർശ ചെയ്യുന്നു)
- **ഡിസ്ക് സ്പേസ്:** 1GB ഒഴിഞ്ഞ ഇടം
- **Node.js:** Version 16+ (Version 22+ ശുപാർശ ചെയ്യുന്നു)
- **npm:** ഏറ്റവും പുതിയ സ്ഥിരതയുള്ള പതിപ്പ്
<br/>
## പിന്തുണ
ഈ ചാനലുകളിലൂടെ പരിപാലിക്കുന്നവരുമായും കമ്മ്യൂണിറ്റിയുമായും ബന്ധപ്പെടുക:
- ബഗ്ഗ് റിപ്പോർട്ടോ, ഫീച്ചർ റിക്ക്വസ്റ്റോ ഉണ്ടോ? ദയവുചെയ്ത് [ഒരു ഇഷ്യൂ തുടങ്ങുക](https://github.com/HeyPuter/puter/issues/new/choose).
- ഡിസ്കോർഡ്: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- എക്സ് (ട്വിറ്റർ): [x.com/HeyPuter](https://x.com/HeyPuter)
- റെഡ്ഡിറ്റ്: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- മാസ്റ്റഡൺ: [mastodon.social/@puter](https://mastodon.social/@puter)
- സുരക്ഷാ പ്രശ്നങ്ങളുണ്ടോ? [[email protected]](mailto:[email protected])
- ഇമെയിൽ മെയിന്റൈനർമാർ: [[email protected]](mailto:[email protected])
നിങ്ങൾക്ക് ഉണ്ടായേക്കാവുന്ന ഏത് ചോദ്യങ്ങളിലും നിങ്ങളെ സഹായിക്കുന്നതിൽ ഞങ്ങൾക്ക് എപ്പോഴും സന്തോഷമുണ്ട്. ചോദിക്കാൻ മടിക്കേണ്ട!
<br/>
## ലൈസൻസ്
ഈ ശേഖരം, അതിന്റെ എല്ലാ ഉള്ളടക്കങ്ങളും, ഉപപദ്ധതികളും, മൊഡ്യൂളുകളും, ഘടകങ്ങളും ഉൾപ്പെടെ, [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) എന്നതിന് കീഴിൽ ലൈസൻസുള്ളതാണ്. ഈ ശേഖരത്തിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന മൂന്നാം കക്ഷി ലൈബ്രറികൾ അവരുടെ സ്വന്തം ലൈസൻസുകൾക്ക് വിധേയമായിരിക്കാം.
<br/>
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: Semua fail, apl, dan permainan anda di satu tempat yang boleh diakses dari mana sahaja pada bila-bila masa." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Sistem Operasi Internet! Percuma, Sumber Terbuka, dan Boleh Dihoskan Sendiri.</h3>
<p align="center">
<img alt="Saiz repo GitHub" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="Terbitan GitHub" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="Lesen GitHub" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« DEMO SECARA LANGSUNG »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter ialah sistem operasi internet sumber terbuka yang maju dan direka untuk kaya dengan ciri kefungsian, kepantasan luar biasa dan kebolehluasan yang tinggi. Puter boleh digunakan sebagai:
- Storan awan peribadi yang mendahulukan privasi untuk menyimpan semua fail, aplikasi dan permainan anda di satu tempat yang selamat dan boleh diakses dari mana sahaja pada bila-bila masa.
- Platform untuk membina dan menerbitkan laman web, aplikasi web dan permainan.
- Alternatif kepada Dropbox, Google Drive, OneDrive, dan lain-lain dengan antara muka yang baharu dan ciri kefungsian berkuasa tinggi.
- Persekitaran desktop awan untuk server dan stesen kerja.
- Projek dan komuniti sumber terbuka yang mesra untuk mempelajari pembangunan laman web, pengkomputeran awan, sistem teragih, dan banyak lagi!
<br/>
## Mulakan
### 💻 Pembangunan Lokal
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Ini akan melancarkan Puter di http://puter.localhost:4100 (atau port seterusnya yang tersedia).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter tersedia sebagai perkhidmatan terhos di [**puter.com**](https://puter.com).
<br/>
## Keperluan Sistem
- **Sistem Operasi:** Linux, macOS, Windows
- **RAM:** Minimum 2GB (sebaiknya 4GB)
- **Ruang Storan:** 1GB ruang kosong
- **Node.js:** Versi 16+ (sebaiknya Versi 22+)
- **npm:** Versi stabil yang terkini
<br/>
## Sokongan
Berhubung dengan penyelenggara dan komuniti melalui saluran berikut:
- Laporan pepijat atau permintaan ciri? Sila [buka isu baharu](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Isu keselamatan? [[email protected]](mailto:[email protected])
- Emel penyelenggara melalui [[email protected]](mailto:[email protected])
Kami sentiasa gembira untuk membantu anda dengan apa-apa soalan. Jangan takut untuk bertanya!
<br/>
## Lesen
Repositori ini, termasuklah kandungannya, subprojek, modul dan komponen, dilesenkan di bawah [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) melainkan dinyatakan sebaliknya. *Library* pihak ketiga yang terkandung dalam repositori ini tertakluk kepada lesen mereka sendiri.
<!-- The word `Library` is kept as is to avoid confusion since the direct translation `Perpustakaan/Pustaka` is never used in the tech context and doesn't convey the same meaning among Malay community if used in this situation -->
<br/>
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, De Persoonlijke Cloud Computer: Al je bestanden, apps en games op één plek, overal en altijd toegankelijk." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Het Internet OS! Gratis, Open-Source en Zelf te Hosten.</h3>
<p align="center">
<img alt="GitHub repo grootte" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=laatste%20versie"> <img alt="GitHub Licentie" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« LIVE DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter is een geavanceerd, open-source internetbesturingssysteem ontworpen om functierijk, uitzonderlijk snel en zeer uitbreidbaar te zijn. Puter kan worden gebruikt als:
- Een privacy-gerichte persoonlijke cloud om al je bestanden, apps en games op één veilige plek te bewaren, overal en altijd toegankelijk.
- Een platform voor het bouwen en publiceren van websites, web-apps en games.
- Een alternatief voor Dropbox, Google Drive, OneDrive, etc. met een frisse interface en krachtige functies.
- Een externe desktopomgeving voor servers en werkstations.
- Een vriendelijk, open-source project en gemeenschap om te leren over webontwikkeling, cloud computing, gedistribueerde systemen en veel meer!
<br/>
## Aan de slag
### 💻 Lokale Ontwikkeling
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Dit zal Puter starten op http://puter.localhost:4100 (of de eerstvolgende beschikbare poort).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter is beschikbaar als een gehoste service op [**puter.com**](https://puter.com).
<br/>
## Systeemvereisten
- **Besturingssystemen:** Linux, macOS, Windows
- **RAM:** 2GB minimum (4GB aanbevolen)
- **Schijfruimte:** 1GB vrije ruimte
- **Node.js:** Versie 16+ (Versie 22+ aanbevolen)
- **npm:** Laatste stabiele versie
<br/>
## Ondersteuning
Verbind met de onderhouders en de gemeenschap via deze kanalen:
- Bug rapport of functieverzoek? [Open een issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Beveiligingsproblemen? [[email protected]](mailto:[email protected])
- E-mail onderhouders op [[email protected]](mailto:[email protected])
We helpen je graag met al je vragen. Aarzel niet om te vragen!
<br/>
## Licentie
Deze repository, inclusief alle inhoud, subprojecten, modules en componenten, is gelicentieerd onder [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) tenzij expliciet anders vermeld. Bibliotheken van derden die in deze repository zijn opgenomen, kunnen onderworpen zijn aan hun eigen licenties.
<br/>
+148
View File
@@ -0,0 +1,148 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">ଇଣ୍ଟରନେଟ OS! ନିଶୁଳ୍କ, ଖୋଲା-ମୂଳ (Open-Source), ଏବଂ ସ୍ୱୟଂ-ହୋଷ୍ଟ କରିପାରିବା।</h3>
<p align="center">
<a href="https://puter.com/?ref=github.com"><strong>« LIVE ଡେମୋ »</strong></a>
<br />
<br />
<a href="https://puter.com/?ref=github.com">Puter.com</a>
·
<a href="https://apps.puter.com/">App Store</a>
·
<a href="https://developer.puter.com" target="_blank">Developers</a>
·
<a href="https://github.com/heyputer/puter-cli" target="_blank">CLI</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter ହେଉଛି ଗୋଟିଏ ଉନ୍ନତ, ଖୋଲା-ମୂଳ ଇଣ୍ଟରନେଟ ଅପରେଟିଂ ସିଷ୍ଟମ, ଯାହାକି ବିଶେଷତାସମୃଦ୍ଧ, ଶୀଘ୍ର ଏବଂ ଏକ୍ସଟେନ୍ସିବଲ ଭାବେ ଡିଜାଇନ୍ କରାଯାଇଛି। Puter କୁ ନିମ୍ନ ପ୍ରକାରେ ବ୍ୟବହାର କରିପାରିବେ:
- ଗୋଟିଏ ପ୍ରାଇଭେସି-ପ୍ରଥମ (privacy-first) ପର୍ସନାଲ କ୍ଲାଉଡ୍ ଭାବେ — ଯେଉଁଠାରେ ଆପଣଙ୍କ ସମସ୍ତ ଫାଇଲ୍, ଆପ୍ସ ଏବଂ ଗେମ୍ସ ଗୋଟିଏ ସୁରକ୍ଷିତ ସ୍ଥାନରେ ରହିବ, ଯାହାକୁ କେଉଁଠୁ ସମୟରେ ଆକ୍ସେସ୍ କରିପାରିବେ।
- ୱେବସାଇଟ୍, ୱେବ ଆପ୍ସ, ଏବଂ ଗେମ୍ ତିଆରି ଏବଂ ପ୍ରକାଶ ପାଇଁ ଗୋଟିଏ ପ୍ଲାଟଫର୍ମ।
- Dropbox, Google Drive, OneDrive ଇତ୍ୟାଦିଙ୍କ ବିକଳ୍ପ ଭାବେ — ଏକ ସୁନ୍ଦର ଇଣ୍ଟରଫେସ୍ ଏବଂ ଶକ୍ତିଶାଳୀ ବୈଶିଷ୍ଟ ସହିତ।
- ସର୍ଭର ଏବଂ ଓର୍କସ୍ଟେସନ୍ ପାଇଁ ଗୋଟିଏ ରିମୋଟ୍ ଡେସ୍କଟପ୍ ଇନ୍ଭାୟରମେଣ୍ଟ।
- ୱେବ୍ ଡିଭେଲପମେଣ୍ଟ, କ୍ଲାଉଡ୍ କମ୍ପ୍ୟୁଟିଙ୍ଗ, ବିତରିତ ସିଷ୍ଟମ (distributed systems) ଇତ୍ୟାଦି ଶିଖିବା ପାଇଁ ଗୋଟିଏ ସହଜ-ମନୋଭାବୀ ଖୋଲା-ମୂଳ ସମୁଦାୟ।
<br/>
## ପ୍ରାରମ୍ଭ (Getting Started)
### 💻 Local Development
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
**→** ଏହା Puter କୁ ଲଞ୍ଚ କରିବ:
<font color="red"> http://puter.localhost:4100 (ଅଥବା ଅନ୍ୟ ଉପଲବ୍ଧ ପୋର୍ଟ୍) </font>
ଯଦି ଏହା କାମ କରୁନାହିଁ, ତେବେ [First Run Issues](./doc/self-hosters/first-run-issues.md) କୁ ଦେଖନ୍ତୁ।
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
**→** ଏହା Puter କୁ ଲଞ୍ଚ କରିବ:
<font color="red"> http://puter.localhost:4100 (ଅଥବା ଅନ୍ୟ ଉପଲବ୍ଧ ପୋର୍ଟ୍) </font>
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
**→** ଏହା ଉପଲବ୍ଧ ହେବ:
<font color="red"> http://puter.localhost:4100 (ଅଥବା ଅନ୍ୟ ଉପଲବ୍ଧ ପୋର୍ଟ୍) </font>
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
**→** ଏହା Puter କୁ ଲଞ୍ଚ କରିବ:
<font color="red"> http://puter.localhost:4100 (ଅଥବା ଅନ୍ୟ ଉପଲବ୍ଧ ପୋର୍ଟ୍) </font>
<br/>
### 🚀 Self-Hosting
Self-Hosting ପାଇଁ ବିସ୍ତୃତ ଗାଇଡ୍, କନଫିଗୁରେସନ୍ ଅପ୍ସନ୍ ଏବଂ ବେଷ୍ଟ-ପ୍ରାକ୍ଟିସ୍ ପାଇଁ ଏଠାରେ ଯାଆନ୍ତୁ:
[Self-Hosting Documentation](https://github.com/HeyPuter/puter/blob/main/doc/self-hosters/instructions.md)
<br/>
### ☁️ Puter.com
Puter ହୋଷ୍ଟେଡ୍ ସର୍ଭିସ୍ ଭାବେ ଉପଲବ୍ଧ ଅଛି: [**puter.com**](https://puter.com)
<br/>
## ସିଷ୍ଟମ ଆବଶ୍ୟକତା (System Requirements)
- **Operating Systems:** Linux, macOS, Windows
- **RAM:** ଅନ୍ୟୁନ 2GB (ପରାମର୍ଶ 4GB)
- **Disk Space:** 1GB ଖାଲି ସ୍ଥାନ
- **Node.js:** ସଂସ୍କରଣ 20.19.5+ (ପରାମର୍ଶ 23+)
- **npm:** ନବୀନତମ ସ୍ଥିର ସଂସ୍କରଣ
<br/>
## ସହଯୋଗ (Support)
ମେଣ୍ଟେନର୍ ଏବଂ ସମୁଦାୟ ସହିତ ଯୋଡ଼ିବା ପାଇଁ:
- Bug report କିମ୍ବା ନୂଆ feature ବାବଦରେ? [open an issue](https://github.com/HeyPuter/puter/issues/new/choose)
- Discord: https://discord.com/invite/PQcx7Teh8u
- X (Twitter): https://x.com/HeyPuter
- Reddit: https://www.reddit.com/r/puter/
- Mastodon: https://mastodon.social/@puter
- Security issues? [[email protected]](mailto:[email protected])
- Maintain­er Email: [[email protected]](mailto:[email protected])
ଆମେ ସମସ୍ତେ ସହାୟତା ପାଇଁ ସଦା ପ୍ରସ୍ତୁତ।
<br/>
## ଲାଇସେନ୍ସ (License)
ଏହି ରିପୋଜିଟୋରୀ, ସମସ୍ତ ସବ୍-ପ୍ରୋଜେକ୍ଟ, ମୋଡ୍ୟୁଲ୍ ଏବଂ କମ୍ପୋନେଣ୍ଟ ସହିତ **AGPL-3.0** ଲାଇସେନ୍ସ ଅଧୀନରେ ରହିଛି।
ତୃତୀୟ ପକ୍ଷ ଲାଇବ୍ରେରି ନିଜସ୍ୱ ଲାଇସେନ୍ସ ଅଧୀନରେ ଥାଇପାରେ।
<br/>
## ଅନ୍ୟ README ଲିଙ୍କ୍ (Links to Other READMEs)
### Backend
- [PuterAI Module](./src/backend/doc/modules/puterai/README.md)
- [Metering Service](./src/backend/src/services/MeteringService/README.md)
- [Extensions Development Guide](./extensions/README.md)
+182
View File
@@ -0,0 +1,182 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">ਇੰਟਰਨੇਟ ਓਐਸ! ਮੁਫ਼ਤ, ਖੁੱਲ੍ਹੇ ਸਰੋਤ ਵਾਲਾ, ਅਤੇ ਆਪ ਸਵੈ-ਹੋਸਟ ਕਰ ਸਕਦੇ ਹੋ।</h3>
<p align="center">
<a href="https://puter.com/?ref=github.com"><strong>« LIVE DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com/?ref=github.com">Puter.com</a>
·
<a href="https://apps.puter.com/">ਐਪ ਸਟੋਰ</a>
·
<a href="https://developer.puter.com" target="_blank">ਡਿਵੈਲਪਰ</a>
·
<a href="https://github.com/heyputer/puter-cli" target="_blank">CLI</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter ਇੱਕ ਵਿਕਸਤ, ਖੁੱਲ੍ਹਾ-ਸਰੋਤ ਇੰਟਰਨੇਟ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਹੈ ਜੋ ਫੀਚਰ-ਭਰਪੂਰ, ਬਹੁਤ ਤੇਜ਼, ਅਤੇ ਵਧੀਆ ਤਰੀਕੇ ਨਾਲ ਵਧਾਏ ਜਾਣ ਵਾਲਾ ਬਣਾਇਆ ਗਿਆ ਹੈ। Puter ਇਸ ਤਰ੍ਹਾਂ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ:
- ਇੱਕ ਪਰਾਈਵੇਸੀ-ਪਹਿਲਾਂ ਨਿੱਜੀ ਕਲਾਊਡ ਵਜੋਂ ਜਿੱਥੇ ਤੁਹਾਡੀਆਂ ਸਾਰੀਆਂ ਫਾਈਲਾਂ, ਐਪਸ, ਅਤੇ ਗੇਮਜ਼ ਇੱਕ ਸੁਰੱਖਿਅਤ ਜਗ੍ਹਾ 'ਤੇ, ਕਿਸੇ ਵੀ ਸਮੇਂ-ਕਿਤੇ ਵੀ ਤੋਂ ਪਹੁੰਚਯੋਗ।
- ਵੈਬਸਾਈਟਾਂ, ਵੈਬ ਐਪਸ, ਅਤੇ ਗੇਮ ਬਣਾਉਣ ਅਤੇ ਪ੍ਰਕਾਸ਼ਿਤ ਕਰਨ ਲਈ ਇੱਕ ਪਲੇਟਫਾਰਮ।
- Dropbox, Google Drive, OneDrive ਆਦਿ ਦਾ ਇੱਕ ਆਧੁਨਿਕ ਵਿਕਲਪ, ਨਵੀਂ ਇੰਟਰਫੇਸ ਅਤੇ ਸ਼ਕਤੀਸ਼ਾਲੀ ਫੀਚਰਾਂ ਨਾਲ।
- ਸਰਵਰਾਂ ਅਤੇ ਵਰਕਸਟੇਸ਼ਨਾਂ ਲਈ ਰਿਮੋਟ ਡੈਸਕਟਾਪ Environment।
- ਵੈਬ ਡਿਵੈਲਪਮੈਂਟ, ਕਲਾਊਡ ਕੰਪਿਊਟਿੰਗ, ਡਿਸਟ੍ਰੀਬਿਊਟਡ ਸਿਸਟਮ ਅਤੇ ਹੋਰ ਬਹੁਤ ਕੁਝ ਸਿੱਖਣ ਲਈ ਇੱਕ ਮਿੱਤਰਤਾਪੂ, ਖੁੱਲ੍ਹੇ-ਸਰੋਤ ਵਾਲਾ ਪ੍ਰੋਜੈਕਟ ਅਤੇ ਸਮੂਹ!
<br/>
## Getting Started
### 💻 Local Development
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
**→** ਇਹ Puter ਨੂੰ ਇਸ ਪਤੇ 'ਤੇ ਚਲਾਉਣਾ ਚਾਹੀਦਾ ਹੈ
<font color="red"> http://puter.localhost:4100 (ਜਾਂ ਅਗਲਾ ਉਪਲਬਧ ਪੋਰਟ). </font>
ਜੇ ਇਹ ਕੰਮ ਨਹੀਂ ਕਰਦਾ, ਤਾੰ [First Run Issues](./doc/self-hosters/first-run-issues.md) ਵੇਖੋ
ਟ੍ਰਬਲਸ਼ੂਟਿੰਗ ਲਈ।
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
**→** ਇਹ Puter ਨੂੰ ਇਸ ਪਤੇ 'ਤੇ ਚਲਾਉਣਾ ਚਾਹੀਦਾ ਹੈ
<font color="red"> http://puter.localhost:4100 (ਜਾਂ ਅਗਲਾ ਉਪਲਬਧ ਪੋਰਟ). </font>
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
**→** ਇਹ ਇਸ ਪਤੇ 'ਤੇ ਉਪਲਬਧ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ
<font color="red"> http://puter.localhost:4100 (ਜਾਂ ਅਗਲਾ ਉਪਲਬਧ ਪੋਰਟ). </font>
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
**→** ਇਹ Puter ਨੂੰ ਇਸ ਪਤੇ 'ਤੇ ਚਲਾਉਣਾ ਚਾਹੀਦਾ ਹੈ
<font color="red"> http://puter.localhost:4100 (ਜਾਂ ਅਗਲਾ ਉਪਲਬਧ ਪੋਰਟ). </font>
<br/>
### 🚀 Self-Hosting
Puter ਨੂੰ ਖੁਦ ਹੋਸਟ ਕਰਨ ਲਈ, ਕਨਫਿਗੁਰੇਸ਼ਨ ਵਿਕਲਪ ਅਤੇ ਬਿਹਤਰੀਨ ਕਾਇਦੇ, ਸਾਰੇ ਵਿਸਥਾਰ ਲਈ ਸਾਡੇ [Self-Hosting Documentation](https://github.com/HeyPuter/puter/blob/main/doc/self-hosters/instructions.md) ਵੇਖੋ।
<br/>
### ☁️ Puter.com
Puter [**puter.com**](https://puter.com) 'ਤੇ ਇੱਕ ਹੋਸਟ ਕੀਤੀ ਸੇਵਾ ਵਜੋਂ ਉਪਲਬਧ ਹੈ।
<br/>
## System Requirements
- **Operating Systems:** Linux, macOS, Windows
- **RAM:** ਘੱਟੋ-ਘੱਟ 2GB (4GB ਸਿਫ਼ਾਰਸ਼ੀ)
- **Disk Space:** 1GB ਖਾਲੀ ਜਗ੍ਹਾ
- **Node.js:** Version 24+
- **npm:** ਨਵੀਨਤਮ ਸਥਿਰ ਵਰਜਨ
<br/>
## Support
ਮੈਂਟੇਨਰਾਂ ਅਤੇ ਕਮਿਊਨਿਟੀ ਨਾਲ ਇੱਥੇ ਸੰਪਰਕ ਕਰੋ:
- ਬੱਗ ਜਾਂ ਫੀਚਰ ਰਿਕਵੇਸਟ? ਕਿਰਪਾ ਕਰਕੇ [issue ਖੋਲ੍ਹੋ](https://github.com/HeyPuter/puter/issues/new/choose)।
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- ਸੁਰੱਖਿਆ ਮਸਲੇ? [[email protected]](mailto:[email protected])
- ਮੇਂਟੇਨਰਾਂ ਨੂੰ ਈਮੇਲ ਕਰੋ [[email protected]](mailto:[email protected])
ਅਸੀਂ ਹਮੇਸ਼ਾ ਤੁਹਾਡੀਆਂ ਕਿਸੇ ਵੀ ਪ੍ਰਸ਼ਨਾਂ ਵਿੱਚ ਮਦਦ ਕਰਨ ਲਈ ਤਿਆਰ ਹਾਂ। ਬੇਝਿਝਕ ਪੁੱਛੋ!
<br/>
## License
ਇਹ ਰਿਪੋਜ਼ਟਰੀ, ਆਪਣੇ ਸਾਰੇ ਸਮੱਗਰੀ, ਸਬ-ਪ੍ਰੋਜੈਕਟ, ਮੋਡੀਊਲ, ਅਤੇ ਕੰਪੋਨੈਂਟ ਸਮੇਤ, [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) ਅਧੀਨ ਲਾਇਸੈਂਸਡ ਹੈ ਜੇ ਤਕ ਹੋਰ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਨਹੀਂ ਕਿਹਾ ਗਿਆ। ਤੀਜੀ ਪੱਖ ਦੀਆਂ ਲਾਇਬ੍ਰੇਰੀਆਂ ਆਪਣੇ ਲਾਇਸੈਂਸਾਂ ਅਨੁਸਾਰ ਹੋ ਸਕਦੀਆਂ ਹਨ।
<br/>
## Translations
- [Arabic / العربية](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ar.md)
- [Armenian / Հայերեն](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hy.md)
- [Bengali / বাংলা](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.bn.md)
- [Chinese / 中文](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.zh.md)
- [Danish / Dansk](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.da.md)
- [English](https://github.com/HeyPuter/puter/blob/main/README.md)
- [Farsi / فارسی](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fa.md)
- [Finnish / Suomi](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fi.md)
- [French / Français](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fr.md)
- [German / Deutsch](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.de.md)
- [Hebrew/ עברית](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.he.md)
- [Hindi / हिंदी](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hi.md)
- [Hungarian / Magyar](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hu.md)
- [Indonesian / Bahasa Indonesia](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.id.md)
- [Italian / Italiano](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.it.md)
- [Japanese / 日本語](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.jp.md)
- [Korean / 한국어](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ko.md)
- [Malay / Bahasa Malaysia](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.my.md)
- [Malayalam / മലയാളം](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ml.md)
- [Punjabi / ਪੰਜਾਬੀ](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pa.md)
- [Polish / Polski](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pl.md)
- [Portuguese / Português](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pt.md)
- [Romanian / Română](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ro.md)
- [Russian / Русский](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ru.md)
- [Spanish / Español](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.es.md)
- [Swedish / Svenska](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.sv.md)
- [Tamil / தமிழ்](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ta.md)
- [Telugu / తెలుగు](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.te.md)
- [Thai / ไทย](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.th.md)
- [Turkish / Türkçe](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.tr.md)
- [Ukrainian / Українська](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ua.md)
- [Urdu / اردو](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ur.md)
- [Vietnamese / Tiếng Việt](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.vi.md)
## Links to Other READMEs
### Backend
- [PuterAI Module](./src/backend/doc/modules/puterai/README.md)
- [Metering Service](./src/backend/src/services/MeteringService/README.md)
- [Extensions Development Guide](./extensions/README.md)
+119
View File
@@ -0,0 +1,119 @@
<h3 align="center"><img width="80" alt="Puter.com, Osobisty Komputer Chmurowy: Wszystkie twoje pliki, aplikacje i gry w jednym miejscu, dostępne z dowolnego miejsca o dowolnej porze." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center"> System Operacyjny Internet! Darmowy, Open-Source i Możliwy do Samodzielnego Hostowania.</h3>
<p align="center">
<img alt="Rozmiar repozytorium GitHub" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="Wydanie GitHub" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="Licencja GitHub" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« DEMO NA ŻYWO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="zrzut ekranu" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter to zaawansowany, open-source'owy internetowy system operacyjny, zaprojektowany tak, aby był bogaty w funkcje, wyjątkowo szybki i wysoce rozszerzalny. Puter może być używany jako:
- Prywatna chmura osobista do przechowywania wszystkich plików, aplikacji i gier w jednym bezpiecznym miejscu, dostępnym z dowolnego miejsca o dowolnej porze.
- Platforma do budowania i publikowania stron internetowych, aplikacji webowych i gier.
- Alternatywa dla Dropbox, Google Drive, OneDrive itp. ze świeżym interfejsem i potężnymi funkcjami.
- Zdalne środowisko pulpitu dla serwerów i stacji roboczych.
- Przyjazny, open-source'owy projekt i społeczność do nauki o tworzeniu stron internetowych, chmurze obliczeniowej, systemach rozproszonych i wielu innych!
<br/>
## Rozpoczęcie pracy
## 💻 Lokalne środowisko developerskie
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
To uruchomi Puter na http://puter.localhost:4100 (lub na następnym dostępnym porcie).
<br/>
## 🐳 Docker
```bash
Copy code
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
## 🐙 Docker Compose
## Linux/macOS
```bash
Copy code
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
## Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
## ☁️ Puter.com
Puter jest dostępny jako usługa hostowana na [**puter.com**](https://puter.com).
<br/>
## Wymagania systemowe
- **Systemy operacyjne:** Linux, macOS, Windows
- **RAM:** Minimum 2GB (zalecane 4GB)
- **Przestrzeń dyskowa:** 1GB wolnego miejsca
- **Node.js:** Wersja 16+ (zalecana wersja 22+)
- **npm:** Najnowsza stabilna wersja
<br/>
## Wsparcie
Skontaktuj się z opiekunami i społecznością przez te kanały:
- Raport o błędzie lub prośba o funkcję? Proszę otworzyć zgłoszenie.
- Discord: discord.com/invite/PQcx7Teh8u
- X (Twitter): x.com/HeyPuter
- Reddit: reddit.com/r/puter/
- Mastodon: mastodon.social/@puter
- Problemy z bezpieczeństwem? security@puter.com
- Email do opiekunów: hi@puter.com
Zawsze chętnie pomożemy Ci z wszelkimi pytaniami, jakie możesz mieć. Nie wahaj się pytać!
<br/>
## Licencja
To repozytorium, w tym cała jego zawartość, podprojekty, moduły i komponenty, jest licencjonowane na podstawie [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), chyba że wyraźnie zaznaczono inaczej. Biblioteki stron trzecich zawarte w tym repozytorium mogą podlegać własnym licencjom.
<br/>
+173
View File
@@ -0,0 +1,173 @@
<h3 align="center"><img width="80" alt="Puter.com, O Computador Pessoal em Nuvem: Todos os seus arquivos, aplicativos e jogos em um único lugar, acessíveis de qualquer lugar e a qualquer hora." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">O Sistema Operacional da Internet! Gratuito, de Código Aberto e Auto-Hospedável.</h3>
<p align="center">
<a href="https://puter.com/"><strong>« DEMONSTRAÇÃO AO VIVO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://apps.puter.com/">App Store</a>
·
<a href="https://developer.puter.com" target="_blank">Developers</a>
·
<a href="https://github.com/heyputer/puter-cli" target="_blank">CLI</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://x.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter é um sistema operacional de internet avançado e de código aberto, projetado para ser rico em recursos, excepcionalmente rápido e altamente extensível. Puter pode ser usado como:
- Um serviço de nuvem pessoal com foco na privacidade para manter todos os seus arquivos, aplicativos e jogos em um local seguro, acessível de qualquer lugar e a qualquer hora.
- Uma plataforma para construir e publicar websites, aplicativos web e jogos.
- Uma alternativa ao Dropbox, Google Drive, OneDrive, etc., com uma interface renovada e recursos poderosos.
- Um ambiente de desktop remoto para servidores e estações de trabalho.
- Um projeto e comunidade de código aberto e amigável para aprender sobre desenvolvimento web, computação em nuvem, sistemas distribuídos e muito mais!
<br/>
## Iniciando o Projeto
### 💻 Desenvolvimento Local
```
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
✨ Isso iniciará o Puter em http://puter.localhost:4100 (ou na próxima porta disponível).
Se isso não funcionar, consulte [First Run Issues](./doc/self-hosters/first-run-issues.md) para solucionar os problemas.
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
✨ Isso iniciará o Puter em http://puter.localhost:4100 (ou na próxima porta disponível).
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
✨ Isso iniciará o Puter em http://puter.localhost:4100 (ou na próxima porta disponível).
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
✨ Isso iniciará o Puter em http://puter.localhost:4100 (ou na próxima porta disponível).
<br/>
### 🚀 Auto-Hospedagem
Para guia detalhados sobre como auto-hospedar o Puter, incluindo opções de configuração e melhores práticas, consulte nossa [Documentação de Auto-Hospedagem](https://github.com/HeyPuter/puter/blob/main/doc/self-hosters/instructions.md).
### ☁️ Puter.com
O Puter está disponível como um serviço hospedado em [**puter.com**](https://puter.com).
<br/>
## Requerimentos do sistema
- **Sistema operacional:** Linux, macOS, Windows
- **RAM:** 2GB mínimo (4GB recomendado)
- **Espaço de disco:** 1GB de espaço disponível
- **Node.js:** Versão 16+ (Versão 23+ recomendada)
- **npm:** Última versão estável
<br/>
## Suporte
Conecte-se com os mantenedores e a comunidade através destes canais:
- Relato de bug ou solicitação de recurso? Por favor, [abra um tópico](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Problemas de segurança? [[email protected]](mailto:[email protected])
- Envie um email para os mantenedores em [[email protected]](mailto:[email protected])
Estamos sempre felizes em ajudá-lo com quaisquer perguntas que você possa ter. Não hesite em perguntar!
<br/>
## Licença
Este repositório, incluindo todos os seus conteúdos, subprojetos, módulos e componentes, está licenciado sob [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) a menos que explicitamente indicado de outra forma. Bibliotecas de terceiros incluídas neste repositório podem estar sujeitas às suas próprias licenças.
<br/>
## Traduções
- [Arabic / العربية](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ar.md)
- [Armenian / Հայերեն](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hy.md)
- [Bengali / বাংলা](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.bn.md)
- [Chinese / 中文](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.zh.md)
- [Danish / Dansk](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.da.md)
- [English](https://github.com/HeyPuter/puter/blob/main/README.md)
- [Farsi / فارسی](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fa.md)
- [Finnish / Suomi](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fi.md)
- [French / Français](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fr.md)
- [German/ Deutsch](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.de.md)
- [Hebrew/ עברית](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.he.md)
- [Hindi / हिंदी](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hi.md)
- [Hungarian / Magyar](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hu.md)
- [Indonesian / Bahasa Indonesia](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.id.md)
- [Italian / Italiano](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.it.md)
- [Japanese / 日本語](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.jp.md)
- [Korean / 한국어](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ko.md)
- [Malayalam / മലയാളം](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ml.md)
- [Polish / Polski](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pl.md)
- [Portuguese / Português](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pt.md)
- [Romanian / Română](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ro.md)
- [Russian / Русский](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ru.md)
- [Spanish / Español](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.es.md)
- [Swedish / Svenska](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.sv.md)
- [Tamil / தமிழ்](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ta.md)
- [Telugu / తెలుగు](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.te.md)
- [Thai / ไทย](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.th.md)
- [Turkish / Türkçe](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.tr.md)
- [Ukrainian / Українська](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ua.md)
- [Urdu / اردو](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ur.md)
- [Vietnamese / Tiếng Việt](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.vi.md)
+129
View File
@@ -0,0 +1,129 @@
<h3 align="center"><img width="80" alt="Puter.com, calculatorul personal în cloud: toate fișierele, aplicațiile și jocurile tale într-un singur loc, accesibile de oriunde și oricând." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Sistemul de operare al internetului! Gratuit, open-source și găzduibil autonom.</h3>
<p align="center">
<img alt="Dimensiunea repoului GitHub" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="Versiunea de pe GitHub" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=ultima%20versiune"> <img alt="Licență GitHub" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« DEMO LIVE »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://www.youtube.com/@EricsPuterVideos">YouTube</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
·
<a href="https://hackerone.com/puter_h1b">Program de recompense pentru identificarea bugurilor</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="captură de ecran" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter este un sistem de operare pe internet, avansat, open-source, conceput să fie bogat în funcționalități, excepțional de rapid și foarte extensibil. Puter poate fi folosit ca:
* Un cloud personal cu accent pe confidențialitate, pentru a-ți păstra toate fișierele, aplicațiile și jocurile într-un singur loc securizat, accesibil de oriunde și oricând.
* O platformă pentru a construi și publica site-uri, aplicații web și jocuri.
* O alternativă la Dropbox, Google Drive, OneDrive etc., cu o interfață nouă și funcționalități puternice.
* Un mediu desktop la distanță pentru servere și stații de lucru.
* Un proiect și o comunitate, open-source și prietenoase, pentru a învăța despre dezvoltare web, cloud computing, sisteme distribuite și multe altele!
<br/>
## Fă primii pași
### 💻 Dezvoltare locală
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Aceasta va porni Puter la [http://puter.localhost:4100](http://puter.localhost:4100) (sau pe următorul port disponibil).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter este disponibil ca serviciu găzduit la adresa [**puter.com**](https://puter.com).
<br/>
## Cerințe de sistem
* **Sisteme de operare:** Linux, macOS, Windows
* **RAM:** minimum 2GB (recomandat 4GB)
* **Spațiu pe disc:** 1GB spațiu liber
* **Node.js:** versiunea 16+ (versiunea 22+ recomandată)
* **npm:** ultima versiune stabilă
<br/>
## Suport
Ia legătura cu cei care asigură mentenanța proiectului și cu comunitatea prin aceste canale:
* Vrei să raportezi un bug sau să ceri o funcționalitate? Te rugăm să [deschizi o problemă](https://github.com/HeyPuter/puter/issues/new/choose).
* Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
* X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
* Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
* Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
* Probleme de securitate? [[email protected]](mailto:[email protected])
* Trimite un e-mail celor care asigură mentenanța proiectului la [[email protected]](mailto:[email protected])
Suntem întotdeauna bucuroși să te ajutăm cu orice întrebări ai. Nu ezita să ne pui întrebări!
<br/>
## Licență
Acest repository, inclusiv tot conținutul său, subproiectele, modulele și componentele, este licențiat sub [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), cu excepția cazurilor în care se menționează explicit altfel. Bibliotecile terțe incluse în acest repository pot fi supuse propriilor lor licențe.
<br/>
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, персональный облачный компьютер: все ваши файлы, приложения и игры в одном месте, доступные из любой точки мира в любое время." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Интернет ОС! Бесплатная, с открытым исходным кодом и возможностью самостоятельной установки.</h3>
<p align="center">
<img alt="Размер репозитория GitHub" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="Релиз GitHub" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="Лицензия GitHub" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« ЖИВОЕ ДЕМО »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter — это передовая операционная система с открытым исходным кодом, разработанная для обеспечения широкого функционала, исключительной скорости и высокой масштабируемости. Puter можно использовать как:
- Персональное облако с приоритетом конфиденциальности для хранения всех ваших файлов, приложений и игр в одном безопасном месте, доступном из любой точки мира в любое время.
- Платформа для создания и публикации веб-сайтов, веб-приложений и игр.
- Альтернатива Dropbox, Google Drive, OneDrive и т. д. с новым интерфейсом и мощными функциями.
- Удаленное рабочее окружение для серверов и рабочих станций.
- Дружественный проект с открытым исходным кодом и сообщество для изучения веб-разработки, облачных вычислений, распределенных систем и многого другого!
<br/>
## Начало работы
### 💻 Локальная разработка
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Это запустит Puter по адресу http://puter.localhost:4100 (или на следующем доступном порту).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter доступен как облачный сервис на [**puter.com**](https://puter.com).
<br/>
## Системные требования
- **Операционные системы:** Linux, macOS, Windows
- **ОЗУ:** минимум 2 ГБ (рекомендуется 4 ГБ)
- **Место на диске:** 1 ГБ свободного места
- **Node.js:** Версия 16+ (рекомендуется версия 22+)
- **npm:** Последняя стабильная версия
<br/>
## Поддержка
Свяжитесь с разработчиками и сообществом этими способами:
- Отчет об ошибке или запрос функции? Пожалуйста, [откройте вопрос](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Проблемы безопасности? [[email protected]](mailto:[email protected])
- Свяжитесь с разработчиками по адресу [[email protected]](mailto:[email protected])
Мы всегда рады помочь вам с любыми вопросами. Не стесняйтесь спрашивать!
<br/>
## Лицензия
Этот репозиторий, включая все его содержимое, подпроекты, модули и компоненты, лицензирован в соответствии с [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), если явно не указано иное. Сторонние библиотеки, включенные в этот репозиторий, могут подпадать под действие их собственных лицензий.
<br/>
+125
View File
@@ -0,0 +1,125 @@
<h3 align="center"><img width="80" alt="Puter.com, Den personliga molndatorn: Alla dina filer, appar och spel på ett ställe tillgängliga var som helst när som helst." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Internet OS! Gratis, öppen källkod och självhostad.</h3>
<p align="center">
<img alt="GitHub repo storlek" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Utgåva" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=senaste%20versionen"> <img alt="GitHub Licens" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« LIVE DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="skärmdump" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter är ett avancerat, öppen källkod internetoperativsystem designat för att vara funktionsrikt, exceptionellt snabbt och mycket utbyggbart. Puter kan användas som:
- Ett integritetsfokuserat personligt moln för att hålla alla dina filer, appar och spel på ett säkert ställe, tillgängligt var som helst när som helst.
- En plattform för att bygga och publicera webbplatser, webbappar och spel.
- Ett alternativ till Dropbox, Google Drive, OneDrive, etc. med ett fräscht gränssnitt och kraftfulla funktioner.
- En fjärrskrivbordsmiljö för servrar och arbetsstationer.
- Ett vänligt, öppen källkod-projekt och gemenskap för att lära sig om webbutveckling, molndatorer, distribuerade system och mycket mer!
<br/>
## Komma igång
### 💻 Lokal Utveckling
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Detta kommer att starta Puter på http://puter.localhost:4100 (eller nästa lediga port).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter är tillgängligt som en värdtjänst på [**puter.com**](https://puter.com).
<br/>
## Systemkrav
- **Operating Systems:** Linux, macOS, Windows
- **RAM:** 2GB minimum (4GB recommended)
- **Disk Space:** 1GB free space
- **Node.js:** Version 16+ (Version 22+ recommended)
- **npm:** Latest stable version
<br/>
## Support
Anslut med underhållarna och gemenskapen genom dessa kanaler:
- Buggrapport eller funktionsförfrågan? Vänligen [öppna ett ärende](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Säkerhetsproblem? [[email protected]](mailto:[email protected])
- E-posta underhållarna på [[email protected]](mailto:[email protected])
Vi hjälper dig gärna med eventuella frågor du kan ha. Tveka inte att fråga!
<br/>
## Licens
Detta arkiv, inklusive allt dess innehåll, delprojekt, moduler och komponenter, är licensierat under [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) om inte annat uttryckligen anges. Tredjepartsbibliotek som ingår i detta arkiv kan vara föremål för sina egna licenser.
<br/>
+123
View File
@@ -0,0 +1,123 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: உங்கள் கோப்புகள், ஆப்ஸ் மற்றும் கேம்கள் அனைத்தும் ஒரே இடத்தில் எங்கிருந்தும் எந்த நேரத்திலும் அணுகலாம்." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">இன்டர்நெட் OS! இலவசம், ஓப்பன் சோர்ஸ் மற்றும் Self-Hostable</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub உரிமம்" src="https://img.shields.io/github/license/HeyPuter/puter" >
</p>
<p align="center">
<a href="https://puter.com/"><strong>« லைவ் டெமோ »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## புட்டர் (Putter)
புட்டர்(putter) என்பது ஒரு மேம்பட்ட, திறந்த மூல இலவசமாக இணைய இயக்க முறைமையாகும், இது அம்சம் நிறைந்ததாகவும், விதிவிலக்காக வேகமாகவும், அதிக விரிவாக்கக்கூடியதாகவும் வடிவமைக்கப்பட்டுள்ளது. புட்டரை இவ்வாறு பயன்படுத்தலாம்:
- உங்கள் கோப்புகள், பயன்பாடுகள் மற்றும் கேம்கள் அனைத்தையும் ஒரே பாதுகாப்பான இடத்தில் வைத்திருக்க, எந்த நேரத்திலும் எங்கிருந்தும் அணுகக்கூடிய தனியுரிமை-முதல் தனிப்பட்ட கிளவுட்.
- இணையதளங்கள், இணைய பயன்பாடுகள் மற்றும் கேம்களை உருவாக்கி வெளியிடுவதற்கான தளம் இதுவாகும்.
- புதிய இடைமுகம் மற்றும் சக்திவாய்ந்த அம்சங்களுடன் Dropbox, Google Drive, OneDrive போன்றவற்றுக்கு மாற்றீடாக உபயோகிக்க கூடியது.
- சர்வர்கள் மற்றும் பணிநிலையங்களுக்கான தொலைநிலை டெஸ்க்டாப்(desktop) சூழல்.
- வலை மேம்பாடு, கிளவுட் கம்ப்யூட்டிங், விநியோகிக்கப்பட்ட அமைப்புகள் மற்றும் பலவற்றைப் பற்றி அறிந்து ஒரு நட்பு ரீதியான, திறந்த மூல திட்டம் மற்றும் சமூக அறிவியலில் சார்ந்த ஒன்று.
<br/>
## தொடங்குதல்
### 💻 உள்ளூர் வளர்ச்சி
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
``` தொடக்கம்
```
இது புட்டரை <http://puter.localhost:4100> இல் தொடங்கும் (அல்லது அடுத்து கிடைக்கும் இடம்).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 டோக்கர் கம்போஸ்
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
புட்டர் ஹோஸ்ட் செய்யப்பட்ட சேவையாக [**puter.com**](https://puter.com) இல் கிடைக்கிறது.
<br/>
## கணினி தேவைகள்
- **இயக்க முறைமைகள்:** Linux, macOS, Windows
- **ரேம்:** குறைந்தபட்சம் 2 ஜிபி (4 ஜிபி பரிந்துரைக்கப்படுகிறது)
- **வட்டு இடம்:** 1GB இலவச இடம்
- **Node.js:** Version 16+ (Version 22+ recommended)
- **npm:** சமீபத்திய நிலையான பதிப்பு(Latest stable version)
<br/>
## ஆதரவு
இந்த சேனல்கள் மூலம் பராமரிப்பாளர்கள் மற்றும் சமூகத்துடன் சமூக இணைப்பாளர்:
- பிழை அறிக்கை அல்லது மாற்றுதல் கோரிக்கை? தயவுசெய்து [சிக்கலைத் திறக்கவும்](https://github.com/HeyPuter/puter/issues/new/choose).
- கருத்து வேறுபாடு: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- பாதுகாப்பு பிரச்சினைகள்? [[email protected]](mailto:[email protected])
- மின்னஞ்சல் பராமரிப்பாளர்களுக்கு [[email protected]](mailto:[email protected])
உங்களுக்கு ஏதேனும் கேள்விகள் இருந்தால் உங்களுக்கு உதவ நாங்கள் எப்போதும் மகிழ்ச்சியடைகிறோம். தயங்காமல் கேளுங்கள்!
<br/>
## உரிமம்
இந்தக் களஞ்சியமானது, அதன் அனைத்து உள்ளடக்கங்கள், துணைத் திட்டங்கள், தொகுதிகள் மற்றும் கூறுகள் உட்பட, வெளிப்படையாகக் கூறப்படாவிட்டால், [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) இன் கீழ் உரிமம் பெற்றுள்ளது. . இந்தக் களஞ்சியத்தில் சேர்க்கப்பட்டுள்ள மூன்றாம் தரப்பு நூலகங்கள் அவற்றின் சொந்த உரிமங்களுக்கு உட்பட்டதாக இருக்கும்.
<br/>
+161
View File
@@ -0,0 +1,161 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: మీ అన్ని ఫైల్‌లు, యాప్‌లు మరియు గేమ్‌లను ఒకే స్థలంలో ఎక్కడి నుండైనా ఎప్పుడైనా యాక్సెస్ చేయవచ్చు." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center"> ఇంటర్నెట్ OS! ఉచిత, ఓపెన్ సోర్స్, and Self-Hostable.</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« ప్రత్యక్ష ప్రదర్శన »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## పుటర్ (Puter)
పుటర్ అనేది అధునాతన, ఓపెన్ సోర్స్ ఇంటర్నెట్ ఆపరేటింగ్ సిస్టమ్, ఇది ఫీచర్-రిచ్, అనూహ్యంగా వేగవంతమైన మరియు అత్యంత విస్తరించదగినదిగా రూపొందించబడింది. పుటర్‌ను ఇలా ఉపయోగించవచ్చు:
- మీ అన్ని ఫైల్‌లు, యాప్‌లు మరియు గేమ్‌లను ఒకే సురక్షిత స్థలంలో ఉంచడానికి గోప్యత-మొదటి వ్యక్తిగత క్లౌడ్, ఎప్పుడైనా ఎక్కడి నుండైనా యాక్సెస్ చేయవచ్చు.
- వెబ్‌సైట్‌లు, వెబ్ యాప్‌లు మరియు గేమ్‌లను రూపొందించడానికి మరియు ప్రచురించడానికి ఒక వేదిక.
- తాజా ఇంటర్‌ఫేస్ మరియు శక్తివంతమైన ఫీచర్‌లతో Dropbox, Google Drive, OneDrive మొదలైన వాటికి ప్రత్యామ్నాయం.
- సర్వర్లు మరియు వర్క్‌స్టేషన్‌ల కోసం రిమోట్ డెస్క్‌టాప్ వాతావరణం.
- వెబ్ డెవలప్‌మెంట్, క్లౌడ్ కంప్యూటింగ్, డిస్ట్రిబ్యూట్ సిస్టమ్‌లు మరియు మరిన్నింటి గురించి తెలుసుకోవడానికి స్నేహపూర్వక, ఓపెన్ సోర్స్ ప్రాజెక్ట్ మరియు కమ్యూనిటీ!
<br/>
## ప్రారంభించడం
### లోకల్ డెవలప్మెంట్
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
ఇది http://puter.localhost:4100 (లేదా తదుపరి అందుబాటులో ఉన్న పోర్ట్) వద్ద పుటర్‌ని ప్రారంభిస్తుంది.
ఇది పని చేయకపోతే, దీని కోసం [మొదటి రన్ సమస్యలు](./doc/first-run-issues.md) చూడండి
ట్రబుల్షూటింగ్ దశలు.
<br/>
### 🐳 డోకర్
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 డోకర్ Compose
#### లినక్స్/ macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### విండోస్
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
పుటర్ [**puter.com**](https://puter.com)లో హోస్ట్ చేయబడి ఉంది.
<br/>
## System Requirements
- **ఆపరేటింగ్ సిస్టమ్స్:** లినక్స్, macOS, విండోస్
- **RAM:** 2GB కనీసం(4GB recommended)
- **Disk Space:** 1GB ఖాళీ
- **Node.js:** Version 16+ (Version 22+ recommended)
- **npm:** Latest stable version
<br/>
## Support
ఈ ఛానెల్‌ల ద్వారా నిర్వాహకులు మరియు సంఘంతో కనెక్ట్ అవ్వండి:
- బగ్ నివేదిక లేదా ఫీచర్ అభ్యర్థన? దయచేసి [open an issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Security issues? [[email protected]](mailto:[email protected])
- Email maintainers at [[email protected]](mailto:[email protected])
మీకు ఏవైనా సందేహాలు ఉంటే మీకు సహాయం చేయడానికి మేము ఎల్లప్పుడూ సంతోషిస్తాము. అడగడానికి సంకోచించకండి!
<br/>
## లైసెన్సు
ఈ రిపోజిటరీ, దాని మొత్తం కంటెంట్‌లు, ఉప-ప్రాజెక్ట్‌లు, మాడ్యూల్స్ మరియు కాంపోనెంట్‌లతో సహా, [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) కింద లైసెన్స్‌ని కలిగి ఉంటుంది. . ఈ రిపోజిటరీలో చేర్చబడిన థర్డ్-పార్టీ లైబ్రరీలు వాటి స్వంత లైసెన్స్‌లకు లోబడి ఉండవచ్చు.
<br/>
## అనువాదాలు
- [Arabic / العربية](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ar.md)
- [Armenian / Հայերեն](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hy.md)
- [Bengali / বাংলা](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.bn.md)
- [Chinese / 中文](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.zh.md)
- [Danish / Dansk](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.da.md)
- [English](https://github.com/HeyPuter/puter/blob/main/README.md)
- [Farsi / فارسی](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fa.md)
- [Finnish / Suomi](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fi.md)
- [French / Français](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.fr.md)
- [German/ Deutsch](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.de.md)
- [Hebrew/ עברית](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.he.md)
- [Hindi / हिंदी](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hi.md)
- [Hungarian / Magyar](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.hu.md)
- [Indonesian / Bahasa Indonesia](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.id.md)
- [Italian / Italiano](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.it.md)
- [Japanese / 日本語](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.jp.md)
- [Korean / 한국어](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ko.md)
- [Malayalam / മലയാളം](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ml.md)
- [Polish / Polski](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pl.md)
- [Portuguese / Português](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.pt.md)
- [Romanian / Română](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ro.md)
- [Russian / Русский](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ru.md)
- [Spanish / Español](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.es.md)
- [Swedish / Svenska](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.sv.md)
- [Tamil / தமிழ்](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ta.md)
- [Telugu / తెలుగు](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.te.md)
- [Thai / ไทย](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.th.md)
- [Turkish / Türkçe](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.tr.md)
- [Ukrainian / Українська](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ua.md)
- [Urdu / اردو](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.ur.md)
- [Vietnamese / Tiếng Việt](https://github.com/HeyPuter/puter/blob/main/doc/i18n/README.vi.md)
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">ระบบปฏิบัติการอินเทอร์เน็ต ฟรี, โอเพ่นซอร์ส, และสามารถโฮสต์ได้ด้วยตนเอง</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« การสาธิตสด »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">ชุดพัฒนาโปรแกรม</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">ดิสคอร์ด</a>
·
<a href="https://reddit.com/r/puter">เรดดิท</a>
·
<a href="https://twitter.com/HeyPuter">X (ทวิตเตอร์)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## พิวเตอร์
พิวเตอร์ เป็นระบบปฏิบัติการอินเทอร์เน็ตขั้นสูงแบบโอเพ่นซอร์สที่ออกแบบมาให้มีฟีเจอร์ครบถ้วน ความเร็วสูง และมีความสามารถที่จะขยายได้สูง. พิวเตอร์ สามารถใช้ได้เป็น:
- คลาวด์ส่วนตัว เพื่อเก็บไฟล์, แอพพลิเคชัน, และเกมทั้งหมดของคุณในที่เดียวที่ปลอดภัยและสามารถเข้าถึงได้ทุกที่ทุกเวลา
- แพลตฟอร์มสำหรับการสร้างและเผยแพร่เว็บไซต์, เว็บแอปพลิเคชัน, และเกม
- ทางเลือกอีกหนึ่งทางที่สามารถใช้แทน Dropbox, Google Drive, OneDrive ฯลฯ โดยที่มีอินเทอร์เฟซใหม่และฟีเจอร์ที่ทรงพลัง
- สภาพแวดล้อมสำหรับเดสก์ท็อประยะไกลที่ใช้กับเซิร์ฟเวอร์และสถานีทำงาน
- โครงการโอเพ่นซอร์สและชุมชนที่เป็นมิตรที่คุณสามารถเรียนรู้เกี่ยวกับการพัฒนาเว็บ, คลาวด์คอมพิวติ้ง, ระบบกระจาย, และอีกมากมาย
<br/>
## การเริ่มต้นใช้งาน
### 💻 การพัฒนาภายในเครื่อง
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
พิวเตอร์ จะถูกเปิดใช้งานที่ http://puter.localhost:4100 (หรือพอร์ตถัดไปที่ว่าง).
<br/>
### 🐳 ด็อกเกอร์
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 ด็อกเกอร์ คอมโพส
#### ลินุกซ์/แมคโอเอส
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### วินโดวส์
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
สามารถใช้งาน พิวเตอร์ ได้ในรูปแบบบริการโฮสต์ที่ [**puter.com**](https://puter.com).
<br/>
## ข้อกำหนดของระบบ
- **ระบบปฏิบัติการ:** ลินุกซ์ แมคโอเอส วินโดวส์
- **แรม:** อย่างน้อย 2GB (แนะนำ 4GB)
- **พื้นที่เก็บข้อมูล:** พื้นที่ว่าง 1GB
- **Node.js:** เวอร์ชัน 16+ (แนะนำเวอร์ชัน 22+)
- **npm:** เวอร์ชันล่าสุดที่เสถียร
<br/>
## การช่วยเหลือ
ติดต่อกับผู้ดูแลระบบและชุมชนผ่านช่องทางเหล่านี้:
- พบข้อผิดพลาดหรือขอฟีเจอร์ใหม่? กรุณา [เปิดปัญหา](https://github.com/HeyPuter/puter/issues/new/choose).
- ดิสคอร์ด: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (ทวิตเตอร์): [x.com/HeyPuter](https://x.com/HeyPuter)
- เรดดิท: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- มาสตอดอน: [mastodon.social/@puter](https://mastodon.social/@puter)
- ปัญหาด้านความปลอดภัย [[email protected]](mailto:[email protected])
- ส่งอีเมลถึงผู้ดูแลระบบได้ที่ [[email protected]](mailto:[email protected])
เรายินดีเสมอที่จะช่วยเหลือคุณกับทุกทุกคำถามที่คุณมี อย่าลังเลที่จะถาม
<br/>
## ลิขสิทธิ์
ที่เก็บข้อมูลนี้ รวมถึงเนื้อหาทั้งหมด, โครงการย่อย, โมดูล, และส่วนประกอบต่างๆ ได้รับใบอนุญาตภายใต้ [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) เว้นแต่จะมีการระบุไว้เป็นอย่างอื่นอย่างชัดเจน ไลบรารีจากบุคคลที่สามที่รวมอยู่ในที่เก็บข้อมูลนี้อาจอยู่ภายใต้ใบอนุญาตของตนเอง
<br/>
+127
View File
@@ -0,0 +1,127 @@
<h3 align="center"><img width="80" alt="Puter.com, Kişisel Bulut Bilgisayar: Tüm dosyalarınız, uygulamalarınız ve oyunlarınız her zaman her yerden erişilebilen tek bir yerde." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">İnternet İşletim Sistemi! Ücretsiz, Açık Kaynaklı ve Kendi Kendine Barındırılabilir</h3>
<p align="center">
<img alt="GitHub Depo Boyutu" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Yayınlamak" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub Lisans" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« CANLI DEMO »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter, zengin özelliklere sahip, son derece hızlı ve son derece genişletilebilir olacak şekilde tasarlanmış gelişmiş, açık kaynaklı bir internet işletim sistemidir. Puter şu şekilde kullanılabilir:
- Tüm dosyalarınızı, uygulamalarınızı ve oyunlarınızı tek bir güvenli yerde tutmak için gizlilik öncelikli bir kişisel bulut, her yerden her zaman erişilebilir.
- Web siteleri, web uygulamaları ve oyunlar oluşturmak ve yayınlamak için bir platform.
- Yeni bir arayüz ve güçlü özelliklerle Dropbox, Google Drive, OneDrive vb. uygulamalara bir alternatif.
- Sunucular ve iş istasyonları için bir uzak masaüstü ortamı.
- Web geliştirme, bulut bilişim, dağıtık sistemler ve çok daha fazlası hakkında bilgi edinmek için dost canlısı, açık kaynaklı bir proje ve topluluk!
<br/>
## Başlarken
### 💻 Yerel Geliştirme
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Bu, Puter'ı http://puter.localhost:4100 adresinde (veya bir sonraki kullanılabilir portta) başlatacaktır.
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter, [**puter.com**](https://puter.com) adresinde barındırılan bir hizmet olarak kullanılabilir.
<br/>
## Sistem Gereksinimleri
- **İşletim Sistemleri:** Linux, macOS, Windows
- **RAM:** 2GB Minimum (4GB önerilir)
- **Disk Alanı:** 1GB boş alan
- **Node.js:** Sürüm 16+ (Sürüm 22+ önerilir)
- **npm:** En son stabil sürüm
<br/>
## Destek
Bakımcılarla ve toplulukla şu kanallar aracılığıyla iletişim kurabilirsiniz:
- Hata raporu veya özellik isteği? Lütfen [yeni bir issue açın](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Güvenlik sorunları? [[email protected]](mailto:[email protected])
- Bakımcılara şu adresten e-posta gönderin [[email protected]](mailto:[email protected])
Sorularınız varsa size her zaman yardımcı olmaktan mutluluk duyarız. Sormaktan çekinmeyin!
<br/>
## Lisans
Bu depo, tüm içeriği, alt projeleri, modülleri ve bileşenleri dahil olmak üzere, aksi açıkça belirtilmedikçe [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) altında lisanslanmıştır. Bu depoda yer alan üçüncü taraf kütüphaneler kendi lisanslarına tabi olabilir.
<br/>
+125
View File
@@ -0,0 +1,125 @@
<h3 align="center"><img width="80" alt="Puter.com, The Personal Cloud Computer: Всі ваші файли, додатки та ігри в одному місці, доступні з будь-якого куточка світу в будь-який час." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Інтернет ОС! Безкоштовна, відкрита та self-hosted.</h3>
<p align="center">
<img alt="Розмір репозиторію на GitHub" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="Остання версія на GitHub" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="Ліцензія GitHub" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« Онлайн ДЕМО »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="скріншот" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter — це просунута, інтернет-ОС, з відкритим кодом, створена для того, щоб бути багатофункціональною, надзвичайно швидкою та розширюваною. Puter може використовуватися як:
- Приватний хмарний сервіс для збереження всіх ваших файлів, додатків і ігор у безпечному місці, доступному в будь-який час з будь-якого місця.
- Платформа для створення та публікації вебсайтів, вебдодатків і ігор.
- Альтернатива Dropbox, Google Drive, OneDrive і тд, з свіженьким інтерфейсом та потужними функціями.
- Віддалене робоче середовище для серверів і робочих станцій.
- Дружній, відкритий проєкт та спільнота для вивчення веброзробки, хмарних обчислень, розподілених систем і багато іншого!
<br/>
## Початок роботи
### Локальна розробка
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Це запустить Puter на http://puter.localhost:4100 (або на наступному доступному порті).
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter доступний як hosted service на [**puter.com**](https://puter.com).
<br/>
## Системні вимоги
- **Операційні Системи:** Linux, macOS, Windows
- **RAM:** 2GB мінімум (4GB рекомендовано)
- **Місце на диску:** 1GB вільного місця
- **Node.js:** Version 16+ (Version 22+ рекомендовано)
- **npm:** остання "stable" версія
<br/>
## Підтримка
Зв'язатися з розробниками та спільнотою можна через такі канали:
- Повідомити про помилку, або запит щодо нової фічі? Будь ласка, [створіть issue](https://github.com/HeyPuter/puter/issues/new/choose).
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- Питання щодо Security? [[email protected]](mailto:[email protected])
- Написати розробникам [[email protected]](mailto:[email protected])
Ми завжди готові допомогти Вам з будь-якими питаннями, що можуть виникнути. Не соромтеся ставити нам питання!
<br/>
## License
Цей репорзиторій, включаючи увесь його контент, дочірні проєкти, модулі, і компоненти, ліцензовано за [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), якщо явно не вказано інше. Сторонні бібліотеки, включені в цей репозиторій, можуть підпадати під дію інших ліцензій.
<br/>
+121
View File
@@ -0,0 +1,121 @@
<h3 align="center"><img width="80" alt="Puter.com, ذاتی کلاؤڈ کمپیوٹر: آپ کی تمام فائلیں، ایپس، اور کھیل ایک جگہ پر، کہیں سے بھی اور کسی بھی وقت قابل رسائی۔" src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">انٹرنیٹ OS! مفت، اوپن سورس، اور خود میزبان.</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« لائیو ڈیمو »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">ڈسکورڈ</a>
·
<a href="https://reddit.com/r/puter">ریڈڈٹ</a>
·
<a href="https://twitter.com/HeyPuter">ایکس (ٹوئٹر)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="اسکرین شاٹ" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
ایک جدید، اوپن سورس انٹرنیٹ آپریٹنگ سسٹم ہے جو کہ خصوصیات سے بھرپور، بہت تیز، اور انتہائی توسیع پذیر ہے۔ Puter
: کو استعمال کیا جا سکتا ہے Puter
- ایک پرائیویسی فرسٹ ذاتی کلاؤڈ کے طور پر تاکہ آپ کی تمام فائلیں، ایپس، اور کھیل ایک محفوظ جگہ پر رکھی جا سکیں، کہیں سے بھی اور کسی بھی وقت قابل رسائی ہوں۔
- ویب سائٹس، ویب ایپس، اور کھیل بنانے اور شائع کرنے کے لئے ایک پلیٹ فارم کے طور پر۔
- وغیرہ کا متبادل، نئے انٹرفیس اور طاقتور خصوصیات کے ساتھ۔ Dropbox، Google Drive، OneDrive
- سرورز اور ورک اسٹیشنز کے لیے ایک ریموٹ ڈیسک ٹاپ ماحول کے طور پر۔
- ویب ڈویلپمنٹ، کلاؤڈ کمپیوٹنگ، تقسیم شدہ نظاموں، اور بہت کچھ سیکھنے کے لیے ایک دوستانہ، اوپن سورس پروجیکٹ اور کمیونٹی!
<br/>
## شروع کرنے کا طریقہ
### 💻 مقامی ترقی
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
یہ Puter کو http://puter.localhost:4100 (یا اگلے دستیاب پورٹ) پر لانچ کرے گا۔
<br/>
🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
🐙 Docker Compose
Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
### ☁️ Puter.com
Puter کو [**puter.com**](https://puter.com) پر میزبان سروس کے طور پر دستیاب ہے۔
<br/>
## نظام کی ضروریات
- **آپریٹنگ سسٹمز:** لینکس، macOS، ونڈوز
- **RAM:** کم از کم 2GB (4GB تجویز کردہ)
- **ڈسک کی جگہ:** 1GB خالی جگہ
- **Node.js:** ورژن 16+ (ورژن 22+ تجویز کردہ)
- **npm:** تازہ ترین مستحکم ورژن
<br/>
## سپورٹ
منتظمین اور کمیونٹی سے جڑنے کے لیے یہ چینلز استعمال کریں:
- بگ رپورٹ یا فیچر درخواست؟ براہ کرم [ایک مسئلہ کھولیں](https://github.com/HeyPuter/puter/issues/new/choose).
- ڈسکورڈ: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- ایکس (ٹوئٹر): [x.com/HeyPuter](https://x.com/HeyPuter)
- ریڈڈٹ: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- ماسٹڈون: [mastodon.social/@puter](https://mastodon.social/@puter)
- سیکیورٹی کے مسائل؟ [[email protected]](mailto:[email protected])
- منتظمین کو ای میل کریں [[email protected]](mailto:[email protected])
ہم ہمیشہ آپ کی مدد کے لیے خوش ہیں۔ سوالات پوچھنے میں ہچکچاہٹ نہ کریں
!
<br/>
## لائسنس
اس ریپوزٹری، بشمول اس کے تمام مواد، ذیلی پروجیکٹس، ماڈیولز، اور کمپوننٹس، کو [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) کے تحت لائسنس کیا گیا ہے جب تک کہ واضح طور پر کہیں اور نہ کہا گیا ہو۔ اس ریپوزٹری میں شامل تھرڈ پارٹی لائبریریاں اپنی لائسنس کے تابع ہو سکتی ہیں۔
<br/>
+125
View File
@@ -0,0 +1,125 @@
<h3 align="center"><img width="80" alt="Puter.com, Máy Tính Đám Mây Cá Nhân: Tất cả các tệp, ứng dụng, và trò chơi của bạn ở một nơi, có thể truy cập từ bất cứ đâu vào bất kỳ lúc nào." src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">Hệ điều hành Internet! Miễn phí, Mã nguồn mở và Có thể tự lưu trữ.</h3>
<p align="center">
<img alt="Kích thước repo GitHub" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="Phiên bản phát hành GitHub" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=Phi%C3%AAn%20b%E1%BA%A3n%20ph%C3%A1t%20h%C3%A0nh%20GitHub"> <img alt="Giấy phép GitHub" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« DEMO TRỰC TIẾP »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="chụp màn hình" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter là một hệ điều hành internet tiên tiến, mã nguồn mở được thiết kế để có nhiều tính năng, tốc độ vượt trội và khả năng mở rộng cao. Puter có thể được sử dụng như:
- Một đám mây cá nhân ưu tiên quyền riêng tư để lưu trữ tất cả các tệp, ứng dụng và trò chơi của bạn ở một nơi an toàn, có thể truy cập từ bất cứ đâu, bất cứ lúc nào.
- Một nền tảng để xây dựng và xuất bản các trang web, ứng dụng web và trò chơi.
- Một sự thay thế cho Dropbox, Google Drive, OneDrive, v.v. với giao diện mới mẻ và nhiều tính năng mạnh mẽ.
- Một môi trường máy tính từ xa cho các máy chủ và máy trạm.
- Một dự án thân thiện, mã nguồn mở và cộng đồng để học hỏi về phát triển web, điện toán đám mây, hệ thống phân tán và nhiều hơn nữa!
<br/>
## Bắt Đầu
## 💻 Phát Triển Cục Bộ
```bash
Copy code
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
Điều này sẽ khởi chạy Puter tại http://puter.localhost:4100 (hoặc cổng kế tiếp có sẵn).
<br/>
### 🐳 Docker
```bash
Copy code
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
## 🐙 Docker Compose
## Linux/macOS
``` bash
Copy code
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
## Windows
```powershell
Copy code
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
## ☁️ Puter.com
Puter có sẵn dưới dạng dịch vụ lưu trữ tại [**puter.com**](https://puter.com).
<br/>
## Yêu Cầu Hệ Thống
- **Hệ Điều Hành:** Linux, macOS, Windows
- **RAM:** Tối thiểu 2GB (Khuyến nghị 4GB)
- **Dung Lượng Ổ Cứng:** Còn trống 1GB
- **Node.js:** Phiên bản 16+ (Khuyến nghị phiên bản 22+)
- **npm:** Phiên bản ổn định mới nhất
<br/>
## Hỗ Trợ
Kết nối với các nhà bảo trì và cộng đồng thông qua các kênh sau:
- Báo cáo lỗi hoặc yêu cầu tính năng? Vui lòng mở một vấn đề.
- Discord: discord.com/invite/PQcx7Teh8u
- X (Twitter): x.com/HeyPuter
- Reddit: reddit.com/r/puter/
- Mastodon: mastodon.social/@puter
- Vấn đề bảo mật? security@puter.com
- Email các nhà bảo trì tại hi@puter.com
Chúng tôi luôn sẵn sàng giúp đỡ bạn với bất kỳ câu hỏi nào bạn có. Đừng ngần ngại hỏi!
<br/>
## Giấy Phép
Kho lưu trữ này, bao gồm tất cả nội dung, dự án con, mô-đun và thành phần của nó, được cấp phép theo [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt), trừ khi được tuyên bố rõ ràng khác. Các thư viện của bên thứ ba được bao gồm trong kho lưu trữ này có thể phải tuân theo các giấy phép riêng của chúng.
<br/>
+138
View File
@@ -0,0 +1,138 @@
<h3 align="center"><img width="80" alt="Puter.com,个人云计算机:所有文件、应用程序和游戏在一个地方,随时随地可访问。" src="https://assets.puter.site/puter-logo.png"></h3>
<h3 align="center">互联网操作系统!免费、开源且可自行托管。</h3>
<p align="center">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/HeyPuter/puter"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HeyPuter/puter?label=latest%20version"> <img alt="GitHub License" src="https://img.shields.io/github/license/HeyPuter/puter">
</p>
<p align="center">
<a href="https://puter.com/"><strong>« 在线演示 »</strong></a>
<br />
<br />
<a href="https://puter.com">Puter.com</a>
·
<a href="https://docs.puter.com" target="_blank">SDK</a>
·
<a href="https://discord.com/invite/PQcx7Teh8u">Discord</a>
·
<a href="https://reddit.com/r/puter">Reddit</a>
·
<a href="https://twitter.com/HeyPuter">X (Twitter)</a>
</p>
<h3 align="center"><img width="800" style="border-radius:5px;" alt="screenshot" src="https://assets.puter.site/puter.com-screenshot-3.webp"></h3>
<br/>
## Puter
Puter 是一个先进的开源互联网操作系统,设计为功能丰富、速度极快且高度可扩展。Puter 可用作:
- 一个以隐私为优先的个人云,将所有文件、应用程序和游戏保存在一个安全的地方,随时随地可访问。
- 构建和发布网站、Web 应用程序和游戏的平台。
- Dropbox、Google Drive、OneDrive 等的替代品,具有全新的界面和强大的功能。
- 服务器和工作站的远程桌面环境。
- 一个友好的开源项目和社区,学习 Web 开发、云计算、分布式系统等更多内容!
<br/>
## 入门指南
### 💻 本地开发
```bash
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
```
这将会在 http://puter.localhost:4100(或下一个可用端口)启动 Puter。
<br/>
### 🐳 Docker
```bash
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
```
<br/>
### 🐙 Docker Compose
#### Linux/macOS
```bash
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
```
<br/>
#### Windows
```powershell
mkdir -p puter
cd puter
New-Item -Path "puter\config" -ItemType Directory -Force
New-Item -Path "puter\data" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml" -OutFile "docker-compose.yml"
docker compose up
```
<br/>
## 宝塔面板Docker一键部署(推荐)
1. 安装宝塔面板9.2.0及以上版本,前往 [宝塔面板](https://www.bt.cn/new/download.html?r=dk_puter) 官网,选择正式版的脚本下载安装
2. 安装后登录宝塔面板,在左侧菜单栏中点击 `Docker`,首次进入会提示安装`Docker`服务,点击立即安装,按提示完成安装
3. 安装完成后在应用商店中搜索`puter`,点击安装,配置域名等基本信息即可完成安装
### ☁️ Puter.com
Puter 可以作为托管服务使用,访问 [**puter.com**](https://puter.com)。
<br/>
## 系统要求
- **操作系统:** Linux, macOS, Windows
- **内存:** 最低 2GB(推荐 4GB)
- **磁盘空间:** 1GB 可用空间
- **Node.js:** 版本 16+(推荐 22+)
- **npm:** 最新稳定版本
<br/>
## 支持
通过以下渠道与维护者和社区联系:
- 有 Bug 报告或功能请求?请 [提交问题](https://github.com/HeyPuter/puter/issues/new/choose)。
- Discord: [discord.com/invite/PQcx7Teh8u](https://discord.com/invite/PQcx7Teh8u)
- X (Twitter): [x.com/HeyPuter](https://x.com/HeyPuter)
- Reddit: [reddit.com/r/puter/](https://www.reddit.com/r/puter/)
- Mastodon: [mastodon.social/@puter](https://mastodon.social/@puter)
- 安全问题?请联系 [[email protected]](mailto:[email protected])
- 电子邮件维护者 [[email protected]](mailto:[email protected])
我们随时乐意帮助您解答任何问题,欢迎随时联系!
<br/>
## 许可证
本仓库,包括其所有内容、子项目、模块和组件,除非另有明确说明,否则均遵循 [AGPL-3.0](https://github.com/HeyPuter/puter/blob/main/LICENSE.txt) 许可证。 本仓库中包含的第三方库可能受其各自的许可证约束。
<br/>
+1 -1
View File
@@ -1,4 +1,4 @@
Copyright (C) 2024 Puter Technologies Inc.
Copyright (C) 2024-present Puter Technologies Inc.
This file is part of Puter.
-136
View File
@@ -1,136 +0,0 @@
### Problem
When sending metadata along with arbitrary JSON objects,
a collision of property names may occur. For example, the
driver system can't place a "type" property on an arbitrary
response coming from a driver because that might also be
the name of a property in the response.
#### Example:
```json
{
"type": "api:thing",
"version": "v1.0.0",
"some": "info"
}
```
#### Awful Solution
Reserved words. Drivers need to know their response can't have
keys like `type` or `version`. If we'd like to add more meta
keys in the future we need to verify that no existing drivers
use the new key we'd like to reserve. If we have have such features
as user-submitted drivers this will be impossibe.
A `meta` key as a single reserved word could work, which is one
of the solutions discussed below.
#### Obvious Solution:
The obvious solution is to return an object with a
`head` property and a `body` propery:
```json
{
"head": {
"type": "api:thing",
"version": "v1.0.0"
},
"body": {
"some": "info"
}
}
```
I don't mind this solution. I've come up with some alternatives though,
because this solution has a couple drawbacks:
- it looks a little verbose
- it's not backwards-compatible with arbitrary JSON-object responses
## Solutions
### Dollar-Sign Convention
- Objects have two classes of keys:
- "meta" keys begin with "$"
- other keys must validate against the
usual identifier rules: `/[A-Za-z_][A-Za-z0-9_]*/`
- The meta key `$` indicates the schema or class of
the object.
- Example:
```json
{
"$": "api:thing",
"$version": "v1.0.0",
"some": "info"
}
```
- what sucks about it:
- `$` might be surprising or confusing
- response is a subset of valid JSON keys
(those not including `$`)
- what's nice about it:
- backwards-compatible with arbitrary JSON-object responses
which don't already use `$`
### Underscore Convention
- Same as above, but `_` instead of `$`
```json
{
"_": "api:thing",
"_version": "v1.0.0",
"some": "info"
}
```
- what sucks about it:
- `_` might be confusing
- response is a subset of valid JSON keys
(those not including `_`)
- what's nice about it:
- `_` is conventionally used for private property names,
so this might be a little less surprising
- backwards-compatible with arbitrary JSON-object responses
which don't already use `_`
### Nesting Convention, simplified
- Similar to the "obvious solution" except
metadata fields are lifted up a level.
It's relatively inconsequential if meta keys
have reserved words compared to value keys.
```json
{
"type": "api:thing",
"version": "v1.0.0",
"value": {
"some": "info"
}
}
```
### Modified Dollar/Underscore convention
- Using `_` in this example, but instead of prefixing
meta properties they all go under one key.
```json
{
"_": {
"type": "api:thing",
"version": "v1.0.0"
},
"some": "info"
}
```
- what sucks about it:
- `_` might be confusing
- response is a subset of valid JSON keys
(those not **exactly** `_`)
- what's nice about it:
- `_` is conventionally used for private property names,
so this might be a little less surprising
- backwards-compatible with arbitrary JSON-object responses
which don't already use `_` as an exact key
- only one reserved key
-12
View File
@@ -1,12 +0,0 @@
# Micro Modules
**CoreModule** has a large number of services. Each service handles
a general concern, like "notifications", but increasing this granularity
a little put more could allow a lot more code re-use.
One specific example that comes to mind is services that provide
CRUD operations for a database table. The **EntityStoreService** can
be used for a lot of these even though right now it's specifically
used for drivers. Having a common class of service like this can also
allow quickly configuring the equivalent service for providing those
CRUD operations through an API.
-137
View File
@@ -1,137 +0,0 @@
# Puter in Production
## Building
```bash
npm run build
```
## Usage
Will build Puter in the `dist` directory. Include the generated `./dist/gui.js` file in your HTML page and call `gui()` when the page is loaded:
```html
<script type="text/javascript" src="./dist/gui.js"></script>
<script type="text/javascript">
window.addEventListener('load', function() {
// Initialize the GUI. All options are optional!
gui({
// The origin of the app. This is the base URL of the GUI.
gui_origin: "https://puter.com",
// The origin of the API. This is the base URL of the API endpoints that the GUI will call for all its operations.
api_origin: "https://api.puter.com",
// The domain under which user websites are hosted.
hosting_domain: "puter.site",
// The maximum length of file/directory names.
max_item_name_length: 500,
// If GUI has to enforce email verification before allowing user to publish a website.
require_email_verification_to_publish_website: true,
})
});
</script>
```
## Full Production Example
Assuming the following directory structure in production:
```
.
├── dist/
│ ├── favicons/
│ ├── images/
│ ├── bundle.min.css
│ ├── bundle.min.js
│ ├── gui.js
│ └── ...
└── index.html
```
The `index.html` file below will load Puter and all the necessary meta tags, favicons, and branding assets:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Puter</title>
<meta name="author" content="Puter Technologies Inc.">
<meta name="description" content="Puter is a privacy-first personal cloud to keep all your files, apps, and games in one private and secure place, accessible from anywhere at any time.">
<meta name="facebook-domain-verification" content="e29w3hjbnnnypf4kzk2cewcdaxym1y" />
<link rel="canonical" href="https://puter.com">
<!-- Meta meta tags -->
<meta property="og:url" content="https://puter.com">
<meta property="og:type" content="website">
<meta property="og:title" content="Puter">
<meta property="og:description" content="Puter is a privacy-first personal cloud to keep all your files, apps, and games in one private and secure place, accessible from anywhere at any time.">
<meta property="og:image" content="./dist/images/screenshot.png">
<!-- Twitter meta tags -->
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="puter.com">
<meta property="twitter:url" content="https://puter.com">
<meta name="twitter:title" content="Puter">
<meta name="twitter:description" content="Puter is a privacy-first personal cloud to keep all your files, apps, and games in one private and secure place, accessible from anywhere at any time.">
<meta name="twitter:image" content="./dist/images/screenshot.png">
<!-- favicons -->
<link rel="apple-touch-icon" sizes="57x57" href="./dist/favicons/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="./dist/favicons/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="./dist/favicons/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="./dist/favicons/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="./dist/favicons/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="./dist/favicons/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="./dist/favicons/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="./dist/favicons/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="./dist/favicons/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="./dist/favicons/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="./dist/favicons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="./dist/favicons/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="./dist/favicons/favicon-16x16.png">
<link rel="manifest" href="./dist/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="./dist/favicons/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<!-- Preload images when applicable -->
<link rel="preload" as="image" href="./dist/images/wallpaper.webp">
</head>
<body>
<!-- Load the GUI script -->
<script type="text/javascript" src="./dist/gui.js"></script>
<!-- Initialize GUI when document is loaded -->
<script type="text/javascript">
window.addEventListener('load', function() {
gui()
});
</script>
</body>
</html>
```
### Server settings
The GUI is a single page application (SPA) and as best practice any route under root (`/*`) should preferably load the `index.html` file. However, there are situations where we want to load a custom page for a specific route: for example, the `/privacy` route may need to load a page that contains your privacy policy and has nothing to do with the GUI application. In these cases it is ok to load a custom page as long as the following essential GUI routes are loaded with the GUI (i.e. `index.html` file):
- `/app/*`
- `/action/*`
In other words, consider the routes above as "reserved" for Puter.
### Best Practices
- The `title` tags and meta tags (`<title></title>`, `<meta property="og:title"`, `<meta name="twitter:title"`, ...) should be dynamically set by the server. For example, if the URL is of an app (e.g. `https://puter.com/app/editor`) the `title` tags and meta tags should contain the app's title rather than the generic Puter title.
- The `description` meta tags (`<meta name="description"`, `<meta property="og:description"`, `<meta name="twitter:description"`, ...) should be dynamically set by the server. For example, if the URL is of an app (e.g. `https://puter.com/app/editor`) the `description` meta tags should contain the app's description rather than the generic Puter description.
- Make sure to escape any HTML code that is dynamically added to the HTML page. For example, if the app's description is `Puter is a <b>privacy-first</b> personal cloud to keep all your files, apps, and games in one private and secure place, accessible from anywhere at any time.` the `<b>` tag should be escaped to `&lt;b&gt;` so that the browser doesn't interpret it as an HTML tag.
- Make sure to replace all new line characters with space when dynamically adding text to the HTML page.
- Generally, for UX and SEO reasons make sure that the tags are filled with relevant information about the state the URL is representing. E.g. is the user on the desktop or an app?
-72
View File
@@ -1,72 +0,0 @@
# Configuring Domains for Self-Hosted Puter
## Local Network Configuration
### Prerequisite Conditions
Ensure the hosting device has a static IP address to prevent potential connectivity issues due to IP changes. This setup will enable seamless access to Puter and its services across your local network.
### Using Hosts Files
The hosts file is a straightforward way to map domain names to IP addresses on individual devices. It's simple to set up but requires manual changes on each device that needs access to the domains.
#### Windows
1. Open Notepad as an administrator.
2. Open the file located at `C:\Windows\System32\drivers\etc\hosts`.
3. Add lines for your domain and subdomain with the server's IP address, in the
following format:
```
192.168.1.10 puter.local
192.168.1.10 api.puter.local
```
#### For macOS and Linux:
1. Open a terminal.
2. Edit the hosts file with a text editor, e.g., `sudo nano /etc/hosts`.
3. Add lines for your domain and subdomain with the server's IP address, in the
following format:
```
192.168.1.10 puter.local
192.168.1.10 api.puter.local
```
4. Save and exit the editor.
### Using Router Configuration
Some routers allow you to add custom DNS rules, letting you configure domain names network-wide without touching each device.
1. Access your router’s admin interface (usually through a web browser).
2. Look for DNS or DHCP settings.
3. Add custom DNS mappings for `puter.local` and `api.puter.local` to the hosting device's IP address.
4. Save the changes and reboot the router if necessary.
This method's availability and steps may vary depending on your router's model and firmware.
### Using Local DNS
Setting up a local DNS server on your network allows for flexible and scalable domain name resolution. This method works across all devices automatically once they're configured to use the DNS server.
#### Options for DNS Software:
- **Pi-hole**: Acts as both an ad-blocker and a DNS server. Ideal for easy setup and maintenance.
- **BIND9**: Offers comprehensive DNS server capabilities for complex setups.
- **dnsmasq**: Lightweight and suitable for smaller networks or those new to running a DNS server.
**contributors note:** feel free to add any software you're aware of
which might help with this to the list. Also, feel free to add instructions here for specific software; our goal is for Puter to be easy to setup with tools you're already familiar with.
#### General Steps:
1. Choose and install DNS server software on a device within your network.
2. Configure the DNS server to resolve `puter.local` and `api.puter.local` to the IP address of your Puter hosting device.
3. Update your router's DHCP settings to distribute the DNS server's IP address to all devices on the network.
By setting up a local DNS server, you gain the most flexibility and control over your network's domain name resolution, ensuring that all devices can access Puter and its API without manual configuration.
## Production Configuration
Please note the self-hosting feature is still in alpha and a public production
deployment is not recommended at this time. However, if you wish to host
publicly you can do so following the same steps you normally would to configure
a domain name and ensuring the `api` subdomain points to the server as well.
-58
View File
@@ -1,58 +0,0 @@
# Self-Hosting Puter
> [!WARNING]
> The self-hosted version of Puter is currently in alpha stage and should not be used in production yet. It is under active development and may contain bugs, other issues. Please exercise caution and use it for testing and evaluation purposes only.
### Self-Hosting Differences
Currently, the self-hosted version of Puter is different in a few ways from [Puter.com](https://puter.com):
- There is no built-in way to install or create other apps (see below)
- Several "core" apps are missing, such as **Code** or **Draw**, because we can't include them in this repository
- Some icons are different
Work is ongoing to improve the **App Center** and make it available on self-hosted.
Until then, it's possible to add other apps by manually editing the database file.
This process is not recommended unless you know what you are doing.
The file will appear after you first launch Puter, and should be found in `puter/data/puter-database.sqlite` for Docker,
or `volatile/runtime/puter-database.sqlite` otherwise.
You will need a database tool that can understand SQLite databases.
<br/>
## Configuration
Running the server will generate a configuration file in one of these locations:
- `config/config.json` when [Using Docker](#using-docker)
- `volatile/config/config.json` in [Local Development](#local-development)
- `/etc/puter/config.json` on a server (or within a Docker container)
### Domain Name
To access Puter on your device, you can simply go to the address printed in
the server console (usually `puter.localhost:4100`).
To access Puter from another device, a domain name must be configured, as well as
an `api` subdomain. For example, `example.local` might be the domain name pointing
to the IP address of the server running puter, and `api.example.com` must point to
this address as well. This domain must be specified in the configuration file
(usually `volatile/config/config.json`) as well.
See [domain configuration](./domains.md) for more information.
### Configure the Port
- You can specify a custom port by setting `http_port` to a desired value
- If you're using a reverse-proxy such as nginx or cloudflare, you should
also set `pub_port` to the public (external) port (usually `443`)
- If you have HTTPS enabled on your reverse-proxy, ensure that
`protocol` in config.json is set accordingly
### Default User
By default, Puter will create a user called `default_user`.
This user will have a randomly generated password, which will be printed
in the development console.
A warning will persist in the dev console until this user's
password is changed. Please login to this user and change the password as
your first step.
<br/>
-39
View File
@@ -1,39 +0,0 @@
## Puter Support Levels for Repository Updates
This document describes issues requiring repository changes;
which issues will be fixed by Puter's core team, and which ones
will be fixed if the community makes a contribution.
This document is not "law". It is provided only as a helpful guide
on what to expect.
### Level Glossary
| Name | Description |
| ---- | ----------- |
| Core | Core developers will fix this |
| Community | We will accept contributions to fix this |
| Mixed | Core developers will fix this if it's currently a priority |
### Issues and their Levels
| Issue | Priority |
| ----- | -------- |
| Security vulnerability | Core |
| Breaking change to SDK or API | Core |
| Bug in service in CoreModule | Core |
| Bug in a built-in app | Core |
| Login/init failure in Docker on `release` branch | Core |
| Login/init failure in Linux or OSX | Core |
| Login/init failure in Docker on `main` branch | Mixed |
| Login/init failure with specific configuration | Mixed |
| Login/init failure in Windows | Community |
## Puter Support for a Particular Deployment
If you experience issues on a self-hosted deployment we're here to
help. Some issues are related to configuration or environment, so
we may only be able to help in a limited capacity. Issues related
to data loss, data corruption, or security will have higher priority
over other issues with particular deployments.
+429
View File
@@ -0,0 +1,429 @@
# Self-Hosting Puter
`docker-compose.yml` brings up Puter **plus every external service it needs** — MariaDB, Valkey, DynamoDB-local, RustFS S3, nginx — wired together. Closest thing to a production deployment you can self-manage on a single host.
## One-line installer (recommended)
```bash
curl -fsSL https://raw.githubusercontent.com/HeyPuter/puter/main/install.sh | sh
```
Generates secrets, writes `.env` + `puter/config/config.json`, downloads `docker-compose.yml` from the OSS repo, and runs `docker compose up -d`. Re-running is safe — it won't overwrite existing config (set `PUTER_FORCE=1` to rotate). Use the manual steps below if you want to inspect or tweak each step yourself.
## Requirements
- **Docker** with the `compose` plugin.
- A **domain** with DNS access — you need a wildcard record (`*.your-domain.com` → server IP). Puter routes by subdomain (`api.<domain>`, `site.<domain>`, `app.<domain>`).
- Optional: **TLS certs** (or `certbot` to grab them — see Step 3).
## What's running
| Container | Image | Role |
| --------------- | ------------------------ | ---------------------------------------------------------- |
| `puter-nginx` | `nginx:1.27-alpine` | Reverse proxy on 80 (and 443 if TLS); forwards to Puter |
| `puter` | `ghcr.io/heyputer/puter` | The app |
| `puter-mariadb` | `mariadb:11` | SQL database — schema applied automatically on first boot |
| `puter-valkey` | `valkey/valkey:8-alpine` | Redis-compatible cache + rate-limiter |
| `puter-dynamo` | `amazon/dynamodb-local` | KV store — table auto-created on first boot |
| `puter-s3` | `rustfs/rustfs` | S3-compatible object storage (MinIO drop-in noted in file) |
| `puter-s3-init` | `amazon/aws-cli` | One-shot — creates the bucket on first boot, then exits |
Optional services (compose profile `ai`, opt-in):
| Container | Image | Role |
| ------------------- | --------------- | -------------------------------------------------------------- |
| `puter-ollama` | `ollama/ollama` | Local LLM provider (CPU; GPU passthrough opt-in) |
| `puter-ollama-init` | `ollama/ollama` | One-shot — pulls the default model (`tinyllama`) on first boot |
State lives under `./puter/data/<service>/`.
---
## Step 1 — Create `.env` and `puter/config/config.json`
> ⚠️ **Run this whole block in one shell session.** It generates secrets once and writes them into both `.env` (read by docker compose) and `config.json` (read by Puter). The two files **must** agree on the MariaDB password and the S3 secret — if they drift, MariaDB initialises with one password and Puter tries to log in with another, and you get `ER_ACCESS_DENIED_ERROR`.
```bash
MARIADB_ROOT_PASSWORD=$(openssl rand -hex 32)
MARIADB_PASSWORD=$(openssl rand -hex 32)
S3_SECRET_KEY=$(openssl rand -hex 32)
JWT_SECRET=$(openssl rand -hex 64)
URL_SIGNATURE_SECRET=$(openssl rand -hex 64)
cat > .env <<EOF
HTTP_PORT=80
# HTTPS_PORT=443 # uncomment after enabling TLS in Step 3
MARIADB_ROOT_PASSWORD=$MARIADB_ROOT_PASSWORD
MARIADB_DATABASE=puter
MARIADB_USER=puter
MARIADB_PASSWORD=$MARIADB_PASSWORD
S3_ACCESS_KEY=puter
S3_SECRET_KEY=$S3_SECRET_KEY
S3_BUCKET=puter-local
EOF
mkdir -p puter/config puter/data puter/tls
cat > puter/config/config.json <<EOF
{
"domain": "puter.localhost",
"protocol": "http",
"pub_port": 80,
"env": "prod",
"static_hosting_domain": "site.puter.localhost",
"static_hosting_domain_alt": "host.puter.localhost",
"private_app_hosting_domain": "app.puter.localhost",
"private_app_hosting_domain_alt": "dev.puter.localhost",
"jwt_secret": "$JWT_SECRET",
"url_signature_secret": "$URL_SIGNATURE_SECRET",
"database": {
"engine": "mysql",
"host": "mariadb",
"port": 3306,
"user": "puter",
"password": "$MARIADB_PASSWORD",
"database": "puter",
"migrationPaths": ["/opt/puter/dist/src/backend/clients/database/migrations/mysql"]
},
"redis": {
"startupNodes": [{ "host": "valkey", "port": 6379 }],
"tls": false
},
"dynamo": {
"endpoint": "http://dynamo:8000",
"bootstrapTables": true,
"aws": {
"access_key": "fake",
"secret_key": "fake",
"region": "us-east-1"
}
},
"s3": {
"s3Config": {
"endpoint": "http://s3:9000",
"publicEndpoint": "http://s3.puter.localhost",
"accessKeyId": "puter",
"secretAccessKey": "$S3_SECRET_KEY",
"region": "us-east-1",
"forcePathStyle": true
}
},
"s3_bucket": "puter-local",
"s3_region": "us-east-1",
"providers": {
"ollama": { "enabled": false }
},
"trust_proxy": 1
}
EOF
```
Replace `puter.localhost`, `site.puter.localhost`, `host.puter.localhost`, `dev.puter.localhost` and `app.puter.localhost` with your actual domain (or leave it for a localhost-only trial).
Why these knobs:
- `env: "prod"` — the bundled `config.default.json` ships with `env: "dev"` (matches the source-tree `npm run start=gui` workflow, which expects webpack-dev-server emitting a CSS manifest). Self-host runs against pre-built static bundles, so `env: "prod"` makes the homepage emit the `/dist/bundle.min.css` `<link>` tag instead of waiting on a manifest that doesn't exist.
- `database.migrationPaths` — Puter applies the bundled MySQL schema on boot. `mysql_mig_1.sql` (tables) and `mysql_mig_2.sql` (default apps: editor, viewer, pdf, camera, player, recorder, git, dev-center, puter-linux). Idempotent — safe to re-run.
- `dynamo.bootstrapTables: true` — Puter creates its KV table on boot. **Only set against a local emulator**, never real AWS.
- `dynamo.aws` keys are dummies; DynamoDB-local doesn't validate them but the AWS SDK requires _something_. **Note:** DynamoDB uses `access_key` / `secret_key` (snake_case); S3 below uses `accessKeyId` / `secretAccessKey` (camelCase). Not interchangeable.
- `providers.ollama.enabled: false` — Puter auto-probes a local Ollama at `127.0.0.1:11434` by default; without one running you'd see `ECONNREFUSED` on every boot. To run a bundled Ollama, see [Optional: local LLM (Ollama)](#optional-local-llm-ollama) below.
- `s3.s3Config.forcePathStyle: true` — RustFS / MinIO / fauxqs need path-style URLs (`<endpoint>/<bucket>`). Real AWS S3 wants virtual-hosted (`<bucket>.<endpoint>`) — drop this flag (or set `false`) when you swap to real S3.
- `s3.s3Config.publicEndpoint` — `endpoint` (`http://s3:9000`) only resolves inside the docker network; presigned upload/download URLs handed to the browser need a host-reachable URL. nginx routes the `s3.<domain>` subdomain to RustFS internally and preserves the Host header end-to-end (required for S3 signature validation), so the browser hits the same port/protocol as the rest of the app — no separate published port, no mixed-content surprises when you turn on TLS. Switch to `https://s3.<your-domain>` once you enable TLS in Step 3. Real AWS S3 doesn't need this — its endpoint is already public; drop the field entirely.
- `trust_proxy: 1` — nginx terminates TLS and forwards `X-Forwarded-For`. Without this, `req.ip` is the docker-network address of the nginx container instead of the real client IP, which breaks rate limiting and IP-based audit logs. `1` = one trusted hop (nginx). Bump to `2` if you put Cloudflare in front of nginx; never set `true` (it trusts every hop and makes XFF forgeable).
> If you ever change `MARIADB_PASSWORD` after first boot, `.env` alone won't update MariaDB — its credentials are baked into `./puter/data/mariadb/` on first init. Either rotate the password inside MariaDB by hand or `docker compose down && rm -rf ./puter/data/mariadb` to start fresh.
## Step 2 — Point DNS at the server \[Optional\]
In your DNS provider, add records for the main domain plus the subdomains Puter and nginx route on (`api.*`, `site.*`, `app.*`, `s3.*`):
```
A puter.localhost → <your server's public IP>
A *.puter.localhost → <your server's public IP>
A site.puter.localhost → <your server's public IP>
A *.site.puter.localhost → <your server's public IP>
A host.puter.localhost → <your server's public IP>
A *.host.puter.localhost → <your server's public IP>
A app.puter.localhost → <your server's public IP>
A *.app.puter.localhost → <your server's public IP>
A dev.puter.localhost → <your server's public IP>
A *.dev.puter.localhost → <your server's public IP>
```
The wildcards are required — Puter routes via subdomains (`api.*`, `app.*`, etc.) and nginx routes browser S3 traffic via `s3.*` to RustFS.
## Step 3 — TLS (recommended for public installs) \[Optional\]
Skip this for a quick local demo. Don't skip it for users typing passwords.
**Get a wildcard cert.** Easiest path with Let's Encrypt + DNS-01 (works for wildcards):
```bash
sudo certbot certonly --manual --preferred-challenges dns \
-d puter.localhost -d "*.puter.localhost" \
-d site.puter.localhost -d "*.site.puter.localhost" \
-d host.puter.localhost -d "*.host.puter.localhost" \
-d app.puter.localhost -d "*.app.puter.localhost" \
-d dev.puter.localhost -d "*.dev.puter.localhost"
```
The cert needs to cover `*.puter.localhost` so that `s3.puter.localhost` (browser S3 endpoint), plus Puter's own `api.*` / `app.*` subdomains, all validate.
Drop the resulting `fullchain.pem` and `privkey.pem` into `./puter/tls/`.
**Wire nginx to use them:**
1. Open [nginx/nginx.conf](../nginx/nginx.conf), uncomment **both** `# server { listen 443 ssl … }` blocks (one for `s3.*`, one for the catch-all).
2. (Optional) Replace the body of the port-80 blocks with `return 301 https://$host$request_uri;` to force HTTPS everywhere.
3. In [docker-compose.yml](../docker-compose.yml), uncomment the `443:443` port mapping under the `nginx` service.
4. In `.env`, uncomment `HTTPS_PORT=443`.
5. In `config.json`, switch:
```json
{ "protocol": "https", "pub_port": 443 }
```
…and update the S3 public endpoint:
```json
"s3": { "s3Config": { "publicEndpoint": "https://s3.puter.local", ... } }
```
## Step 4 — Bring it up
```bash
docker compose up -d
```
First boot takes ~30s while MariaDB initialises and Puter applies the schema + default apps. Watch:
```bash
docker compose logs -f puter
```
Healthy startup:
```
[config] override from /etc/puter/config.json
[mysql] running migrations from /opt/puter/dist/src/backend/clients/database/migrations/mysql: 2 file(s)
[mysql] applied mysql_mig_1.sql (...)
[mysql] applied mysql_mig_2.sql (9 statements)
```
Then open **<https://puter.local>** (or `http://` if you skipped TLS). Login is `admin` — the temp password is printed once in the puter container logs on first boot:
```bash
docker compose logs puter | grep tmp_password
```
Change it in Settings after first login.
## Additional configuration
All optional. Drop any of the blocks below into `puter/config/config.json` and `docker compose restart puter`. See [config.template.jsonc](../config.template.jsonc) for the full list. Per-key documentation lives in [src/backend/types.ts](../src/backend/types.ts).
### Email (SMTP)
Used for password resets, email confirmation, and notifications. Without it those flows silently fail.
```json
"email": {
"from": "\"Puter\" <[email protected]>",
"host": "smtp.example.com",
"port": 587,
"secure": false,
"auth": { "user": "...", "pass": "..." }
}
```
To require email confirmation before login, also set `"strict_email_verification_required": true`.
### Sign in with Google (or another OIDC provider)
```json
"oidc": {
"providers": {
"google": {
"client_id": "...apps.googleusercontent.com",
"client_secret": "...",
"scopes": "openid email profile"
}
}
}
```
Add `https://puter.<your-domain>/auth/oidc/callback/login` to the OAuth client's authorized redirect URIs in the Google Cloud Console. For non-Google providers, replace `google` with a custom id and supply `authorization_endpoint` / `token_endpoint` / `userinfo_endpoint` explicitly.
### Sign in with Apple
```json
"oidc": {
"providers": {
"apple": {
"client_id": "com.example.your-service-id",
"team_id": "YOUR_TEAM_ID",
"key_id": "YOUR_KEY_ID",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
}
}
}
```
The `client_id` is your Apple Services ID. `team_id`, `key_id`, and `private_key` come from the Apple Developer Portal (Keys section — create a key with "Sign in with Apple" enabled). The `private_key` is the contents of the `.p8` file Apple provides. Add `https://puter.<your-domain>/auth/oidc/callback/login` and `https://puter.<your-domain>/auth/oidc/callback/signup` as return URLs in the Apple Services ID configuration.
### Sign in with Microsoft
```json
"oidc": {
"providers": {
"microsoft": {
"client_id": "YOUR_APPLICATION_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET_VALUE",
"tenant_id": "YOUR_TENANT_ID"
}
}
}
```
Register an app in the Azure Portal (Microsoft Entra ID → App registrations). The `client_id` is the Application (client) ID, `client_secret` is a client secret value, and `tenant_id` is the Directory (tenant) ID. Use `common` as `tenant_id` to allow any Microsoft account (personal and organizational); omit it to default to `common`. Add `https://puter.<your-domain>/auth/oidc/callback/login` and `https://puter.<your-domain>/auth/oidc/callback/signup` as redirect URIs under Authentication in the app registration.
### AI providers
Any provider with a key set is auto-enabled. Same shape as `ollama` above:
```json
"providers": {
"claude": { "apiKey": "sk-ant-..." },
"openai-completion": { "apiKey": "sk-..." },
"gemini": { "apiKey": "..." },
"openai-image-generation": { "apiKey": "sk-..." }
}
```
Full provider list (chat, image, video, TTS, OCR) is in the template.
### Per-user storage quota
Default is 100 MB per user.
```json
"storage_capacity": 5368709120, // 5 GB
"is_storage_limited": true
```
Set `is_storage_limited: false` for unlimited (bounded by host disk).
### Captcha on signup / login
Built-in proof-of-work captcha — no external service needed.
```json
"captcha": { "enabled": true, "difficulty": "medium" }
```
`difficulty` is one of `easy` / `medium` / `hard`.
### Block disposable email TLDs
Only enforced when `env: "prod"`.
```json
"blockedEmailDomains": ["mailinator.com", "tempmail.com", "guerrillamail.com"]
```
### Password policy
```json
"min_pass_length": 12
```
### Contact-form recipient
Where the in-app contact form posts. Defaults to `support@puter.com`.
```json
"support_email": "[email protected]"
```
## Optional: local LLM (Ollama)
The `ollama` and `ollama-init` services live behind a compose profile so they don't run unless you ask for them. By default, `puter/config/config.json` has `"ollama": { "enabled": false }` — Puter skips the auto-probe entirely. To run a local model:
1. Flip the config:
```json
"providers": {
"ollama": { "apiBaseUrl": "http://ollama:11434" }
}
```
2. (Optional) Pick a model in `.env`:
```bash
OLLAMA_DEFAULT_MODEL=tinyllama # default — 1.1B, ~640 MB on disk, ~700 MB RAM
# Other tiny picks: qwen2.5:0.5b, llama3.2:1b
# Larger / better: phi3.5, llama3.2, mistral
```
3. Bring up with the `ai` profile:
```bash
docker compose --profile ai up -d
docker compose logs -f ollama-init
```
`ollama-init` exits 0 once the model is pulled. Subsequent boots find the model already on disk and the pull is a fast no-op.
Without `--profile ai`, the `ollama` containers stay down and Puter (with `enabled: false`) doesn't try to reach them — the rest of the stack runs identically.
For GPU acceleration (NVIDIA), uncomment the `deploy:` block under the `ollama` service in [docker-compose.yml](../docker-compose.yml). Requires `nvidia-container-toolkit` on the host.
## Building from source instead of pulling
If you want to test local Dockerfile changes against the full stack, uncomment the `build:` block in [docker-compose.yml](../docker-compose.yml) under the `puter` service, change `pull_policy: always` → `pull_policy: never`, then:
```bash
docker compose up -d --build
```
---
## Managing running backend
```bash
# update
docker compose pull
docker compose up -d
# logs
docker compose logs -f puter
# stop, keep data
docker compose down
# stop, NUKE all state (irreversible)
docker compose down
rm -rf puter/data
```
Migrations re-apply idempotently across pulls. Volumes are preserved.
## Troubleshooting
**Site loads but I get "Bad Gateway" / nginx errors.**
The puter container failed to come up. `docker compose logs puter` will tell you which dependency rejected it (most often DB password mismatch between `.env` and `config.json`).
**Login screen says "admin password not set".**
First-boot temp password is logged once. Find it: `docker compose logs puter | grep "tmp_password"`. After login, change it in Settings.
**Healthcheck reports unhealthy but the site works.**
The healthcheck hits `puter.localhost:4100/test` from inside the container. If you changed `domain` or `port`, the check still uses defaults. The site itself is fine.
**Nothing resolves at `puter.example.com` after DNS changes.**
DNS propagates slowly. `dig puter.example.com` and `dig api.puter.example.com` should both return your server IP. If not, give it 5–60 minutes.
**`docker compose up` hangs at "waiting for service to be healthy".**
`docker compose ps` shows which container is unhealthy. MariaDB takes ~20–30s on a cold boot; everything else under 5s. If something stays unhealthy, `logs <service>` will tell you why.
**`Error: DynamoDB aws config requires both access_key and secret_key`.**
You wrote `accessKeyId` / `secretAccessKey` under `dynamo.aws`. That config block uses snake_case (`access_key` / `secret_key`). Only the `s3.s3Config` block uses camelCase.
-31
View File
@@ -1,31 +0,0 @@
# Testing with Email
Testing anything involving email is really simple using [mailhog](https://github.com/mailhog/MailHog)
### Step 1: Configure email service
In your `config.json` for Puter (`volatile/config/config.json` usually, `/var/puter/config.json` in containers),
add this entry to the `"services`" map:
```javascript
"services": {
// ... there are probably other service configs
"email": {
"host": "localhost",
"port": 1025
}
}
```
### Step 2: Install and run mailhog
Follow the instructions on [MailHog](https://github.com/mailhog/MailHog)'s
repository, or install through your distro's package manager.
Run the command: `mailhog`.
You should now have an inbox at [http://127.0.0.1:8025](http://127.0.0.1:8025).
Every email that Puter sends will show up on this page.
-9
View File
@@ -1,9 +0,0 @@
# Uncategorized Documentation
Any document in this directory may be moved in the future to
a more suitable location. This is a good place to put any
documentation that needs to be written when it's unclear what
the best place for it is. This is to avoid situations where
documentation _doesn't_ get written simply because it's not clear
where it belongs (something which the author of this very document
has been guilty of at times).
-46
View File
@@ -1,46 +0,0 @@
# Notes about ES6 Class Syntax
## Document Meta
> **backend focus:** This documentation is more relevant to
> Puter's backend than frontend, but is placed here because
> it could apply to other areas in the future.
## Expressions as Methods
One important shortcoming in the ES6 class syntax to be aware of
is that it discourages the use of expressions as methods.
For example:
```javascript
class ExampleClass extends SomeBase {
intuitive_method_definition () {}
constructor () {
this.less_intuitive = some_expr();
}
}
```
Even if it is known that the return type of `some_expr` is a function,
it is still unclear whether it's being used as a callback or
as a method without other context in the code, since this is
how we typically assign instance members rather than methods.
We solve this in Puter's backend using a **trait** called
[AssignableMethodsTrait](../../packages/backend/src/traits/AssignableMethodsTrait.js)
which allows a static member called `METHODS` to contain
method definitions.
### Uses for Expressions as Methods
#### Method Composition
Method Composition is the act of composing methods from other
constituents. For example,
[Sequence](../../packages/backend/src/codex/Sequence.js)
allows composing a method from smaller functions, allowing
easier definition of "in-betwewen-each" behaviors and ways
to track which values from the arguments are actually read
during a particular call.
-66
View File
@@ -1,66 +0,0 @@
# Puter Mods
## What is a Puter Mod?
Currently, the definition of a Puter mod is:
> A [Module](../../packages/backend/doc/contributors/modules.md)
> which is exported by a package directory which itself exists
> within a directory specified in the `mod_directories` array
> in `config.json`.
## Enabling Puter Mods
### Step 1: Update Configuration
First update the configuration (usually at `./volatile/config.json`
or `/var/puter/config.json`) to specify mod directories.
```json
{
"config_name": "example config",
"mod_directories": [
"{source}/mods/mods_enabled"
]
// ... other config options
}
```
The first path you'll want to add is
`"{source}/mods/mods_enabled"`
which adds all the mods included in Puter's official repository.
You don't need to change `{source}` unless your entry javascript
file is in a different location than the default.
If you want to enable all the mods, you can change the path above
to `mods_available` instead and skip step 2 below.
### Step 2: Select Mods
To enable a Puter mod, create a symbolic link (AKA symlink) in
`mods/mods_enabled`, pointing to
a directory in `mods/mods_available`. This follows the same convention
as managing sites/mods in Apache or Nginx servers.
For example to enable KDMOD (which you can read as "Kernel Dev" mod,
or "the mod that GitHub user KernelDeimos created to help with testing")
you would run this command:
```sh
ln -rs ./mods/mods_available/kdmod ./mods/mods_enabled/
```
This will create a symlink at `./mods/mods_enabled/kdmod` pointing
to the directory `./mods/mods_available/kdmod`.
> **note:** here are some helpful tips for the `ln` command:
> - You can remember `ln`'s first argument is the unaffected
> source file by remembering `cp` and `mv` are the same in
> this way.
> - If you don't add `-s` you get a hard link. You will rarely
> find yourself needing to do that.
> - The `-r` flag allows you to write both paths relative to
> the directory from which you are calling the command, which
> is sometimes more intuitive.
+280 -12
View File
@@ -1,25 +1,293 @@
---
version: "3.8"
# Self-hosted Puter — full stack.
#
# Brings up Puter + every external service it needs:
# - nginx : reverse proxy (mirrors prod ALB; handles TLS + Host fan-out)
# - valkey : redis-compatible cache / rate-limiter backend
# - mariadb : SQL database (Puter applies its schema on first boot)
# - dynamo : DynamoDB-local (KV store; Puter creates the table itself)
# - s3 : RustFS — S3-compatible object storage
# - s3-init : one-shot init container that creates the bucket
# - puter : the application
#
# Quick start:
# 1. Copy .env.example to .env (or set the variables in your shell).
# 2. Drop a config.json into ./puter/config/ — see selfhosted/full-stack.md
# for the example that pairs with this compose.
# 3. docker compose up -d
#
# Easiest path:
# curl -fsSL https://raw.githubusercontent.com/HeyPuter/puter/main/install.sh | sh
# grabs this file, generates secrets, writes .env + config.json, and runs
# the compose up for you.
#
# Production:
# - Always replace the default passwords / S3 keys / Puter secrets.
# - Front Puter with TLS-terminating reverse proxy (Caddy / nginx).
# - Move state-bearing volumes to a backed-up location.
services:
puter:
container_name: puter
image: ghcr.io/heyputer/puter:latest
pull_policy: always
# build: ./
valkey:
image: valkey/valkey:8-alpine
container_name: puter-valkey
restart: unless-stopped
# Run as a single-node cluster so Puter's ioredis Cluster client
# (the only mode it speaks) can connect. On first boot we assign all
# 16384 slots to ourselves; subsequent boots find them already in
# nodes.conf and skip. `cluster-require-full-coverage no` keeps reads
# working if we ever land partial slots.
command:
- sh
- -c
- |
valkey-server \
--port 6379 \
--cluster-enabled yes \
--cluster-config-file /data/nodes.conf \
--cluster-node-timeout 5000 \
--cluster-require-full-coverage no \
--cluster-announce-ip valkey \
--cluster-announce-port 6379 \
--cluster-announce-bus-port 16379 \
--appendonly yes \
--save "60 1" &
SERVER_PID=$$!
until valkey-cli -p 6379 PING > /dev/null 2>&1; do sleep 0.5; done
if ! valkey-cli -p 6379 CLUSTER NODES | grep -q '0-16383'; then
valkey-cli -p 6379 CLUSTER ADDSLOTSRANGE 0 16383
fi
wait $$SERVER_PID
volumes:
# `:z` is an SELinux relabel hint for Fedora/RHEL hosts (no-op
# everywhere else) — without it those distros deny container
# access to the bind mount and the service loops on EACCES.
- ./puter/data/valkey:/data:z
healthcheck:
test:
["CMD-SHELL", "valkey-cli -p 6379 cluster info | grep -q cluster_state:ok"]
interval: 5s
timeout: 3s
retries: 20
start_period: 10s
mariadb:
image: mariadb:11
container_name: puter-mariadb
restart: unless-stopped
ports:
- '4100:4100'
environment:
# TZ: Europe/Paris
# CONFIG_PATH: /etc/puter
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD:-root-change-me}
MARIADB_DATABASE: ${MARIADB_DATABASE:-puter}
MARIADB_USER: ${MARIADB_USER:-puter}
MARIADB_PASSWORD: ${MARIADB_PASSWORD:-puter-change-me}
volumes:
- ./puter/data/mariadb:/var/lib/mysql:z
healthcheck:
# `healthcheck.sh` ships with the mariadb image; --connect verifies
# the server is accepting auth, not just listening on the socket.
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 5s
timeout: 5s
retries: 20
start_period: 30s
dynamo:
# Puter creates the `store-kv-v1` table itself on startup
# (config.dynamo.bootstrapTables = true does the work).
image: amazon/dynamodb-local:latest
container_name: puter-dynamo
restart: unless-stopped
user: "1000:1000"
working_dir: /home/dynamodblocal
command:
- "-jar"
- "DynamoDBLocal.jar"
- "-sharedDb"
- "-dbPath"
- "/home/dynamodblocal/data"
volumes:
- ./puter/data/dynamo:/home/dynamodblocal/data:z
s3:
# RustFS — S3-compatible object storage. Drop-in alternative:
# MinIO (image: minio/minio, command: ["server", "/data", "--console-address", ":9001"]).
image: rustfs/rustfs:latest
container_name: puter-s3
restart: unless-stopped
environment:
RUSTFS_ACCESS_KEY: ${S3_ACCESS_KEY:-puter}
RUSTFS_SECRET_KEY: ${S3_SECRET_KEY:-puter-secret-change-me}
volumes:
- ./puter/data/s3:/data:z
# Internal-only — browsers reach RustFS via nginx (`s3.<domain>`),
# which preserves the Host header for S3 signature validation and
# rides the same TLS termination as Puter. Uncomment to also expose
# 9000 directly on the host for `aws-cli` / debugging.
# ports:
# - "9000:9000"
healthcheck:
# RustFS exposes /health on the S3 port. Use wget (curl is not in
# the slim image).
test:
[
"CMD-SHELL",
"wget -qO- --tries=1 --timeout=2 http://localhost:9000/health || exit 1",
]
interval: 5s
timeout: 3s
retries: 20
start_period: 5s
s3-init:
# One-shot container that creates the `puter-local` bucket on first
# boot. Exits 0 once the bucket exists; stays exited 0 thereafter.
image: amazon/aws-cli:latest
container_name: puter-s3-init
depends_on:
s3:
condition: service_healthy
environment:
AWS_ACCESS_KEY_ID: ${S3_ACCESS_KEY:-puter}
AWS_SECRET_ACCESS_KEY: ${S3_SECRET_KEY:-puter-secret-change-me}
AWS_DEFAULT_REGION: us-east-1
entrypoint:
- /bin/sh
- -c
- |
set -e
endpoint=http://s3:9000
bucket=${S3_BUCKET:-puter-local}
if aws --endpoint-url "$$endpoint" s3api head-bucket --bucket "$$bucket" 2>/dev/null; then
echo "bucket $$bucket already exists"
else
echo "creating bucket $$bucket"
aws --endpoint-url "$$endpoint" s3 mb "s3://$$bucket"
fi
restart: "no"
# ── Optional: local LLM ───────────────────────────────────────────
# Behind the `ai` compose profile — only starts when explicitly opted
# into. Bring up with:
# docker compose --profile ai up -d
# When enabled, also set in your `puter/config/config.json`:
# "providers": { "ollama": { "apiBaseUrl": "http://ollama:11434" } }
# When NOT enabled, set:
# "providers": { "ollama": { "enabled": false } }
# otherwise Puter spams `ECONNREFUSED 127.0.0.1:11434` on startup.
ollama:
profiles: ["ai"]
# CPU-only out of the box; uncomment the GPU `deploy:` block below
# if you've got nvidia-docker for much faster inference. Disk + RAM
# scale with the model — `tinyllama` (1.1B, ~640 MB on disk, ~700
# MB RAM) is the cheapest sane default. Swap via OLLAMA_DEFAULT_MODEL.
image: ollama/ollama:latest
container_name: puter-ollama
restart: unless-stopped
volumes:
- ./puter/data/ollama:/root/.ollama:z
# Uncomment to expose Ollama directly on the host (`localhost:11434`)
# for `ollama` CLI / OpenAI-API compatible tools. Internal-only by default.
# ports:
# - "11434:11434"
healthcheck:
test:
["CMD-SHELL", "ollama list >/dev/null 2>&1 || exit 1"]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
# GPU passthrough (NVIDIA). Requires nvidia-container-toolkit on host.
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [gpu]
ollama-init:
profiles: ["ai"]
# One-shot — ensures the default model is present. `ollama pull` is
# idempotent: present-and-up-to-date → fast no-op; missing → downloads.
image: ollama/ollama:latest
container_name: puter-ollama-init
depends_on:
ollama:
condition: service_healthy
environment:
OLLAMA_HOST: http://ollama:11434
OLLAMA_DEFAULT_MODEL: ${OLLAMA_DEFAULT_MODEL:-tinyllama}
entrypoint:
- /bin/sh
- -c
- |
set -e
echo "[ollama-init] ensuring $${OLLAMA_DEFAULT_MODEL}"
ollama pull "$${OLLAMA_DEFAULT_MODEL}"
echo "[ollama-init] done"
restart: "no"
puter:
image: ghcr.io/heyputer/puter:main
pull_policy: always
# Uncomment to build from this directory instead of pulling the published
# image. Also flip pull_policy to `never` so compose doesn't overwrite
# your local build by re-pulling :latest.
# build:
# context: .
# # buildx-only: cross-compile to both archs in a single push
# # platforms:
# # - linux/amd64
# # - linux/arm64
container_name: puter
restart: unless-stopped
depends_on:
valkey:
condition: service_healthy
mariadb:
condition: service_healthy
dynamo:
condition: service_started
s3-init:
condition: service_completed_successfully
# Internal-only: nginx reaches it on the compose network. Uncomment
# to also expose port 4100 directly on the host (useful for debugging).
# ports:
# - "4100:4100"
expose:
- "4100"
environment:
PUID: 1000
PGID: 1000
volumes:
- ./puter/config:/etc/puter
- ./puter/data:/var/puter
# Drop your config.json here — see selfhosted/full-stack.md.
- ./puter/config:/etc/puter:z
# Persistent runtime data (anything your config points at /var/puter).
- ./puter/data/puter:/var/puter:z
healthcheck:
test: wget --no-verbose --tries=1 --spider http://puter.localhost:4100/test || exit 1
interval: 30s
timeout: 3s
retries: 3
start_period: 30s
nginx:
image: nginx:1.27-alpine
container_name: puter-nginx
restart: unless-stopped
depends_on:
puter:
condition: service_started
ports:
- "${HTTP_PORT:-80}:80"
# Uncomment when you enable TLS in nginx/nginx.conf:
# - "${HTTPS_PORT:-443}:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro,z
# TLS certs (fullchain.pem + privkey.pem). Read-only inside.
- ./puter/tls:/etc/nginx/tls:ro,z
healthcheck:
test: ["CMD-SHELL", "wget -qO- --tries=1 --timeout=2 http://localhost/ || exit 1"]
interval: 10s
timeout: 3s
retries: 5
start_period: 5s
+127 -136
View File
@@ -1,139 +1,130 @@
import js from "@eslint/js";
import globals from "globals";
import js from '@eslint/js';
import tseslintPlugin from '@typescript-eslint/eslint-plugin';
import tseslintParser from '@typescript-eslint/parser';
import prettierPlugin from 'eslint-plugin-prettier';
import prettierConfig from 'eslint-config-prettier';
import { defineConfig } from 'eslint/config';
import globals from 'globals';
export default [
js.configs.recommended,
// typescript-eslint's flat/recommended preset is an array of configs (base +
// eslint-recommended overrides + recommended rules). Flatten its rules so we
// can apply them via our own `files`-scoped blocks.
const tsRecommendedRules = tseslintPlugin.configs['flat/recommended'].reduce(
(acc, cfg) => ({ ...acc, ...(cfg.rules ?? {}) }),
{},
);
{
// Global ignores
ignores: [
"**/*.min.js",
"**/src/lib/**",
"**/dist/",
"src/backend/src/public/assets/**",
"incubator/**"
],
},
{
// Top-level and tools use Node
files: [
"tools/**/*.js",
],
languageOptions: {
globals: {
...globals.node,
}
}
},
{
// Back end
files: [
"src/backend/**/*.js",
"mods/**/*.js",
"dev-server.js",
"utils.js",
],
languageOptions: {
globals: {
...globals.node,
"kv": true,
"def": true,
"use": true,
"ll":true,
}
}
},
{
// Front end
files: [
"src/**/*.js",
],
ignores: [
"src/backend/**/*.js",
],
languageOptions: {
globals: {
...globals.browser,
...globals.commonjs,
// Weird false positives
"Buffer": true,
// Puter Common
"puter": true,
"i18n": true,
"html_encode": true,
"html_decode": true,
"isMobile": true,
// Class Registry
"logger": true,
"def": true,
"use": true,
// Libraries
"saveAs": true, // FileSaver
"iro": true, // iro.js color picker
"$": true, // jQuery
"jQuery": true, // jQuery
"JSZip": true, // JSZip
"_": true, // lodash
"QRCode": true, // qrcode
"io": true, // socket.io
"timeago": true, // timeago
"SelectionArea": true, // viselect
// Puter GUI Globals
"set_menu_item_prop": true,
"determine_active_container_parent": true,
"privacy_aware_path": true,
"api_origin": true,
"auth_token": true,
"logout": true,
"is_email": true,
"select_ctxmenu_item": true,
}
}
},
{
// Mods
// NOTE: Mods have backend and frontend parts, so this just includes the globals for both.
files: [
"mods/**/*.js",
],
languageOptions: {
globals: {
...globals.node,
"use": true,
"window": true,
"puter": true,
}
}
},
{
// Tests
files: [
"**/test/**/*.js",
],
languageOptions: {
globals: {
...globals.mocha,
}
}
},
{
// Phoenix
files: [
"src/phoenix/**/*.js",
],
languageOptions: {
globals: {
...globals.node,
}
}
},
{
// Global rule settings
rules: {
"no-prototype-builtins": "off", // Complains about any use of hasOwnProperty()
"no-unused-vars": "off", // Temporary, we just have a lot of these
"no-debugger": "warn",
"no-async-promise-executor": "off", // We do this quite often and it's fine
}
},
const prettierRules = {
...prettierConfig.rules,
'prettier/prettier': 'error',
};
const unusedVarsOptions = {
args: 'after-used',
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
caughtErrorsIgnorePattern: '^_',
destructuredArrayIgnorePattern: '^_',
ignoreRestSiblings: true,
};
const preferConstOptions = {
destructuring: 'all',
ignoreReadBeforeAssign: false,
};
const lintedGlobals = {
...globals.node,
extension: 'readonly',
config: 'readonly',
global_config: 'readonly',
};
const jsFiles = [
'src/backend/**/*.{js,mjs,cjs}',
'extensions/**/*.{js,mjs,cjs}',
];
const tsIgnores = [
'**/*.test.ts',
'**/*.test.mts',
'**/*.spec.ts',
'**/*.spec.mts',
'src/backend/test/**',
'src/backend/tools/**',
'src/backend/vitest.config.ts',
'src/backend/vitest.bench.config.ts',
];
const createTsConfig = ({ files, project }) => ({
files,
ignores: tsIgnores,
languageOptions: {
parser: tseslintParser,
globals: lintedGlobals,
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
projectService: { defaultProject: project },
tsconfigRootDir: import.meta.dirname,
},
},
plugins: {
'@typescript-eslint': tseslintPlugin,
prettier: prettierPlugin,
},
rules: {
...tsRecommendedRules,
...prettierRules,
'@typescript-eslint/no-unused-vars': ['error', unusedVarsOptions],
'@typescript-eslint/no-explicit-any': 'warn',
'prefer-const': ['error', preferConstOptions],
},
});
export default defineConfig([
{
ignores: [
'**/*.dbmig.js',
'dist/**',
'build/**',
'volatile/**',
'node_modules/**',
'puter.js/**',
'apps/**',
'experiment/**',
'workers/**',
'src/public/**',
'src/gui/**',
'src/docs/**',
'src/puter-js/**',
'src/worker/**',
'submodules/**',
'tests/**',
'tools/**',
],
},
{
files: jsFiles,
ignores: ['**/*.test.js'],
plugins: {
js,
prettier: prettierPlugin,
},
extends: ['js/recommended'],
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
globals: lintedGlobals,
},
rules: {
...prettierRules,
'no-unused-vars': ['error', unusedVarsOptions],
'prefer-const': ['error', preferConstOptions],
},
},
createTsConfig({
files: ['src/backend/**/*.ts', 'extensions/**/*.ts'],
project: './tsconfig.json',
}),
]);
-2
View File
@@ -1,2 +0,0 @@
import backend from '@heyputer/backend';
export default backend;
+221
View File
@@ -0,0 +1,221 @@
import type { Request, Response } from 'express';
import { v4 as uuidv4 } from 'uuid';
import {
afterAll,
beforeAll,
describe,
expect,
it,
vi,
} from 'vitest';
import { runWithContext } from '../src/backend/core/context.ts';
import { PuterServer } from '../src/backend/server.ts';
import { setupTestServer } from '../src/backend/testUtil.ts';
import {
handleAppTelemetryUserCount,
handleAppTelemetryUsers,
} from './appTelemetry.ts';
interface CapturedResponse {
body: unknown;
}
const makeReq = (query: Record<string, unknown> = {}): Request =>
({ query }) as unknown as Request;
const makeRes = () => {
const captured: CapturedResponse = { body: undefined };
const res = {
json: vi.fn((value: unknown) => {
captured.body = value;
return res;
}),
status: vi.fn(() => res),
};
return { res: res as unknown as Response, captured };
};
// `handleAppTelemetryUsers` calls `Context.get('actor')` for the permission
// gate. Wrap test calls in `runWithContext` so the ALS lookup resolves.
const callWithActor = async (
actor: { user: { uuid: string; id?: number }; app?: null } | undefined,
fn: () => Promise<void>,
) => runWithContext({ actor }, fn);
let server: PuterServer;
beforeAll(async () => {
server = await setupTestServer();
});
afterAll(async () => {
await server.shutdown();
});
describe('appTelemetry extension — handleAppTelemetryUsers', () => {
it('throws HttpError(400) when app_uuid is missing', async () => {
const { res } = makeRes();
await expect(
handleAppTelemetryUsers(makeReq({}), res),
).rejects.toMatchObject({
statusCode: 400,
message: expect.stringContaining('app_uuid'),
});
});
it('throws HttpError(400) for a non-numeric limit', async () => {
const { res } = makeRes();
await expect(
handleAppTelemetryUsers(
makeReq({ app_uuid: 'app-anything', limit: 'banana' }),
res,
),
).rejects.toMatchObject({
statusCode: 400,
message: expect.stringContaining('limit'),
});
});
it('throws HttpError(400) when offset exceeds the allowed maximum', async () => {
const { res } = makeRes();
await expect(
handleAppTelemetryUsers(
makeReq({ app_uuid: 'app-anything', offset: 1_000_001 }),
res,
),
).rejects.toMatchObject({ statusCode: 400 });
});
it('throws HttpError(404) when the app cannot be found', async () => {
const { res } = makeRes();
await expect(
handleAppTelemetryUsers(
makeReq({ app_uuid: 'app-does-not-exist' }),
res,
),
).rejects.toMatchObject({
statusCode: 404,
message: 'App not found',
});
});
it('throws HttpError(403) when the caller does not own the app', async () => {
// Seed an owner user + an app belonging to them, then call the
// handler as a *different* user. The real permission service should
// reject since the caller has no `apps-of-user:<owner>:write` perm.
const owner = await server.stores.user.create({
username: `owner_${Math.random().toString(36).slice(2, 8)}`,
uuid: uuidv4(),
password: 'x',
email: null,
});
const slug = Math.random().toString(36).slice(2, 8);
const app = await server.stores.app.create(
{
name: `app_${slug}`,
title: `App ${slug}`,
index_url: `https://example.com/${slug}`,
},
{ ownerUserId: owner.id as number },
);
const intruder = await server.stores.user.create({
username: `intruder_${Math.random().toString(36).slice(2, 8)}`,
uuid: uuidv4(),
password: 'x',
email: null,
});
const { res } = makeRes();
await callWithActor(
{ user: { uuid: intruder.uuid, id: intruder.id as number } },
async () => {
await expect(
handleAppTelemetryUsers(
makeReq({ app_uuid: app!.uid }),
res,
),
).rejects.toMatchObject({
statusCode: 403,
message: 'Permission denied',
});
},
);
});
it('returns an empty list for an owned app with no authenticated users', async () => {
const owner = await server.stores.user.create({
username: `owner2_${Math.random().toString(36).slice(2, 8)}`,
uuid: uuidv4(),
password: 'x',
email: null,
});
const slug = Math.random().toString(36).slice(2, 8);
const app = await server.stores.app.create(
{
name: `app2_${slug}`,
title: `App2 ${slug}`,
index_url: `https://example.com/${slug}`,
},
{ ownerUserId: owner.id as number },
);
const { res, captured } = makeRes();
await callWithActor(
{ user: { uuid: owner.uuid, id: owner.id as number } },
async () => {
await handleAppTelemetryUsers(
makeReq({ app_uuid: app!.uid }),
res,
);
},
);
expect(captured.body).toEqual([]);
});
});
describe('appTelemetry extension — handleAppTelemetryUserCount', () => {
it('throws HttpError(400) when app_uuid is missing', async () => {
const { res } = makeRes();
await expect(
handleAppTelemetryUserCount(makeReq({}), res),
).rejects.toMatchObject({ statusCode: 400 });
});
it('throws HttpError(404) for an unknown app_uuid', async () => {
const { res } = makeRes();
await expect(
handleAppTelemetryUserCount(
makeReq({ app_uuid: 'app-not-here' }),
res,
),
).rejects.toMatchObject({ statusCode: 404 });
});
it('returns { count: 0 } for an app with no authenticated users', async () => {
const owner = await server.stores.user.create({
username: `counto_${Math.random().toString(36).slice(2, 8)}`,
uuid: uuidv4(),
password: 'x',
email: null,
});
const slug = Math.random().toString(36).slice(2, 8);
const app = await server.stores.app.create(
{
name: `appcount_${slug}`,
title: `AppCount ${slug}`,
index_url: `https://example.com/${slug}`,
},
{ ownerUserId: owner.id as number },
);
const { res, captured } = makeRes();
await handleAppTelemetryUserCount(
makeReq({ app_uuid: app!.uid }),
res,
);
expect(captured.body).toEqual({ count: 0 });
});
});
+131
View File
@@ -0,0 +1,131 @@
import type { Request, Response } from 'express';
import { Context } from '@heyputer/backend/src/core';
import { HttpError } from '@heyputer/backend/src/core/http';
import { extension } from '@heyputer/backend/src/extensions';
const clients = extension.import('client');
const stores = extension.import('store');
const services = extension.import('service');
const DEFAULT_LIMIT = 100;
const MAX_LIMIT = 1000;
const MAX_OFFSET = 100_000;
const parseIntParam = (
value: unknown,
{
key,
min,
max,
fallback,
}: { key: string; min: number; max: number; fallback: number },
): number => {
if (value === undefined || value === null) return fallback;
const parsed =
typeof value === 'number'
? value
: typeof value === 'string' && value.trim() !== ''
? Number(value)
: NaN;
if (
!Number.isFinite(parsed) ||
!Number.isInteger(parsed) ||
parsed < min ||
parsed > max
) {
throw new HttpError(
400,
`${key} must be an integer between ${min} and ${max}`,
);
}
return parsed;
};
export const handleAppTelemetryUsers = async (
req: Request,
res: Response,
): Promise<void> => {
const { app_uuid } = req.query as Record<string, string>;
if (!app_uuid) throw new HttpError(400, 'Missing `app_uuid`');
const safeLimit = parseIntParam(req.query.limit, {
key: 'limit',
min: 1,
max: MAX_LIMIT,
fallback: DEFAULT_LIMIT,
});
const safeOffset = parseIntParam(req.query.offset, {
key: 'offset',
min: 0,
max: MAX_OFFSET,
fallback: 0,
});
const app = await stores.app.getByUid(app_uuid);
if (!app) throw new HttpError(404, 'App not found');
// `apps-of-user:<uuid>:write` — the implicator keys on the owner's
// UUID, not the numeric id. Look up the owner explicitly. v1 got
// this for free because its entity-storage layer eager-joined the
// owner row; v2's AppStore.getByUid returns the raw row with only
// `owner_user_id` populated.
const ownerId = (app as { owner_user_id?: number }).owner_user_id;
if (!ownerId) throw new HttpError(404, 'App owner not found');
const owner = (await stores.user.getById(ownerId)) as {
uuid?: string;
} | null;
if (!owner?.uuid) throw new HttpError(404, 'App owner not found');
const actor = Context.get('actor');
const ownsApp = await services.permission
.check(actor!, `apps-of-user:${owner.uuid}:write`)
.catch(() => false);
if (!ownsApp) throw new HttpError(403, 'Permission denied');
const users = await clients.db.read(
`SELECT u.username, u.uuid FROM user_to_app_permissions p
INNER JOIN user u ON p.user_id = u.id
WHERE p.permission = 'flag:app-is-authenticated' AND p.app_id = ?
ORDER BY (p.dt IS NOT NULL), p.dt, p.user_id
LIMIT ? OFFSET ?`,
[(app as Record<string, unknown>).id, safeLimit, safeOffset],
);
res.json(
(users as Array<{ username: string; uuid: string }>).map((e) => ({
user: e.username,
user_uuid: e.uuid,
})),
);
};
export const handleAppTelemetryUserCount = async (
req: Request,
res: Response,
): Promise<void> => {
const { app_uuid } = req.query as Record<string, string>;
if (!app_uuid) throw new HttpError(400, 'Missing `app_uuid`');
const app = await stores.app.getByUid(app_uuid);
if (!app) throw new HttpError(404, 'App not found');
const [row] = (await clients.db.read(
`SELECT COUNT(*) AS n FROM user_to_app_permissions
WHERE permission = 'flag:app-is-authenticated' AND app_id = ?`,
[(app as Record<string, unknown>).id],
)) as Array<{ n: number }>;
res.json({ count: row?.n ?? 0 });
};
extension.get(
'/app-telemetry/users',
{ subdomain: 'api', requireAuth: true },
handleAppTelemetryUsers,
);
extension.get(
'/app-telemetry/user-count',
{ subdomain: 'api', requireAuth: true },
handleAppTelemetryUserCount,
);
+421
View File
@@ -0,0 +1,421 @@
import { extension } from '@heyputer/backend/src/extensions';
import { PuterService } from '@heyputer/backend/src/services/types.js';
import { nativeImport } from '@heyputer/backend/src/util/nativeImport.js';
import { spawn, type ChildProcess } from 'node:child_process';
import { existsSync, readFileSync } from 'node:fs';
import { createRequire } from 'node:module';
import path from 'node:path';
import { pathToFileURL } from 'node:url';
const requireFromHere = createRequire(__filename);
const webpack = requireFromHere('webpack') as typeof import('webpack');
type EnvFactory = (args: {
global_config: Record<string, unknown> | null;
}) => string | undefined;
type EnvMap = Record<string, string | undefined | EnvFactory>;
type CommandEntry = {
name: string;
directory: string;
command: string;
args?: string[];
env?: EnvMap;
};
type WebpackEntry = {
name?: string;
directory: string;
env?: EnvMap;
onConfig?: (config: Record<string, unknown>) => void;
};
type WebpackStats = {
hasErrors: () => boolean;
toJson: (options: Record<string, unknown>) => {
errors?: Array<{ message?: string }>;
warnings?: Array<{ message?: string }>;
};
};
type DevWatcherConfig = {
enabled?: boolean;
root?: string;
commands?: CommandEntry[];
webpack?: WebpackEntry[];
ready_delay_ms?: number;
};
class ProxyLogger {
#buffer = '';
constructor(private readonly log: (line: string) => void) {}
attach(stream: NodeJS.ReadableStream | null): void {
if (!stream) return;
stream.on('data', (chunk) => {
this.#buffer += chunk.toString();
let lineEndIndex = this.#buffer.indexOf('\n');
while (lineEndIndex !== -1) {
const line = this.#buffer.substring(0, lineEndIndex);
this.log(line);
this.#buffer = this.#buffer.substring(lineEndIndex + 1);
lineEndIndex = this.#buffer.indexOf('\n');
}
});
stream.on('end', () => {
if (this.#buffer.length) {
this.log(this.#buffer);
this.#buffer = '';
}
});
}
}
const findPackageRoot = (): string => {
let dir = __dirname;
for (;;) {
if (
existsSync(path.join(dir, 'package.json')) &&
existsSync(path.join(dir, 'src', 'gui')) &&
existsSync(path.join(dir, 'src', 'puter-js'))
) {
return dir;
}
const parent = path.dirname(dir);
if (parent === dir) break;
dir = parent;
}
return path.resolve(__dirname, '..', '..');
};
const resolveFromRoot = (root: string, value: string): string =>
path.isAbsolute(value) ? value : path.resolve(root, value);
const defaultWebpackEntries: WebpackEntry[] = [
{
name: 'puter.js',
directory: 'src/puter-js',
onConfig: (config) => {
const output = (config.output ?? {}) as Record<string, unknown>;
output.filename = 'puter.dev.js';
config.output = output;
config.devtool = 'source-map';
},
env: {
PUTER_ORIGIN: ({ global_config }) =>
String(global_config?.origin ?? ''),
PUTER_API_ORIGIN: ({ global_config }) =>
String(global_config?.api_base_url ?? ''),
},
},
{
name: 'gui',
directory: 'src/gui',
},
];
class DevWatcherService extends PuterService {
#processes: Array<{ name: string; proc: ChildProcess }> = [];
#watchers: ReturnType<ReturnType<typeof webpack>['watch']>[] = [];
#started = false;
#packageRoot = findPackageRoot();
override async onServerStart(): Promise<void> {
if (!this.#shouldStart()) return;
if (this.#started) return;
this.#started = true;
const devwatch = this.#devwatchConfig();
const root = resolveFromRoot(
this.#packageRoot,
devwatch.root ?? this.#packageRoot,
);
const commands = devwatch.commands ?? [];
const webpackEntries = devwatch.webpack ?? defaultWebpackEntries;
console.log(`[devwatch] starting watchers from ${root}`);
await Promise.all([
...commands.map((entry) => this.#startCommand(root, entry)),
...webpackEntries.map((entry) =>
this.#startWebpackWatcher(root, entry),
),
]);
const readyDelayMs = devwatch.ready_delay_ms ?? 5000;
if (readyDelayMs > 0) {
await new Promise((resolve) => setTimeout(resolve, readyDelayMs));
}
}
override async onServerShutdown(): Promise<void> {
await Promise.all(
this.#watchers.map(
(watcher) =>
new Promise<void>((resolve) => {
watcher?.close((err) => {
if (err) {
console.warn(
'[devwatch] failed to close webpack watcher:',
err,
);
}
resolve();
});
}),
),
);
this.#watchers = [];
for (const { name, proc } of this.#processes) {
if (proc.exitCode !== null || proc.killed) continue;
console.log(`[devwatch:${name}] stopping process`);
proc.kill();
}
this.#processes = [];
}
#devwatchConfig(): DevWatcherConfig {
const raw = (this.config as Record<string, unknown>).devwatch;
return raw && typeof raw === 'object' ? (raw as DevWatcherConfig) : {};
}
#shouldStart(): boolean {
const config = this.config as Record<string, unknown>;
const devwatch = this.#devwatchConfig();
if (config.no_devwatch === true) return false;
if (devwatch.enabled === false) return false;
if (devwatch.enabled === true) return true;
return this.config.env === 'dev';
}
async #startCommand(root: string, entry: CommandEntry): Promise<void> {
const fullpath = resolveFromRoot(root, entry.directory);
console.log(`[devwatch] starting ${entry.name} in ${fullpath}`);
const proc = spawn(entry.command, entry.args ?? [], {
shell: true,
cwd: fullpath,
env: {
...process.env,
...this.#evaluateEnv(entry.env),
},
});
this.#processes.push({ name: entry.name, proc });
new ProxyLogger((line) =>
console.log(`[devwatch:${entry.name}:1] ${line}`),
).attach(proc.stdout);
new ProxyLogger((line) =>
console.warn(`[devwatch:${entry.name}:2] ${line}`),
).attach(proc.stderr);
proc.on('exit', () => {
console.log(
`[devwatch:${entry.name}:exit] process exited (${proc.exitCode})`,
);
this.#processes = this.#processes.filter(
(instance) => instance.proc !== proc,
);
});
}
async #startWebpackWatcher(
root: string,
entry: WebpackEntry,
): Promise<void> {
const directory = entry.directory;
let { configjsPath: webpackConfigPath, moduleType } = this.#getConfigJs(
{
root,
directory,
configIsFor: 'webpack',
possibleConfigNames: [
['webpack.config.js', 'package.json'],
['webpack.config.cjs', 'commonjs'],
['webpack.config.mjs', 'module'],
],
},
);
let webpackConfig = await this.#withEnv(entry.env, async () => {
if (moduleType === 'module') {
webpackConfigPath = pathToFileURL(webpackConfigPath).href;
const imported = await nativeImport<{ default?: unknown }>(
webpackConfigPath,
);
return imported.default ?? imported;
}
return requireFromHere(webpackConfigPath);
});
if (typeof webpackConfig === 'function') {
webpackConfig = await this.#withEnv(entry.env, () =>
(webpackConfig as () => unknown)(),
);
}
this.#normalizeWebpackContext(root, directory, webpackConfig);
if (entry.onConfig) {
entry.onConfig(webpackConfig as Record<string, unknown>);
}
const compiler = webpack(
webpackConfig as Parameters<typeof webpack>[0],
);
const watcher = compiler.watch({}, (err, stats) => {
this.#handleWebpackUpdate(entry, err, stats);
});
this.#watchers.push(watcher);
}
#getConfigJs(args: {
root: string;
directory: string;
configIsFor: string;
possibleConfigNames: Array<
[string, 'package.json' | 'commonjs' | 'module']
>;
}): {
configjsPath: string;
moduleType: 'commonjs' | 'module';
} {
const { root, directory, configIsFor, possibleConfigNames } = args;
let configjsPath: string | undefined;
let moduleType: 'package.json' | 'commonjs' | 'module' | undefined;
for (const [configName, supposedModuleType] of possibleConfigNames) {
const supposedPath = path.join(root, directory, configName);
if (existsSync(supposedPath)) {
configjsPath = supposedPath;
moduleType = supposedModuleType;
break;
}
}
if (!configjsPath || !moduleType) {
throw new Error(
`could not find ${configIsFor} config for: ${directory}`,
);
}
if (moduleType === 'package.json') {
const packageJSONPath = path.join(root, directory, 'package.json');
const packageJSONObject = JSON.parse(
readFileSync(packageJSONPath, 'utf8'),
) as { type?: 'commonjs' | 'module' };
moduleType = packageJSONObject.type ?? 'module';
}
return {
configjsPath,
moduleType,
};
}
async #withEnv<T>(env: EnvMap | undefined, fn: () => T | Promise<T>) {
if (!env) return fn();
const oldEnv = process.env;
process.env = {
...oldEnv,
...this.#evaluateEnv(env),
};
try {
return await fn();
} finally {
process.env = oldEnv;
}
}
#evaluateEnv(env: EnvMap | undefined): Record<string, string> {
const out: Record<string, string> = {};
if (!env) return out;
for (const [key, value] of Object.entries(env)) {
try {
const evaluated =
typeof value === 'function'
? value({
global_config: this.config as Record<
string,
unknown
>,
})
: value;
if (evaluated) out[key] = String(evaluated);
} catch (e) {
const msg = (e as Error).message;
if (
!msg.includes('Cannot read properties of null') &&
!msg.includes('Cannot read properties of undefined')
) {
console.warn(
`[devwatch] could not evaluate env function for ${key}: ${msg}`,
);
}
}
}
return out;
}
#normalizeWebpackContext(
root: string,
directory: string,
webpackConfig: unknown,
): void {
const configs = Array.isArray(webpackConfig)
? webpackConfig
: [webpackConfig];
for (const config of configs) {
if (!config || typeof config !== 'object') continue;
const obj = config as Record<string, unknown>;
obj.context = obj.context
? path.resolve(path.join(root, directory), String(obj.context))
: path.join(root, directory);
}
}
#handleWebpackUpdate(
entry: WebpackEntry,
err: Error | null | undefined,
stats: WebpackStats | undefined,
): void {
const name = entry.name ?? entry.directory;
const firstEventKey = `__devwatch_first_${entry.directory}`;
const firstEvent = !(entry as Record<string, unknown>)[firstEventKey];
(entry as Record<string, unknown>)[firstEventKey] = true;
if (err || stats?.hasErrors()) {
const info = stats?.toJson({
all: false,
errors: true,
warnings: true,
});
console.error(
`[devwatch] error information: ${name} using Webpack`,
{
err: err ? err.message : null,
errors: info?.errors?.map((e) => e.message) ?? [],
warnings: info?.warnings?.map((w) => w.message) ?? [],
},
);
console.error(`[devwatch] failed to update ${name} using Webpack`);
return;
}
if (!firstEvent) {
console.log(`[devwatch] updated ${name} using Webpack`);
}
}
}
extension.registerService('devWatcher', DevWatcherService);
Loaded 100 of 1999 files, more files were not shown because too many files have changed in this diff. Show more