Skip to content

Releases

dsh-edge 0.35.0

Choose a tag to compare

@github-actions github-actions released this 10 Nov 07:03
1cfad17

dsh-edge 0.35.0

Stable Edge release for the DeepSeek Harness 0.2.2-rc.1 baseline upgrade, from Edge 0.34.0 / Harness 0.2.1-rc.4. It promotes the runtime validated in 0.35.0-alpha.1; the exactly pinned upstream baseline remains a prerelease.

Changed

  • Pin the published Harness dependency closure to 0.2.2-rc.1, refresh upstream parity, and assemble the new browser plugins and declared assets.
  • Adapt the Host Schedule API, including RRULE, revisions, pause/resume, manual run and delivery history, while keeping the original Session target, SQL task storage and DO alarms. Automatic new-Session targets remain unavailable. Create tasks through the conversation; the unsupported manual creation form is disabled. Editing a paused task does not resume it.
  • Add bounded Copy as Markdown: 2,048 events and 4 MiB input/output budgets. Oversized copies return HTTP 413 and direct users to streaming Download session logs. One copy per DO remains admitted through body completion; excess requests return 429 with Retry-After, and stalled bodies expire after 30 seconds.
  • Retain Trajectory with bounded live raw JSON: 256 KiB per result, 1 MiB per Session and 4 MiB globally. Oversized, evicted or cold results are explicitly unavailable.
  • Add filesystem patch/delete/move provider methods and deletion tracking. The apply_patch tool remains disabled, and the Edge keeps its read-before-write observation policy.
  • Adapt model/preset services, native/PTC tool executors, staged image uploads and file streaming to the new public interfaces. List summaries now use upstream summary keys; complete projections, including statistics and todos, remain available through the dedicated Session API. Subagent model discovery can show the inherited route even when choosing a different child model is disabled.
  • Correct startup profiling to inspect each promoted Worker artifact rather than allowing Wrangler to fall back to source configuration.
  • Bound alarm batches and reuse recovery deadlines; paginate before resolving task execution state and use the existing due index to avoid repeated full task scans.
  • Release request timeout timers when RPC, command admission, MCP and OAuth operations settle, allowing an otherwise idle Durable Object to hibernate. The idle/reconnect browser regression now runs by default.
  • Refresh discovered model listings on stale access, retaining TTL and shared in-flight loads, without an idle background timer.

Compatibility and limits

Existing Session and workspace state is preserved. This is not a promise of binary-only downgrade: new RRULE tasks and inherited delivery acknowledgments in ordinary forks may be unreadable by the old baseline. Preserve pre-upgrade state for recovery.

Web Fetch retains Workers fetch, per-hop URL validation and the existing strictly-public platform flag. URL checks alone do not pin DNS. Public fetching passed bounded staging acceptance; private-resolving DNS boundaries remain unverified. Account budget and a usable recovery process must be checked for each production deployment.

See the baseline adaptation record for all package dispositions, limits, validation and remaining gates.

Acceptance and known capacity limit

  • Released-state upgrade from 0.34.0 passed all 11 local checks. Published alpha artifacts passed Direct, Dynamic and Container validation.
  • In the local nine-turn comparison, SQL rows written were 441 versus 443 on 0.34.0; KV/alarm writes were 36 versus 36. Within the candidate, batching reduced 128 task executions from 128 to 4 alarm callbacks and from 385 to 9 setAlarm calls; that optimization comparison is not against 0.34.0.
  • Bounded staging acceptance covered real-model conversations, files and attachments, Container commands, Markdown, Trajectory and task lifecycle, including native browser controls. Passive observation confirmed an alarm-triggered DO reconstruction with one delivery and a completed reply, approximately 0.77 seconds after the scheduled time.
  • Long-history capacity remains a known risk: local combined-workload heap samples reached 170.1 MiB, while the old release reached 172.9 MiB in its comparison. GC timing prevents a precise relative-memory conclusion; neither result demonstrates safety below the Workers memory limit. Bounded staging samples peaked at approximately 83.7 MiB with no recorded CPU/memory-exceeded or fatal-internal errors, but they do not establish worst-case capacity. This release does not claim to resolve resident-history pressure or provide a validated safe history/session-count threshold.

The long-history capacity risk is tracked separately from the baseline promotion. New recovery tooling and production deployment are outside this release change.

dsh-edge 0.35.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 09 Nov 16:48
9eb680a

dsh-edge 0.35.0-alpha.1

