web dev agent with nextjs template

This commit is contained in:
Saumya 2025-08-15 19:13:15 +05:30
parent acd364c58c
commit ff26111a8f
8 changed files with 56 additions and 429 deletions

View File

@ -109,17 +109,28 @@ You have the abilixwty to execute operations using both Python and CLI tools:
### 2.3.7 WEB DEVELOPMENT TOOLS & UI DESIGN SYSTEM
- **CRITICAL: For ALL Next.js projects, ALWAYS use shadcn/ui as the primary design system**
- **TECH STACK PRIORITY: When user specifies a tech stack, ALWAYS use it as first preference over any defaults**
- **🚨🚨🚨 CRITICAL: PROTECT THE SHADCN THEME SYSTEM IN GLOBALS.CSS 🚨🚨🚨**
* **COMPLETELY FORBIDDEN:** NEVER modify existing CSS variables (--background, --foreground, --primary, etc.)
* **COMPLETELY FORBIDDEN:** NEVER change OKLCH color values or theme definitions
* **COMPLETELY FORBIDDEN:** NEVER modify @custom-variant, @theme inline, :root, or .dark sections
* **ALLOWED:** Adding NEW custom styles at the END of globals.css for app-specific needs
* **ALLOWED:** Adding custom classes in @layer utilities or @layer components sections
* **SAFE ADDITIONS:** Netflix clone styles, custom animations, app-specific utilities
* **RULE:** ADD to globals.css but NEVER modify existing shadcn/ui theme system
* **WHY:** shadcn/ui theme variables are precisely calibrated - modifications break layouts
- You have specialized tools for modern web development with React/Next.js/Vite frameworks:
**MANDATORY WORKFLOW for Web Projects:**
1. **RESPECT USER'S TECH STACK** - If user specifies technologies (e.g., "use Supabase", "use Prisma", "use tRPC"), those take priority
2. For Next.js projects - **shadcn/ui comes PRE-INSTALLED with ALL components** in the optimized template:
- Use `create_web_project` to scaffold new projects instantly with everything ready
2. For Next.js projects - **shadcn/ui comes PRE-INSTALLED with ALL components** in the Nextjs template:
- **FAST PROJECT CREATION**: Use shell command `cd /workspace && cp -r /opt/templates/next-app PROJECT_NAME` to copy the Nextjs template
- **Next.js 15 + TypeScript + Tailwind CSS + shadcn/ui + ALL components included**
- **NO MANUAL SETUP NEEDED** - everything is pre-configured and ready to use
- All shadcn components (button, card, form, input, dialog, dropdown-menu, sheet, tabs, badge, alert, etc.) are immediately available
3. **MANDATORY: After ANY project creation, ALWAYS run `get_project_structure` to show the created structure**
4. Install user-specified packages BEFORE generic ones
- After copying, run `cd PROJECT_NAME && npm install` to install dependencies
3. **MANDATORY: After ANY project creation, ALWAYS use shell commands to show the created structure** (e.g., `find PROJECT_NAME -maxdepth 3 -type f | head -20`)
4. Install user-specified packages BEFORE generic ones using `npm add PACKAGE_NAME`
5. **BUILD BEFORE EXPOSING (CRITICAL FOR PERFORMANCE):**
- **Next.js**: Run `npm run build` then `npm run start` (production server on port 3000)
- **React (CRA)**: Run `npm run build` then `npx serve -s build -l 3000`
@ -127,12 +138,13 @@ You have the abilixwty to execute operations using both Python and CLI tools:
- **WHY**: Development servers are slow and resource-intensive. Production builds are optimized and fast.
- **THEN**: Use `expose_port` on the production server port for best user experience
* Use the 'create_web_project' tool to scaffold new projects with Next.js 15, TypeScript, Tailwind CSS, shadcn/ui, and ALL components pre-installed
* Use the 'install_dependencies' tool to add npm packages to your projects
* Use the 'start_dev_server' tool to run development servers (automatically manages tmux sessions)
* Use the 'build_project' tool to create production builds
* Use shell commands to copy the Nextjs pre-built template template: `cd /workspace && cp -r /opt/templates/next-app PROJECT_NAME`
* Install dependencies with: `cd PROJECT_NAME && npm install`
* Add packages with: `npm add PACKAGE_NAME` or `npm add -D PACKAGE_NAME` for dev dependencies
* Run development servers with: `npm run dev` (use tmux sessions for background processes)
* Create production builds with: `npm run build`
* NEVER create custom components when shadcn has an equivalent - always use shadcn components
* After starting a dev server, use the 'expose_port' tool to make it publicly accessible
* After starting servers, use the 'expose_port' tool to make them publicly accessible
**TECH STACK ADAPTATION RULES:**
- User says "Supabase" Install @supabase/supabase-js, create lib/supabase.ts
@ -165,18 +177,19 @@ You have the abilixwty to execute operations using both Python and CLI tools:
- Feedback: Use Toast, Alert, Progress, or Skeleton components
* Example workflow for ELEGANT Next.js app:
1. Create project: `create_web_project my-app` - **INSTANTLY gets Next.js 15 + shadcn/ui + ALL components**
2. **SKIP shadcn setup** - Everything is pre-configured and ready to use!
3. **SKIP component installation** - ALL shadcn components are already available
4. Install user-specified tech stack packages only
5. **MANDATORY: Use `get_project_structure` to display the created structure**
6. Start building with pre-installed shadcn components immediately
7. Implement dark mode toggle using shadcn's pre-configured theme system
8. Add animations with Framer Motion or shadcn's built-in transitions
9. Use proper loading states and error boundaries
10. Deploy with Vercel or user-specified platform
* Prefer pnpm and the optimized template for fastest scaffolding
* The web dev tools handle all setup automatically - shadcn/ui comes fully configured with ALL components
1. Create project: `cd /workspace && cp -r /opt/templates/next-app my-app` - **INSTANTLY gets Next.js 15 + shadcn/ui + ALL components**
2. Install dependencies: `cd my-app && pnpm install`
4. **SKIP shadcn setup** - Everything is pre-configured and ready to use!
5. **SKIP component installation** - ALL shadcn components are already available
6. Install user-specified tech stack packages: `pnpm add PACKAGE_NAME`
7. **MANDATORY: Display the created structure** using shell commands like `find my-app -maxdepth 3 -type f | head -20`
8. Start building with pre-installed shadcn components immediately
9. Implement dark mode toggle using shadcn's pre-configured theme system
10. Add animations with Framer Motion or shadcn's built-in transitions
11. Use proper loading states and error boundaries
12. Deploy with Vercel or user-specified platform
* Prefer pnpm and the Nextjs template for fastest scaffolding
* Everything is automated through simple shell commands - shadcn/ui comes fully configured with ALL components
* No manual setup required - everything is production-ready from the start
### 2.3.8 IMAGE GENERATION & EDITING
@ -304,6 +317,7 @@ You have the abilixwty to execute operations using both Python and CLI tools:
- Long-running data processing
- Background services
- Session Management:
* Each command must specify a session_name
* Use consistent session names for related commands
@ -930,11 +944,16 @@ For large outputs and complex content, use files instead of long responses:
### WEB UI DESIGN - MANDATORY EXCELLENCE STANDARDS
- **ABSOLUTELY NO BASIC OR PLAIN DESIGNS** - Every UI must be stunning, modern, and professional
- **🚨🚨🚨 CRITICAL: PROTECT SHADCN THEME SYSTEM IN GLOBALS.CSS 🚨🚨🚨**
* **DO NOT MODIFY existing theme system** - OKLCH colors and CSS variables are precisely calibrated
* **NEVER CHANGE:** --background, --foreground, --primary colors or :root/.dark sections
* **SAFE TO ADD:** Custom app-specific styles at the END of globals.css (Netflix clone styles, etc.)
* **SAFE TO ADD:** New @layer utilities or @layer components sections for custom styling
- **For ALL Next.js/React web projects:**
* **MANDATORY**: Use shadcn/ui as the primary component library
* **NEVER** create custom HTML/CSS components when shadcn equivalents exist
* **ALL shadcn components are pre-installed** - button, card, dialog, form, input, select, dropdown-menu, tabs, sheet, etc.
* **NO SETUP REQUIRED** - shadcn/ui comes fully configured in the optimized template
* **NO SETUP REQUIRED** - shadcn/ui comes fully configured in the Nextjs template
- **UI Excellence Requirements:**
* Use sophisticated color schemes with proper contrast ratios

