feat(sandbox): add Ascii Box workspace provider - #302
Conversation
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
This comment has been minimized.
This comment has been minimized.
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
|
Addressed the code findings in 1211062, b379126 and e38c6ac:
Validation: 48 focused adapter/pool/browser tests passed; server typecheck, changed-file formatting and targeted lint passed. No live Ascii credentials are available, so hosted behavior remains SDK-mock verified. UI evidence request (#4124127068) remains limited: the initial implementation captured and inspected a current screenshot and exercised connect/default/reload/redaction/disconnect in isolated Chromium. This harness has no authorized GitHub attachment-upload path, and I have not committed PR-only assets or represented the current screenshot as a pre-change baseline. The PR explicitly records this evidence limitation. |
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
|
Fixed the queued analytics upgrade regression in 43f138d. The server integration test now rewrites a persisted retry queue into the pre-Ascii shape, reloads and delivers it, and verifies zero-filled Ascii counters and stable insert IDs. Both queued buckets drain successfully. Verification: 17 contract/analytics service tests passed; contracts and server typechecks passed; targeted lint, formatting, and diff checks passed. No UI behavior changed in this follow-up. |
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
|
Addressed the asynchronous deletion finding in The automatic replacement suggestion for failed remote wake is intentionally not applied. A wake failure is not proof that the workspace is irrecoverably gone: permission failures, network errors, stalled snapshots and provider error states can all leave recoverable data. The existing saved-identity contract deliberately fails closed and explicitly tells the operator how to remove the identity to request a replacement ( |
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
Keeps the reviewed integration tree on top of main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keeps the reviewed integration tree on top of main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
|
Addressed the new adapter review in 617d396:
Verification: 106 focused adapter/pool/session-resource tests passed; server typecheck and targeted lint passed. Live Box verification remains unavailable without credentials. The existing minor changeset covers these fixes to the new provider. |
Co-authored-by: Leo <leodoesdev@gmail.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
|
Addressed the two Railway P1 findings in d3bf2e7. Credential-scoped clients now coordinate acquisition/release by durable VM identity. Creation is serialized, explicit deletion waits for the final identity lease, idle clients are invalidated, and deletion is deduplicated across credential keys and shutdown. Regression tests cover concurrent creation, shared leases, pending acquisition vs deletion, stale idle clients, fresh VM generations, and cleanup failure. The Ascii P2 timing observation is accurate, but I am retaining awaited cleanup deliberately: reporting acquisition as finished while snapshot archival remains active would allow retry/shutdown to race an unfinished resource release. This is bounded archival polling, not an indefinitely stuck acquisition, and preserves the existing data-safety contract. docs/user/sandboxes.md now states that setup errors and retries can wait for snapshot cleanup (up to five minutes of archival polling). No detached cleanup worker was introduced. Verification: 134 focused workspace/pool/session-resource/Tenki tests passed; server typecheck passed; targeted lint had zero errors and one unchanged no-this-alias warning. Existing provider-feature changesets cover these fixes. No live cloud resources were used. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Leo <leodoesdev@gmail.com>
|
Fixed the new successful-deletion-reports-failure finding in this push. An idle Railway credential client failure is now distinguished from other cleanup failures: when another credential client completes the shared deletion, release succeeds. If deletion never succeeds, the original deletion error still propagates; unrelated cleanup errors remain errors. Added the revoked-old-token/current-token regression and retained the all-clients-fail regression. 72 focused pool/session-resource tests passed; server typecheck passed; targeted lint has no errors and one unchanged warning. Existing feature changesets cover this correction. The separate Ascii snapshot-cleanup timing rationale remains unchanged and documented. |
Summary
Akeru could not create or reconnect to Ascii Box workspaces. Add an
asciisandbox adapter using the official@asciidev/box-sdk(pinned to 0.0.37), following the existing remote-workspace identity and credential patterns.Capability reference: https://sandbox-sdk.app/docs/providers. The official SDK README says Box is now Boat: this requested integration uses the frozen Box API, supported until its provider-announced sunset.
Verification
Shared Railway identity lifecycle: 134 focused workspace/pool/session-resource/Tenki tests passed; server typecheck passed. Credential-rotated clients serialize VM creation and defer/deduplicate shared deletion. Targeted lint: zero errors, one unchanged
no-this-aliaswarning.Current adapter/pool/session-resource pass: 106 tests passed, including setup-failure recovery, bounded readiness polling, and command-timeout validation. Server typecheck and targeted lint passed.
Late-deletion recovery: 53 workspace/pool tests passed. A confirmed Ascii lookup 404 replaces the missing VM and saves its new identity; auth/server/transport errors preserve the original. Failed replacement creation remains retryable. Server typecheck and targeted lint passed.
Confirmed deletion follow-up: 49 adapter/pool tests passed, including asynchronous deletion completion, bounded timeout, and identity retention on blocked deletion followed by retry. Server typecheck and targeted lint passed. VM identities are removed only after deletion completes.
Analytics upgrade compatibility: 17 focused contract/service tests passed. Persisted pre-Ascii retry queues drain with zero-filled Ascii counters and stable insert IDs; invalid explicit values remain rejected. Contracts and server typechecks and targeted lint passed.
163 tests passed across 7 focused files: workspace adapters, server settings, contract settings/bot config/analytics, sandbox settings logic, and bot sandbox selection.
Server, web and contracts typechecks passed. Changed-file formatting and
git diff --checkpassed. Targeted lint: no errors; one pre-existing unused-variable warning insettings.test.ts.Isolated Chromium check against an explicit worktree-local home: enter a fixture key, connect Ascii Box, select it as default, reload and verify persistence, verify key redaction, disconnect and verify Local fallback after reload. Fixture connection removed afterward.
Live Ascii Box provisioning/commands/previews were not exercised: no Box API credential was available. SDK-boundary mocks cover lifecycle and execution. Follow-up verification: 49 adapter, pool and browser tests passed, including transient-failure preservation, protected browser URLs, command timeout limits, and asynchronous snapshot completion/error/timeout cases. Server typecheck and targeted lint passed. Web verifies the shared desktop renderer; no Electron shell or React Native code changed. Existing provider-driver paths continue to use the shared workspace factory.
Screenshots
Before: Settings → Sandbox on main lists Tenki as the last provider.
After: Ascii Box and Railway (from #303, which this branch builds on) appear in the provider list.
Ascii Box connects with a single API key.
Implemented with OpenAI GPT-6 Astra in the Hoplite harness.