Prerelease for the DeepSeek Harness 0.2.2-rc.1 baseline upgrade, from Edge 0.34.0 / Harness 0.2.1-rc.4. This alpha is intended for staging evaluation and does not indicate production acceptance.

Changed

  • Pin the published Harness dependency closure to 0.2.2-rc.1, refresh upstream parity, and assemble the new browser plugins and declared assets.
  • Adapt the Host Schedule API, including RRULE, revisions, pause/resume, manual run and delivery history, while keeping the original Session target, SQL task storage and DO alarms. Automatic new-Session targets remain unavailable. Create tasks through the conversation; the unsupported manual creation form is disabled. Editing a paused task does not resume it.
  • Add bounded Copy as Markdown: 2,048 events and 4 MiB input/output budgets. Oversized copies return HTTP 413 and direct users to streaming Download session logs. One copy per DO remains admitted through body completion; excess requests return 429 with Retry-After, and stalled bodies expire after 30 seconds.
  • Retain Trajectory with bounded live raw JSON: 256 KiB per result, 1 MiB per Session and 4 MiB globally. Oversized, evicted or cold results are explicitly unavailable.
  • Add filesystem patch/delete/move provider methods and deletion tracking. The apply_patch tool remains disabled, and the Edge keeps its read-before-write observation policy.
  • Adapt model/preset services, native/PTC tool executors, staged image uploads and file streaming to the new public interfaces. List summaries now use upstream summary keys; complete projections, including statistics and todos, remain available through the dedicated Session API. Subagent model discovery can show the inherited route even when choosing a different child model is disabled.
  • Correct startup profiling to inspect each promoted Worker artifact rather than allowing Wrangler to fall back to source configuration.
  • Bound alarm batches and reuse recovery deadlines; paginate before resolving task execution state and use the existing due index to avoid repeated full task scans.
  • Release request timeout timers when RPC, command admission, MCP and OAuth operations settle, allowing an otherwise idle Durable Object to hibernate. The idle/reconnect browser regression now runs by default.
  • Refresh discovered model listings on stale access, retaining TTL and shared in-flight loads, without an idle background timer.

Compatibility and limits

Existing Session and workspace state is preserved. This is not a promise of binary-only downgrade: new RRULE tasks and inherited delivery acknowledgments in ordinary forks may be unreadable by the old baseline. Preserve pre-upgrade state for recovery.

Web Fetch retains Workers fetch, per-hop URL validation and the existing strictly-public platform flag. URL checks alone do not pin DNS. Production egress, memory pressure and account quota remain staging acceptance gates.

See the baseline adaptation record for all package dispositions, limits, validation and remaining gates.

dsh-edge 0.34.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 07:12
5bdfed3

dsh-edge 0.34.0

Moves the upstream baseline to DeepSeek Harness 0.2.1-rc.4, a fix-only release. Published to the stable npm latest channel, with the same code as 0.34.0-alpha.1, which passed a staging run (below). The session format stays V4.