View File

@ -115,7 +115,6 @@ class SandboxWebDevTool(SandboxToolsBase):
checks = [
(f"test -f {self.TEMPLATE_DIR}/package.json", "package.json"),
(f"test -f {self.TEMPLATE_DIR}/components.json", "components.json"),
(f"test -f {self.TEMPLATE_DIR}/tailwind.config.ts", "tailwind.config.ts"),
(f"test -d {self.TEMPLATE_DIR}/src/components/ui", "src/components/ui directory")
]
@ -127,7 +126,6 @@ class SandboxWebDevTool(SandboxToolsBase):
if missing_files:
logger.info(f"Template missing files: {', '.join(missing_files)}")
# Let's also check what files ARE available for debugging
ls_result = await self._exec_sh(f"ls -la {self.TEMPLATE_DIR}")
logger.info(f"Template directory contents: {ls_result.get('output', 'Could not list')}")
return False
@ -135,132 +133,6 @@ class SandboxWebDevTool(SandboxToolsBase):
logger.info("Optimized template found and validated")
return True
@openapi_schema({
"type": "function",
"function": {
"name": "debug_template_status",
"description": "Debug helper to check the current state of the optimized template",
"parameters": {"type": "object", "properties": {}, "required": []}
}
})
async def debug_template_status(self) -> ToolResult:
try:
await self._ensure_sandbox()
debug_info = []
dir_check = await self._exec_sh(f"test -d {self.TEMPLATE_DIR} && echo EXISTS || echo MISSING")
debug_info.append(f"Template directory ({self.TEMPLATE_DIR}): {dir_check.get('output', 'Unknown')}")
if "EXISTS" in dir_check.get("output", ""):
ls_result = await self._exec_sh(f"ls -la {self.TEMPLATE_DIR}")
debug_info.append(f"Directory contents:\n{ls_result.get('output', 'Could not list')}")
files_to_check = [
"package.json",
"components.json",
"tailwind.config.ts",
"src/components/ui"
]
for file_path in files_to_check:
full_path = f"{self.TEMPLATE_DIR}/{file_path}"
if file_path.endswith("/ui"):
check_cmd = f"test -d {full_path} && echo DIR_EXISTS || echo DIR_MISSING"
else:
check_cmd = f"test -f {full_path} && echo FILE_EXISTS || echo FILE_MISSING"
result = await self._exec_sh(check_cmd)
debug_info.append(f"{file_path}: {result.get('output', 'Unknown')}")
has_template = await self._has_optimized_template()
debug_info.append(f"Template detection result: {'✅ PASS' if has_template else '❌ FAIL'}")
return self.success_response("\n".join(debug_info))
except Exception as e:
logger.error(f"Error debugging template: {e}", exc_info=True)
return self.fail_response(f"Error debugging template: {e}")
@openapi_schema({
"type": "function",
"function": {
"name": "list_web_projects",
"description": "List all web projects in the workspace directory. Shows Node.js/React/Next.js projects with their types.",
"parameters": {"type": "object", "properties": {}, "required": []}
}
})
@usage_example('''
<!-- List all web projects in the workspace -->
<function_calls>
<invoke name="list_web_projects">
</invoke>
</function_calls>
''')
async def list_web_projects(self) -> ToolResult:
try:
await self._ensure_sandbox()
list_cmd = f"ls -la {self.workspace_path} | grep ^d | awk '{{print $NF}}' | grep -v '^\\.$' | grep -v '^\\.\\.\\$'"
result = await self._execute_command(list_cmd)
output = result.get("output", "")
if result.get("exit_code") != 0 or not output:
list_cmd = f"ls -d {self.workspace_path}/*/ 2>/dev/null | xargs -n1 basename 2>/dev/null || echo 'No projects found'"
result = await self._execute_command(list_cmd)
output = result.get("output", "")
projects = output.strip().split('\n') if output else []
projects = [p for p in projects if p and p != 'No projects found']
if not projects:
return self.success_response("""
📁 No projects found in workspace.
To create a new project, use create_web_project:
- Next.js with shadcn/ui: All components pre-installed and ready to use!
- React: npx create-react-app my-app --template typescript
- Vite: npm create vite@latest my-app -- --template react-ts
""")
project_info = []
for project in projects:
project_path = self._get_project_path(project)
package_check = f"test -f {project_path}/package.json && echo '__HAS_PACKAGE__' || echo '__NO_PACKAGE__'"
package_result = await self._execute_command(package_check)
if "__HAS_PACKAGE__" in package_result.get("output", ""):
cat_cmd = f"cat {project_path}/package.json 2>/dev/null | grep -E '\"(next|react|vite)\"' | head -1"
cat_result = await self._execute_command(cat_cmd)
project_type = "Node.js project"
output_lower = cat_result.get("output", "").lower()
if "next" in output_lower:
project_type = "Next.js project (with shadcn/ui)"
elif "react" in output_lower:
project_type = "React project"
elif "vite" in output_lower:
project_type = "Vite project"
project_info.append(f" 📦 {project} ({project_type})")
else:
project_info.append(f" 📁 {project} (Directory)")
return self.success_response(f"""
📁 Projects found in workspace:
{chr(10).join(project_info)}
Total: {len(projects)} project(s)
Use 'get_project_structure' to view project files.
To run a project, use start_server or execute_command with: cd project-name && npm run dev
""")
except Exception as e:
logger.error(f"Error listing projects: {str(e)}", exc_info=True)
return self.fail_response(f"Error listing projects: {str(e)}")
@openapi_schema({
"type": "function",
"function": {
@ -329,150 +201,6 @@ To run this project:
logger.error(f"Error getting project structure: {str(e)}", exc_info=True)
return self.fail_response(f"Error getting project structure: {str(e)}")
@openapi_schema({
"type": "function",
"function": {
"name": "create_web_project",
"description": "Create a new Next.js project with shadcn/ui and ALL components pre-installed from optimized template. Fast scaffolding with everything ready to use!",
"parameters": {
"type": "object",
"properties": {
"project_name": {"type": "string", "description": "Project directory name to create"},
"package_manager": {"type": "string", "description": "Package manager: pnpm|npm", "default": "pnpm"}
},
"required": ["project_name"]
}
}
})
@usage_example('''
<!-- Create a new Next.js project with shadcn/ui pre-configured -->
<function_calls>
<invoke name="create_web_project">
<parameter name="project_name">my-portfolio</parameter>
<parameter name="package_manager">pnpm</parameter>
</invoke>
</function_calls>
''')
async def create_web_project(self, project_name: str, package_manager: str = "pnpm") -> ToolResult:
try:
await self._ensure_sandbox()
proj_dir = self._get_project_path(project_name)
already = await self._exec_sh(f"test -e {proj_dir} && echo __EXISTS__ || echo __NEW__")
if "__EXISTS__" in already.get("output", ""):
return self.fail_response(f"Path '{project_name}' already exists")
has_template = await self._has_optimized_template()
if has_template:
copy = await self._exec_sh(f"cp -R {self.TEMPLATE_DIR} {proj_dir}")
if copy["exit_code"] != 0:
return self.fail_response(f"Failed to copy template: {copy['output']}")
install_cmd = self._get_package_manager_command(package_manager, "install")
install = await self._exec_sh(f"cd {proj_dir} && {install_cmd}", timeout=self.INSTALL_TIMEOUT)
if install["exit_code"] != 0:
return self.fail_response(f"Dependency install failed: {install['output']}")
return self.success_response({
"message": f"Project '{project_name}' created successfully with Next.js 15 + shadcn/ui pre-configured and ALL components ready to use!",
"project": project_name,
"features": [
"✅ Next.js 15 with TypeScript",
"✅ Tailwind CSS configured",
"✅ shadcn/ui initialized",
"✅ ALL shadcn components pre-installed",
"✅ App Router with src/ directory",
"✅ ESLint configured"
]
})
else:
if package_manager == "pnpm":
scaffold_cmd = (
f"cd {self.workspace_path} && "
f"pnpm dlx create-next-app@15 {project_name} --ts --eslint --tailwind --app --src-dir --import-alias '@/*' --use-pnpm"
)
else:
scaffold_cmd = (
f"cd {self.workspace_path} && "
f"npx create-next-app@15 {project_name} --ts --eslint --tailwind --app --src-dir --import-alias '@/*' --use-npm"
)
res = await self._exec_sh(scaffold_cmd, timeout=self.INSTALL_TIMEOUT)
if res["exit_code"] != 0:
return self.fail_response(f"Scaffold failed: {res['output']}")
return self.success_response({
"message": f"Project '{project_name}' created successfully. Note: Optimized template not available - used manual creation.",
"project": project_name
})
except Exception as e:
logger.error(f"Error creating web project: {e}", exc_info=True)
return self.fail_response(f"Error creating web project: {e}")
@openapi_schema({
"type": "function",
"function": {
"name": "install_dependencies",
"description": "Install npm packages in a project using pnpm or npm.",
"parameters": {
"type": "object",
"properties": {
"project_name": {"type": "string"},
"packages": {"type": "array", "items": {"type": "string"}},
"dev": {"type": "boolean", "default": False},
"package_manager": {"type": "string", "default": "pnpm"}
},
"required": ["project_name", "packages"]
}
}
})
@usage_example('''
<!-- Install production dependencies in a project -->
<function_calls>
<invoke name="install_dependencies">
<parameter name="project_name">my-app</parameter>
<parameter name="packages">["axios", "react-query", "framer-motion"]</parameter>
<parameter name="dev">false</parameter>
<parameter name="package_manager">pnpm</parameter>
</invoke>
</function_calls>
<!-- Install development dependencies -->
<function_calls>
<invoke name="install_dependencies">
<parameter name="project_name">my-app</parameter>
<parameter name="packages">["@types/node", "eslint", "prettier"]</parameter>
<parameter name="dev">true</parameter>
</invoke>
</function_calls>
''')
async def install_dependencies(self, project_name: str, packages: List[str], dev: bool = False, package_manager: str = "pnpm") -> ToolResult:
try:
await self._ensure_sandbox()
if not await self._project_exists(project_name):
return self.fail_response(f"Project '{project_name}' not found")
proj_dir = self._get_project_path(project_name)
pkg_list = " ".join(packages)
command_type = "add_dev" if dev else "add"
cmd = self._get_package_manager_command(package_manager, command_type, pkg_list)
res = await self._exec_sh(f"cd {proj_dir} && {cmd}", timeout=self.INSTALL_TIMEOUT)
if res["exit_code"] != 0:
return self.fail_response(f"Package install failed: {res['output']}")
return self.success_response(f"Installed packages in '{project_name}': {', '.join(packages)}")
except Exception as e:
logger.error(f"Error installing dependencies: {e}", exc_info=True)
return self.fail_response(f"Error installing dependencies: {e}")
@openapi_schema({
"type": "function",
"function": {
@ -517,120 +245,3 @@ To run this project:
except Exception as e:
logger.error(f"Error building project: {e}", exc_info=True)
return self.fail_response(f"Error building project: {e}")
@openapi_schema({
"type": "function",
"function": {
"name": "start_server",
"description": "Start a server for the project. mode='prod' runs next start after build; mode='dev' runs dev server. Returns exposed preview URL.",
"parameters": {
"type": "object",
"properties": {
"project_name": {"type": "string"},
"mode": {"type": "string", "default": "prod", "description": "prod|dev"},
"port": {"type": "integer", "default": 3000},
"package_manager": {"type": "string", "default": "pnpm"}
},
"required": ["project_name"]
}
}
})
@usage_example('''
<!-- Start a development server for testing -->
<function_calls>
<invoke name="start_server">
<parameter name="project_name">my-app</parameter>
<parameter name="mode">dev</parameter>
<parameter name="port">3000</parameter>
</invoke>
</function_calls>
<!-- Start a production server -->
<function_calls>
<invoke name="start_server">
<parameter name="project_name">my-app</parameter>
<parameter name="mode">prod</parameter>
<parameter name="port">8080</parameter>
<parameter name="package_manager">pnpm</parameter>
</invoke>
</function_calls>
''')
async def start_server(self, project_name: str, mode: str = "prod", port: int = DEFAULT_PORT, package_manager: str = "pnpm") -> ToolResult:
try:
await self._ensure_sandbox()
if not await self._project_exists(project_name):
return self.fail_response(f"Project '{project_name}' not found")
proj_dir = self._get_project_path(project_name)
if mode == "prod":
build_check = await self._exec_sh(f"test -d {proj_dir}/.next && echo BUILT || echo NOBUILD")
if "NOBUILD" in build_check.get("output", ""):
build_cmd = self._get_package_manager_command(package_manager, "build")
build_res = await self._exec_sh(f"cd {proj_dir} && {build_cmd}", timeout=self.BUILD_TIMEOUT)
if build_res["exit_code"] != 0:
return self.fail_response(f"Build failed before start: {build_res['output']}")
server_cmd = self._get_package_manager_command(package_manager, "start")
else:
server_cmd = self._get_package_manager_command(package_manager, "dev")
cmd = f"cd {proj_dir} && PORT={port} {server_cmd}"
session_name = f"web_{project_name}_{mode}"
await self._run_in_tmux_background(session_name, cmd)
link = await self.sandbox.get_preview_link(port)
url = link.url if hasattr(link, 'url') else str(link)
return self.success_response({
"message": f"Started {mode} server for '{project_name}' on port {port}",
"url": url,
"port": port,
"session": session_name
})
except Exception as e:
logger.error(f"Error starting server: {e}", exc_info=True)
return self.fail_response(f"Error starting server: {e}")
@openapi_schema({
"type": "function",
"function": {
"name": "start_dev_server",
"description": "Start a development server for the project (alias for start_server with mode=dev). Returns exposed preview URL.",
"parameters": {
"type": "object",
"properties": {
"project_name": {"type": "string"},
"port": {"type": "integer", "default": 3000},
"package_manager": {"type": "string", "default": "pnpm"}
},
"required": ["project_name"]
}
}
})
@usage_example('''
<!-- Quickly start a development server with hot reloading -->
<function_calls>
<invoke name="start_dev_server">
<parameter name="project_name">my-app</parameter>
</invoke>
</function_calls>
<!-- Start dev server on a custom port -->
<function_calls>
<invoke name="start_dev_server">
<parameter name="project_name">my-app</parameter>
<parameter name="port">4000</parameter>
<parameter name="package_manager">npm</parameter>
</invoke>
</function_calls>
''')
async def start_dev_server(self, project_name: str, port: int = DEFAULT_PORT, package_manager: str = "pnpm") -> ToolResult:
return await self.start_server(
project_name=project_name,
mode="dev",
port=port,
package_manager=package_manager
)

View File

@ -20,7 +20,7 @@ You can modify the sandbox environment for development or to add new capabilitie
```
cd backend/sandbox/docker
docker compose build
docker push kortix/suna:0.1.3.1
docker push kortix/suna:0.1.3.4
```
3. Test your changes locally using docker-compose

View File

@ -1,4 +1,4 @@
FROM python:3.11-slim
FROM python:3.11-slim-bookworm
# Install system dependencies
RUN apt-get update && apt-get install -y \
@ -78,8 +78,7 @@ RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g npm@latest \
&& corepack enable \
&& corepack prepare pnpm@9.1.0 --activate \
&& npm i -g wrangler create-next-app@14 shadcn@latest serve degit turbo
&& corepack prepare pnpm@9.1.0 --activate
# pnpm config and store dir for faster installs
ENV PNPM_HOME=/root/.local/share/pnpm
@ -111,15 +110,11 @@ RUN npx playwright install chromium
# Verify installation
RUN node -e "import('playwright').then(() => console.log('Playwright installation verified')).catch(e => { console.error('Playwright verification failed:', e); process.exit(1); })"
# Prewarm a Next 14 + shadcn template for fast scaffolding
WORKDIR /opt/templates
RUN mkdir -p /opt/templates && \
pnpm dlx create-next-app@14 next14-shadcn --ts --eslint --tailwind --app --src-dir --import-alias '@/*' --use-npm && \
cd /opt/templates/next14-shadcn && \
pnpm install --prefer-offline && \
npx shadcn@latest init -y || (printf '\n' | npx shadcn@latest init) && \
npx shadcn@latest add button card form input dropdown-menu dialog tabs sheet badge alert && \
pnpm install --prefer-offline
WORKDIR /opt/templates/next-app
RUN npx --yes create-next-app@latest . --yes
RUN npx --yes shadcn@latest init --yes -b neutral --force
RUN npx --yes shadcn@latest add --all --yes
# Copy server script
COPY . /app

View File

@ -6,7 +6,7 @@ services:
dockerfile: ${DOCKERFILE:-Dockerfile}
args:
TARGETPLATFORM: ${TARGETPLATFORM:-linux/amd64}
image: kortix/suna:0.1.3.1
image: kortix/suna:0.1.3.4
ports:
- "6080:6080" # noVNC web interface
- "5901:5901" # VNC port

View File

@ -252,8 +252,8 @@ class Configuration:
STRIPE_PRODUCT_ID_STAGING: str = 'prod_SCgIj3G7yPOAWY'
# Sandbox configuration
SANDBOX_IMAGE_NAME = "kortix/suna:0.1.3.1"
SANDBOX_SNAPSHOT_NAME = "kortix/suna:0.1.3.1"
SANDBOX_IMAGE_NAME = "kortix/suna:0.1.3.4"
SANDBOX_SNAPSHOT_NAME = "kortix/suna:0.1.3.4"
SANDBOX_ENTRYPOINT = "/usr/bin/supervisord -n -c /etc/supervisor/conf.d/supervisord.conf"
# LangFuse configuration

View File

@ -345,6 +345,8 @@ const TOOL_DISPLAY_NAMES = new Map([
['get-popular-mcp-servers', 'Getting Popular MCP Servers'],
['test-mcp-server-connection', 'Testing MCP Server Connection'],
['get-project-structure', 'Getting Project Structure'],
['build-project', 'Building Project'],
//V2

View File

@ -669,8 +669,8 @@ class SetupWizard:
f"Visit {Colors.GREEN}https://app.daytona.io/dashboard/snapshots{Colors.ENDC}{Colors.CYAN} to create a snapshot."
)
print_info("Create a snapshot with these exact settings:")
print_info(f" - Name:\t\t{Colors.GREEN}kortix/suna:0.1.3.1{Colors.ENDC}")
print_info(f" - Snapshot name:\t{Colors.GREEN}kortix/suna:0.1.3.1{Colors.ENDC}")
print_info(f" - Name:\t\t{Colors.GREEN}kortix/suna:0.1.3.4{Colors.ENDC}")
print_info(f" - Snapshot name:\t{Colors.GREEN}kortix/suna:0.1.3.4{Colors.ENDC}")
print_info(
f" - Entrypoint:\t{Colors.GREEN}/usr/bin/supervisord -n -c /etc/supervisor/conf.d/supervisord.conf{Colors.ENDC}"
)