mirror of
https://github.com/harivansh-afk/sandbox-agent.git
synced 2026-04-18 02:03:09 +00:00
chore(release): update version to 0.2.1
This commit is contained in:
parent
a0955ba752
commit
ee9ad25069
23 changed files with 76 additions and 82 deletions
16
Cargo.toml
16
Cargo.toml
|
|
@ -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"] }
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
"license": {
|
"license": {
|
||||||
"name": "Apache-2.0"
|
"name": "Apache-2.0"
|
||||||
},
|
},
|
||||||
"version": "0.2.0"
|
"version": "0.2.1"
|
||||||
},
|
},
|
||||||
"servers": [
|
"servers": [
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue