Conversation
The job logs command was missing the v2 flag when calling streamUrlToWritable. Without this flag, Pulse uses a 500ms timeout probe that can fall back to the legacy path which cannot serve v2 stream data.
|
The latest Agentuity deployment details.
|
|
Important Review skippedReview was skipped due to path filters ⛔ Files ignored due to path filters (1)
CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughReplaces many CLI sandbox commands to use a new resolveSandboxTarget/cacheSandboxTarget flow, migrates fs transfers to streamed tar.gz archives and streaming I/O, refactors execution completion to poll executions in parallel with stream draining, extends sandbox API wait parameters and response shapes, and makes SQLite cache access fault-tolerant. Changes
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Warning Review ran into problems🔥 ProblemsErrors were encountered while retrieving linked issues. Errors (1)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (6)
packages/cli/src/cache/resource-region.ts (1)
128-129: Add minimal diagnostics in silent cache failure paths.These
catch {}blocks make persistent DB failures invisible; a trace/debug log would materially improve supportability without blocking CLI flows.Also applies to: 170-172, 205-207, 219-221
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/cli/src/cache/resource-region.ts` around lines 128 - 129, Replace the empty catches that currently read "catch { return null; }" with "catch (err) { console.debug('resource-region cache operation failed:', err); return null; }" (or use the project's logger if available) so each silent DB/cache failure in packages/cli/src/cache/resource-region.ts emits a minimal diagnostic including the error object; apply the same change to the other occurrences of the empty catch blocks.packages/cli/src/cmd/cloud/sandbox/fs/upload.ts (1)
51-58: Fail fast on local file validation before remote resolution.Right now target resolution runs before checking the archive path. Moving local file checks first avoids unnecessary API calls when the file is invalid.
Suggested reorder
async handler(ctx) { const { args, opts, options, auth, logger, apiClient } = ctx; + const stat = statSync(args.archive); + if (!stat.isFile()) { + logger.fatal(`${args.archive} is not a file`); + } + const bytes = stat.size; + const content = Readable.toWeb(createReadStream(args.archive)) as ReadableStream<Uint8Array>; + const { region, orgId } = await resolveSandboxTarget( logger, auth, apiClient, args.sandboxId, ctx.config?.name ?? 'production', ctx.config ); const client = createSandboxClient(logger, auth, region); - - const stat = statSync(args.archive); - if (!stat.isFile()) { - logger.fatal(`${args.archive} is not a file`); - } - - const bytes = stat.size; - const content = Readable.toWeb(createReadStream(args.archive)) as ReadableStream<Uint8Array>;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/cli/src/cmd/cloud/sandbox/fs/upload.ts` around lines 51 - 58, Move the local archive validation to run before calling resolveSandboxTarget to fail fast on invalid files: in upload.ts validate the archive path (check existence, readability and correct archive format for args.archivePath or the variable used for the upload source) and return/exit with a clear logger error if invalid, then only call resolveSandboxTarget(logger, auth, apiClient, args.sandboxId, ctx.config?.name ?? 'production', ctx.config) after the local checks pass; adjust any early-return/error handling so resolveSandboxTarget (and its region/orgId resolution) is not invoked when the local file is invalid.packages/cli/src/cmd/cloud/sandbox/get.ts (1)
65-77: Consider rejecting emptywaitForStatusarrays.Allowing
[]makes wait semantics unclear. A non-empty constraint would make intent explicit.Suggested schema tweak
options: z.object({ waitForStatus: z - .array(z.string()) + .array(z.string().min(1)) + .nonempty() .optional() .describe('Wait for one of these statuses before returning'),🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/cli/src/cmd/cloud/sandbox/get.ts` around lines 65 - 77, The current options schema allows an empty waitForStatus array which makes wait semantics ambiguous; update the waitForStatus schema (inside the options object) to reject empty arrays by adding a non-empty constraint (e.g., call .nonempty() on the z.array(z.string()) before .optional()), so when waitForStatus is provided it must contain at least one status string; leave waitMs unchanged.packages/cli/src/cmd/cloud/sandbox/fs/cp.ts (1)
237-244: Redundant file existence check.Line 237 checks
Bun.file(resolvedPath).exists()but the result is only used to guard astatSynccall that itself hasthrowIfNoEntry: false. ThestatSyncwould returnundefinedif the file doesn't exist, making theexists()check redundant.Consider simplifying:
♻️ Simplified file check
const resolvedPath = resolve(localPath); - - if (!(await Bun.file(resolvedPath).exists())) { - const stat = statSync(resolvedPath, { throwIfNoEntry: false }); - if (!stat) { - logger.fatal(`Local path not found: ${localPath}`); - } + const stat = statSync(resolvedPath, { throwIfNoEntry: false }); + if (!stat) { + logger.fatal(`Local path not found: ${localPath}`); } - - const stat = statSync(resolvedPath);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/cli/src/cmd/cloud/sandbox/fs/cp.ts` around lines 237 - 244, Remove the redundant Bun.file(resolvedPath).exists() check and the duplicate statSync call: call statSync(resolvedPath, { throwIfNoEntry: false }) once, store its result in a single `stat` variable, and if that result is falsy call `logger.fatal(\`Local path not found: ${localPath}\`)`; then continue using that `stat` for subsequent logic. This replaces the exists() guard and avoids calling statSync twice while preserving the existing error handling.packages/cli/src/cmd/cloud/sandbox/exec.ts (1)
378-403: Missing abort signal propagation in fast terminal poll.The
waitForTerminalExecutionFastfunction doesn't accept or propagate anAbortSignal, meaning if the user sends SIGINT/SIGTERM during the fast poll phase, in-flightexecutionGetrequests won't be cancelled immediately. The outer abort handler at lines 96-101 triggers, but individual requests will complete before the loop can check termination.Consider accepting and propagating the signal:
♻️ Proposed fix to propagate abort signal
async function waitForTerminalExecutionFast( client: Parameters<typeof executionGet>[0], executionId: string, orgId: string, - logger: Parameters<typeof streamUrlToWritable>[2] + logger: Parameters<typeof streamUrlToWritable>[2], + signal?: AbortSignal ) { const deadline = Date.now() + EMPTY_STREAM_FAST_TIMEOUT_MS; while (Date.now() < deadline) { - const info = await executionGet(client, { executionId, orgId }); + if (signal?.aborted) { + throw new DOMException('Aborted', 'AbortError'); + } + const info = await executionGet(client, { executionId, orgId, signal }); if (TERMINAL_EXECUTION_STATUSES.has(info.status)) {🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/cli/src/cmd/cloud/sandbox/exec.ts` around lines 378 - 403, The fast-poll loop in waitForTerminalExecutionFast does not accept or forward an AbortSignal so in-flight executionGet calls won't be cancelled; modify waitForTerminalExecutionFast signature to accept an AbortSignal (e.g., signal: AbortSignal), check signal.aborted inside the loop to exit early, and pass that signal to every executionGet invocation (both the loop calls and the final fallback call with wait: EXECUTION_WAIT_DURATION) so in-flight requests are aborted promptly when the outer handler signals cancellation. Ensure any sleep/wait respects the signal (abort the timeout) or returns immediately when signal.aborted.packages/core/src/services/sandbox/run.ts (1)
606-611: Duck-typing for writable stream detection could be fragile.The check
'once' in writableis used to detect Node.js-style writables before callingfinished(). While this works, it's a heuristic that could break if a custom writable has anonceproperty but isn't compatible withfinished().Consider using a more explicit type guard or just wrapping in try-catch without the pre-check:
♻️ Alternative: rely on try-catch alone
writable.end(); - if ('once' in writable) { - await finished(writable as NodeJS.WritableStream).catch(() => { - // Ignore finish errors here; the main read/write path already - // reported meaningful stream errors. - }); - } + await finished(writable as NodeJS.WritableStream).catch(() => { + // Ignore finish errors here; the main read/write path already + // reported meaningful stream errors. + });🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/core/src/services/sandbox/run.ts` around lines 606 - 611, The duck-typing check "'once' in writable" is fragile; remove the pre-check and instead invoke finished(writable as NodeJS.WritableStream) inside a try/catch so non-Node writables won't cause incorrect detection and any errors are safely ignored as intended. Update the block around the writable variable where finished(...) is called (the code that currently checks "'once' in writable") to simply await finished(...) wrapped in try { await finished(...) } catch { /* ignore finish errors */ } so behavior remains the same without relying on the 'once' property heuristic.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@packages/cli/src/cmd/cloud/sandbox/util.ts`:
- Around line 24-46: The apiClient fallback is unreachable because
resolveSandboxTarget's parameter apiClient is typed as required; update the
function signature in resolveSandboxTarget to make apiClient optional (e.g.,
apiClient?: APIClient | null) so the nullish-coalescing fallback to
getGlobalCatalystAPIClient can run, and ensure any call sites that pass
undefined/null are adjusted or accept the optional parameter; no other logic
changes needed (keep sandboxResolve, getGlobalCatalystAPIClient, and
setResourceInfo usage as-is).
---
Nitpick comments:
In `@packages/cli/src/cache/resource-region.ts`:
- Around line 128-129: Replace the empty catches that currently read "catch {
return null; }" with "catch (err) { console.debug('resource-region cache
operation failed:', err); return null; }" (or use the project's logger if
available) so each silent DB/cache failure in
packages/cli/src/cache/resource-region.ts emits a minimal diagnostic including
the error object; apply the same change to the other occurrences of the empty
catch blocks.
In `@packages/cli/src/cmd/cloud/sandbox/exec.ts`:
- Around line 378-403: The fast-poll loop in waitForTerminalExecutionFast does
not accept or forward an AbortSignal so in-flight executionGet calls won't be
cancelled; modify waitForTerminalExecutionFast signature to accept an
AbortSignal (e.g., signal: AbortSignal), check signal.aborted inside the loop to
exit early, and pass that signal to every executionGet invocation (both the loop
calls and the final fallback call with wait: EXECUTION_WAIT_DURATION) so
in-flight requests are aborted promptly when the outer handler signals
cancellation. Ensure any sleep/wait respects the signal (abort the timeout) or
returns immediately when signal.aborted.
In `@packages/cli/src/cmd/cloud/sandbox/fs/cp.ts`:
- Around line 237-244: Remove the redundant Bun.file(resolvedPath).exists()
check and the duplicate statSync call: call statSync(resolvedPath, {
throwIfNoEntry: false }) once, store its result in a single `stat` variable, and
if that result is falsy call `logger.fatal(\`Local path not found:
${localPath}\`)`; then continue using that `stat` for subsequent logic. This
replaces the exists() guard and avoids calling statSync twice while preserving
the existing error handling.
In `@packages/cli/src/cmd/cloud/sandbox/fs/upload.ts`:
- Around line 51-58: Move the local archive validation to run before calling
resolveSandboxTarget to fail fast on invalid files: in upload.ts validate the
archive path (check existence, readability and correct archive format for
args.archivePath or the variable used for the upload source) and return/exit
with a clear logger error if invalid, then only call
resolveSandboxTarget(logger, auth, apiClient, args.sandboxId, ctx.config?.name
?? 'production', ctx.config) after the local checks pass; adjust any
early-return/error handling so resolveSandboxTarget (and its region/orgId
resolution) is not invoked when the local file is invalid.
In `@packages/cli/src/cmd/cloud/sandbox/get.ts`:
- Around line 65-77: The current options schema allows an empty waitForStatus
array which makes wait semantics ambiguous; update the waitForStatus schema
(inside the options object) to reject empty arrays by adding a non-empty
constraint (e.g., call .nonempty() on the z.array(z.string()) before
.optional()), so when waitForStatus is provided it must contain at least one
status string; leave waitMs unchanged.
In `@packages/core/src/services/sandbox/run.ts`:
- Around line 606-611: The duck-typing check "'once' in writable" is fragile;
remove the pre-check and instead invoke finished(writable as
NodeJS.WritableStream) inside a try/catch so non-Node writables won't cause
incorrect detection and any errors are safely ignored as intended. Update the
block around the writable variable where finished(...) is called (the code that
currently checks "'once' in writable") to simply await finished(...) wrapped in
try { await finished(...) } catch { /* ignore finish errors */ } so behavior
remains the same without relying on the 'once' property heuristic.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 91c200b4-968f-4b35-baee-7ac5873d23c6
📒 Files selected for processing (31)
packages/cli/src/cache/resource-region.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/create.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/delete.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/list.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/restore.tspackages/cli/src/cmd/cloud/sandbox/create.tspackages/cli/src/cmd/cloud/sandbox/delete.tspackages/cli/src/cmd/cloud/sandbox/env.tspackages/cli/src/cmd/cloud/sandbox/exec.tspackages/cli/src/cmd/cloud/sandbox/execution/list.tspackages/cli/src/cmd/cloud/sandbox/fs/cp.tspackages/cli/src/cmd/cloud/sandbox/fs/download.tspackages/cli/src/cmd/cloud/sandbox/fs/ls.tspackages/cli/src/cmd/cloud/sandbox/fs/mkdir.tspackages/cli/src/cmd/cloud/sandbox/fs/rm.tspackages/cli/src/cmd/cloud/sandbox/fs/rmdir.tspackages/cli/src/cmd/cloud/sandbox/fs/upload.tspackages/cli/src/cmd/cloud/sandbox/get.tspackages/cli/src/cmd/cloud/sandbox/job/create.tspackages/cli/src/cmd/cloud/sandbox/job/destroy.tspackages/cli/src/cmd/cloud/sandbox/job/get.tspackages/cli/src/cmd/cloud/sandbox/job/list.tspackages/cli/src/cmd/cloud/sandbox/job/logs.tspackages/cli/src/cmd/cloud/sandbox/pause.tspackages/cli/src/cmd/cloud/sandbox/resume.tspackages/cli/src/cmd/cloud/sandbox/run.tspackages/cli/src/cmd/cloud/sandbox/util.tspackages/core/src/services/sandbox/create.tspackages/core/src/services/sandbox/get.tspackages/core/src/services/sandbox/getStatus.tspackages/core/src/services/sandbox/run.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Agentuity Deployment
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
Use Biome as code formatter with tabs (width 3), single quotes, semicolons, lineWidth 100, and trailingCommas es5
Files:
packages/core/src/services/sandbox/create.tspackages/cli/src/cmd/cloud/sandbox/run.tspackages/cli/src/cmd/cloud/sandbox/job/get.tspackages/cli/src/cmd/cloud/sandbox/create.tspackages/cli/src/cmd/cloud/sandbox/fs/rmdir.tspackages/cli/src/cmd/cloud/sandbox/env.tspackages/cli/src/cmd/cloud/sandbox/pause.tspackages/cli/src/cmd/cloud/sandbox/job/create.tspackages/cli/src/cmd/cloud/sandbox/fs/mkdir.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/list.tspackages/cli/src/cmd/cloud/sandbox/fs/ls.tspackages/cli/src/cmd/cloud/sandbox/job/logs.tspackages/cli/src/cmd/cloud/sandbox/fs/rm.tspackages/cli/src/cmd/cloud/sandbox/job/list.tspackages/cli/src/cmd/cloud/sandbox/execution/list.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/delete.tspackages/cli/src/cmd/cloud/sandbox/delete.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/create.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/restore.tspackages/cli/src/cmd/cloud/sandbox/job/destroy.tspackages/core/src/services/sandbox/get.tspackages/cli/src/cmd/cloud/sandbox/resume.tspackages/cli/src/cmd/cloud/sandbox/util.tspackages/cli/src/cache/resource-region.tspackages/cli/src/cmd/cloud/sandbox/fs/download.tspackages/core/src/services/sandbox/run.tspackages/core/src/services/sandbox/getStatus.tspackages/cli/src/cmd/cloud/sandbox/exec.tspackages/cli/src/cmd/cloud/sandbox/get.tspackages/cli/src/cmd/cloud/sandbox/fs/upload.tspackages/cli/src/cmd/cloud/sandbox/fs/cp.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx}: Use TypeScript Strict mode with ESNext target and bundler moduleResolution
UseStructuredErrorfrom@agentuity/corefor error handling
Files:
packages/core/src/services/sandbox/create.tspackages/cli/src/cmd/cloud/sandbox/run.tspackages/cli/src/cmd/cloud/sandbox/job/get.tspackages/cli/src/cmd/cloud/sandbox/create.tspackages/cli/src/cmd/cloud/sandbox/fs/rmdir.tspackages/cli/src/cmd/cloud/sandbox/env.tspackages/cli/src/cmd/cloud/sandbox/pause.tspackages/cli/src/cmd/cloud/sandbox/job/create.tspackages/cli/src/cmd/cloud/sandbox/fs/mkdir.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/list.tspackages/cli/src/cmd/cloud/sandbox/fs/ls.tspackages/cli/src/cmd/cloud/sandbox/job/logs.tspackages/cli/src/cmd/cloud/sandbox/fs/rm.tspackages/cli/src/cmd/cloud/sandbox/job/list.tspackages/cli/src/cmd/cloud/sandbox/execution/list.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/delete.tspackages/cli/src/cmd/cloud/sandbox/delete.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/create.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/restore.tspackages/cli/src/cmd/cloud/sandbox/job/destroy.tspackages/core/src/services/sandbox/get.tspackages/cli/src/cmd/cloud/sandbox/resume.tspackages/cli/src/cmd/cloud/sandbox/util.tspackages/cli/src/cache/resource-region.tspackages/cli/src/cmd/cloud/sandbox/fs/download.tspackages/core/src/services/sandbox/run.tspackages/core/src/services/sandbox/getStatus.tspackages/cli/src/cmd/cloud/sandbox/exec.tspackages/cli/src/cmd/cloud/sandbox/get.tspackages/cli/src/cmd/cloud/sandbox/fs/upload.tspackages/cli/src/cmd/cloud/sandbox/fs/cp.ts
packages/core/src/**/*.ts
📄 CodeRabbit inference engine (packages/core/AGENTS.md)
packages/core/src/**/*.ts: Build TypeScript withbun run buildcommand
Run TypeScript type checking withbun run typecheckcommand
Ensure runtime compatibility with both Browser and Node/Bun environments with no runtime-specific code
Build target must be ESNext with TypeScript declaration files
Prefer interfaces for public APIs
Use generics for reusable type utilities
Ensure no side effects in all exports - all exports must be pure with no global mutations
All relative imports in TypeScript files MUST include the.tsextension
Runbun run buildbefore publishing to compile TypeScript
Files:
packages/core/src/services/sandbox/create.tspackages/core/src/services/sandbox/get.tspackages/core/src/services/sandbox/run.tspackages/core/src/services/sandbox/getStatus.ts
packages/cli/**/*.ts
📄 CodeRabbit inference engine (packages/cli/AGENTS.md)
Use
Bun.file(f).exists()instead ofexistsSync(f)for file existence checks
Files:
packages/cli/src/cmd/cloud/sandbox/run.tspackages/cli/src/cmd/cloud/sandbox/job/get.tspackages/cli/src/cmd/cloud/sandbox/create.tspackages/cli/src/cmd/cloud/sandbox/fs/rmdir.tspackages/cli/src/cmd/cloud/sandbox/env.tspackages/cli/src/cmd/cloud/sandbox/pause.tspackages/cli/src/cmd/cloud/sandbox/job/create.tspackages/cli/src/cmd/cloud/sandbox/fs/mkdir.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/list.tspackages/cli/src/cmd/cloud/sandbox/fs/ls.tspackages/cli/src/cmd/cloud/sandbox/job/logs.tspackages/cli/src/cmd/cloud/sandbox/fs/rm.tspackages/cli/src/cmd/cloud/sandbox/job/list.tspackages/cli/src/cmd/cloud/sandbox/execution/list.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/delete.tspackages/cli/src/cmd/cloud/sandbox/delete.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/create.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/restore.tspackages/cli/src/cmd/cloud/sandbox/job/destroy.tspackages/cli/src/cmd/cloud/sandbox/resume.tspackages/cli/src/cmd/cloud/sandbox/util.tspackages/cli/src/cache/resource-region.tspackages/cli/src/cmd/cloud/sandbox/fs/download.tspackages/cli/src/cmd/cloud/sandbox/exec.tspackages/cli/src/cmd/cloud/sandbox/get.tspackages/cli/src/cmd/cloud/sandbox/fs/upload.tspackages/cli/src/cmd/cloud/sandbox/fs/cp.ts
🧠 Learnings (3)
📚 Learning: 2025-12-21T00:31:41.858Z
Learnt from: jhaynie
Repo: agentuity/sdk PR: 274
File: packages/cli/src/cmd/build/vite/server-bundler.ts:12-41
Timestamp: 2025-12-21T00:31:41.858Z
Learning: In Bun runtime, BuildMessage and ResolveMessage are global types and are not exported from the bun module. Do not import { BuildMessage } from 'bun' or similar; these types are available globally and should be used without import. This applies to all TypeScript files that target the Bun runtime within the repository.
Applied to files:
packages/core/src/services/sandbox/create.tspackages/cli/src/cmd/cloud/sandbox/run.tspackages/cli/src/cmd/cloud/sandbox/job/get.tspackages/cli/src/cmd/cloud/sandbox/create.tspackages/cli/src/cmd/cloud/sandbox/fs/rmdir.tspackages/cli/src/cmd/cloud/sandbox/env.tspackages/cli/src/cmd/cloud/sandbox/pause.tspackages/cli/src/cmd/cloud/sandbox/job/create.tspackages/cli/src/cmd/cloud/sandbox/fs/mkdir.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/list.tspackages/cli/src/cmd/cloud/sandbox/fs/ls.tspackages/cli/src/cmd/cloud/sandbox/job/logs.tspackages/cli/src/cmd/cloud/sandbox/fs/rm.tspackages/cli/src/cmd/cloud/sandbox/job/list.tspackages/cli/src/cmd/cloud/sandbox/execution/list.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/delete.tspackages/cli/src/cmd/cloud/sandbox/delete.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/create.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/restore.tspackages/cli/src/cmd/cloud/sandbox/job/destroy.tspackages/core/src/services/sandbox/get.tspackages/cli/src/cmd/cloud/sandbox/resume.tspackages/cli/src/cmd/cloud/sandbox/util.tspackages/cli/src/cache/resource-region.tspackages/cli/src/cmd/cloud/sandbox/fs/download.tspackages/core/src/services/sandbox/run.tspackages/core/src/services/sandbox/getStatus.tspackages/cli/src/cmd/cloud/sandbox/exec.tspackages/cli/src/cmd/cloud/sandbox/get.tspackages/cli/src/cmd/cloud/sandbox/fs/upload.tspackages/cli/src/cmd/cloud/sandbox/fs/cp.ts
📚 Learning: 2026-01-13T04:32:02.691Z
Learnt from: jhaynie
Repo: agentuity/sdk PR: 565
File: packages/cli/src/cmd/cloud/region-lookup.ts:14-26
Timestamp: 2026-01-13T04:32:02.691Z
Learning: Enforce sandbox identifier prefixes in new code within the CLI cloud region lookup: new sandboxes must use the sbx_ prefix. The snbx_ prefix may appear in legacy code or examples, but do not use snbx_ for new sandboxes. When reviewing changes in packages/cli/src/cmd/cloud/, ensure any created sandbox identifiers use sbx_ and remove or migrate any snbx_ usages in newly added code.
Applied to files:
packages/cli/src/cmd/cloud/sandbox/run.tspackages/cli/src/cmd/cloud/sandbox/job/get.tspackages/cli/src/cmd/cloud/sandbox/create.tspackages/cli/src/cmd/cloud/sandbox/fs/rmdir.tspackages/cli/src/cmd/cloud/sandbox/env.tspackages/cli/src/cmd/cloud/sandbox/pause.tspackages/cli/src/cmd/cloud/sandbox/job/create.tspackages/cli/src/cmd/cloud/sandbox/fs/mkdir.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/list.tspackages/cli/src/cmd/cloud/sandbox/fs/ls.tspackages/cli/src/cmd/cloud/sandbox/job/logs.tspackages/cli/src/cmd/cloud/sandbox/fs/rm.tspackages/cli/src/cmd/cloud/sandbox/job/list.tspackages/cli/src/cmd/cloud/sandbox/execution/list.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/delete.tspackages/cli/src/cmd/cloud/sandbox/delete.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/create.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/restore.tspackages/cli/src/cmd/cloud/sandbox/job/destroy.tspackages/cli/src/cmd/cloud/sandbox/resume.tspackages/cli/src/cmd/cloud/sandbox/util.tspackages/cli/src/cmd/cloud/sandbox/fs/download.tspackages/cli/src/cmd/cloud/sandbox/exec.tspackages/cli/src/cmd/cloud/sandbox/get.tspackages/cli/src/cmd/cloud/sandbox/fs/upload.tspackages/cli/src/cmd/cloud/sandbox/fs/cp.ts
📚 Learning: 2026-02-17T14:23:15.448Z
Learnt from: potofpie
Repo: agentuity/sdk PR: 974
File: packages/cli/src/cmd/git/account/list.ts:39-40
Timestamp: 2026-02-17T14:23:15.448Z
Learning: In the Agentuity CLI framework (packages/cli), when a subcommand declares requires: { auth: true }, the framework will automatically call requireAuth() before invoking the handler. Do not call requireAuth(ctx) manually inside command handlers. This applies to all TypeScript command files under packages/cli/src, including paths like packages/cli/src/cmd/git/account/list.ts.
Applied to files:
packages/cli/src/cmd/cloud/sandbox/run.tspackages/cli/src/cmd/cloud/sandbox/job/get.tspackages/cli/src/cmd/cloud/sandbox/create.tspackages/cli/src/cmd/cloud/sandbox/fs/rmdir.tspackages/cli/src/cmd/cloud/sandbox/env.tspackages/cli/src/cmd/cloud/sandbox/pause.tspackages/cli/src/cmd/cloud/sandbox/job/create.tspackages/cli/src/cmd/cloud/sandbox/fs/mkdir.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/list.tspackages/cli/src/cmd/cloud/sandbox/fs/ls.tspackages/cli/src/cmd/cloud/sandbox/job/logs.tspackages/cli/src/cmd/cloud/sandbox/fs/rm.tspackages/cli/src/cmd/cloud/sandbox/job/list.tspackages/cli/src/cmd/cloud/sandbox/execution/list.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/delete.tspackages/cli/src/cmd/cloud/sandbox/delete.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/create.tspackages/cli/src/cmd/cloud/sandbox/checkpoint/restore.tspackages/cli/src/cmd/cloud/sandbox/job/destroy.tspackages/cli/src/cmd/cloud/sandbox/resume.tspackages/cli/src/cmd/cloud/sandbox/util.tspackages/cli/src/cache/resource-region.tspackages/cli/src/cmd/cloud/sandbox/fs/download.tspackages/cli/src/cmd/cloud/sandbox/exec.tspackages/cli/src/cmd/cloud/sandbox/get.tspackages/cli/src/cmd/cloud/sandbox/fs/upload.tspackages/cli/src/cmd/cloud/sandbox/fs/cp.ts
🔇 Additional comments (34)
packages/cli/src/cache/resource-region.ts (1)
21-23: Good SQLite tuning for local cache concurrency.
journal_mode=WAL,busy_timeout, andsynchronous=NORMALare sensible defaults here and align with the cache fault-tolerance direction.packages/cli/src/cmd/cloud/sandbox/create.ts (1)
209-210: Nice upgrade to cache full sandbox routing context.Persisting both
regionandorgIdhere is consistent with downstreamresolveSandboxTargetusage and avoids extra resolve calls.packages/core/src/services/sandbox/create.ts (1)
142-145: Backward-compatible schema extension looks correct.Adding optional
executionIdcleanly supports create+run flows without breaking existing consumers.packages/cli/src/cmd/cloud/sandbox/job/list.ts (1)
31-38: Resolver migration is solid here.Using
resolveSandboxTarget(...)with profile/config context is consistent and correctly threadsregion/orgIdintojobList.packages/cli/src/cmd/cloud/sandbox/checkpoint/list.ts (1)
43-50: Good adoption of shared sandbox target resolution.The resolved target object is used correctly for both client region and checkpoint org scoping.
packages/cli/src/cmd/cloud/sandbox/run.ts (1)
198-199: Good routing-context cache update after run.Caching
{sandboxId, region, orgId}here improves follow-up command targeting and matches the new resolver flow.packages/cli/src/cmd/cloud/sandbox/pause.ts (1)
40-47: Target resolution refactor is correctly applied.This keeps pause routing/org scoping aligned with the shared sandbox resolution path.
packages/cli/src/cmd/cloud/sandbox/job/logs.ts (1)
67-74: Looks good: resolver migration + explicit v2 stream selection.Both changes are consistent with the updated sandbox targeting and streaming protocol flow.
Also applies to: 130-130
packages/cli/src/cmd/cloud/sandbox/job/get.ts (1)
4-5:resolveSandboxTargetmigration looks correct here.The updated import and resolver call are consistent with the command’s auth/apiClient requirements and preserve the existing
jobGetflow cleanly.Also applies to: 25-32
packages/cli/src/cmd/cloud/sandbox/env.ts (1)
4-6: Nice refactor to shared sandbox target resolution.This update keeps the env mutation path intact while correctly sourcing
region/orgIdthroughresolveSandboxTarget.Also applies to: 47-54
packages/cli/src/cmd/cloud/sandbox/resume.ts (1)
4-6: Looks good—resolver integration is consistent.The switch to
resolveSandboxTargetis clean, and downstream resume execution still uses the resolvedregion/orgIdas expected.Also applies to: 40-47
packages/cli/src/cmd/cloud/sandbox/fs/rmdir.ts (1)
4-6: Good consistency update for sandbox targeting.The
rmdircommand now follows the shared resolver path while preserving the existingsandboxRmDirinvocation semantics.Also applies to: 50-57
packages/cli/src/cmd/cloud/sandbox/job/create.ts (1)
4-6: Refactor is solid injob create.Using
resolveSandboxTargethere keeps the command aligned with the newer shared routing/tenancy resolution flow.Also applies to: 36-43
packages/cli/src/cmd/cloud/sandbox/execution/list.ts (1)
1-1: Nice update—shared sandbox resolution is correctly applied.The new resolver call integrates cleanly, and the existing
orgIdoverride behavior is preserved.Also applies to: 6-6, 57-64
packages/cli/src/cmd/cloud/sandbox/checkpoint/delete.ts (1)
4-6:checkpoint deletemigration looks good.The switch to
resolveSandboxTargetis straightforward and keeps the delete operation flow intact.Also applies to: 66-73
packages/cli/src/cmd/cloud/sandbox/fs/ls.ts (1)
4-6: Good consistency change infs ls.Using
resolveSandboxTargethere aligns with the broader sandbox command pattern and preserves existing list behavior.Also applies to: 66-73
packages/cli/src/cmd/cloud/sandbox/fs/rm.ts (1)
38-45: Resolver migration looks correct.The new
resolveSandboxTarget(...)wiring is consistent and preserves downstream usage ofregionandorgId.packages/cli/src/cmd/cloud/sandbox/checkpoint/restore.ts (1)
45-52: Sandbox target resolution update is solid.No regressions in the restore path; resolved region/org routing is used correctly.
packages/cli/src/cmd/cloud/sandbox/fs/mkdir.ts (1)
49-56: LGTM on resolver migration inmkdir.The updated resolution call is correctly integrated and keeps API usage intact.
packages/cli/src/cmd/cloud/sandbox/get.ts (1)
87-108: Good integration of target resolution + target cache write.
resolveSandboxTarget(...)andcacheSandboxTarget(...)usage is consistent in this flow.packages/cli/src/cmd/cloud/sandbox/checkpoint/create.ts (1)
45-52: Checkpoint create resolver update looks correct.No issues found in the changed routing/tenant resolution path.
packages/cli/src/cmd/cloud/sandbox/job/destroy.ts (1)
41-48:job destroytarget resolution change is clean.The resolved
region/orgIdplumbing intojobStopremains correct.packages/cli/src/cmd/cloud/sandbox/fs/upload.ts (1)
67-68: Nice improvement: upload now streams archive content.This avoids loading whole archives into memory and aligns well with the perf objective.
packages/cli/src/cmd/cloud/sandbox/delete.ts (1)
60-67: Cache invalidation is correct; this concern can be closed.The
clearSandboxRegionCachefunction properly invalidates all cached data. BothcacheSandboxTarget(writing viasetResourceInfo) andclearSandboxRegionCache(deleting viadeleteResourceRegion) operate on the same row identified by(resource_type, profile, id). The DELETE statement removes the entire row from the cache table, including all fields (region, org_id, project_id), not just the region. No stale cache entries will remain after deletion.packages/cli/src/cmd/cloud/sandbox/fs/download.ts (1)
55-76: LGTM! Good refactor to streaming architecture.The switch from in-memory chunk collection to direct disk streaming via
pipeline(Readable.fromWeb(...), createWriteStream(...))reduces memory pressure for large archives. The use ofresolveSandboxTargetcorrectly implements cache-first sandbox resolution.packages/core/src/services/sandbox/getStatus.ts (1)
16-52: LGTM! Clean extension of status API with wait parameters.The
waitForStatusandwaitMsparameters enable server-side waiting, which aligns with the PR's goal of reducing tail latency by pushing polling to the server. ThewaitMs != nullcheck correctly handles bothundefinedandnullcases.packages/cli/src/cmd/cloud/sandbox/exec.ts (1)
225-260: LGTM! Clever optimization with stream racing.The race between
executionWaitPromiseand stream completion, with the fast poll fallback when streams EOF with 0 bytes, reduces latency for quick-completing commands. Thevoid executionWaitPromise.catch(() => undefined)correctly suppresses unhandled rejection warnings when aborting.packages/core/src/services/sandbox/get.ts (1)
192-234: LGTM! Consistent with getStatus.ts wait parameter handling.The
waitForStatusandwaitMsparameters mirror the implementation ingetStatus.ts, maintaining API consistency across sandbox status and get endpoints.packages/core/src/services/sandbox/run.ts (2)
183-217: LGTM! Solid refactor for parallel execution and stream handling.The new approach of waiting for execution completion in parallel with stream consumption (when
executionIdis available) eliminates unnecessary sequential latency. The fallback to stream-first completion for missingexecutionIdmaintains backward compatibility.
319-353: LGTM! Clean long-polling implementation.The
waitForExecutionCompletionfunction correctly implements long-polling with proper abort signal checking before each iteration and terminal status detection.packages/cli/src/cmd/cloud/sandbox/util.ts (1)
100-107: LGTM! Clean cache helper.The
cacheSandboxTargetfunction provides a simple wrapper for persisting both region and orgId, complementing the existingcacheSandboxRegionfunction.packages/cli/src/cmd/cloud/sandbox/fs/cp.ts (3)
394-407: LGTM! Good use of temp directory with proper cleanup.The archive-based upload approach using
mkdtempSyncwith cleanup infinallyis correct and handles errors gracefully. Usingtar.gzarchives is more efficient than per-file uploads for directories.
514-537: LGTM! Streaming archive extraction for directory downloads.The download-and-extract approach using temp files with proper cleanup is efficient. The
tar.extractwithpreservePaths: falseandstrict: trueprovides safe extraction behavior.
486-501: LGTM! Efficient single-file streaming download.Using
pipelinewithReadable.fromWeb()to stream directly to disk avoids buffering the entire file in memory. TheBun.file(targetPath).sizeis a clean way to get the final byte count.
| export async function resolveSandboxTarget( | ||
| logger: Logger, | ||
| auth: AuthData, | ||
| apiClient: APIClient, | ||
| sandboxId: string, | ||
| profileName = 'production', | ||
| config?: Config | null | ||
| ): Promise<ResolvedSandboxTarget> { | ||
| const cachedInfo = await getResourceInfo('sandbox', profileName, sandboxId); | ||
| if (cachedInfo?.region && cachedInfo?.orgId) { | ||
| logger.trace( | ||
| `[sandbox] Found cached target for ${sandboxId}: ${cachedInfo.region}/${cachedInfo.orgId}` | ||
| ); | ||
| return { region: cachedInfo.region, orgId: cachedInfo.orgId }; | ||
| } | ||
|
|
||
| logger.trace(`[sandbox] Cache miss for target ${sandboxId}, resolving via CLI API`); | ||
| const globalClient = | ||
| apiClient ?? (await getGlobalCatalystAPIClient(logger, auth, profileName, undefined, config)); | ||
| const sandbox = await sandboxResolve(globalClient, sandboxId); | ||
| await setResourceInfo('sandbox', profileName, sandboxId, sandbox.region, sandbox.orgId); | ||
| return { region: sandbox.region, orgId: sandbox.orgId }; | ||
| } |
There was a problem hiding this comment.
Unreachable fallback for apiClient parameter.
The apiClient parameter is typed as APIClient (required), but line 41-42 has fallback code using ?? that will never execute since apiClient cannot be null or undefined based on the type signature.
Either make the parameter optional (apiClient?: APIClient | null) to match the intended behavior, or remove the fallback:
🔧 Proposed fix: make apiClient optional
export async function resolveSandboxTarget(
logger: Logger,
auth: AuthData,
- apiClient: APIClient,
+ apiClient: APIClient | null,
sandboxId: string,
profileName = 'production',
config?: Config | null
): Promise<ResolvedSandboxTarget> {🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/cli/src/cmd/cloud/sandbox/util.ts` around lines 24 - 46, The
apiClient fallback is unreachable because resolveSandboxTarget's parameter
apiClient is typed as required; update the function signature in
resolveSandboxTarget to make apiClient optional (e.g., apiClient?: APIClient |
null) so the nullish-coalescing fallback to getGlobalCatalystAPIClient can run,
and ensure any call sites that pass undefined/null are adjusted or accept the
optional parameter; no other logic changes needed (keep sandboxResolve,
getGlobalCatalystAPIClient, and setResourceInfo usage as-is).
# Conflicts: # packages/cli/src/cmd/cloud/sandbox/exec.ts # packages/cli/src/cmd/cloud/sandbox/run.ts
📦 Canary Packages Publishedversion: PackagesInstallAdd to your {
"dependencies": {
"@agentuity/schedule": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-schedule-2.0.9-1ae3d87.tgz",
"@agentuity/runtime": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-runtime-2.0.9-1ae3d87.tgz",
"@agentuity/react": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-react-2.0.9-1ae3d87.tgz",
"@agentuity/keyvalue": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-keyvalue-2.0.9-1ae3d87.tgz",
"@agentuity/postgres": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-postgres-2.0.9-1ae3d87.tgz",
"@agentuity/email": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-email-2.0.9-1ae3d87.tgz",
"@agentuity/sandbox": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-sandbox-2.0.9-1ae3d87.tgz",
"@agentuity/workbench": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-workbench-2.0.9-1ae3d87.tgz",
"@agentuity/server": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-server-2.0.9-1ae3d87.tgz",
"@agentuity/webhook": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-webhook-2.0.9-1ae3d87.tgz",
"@agentuity/opencode": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-opencode-2.0.9-1ae3d87.tgz",
"@agentuity/frontend": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-frontend-2.0.9-1ae3d87.tgz",
"@agentuity/schema": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-schema-2.0.9-1ae3d87.tgz",
"@agentuity/drizzle": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-drizzle-2.0.9-1ae3d87.tgz",
"@agentuity/queue": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-queue-2.0.9-1ae3d87.tgz",
"@agentuity/auth": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-auth-2.0.9-1ae3d87.tgz",
"@agentuity/db": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-db-2.0.9-1ae3d87.tgz",
"@agentuity/coder": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-coder-2.0.9-1ae3d87.tgz",
"@agentuity/migrate": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-migrate-2.0.9-1ae3d87.tgz",
"@agentuity/cli": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-cli-2.0.9-1ae3d87.tgz",
"@agentuity/vector": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-vector-2.0.9-1ae3d87.tgz",
"@agentuity/core": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-core-2.0.9-1ae3d87.tgz",
"@agentuity/task": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-task-2.0.9-1ae3d87.tgz",
"@agentuity/evals": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-evals-2.0.9-1ae3d87.tgz",
"@agentuity/claude-code": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-claude-code-2.0.9-1ae3d87.tgz",
"@agentuity/coder-tui": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-coder-tui-2.0.9-1ae3d87.tgz"
}
}Or install directly: bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-schedule-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-runtime-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-react-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-keyvalue-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-postgres-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-email-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-sandbox-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-workbench-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-server-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-webhook-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-opencode-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-frontend-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-schema-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-drizzle-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-queue-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-auth-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-db-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-coder-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-migrate-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-cli-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-vector-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-core-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-task-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-evals-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-claude-code-2.0.9-1ae3d87.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-1ae3d87/agentuity-coder-tui-2.0.9-1ae3d87.tgz |
Brings in 10 commits from main on top of the v3 branch: - More perf improvements (#1416) - Relax stream namespace timestamp fields (#1406) - feat: add per-sandbox paused timeout support (#1392) - fix(ci): handle successful docs sync transport errors (#1415) - Update stale docs (#1404) - feat(docs): add Pagefind keyword search (#1412) - fix(ci): run release-next tests with test env (#1414) - Add coder Hub rpc_ready protocol event (#1413) - fix(docs): improve Ask AI query handling (#1411) - Move default template from agent pattern to route-only (#1386) Conflict resolutions: Modify/delete (deleted on v3, kept deleted — main's edits dropped): - packages/cli/src/cmd/build/vite/vite-asset-server-config.ts - packages/runtime/src/middleware.ts - packages/runtime/src/services/sandbox/http.ts - templates/_base/src/api/index.ts - templates/default/package.overlay.json - templates/default/src/api/index.ts - templates/default/src/web/App.tsx File location (apps/docs -> docs rename from v3): - docs/src/web/lib/pagefind-search.ts (placed at v3 path) Content: - .github/workflows/release-next.yaml — deduped the NODE_ENV env block on the Unit tests step (both sides added it; kept main's placement before run:); kept v3's trailing newline. - docs/src/api/streaming/route.ts — kept v3's defensive runtime type narrowing for body.model (added by CodeRabbit feedback) but adopted main's default model name 'gpt-5.4-mini' to match the rest of the docs demo apps. - bun.lock — regenerated from the merged package manifests.
Summary by CodeRabbit
New Features
Bug Fixes
Performance
Tests