Changed

  • Upstream baseline 0.2.1-rc.4 (#397): every @deepseek-ai/dsh-* package moves from 0.2.1-rc.3. Most packages change only their version.
  • Conversation View tabs: a tab shows its full-name tooltip only when its label is too long for the tab. The More conversation views button keeps its plain name and is highlighted when the active View is folded into it; the menu marks that View as current.
  • Not affecting the Edge: upstream's other two fixes keep diagnostics off stdout in ACP mode, for the DeepSeek account provider and for MCP resource listing. The Edge signs in with an API key, and its own MCP client lists resources only on servers that declare them.

Known limitations

The limitations listed for 0.33.0 still hold.

Validation

pnpm run check passes 1,129 tests. Every Edge patch re-applies, and the two that inline the Harness version for the Worker bundle (dsh-llm, dsh-repeat-tool-reminder) now carry 0.2.1-rc.4. The upstream reference keeps its 200 entries.

Integration runs against both release artifacts (Direct and Isolated), and the Linux Container integration passes. Snapshots are unchanged. The narrow-window browser check now confirms the switch by the menu row marked as current, since the More button no longer names the active View.

Measured locally in the Workers runtime:

  • row-cost.probe.mjs against 0.33.0: every step writes and reads the same rows (443 SQL rows and 36 KV and alarm writes over nine plain turns).
  • upgrade-from-release.probe.mjs upgrades state created by the published 0.33.0, passing 11 checks.

On a staging instance upgraded from 0.33.0 to 0.34.0-alpha.1 (Isolated, with the Linux Container):

  • readiness reported upstream 0.2.1-rc.4;
  • the 54 sessions from before the upgrade were still listed;
  • a DeepSeek-V4.1-Flash turn completed;
  • the model catalog listed DeepSeek-V4.1-Flash and DeepSeek-V4-Pro with their reasoning levels;
  • the More conversation views button kept its plain name, and with every View in the tab row its menu showed only "Every view is in the tab row".

Folding into More on a narrow window was checked by the browser test above rather than on staging.

Upgrade with npx dsh-edge@latest upgrade and choose "Update it", then reload the page. The Web page updates at once, but the instance behind it can keep running the previous version for a few minutes after an upgrade.

dsh-edge 0.34.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Oct 06:04
d1893eb

dsh-edge 0.34.0-alpha.1

Moves the upstream baseline to DeepSeek Harness 0.2.1-rc.4, a fix-only release. Published to npm's next channel; latest remains on 0.33.0. The session format stays V4.

Changed

  • Upstream baseline 0.2.1-rc.4 (#397): every @deepseek-ai/dsh-* package moves from 0.2.1-rc.3. Most packages change only their version.
  • Conversation View tabs: a tab shows its full-name tooltip only when its label is too long for the tab. The More conversation views button keeps its plain name and is highlighted when the active View is folded into it; the menu marks that View as current.
  • Not affecting the Edge: upstream's other two fixes keep diagnostics off stdout in ACP mode, for the DeepSeek account provider and for MCP resource listing. The Edge signs in with an API key, and its own MCP client lists resources only on servers that declare them.

Known limitations

The limitations listed for 0.33.0 still hold.

Validation

pnpm run check passes 1,129 tests. Every Edge patch re-applies, and the two that inline the Harness version for the Worker bundle (dsh-llm, dsh-repeat-tool-reminder) now carry 0.2.1-rc.4. The upstream reference keeps its 200 entries.

Integration runs against both release artifacts (Direct and Isolated), and the Linux Container integration passes. Snapshots are unchanged. The narrow-window browser check now confirms the switch by the menu row marked as current, since the More button no longer names the active View.

Measured locally in the Workers runtime:

  • row-cost.probe.mjs against 0.33.0: every step writes and reads the same rows (443 SQL rows and 36 KV and alarm writes over nine plain turns).
  • upgrade-from-release.probe.mjs upgrades state created by the published 0.33.0, passing 11 checks.

Not yet validated on a staging instance.

Upgrade a test instance with npx dsh-edge@next upgrade and choose "Update it".

dsh-edge 0.33.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 11:31
c0baac9

dsh-edge 0.33.0

Moves the upstream baseline to DeepSeek Harness 0.2.1-rc.3. The DeepSeek provider now lists models from DeepSeek's official /models endpoint, and the Conversation header's More menu keeps folded Views reachable on a narrow screen. Published to the stable npm latest channel, with the same code as 0.33.0-alpha.1, which passed a staging run (below). The session format stays V4.

Changed

  • Upstream baseline 0.2.1-rc.3 (#394): every @deepseek-ai/dsh-* package moves from 0.2.1-rc.2. Most packages change only their version.
  • Official model listing: with the built-in model catalog and the official API base URL, the DeepSeek provider lists models from GET /models, as upstream does since rc.3.
    • The first model request after a Durable Object starts waits up to 5 seconds for the listing.
    • A listing older than 10 minutes refreshes in the background.
    • A failed listing keeps the last good one, or the built-in catalog.
    • A customized model list or another base URL requests nothing.
    • The Models page shows the two new settings, modelsTimeoutMs and modelsMaxAgeMs.
    • The built-in catalog's context window is now 1,048,576 tokens (was 1,000,000).
  • The More conversation views menu: since rc.3 the Conversation header folds the Views that do not fit its tab row into a More menu. Upstream fills that menu, and new More menus in the left sidebar and the right-sidebar guide, from dsh-client-ui-entry-customization. That package's Browse other plugins and Create your plugin need the plugin page and the Creator preset, which the Edge does not offer, so it is not shipped.
    • The Edge registers its own row in the Conversation menu instead, listing only the folded Views; when every View fits, the menu shows a single inactive line.
    • The sidebar and guide More menus are not shown.
  • Other upstream changes: New Session no longer loses an unsent draft after switching sessions.

Known limitations

  • The left-sidebar and right-sidebar More menus, and plugin browsing and creation from them, are not available.
  • The other limitations listed for 0.32.0 still hold.

Validation

pnpm run check passes 1,129 tests. Every Edge patch re-applies, and the two that inline the Harness version for the Worker bundle (dsh-llm, dsh-repeat-tool-reminder) now carry 0.2.1-rc.3. The upstream reference now lists 200 entries, and the new package is classified.

Integration runs against both release artifacts (Direct and Isolated), and the Linux Container integration passes. A new browser check, in both modes, narrows the window to 320 pixels: Trajectory folds into More, the menu lists exactly that View with no plugin actions, and choosing it switches the View. The turn snapshot changes only in the catalog's context window, and the browser snapshot gains the More conversation views button.

Measured locally in the Workers runtime:

  • row-cost.probe.mjs against 0.32.0: every step writes and reads the same rows (443 SQL rows and 36 KV and alarm writes over nine plain turns).
  • upgrade-from-release.probe.mjs upgrades state created by the published 0.32.0, passing 11 checks.

The release artifacts stay within Cloudflare's 64 MiB size limit (Direct 8.4 MB, Isolated 9.8 MB).

On a staging instance upgraded from 0.32.0 to 0.33.0-alpha.1 (Isolated, with the Linux Container):

  • readiness reported upstream 0.2.1-rc.3;
  • the 53 sessions from before the upgrade were still listed;
  • a DeepSeek-V4.1-Flash turn completed;
  • the model catalog listed DeepSeek-V4.1-Flash and DeepSeek-V4-Pro with their reasoning levels;
  • the Conversation header's More menu was the Edge's own: with every View in the tab row, it showed only "Every view is in the tab row" and no plugin actions.

Folding into More on a narrow window was checked by the browser test above rather than on staging.

Upgrade with npx dsh-edge@latest upgrade and choose "Update it", then reload the page. The Web page updates at once, but the instance behind it can keep running the previous version for a few minutes after an upgrade.

dsh-edge 0.32.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 08:32
373e12d

dsh-edge 0.32.0

The Web client's changed-files card now appears under a turn that edited files with write or edit, listing each file's added and deleted lines and opening its comparison in the sidebar. The system prompt also gains upstream's guidance on linking files and on when to use present. Published to the stable npm latest channel, with the same code as 0.32.0-alpha.1, which passed a staging run (below). The upstream baseline stays 0.2.1-rc.2 and the session format stays V4.

Added

  • Changed-files card (#391): the Edge now serves upstream's workspaceChanges (dsh-workspace-changes) in its documented no-git mode.
    • What is listed: every top-level turn's write and edit calls. Each edited file is copied before its first edit in the turn and again at turn end, compared line by line as upstream compares, and announced with a workspace/changes event.
    • Not listed: Workers run no git, so files changed only through bash or in the Linux container are not listed, and subagent sessions are not recorded.
    • Bounds:
      • as upstream, a file over 2 MiB is listed without counts or comparison;
      • unlike upstream, so is a file with more than 20,000 lines on either side, because a comparison allocates per line;
      • a file holding a NUL byte is listed as binary;
      • a rewrite with unchanged content is not listed;
      • a summary carries at most 500 files.
    • Where copies live: in the workspace VFS under /.dsh/workspace-changes, named by their SHA-1, so a turn holds at most two file contents in memory. They are removed with their session, and those of a previous Durable Object activation before the next capture.
    • Lifetime: as upstream's, summaries live with their resident session; after a restart, earlier turns have no card.

Changed

  • Deliverables host half (#391): upstream's dsh-client-ui-deliverables host half is now mounted as is. It serves the cards' /api/present.* and /api/changes.* routes, which replace the Edge's own present handlers and answer the same way without a desktop. It also adds upstream's ui:deliverable-file-references section to the system prompt: link every mention of an existing file to its path, show primary results inline, and use present when a file card helps. The Edge had not sent this section before, so model replies may link files more often.

Known limitations

  • The changed-files card lists file-tool edits only; shell and Linux container edits need a turn-start view of the workspace, which is not built yet.
  • A turn that edits files writes more Durable Object rows for the copies: a turn whose one write creates a file wrote 31 more rows than on 0.31.0. Turns that edit no file are unchanged.
  • The other limitations listed for 0.31.0 still hold.

Validation

pnpm run check passes 1,129 tests. New tests cover the comparison (line counts, a missing final newline, the timeout's whole-file fallback) and the recorder:

  • edits, new and deleted files, an unchanged rewrite, paths outside the working directory and under /tmp;
  • oversized files by bytes and by lines, and binary files;
  • no event for a quiet turn or a subagent;
  • one copy per content;
  • removal of a disposed session's copies and of a previous activation's.

Integration runs against both release artifacts (Direct and Isolated). A scripted turn reads a file, edits it, writes a new file, rewrites a third with the same content, and changes a fourth through bash.

  • /api/changes.summary lists exactly the edited and the new file with their counts.
  • /api/changes.diff returns their hunks.
  • The deliverables routes answer from upstream's handlers.

A new browser check, in both modes, sends that turn and finds the "Edited 2 files" card, then opens a file's comparison.

Measured locally in the Workers runtime:

  • row-cost.probe.mjs against 0.31.0: plain, bash, and schedule turns write the same rows (443 SQL rows and 36 KV and alarm writes over nine plain turns). The step whose woken parent writes one file writes 31 more rows (243 against 212), and a cold resume reads 628 rows against 616.
  • upgrade-from-release.probe.mjs upgrades state created by the published 0.31.0, passing 11 checks.

The release artifacts stay within Cloudflare's 64 MiB size limit (Direct 8.4 MB, Isolated 9.7 MB).

On a staging instance upgraded from 0.31.0 to 0.32.0-alpha.1 (Isolated, with the Linux Container, in PTC mode), a DeepSeek-V4.1-Flash turn read and edited a file, wrote a new one, and changed a third through bash:

  • the reply showed an "Edited 2 files" card (+3 −1): the edited file with +1 −1 and the new file with +2;
  • the bash-only file was not listed;
  • the edited file's comparison opened in the sidebar;
  • the file tools ran inside run_code calls, which the card covers too;
  • the 53 sessions from before the upgrade were still listed.

Upgrade with npx dsh-edge@latest upgrade and choose "Update it", then reload the page. The Web page updates at once, but the instance behind it can keep running the previous version for a few minutes after an upgrade.

dsh-edge 0.33.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Oct 10:00
cc0bada

dsh-edge 0.33.0-alpha.1

Moves the upstream baseline to DeepSeek Harness 0.2.1-rc.3. The DeepSeek provider now lists models from DeepSeek's official /models endpoint, and the Conversation header's More menu keeps folded Views reachable on a narrow screen. Published to npm's next channel; latest remains on 0.32.0. The session format stays V4.

Changed

  • Upstream baseline 0.2.1-rc.3 (#394): every @deepseek-ai/dsh-* package moves from 0.2.1-rc.2. Most packages change only their version.
  • Official model listing: with the built-in model catalog and the official API base URL, the DeepSeek provider lists models from GET /models, as upstream does since rc.3.
    • The first model request after a Durable Object starts waits up to 5 seconds for the listing.
    • A listing older than 10 minutes refreshes in the background.
    • A failed listing keeps the last good one, or the built-in catalog.
    • A customized model list or another base URL requests nothing.
    • The Models page shows the two new settings, modelsTimeoutMs and modelsMaxAgeMs.
    • The built-in catalog's context window is now 1,048,576 tokens (was 1,000,000).
  • The More conversation views menu: since rc.3 the Conversation header folds the Views that do not fit its tab row into a More menu. Upstream fills that menu, and new More menus in the left sidebar and the right-sidebar guide, from dsh-client-ui-entry-customization. That package's Browse other plugins and Create your plugin need the plugin page and the Creator preset, which the Edge does not offer, so it is not shipped.
    • The Edge registers its own row in the Conversation menu instead, listing only the folded Views; when every View fits, the menu shows a single inactive line.
    • The sidebar and guide More menus are not shown.
  • Other upstream changes: New Session no longer loses an unsent draft after switching sessions.

Known limitations

  • The left-sidebar and right-sidebar More menus, and plugin browsing and creation from them, are not available.
  • The other limitations listed for 0.32.0 still hold.

Validation

pnpm run check passes 1,129 tests. Every Edge patch re-applies, and the two that inline the Harness version for the Worker bundle (dsh-llm, dsh-repeat-tool-reminder) now carry 0.2.1-rc.3. The upstream reference now lists 200 entries, and the new package is classified.

Integration runs against both release artifacts (Direct and Isolated), and the Linux Container integration passes. A new browser check, in both modes, narrows the window to 320 pixels: Trajectory folds into More, the menu lists exactly that View with no plugin actions, and choosing it switches the View. The turn snapshot changes only in the catalog's context window, and the browser snapshot gains the More conversation views button.

Measured locally in the Workers runtime:

  • row-cost.probe.mjs against 0.32.0: every step writes and reads the same rows (443 SQL rows and 36 KV and alarm writes over nine plain turns).
  • upgrade-from-release.probe.mjs upgrades state created by the published 0.32.0, passing 11 checks.

The release artifacts stay within Cloudflare's 64 MiB size limit (Direct 8.4 MB, Isolated 9.8 MB). Not yet validated on a staging instance.

Upgrade a test instance with npx dsh-edge@next upgrade and choose "Update it".

dsh-edge 0.32.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Oct 07:17
9599788

dsh-edge 0.32.0-alpha.1

The Web client's changed-files card now appears under a turn that edited files with write or edit, listing each file's added and deleted lines and opening its comparison in the sidebar. The system prompt also gains upstream's guidance on linking files and on when to use present. Published to npm's next channel; latest remains on 0.31.0. The upstream baseline stays 0.2.1-rc.2 and the session format stays V4.

Added

  • Changed-files card (#391): the Edge now serves upstream's workspaceChanges (dsh-workspace-changes) in its documented no-git mode.
    • What is listed: every top-level turn's write and edit calls. Each edited file is copied before its first edit in the turn and again at turn end, compared line by line as upstream compares, and announced with a workspace/changes event.
    • Not listed: Workers run no git, so files changed only through bash or in the Linux container are not listed, and subagent sessions are not recorded.
    • Bounds:
      • as upstream, a file over 2 MiB is listed without counts or comparison;
      • unlike upstream, so is a file with more than 20,000 lines on either side, because a comparison allocates per line;
      • a file holding a NUL byte is listed as binary;
      • a rewrite with unchanged content is not listed;
      • a summary carries at most 500 files.
    • Where copies live: in the workspace VFS under /.dsh/workspace-changes, named by their SHA-1, so a turn holds at most two file contents in memory. They are removed with their session, and those of a previous Durable Object activation before the next capture.
    • Lifetime: as upstream's, summaries live with their resident session; after a restart, earlier turns have no card.

Changed

  • Deliverables host half (#391): upstream's dsh-client-ui-deliverables host half is now mounted as is. It serves the cards' /api/present.* and /api/changes.* routes, which replace the Edge's own present handlers and answer the same way without a desktop. It also adds upstream's ui:deliverable-file-references section to the system prompt: link every mention of an existing file to its path, show primary results inline, and use present when a file card helps. The Edge had not sent this section before, so model replies may link files more often.

Known limitations

  • The changed-files card lists file-tool edits only; shell and Linux container edits need a turn-start view of the workspace, which is not built yet.
  • A turn that edits files writes more Durable Object rows for the copies: a turn whose one write creates a file wrote 31 more rows than on 0.31.0. Turns that edit no file are unchanged.
  • The other limitations listed for 0.31.0 still hold.

Validation

pnpm run check passes 1,129 tests. New tests cover the comparison (line counts, a missing final newline, the timeout's whole-file fallback) and the recorder:

  • edits, new and deleted files, an unchanged rewrite, paths outside the working directory and under /tmp;
  • oversized files by bytes and by lines, and binary files;
  • no event for a quiet turn or a subagent;
  • one copy per content;
  • removal of a disposed session's copies and of a previous activation's.

Integration runs against both release artifacts (Direct and Isolated). A scripted turn reads a file, edits it, writes a new file, rewrites a third with the same content, and changes a fourth through bash.

  • /api/changes.summary lists exactly the edited and the new file with their counts.
  • /api/changes.diff returns their hunks.
  • The deliverables routes answer from upstream's handlers.

A new browser check, in both modes, sends that turn and finds the "Edited 2 files" card, then opens a file's comparison.

Measured locally in the Workers runtime:

  • row-cost.probe.mjs against 0.31.0: plain, bash, and schedule turns write the same rows (443 SQL rows and 36 KV and alarm writes over nine plain turns). The step whose woken parent writes one file writes 31 more rows (243 against 212), and a cold resume reads 628 rows against 616.
  • upgrade-from-release.probe.mjs upgrades state created by the published 0.31.0, passing 11 checks.

The release artifacts stay within Cloudflare's 64 MiB size limit (Direct 8.4 MB, Isolated 9.7 MB). Not yet validated on a staging instance.

Upgrade a test instance with npx dsh-edge@next upgrade and choose "Update it".

dsh-edge 0.31.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 14:32
e044b82

dsh-edge 0.31.0

The Linux Container no longer stops when a command's output arrives after the command has exited. Deleted workspace files now give their storage back, and an old session too large to migrate no longer stops the instance from starting. Published to the stable npm latest channel, with the same code as 0.31.0-alpha.1, which passed a staging run (below). The upstream baseline stays 0.2.1-rc.2 and the session format stays V4. The workspace storage format moves forward on first start and cannot be read by 0.30 (see Upgrade).

Fixed

  • Container output after a command exits (#373, #384): the Container image now carries computerd 0.7.0, and the Worker @cloudflare/computer 0.7.0; the two are one wire-protocol pair and move together. computerd 0.3.1 stopped, taking the container and every command in it down, when output reached it after its command had exited. That happens when a background job started with & keeps the pipes, or when the Durable Object reads more slowly than the command prints.
    • A command now finishes once both output pipes close. If a background job still holds them, it finishes 250 ms after its shell exits; output the job writes afterwards is dropped, and the container keeps running.
    • 0.29.0's workaround, redirecting large output to a file, is no longer needed.
  • Old sessions too large to migrate (#371, #387): a session stored in a format older than V4 is converted on the first start after an upgrade. Upstream's converter takes the whole log at once, about four times its stored size in memory (measured under a 128 MiB heap: 22 MiB converted, 26 MiB ran out).
    • A session with more than 8 MiB of stored events is now left as stored, with a warning in the Worker log; before, it failed every start of the instance.
    • The Edge treats such a session as absent: it is not listed, and reads by id answer that it does not exist. Its stored events are kept.
    • This only concerns instances upgrading from a release before 0.19.0 (which moved sessions to V4) that still hold such a session.

Changed

  • Deleted files free their storage (#358, #386): the workspace stores file contents as shared chunks, and deleting or overwriting a file never removed them, so stored size only grew. The daily cleanup now also deletes chunks no file uses, at most 200 per run and only if unused for at least a day.
    • It skips a run while the Linux Container is up, because the container may be syncing content it has not yet linked to a file.
    • It runs only on the workspace storage version it was written against, and stops with a warning on any other.
    • This covers expired spill files, replaced uploads, and files the model deleted or overwrote.

Known limitations

  • The Linux Container still uses Computer's platform-scheduled backend (LegacyContainerBackend). Computer's newer Durable Object-scheduled backend would need a new Durable Object class, leaving each instance's stored data behind, so it waits until Cloudflare can convert an existing application (#385).
  • A deleted file's storage is freed a day or more after its last use, in batches of 200 chunks per daily run (hourly while a pass is unfinished), and not while the container is running.
  • The other limitations listed for 0.30.0 still hold.

Validation

pnpm run check passes 1,123 tests. New tests cover:

  • The chunk cleanup, against the installed Computer's own table definitions: which chunks it deletes, the one-day margin, resuming across runs, and other storage versions. Further tests pin what the cleanup assumes about Computer, so a later upgrade that changes it fails CI.
  • The 8 MiB migration limit: the instance starts, the other sessions migrate, the large session is not listed and keeps its rows, and no table rebuild drops them.

Integration runs against both release artifacts (Direct and Isolated). The Container integration adds a background job that writes 200,000 lines after its shell exits: the same container serves the next command. This check fails on 0.30.0.

Measured locally in the Workers runtime:

  • row-cost.probe.mjs against 0.30.0: plain turns write the same rows (443 SQL rows and 36 KV and alarm writes over nine turns). The first turn reads 225 rows against 153; the extra 72 are the chunk cleanup's daily scan, which reads at most about 2,000.
  • vfs-reclaim.probe.mjs, in both modes: after a 939 KB file is deleted and its chunks are aged past the margin, the next cleanup frees exactly its 938,890 bytes, and a kept file reads back whole.
  • upgrade-from-release.probe.mjs upgrades state created by the published 0.30.0, passing 11 checks, including workspace files read back after the storage-format change.

The release artifacts stay within Cloudflare's 64 MiB size limit (Direct 8.4 MB, Isolated 9.7 MB).

On a staging instance upgraded from 0.30.0 to 0.31.0-alpha.1 (Isolated, with the Linux Container):

  • the 52 sessions from before the upgrade were still listed;
  • seq 1 60000 (about 350 KB) in the container returned with exit code 0 and the rest of its command ran; on 0.29.0 the same command failed on almost every run and restarted the container;
  • a background job writing 200,000 lines after its shell exited returned at once, and a file kept on the container's own disk was still there five seconds later, so the container had not restarted;
  • a 300,000-line command still saved its full output to /workspace/.spill, and Computer kept no second copy in /.computer/output.

Freeing deleted files' storage was not observed on staging, since content must sit unused for a day first; it was measured locally (above).

Upgrade

Upgrade with npx dsh-edge@latest upgrade and choose "Update it", then reload the page. The Web page updates at once, but the instance behind it can keep running the previous version for a few minutes after an upgrade.

This upgrade is one-way for workspace storage. On first start, Computer 0.7.0 moves the workspace storage format from version 8 to 10, and 0.30.0 refuses version 10. An instance rolled back to 0.30.0 after running this release cannot read its workspace files.

dsh-edge 0.31.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 24 Oct 10:43
d506c25

dsh-edge 0.31.0-alpha.1

The Linux Container no longer stops when a command's output arrives after the command has exited. Deleted workspace files now give their storage back, and an old session too large to migrate no longer stops the instance from starting. Published to npm's next channel; latest remains on 0.30.0. The upstream baseline stays 0.2.1-rc.2 and the session format stays V4. The workspace storage format moves forward on first start and cannot be read by 0.30 (see Upgrade).

Fixed

  • Container output after a command exits (#373, #384): the Container image now carries computerd 0.7.0, and the Worker @cloudflare/computer 0.7.0; the two are one wire-protocol pair and move together. computerd 0.3.1 stopped, taking the container and every command in it down, when output reached it after its command had exited. That happens when a background job started with & keeps the pipes, or when the Durable Object reads more slowly than the command prints.
    • A command now finishes once both output pipes close. If a background job still holds them, it finishes 250 ms after its shell exits; output the job writes afterwards is dropped, and the container keeps running.
    • 0.29.0's workaround, redirecting large output to a file, is no longer needed.
  • Old sessions too large to migrate (#371, #387): a session stored in a format older than V4 is converted on the first start after an upgrade. Upstream's converter takes the whole log at once, about four times its stored size in memory (measured under a 128 MiB heap: 22 MiB converted, 26 MiB ran out).
    • A session with more than 8 MiB of stored events is now left as stored, with a warning in the Worker log; before, it failed every start of the instance.
    • The Edge treats such a session as absent: it is not listed, and reads by id answer that it does not exist. Its stored events are kept.
    • This only concerns instances upgrading from a release before 0.19.0 (which moved sessions to V4) that still hold such a session.

Changed

  • Deleted files free their storage (#358, #386): the workspace stores file contents as shared chunks, and deleting or overwriting a file never removed them, so stored size only grew. The daily cleanup now also deletes chunks no file uses, at most 200 per run and only if unused for at least a day.
    • It skips a run while the Linux Container is up, because the container may be syncing content it has not yet linked to a file.
    • It runs only on the workspace storage version it was written against, and stops with a warning on any other.
    • This covers expired spill files, replaced uploads, and files the model deleted or overwrote.

Known limitations

  • The Linux Container still uses Computer's platform-scheduled backend (LegacyContainerBackend). Computer's newer Durable Object-scheduled backend would need a new Durable Object class, leaving each instance's stored data behind, so it waits until Cloudflare can convert an existing application (#385).
  • A deleted file's storage is freed a day or more after its last use, in batches of 200 chunks per daily run (hourly while a pass is unfinished), and not while the container is running.
  • The other limitations listed for 0.30.0 still hold.

Validation

pnpm run check passes 1,123 tests. New tests cover:

  • The chunk cleanup, against the installed Computer's own table definitions: which chunks it deletes, the one-day margin, resuming across runs, and other storage versions. Further tests pin what the cleanup assumes about Computer, so a later upgrade that changes it fails CI.
  • The 8 MiB migration limit: the instance starts, the other sessions migrate, the large session is not listed and keeps its rows, and no table rebuild drops them.

Integration runs against both release artifacts (Direct and Isolated). The Container integration adds a background job that writes 200,000 lines after its shell exits: the same container serves the next command. This check fails on 0.30.0.

Measured locally in the Workers runtime:

  • row-cost.probe.mjs against 0.30.0: plain turns write the same rows (443 SQL rows and 36 KV and alarm writes over nine turns). The first turn reads 225 rows against 153; the extra 72 are the chunk cleanup's daily scan, which reads at most about 2,000.
  • vfs-reclaim.probe.mjs, in both modes: after a 939 KB file is deleted and its chunks are aged past the margin, the next cleanup frees exactly its 938,890 bytes, and a kept file reads back whole.
  • upgrade-from-release.probe.mjs upgrades state created by the published 0.30.0, passing 11 checks, including workspace files read back after the storage-format change.

The release artifacts stay within Cloudflare's 64 MiB size limit (Direct 8.4 MB, Isolated 9.7 MB). Not yet validated on a staging instance.

Upgrade

Upgrade a test instance with npx dsh-edge@next upgrade and choose "Update it".

This upgrade is one-way for workspace storage. On first start, Computer 0.7.0 moves the workspace storage format from version 8 to 10, and 0.30.0 refuses version 10. An instance rolled back to 0.30.0 after running this release cannot read its workspace files.