Conversation
Boxes can now be created with a `size` option that controls CPU and memory allocation. Supported in Box.create() and Box.fromSnapshot(). The size is exposed as a readonly property on the Box instance and defaults to "small". Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extract BoxConnectionOptions as shared base for BoxConfig, EphemeralBoxConfig, ListOptions, and BoxGetOptions. Add static delete()/deleteAll() to both Box and EphemeralBox for bulk deletion of boxes by ID or all at once. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Box is now generic on TProvider (Box<Agent.ClaudeCode>, Box<Agent.Codex>, Box<Agent.OpenCode>) so agentOptions in run/stream are type-checked per provider. Options are forwarded as agent_options in the API request body. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add skills.add(), skills.remove(), and skills.list() methods for managing Context7 registry skills on a box. Skills are added via POST, removed via DELETE, and listed by fetching the box's enabled_skills from the API. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Support attaching files to prompts via two formats: - Local file paths (string[]) sent as multipart form data - Base64 data objects sent inline as JSON with media_type wire format Both formats work with box.agent.run() and box.agent.stream(). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Support size parameter in EphemeralBox.create() and EphemeralBox.fromSnapshot() for configuring CPU and memory allocation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Split Box.deleteAll test into its own file and vitest config so it runs first via a separate vitest invocation, preventing it from wiping boxes that other parallel integration tests depend on. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Blob was created without a type, causing Node.js to send Content-Type: application/octet-stream — which the server silently ignores. Now infers the MIME type from the file extension. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove Box.deleteAll/EphemeralBox.deleteAll and all associated tests, config, and changeset references. Rename agentOptions to options in RunOptions and StreamOptions interfaces. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
New Box API Endpoints — SDK Support
Progress
sizeoption onBox.create()andBox.fromSnapshot()Box.delete()andBox.deleteAll()static methods +BoxConnectionOptionsrefactoragentOptionsonRunOptions/StreamOptionswithBox<TProvider>genericbox.skills.add(),box.skills.remove(),box.skills.list()+enabled_skillsonBoxDatafilesfield on run/stream with multipart form data supportGet Box by ID or Name— skipped (already works transparently)CLAUDE.md & Skills Support— skipped (server-side behavior, no SDK change needed)—fromSnapshotnew fieldsnetwork_policyandattach_headersalready sent;sizecovered by Box SizesBox Sizes
Choose CPU and memory allocation at creation time. Defaults to
"small".Also works with snapshots:
Implementation details
BoxSizetype ("small" | "medium" | "large") added toBoxConfig,BoxData, and exported from the packagebox.sizeis a readonly property onBoxinstances, defaulting to"small"when the API response omits itBox.create()andBox.fromSnapshot()sendsizein the request body when providedBox.get()Delete Multiple Boxes
Delete specific boxes by ID, or wipe all at once.
Both methods are also available on
EphemeralBox:Implementation details
BoxConnectionOptionsbase interface (apiKey,baseUrl) —BoxConfig,EphemeralBoxConfig,ListOptions, andBoxGetOptionsnow extend it instead of redeclaring those fieldsBox.delete()sendsDELETE /v2/boxwith{ ids: [...] }JSON bodyBox.deleteAll()sendsDELETE /v2/boxwithout a bodyEphemeralBox.deleteandEphemeralBox.deleteAlldelegate to theBoxstatic methodsBoxandEphemeralBoxBox.list()Agent Options
Pass SDK-specific options to the underlying agent. The options are type-checked based on the provider.
Also works with webhooks:
Implementation details
ClaudeCodeAgentOptions—maxTurns,maxBudgetUsd,effort,thinking,disallowedTools,agents,promptSuggestions,fallbackModel,systemPromptCodexAgentOptions—model_reasoning_effort,model_reasoning_summary,personality,web_searchOpenCodeAgentOptions—reasoningEffort,textVerbosity,reasoningSummary,thinkingAgentOptions<TProvider>conditional type resolves to the correct interface based on the providerBox<TProvider>— the Box class is now generic.Box.create<TProvider>(),Box.get<TProvider>(), andBox.fromSnapshot<TProvider>()propagate the provider soagentOptionsinrun()andstream()is type-checkedagentOptionsis serialized asagent_optionsin the JSON request body for all run paths (streaming, non-streaming, webhook)Skills API
Add, remove, and list platform skills from the Context7 registry on a box.
Planned implementation
enabled_skills?: string[]onBoxDatabox.skills.add(skillId)—POST /v2/box/{id}/config/skillswith{ skill_id }box.skills.remove(skillId)—DELETE /v2/box/{id}/config/skills/{owner}/{repo}/{skill}box.skills.list()— returnsenabled_skillsfrom box dataMulti-Modal Prompt Files
Attach files to prompts. Two formats supported:
Both formats work with
box.agent.run()andbox.agent.stream():Testing with curl
Implementation details
PromptFilestype:string[](file paths → multipart) or{ data, mediaType, filename? }[](base64 → JSON)files?: PromptFilesadded to bothRunOptionsandStreamOptionsbuildRunRequest()helper detects format: file paths build aFormDatawith binary parts; base64 objects are serialized asfilesarray in JSON withmedia_typewire formatbuildMultipartBody()reads files from disk, appends all options as form fields (objects serialized as JSON strings)