Skip to content

v0.9.0: Merge pull request #160 from pandemicsyn/changeset-release/main

Choose a tag to compare

@github-actions github-actions released this 08 Nov 20:46
07fe483

Beachside v0.9.0

@beachside/adapter

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). Docs, examples and skills show the split form, Beachside.connect({ adapter, credentials, config }), which works for every adapter.

    Breaking for Vercel: the definition is now vercelAdapter, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

beachside

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). Docs, examples and skills show the split form, Beachside.connect({ adapter, credentials, config }), which works for every adapter.

    Breaking for Vercel: the definition is now vercelAdapter, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

  • #164 7b9fa24 Thanks @pandemicsyn! - Buffered readFile/writeFile (and the text variants) have no default size limit: files larger than the adapter's buffered limit move through its file streams underneath. maxBytes stays as an optional guard and the 16 MiB ceiling is gone. Adapters without file streams keep their own limit, and the error names it. capabilities().maxFileBytes now reports the adapter's buffered limit. exec stdin also accepts an AsyncIterable<Uint8Array> or ReadableStream<Uint8Array>, and byte or text input over 1 MiB. These are streamed to the command as it runs on adapters with incremental process stdin (Daytona, E2B, Vercel), with deadlineSeconds enforced locally.

Patch Changes

  • #167 3f414a8 Thanks @pandemicsyn! - E2B streamed writes, and buffered writes over 1 MiB, work in sticky directories such as /tmp again; they used to fail there with "stream completion could not be confirmed". When a streamed E2B write fails, the error now names the step that failed and keeps the provider's original error as its cause.
  • Updated dependencies [d137e90]:
    • @beachside/adapter@0.9.0

@beachside/daytona

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). Docs, examples and skills show the split form, Beachside.connect({ adapter, credentials, config }), which works for every adapter.

    Breaking for Vercel: the definition is now vercelAdapter, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • #169 1c36875 Thanks @pandemicsyn! - Writing to a path whose folder does not exist yet now creates the missing folders on Daytona, boxd and Vercel, as E2B and Modal already did for writes. This covers writeFile, writeFileStream and copyFile, and E2B copyFile now creates them too.

    Daytona no longer leaves .beachside-exec-* and .beachside-write-* folders in /tmp after commands and writes succeed. E2B also removes its command capture files and write stages once an interrupted operation is recovered.

  • Updated dependencies [d137e90]:

    • @beachside/adapter@0.9.0

@beachside/e2b

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). Docs, examples and skills show the split form, Beachside.connect({ adapter, credentials, config }), which works for every adapter.

    Breaking for Vercel: the definition is now vercelAdapter, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • #169 1c36875 Thanks @pandemicsyn! - Writing to a path whose folder does not exist yet now creates the missing folders on Daytona, boxd and Vercel, as E2B and Modal already did for writes. This covers writeFile, writeFileStream and copyFile, and E2B copyFile now creates them too.

    Daytona no longer leaves .beachside-exec-* and .beachside-write-* folders in /tmp after commands and writes succeed. E2B also removes its command capture files and write stages once an interrupted operation is recovered.

  • #170 2b29fdd Thanks @pandemicsyn! - E2B overwrites of an existing file directly in a sticky directory such as /tmp now succeed. They used to fail with an HTTP 500 from the sandbox because the kernel refuses to let E2B reopen a file there that belongs to the sandbox user; the adapter now uploads a fresh copy beside the file and copies it over as the sandbox user.

  • #167 3f414a8 Thanks @pandemicsyn! - E2B streamed writes, and buffered writes over 1 MiB, work in sticky directories such as /tmp again; they used to fail there with "stream completion could not be confirmed". When a streamed E2B write fails, the error now names the step that failed and keeps the provider's original error as its cause.

  • Updated dependencies [d137e90]:

    • @beachside/adapter@0.9.0

@beachside/boxd

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). Docs, examples and skills show the split form, Beachside.connect({ adapter, credentials, config }), which works for every adapter.

    Breaking for Vercel: the definition is now vercelAdapter, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • #169 1c36875 Thanks @pandemicsyn! - Writing to a path whose folder does not exist yet now creates the missing folders on Daytona, boxd and Vercel, as E2B and Modal already did for writes. This covers writeFile, writeFileStream and copyFile, and E2B copyFile now creates them too.

    Daytona no longer leaves .beachside-exec-* and .beachside-write-* folders in /tmp after commands and writes succeed. E2B also removes its command capture files and write stages once an interrupted operation is recovered.

  • Updated dependencies [d137e90]:

    • @beachside/adapter@0.9.0

