chore(release): update version to 0.2.1

This commit is contained in:
Nathan Flurry 2026-02-11 20:45:33 -08:00
parent a0955ba752
commit ee9ad25069
23 changed files with 76 additions and 82 deletions

View file

@ -3,7 +3,7 @@ resolver = "2"
members = ["server/packages/*", "gigacode"] members = ["server/packages/*", "gigacode"]
[workspace.package] [workspace.package]
version = "0.2.0" version = "0.2.1"
edition = "2021" edition = "2021"
authors = [ "Rivet Gaming, LLC <developer@rivet.gg>" ] authors = [ "Rivet Gaming, LLC <developer@rivet.gg>" ]
license = "Apache-2.0" license = "Apache-2.0"
@ -12,13 +12,13 @@ description = "Universal API for automatic coding agents in sandboxes. Supports
[workspace.dependencies] [workspace.dependencies]
# Internal crates # Internal crates
sandbox-agent = { version = "0.2.0", path = "server/packages/sandbox-agent" } sandbox-agent = { version = "0.2.1", path = "server/packages/sandbox-agent" }
sandbox-agent-error = { version = "0.2.0", path = "server/packages/error" } sandbox-agent-error = { version = "0.2.1", path = "server/packages/error" }
sandbox-agent-agent-management = { version = "0.2.0", path = "server/packages/agent-management" } sandbox-agent-agent-management = { version = "0.2.1", path = "server/packages/agent-management" }
sandbox-agent-agent-credentials = { version = "0.2.0", path = "server/packages/agent-credentials" } sandbox-agent-agent-credentials = { version = "0.2.1", path = "server/packages/agent-credentials" }
sandbox-agent-opencode-adapter = { version = "0.2.0", path = "server/packages/opencode-adapter" } sandbox-agent-opencode-adapter = { version = "0.2.1", path = "server/packages/opencode-adapter" }
sandbox-agent-opencode-server-manager = { version = "0.2.0", path = "server/packages/opencode-server-manager" } sandbox-agent-opencode-server-manager = { version = "0.2.1", path = "server/packages/opencode-server-manager" }
acp-http-adapter = { version = "0.2.0", path = "server/packages/acp-http-adapter" } acp-http-adapter = { version = "0.2.1", path = "server/packages/acp-http-adapter" }
# Serialization # Serialization
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }

View file

