## User
test
## Assistant
Test received! How can I help you with your project today?
## User (checkpoint)
can you figure out why my chat failed.
Error: Failed to generate summary
**Tool Call: Search files for regex `Failed to generate summary`**
Status: Completed
Found 1 matches:
## Matches in master-ai/vibn-frontend/app/api/context/summarize/route.ts
### async function POST( ) › error › L46-49
```
return NextResponse.json(
{ error: "Failed to generate summary", details: error instanceof Error ? error.message : String(error) },
{ status: 500 }
);
```
## Assistant
**Tool Call: Read file `vibn-frontend/app/api/context/summarize/route.ts` (lines 1-100)**
Status: Completed
```master-ai/vibn-frontend/app/api/context/summarize/route.ts
import { NextRequest, NextResponse } from "next/server";
const MODEL = process.env.GEMINI_MODEL || 'gemini-2.0-flash-exp';
const API_KEY = process.env.GOOGLE_API_KEY || '';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent`;
export async function POST(request: NextRequest) {
try {
const { content, title } = await request.json();
if (!content) {
return NextResponse.json({ error: "Content is required" }, { status: 400 });
}
const maxContentLength = 30000;
const truncatedContent = content.length > maxContentLength
? content.substring(0, maxContentLength) + "..."
: content;
const prompt = `Read this document titled "${title}" and provide a concise 1-2 sentence summary that captures the main topic and key points. Be specific and actionable.
Document content:
${truncatedContent}
Summary:`;
const response = await fetch(`${GEMINI_URL}?key=${API_KEY}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
contents: [{ role: 'user', parts: [{ text: prompt }] }],
generationConfig: { temperature: 0.3 },
}),
});
if (!response.ok) {
throw new Error(`Gemini API error (${response.status}): ${await response.text()}`);
}
const result = await response.json();
const summary = result.candidates?.[0]?.content?.parts?.[0]?.text?.trim() || 'Summary unavailable';
return NextResponse.json({ summary });
} catch (error) {
console.error("Error generating summary:", error);
return NextResponse.json(
{ error: "Failed to generate summary", details: error instanceof Error ? error.message : String(error) },
{ status: 500 }
);
}
}
```
## Assistant
**Tool Call: cat vibn-frontend/.env vibn-frontend/.env.local**
Status: Completed
Terminal:
```
pyenv: shell integration not enabled. Run `pyenv init' for instructions.
cat: vibn-frontend/.env: No such file or directory
# ── Google / Gemini ───────────────────────────────────────────────────────────
GOOGLE_API_KEY=AIzaSyCwXxLU6dGrRLfHRxGtOWg2hi-RQGMn664
GEMINI_MODEL=gemini-3.1-pro
# ── Google OAuth (NextAuth) ────────────────────────────────────────────────────
GOOGLE_CLIENT_ID=673711367815-us92rkicrpgjrh381p4cb770lo9iq8tt.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=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
# ── NextAuth ──────────────────────────────────────────────────────────────────
NEXTAUTH_SECRET=1yaw0RWG7g4yxPf3kAgsZoobrnlP/ZmpfrzuFAhTGnA=
NEXTAUTH_URL=http://localhost:3000
# Local dev: bypass Google — set to your real email (must match DB user you want)
NEXT_PUBLIC_DEV_LOCAL_AUTH_EMAIL=mark@getacquired.com
# Act as that user for /api/projects* without signing in (next dev only)
NEXT_PUBLIC_DEV_BYPASS_PROJECT_AUTH=true
# ── PostgreSQL (Coolify public port; run: npm run db:sync:coolify) ────────────
# If unreachable: open host firewall for TCP on public_port. SSL: DB_SSL=true if required.
DATABASE_URL=postgresql://vibn_user:JSMcySGlEj3pSMjHvwEHAd1A@34.19.250.135:5433/vibn
POSTGRES_URL=postgresql://vibn_user:JSMcySGlEj3pSMjHvwEHAd1A@34.19.250.135:5433/vibn
# ── Gitea ─────────────────────────────────────────────────────────────────────
GITEA_API_URL=https://git.vibnai.com
GITEA_API_TOKEN=7803666418f1c90a5a65ecc35f8c2f3abaa7d2f3
GITEA_USERNAME=mark
# ── Coolify ───────────────────────────────────────────────────────────────────
COOLIFY_URL=http://34.19.250.135:8000
COOLIFY_API_TOKEN=1|clqAOiQPygpuwyA5HVDyWoKfNRtDH8l4Huge2PCmef521cc1
COOLIFY_SERVER_UUID=jws4g4cgssss4cw48s488woc
VIBN_SECRETS_KEY=G1gGSlAklGsIerQ8cmwSGsoO8gvHax/JfY5IgLGEZAOwIhm/pWWPVBJ10hI4Duqy
NEXT_PUBLIC_COOLIFY_URL=http://34.19.250.135:8000
# Ops probe: GET /api/internal/infra-health
INFRA_HEALTH_SECRET=6e60bec12bd1391b4753fc486580f57e78e02a961f8e9999e19254c1af7261bb
# ── DeepSeek (workspace sidebar chat → POST /api/chat) ──────────────────────────
VIBN_CHAT_PROVIDER=gemini
echo "COOLIFY_SSH_HOST=34.19.250.135" >> /Users/markhenderson/master-ai/vibn-frontend/.env.local
echo "COOLIFY_SSH_PORT=22" >> /Users/markhenderson/master-ai/vibn-frontend/.env.local
echo "COOLIFY_SSH_USER=vibn-logs" >> /Users/markhenderson/master-ai/vibn-frontend/.env.local
PRIV_B64=$(cat ~/.ssh/vibn-logs-local | base64 | tr -d '\n')
echo "COOLIFY_SSH_PRIVATE_KEY_B64=$PRIV_B64" >> /Users/markhenderson/master-ai/vibn-frontend/.env.local
COOLIFY_SSH_HOST=34.19.250.135
COOLIFY_SSH_PORT=22
COOLIFY_SSH_USER=vibn-logs
COOLIFY_SSH_PRIVATE_KEY_B64=LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNDNS92M0RwRjgwWDVuNitjM2VNbElpVUdQN3d1bjdjL2Z6R0ttaUMzV3BzUUFBQUpqUE1BQ2N6ekFBCm5BQUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQzUvdjNEcEY4MFg1bjYrYzNlTWxJaVVHUDd3dW43Yy9mekdLbWlDM1dwc1EKQUFBRUErMmFCditqa3pndWJaZTZyd1lhK1FDenFGSVpQYW5POWtYSXE5ZzdWYjc3bisvY09rWHpSZm1mcjV6ZDR5VWlKUQpZL3ZDNmZ0ejkvTVlxYUlMZGFteEFBQUFEM1pwWW00dGJHOW5jeTFzYjJOaGJBRUNBd1FGQmc9PQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K
COOLIFY_SSH_HOST=34.19.250.135
COOLIFY_SSH_PORT=22
COOLIFY_SSH_USER=vibn-logs
COOLIFY_SSH_PRIVATE_KEY_B64=LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNDNS92M0RwRjgwWDVuNitjM2VNbElpVUdQN3d1bjdjL2Z6R0ttaUMzV3BzUUFBQUpqUE1BQ2N6ekFBCm5BQUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQzUvdjNEcEY4MFg1bjYrYzNlTWxJaVVHUDd3dW43Yy9mekdLbWlDM1dwc1EKQUFBRUErMmFCditqa3pndWJaZTZyd1lhK1FDenFGSVpQYW5POWtYSXE5ZzdWYjc3bisvY09rWHpSZm1mcjV6ZDR5VWlKUQpZL3ZDNmZ0ejkvTVlxYUlMZGFteEFBQUFEM1pwWW00dGJHOW5jeTFzYjJOaGJBRUNBd1FGQmc9PQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K
# Stripe Platform Keys (Test Mode)
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_51TUwa39DgTI4W5Vpgi1fazBGnNvHkaaMnih5poAwpCZ8U7yF9UIz8ybACc89ktRQh789q3bzxw4oy2aeQT9fdYTa004oyumjOm
STRIPE_SECRET_KEY=sk_test_51TUwa39DgTI4W5Vp7UjeXcUmunoexF3nXVtNAG8SisncwEeKVmrdAjVvYMvnEKxRWr2UnJXuNPX8eF0xdIWaWrmM00trL4Fn3V
STRIPE_CLIENT_ID=ca_UTuWw2qE8wFLNlWOL7T1v0H5GdB6BtDw
```
## Assistant
**Tool Call: Search files for regex `Failed to generate`**
Status: Completed
Found 14 matches:
## Matches in master-ai/vibn-frontend/app/api/context/summarize/route.ts
### async function POST( ) › error › L46-49
```
return NextResponse.json(
{ error: "Failed to generate summary", details: error instanceof Error ? error.message : String(error) },
{ status: 500 }
);
```
## Matches in master-ai/vibn-frontend/app/api/mcp/generate-key/route.ts
### async function POST( ) › error › L68-71
```
{
error: 'Failed to generate MCP key',
details: error instanceof Error ? error.message : String(error),
},
```
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/audit/generate/route.ts
### async function POST( ) › error › L236-239
```
{
error: 'Failed to generate audit report',
details: error instanceof Error ? error.message : String(error)
},
```
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/complete-history/route.ts
### async function GET( ) › error › L157-160
```
{
error: 'Failed to generate complete history',
details: error instanceof Error ? error.message : String(error)
},
```
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/documents/upload/route.ts
### async function POST( ) › error › L52-55
```
return NextResponse.json(
{ error: 'Failed to generate upload URL', details: error instanceof Error ? error.message : String(error) },
{ status: 500 }
);
```
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/mission/generate/route.ts
### async function POST( ) › error › L214-217
```
{
error: 'Failed to generate mission framework',
details: error instanceof Error ? error.message : String(error)
},
```
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/mvp-checklist/route.ts
### async function GET( ) › error › L96-99
```
{
error: 'Failed to generate MVP checklist',
details: error instanceof Error ? error.message : String(error)
},
```
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/plan/intelligent/route.ts
### async function GET( ) › error › L62-65
```
{
error: 'Failed to generate intelligent plan',
details: error instanceof Error ? error.message : String(error)
},
```
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/plan/marketing/route.ts
### async function POST( ) › L18-24
```
} catch (error) {
console.error('[plan/marketing] Failed to generate marketing plan', error);
return NextResponse.json(
{
error: 'Failed to generate marketing plan',
details: error instanceof Error ? error.message : String(error),
},
```
3 lines remaining in ancestor node. Read the file to see all.
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/plan/mvp/route.ts
### async function POST( ) › L18-24
```
} catch (error) {
console.error('[plan/mvp] Failed to generate MVP plan', error);
return NextResponse.json(
{
error: 'Failed to generate MVP plan',
details: error instanceof Error ? error.message : String(error),
},
```
3 lines remaining in ancestor node. Read the file to see all.
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/timeline/route.ts
### async function GET( ) › error › L389-392
```
{
error: 'Failed to generate unified timeline',
details: error instanceof Error ? error.message : String(error)
},
```
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/timeline-view/route.ts
### async function GET( ) › error › L175-178
```
{
error: 'Failed to generate timeline view',
details: error instanceof Error ? error.message : String(error)
},
```
## Matches in master-ai/vibn-frontend/app/api/v0/generate/route.ts
### async function POST( ) › error › L68-71
```
{
error: 'Failed to generate design',
details: error instanceof Error ? error.message : 'Unknown error'
},
```
## Matches in master-ai/vibn-frontend/scripts/start-with-alloydb.sh
### L7-11
```
if [ -z "$ALLOYDB_PASSWORD" ]; then
echo "❌ Failed to generate access token"
echo "Make sure you're logged in: gcloud auth login"
exit 1
fi
```
## Assistant
**Tool Call: Read file `vibn-frontend/app/api/context/summarize/route.ts` (lines 1-100)**
Status: Completed
```master-ai/vibn-frontend/app/api/context/summarize/route.ts
import { NextRequest, NextResponse } from "next/server";
const MODEL = process.env.GEMINI_MODEL || 'gemini-2.0-flash-exp';
const API_KEY = process.env.GOOGLE_API_KEY || '';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent`;
export async function POST(request: NextRequest) {
try {
const { content, title } = await request.json();
if (!content) {
return NextResponse.json({ error: "Content is required" }, { status: 400 });
}
const maxContentLength = 30000;
const truncatedContent = content.length > maxContentLength
? content.substring(0, maxContentLength) + "..."
: content;
const prompt = `Read this document titled "${title}" and provide a concise 1-2 sentence summary that captures the main topic and key points. Be specific and actionable.
Document content:
${truncatedContent}
Summary:`;
const response = await fetch(`${GEMINI_URL}?key=${API_KEY}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
contents: [{ role: 'user', parts: [{ text: prompt }] }],
generationConfig: { temperature: 0.3 },
}),
});
if (!response.ok) {
throw new Error(`Gemini API error (${response.status}): ${await response.text()}`);
}
const result = await response.json();
const summary = result.candidates?.[0]?.content?.parts?.[0]?.text?.trim() || 'Summary unavailable';
return NextResponse.json({ summary });
} catch (error) {
console.error("Error generating summary:", error);
return NextResponse.json(
{ error: "Failed to generate summary", details: error instanceof Error ? error.message : String(error) },
{ status: 500 }
);
}
}
```
## Assistant
**Tool Call: cat << 'EOF' > test-gemini.js
const API_KEY = "AIzaSyCwXxLU6dGrRLfHRxGtOWg2hi-RQGMn664";
const MODEL = "gemini-3.1-pro";
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent`;
fetch(`${GEMINI_URL}?key=${API_KEY}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
contents: [{ role: 'user', parts: [{ text: "test" }] }],
generationConfig: { temperature: 0.3 },
}),
}).then(r => r.text()).then(console.log).catch(console.error);
EOF
node test-gemini.js**
Status: Completed
Terminal:
```
pyenv: shell integration not enabled. Run `pyenv init' for instructions.
{
"error": {
"code": 404,
"message": "models/gemini-3.1-pro is not found for API version v1beta, or is not supported for generateContent. Call ListModels to see the list of available models and their supported methods.",
"status": "NOT_FOUND"
}
}
```
## Assistant
**Tool Call: Search files for regex `GEMINI_MODEL`**
Status: Completed
Found 10 matches:
## Matches in master-ai/deploy_logs.json
### logs › L1
```
{"id":722,"application":{"id":8,"repository_project_id":null,"uuid":"y4cscsc8s08c8808go0448s0","name":"vibn-frontend","fqdn":"https:\/\/vibnai.com,https:\/\/www.vibnai.com","config_hash":"58d68c8425a4d019fa30f44e0dba0b90","git_repository":"https:\/\/git.vibnai.com\/mark\/vibn-frontend.git","git_branch":"main","git_commit_sha":"HEAD","git_full_url":null,"docker_registry_image_name":null,"docker_registry_image_tag":null,"build_pack":"dockerfile","static_image":"nginx:alpine","install_command":null,"build_command":null,"start_command":null,"ports_exposes":"3000","ports_mappings":null,"base_directory":"\/","publish_directory":null,"health_check_path":"\/","health_check_port":"3000","health_check_host":"127.0.0.1","health_check_method":"GET","health_check_return_code":200,"health_check_scheme":"http","health_check_response_text":null,"health_check_interval":5,"health_check_timeout":5,"health_check_retries":15,"health_check_start_period":90,"limits_memory":"0","limits_memory_swap":"0","limits_memory_swappiness":60,"limits_memory_reservation":"0","limits_cpus":"0","limits_cpuset":null,"limits_cpu_shares":1024,"status":"running:healthy","preview_url_template":"{{pr_id}}.{{domain}}","destination_type":"App\\Models\\StandaloneDocker","destination_id":0,"source_type":null,"source_id":null,"private_key_id":null,"environment_id":1,"created_at":"2026-02-16T22:29:56.000000Z","updated_at":"2026-05-14T18:47:02.000000Z","description":"VIBN Frontend - Next.js Application","dockerfile":null,"health_check_enabled":true,"dockerfile_location":"\/Dockerfile","custom_labels":"dHJhZWZpay5lbmFibGU9dHJ1ZQp0cmFlZmlrLmh0dHAubWlkZGxld2FyZXMuZ3ppcC5jb21wcmVzcz10cnVlCnRyYWVmaWsuaHR0cC5taWRkbGV3YXJlcy5yZWRpcmVjdC10by1odHRwcy5yZWRpcmVjdHNjaGVtZS5zY2hlbWU9aHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5lbnRyeVBvaW50cz1odHRwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAubWlkZGxld2FyZXM9cmVkaXJlY3QtdG8taHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5ydWxlPUhvc3QoYHZpYm5haS5jb21gKSAmJiBQYXRoUHJlZml4KGAvYCkKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5zZXJ2aWNlPWh0dHAtMC15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5lbnRyeVBvaW50cz1odHRwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMS15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAubWlkZGxld2FyZXM9cmVkaXJlY3QtdG8taHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5ydWxlPUhvc3QoYHd3dy52aWJuYWkuY29tYCkgJiYgUGF0aFByZWZpeChgL2ApCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMS15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAuc2VydmljZT1odHRwLTEteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLmVudHJ5UG9pbnRzPWh0dHBzCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLm1pZGRsZXdhcmVzPWd6aXAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAucnVsZT1Ib3N0KGB2aWJuYWkuY29tYCkgJiYgUGF0aFByZWZpeChgL2ApCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLnNlcnZpY2U9aHR0cHMtMC15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAudGxzLmNlcnRyZXNvbHZlcj1sZXRzZW5jcnlwdAp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0wLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC50bHM9dHJ1ZQp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5lbnRyeVBvaW50cz1odHRwcwp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5taWRkbGV3YXJlcz1nemlwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTEteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLnJ1bGU9SG9zdChgd3d3LnZpYm5haS5jb21gKSAmJiBQYXRoUHJlZml4KGAvYCkKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMS15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAuc2VydmljZT1odHRwcy0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMAp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0xLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC50bHMuY2VydHJlc29sdmVyPWxldHNlbmNyeXB0CnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTEteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLnRscz10cnVlCnRyYWVmaWsuaHR0cC5zZXJ2aWNlcy5odHRwLTAteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD0zMDAwCnRyYWVmaWsuaHR0cC5zZXJ2aWNlcy5odHRwLTEteTRjc2NzYzhzMDhjODgwOGdvMDQ0OHMwLmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD0zMDAwCnRyYWVmaWsuaHR0cC5zZXJ2aWNlcy5odHRwcy0wLXk0Y3Njc2M4czA4Yzg4MDhnbzA0NDhzMC5sb2FkYmFsYW5jZXIuc2VydmVyLnBvcnQ9MzAwMAp0cmFlZmlrLmh0dHAuc2VydmljZXMuaHR0cHMtMS15NGNzY3NjOHMwOGM4ODA4Z28wNDQ4czAubG9hZGJhbGFuY2VyLnNlcnZlci5wb3J0PTMwMDAKY2FkZHlfMC5lbmNvZGU9enN0ZCBnemlwCmNhZGR5XzAuaGFuZGxlX3BhdGguMF9yZXZlcnNlX3Byb3h5PXt7dXBzdHJlYW1zIDMwMDB9fQpjYWRkeV8wLmhhbmRsZV9wYXRoPS8qCmNhZGR5XzAuaGVhZGVyPS1TZXJ2ZXIKY2FkZHlfMC50cnlfZmlsZXM9e3BhdGh9IC9pbmRleC5odG1sIC9pbmRleC5waHAKY2FkZHlfMD1odHRwczovL3ZpYm5haS5jb20KY2FkZHlfMS5lbmNvZGU9enN0ZCBnemlwCmNhZGR5XzEuaGFuZGxlX3BhdGguMV9yZXZlcnNlX3Byb3h5PXt7dXBzdHJlYW1zIDMwMDB9fQpjYWRkeV8xLmhhbmRsZV9wYXRoPS8qCmNhZGR5XzEuaGVhZGVyPS1TZXJ2ZXIKY2FkZHlfMS50cnlfZmlsZXM9e3BhdGh9IC9pbmRleC5odG1sIC9pbmRleC5waHAKY2FkZHlfMT1odHRwczovL3d3dy52aWJuYWkuY29tCmNhZGR5X2luZ3Jlc3NfbmV0d29yaz1jb29saWZ5","dockerfile_target_build":null,"manual_webhook_secret_github":null,"manual_webhook_secret_gitlab":null,"docker_compose_location":"\/docker-compose.yaml","docker_compose":null,"docker_compose_raw":null,"docker_compose_domains":null,"deleted_at":null,"docker_compose_custom_start_command":null,"docker_compose_custom_build_command":null,"swarm_replicas":1,"swarm_placement_constraints":null,"manual_webhook_secret_bitbucket":null,"custom_docker_run_options":null,"post_deployment_command":null,"post_deployment_command_container":null,"pre_deployment_command":null,"pre_deployment_command_container":null,"watch_paths":null,"custom_healthcheck_found":false,"manual_webhook_secret_gitea":"c23f93114f0378ff15cbd863e3fbd23bb5c127ceace1756b","redirect":"both","compose_parsing_version":"5","last_online_at":"2026-05-14 18:47:02","custom_nginx_configuration":"","custom_network_aliases":null,"is_http_basic_auth_enabled":false,"http_basic_auth_username":null,"http_basic_auth_password":null,"restart_count":0,"last_restart_at":null,"last_restart_type":null,"health_check_type":"http","health_check_command":null,"additional_servers_count":0,"additional_networks_count":0,"server_status":true,"environment":{"id":1,"name":"production","project_id":1,"created_at":"2026-02-14T21:49:21.000000Z","updated_at":"2026-02-14T21:49:21.000000Z","description":null,"uuid":"foskksoccksk0kc4g8sk88ok","project":{"id":1,"uuid":"f4owwggokksgw0ogo0844os0","name":"Vibn","description":"","team_id":0,"created_at":"2026-02-14T21:49:21.000000Z","updated_at":"2026-02-16T03:38:00.000000Z","team":{"id":0,"name":"Root Team","description":null,"personal_team":true,"created_at":"2026-02-14T21:47:46.000000Z","updated_at":"2026-02-14T21:49:26.000000Z","show_boarding":false,"custom_server_limit":null}}},"additional_servers":[],"destination":{"id":0,"name":"coolify","uuid":"zkogkggkw0wg40gccks80oo0","network":"coolify","server_id":0,"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-02-14T21:41:51.000000Z","server":{"id":0,"uuid":"jws4g4cgssss4cw48s488woc","name":"localhost","description":"This is the server where Coolify is running on. Don't delete this!","ip":"host.docker.internal","port":22,"user":"root","team_id":0,"private_key_id":0,"proxy":{"type":"TRAEFIK","status":"running","last_saved_settings":null,"last_applied_settings":null,"redirect_enabled":true,"force_stop":false},"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-05-14T18:46:33.000000Z","unreachable_notification_sent":false,"unreachable_count":0,"high_disk_usage_notification_sent":false,"log_drain_notification_sent":false,"swarm_cluster":null,"validation_logs":null,"sentinel_updated_at":"2026-05-14 18:46:33","deleted_at":null,"ip_previous":null,"hetzner_server_id":null,"cloud_provider_token_id":null,"hetzner_server_status":null,"is_validating":false,"detected_traefik_version":"3.6.8","traefik_outdated_info":{"current":"3.6.8","latest":"3.6.11","type":"patch_update","checked_at":"2026-05-10T00:00:42+00:00"},"server_metadata":null,"is_coolify_host":true,"settings":{"id":1,"is_swarm_manager":false,"is_jump_server":false,"is_build_server":false,"is_reachable":true,"is_usable":true,"server_id":0,"created_at":"2026-02-14T21:41:51.000000Z","updated_at":"2026-02-14T21:49:13.000000Z","wildcard_domain":null,"is_cloudflare_tunnel":false,"is_logdrain_newrelic_enabled":false,"logdrain_newrelic_license_key":null,"logdrain_newrelic_base_uri":null,"is_logdrain_highlight_enabled":false,"logdrain_highlight_project_id":null,"is_logdrain_axiom_enabled":false,"logdrain_axiom_dataset_name":null,"logdrain_axiom_api_key":null,"is_swarm_worker":false,"is_logdrain_custom_enabled":false,"logdrain_custom_config":null,"logdrain_custom_config_parser":null,"concurrent_builds":2,"dynamic_timeout":3600,"force_disabled":false,"is_metrics_enabled":false,"generate_exact_labels":false,"force_docker_cleanup":true,"docker_cleanup_frequency":"0 *\/6 * * *","docker_cleanup_threshold":75,"server_timezone":"UTC","delete_unused_volumes":false,"delete_unused_networks":false,"is_sentinel_enabled":true,"sentinel_token":"eyJpdiI6Ii9MSGRUb1JDWDZUSGE2b2dPVU5ka2c9PSIsInZhbHVlIjoiRVVkYXBZYmtIenRtTVBqK01GRnhJNERrT3RwLzhYK3EwT2hIM2JtOS9TeGdZNEl2VWRHczBHYXgzQTJ4UnpJTkluVU1RRXF1SVVXREZBZVpyaU1TZEE9PSIsIm1hYyI6IjdjZjYxNmEzZTM2OThjYjA4MGVlYzBkOGZlOGNmOTU1ZTA5MjJmZTY5ZGQ5OTczZWRkYTRkZDQ0ZDMzY2VjNzciLCJ0YWciOiIifQ==","sentinel_metrics_refresh_rate_seconds":10,"sentinel_metrics_history_days":7,"sentinel_push_interval_seconds":60,"sentinel_custom_url":"http:\/\/host.docker.internal:8000","server_disk_usage_notification_threshold":80,"is_sentinel_debug_enabled":false,"server_disk_usage_check_frequency":"0 23 * * *","is_terminal_enabled":true,"deployment_queue_limit":25,"disable_application_image_retention":false}}}},"application_id":"8","application_name":"vibn-frontend","build_server_id":null,"commit":"32a4812383734eea005a15a5bfd8a8127f4e259b","commit_message":"design(ui): brighten hero breadcrumb text contrast","current_process_id":"3951450","deployment_url":"\/project\/f4owwggokksgw0ogo0844os0\/environment\/foskksoccksk0kc4g8sk88ok\/application\/y4cscsc8s08c8808go0448s0\/deployment\/y6wyqjod8h2mbmzpmobeoozd","deployment_uuid":"y6wyqjod8h2mbmzpmobeoozd","destination_id":"0","docker_registry_image_tag":null,"finished_at":"2026-05-14T18:46:09.000000Z","force_rebuild":false,"git_type":null,"horizon_job_id":"3b757c86-bdb5-492b-a56e-a9fa3c307516","horizon_job_worker":"e55bacf73ffc","is_api":true,"is_webhook":false,"logs":"[{\"command\":null,\"output\":\"Docker 27.0.3 with BuildKit and Buildx detected on deployment server (localhost).\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:45:55.202830Z\",\"hidden\":false,\"batch\":1},{\"command\":null,\"output\":\"Starting deployment of https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-frontend.git:main to localhost.\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:45:55.211689Z\",\"hidden\":false,\"batch\":1,\"order\":2},{\"command\":null,\"output\":\"Preparing container with helper image: ghcr.io\\\/coollabsio\\\/coolify-helper:1.0.13\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:45:55.535302Z\",\"hidden\":false,\"batch\":1,\"order\":3},{\"command\":\"docker stop -t 30 y6wyqjod8h2mbmzpmobeoozd\",\"output\":\"Error response from daemon: No such container: y6wyqjod8h2mbmzpmobeoozd\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:45:55.783295Z\",\"hidden\":true,\"batch\":1,\"order\":4},{\"command\":\"docker run -d --network 'coolify' --name y6wyqjod8h2mbmzpmobeoozd --rm -v \\\/var\\\/run\\\/docker.sock:\\\/var\\\/run\\\/docker.sock ghcr.io\\\/coollabsio\\\/coolify-helper:1.0.13\",\"output\":\"1299fc850ee83025e2e659b2254716e885280a0e4ca155500af7dfbfc64ab76a\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:45:56.065220Z\",\"hidden\":true,\"batch\":2,\"order\":5},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'GIT_SSH_COMMAND=\\\"ssh -o ConnectTimeout=30 -p 22 -o Port=22 -o LogLevel=ERROR -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git ls-remote https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-frontend.git refs\\\/heads\\\/main'\",\"output\":\"32a4812383734eea005a15a5bfd8a8127f4e259b\\trefs\\\/heads\\\/main\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:45:57.707790Z\",\"hidden\":true,\"batch\":3,\"order\":6},{\"command\":null,\"output\":\"----------------------------------------\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:45:57.733196Z\",\"hidden\":false,\"batch\":1,\"order\":7},{\"command\":null,\"output\":\"Importing https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-frontend.git:main (commit sha 32a4812383734eea005a15a5bfd8a8127f4e259b) to \\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd.\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:45:57.752432Z\",\"hidden\":false,\"batch\":1,\"order\":8},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'git clone --depth=1 --recurse-submodules --shallow-submodules -b '\\\\''main'\\\\'' '\\\\''https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-frontend.git'\\\\'' '\\\\''\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'\\\\'' && cd '\\\\''\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'\\\\'' && GIT_SSH_COMMAND=\\\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git fetch --depth=1 origin '\\\\''32a4812383734eea005a15a5bfd8a8127f4e259b'\\\\'' && git -c advice.detachedHead=false checkout '\\\\''32a4812383734eea005a15a5bfd8a8127f4e259b'\\\\'' >\\\/dev\\\/null 2>&1 && cd '\\\\''\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'\\\\'' && if [ -f .gitmodules ]; then sed -i \\\"s#git@\\\\(.*\\\\):#https:\\\/\\\/\\\\1\\\/#g\\\" '\\\\''\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'\\\\''\\\/.gitmodules || true && git submodule sync && GIT_SSH_COMMAND=\\\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git submodule update --init --recursive --depth=1; fi && cd '\\\\''\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'\\\\'' && GIT_SSH_COMMAND=\\\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git lfs pull'\",\"output\":\"Cloning into '\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:45:58.176679Z\",\"hidden\":true,\"batch\":4,\"order\":9},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'git clone --depth=1 --recurse-submodules --shallow-submodules -b '\\\\''main'\\\\'' '\\\\''https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-frontend.git'\\\\'' '\\\\''\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'\\\\'' && cd '\\\\''\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'\\\\'' && GIT_SSH_COMMAND=\\\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git fetch --depth=1 origin '\\\\''32a4812383734eea005a15a5bfd8a8127f4e259b'\\\\'' && git -c advice.detachedHead=false checkout '\\\\''32a4812383734eea005a15a5bfd8a8127f4e259b'\\\\'' >\\\/dev\\\/null 2>&1 && cd '\\\\''\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'\\\\'' && if [ -f .gitmodules ]; then sed -i \\\"s#git@\\\\(.*\\\\):#https:\\\/\\\/\\\\1\\\/#g\\\" '\\\\''\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'\\\\''\\\/.gitmodules || true && git submodule sync && GIT_SSH_COMMAND=\\\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git submodule update --init --recursive --depth=1; fi && cd '\\\\''\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd'\\\\'' && GIT_SSH_COMMAND=\\\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git lfs pull'\",\"output\":\"From https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-frontend\\n * branch 32a4812383734eea005a15a5bfd8a8127f4e259b -> FETCH_HEAD\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:45:59.239072Z\",\"hidden\":true,\"batch\":4,\"order\":10},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'cd \\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd && git log -1 '\\\\''32a4812383734eea005a15a5bfd8a8127f4e259b'\\\\'' --pretty=%B'\",\"output\":\"design(ui): brighten hero breadcrumb text contrast\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:46:00.332382Z\",\"hidden\":true,\"batch\":6,\"order\":11},{\"command\":null,\"output\":\"Image not found (y4cscsc8s08c8808go0448s0:32a4812383734eea005a15a5bfd8a8127f4e259b). Building new image.\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:46:00.629367Z\",\"hidden\":false,\"batch\":1,\"order\":12},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'cat \\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd\\\/Dockerfile'\",\"output\":\"cat: can't open '\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd\\\/Dockerfile': No such file or directory\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:02.489659Z\",\"hidden\":true,\"batch\":10,\"order\":13},{\"command\":null,\"output\":\"Creating build-time .env file in \\\/artifacts (outside Docker context).\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:46:03.830024Z\",\"hidden\":true,\"batch\":1,\"order\":14},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'cat \\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd\\\/Dockerfile'\",\"output\":\"cat: can't open '\\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd\\\/Dockerfile': No such file or directory\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:06.146453Z\",\"hidden\":true,\"batch\":13,\"order\":15},{\"command\":null,\"output\":\"----------------------------------------\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:46:06.176327Z\",\"hidden\":false,\"batch\":1,\"order\":16},{\"command\":null,\"output\":\"Building docker image started.\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:46:06.197573Z\",\"hidden\":false,\"batch\":1,\"order\":17},{\"command\":null,\"output\":\"To check the current progress, click on Show Debug Logs.\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:46:06.218852Z\",\"hidden\":false,\"batch\":1,\"order\":18},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'cat \\\/artifacts\\\/build.sh'\",\"output\":\"cd \\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd && set -a && source \\\/artifacts\\\/build-time.env && set +a && DOCKER_BUILDKIT=1 docker build --add-host coolify:10.0.1.11 --add-host coolify-db:10.0.1.3 --add-host coolify-realtime:10.0.1.9 --add-host coolify-redis:10.0.1.2 --add-host kggs4ogckc0w8ggwkkk88kck:10.0.1.13 --add-host kggs4ogckc0w8ggwkkk88kck-proxy:10.0.1.6 --add-host mh20hmj0h7pg9ftt0upo8s8p:10.0.1.24 --add-host p4dpjwv9p188h3y21c4xgiwy:10.0.1.21 --add-host q8i3lfauirs97awl4pieqbme:10.0.1.16 --add-host qckwo4g8gs8kw08gkgc0ss0g:10.0.1.8 --add-host qckwo4g8gs8kw08gkgc0ss0g-proxy:10.0.1.20 --add-host rlwvhmh25r7n2g2pbzygjlms:10.0.1.30 --add-host vibn-dev-dm3hqkyjknucuehfmqb75627:10.0.1.14 --add-host vibn-dev-lbhz4nd7wllowjlnwm1tmhu3:10.0.1.10 --add-host yoscw0og00gkgcsgswoskc8c:10.0.1.17 --add-host yoscw0og00gkgcsgswoskc8c-proxy:10.0.1.7 --add-host zlxavhunxe6vit057ntt7imx:10.0.1.27 --network host -f \\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd\\\/Dockerfile --progress plain -t y4cscsc8s08c8808go0448s0:32a4812383734eea005a15a5bfd8a8127f4e259b --build-arg COOLIFY_URL --build-arg COOLIFY_BRANCH --build-arg COOLIFY_RESOURCE_UUID --build-arg OPENSRS_API_KEY_LIVE --build-arg GITEA_API_TOKEN --build-arg NEXTAUTH_URL --build-arg COOLIFY_SERVER_UUID --build-arg GITEA_WEBHOOK_SECRET --build-arg AGENT_RUNNER_SECRET --build-arg GEMINI_MODEL --build-arg NEXTAUTH_SECRET --build-arg NEXT_PUBLIC_APP_URL --build-arg GOOGLE_SERVICE_ACCOUNT_KEY_B64 --build-arg GITEA_API_URL --build-arg GITEA_ADMIN_USER --build-arg GOOGLE_CLIENT_SECRET --build-arg AGENT_RUNNER_URL --build-arg ADMIN_MIGRATE_SECRET --build-arg GOOGLE_API_KEY --build-arg COOLIFY_API_TOKEN --build-arg OPENSRS_RESELLER_USERNAME --build-arg OPENSRS_API_KEY_TEST --build-arg OPENSRS_PORT --build-arg OPENSRS_MODE --build-arg OPENSRS_CURRENCY --build-arg GITHUB_CLIENT_ID --build-arg GITHUB_CLIENT_SECRET --build-arg COOLIFY_SSH_HOST --build-arg COOLIFY_SSH_PORT --build-arg COOLIFY_SSH_USER --build-arg COOLIFY_SSH_PRIVATE_KEY_B64 --build-arg GCP_PROJECT_ID --build-arg GOOGLE_CLIENT_ID --build-arg OPENSRS_HOST_LIVE --build-arg SENTRY_AUTH_TOKEN --build-arg GITEA_USERNAME --build-arg NEXT_PUBLIC_SENTRY_DSN --build-arg INFRA_HEALTH_SECRET --build-arg DATABASE_URL --build-arg OPENSRS_HOST_TEST --build-arg VIBN_SECRETS_KEY --build-arg COOLIFY_BUILD_SECRETS_HASH=03fb6d60adb1c477e10fc8b43e21ba4312d09b95d0cfa99168b60aef8a513707 --build-arg 'COOLIFY_URL' --build-arg 'COOLIFY_BRANCH' --build-arg 'COOLIFY_RESOURCE_UUID' \\\/artifacts\\\/y6wyqjod8h2mbmzpmobeoozd\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:46:07.568468Z\",\"hidden\":true,\"batch\":14,\"order\":19},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#0 building with \\\"default\\\" instance using docker driver\\n\\n#1 [internal] load build definition from Dockerfile\\n#1 transferring dockerfile:\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:08.758342Z\",\"hidden\":true,\"batch\":14,\"order\":20},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#1 transferring dockerfile: 2B 0.0s done\\n#1 DONE 0.2s\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:08.950984Z\",\"hidden\":true,\"batch\":14,\"order\":21},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"ERROR: failed to build: failed to solve: failed to read dockerfile: open Dockerfile: no such file or directory\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:08.966757Z\",\"hidden\":true,\"batch\":14,\"order\":22},{\"command\":\"docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"exit status 1\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:08.972325Z\",\"hidden\":true,\"batch\":14,\"order\":23},{\"command\":null,\"output\":\"========================================\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.143367Z\",\"hidden\":false,\"batch\":1,\"order\":24},{\"command\":null,\"output\":\"Deployment failed: Command execution failed (exit code 1): docker exec y6wyqjod8h2mbmzpmobeoozd bash -c 'bash \\\/artifacts\\\/build.sh'\\nError: #0 building with \\\"default\\\" instance using docker driver\\n\\n#1 [internal] load build definition from Dockerfile\\n#1 transferring dockerfile:\\n#1 transferring dockerfile: 2B 0.0s done\\n#1 DONE 0.2s\\nERROR: failed to build: failed to solve: failed to read dockerfile: open Dockerfile: no such file or directory\\nexit status 1\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.172726Z\",\"hidden\":false,\"batch\":1,\"order\":25},{\"command\":null,\"output\":\"Error type: App\\\\Exceptions\\\\DeploymentException\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.196736Z\",\"hidden\":true,\"batch\":1,\"order\":26},{\"command\":null,\"output\":\"Error code: 0\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.220352Z\",\"hidden\":true,\"batch\":1,\"order\":27},{\"command\":null,\"output\":\"Location: \\\/var\\\/www\\\/html\\\/app\\\/Traits\\\/ExecuteRemoteCommand.php:242\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.240357Z\",\"hidden\":true,\"batch\":1,\"order\":28},{\"command\":null,\"output\":\"Stack trace (first 5 lines):\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.264695Z\",\"hidden\":true,\"batch\":1,\"order\":29},{\"command\":null,\"output\":\"#0 \\\/var\\\/www\\\/html\\\/app\\\/Traits\\\/ExecuteRemoteCommand.php(106): App\\\\Jobs\\\\ApplicationDeploymentJob->executeCommandWithProcess()\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.286381Z\",\"hidden\":true,\"batch\":1,\"order\":30},{\"command\":null,\"output\":\"#1 \\\/var\\\/www\\\/html\\\/vendor\\\/laravel\\\/framework\\\/src\\\/Illuminate\\\/Collections\\\/Traits\\\/EnumeratesValues.php(275): App\\\\Jobs\\\\ApplicationDeploymentJob->{closure:App\\\\Traits\\\\ExecuteRemoteCommand::execute_remote_command():72}()\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.298778Z\",\"hidden\":true,\"batch\":1,\"order\":31},{\"command\":null,\"output\":\"#2 \\\/var\\\/www\\\/html\\\/app\\\/Traits\\\/ExecuteRemoteCommand.php(72): Illuminate\\\\Support\\\\Collection->each()\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.311709Z\",\"hidden\":true,\"batch\":1,\"order\":32},{\"command\":null,\"output\":\"#3 \\\/var\\\/www\\\/html\\\/app\\\/Jobs\\\/ApplicationDeploymentJob.php(3290): App\\\\Jobs\\\\ApplicationDeploymentJob->execute_remote_command()\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.325249Z\",\"hidden\":true,\"batch\":1,\"order\":33},{\"command\":null,\"output\":\"#4 \\\/var\\\/www\\\/html\\\/app\\\/Jobs\\\/ApplicationDeploymentJob.php(898): App\\\\Jobs\\\\ApplicationDeploymentJob->build_image()\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.338655Z\",\"hidden\":true,\"batch\":1,\"order\":34},{\"command\":null,\"output\":\"========================================\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.348379Z\",\"hidden\":false,\"batch\":1,\"order\":35},{\"command\":null,\"output\":\"Deployment failed. Removing the new version of your application.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-14T18:46:09.358630Z\",\"hidden\":false,\"batch\":1,\"order\":36},{\"command\":null,\"output\":\"Gracefully shutting down build container: y6wyqjod8h2mbmzpmobeoozd\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:46:10.400671Z\",\"hidden\":false,\"batch\":1,\"order\":37},{\"command\":\"docker stop -t 30 y6wyqjod8h2mbmzpmobeoozd\",\"output\":\"y6wyqjod8h2mbmzpmobeoozd\",\"type\":\"stdout\",\"timestamp\":\"2026-05-14T18:46:11.039730Z\",\"hidden\":true,\"batch\":17,\"order\":38}]","only_this_server":false,"pull_request_id":0,"restart_only":false,"rollback":false,"server_id":0,"server_name":"localhost","status":"failed","created_at":"2026-05-14T18:45:53.000000Z","updated_at":"2026-05-14T18:46:11.000000Z"}
```
## Matches in master-ai/vibn-frontend/app/api/context/summarize/route.ts
### const MODEL › L1-11
```
import { NextRequest, NextResponse } from "next/server";
const MODEL = process.env.GEMINI_MODEL || 'gemini-2.0-flash-exp';
const API_KEY = process.env.GOOGLE_API_KEY || '';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent`;
export async function POST(request: NextRequest) {
try {
const { content, title } = await request.json();
if (!content) {
```
42 lines remaining in ancestor node. Read the file to see all.
## Matches in master-ai/vibn-frontend/app/api/projects/[projectId]/analyze-chats/route.ts
### const GEMINI_MODEL › L1-21
```
import { NextResponse } from 'next/server';
import { authSession } from "@/lib/auth/session-server";
import { query } from '@/lib/db-postgres';
export const maxDuration = 60;
const GEMINI_API_KEY = process.env.GOOGLE_API_KEY || '';
const GEMINI_MODEL = process.env.GEMINI_MODEL || 'gemini-2.0-flash-exp';
const GEMINI_BASE_URL = 'https://generativelanguage.googleapis.com/v1beta/models';
async function callGemini(prompt: string): Promise$1',
)
.replace(
/^### (.+)$/gm,
'$1
',
)
.replace(
/^## (.+)$/gm,
'$1
',
)
.replace(
/^- (.+)$/gm,
'${m}
`,
)
.replace(
/\n\n/g,
'
',
)
.replace(/\n/g, "
");
s = autoLinkBareUrls(s);
return s;
}
// ── Message bubble ────────────────────────────────────────────────────────────
/**
* Strip the markdown-bold "**Section Heading**" lines that Gemini
* loves to start each thought with so the collapsed pill shows the
* actual sentence rather than "**Examining the Target Server File**".
* The full text is still available in the expanded view.
*/
function thoughtPreview(thoughts: string): string {
const stripped = thoughts
.replace(/^\s*\*\*[^*]+\*\*\s*/gm, "")
.replace(/\s+/g, " ")
.trim();
if (stripped.length <= 90) return stripped;
return stripped.slice(0, 87) + "…";
}
function ThinkingBubble({ thoughts }: { thoughts: string }) {
if (!thoughts) return null;
// Split thoughts into phrases, take the last one as the "current" action
const lines = thoughts
.split(/[.!?\n]/)
.map((l) => l.trim())
.filter(Boolean);
const currentAction = lines[lines.length - 1];
if (!currentAction) return null;
return (
Signing you in…
Sign in to use Vibn AI
Preview and tabs still work here. Chat needs an account.
Sign in
) : null}
) : null}