@beachside/boat

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). Docs, examples and skills show the split form, Beachside.connect({ adapter, credentials, config }), which works for every adapter.

    Breaking for Vercel: the definition is now vercelAdapter, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • Updated dependencies [d137e90]:
    • @beachside/adapter@0.9.0

@beachside/runloop

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). Docs, examples and skills show the split form, Beachside.connect({ adapter, credentials, config }), which works for every adapter.

    Breaking for Vercel: the definition is now vercelAdapter, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • Updated dependencies [d137e90]:
    • @beachside/adapter@0.9.0

@beachside/modal

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). Docs, examples and skills show the split form, Beachside.connect({ adapter, credentials, config }), which works for every adapter.

    Breaking for Vercel: the definition is now vercelAdapter, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • Updated dependencies [d137e90]:
    • @beachside/adapter@0.9.0

@beachside/vercel

Minor Changes

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). Docs, examples and skills show the split form, Beachside.connect({ adapter, credentials, config }), which works for every adapter.

    Breaking for Vercel: the definition is now vercelAdapter, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • #169 1c36875 Thanks @pandemicsyn! - Writing to a path whose folder does not exist yet now creates the missing folders on Daytona, boxd and Vercel, as E2B and Modal already did for writes. This covers writeFile, writeFileStream and copyFile, and E2B copyFile now creates them too.

    Daytona no longer leaves .beachside-exec-* and .beachside-write-* folders in /tmp after commands and writes succeed. E2B also removes its command capture files and write stages once an interrupted operation is recovered.

  • Updated dependencies [d137e90]:

    • @beachside/adapter@0.9.0

@beachside/cli

Minor Changes

  • #161 1015d07 Thanks @pandemicsyn! - Report command status on terminal tabs with the Program Status Protocol (OSC 7501): inside Rex, or with BEACHSIDE_PROGRAM_STATUS=on, create, run, exec, rm, gc and other sandbox-changing commands show working, done or error. Reports go to stderr only when it is a terminal, so --json and piped output are unchanged.

  • #172 a633a1c Thanks @pandemicsyn! - Inside Rex (or with BEACHSIDE_PROGRAM_STATUS=on), cp and push into a sandbox now show upload progress on the terminal tab, and run, exec and sh send a desktop notification (OSC 777) when they finish after more than 30 seconds. BEACHSIDE_NOTIFY_AFTER=<seconds>|off changes or turns off the notification.

  • #159 d137e90 Thanks @pandemicsyn! - Make provider setup consistent. Every first-party package now exports its definition as <provider>Adapter and a factory named after the provider: boxd(), boat(), runloop(), modal() and vercel() join daytona() and e2b(). Docs, examples and skills show the split form, Beachside.connect({ adapter, credentials, config }), which works for every adapter.

    Breaking for Vercel: the definition is now vercelAdapter, and vercel is the factory. Replace adapter: vercel with adapter: vercelAdapter, or call Beachside.connect(vercel({ token, teamId, projectId })). Passing a factory where a definition belongs now fails with INVALID_ARGUMENT and names both forms.

Patch Changes

  • #171 fe54090 Thanks @pandemicsyn! - snapshot create no longer leaves a Daytona snapshot uncertain when the capture outlives the adapter's wait: the CLI sends the pending source restart and records the snapshot. snapshot rm and snapshot inspect finish such a capture the same way, so an uncertain capture can be deleted. A profile's OCI config.environment now follows the same build rule as --image: create reuses the recorded image build instead of starting another build.

  • #164 366a0c9 Thanks @pandemicsyn! - cp and cat handle files of any size: they stream where the provider streams files, and otherwise move the file in 1 MiB parts that the sandbox joins or splits. A failed download no longer truncates the local file. exec, sh and run stream --stdin and --stdin-file as the input arrives where the provider takes incremental stdin (Daytona, E2B, Vercel), so input has no size limit and can stay open (with --json or --no-stream, input over 1 MiB uses the SDK's streamed stdin). On other providers, input over 1 MiB fails with a hint to copy it in and redirect it.

  • #173 29d0a39 Thanks @pandemicsyn! - Clarify in the README that the CLI never prompts for input and that exit codes indicate what to do next.

  • Updated dependencies [d137e90, 3f414a8, 7b9fa24]:

    • beachside@0.9.0
    • @beachside/adapter@0.9.0