@ -10,7 +10,7 @@
"license": { "license": {
"name": "Apache-2.0" "name": "Apache-2.0"
}, },
"version": "0.2.0" "version": "0.2.1"
}, },
"servers": [ "servers": [
{ {

View file

@ -1,6 +1,5 @@
import { useState } from "react"; import { useState } from "react";
import { getAvatarLabel, getMessageClass } from "./messageUtils"; import { getAvatarLabel, getMessageClass } from "./messageUtils";
import renderContentPart from "./renderContentPart";
import type { TimelineEntry } from "./types"; import type { TimelineEntry } from "./types";
import { AlertTriangle, Settings, ChevronRight, ChevronDown } from "lucide-react"; import { AlertTriangle, Settings, ChevronRight, ChevronDown } from "lucide-react";
@ -34,17 +33,17 @@ const CollapsibleMessage = ({
const ChatMessages = ({ const ChatMessages = ({
entries, entries,
sessionError, sessionError,
eventError,
messagesEndRef messagesEndRef
}: { }: {
entries: TimelineEntry[]; entries: TimelineEntry[];
sessionError: string | null; sessionError: string | null;
eventError: string | null;
messagesEndRef: React.RefObject<HTMLDivElement>; messagesEndRef: React.RefObject<HTMLDivElement>;
}) => { }) => {
return ( return (
<div className="messages"> <div className="messages">
{entries.map((entry) => { {entries.map((entry) => {
const messageClass = getMessageClass(entry);
if (entry.kind === "meta") { if (entry.kind === "meta") {
const isError = entry.meta?.severity === "error"; const isError = entry.meta?.severity === "error";
const title = entry.meta?.title ?? "Status"; const title = entry.meta?.title ?? "Status";
@ -63,7 +62,6 @@ const ChatMessages = ({
); );
} }
// Other status messages - collapsible
return ( return (
<CollapsibleMessage <CollapsibleMessage
key={entry.id} key={entry.id}
@ -77,74 +75,71 @@ const ChatMessages = ({
); );
} }
const item = entry.item; if (entry.kind === "reasoning") {
if (!item) return null; return (
const hasParts = (item.content ?? []).length > 0; <div key={entry.id} className="message assistant">
const isInProgress = item.status === "in_progress"; <div className="avatar">{getAvatarLabel("assistant")}</div>
const isFailed = item.status === "failed"; <div className="message-content">
const messageClass = getMessageClass(item); <div className="message-meta">
const statusLabel = item.status !== "completed" ? item.status.replace("_", " ") : ""; <span>reasoning - {entry.reasoning?.visibility ?? "public"}</span>
const kindLabel = item.kind.replace("_", " "); </div>
const isTool = messageClass === "tool"; <div className="part-body muted">{entry.reasoning?.text ?? ""}</div>
</div>
</div>
);
}
if (entry.kind === "tool") {
const isComplete = entry.toolStatus === "completed" || entry.toolStatus === "failed";
const isFailed = entry.toolStatus === "failed";
const statusLabel = entry.toolStatus && entry.toolStatus !== "completed"
? entry.toolStatus.replace("_", " ")
: "";
// Tool results - collapsible
if (isTool) {
return ( return (
<CollapsibleMessage <CollapsibleMessage
key={entry.id} key={entry.id}
id={entry.id} id={entry.id}
icon={<span className="tool-icon">T</span>} icon={<span className="tool-icon">T</span>}
label={`${kindLabel}${statusLabel ? ` (${statusLabel})` : ""}`} label={`tool call - ${entry.toolName ?? "tool"}${statusLabel ? ` (${statusLabel})` : ""}`}
className="tool" className={`tool${isFailed ? " error" : ""}`}
> >
{hasParts ? ( {entry.toolInput && <pre className="code-block">{entry.toolInput}</pre>}
(item.content ?? []).map(renderContentPart) {isComplete && entry.toolOutput && (
) : entry.deltaText ? ( <div className="part">
<span>{entry.deltaText}</span> <div className="part-title">result</div>
) : ( <pre className="code-block">{entry.toolOutput}</pre>
<span className="muted">No content.</span> </div>
)}
{!isComplete && !entry.toolInput && (
<span className="thinking-indicator">
<span className="thinking-dot" />
<span className="thinking-dot" />
<span className="thinking-dot" />
</span>
)} )}
</CollapsibleMessage> </CollapsibleMessage>
); );
} }
return ( return (
<div key={entry.id} className={`message ${messageClass} ${isFailed ? "error no-avatar" : ""}`}> <div key={entry.id} className={`message ${messageClass}`}>
{!isFailed && <div className="avatar">{getAvatarLabel(messageClass)}</div>} <div className="avatar">{getAvatarLabel(messageClass)}</div>
<div className="message-content"> <div className="message-content">
{(item.kind !== "message" || item.status !== "completed") && ( {entry.text ? (
<div className="message-meta"> <div className="part-body">{entry.text}</div>
{isFailed && <AlertTriangle size={14} className="error-icon" />} ) : (
<span>{kindLabel}</span>
{statusLabel && (
<span className={`pill ${item.status === "failed" ? "danger" : "accent"}`}>
{statusLabel}
</span>
)}
</div>
)}
{hasParts ? (
(item.content ?? []).map(renderContentPart)
) : entry.deltaText ? (
<span>
{entry.deltaText}
{isInProgress && <span className="cursor" />}
</span>
) : isInProgress ? (
<span className="thinking-indicator"> <span className="thinking-indicator">
<span className="thinking-dot" /> <span className="thinking-dot" />
<span className="thinking-dot" /> <span className="thinking-dot" />
<span className="thinking-dot" /> <span className="thinking-dot" />
</span> </span>
) : (
<span className="muted">No content yet.</span>
)} )}
</div> </div>
</div> </div>
); );
})} })}
{sessionError && <div className="message-error">{sessionError}</div>} {sessionError && <div className="message-error">{sessionError}</div>}
{eventError && <div className="message-error">{eventError}</div>}
<div ref={messagesEndRef} /> <div ref={messagesEndRef} />
</div> </div>
); );

View file

@ -1,13 +1,12 @@
import type { UniversalItem } from "sandbox-agent"; import type { TimelineEntry } from "./types";
import { Settings, AlertTriangle, User } from "lucide-react"; import { Settings, AlertTriangle, User } from "lucide-react";
import type { ReactNode } from "react"; import type { ReactNode } from "react";
export const getMessageClass = (item: UniversalItem) => { export const getMessageClass = (entry: TimelineEntry) => {
if (item.kind === "tool_call" || item.kind === "tool_result") return "tool"; if (entry.kind === "tool") return "tool";
if (item.kind === "system" || item.kind === "status") return "system"; if (entry.kind === "meta") return entry.meta?.severity === "error" ? "error" : "system";
if (item.role === "user") return "user"; if (entry.kind === "reasoning") return "assistant";
if (item.role === "tool") return "tool"; if (entry.role === "user") return "user";
if (item.role === "system") return "system";
return "assistant"; return "assistant";
}; };

View file

@ -1,6 +1,6 @@
{ {
"name": "acp-http-client", "name": "acp-http-client",
"version": "0.2.0", "version": "0.2.1",
"description": "Protocol-faithful ACP JSON-RPC over streamable HTTP client.", "description": "Protocol-faithful ACP JSON-RPC over streamable HTTP client.",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-shared", "name": "@sandbox-agent/cli-shared",
"version": "0.2.0", "version": "0.2.1",
"description": "Shared helpers for sandbox-agent CLI and SDK", "description": "Shared helpers for sandbox-agent CLI and SDK",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli", "name": "@sandbox-agent/cli",
"version": "0.2.0", "version": "0.2.1",
"description": "CLI for sandbox-agent - run AI coding agents in sandboxes", "description": "CLI for sandbox-agent - run AI coding agents in sandboxes",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-darwin-arm64", "name": "@sandbox-agent/cli-darwin-arm64",
"version": "0.2.0", "version": "0.2.1",
"description": "sandbox-agent CLI binary for macOS ARM64", "description": "sandbox-agent CLI binary for macOS ARM64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-darwin-x64", "name": "@sandbox-agent/cli-darwin-x64",
"version": "0.2.0", "version": "0.2.1",
"description": "sandbox-agent CLI binary for macOS x64", "description": "sandbox-agent CLI binary for macOS x64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-linux-arm64", "name": "@sandbox-agent/cli-linux-arm64",
"version": "0.2.0", "version": "0.2.1",
"description": "sandbox-agent CLI binary for Linux arm64", "description": "sandbox-agent CLI binary for Linux arm64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-linux-x64", "name": "@sandbox-agent/cli-linux-x64",
"version": "0.2.0", "version": "0.2.1",
"description": "sandbox-agent CLI binary for Linux x64", "description": "sandbox-agent CLI binary for Linux x64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-win32-x64", "name": "@sandbox-agent/cli-win32-x64",
"version": "0.2.0", "version": "0.2.1",
"description": "sandbox-agent CLI binary for Windows x64", "description": "sandbox-agent CLI binary for Windows x64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/gigacode", "name": "@sandbox-agent/gigacode",
"version": "0.2.0", "version": "0.2.1",
"description": "Gigacode CLI (sandbox-agent with OpenCode attach by default)", "description": "Gigacode CLI (sandbox-agent with OpenCode attach by default)",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/gigacode-darwin-arm64", "name": "@sandbox-agent/gigacode-darwin-arm64",
"version": "0.2.0", "version": "0.2.1",
"description": "gigacode CLI binary for macOS arm64", "description": "gigacode CLI binary for macOS arm64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/gigacode-darwin-x64", "name": "@sandbox-agent/gigacode-darwin-x64",
"version": "0.2.0", "version": "0.2.1",
"description": "gigacode CLI binary for macOS x64", "description": "gigacode CLI binary for macOS x64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/gigacode-linux-arm64", "name": "@sandbox-agent/gigacode-linux-arm64",
"version": "0.2.0", "version": "0.2.1",
"description": "gigacode CLI binary for Linux arm64", "description": "gigacode CLI binary for Linux arm64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/gigacode-linux-x64", "name": "@sandbox-agent/gigacode-linux-x64",
"version": "0.2.0", "version": "0.2.1",
"description": "gigacode CLI binary for Linux x64", "description": "gigacode CLI binary for Linux x64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/gigacode-win32-x64", "name": "@sandbox-agent/gigacode-win32-x64",
"version": "0.2.0", "version": "0.2.1",
"description": "gigacode CLI binary for Windows x64", "description": "gigacode CLI binary for Windows x64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/persist-indexeddb", "name": "@sandbox-agent/persist-indexeddb",
"version": "0.2.0", "version": "0.2.1",
"description": "IndexedDB persistence driver for the Sandbox Agent TypeScript SDK", "description": "IndexedDB persistence driver for the Sandbox Agent TypeScript SDK",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/persist-postgres", "name": "@sandbox-agent/persist-postgres",
"version": "0.2.0", "version": "0.2.1",
"description": "PostgreSQL persistence driver for the Sandbox Agent TypeScript SDK", "description": "PostgreSQL persistence driver for the Sandbox Agent TypeScript SDK",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/persist-rivet", "name": "@sandbox-agent/persist-rivet",
"version": "0.2.0", "version": "0.2.1",
"description": "Rivet Actor persistence driver for the Sandbox Agent TypeScript SDK", "description": "Rivet Actor persistence driver for the Sandbox Agent TypeScript SDK",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/persist-sqlite", "name": "@sandbox-agent/persist-sqlite",
"version": "0.2.0", "version": "0.2.1",
"description": "SQLite persistence driver for the Sandbox Agent TypeScript SDK", "description": "SQLite persistence driver for the Sandbox Agent TypeScript SDK",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "sandbox-agent", "name": "sandbox-agent",
"version": "0.2.0", "version": "0.2.1",
"description": "Universal API for automatic coding agents in sandboxes. Supports Claude Code, Codex, OpenCode, and Amp.", "description": "Universal API for automatic coding agents in sandboxes. Supports Claude Code, Codex, OpenCode, and Amp.",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {