diff --git a/env_data.json b/env_data.json deleted file mode 100644 index 8aba10c8..00000000 --- a/env_data.json +++ /dev/null @@ -1 +0,0 @@ -{"id":1,"uuid":"foskksoccksk0kc4g8sk88ok","name":"production","applications":[{"id":7,"repository_project_id":null,"uuid":"m84cc4wsc0ckws8g8k44kkk8","name":"vibn-api","fqdn":"https:\/\/api.vibnai.com","config_hash":"8369c478f4c36fff33de214c7712568b","git_repository":"https:\/\/git.vibnai.com\/mark\/vibn-api.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":"3001","ports_mappings":null,"base_directory":"\/","publish_directory":null,"health_check_path":"\/","health_check_port":null,"health_check_host":"localhost","health_check_method":"GET","health_check_return_code":200,"health_check_scheme":"http","health_check_response_text":null,"health_check_interval":30,"health_check_timeout":3,"health_check_retries":3,"health_check_start_period":5,"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-16T03:46:33.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","description":"VIBN API\/Proxy Server","dockerfile":null,"health_check_enabled":false,"dockerfile_location":"\/Dockerfile","custom_labels":"dHJhZWZpay5lbmFibGU9dHJ1ZQp0cmFlZmlrLmh0dHAubWlkZGxld2FyZXMuZ3ppcC5jb21wcmVzcz10cnVlCnRyYWVmaWsuaHR0cC5taWRkbGV3YXJlcy5yZWRpcmVjdC10by1odHRwcy5yZWRpcmVjdHNjaGVtZS5zY2hlbWU9aHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLW04NGNjNHdzYzBja3dzOGc4azQ0a2trOC5lbnRyeVBvaW50cz1odHRwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1tODRjYzR3c2MwY2t3czhnOGs0NGtrazgubWlkZGxld2FyZXM9cmVkaXJlY3QtdG8taHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLW04NGNjNHdzYzBja3dzOGc4azQ0a2trOC5ydWxlPUhvc3QoYGFwaS52aWJuYWkuY29tYCkgJiYgUGF0aFByZWZpeChgL2ApCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1tODRjYzR3c2MwY2t3czhnOGs0NGtrazguc2VydmljZT1odHRwLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4CnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4LmVudHJ5UG9pbnRzPWh0dHBzCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4Lm1pZGRsZXdhcmVzPWd6aXAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1tODRjYzR3c2MwY2t3czhnOGs0NGtrazgucnVsZT1Ib3N0KGBhcGkudmlibmFpLmNvbWApICYmIFBhdGhQcmVmaXgoYC9gKQp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0wLW04NGNjNHdzYzBja3dzOGc4azQ0a2trOC5zZXJ2aWNlPWh0dHBzLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4CnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4LnRscy5jZXJ0cmVzb2x2ZXI9bGV0c2VuY3J5cHQKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1tODRjYzR3c2MwY2t3czhnOGs0NGtrazgudGxzPXRydWUKdHJhZWZpay5odHRwLnNlcnZpY2VzLmh0dHAtMC1tODRjYzR3c2MwY2t3czhnOGs0NGtrazgubG9hZGJhbGFuY2VyLnNlcnZlci5wb3J0PTMwMDEKdHJhZWZpay5odHRwLnNlcnZpY2VzLmh0dHBzLTAtbTg0Y2M0d3NjMGNrd3M4ZzhrNDRra2s4LmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD0zMDAxCmNhZGR5XzAuZW5jb2RlPXpzdGQgZ3ppcApjYWRkeV8wLmhhbmRsZV9wYXRoLjBfcmV2ZXJzZV9wcm94eT17e3Vwc3RyZWFtcyAzMDAxfX0KY2FkZHlfMC5oYW5kbGVfcGF0aD0vKgpjYWRkeV8wLmhlYWRlcj0tU2VydmVyCmNhZGR5XzAudHJ5X2ZpbGVzPXtwYXRofSAvaW5kZXguaHRtbCAvaW5kZXgucGhwCmNhZGR5XzA9aHR0cHM6Ly9hcGkudmlibmFpLmNvbQpjYWRkeV9pbmdyZXNzX25ldHdvcms9Y29vbGlmeQ==","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":true,"manual_webhook_secret_gitea":null,"redirect":"both","compose_parsing_version":"5","last_online_at":"2026-05-15 20:42:32","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,"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-15T20:42:32.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-15 20:42:32","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}}}},{"id":11,"repository_project_id":null,"uuid":"jss08wssogw4kw8gok0sk0w0","name":"vibn-agent-runner","fqdn":"https:\/\/agents.vibnai.com","config_hash":"8728b5bd004205482b619c498254bb8d","git_repository":"https:\/\/git.vibnai.com\/mark\/vibn-agent-runner.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":"3333","ports_mappings":null,"base_directory":"\/","publish_directory":null,"health_check_path":"\/","health_check_port":null,"health_check_host":"localhost","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":10,"health_check_start_period":5,"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:unknown","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-26T22:52:01.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","description":"","dockerfile":null,"health_check_enabled":false,"dockerfile_location":"\/.\/Dockerfile","custom_labels":"dHJhZWZpay5lbmFibGU9dHJ1ZQp0cmFlZmlrLmh0dHAubWlkZGxld2FyZXMuZ3ppcC5jb21wcmVzcz10cnVlCnRyYWVmaWsuaHR0cC5taWRkbGV3YXJlcy5yZWRpcmVjdC10by1odHRwcy5yZWRpcmVjdHNjaGVtZS5zY2hlbWU9aHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLWpzczA4d3Nzb2d3NGt3OGdvazBzazB3MC5lbnRyeVBvaW50cz1odHRwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAubWlkZGxld2FyZXM9cmVkaXJlY3QtdG8taHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLWpzczA4d3Nzb2d3NGt3OGdvazBzazB3MC5ydWxlPUhvc3QoYGFnZW50cy52aWJuYWkuY29tYCkgJiYgUGF0aFByZWZpeChgL2ApCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAuc2VydmljZT1odHRwLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLmVudHJ5UG9pbnRzPWh0dHBzCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLm1pZGRsZXdhcmVzPWd6aXAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAucnVsZT1Ib3N0KGBhZ2VudHMudmlibmFpLmNvbWApICYmIFBhdGhQcmVmaXgoYC9gKQp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0wLWpzczA4d3Nzb2d3NGt3OGdvazBzazB3MC5zZXJ2aWNlPWh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLnRscy5jZXJ0cmVzb2x2ZXI9bGV0c2VuY3J5cHQKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAudGxzPXRydWUKdHJhZWZpay5odHRwLnNlcnZpY2VzLmh0dHAtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAubG9hZGJhbGFuY2VyLnNlcnZlci5wb3J0PTMzMzMKdHJhZWZpay5odHRwLnNlcnZpY2VzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD0zMzMzCmNhZGR5XzAuZW5jb2RlPXpzdGQgZ3ppcApjYWRkeV8wLmhhbmRsZV9wYXRoLjBfcmV2ZXJzZV9wcm94eT17e3Vwc3RyZWFtcyAzMzMzfX0KY2FkZHlfMC5oYW5kbGVfcGF0aD0vKgpjYWRkeV8wLmhlYWRlcj0tU2VydmVyCmNhZGR5XzAudHJ5X2ZpbGVzPXtwYXRofSAvaW5kZXguaHRtbCAvaW5kZXgucGhwCmNhZGR5XzA9aHR0cHM6Ly9hZ2VudHMudmlibmFpLmNvbQpjYWRkeV9pbmdyZXNzX25ldHdvcms9Y29vbGlmeQ==","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":"--volume \/var\/run\/docker.sock:\/var\/run\/docker.sock","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":null,"redirect":"both","compose_parsing_version":"5","last_online_at":"2026-05-15 20:42:32","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,"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-15T20:42:32.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-15 20:42:32","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}}}},{"id":8,"repository_project_id":null,"uuid":"y4cscsc8s08c8808go0448s0","name":"vibn-frontend","fqdn":"https:\/\/vibnai.com,https:\/\/www.vibnai.com","config_hash":"6ed60185dad03810d4b9db6ce4fa76a2","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-15T20:42:32.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-15 20:42:32","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,"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-15T20:42:32.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-15 20:42:32","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}}}}],"description":null,"mariadbs":[],"mongodbs":[],"mysqls":[],"postgresqls":[{"id":2,"uuid":"kggs4ogckc0w8ggwkkk88kck","name":"vibn-postgres","description":"VIBN unified database - replaces Firebase + Railway","postgres_user":"vibn_user","postgres_password":"JSMcySGlEj3pSMjHvwEHAd1A","postgres_db":"vibn","postgres_initdb_args":"--encoding=UTF8 --locale=C","postgres_host_auth_method":"scram-sha-256","init_scripts":null,"status":"running:healthy","image":"postgres:16-alpine","is_public":true,"public_port":5433,"ports_mappings":null,"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,"started_at":"2026-02-18 00:58:28","destination_type":"App\\Models\\StandaloneDocker","destination_id":0,"environment_id":1,"created_at":"2026-02-16T03:41:27.000000Z","updated_at":"2026-05-15T20:42:32.000000Z","postgres_conf":null,"is_log_drain_enabled":false,"is_include_timestamps":false,"deleted_at":null,"config_hash":"651bd3ba4d41c9880769c26675e79f87","custom_docker_run_options":null,"last_online_at":"2026-05-15 20:42:32","enable_ssl":false,"ssl_mode":"require","restart_count":0,"last_restart_at":null,"last_restart_type":null,"public_port_timeout":3600,"internal_db_url":"postgres:\/\/vibn_user:JSMcySGlEj3pSMjHvwEHAd1A@kggs4ogckc0w8ggwkkk88kck:5432\/vibn","external_db_url":"postgres:\/\/vibn_user:JSMcySGlEj3pSMjHvwEHAd1A@34.19.250.135:5433\/vibn","database_type":"standalone-postgresql","server_status":true,"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-15T20:42:32.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-15 20:42:32","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}}}}],"project_id":1,"redis":[],"services":[{"id":2,"uuid":"o4wwck0g0c04wgoo4g4s0004","name":"gitea","environment_id":1,"created_at":"2026-02-27T19:03:58.000000Z","updated_at":"2026-03-07T21:52:00.000000Z","server_id":1,"description":"","docker_compose_raw":"services:\n gitea:\n image: 'gitea\/gitea:latest'\n environment:\n - SERVICE_FQDN_GITEA_3000=git.vibnai.com\n - USER_UID=1000\n - USER_GID=1000\n - 'GITEA__server__ROOT_URL=https:\/\/git.vibnai.com\/'\n - GITEA__server__DOMAIN=git.vibnai.com\n - GITEA__server__SSH_DOMAIN=git.vibnai.com\n - GITEA__security__INSTALL_LOCK=true\n ports:\n - '22222:22'\n volumes:\n - 'gitea-data:\/data'\n - 'gitea-timezone:\/etc\/timezone:ro'\n - 'gitea-localtime:\/etc\/localtime:ro'\n healthcheck:\n test:\n - CMD\n - curl\n - '-f'\n - 'http:\/\/127.0.0.1:3000'\n interval: 2s\n timeout: 10s\n retries: 15\n","docker_compose":"services:\n gitea:\n image: 'gitea\/gitea:latest'\n environment:\n USER_UID: '1000'\n USER_GID: '1000'\n GITEA__server__ROOT_URL: 'https:\/\/git.vibnai.com\/'\n GITEA__server__DOMAIN: git.vibnai.com\n GITEA__server__SSH_DOMAIN: git.vibnai.com\n GITEA__security__INSTALL_LOCK: 'true'\n COOLIFY_RESOURCE_UUID: o4wwck0g0c04wgoo4g4s0004\n COOLIFY_CONTAINER_NAME: gitea-o4wwck0g0c04wgoo4g4s0004\n COOLIFY_FQDN: git.vibnai.com\n COOLIFY_URL: 'https:\/\/git.vibnai.com'\n SERVICE_NAME_GITEA: gitea\n ports:\n - '22222:22'\n volumes:\n - 'o4wwck0g0c04wgoo4g4s0004_gitea-data:\/data'\n - 'o4wwck0g0c04wgoo4g4s0004_gitea-timezone:\/etc\/timezone:ro'\n - 'o4wwck0g0c04wgoo4g4s0004_gitea-localtime:\/etc\/localtime:ro'\n healthcheck:\n test:\n - CMD\n - curl\n - '-f'\n - 'http:\/\/127.0.0.1:3000'\n interval: 2s\n timeout: 10s\n retries: 15\n container_name: gitea-o4wwck0g0c04wgoo4g4s0004\n restart: unless-stopped\n labels:\n - coolify.managed=true\n - coolify.version=4.0.0-beta.463\n - coolify.serviceId=2\n - coolify.type=service\n - coolify.name=gitea-o4wwck0g0c04wgoo4g4s0004\n - coolify.resourceName=gitea\n - coolify.projectName=vibn\n - coolify.serviceName=gitea\n - coolify.environmentName=production\n - coolify.pullRequestId=0\n - coolify.service.subId=2\n - coolify.service.subType=application\n - coolify.service.subName=gitea\n - traefik.enable=true\n - traefik.http.middlewares.gzip.compress=true\n - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https\n - traefik.http.routers.http-0-o4wwck0g0c04wgoo4g4s0004-gitea.entryPoints=http\n - traefik.http.routers.http-0-o4wwck0g0c04wgoo4g4s0004-gitea.middlewares=redirect-to-https\n - 'traefik.http.routers.http-0-o4wwck0g0c04wgoo4g4s0004-gitea.rule=Host(`git.vibnai.com`) && PathPrefix(`\/`)'\n - traefik.http.routers.https-0-o4wwck0g0c04wgoo4g4s0004-gitea.entryPoints=https\n - traefik.http.routers.https-0-o4wwck0g0c04wgoo4g4s0004-gitea.middlewares=gzip\n - 'traefik.http.routers.https-0-o4wwck0g0c04wgoo4g4s0004-gitea.rule=Host(`git.vibnai.com`) && PathPrefix(`\/`)'\n - traefik.http.routers.https-0-o4wwck0g0c04wgoo4g4s0004-gitea.tls.certresolver=letsencrypt\n - traefik.http.routers.https-0-o4wwck0g0c04wgoo4g4s0004-gitea.tls=true\n - 'caddy_0.encode=zstd gzip'\n - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}'\n - 'caddy_0.handle_path=\/*'\n - caddy_0.header=-Server\n - 'caddy_0.try_files={path} \/index.html \/index.php'\n - 'caddy_0=https:\/\/git.vibnai.com'\n - caddy_ingress_network=o4wwck0g0c04wgoo4g4s0004\n networks:\n o4wwck0g0c04wgoo4g4s0004: null\n env_file:\n - .env\nvolumes:\n o4wwck0g0c04wgoo4g4s0004_gitea-data:\n name: o4wwck0g0c04wgoo4g4s0004_gitea-data\n o4wwck0g0c04wgoo4g4s0004_gitea-timezone:\n name: o4wwck0g0c04wgoo4g4s0004_gitea-timezone\n o4wwck0g0c04wgoo4g4s0004_gitea-localtime:\n name: o4wwck0g0c04wgoo4g4s0004_gitea-localtime\nnetworks:\n o4wwck0g0c04wgoo4g4s0004:\n name: o4wwck0g0c04wgoo4g4s0004\n external: true\n","destination_type":"App\\Models\\StandaloneDocker","destination_id":1,"deleted_at":null,"connect_to_docker_network":false,"config_hash":"81f7a40a55892337fca90c5b1a01171a","service_type":"gitea","is_container_label_escape_enabled":true,"compose_parsing_version":"5","server_status":true,"status":"running:healthy","server":{"id":1,"uuid":"zg4cwgc44ogc08804000gggo","name":"coolify-server-mtl","description":"","ip":"34.19.250.135","port":22,"user":"root","team_id":0,"private_key_id":0,"proxy":{"type":"TRAEFIK","status":"running","redirect_enabled":true},"created_at":"2026-02-15T01:48:10.000000Z","updated_at":"2026-05-10T00:00:40.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-02-14 21:41:49","deleted_at":null,"ip_previous":"127.0.0.1","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:40+00:00"},"server_metadata":null,"is_coolify_host":false,"settings":{"id":2,"is_swarm_manager":false,"is_jump_server":false,"is_build_server":false,"is_reachable":true,"is_usable":true,"server_id":1,"created_at":"2026-02-15T01:48:10.000000Z","updated_at":"2026-02-28T00:11:02.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":"eyJpdiI6InM0cFNzelpxWkFCY0JSL0RyeXhqTVE9PSIsInZhbHVlIjoiaFI1NWhwTE1JNEtQQ1V3L0dsVWJwUzlFUUlQakdjbG5xekNFRDQ1S0c0TUxWSWtVelE4amFXa1BhMGxBaXIvdUx0SjlMZnlWS2liNklzR3ViaHdYRkE9PSIsIm1hYyI6ImExYTRlZGMxMWJkZWQyZjk0OWJjZDA0OTdiNmNjNzk0YTYzZDljZjBhNTQ5ZDgxMzEzNWExNjliNmU3ZTE1NWEiLCJ0YWciOiIifQ==","sentinel_metrics_refresh_rate_seconds":10,"sentinel_metrics_history_days":7,"sentinel_push_interval_seconds":60,"sentinel_custom_url":"http:\/\/34.19.250.135: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}},"applications":[{"id":2,"uuid":"g440wws48sow8ggwo8kw08c0","name":"gitea","human_name":null,"description":null,"fqdn":"https:\/\/git.vibnai.com","ports":"22222:22","exposes":null,"status":"running:healthy","service_id":2,"created_at":"2026-02-27T19:03:58.000000Z","updated_at":"2026-05-15T20:42:06.000000Z","exclude_from_status":false,"required_fqdn":false,"image":"gitea\/gitea:latest","is_log_drain_enabled":false,"is_include_timestamps":false,"deleted_at":null,"is_gzip_enabled":true,"is_stripprefix_enabled":true,"last_online_at":"2026-05-15 20:42:06","is_migrated":false}],"databases":[]}],"created_at":"2026-02-14T21:49:21.000000Z","updated_at":"2026-02-14T21:49:21.000000Z"} \ No newline at end of file diff --git a/runner_logs.json b/runner_logs.json deleted file mode 100644 index 07932ddb..00000000 --- a/runner_logs.json +++ /dev/null @@ -1 +0,0 @@ -{"id":734,"application":{"id":11,"repository_project_id":null,"uuid":"jss08wssogw4kw8gok0sk0w0","name":"vibn-agent-runner","fqdn":"https:\/\/agents.vibnai.com","config_hash":"2031a8b69f42cd69f43960ae77ef69b2","git_repository":"https:\/\/git.vibnai.com\/mark\/vibn-agent-runner.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":"3333","ports_mappings":null,"base_directory":"\/","publish_directory":null,"health_check_path":"\/","health_check_port":null,"health_check_host":"localhost","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":10,"health_check_start_period":5,"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:unknown","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-26T22:52:01.000000Z","updated_at":"2026-05-15T17:27:44.000000Z","description":"","dockerfile":null,"health_check_enabled":false,"dockerfile_location":"\/.\/Dockerfile","custom_labels":"dHJhZWZpay5lbmFibGU9dHJ1ZQp0cmFlZmlrLmh0dHAubWlkZGxld2FyZXMuZ3ppcC5jb21wcmVzcz10cnVlCnRyYWVmaWsuaHR0cC5taWRkbGV3YXJlcy5yZWRpcmVjdC10by1odHRwcy5yZWRpcmVjdHNjaGVtZS5zY2hlbWU9aHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLWpzczA4d3Nzb2d3NGt3OGdvazBzazB3MC5lbnRyeVBvaW50cz1odHRwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAubWlkZGxld2FyZXM9cmVkaXJlY3QtdG8taHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLWpzczA4d3Nzb2d3NGt3OGdvazBzazB3MC5ydWxlPUhvc3QoYGFnZW50cy52aWJuYWkuY29tYCkgJiYgUGF0aFByZWZpeChgL2ApCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAuc2VydmljZT1odHRwLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLmVudHJ5UG9pbnRzPWh0dHBzCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLm1pZGRsZXdhcmVzPWd6aXAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAucnVsZT1Ib3N0KGBhZ2VudHMudmlibmFpLmNvbWApICYmIFBhdGhQcmVmaXgoYC9gKQp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0wLWpzczA4d3Nzb2d3NGt3OGdvazBzazB3MC5zZXJ2aWNlPWh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLnRscy5jZXJ0cmVzb2x2ZXI9bGV0c2VuY3J5cHQKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAudGxzPXRydWUKdHJhZWZpay5odHRwLnNlcnZpY2VzLmh0dHAtMC1qc3MwOHdzc29ndzRrdzhnb2swc2swdzAubG9hZGJhbGFuY2VyLnNlcnZlci5wb3J0PTMzMzMKdHJhZWZpay5odHRwLnNlcnZpY2VzLmh0dHBzLTAtanNzMDh3c3NvZ3c0a3c4Z29rMHNrMHcwLmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD0zMzMzCmNhZGR5XzAuZW5jb2RlPXpzdGQgZ3ppcApjYWRkeV8wLmhhbmRsZV9wYXRoLjBfcmV2ZXJzZV9wcm94eT17e3Vwc3RyZWFtcyAzMzMzfX0KY2FkZHlfMC5oYW5kbGVfcGF0aD0vKgpjYWRkeV8wLmhlYWRlcj0tU2VydmVyCmNhZGR5XzAudHJ5X2ZpbGVzPXtwYXRofSAvaW5kZXguaHRtbCAvaW5kZXgucGhwCmNhZGR5XzA9aHR0cHM6Ly9hZ2VudHMudmlibmFpLmNvbQpjYWRkeV9pbmdyZXNzX25ldHdvcms9Y29vbGlmeQ==","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":"--volume \/var\/run\/docker.sock:\/var\/run\/docker.sock","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":null,"redirect":"both","compose_parsing_version":"5","last_online_at":"2026-05-15 17:27:44","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-15T17:27: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-15 17:27: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":"11","application_name":"vibn-agent-runner","build_server_id":null,"commit":"deb884894143dfbff17ddebec7262b788e6f5679","commit_message":"fix(ai): strip deepseek xml tags from chat history & secure git tools\n\nThis commit addresses the issue where DeepSeek's raw XML markup (like and ) was leaking into chat history, causing hallucinations in subsequent turns. It also patches a vulnerability in the git commit tool where arbitrary shell injection was possible.\n\nAdditionally, it includes UX copy and color contrast adjustments for the marketing homepage breadcrumbs.","current_process_id":"4121255","deployment_url":"\/project\/f4owwggokksgw0ogo0844os0\/environment\/foskksoccksk0kc4g8sk88ok\/application\/jss08wssogw4kw8gok0sk0w0\/deployment\/ci59tkfkk62utdwacire8o4z","deployment_uuid":"ci59tkfkk62utdwacire8o4z","destination_id":"0","docker_registry_image_tag":null,"finished_at":"2026-05-15T17:25:07.000000Z","force_rebuild":true,"git_type":null,"horizon_job_id":"a23ad1d8-fdf2-447a-9cae-a925788ca207","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-15T17:23:37.156635Z\",\"hidden\":false,\"batch\":1},{\"command\":null,\"output\":\"Starting deployment of https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-agent-runner.git:main to localhost.\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:37.191433Z\",\"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-15T17:23:38.840858Z\",\"hidden\":false,\"batch\":1,\"order\":3},{\"command\":\"docker stop -t 30 ci59tkfkk62utdwacire8o4z\",\"output\":\"Error response from daemon: No such container: ci59tkfkk62utdwacire8o4z\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:39.469336Z\",\"hidden\":true,\"batch\":1,\"order\":4},{\"command\":\"docker run -d --network 'coolify' --name ci59tkfkk62utdwacire8o4z --rm -v \\\/var\\\/run\\\/docker.sock:\\\/var\\\/run\\\/docker.sock ghcr.io\\\/coollabsio\\\/coolify-helper:1.0.13\",\"output\":\"ee4d7a9e598926dfbe218004602ca2cc7f1d3df123fed4291a46fedb2d0eaf34\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:40.154558Z\",\"hidden\":true,\"batch\":2,\"order\":5},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z 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-agent-runner.git refs\\\/heads\\\/main'\",\"output\":\"deb884894143dfbff17ddebec7262b788e6f5679\\trefs\\\/heads\\\/main\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:42.650323Z\",\"hidden\":true,\"batch\":3,\"order\":6},{\"command\":null,\"output\":\"----------------------------------------\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:42.704865Z\",\"hidden\":false,\"batch\":1,\"order\":7},{\"command\":null,\"output\":\"Importing https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-agent-runner.git:main (commit sha deb884894143dfbff17ddebec7262b788e6f5679) to \\\/artifacts\\\/ci59tkfkk62utdwacire8o4z.\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:42.714308Z\",\"hidden\":false,\"batch\":1,\"order\":8},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'git clone --depth=1 --recurse-submodules --shallow-submodules -b '\\\\''main'\\\\'' '\\\\''https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-agent-runner.git'\\\\'' '\\\\''\\\/artifacts\\\/ci59tkfkk62utdwacire8o4z'\\\\'' && cd '\\\\''\\\/artifacts\\\/ci59tkfkk62utdwacire8o4z'\\\\'' && GIT_SSH_COMMAND=\\\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git fetch --depth=1 origin '\\\\''deb884894143dfbff17ddebec7262b788e6f5679'\\\\'' && git -c advice.detachedHead=false checkout '\\\\''deb884894143dfbff17ddebec7262b788e6f5679'\\\\'' >\\\/dev\\\/null 2>&1 && cd '\\\\''\\\/artifacts\\\/ci59tkfkk62utdwacire8o4z'\\\\'' && if [ -f .gitmodules ]; then sed -i \\\"s#git@\\\\(.*\\\\):#https:\\\/\\\/\\\\1\\\/#g\\\" '\\\\''\\\/artifacts\\\/ci59tkfkk62utdwacire8o4z'\\\\''\\\/.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\\\/ci59tkfkk62utdwacire8o4z'\\\\'' && GIT_SSH_COMMAND=\\\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git lfs pull'\",\"output\":\"Cloning into '\\\/artifacts\\\/ci59tkfkk62utdwacire8o4z'...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:43.410610Z\",\"hidden\":true,\"batch\":4,\"order\":9},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'git clone --depth=1 --recurse-submodules --shallow-submodules -b '\\\\''main'\\\\'' '\\\\''https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-agent-runner.git'\\\\'' '\\\\''\\\/artifacts\\\/ci59tkfkk62utdwacire8o4z'\\\\'' && cd '\\\\''\\\/artifacts\\\/ci59tkfkk62utdwacire8o4z'\\\\'' && GIT_SSH_COMMAND=\\\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git fetch --depth=1 origin '\\\\''deb884894143dfbff17ddebec7262b788e6f5679'\\\\'' && git -c advice.detachedHead=false checkout '\\\\''deb884894143dfbff17ddebec7262b788e6f5679'\\\\'' >\\\/dev\\\/null 2>&1 && cd '\\\\''\\\/artifacts\\\/ci59tkfkk62utdwacire8o4z'\\\\'' && if [ -f .gitmodules ]; then sed -i \\\"s#git@\\\\(.*\\\\):#https:\\\/\\\/\\\\1\\\/#g\\\" '\\\\''\\\/artifacts\\\/ci59tkfkk62utdwacire8o4z'\\\\''\\\/.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\\\/ci59tkfkk62utdwacire8o4z'\\\\'' && GIT_SSH_COMMAND=\\\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=\\\/dev\\\/null\\\" git lfs pull'\",\"output\":\"From https:\\\/\\\/git.vibnai.com\\\/mark\\\/vibn-agent-runner\\n * branch deb884894143dfbff17ddebec7262b788e6f5679 -> FETCH_HEAD\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:43.821457Z\",\"hidden\":true,\"batch\":4,\"order\":10},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'cd \\\/artifacts\\\/ci59tkfkk62utdwacire8o4z && git log -1 '\\\\''deb884894143dfbff17ddebec7262b788e6f5679'\\\\'' --pretty=%B'\",\"output\":\"fix(ai): strip deepseek xml tags from chat history & secure git tools\\n\\nThis commit addresses the issue where DeepSeek's raw XML markup (like and ) was leaking into chat history, causing hallucinations in subsequent turns. It also patches a vulnerability in the git commit tool where arbitrary shell injection was possible.\\n\\nAdditionally, it includes UX copy and color contrast adjustments for the marketing homepage breadcrumbs.\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:46.848479Z\",\"hidden\":true,\"batch\":6,\"order\":11},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'cat \\\/artifacts\\\/ci59tkfkk62utdwacire8o4z\\\/.\\\/Dockerfile'\",\"output\":\"FROM node:20-slim\\n\\n# Install ripgrep, git, and docker CLI\\nRUN apt-get update && apt-get install -y --no-install-recommends \\\\\\n ripgrep \\\\\\n git \\\\\\n ca-certificates \\\\\\n curl \\\\\\n gnupg \\\\\\n && install -m 0755 -d \\\/etc\\\/apt\\\/keyrings \\\\\\n && curl -fsSL https:\\\/\\\/download.docker.com\\\/linux\\\/debian\\\/gpg | gpg --dearmor -o \\\/etc\\\/apt\\\/keyrings\\\/docker.gpg \\\\\\n && chmod a+r \\\/etc\\\/apt\\\/keyrings\\\/docker.gpg \\\\\\n && echo \\\"deb [arch=$(dpkg --print-architecture) signed-by=\\\/etc\\\/apt\\\/keyrings\\\/docker.gpg] https:@vibnai.com\\\" && \\\\\\n git config --global user.name \\\"Vibn Agent Runner\\\"\\n\\nEXPOSE 3333\\n\\nENV NODE_ENV=production\\nENV PORT=3333\\n\\nCMD [\\\"node\\\", \\\"dist\\\/server.js\\\"]\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:50.770078Z\",\"hidden\":true,\"batch\":9,\"order\":12},{\"command\":null,\"output\":\"Creating build-time .env file in \\\/artifacts (outside Docker context).\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:52.182391Z\",\"hidden\":true,\"batch\":1,\"order\":13},{\"command\":null,\"output\":\"----------------------------------------\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:53.305962Z\",\"hidden\":false,\"batch\":1,\"order\":14},{\"command\":null,\"output\":\"\\u26a0\\ufe0f Build-time environment variable warning: NODE_ENV=production\",\"type\":\"warning\",\"timestamp\":\"2026-05-15T17:23:53.321607Z\",\"hidden\":false,\"batch\":1,\"order\":15},{\"command\":null,\"output\":\"Affects: Node.js\\\/npm\\\/yarn\\\/bun\\\/pnpm\",\"type\":\"warning\",\"timestamp\":\"2026-05-15T17:23:53.336030Z\",\"hidden\":false,\"batch\":1,\"order\":16},{\"command\":null,\"output\":\"Issue: Skips devDependencies installation which are often required for building (webpack, typescript, etc.)\",\"type\":\"warning\",\"timestamp\":\"2026-05-15T17:23:53.355626Z\",\"hidden\":false,\"batch\":1,\"order\":17},{\"command\":null,\"output\":\"Recommendation: Uncheck \\\"Available at Buildtime\\\" or use \\\"development\\\" during build\",\"type\":\"warning\",\"timestamp\":\"2026-05-15T17:23:53.370336Z\",\"hidden\":false,\"batch\":1,\"order\":18},{\"command\":null,\"output\":\"\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:53.386693Z\",\"hidden\":false,\"batch\":1,\"order\":19},{\"command\":null,\"output\":\"\\ud83d\\udca1 Tips to resolve build issues:\",\"type\":\"info\",\"timestamp\":\"2026-05-15T17:23:53.404614Z\",\"hidden\":false,\"batch\":1,\"order\":20},{\"command\":null,\"output\":\"1. Set these variables as \\\"Runtime only\\\" in the environment variables settings\",\"type\":\"info\",\"timestamp\":\"2026-05-15T17:23:53.417042Z\",\"hidden\":false,\"batch\":1,\"order\":21},{\"command\":null,\"output\":\"2. Use different values for build-time (e.g., NODE_ENV=development for build)\",\"type\":\"info\",\"timestamp\":\"2026-05-15T17:23:53.427325Z\",\"hidden\":false,\"batch\":1,\"order\":22},{\"command\":null,\"output\":\"3. Consider using multi-stage Docker builds to separate build and runtime environments\",\"type\":\"info\",\"timestamp\":\"2026-05-15T17:23:53.437926Z\",\"hidden\":false,\"batch\":1,\"order\":23},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'cat \\\/artifacts\\\/ci59tkfkk62utdwacire8o4z\\\/.\\\/Dockerfile'\",\"output\":\"FROM node:20-slim\\n\\n# Install ripgrep, git, and docker CLI\\nRUN apt-get update && apt-get install -y --no-install-recommends \\\\\\n ripgrep \\\\\\n git \\\\\\n ca-certificates \\\\\\n curl \\\\\\n gnupg \\\\\\n && install -m 0755 -d \\\/etc\\\/apt\\\/keyrings \\\\\\n && curl -fsSL https:\\\/\\\/download.docker.com\\\/linux\\\/debian\\\/gpg | gpg --dearmor -o \\\/etc\\\/apt\\\/keyrings\\\/docker.gpg \\\\\\n && chmod a+r \\\/etc\\\/apt\\\/keyrings\\\/docker.gpg \\\\\\n && echo \\\"deb [arch=$(dpkg --print-architecture) signed-by=\\\/etc\\\/apt\\\/keyrings\\\/docker.gpg] https:@vibnai.com\\\" && \\\\\\n git config --global user.name \\\"Vibn Agent Runner\\\"\\n\\nEXPOSE 3333\\n\\nENV NODE_ENV=production\\nENV PORT=3333\\n\\nCMD [\\\"node\\\", \\\"dist\\\/server.js\\\"]\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:54.285085Z\",\"hidden\":true,\"batch\":12,\"order\":24},{\"command\":null,\"output\":\"Final Dockerfile:\",\"type\":\"info\",\"timestamp\":\"2026-05-15T17:23:54.449954Z\",\"hidden\":true,\"batch\":1,\"order\":25},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'cat \\\/artifacts\\\/ci59tkfkk62utdwacire8o4z\\\/.\\\/Dockerfile'\",\"output\":\"FROM node:20-slim\\nARG VIBN_API_URL=https:\\\/\\\/vibnai.com\\nARG GITEA_API_TOKEN=d0bbc77d388f7a7b5bc6ab48190d483b1ea8d4fa\\nARG ORCHESTRATOR_MODEL=zai-org\\\/glm-5-maas\\nARG AGENT_RUNNER_SECRET=27a2d9f2a514f1da35a5d050d674b760cc12782216bf90ae\\nARG GOOGLE_API_KEY=\\nARG GITEA_API_URL=https:@vibnai.com\\\" && \\\\\\n git config --global user.name \\\"Vibn Agent Runner\\\"\\n\\nEXPOSE 3333\\n\\nENV NODE_ENV=production\\nENV PORT=3333\\n\\nCMD [\\\"node\\\", \\\"dist\\\/server.js\\\"]\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:55.850314Z\",\"hidden\":true,\"batch\":13,\"order\":26},{\"command\":null,\"output\":\"----------------------------------------\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:55.875652Z\",\"hidden\":false,\"batch\":1,\"order\":27},{\"command\":null,\"output\":\"Building docker image started.\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:55.897498Z\",\"hidden\":false,\"batch\":1,\"order\":28},{\"command\":null,\"output\":\"To check the current progress, click on Show Debug Logs.\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:55.911579Z\",\"hidden\":false,\"batch\":1,\"order\":29},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'cat \\\/artifacts\\\/build.sh'\",\"output\":\"cd \\\/artifacts\\\/ci59tkfkk62utdwacire8o4z && set -a && source \\\/artifacts\\\/build-time.env && set +a && DOCKER_BUILDKIT=1 docker build --no-cache --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 nqkw0zwvcbz237yte9zx77k7:10.0.1.25 --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\\\/ci59tkfkk62utdwacire8o4z\\\/.\\\/Dockerfile --progress plain -t jss08wssogw4kw8gok0sk0w0:deb884894143dfbff17ddebec7262b788e6f5679 --build-arg COOLIFY_URL --build-arg COOLIFY_FQDN --build-arg COOLIFY_BRANCH --build-arg COOLIFY_RESOURCE_UUID --build-arg VIBN_API_URL --build-arg GITEA_API_TOKEN --build-arg ORCHESTRATOR_MODEL --build-arg AGENT_RUNNER_SECRET --build-arg GOOGLE_API_KEY --build-arg GITEA_API_URL --build-arg GITEA_USERNAME --build-arg COOLIFY_API_URL --build-arg COOLIFY_API_TOKEN --build-arg WORKSPACE_BASE --build-arg PORT --build-arg NODE_ENV --build-arg WEBHOOK_SECRET --build-arg GCP_SA_KEY_BASE64 --build-arg AGENT_RUNNER_URL --build-arg COOLIFY_BUILD_SECRETS_HASH=18b9bb96ec83d1c29364cdd7953abf048d0151b5d293c0505fe5a1f82318d535 --build-arg 'COOLIFY_URL' --build-arg 'COOLIFY_FQDN' --build-arg 'COOLIFY_BRANCH' --build-arg 'COOLIFY_RESOURCE_UUID' \\\/artifacts\\\/ci59tkfkk62utdwacire8o4z\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:23:57.466387Z\",\"hidden\":true,\"batch\":14,\"order\":30},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z 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: 5.43kB 0.0s done\\n#1 DONE 0.1s\\n\\n#2 [internal] load metadata for docker.io\\\/library\\\/node:20-slim\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:58.818435Z\",\"hidden\":true,\"batch\":14,\"order\":31},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#2 DONE 0.3s\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:58.966017Z\",\"hidden\":true,\"batch\":14,\"order\":32},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#3 [internal] load .dockerignore\\n#3 transferring context: 2B done\\n#3 DONE 0.1s\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:59.067426Z\",\"hidden\":true,\"batch\":14,\"order\":33},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#4 [internal] load build context\\n#4 DONE 0.0s\\n\\n#5 [ 1\\\/11] FROM docker.io\\\/library\\\/node:20-slim@sha256:2cf067cfed83d5ea958367df9f966191a942351a2df77d6f0193e162b5febfc0\\n#5 DONE 0.0s\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:59.161233Z\",\"hidden\":true,\"batch\":14,\"order\":34},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#5 [ 1\\\/11] FROM docker.io\\\/library\\\/node:20-slim@sha256:2cf067cfed83d5ea958367df9f966191a942351a2df77d6f0193e162b5febfc0\\n#5 CACHED\\n\\n#4 [internal] load build context\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:59.330142Z\",\"hidden\":true,\"batch\":14,\"order\":35},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#4 transferring context: 306.13kB 0.1s done\\n#4 DONE 0.3s\\n\\n#6 [ 2\\\/11] RUN apt-get update && apt-get install -y --no-install-recommends ripgrep git ca-certificates curl gnupg && install -m 0755 -d \\\/etc\\\/apt\\\/keyrings && curl -fsSL https:\\\/\\\/download.docker.com\\\/linux\\\/debian\\\/gpg | gpg --dearmor -o \\\/etc\\\/apt\\\/keyrings\\\/docker.gpg && chmod a+r \\\/etc\\\/apt\\\/keyrings\\\/docker.gpg && echo \\\"deb [arch=$(dpkg --print-architecture) signed-by=\\\/etc\\\/apt\\\/keyrings\\\/docker.gpg] https:\\\/\\\/download.docker.com\\\/linux\\\/debian $(. \\\/etc\\\/os-release && echo \\\"$VERSION_CODENAME\\\") stable\\\" > \\\/etc\\\/apt\\\/sources.list.d\\\/docker.list && apt-get update && apt-get install -y --no-install-recommends docker-ce-cli && rm -rf \\\/var\\\/lib\\\/apt\\\/lists\\\/*\\n#6 0.284 Get:1 http:\\\/\\\/deb.debian.org\\\/debian bookworm InRelease [151 kB]\\n#6 0.303 Get:2 http:\\\/\\\/deb.debian.org\\\/debian bookworm-updates InRelease [55.4 kB]\\n#6 0.326 Get:3 http:\\\/\\\/deb.debian.org\\\/debian-security bookworm-security InRelease [48.0 kB]\\n#6 0.466 Get:4 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 Packages [8792 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:59.614778Z\",\"hidden\":true,\"batch\":14,\"order\":36},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 0.705 Get:5 http:\\\/\\\/deb.debian.org\\\/debian bookworm-updates\\\/main amd64 Packages [6924 B]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:59.855084Z\",\"hidden\":true,\"batch\":14,\"order\":37},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 0.823 Get:6 http:\\\/\\\/deb.debian.org\\\/debian-security bookworm-security\\\/main amd64 Packages [305 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:23:59.966627Z\",\"hidden\":true,\"batch\":14,\"order\":38},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 3.814 Fetched 9358 kB in 4s (2628 kB\\\/s)\\n#6 3.814 Reading package lists...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:02.962942Z\",\"hidden\":true,\"batch\":14,\"order\":39},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:05.100705Z\",\"hidden\":true,\"batch\":14,\"order\":40},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 6.023 Reading package lists...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:05.333949Z\",\"hidden\":true,\"batch\":14,\"order\":41},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:06.822631Z\",\"hidden\":true,\"batch\":14,\"order\":42},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 7.713 Building dependency tree...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:07.011940Z\",\"hidden\":true,\"batch\":14,\"order\":43},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 8.095 Reading state information...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:07.239020Z\",\"hidden\":true,\"batch\":14,\"order\":44},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 8.613 The following additional packages will be installed:\\n#6 8.613 dirmngr git-man gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client\\n#6 8.613 gpg-wks-server gpgconf gpgsm libassuan0 libbrotli1 libcurl3-gnutls libcurl4\\n#6 8.613 liberror-perl libexpat1 libgdbm-compat4 libgdbm6 libgssapi-krb5-2\\n#6 8.613 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libksba8 libldap-2.5-0\\n#6 8.613 libncursesw6 libnghttp2-14 libnpth0 libperl5.36 libpsl5 libreadline8\\n#6 8.613 librtmp1 libsasl2-2 libsasl2-modules-db libsqlite3-0 libssh2-1 libssl3\\n#6 8.613 openssl perl perl-modules-5.36 pinentry-curses readline-common\\n#6 8.613 Suggested packages:\\n#6 8.613 dbus-user-session libpam-systemd pinentry-gnome3 tor gettext-base\\n#6 8.613 git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb\\n#6 8.613 git-cvs git-mediawiki git-svn parcimonie xloadimage scdaemon gdbm-l10n\\n#6 8.613 krb5-doc krb5-user sensible-utils perl-doc libterm-readline-gnu-perl\\n#6 8.613 | libterm-readline-perl-perl make libtap-harness-archive-perl pinentry-doc\\n#6 8.613 readline-doc\\n#6 8.613 Recommended packages:\\n#6 8.613 patch less ssh-client krb5-locales libldap-common libgpm2 publicsuffix\\n#6 8.613 libsasl2-modules netbase\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:07.758622Z\",\"hidden\":true,\"batch\":14,\"order\":45},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 9.273 The following NEW packages will be installed:\\n#6 9.273 ca-certificates curl dirmngr git git-man gnupg gnupg-l10n gnupg-utils gpg\\n#6 9.273 gpg-agent gpg-wks-client gpg-wks-server gpgconf gpgsm libassuan0 libbrotli1\\n#6 9.273 libcurl3-gnutls libcurl4 liberror-perl libexpat1 libgdbm-compat4 libgdbm6\\n#6 9.273 libgssapi-krb5-2 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0\\n#6 9.273 libksba8 libldap-2.5-0 libncursesw6 libnghttp2-14 libnpth0 libperl5.36\\n#6 9.273 libpsl5 libreadline8 librtmp1 libsasl2-2 libsasl2-modules-db libsqlite3-0\\n#6 9.273 libssh2-1 libssl3 openssl perl perl-modules-5.36 pinentry-curses\\n#6 9.273 readline-common ripgrep\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:08.424734Z\",\"hidden\":true,\"batch\":14,\"order\":46},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 9.339 0 upgraded, 47 newly installed, 0 to remove and 0 not upgraded.\\n#6 9.339 Need to get 33.4 MB of archives.\\n#6 9.339 After this operation, 136 MB of additional disk space will be used.\\n#6 9.339 Get:1 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 perl-modules-5.36 all 5.36.0-7+deb12u3 [2815 kB]\\n#6 9.430 Get:2 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libgdbm6 amd64 1.23-3 [72.2 kB]\\n#6 9.430 Get:3 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libgdbm-compat4 amd64 1.23-3 [48.2 kB]\\n#6 9.430 Get:4 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libperl5.36 amd64 5.36.0-7+deb12u3 [4196 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:08.619000Z\",\"hidden\":true,\"batch\":14,\"order\":47},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 9.550 Get:5 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 perl amd64 5.36.0-7+deb12u3 [239 kB]\\n#6 9.550 Get:6 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 readline-common all 8.2-1.3 [69.0 kB]\\n#6 9.550 Get:7 http:\\\/\\\/deb.debian.org\\\/debian-security bookworm-security\\\/main amd64 libssl3 amd64 3.0.19-1~deb12u2 [2032 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:08.703421Z\",\"hidden\":true,\"batch\":14,\"order\":48},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 9.607 Get:8 http:\\\/\\\/deb.debian.org\\\/debian-security bookworm-security\\\/main amd64 openssl amd64 3.0.19-1~deb12u2 [1435 kB]\\n#6 9.607 Get:9 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 ca-certificates all 20230311+deb12u1 [155 kB]\\n#6 9.615 Get:10 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libbrotli1 amd64 1.0.9-2+b6 [275 kB]\\n#6 9.634 Get:11 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libkrb5support0 amd64 1.20.1-2+deb12u4 [33.2 kB]\\n#6 9.634 Get:12 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libk5crypto3 amd64 1.20.1-2+deb12u4 [79.8 kB]\\n#6 9.634 Get:13 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libkeyutils1 amd64 1.6.3-2 [8808 B]\\n#6 9.634 Get:14 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libkrb5-3 amd64 1.20.1-2+deb12u4 [334 kB]\\n#6 9.651 Get:15 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libgssapi-krb5-2 amd64 1.20.1-2+deb12u4 [135 kB]\\n#6 9.651 Get:16 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libsasl2-modules-db amd64 2.1.28+dfsg-10 [20.3 kB]\\n#6 9.651 Get:17 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libsasl2-2 amd64 2.1.28+dfsg-10 [59.7 kB]\\n#6 9.656 Get:18 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libldap-2.5-0 amd64 2.5.13+dfsg-5 [183 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:08.814158Z\",\"hidden\":true,\"batch\":14,\"order\":49},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 9.668 Get:19 http:\\\/\\\/deb.debian.org\\\/debian-security bookworm-security\\\/main amd64 libnghttp2-14 amd64 1.52.0-1+deb12u3 [72.4 kB]\\n#6 9.668 Get:20 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libpsl5 amd64 0.21.2-1 [58.7 kB]\\n#6 9.668 Get:21 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 librtmp1 amd64 2.4+20151223.gitfa8646d.1-2+b2 [60.8 kB]\\n#6 9.668 Get:22 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libssh2-1 amd64 1.10.0-3+b1 [179 kB]\\n#6 9.671 Get:23 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libcurl4 amd64 7.88.1-10+deb12u14 [392 kB]\\n#6 9.703 Get:24 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 curl amd64 7.88.1-10+deb12u14 [316 kB]\\n#6 9.703 Get:25 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libassuan0 amd64 2.5.5-5 [48.5 kB]\\n#6 9.703 Get:26 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libreadline8 amd64 8.2-1.3 [166 kB]\\n#6 9.710 Get:27 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 gpgconf amd64 2.2.40-1.1+deb12u2 [565 kB]\\n#6 9.739 Get:28 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libksba8 amd64 1.6.3-2 [128 kB]\\n#6 9.764 Get:29 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libnpth0 amd64 1.6-3 [19.0 kB]\\n#6 9.764 Get:30 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 dirmngr amd64 2.2.40-1.1+deb12u2 [793 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:08.918691Z\",\"hidden\":true,\"batch\":14,\"order\":50},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 9.775 Get:31 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libcurl3-gnutls amd64 7.88.1-10+deb12u14 [386 kB]\\n#6 9.794 Get:32 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libexpat1 amd64 2.5.0-1+deb12u2 [99.9 kB]\\n#6 9.794 Get:33 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 liberror-perl all 0.17029-2 [29.0 kB]\\n#6 9.794 Get:34 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 git-man all 1:2.39.5-0+deb12u3 [2053 kB]\\n#6 9.835 Get:35 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 git amd64 1:2.39.5-0+deb12u3 [7264 kB]\\n#6 9.928 Get:36 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 gnupg-l10n all 2.2.40-1.1+deb12u2 [1093 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:09.092709Z\",\"hidden\":true,\"batch\":14,\"order\":51},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 9.948 Get:37 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 gnupg-utils amd64 2.2.40-1.1+deb12u2 [927 kB]\\n#6 9.955 Get:38 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libsqlite3-0 amd64 3.40.1-2+deb12u2 [839 kB]\\n#6 9.966 Get:39 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 gpg amd64 2.2.40-1.1+deb12u2 [950 kB]\\n#6 10.01 Get:40 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 libncursesw6 amd64 6.4-4 [134 kB]\\n#6 10.01 Get:41 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 pinentry-curses amd64 1.2.1-1 [77.4 kB]\\n#6 10.01 Get:42 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 gpg-agent amd64 2.2.40-1.1+deb12u2 [695 kB]\\n#6 10.01 Get:43 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 gpg-wks-client amd64 2.2.40-1.1+deb12u2 [541 kB]\\n#6 10.01 Get:44 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 gpg-wks-server amd64 2.2.40-1.1+deb12u2 [531 kB]\\n#6 10.04 Get:45 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 gpgsm amd64 2.2.40-1.1+deb12u2 [671 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:09.201043Z\",\"hidden\":true,\"batch\":14,\"order\":52},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 10.05 Get:46 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 gnupg all 2.2.40-1.1+deb12u2 [846 kB]\\n#6 10.07 Get:47 http:\\\/\\\/deb.debian.org\\\/debian bookworm\\\/main amd64 ripgrep amd64 13.0.0-4+b2 [1253 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:09.372986Z\",\"hidden\":true,\"batch\":14,\"order\":53},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 10.56 debconf: delaying package configuration, since apt-utils is not installed\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:09.706823Z\",\"hidden\":true,\"batch\":14,\"order\":54},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 10.59 Fetched 33.4 MB in 1s (41.8 MB\\\/s)\\n#6 10.62 Selecting previously unselected package perl-modules-5.36.\\r\\n#6 10.62 (Reading database ... \\r(Reading database ... 5%\\r(Reading database ... 10%\\r(Reading database ... 15%\\r(Reading database ... 20%\\r(Reading database ... 25%\\r(Reading database ... 30%\\r(Reading database ... 35%\\r(Reading database ... 40%\\r(Reading database ... 45%\\r(Reading database ... 50%\\r(Reading database ... 55%\\r(Reading database ... 60%\\r(Reading database ... 65%\\r(Reading database ... 70%\\r(Reading database ... 75%\\r(Reading database ... 80%\\r(Reading database ... 85%\\r(Reading database ... 90%\\r(Reading database ... 95%\\r(Reading database ... 100%\\r(Reading database ... 6096 files and directories currently installed.)\\r\\n#6 10.64 Preparing to unpack ...\\\/00-perl-modules-5.36_5.36.0-7+deb12u3_all.deb ...\\r\\n#6 10.64 Unpacking perl-modules-5.36 (5.36.0-7+deb12u3) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:09.954786Z\",\"hidden\":true,\"batch\":14,\"order\":55},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 12.07 Selecting previously unselected package libgdbm6:amd64.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:11.216774Z\",\"hidden\":true,\"batch\":14,\"order\":56},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 12.09 Preparing to unpack ...\\\/01-libgdbm6_1.23-3_amd64.deb ...\\r\\n#6 12.11 Unpacking libgdbm6:amd64 (1.23-3) ...\\r\\n#6 12.15 Selecting previously unselected package libgdbm-compat4:amd64.\\r\\n#6 12.15 Preparing to unpack ...\\\/02-libgdbm-compat4_1.23-3_amd64.deb ...\\r\\n#6 12.15 Unpacking libgdbm-compat4:amd64 (1.23-3) ...\\r\\n#6 12.24 Selecting previously unselected package libperl5.36:amd64.\\r\\n#6 12.24 Preparing to unpack ...\\\/03-libperl5.36_5.36.0-7+deb12u3_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:11.381062Z\",\"hidden\":true,\"batch\":14,\"order\":57},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 12.24 Unpacking libperl5.36:amd64 (5.36.0-7+deb12u3) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:11.561968Z\",\"hidden\":true,\"batch\":14,\"order\":58},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 13.76 Selecting previously unselected package perl.\\r\\n#6 13.76 Preparing to unpack ...\\\/04-perl_5.36.0-7+deb12u3_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:12.913812Z\",\"hidden\":true,\"batch\":14,\"order\":59},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 13.84 Unpacking perl (5.36.0-7+deb12u3) ...\\r\\n#6 13.98 Selecting previously unselected package readline-common.\\r\\n#6 13.98 Preparing to unpack ...\\\/05-readline-common_8.2-1.3_all.deb ...\\r\\n#6 13.98 Unpacking readline-common (8.2-1.3) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:13.127067Z\",\"hidden\":true,\"batch\":14,\"order\":60},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:13.277594Z\",\"hidden\":true,\"batch\":14,\"order\":61},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 14.13 Selecting previously unselected package libssl3:amd64.\\r\\n#6 14.13 Preparing to unpack ...\\\/06-libssl3_3.0.19-1~deb12u2_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:13.292463Z\",\"hidden\":true,\"batch\":14,\"order\":62},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 14.13 Unpacking libssl3:amd64 (3.0.19-1~deb12u2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:13.437807Z\",\"hidden\":true,\"batch\":14,\"order\":63},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 14.63 Selecting previously unselected package openssl.\\r\\n#6 14.63 Preparing to unpack ...\\\/07-openssl_3.0.19-1~deb12u2_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:13.771720Z\",\"hidden\":true,\"batch\":14,\"order\":64},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 14.65 Unpacking openssl (3.0.19-1~deb12u2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:13.978383Z\",\"hidden\":true,\"batch\":14,\"order\":65},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 15.02 Selecting previously unselected package ca-certificates.\\r\\n#6 15.02 Preparing to unpack ...\\\/08-ca-certificates_20230311+deb12u1_all.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:14.181042Z\",\"hidden\":true,\"batch\":14,\"order\":66},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 15.04 Unpacking ca-certificates (20230311+deb12u1) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:14.334130Z\",\"hidden\":true,\"batch\":14,\"order\":67},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 15.21 Selecting previously unselected package libbrotli1:amd64.\\r\\n#6 15.21 Preparing to unpack ...\\\/09-libbrotli1_1.0.9-2+b6_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:14.360270Z\",\"hidden\":true,\"batch\":14,\"order\":68},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 15.22 Unpacking libbrotli1:amd64 (1.0.9-2+b6) ...\\r\\n#6 15.37 Selecting previously unselected package libkrb5support0:amd64.\\r\\n#6 15.37 Preparing to unpack ...\\\/10-libkrb5support0_1.20.1-2+deb12u4_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:14.513052Z\",\"hidden\":true,\"batch\":14,\"order\":69},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 15.37 Unpacking libkrb5support0:amd64 (1.20.1-2+deb12u4) ...\\r\\n#6 15.43 Selecting previously unselected package libk5crypto3:amd64.\\r\\n#6 15.43 Preparing to unpack ...\\\/11-libk5crypto3_1.20.1-2+deb12u4_amd64.deb ...\\r\\n#6 15.44 Unpacking libk5crypto3:amd64 (1.20.1-2+deb12u4) ...\\r\\n#6 15.52 Selecting previously unselected package libkeyutils1:amd64.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:14.662577Z\",\"hidden\":true,\"batch\":14,\"order\":70},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 15.52 Preparing to unpack ...\\\/12-libkeyutils1_1.6.3-2_amd64.deb ...\\r\\n#6 15.52 Unpacking libkeyutils1:amd64 (1.6.3-2) ...\\r\\n#6 15.59 Selecting previously unselected package libkrb5-3:amd64.\\r\\n#6 15.59 Preparing to unpack ...\\\/13-libkrb5-3_1.20.1-2+deb12u4_amd64.deb ...\\r\\n#6 15.60 Unpacking libkrb5-3:amd64 (1.20.1-2+deb12u4) ...\\r\\n#6 15.72 Selecting previously unselected package libgssapi-krb5-2:amd64.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:14.866764Z\",\"hidden\":true,\"batch\":14,\"order\":71},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 15.72 Preparing to unpack ...\\\/14-libgssapi-krb5-2_1.20.1-2+deb12u4_amd64.deb ...\\r\\n#6 15.73 Unpacking libgssapi-krb5-2:amd64 (1.20.1-2+deb12u4) ...\\r\\n#6 15.81 Selecting previously unselected package libsasl2-modules-db:amd64.\\r\\n#6 15.82 Preparing to unpack ...\\\/15-libsasl2-modules-db_2.1.28+dfsg-10_amd64.deb ...\\r\\n#6 15.82 Unpacking libsasl2-modules-db:amd64 (2.1.28+dfsg-10) ...\\r\\n#6 15.91 Selecting previously unselected package libsasl2-2:amd64.\\r\\n#6 15.91 Preparing to unpack ...\\\/16-libsasl2-2_2.1.28+dfsg-10_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:15.065107Z\",\"hidden\":true,\"batch\":14,\"order\":72},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 15.92 Unpacking libsasl2-2:amd64 (2.1.28+dfsg-10) ...\\r\\n#6 16.00 Selecting previously unselected package libldap-2.5-0:amd64.\\r\\n#6 16.01 Preparing to unpack ...\\\/17-libldap-2.5-0_2.5.13+dfsg-5_amd64.deb ...\\r\\n#6 16.02 Unpacking libldap-2.5-0:amd64 (2.5.13+dfsg-5) ...\\r\\n#6 16.15 Selecting previously unselected package libnghttp2-14:amd64.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:15.310464Z\",\"hidden\":true,\"batch\":14,\"order\":73},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 16.17 Preparing to unpack ...\\\/18-libnghttp2-14_1.52.0-1+deb12u3_amd64.deb ...\\r\\n#6 16.17 Unpacking libnghttp2-14:amd64 (1.52.0-1+deb12u3) ...\\r\\n#6 16.25 Selecting previously unselected package libpsl5:amd64.\\r\\n#6 16.25 Preparing to unpack ...\\\/19-libpsl5_0.21.2-1_amd64.deb ...\\r\\n#6 16.26 Unpacking libpsl5:amd64 (0.21.2-1) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:15.421167Z\",\"hidden\":true,\"batch\":14,\"order\":74},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 16.32 Selecting previously unselected package librtmp1:amd64.\\r\\n#6 16.33 Preparing to unpack ...\\\/20-librtmp1_2.4+20151223.gitfa8646d.1-2+b2_amd64.deb ...\\r\\n#6 16.33 Unpacking librtmp1:amd64 (2.4+20151223.gitfa8646d.1-2+b2) ...\\r\\n#6 16.39 Selecting previously unselected package libssh2-1:amd64.\\r\\n#6 16.39 Preparing to unpack ...\\\/21-libssh2-1_1.10.0-3+b1_amd64.deb ...\\r\\n#6 16.39 Unpacking libssh2-1:amd64 (1.10.0-3+b1) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:15.564978Z\",\"hidden\":true,\"batch\":14,\"order\":75},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 16.49 Selecting previously unselected package libcurl4:amd64.\\r\\n#6 16.50 Preparing to unpack ...\\\/22-libcurl4_7.88.1-10+deb12u14_amd64.deb ...\\r\\n#6 16.50 Unpacking libcurl4:amd64 (7.88.1-10+deb12u14) ...\\r\\n#6 16.66 Selecting previously unselected package curl.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:15.807303Z\",\"hidden\":true,\"batch\":14,\"order\":76},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 16.66 Preparing to unpack ...\\\/23-curl_7.88.1-10+deb12u14_amd64.deb ...\\r\\n#6 16.67 Unpacking curl (7.88.1-10+deb12u14) ...\\r\\n#6 16.77 Selecting previously unselected package libassuan0:amd64.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:15.918205Z\",\"hidden\":true,\"batch\":14,\"order\":77},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 16.77 Preparing to unpack ...\\\/24-libassuan0_2.5.5-5_amd64.deb ...\\r\\n#6 16.78 Unpacking libassuan0:amd64 (2.5.5-5) ...\\r\\n#6 16.85 Selecting previously unselected package libreadline8:amd64.\\r\\n#6 16.85 Preparing to unpack ...\\\/25-libreadline8_8.2-1.3_amd64.deb ...\\r\\n#6 16.85 Unpacking libreadline8:amd64 (8.2-1.3) ...\\r\\n#6 16.95 Selecting previously unselected package gpgconf.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:16.103198Z\",\"hidden\":true,\"batch\":14,\"order\":78},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 16.96 Preparing to unpack ...\\\/26-gpgconf_2.2.40-1.1+deb12u2_amd64.deb ...\\r\\n#6 16.96 Unpacking gpgconf (2.2.40-1.1+deb12u2) ...\\r\\n#6 17.08 Selecting previously unselected package libksba8:amd64.\\r\\n#6 17.08 Preparing to unpack ...\\\/27-libksba8_1.6.3-2_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:16.225048Z\",\"hidden\":true,\"batch\":14,\"order\":79},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 17.08 Unpacking libksba8:amd64 (1.6.3-2) ...\\r\\n#6 17.17 Selecting previously unselected package libnpth0:amd64.\\r\\n#6 17.17 Preparing to unpack ...\\\/28-libnpth0_1.6-3_amd64.deb ...\\r\\n#6 17.19 Unpacking libnpth0:amd64 (1.6-3) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:16.339947Z\",\"hidden\":true,\"batch\":14,\"order\":80},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 17.23 Selecting previously unselected package dirmngr.\\r\\n#6 17.23 Preparing to unpack ...\\\/29-dirmngr_2.2.40-1.1+deb12u2_amd64.deb ...\\r\\n#6 17.29 Unpacking dirmngr (2.2.40-1.1+deb12u2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:16.436016Z\",\"hidden\":true,\"batch\":14,\"order\":81},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 17.42 Selecting previously unselected package libcurl3-gnutls:amd64.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:16.561014Z\",\"hidden\":true,\"batch\":14,\"order\":82},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 17.42 Preparing to unpack ...\\\/30-libcurl3-gnutls_7.88.1-10+deb12u14_amd64.deb ...\\r\\n#6 17.42 Unpacking libcurl3-gnutls:amd64 (7.88.1-10+deb12u14) ...\\r\\n#6 17.57 Selecting previously unselected package libexpat1:amd64.\\r\\n#6 17.57 Preparing to unpack ...\\\/31-libexpat1_2.5.0-1+deb12u2_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:16.718821Z\",\"hidden\":true,\"batch\":14,\"order\":83},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 17.59 Unpacking libexpat1:amd64 (2.5.0-1+deb12u2) ...\\r\\n#6 17.66 Selecting previously unselected package liberror-perl.\\r\\n#6 17.66 Preparing to unpack ...\\\/32-liberror-perl_0.17029-2_all.deb ...\\r\\n#6 17.66 Unpacking liberror-perl (0.17029-2) ...\\r\\n#6 17.73 Selecting previously unselected package git-man.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:16.872754Z\",\"hidden\":true,\"batch\":14,\"order\":84},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 17.74 Preparing to unpack ...\\\/33-git-man_1%3a2.39.5-0+deb12u3_all.deb ...\\r\\n#6 17.74 Unpacking git-man (1:2.39.5-0+deb12u3) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:17.037881Z\",\"hidden\":true,\"batch\":14,\"order\":85},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 17.98 Selecting previously unselected package git.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:17.126527Z\",\"hidden\":true,\"batch\":14,\"order\":86},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 18.00 Preparing to unpack ...\\\/34-git_1%3a2.39.5-0+deb12u3_amd64.deb ...\\r\\n#6 18.01 Unpacking git (1:2.39.5-0+deb12u3) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:17.305165Z\",\"hidden\":true,\"batch\":14,\"order\":87},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 19.24 Selecting previously unselected package gnupg-l10n.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:18.386882Z\",\"hidden\":true,\"batch\":14,\"order\":88},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 19.25 Preparing to unpack ...\\\/35-gnupg-l10n_2.2.40-1.1+deb12u2_all.deb ...\\r\\n#6 19.27 Unpacking gnupg-l10n (2.2.40-1.1+deb12u2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:18.572763Z\",\"hidden\":true,\"batch\":14,\"order\":89},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 19.49 Selecting previously unselected package gnupg-utils.\\r\\n#6 19.49 Preparing to unpack ...\\\/36-gnupg-utils_2.2.40-1.1+deb12u2_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:18.637689Z\",\"hidden\":true,\"batch\":14,\"order\":90},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 19.50 Unpacking gnupg-utils (2.2.40-1.1+deb12u2) ...\\r\\n#6 19.63 Selecting previously unselected package libsqlite3-0:amd64.\\r\\n#6 19.63 Preparing to unpack ...\\\/37-libsqlite3-0_3.40.1-2+deb12u2_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:18.780073Z\",\"hidden\":true,\"batch\":14,\"order\":91},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 19.64 Unpacking libsqlite3-0:amd64 (3.40.1-2+deb12u2) ...\\r\\n#6 19.78 Selecting previously unselected package gpg.\\r\\n#6 19.78 Preparing to unpack ...\\\/38-gpg_2.2.40-1.1+deb12u2_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:18.933550Z\",\"hidden\":true,\"batch\":14,\"order\":92},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 19.79 Unpacking gpg (2.2.40-1.1+deb12u2) ...\\r\\n#6 19.94 Selecting previously unselected package libncursesw6:amd64.\\r\\n#6 19.94 Preparing to unpack ...\\\/39-libncursesw6_6.4-4_amd64.deb ...\\r\\n#6 19.94 Unpacking libncursesw6:amd64 (6.4-4) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:19.084601Z\",\"hidden\":true,\"batch\":14,\"order\":93},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 20.02 Selecting previously unselected package pinentry-curses.\\r\\n#6 20.02 Preparing to unpack ...\\\/40-pinentry-curses_1.2.1-1_amd64.deb ...\\r\\n#6 20.02 Unpacking pinentry-curses (1.2.1-1) ...\\r\\n#6 20.08 Selecting previously unselected package gpg-agent.\\r\\n#6 20.08 Preparing to unpack ...\\\/41-gpg-agent_2.2.40-1.1+deb12u2_amd64.deb ...\\r\\n#6 20.08 Unpacking gpg-agent (2.2.40-1.1+deb12u2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:19.226303Z\",\"hidden\":true,\"batch\":14,\"order\":94},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 20.17 Selecting previously unselected package gpg-wks-client.\\r\\n#6 20.18 Preparing to unpack ...\\\/42-gpg-wks-client_2.2.40-1.1+deb12u2_amd64.deb ...\\r\\n#6 20.18 Unpacking gpg-wks-client (2.2.40-1.1+deb12u2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:19.322170Z\",\"hidden\":true,\"batch\":14,\"order\":95},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 20.27 Selecting previously unselected package gpg-wks-server.\\r\\n#6 20.28 Preparing to unpack ...\\\/43-gpg-wks-server_2.2.40-1.1+deb12u2_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:19.425053Z\",\"hidden\":true,\"batch\":14,\"order\":96},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 20.28 Unpacking gpg-wks-server (2.2.40-1.1+deb12u2) ...\\r\\n#6 20.39 Selecting previously unselected package gpgsm.\\r\\n#6 20.39 Preparing to unpack ...\\\/44-gpgsm_2.2.40-1.1+deb12u2_amd64.deb ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:19.530596Z\",\"hidden\":true,\"batch\":14,\"order\":97},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 20.39 Unpacking gpgsm (2.2.40-1.1+deb12u2) ...\\r\\n#6 20.48 Selecting previously unselected package gnupg.\\r\\n#6 20.49 Preparing to unpack ...\\\/45-gnupg_2.2.40-1.1+deb12u2_all.deb ...\\r\\n#6 20.49 Unpacking gnupg (2.2.40-1.1+deb12u2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:19.639684Z\",\"hidden\":true,\"batch\":14,\"order\":98},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 20.59 Selecting previously unselected package ripgrep.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:19.734200Z\",\"hidden\":true,\"batch\":14,\"order\":99},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 20.59 Preparing to unpack ...\\\/46-ripgrep_13.0.0-4+b2_amd64.deb ...\\r\\n#6 20.62 Unpacking ripgrep (13.0.0-4+b2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:19.927497Z\",\"hidden\":true,\"batch\":14,\"order\":100},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 20.96 Setting up libksba8:amd64 (1.6.3-2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:20.108815Z\",\"hidden\":true,\"batch\":14,\"order\":101},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 20.97 Setting up libexpat1:amd64 (2.5.0-1+deb12u2) ...\\r\\n#6 20.99 Setting up libkeyutils1:amd64 (1.6.3-2) ...\\r\\n#6 20.99 Setting up libpsl5:amd64 (0.21.2-1) ...\\r\\n#6 21.00 Setting up libbrotli1:amd64 (1.0.9-2+b6) ...\\r\\n#6 21.00 Setting up libsqlite3-0:amd64 (3.40.1-2+deb12u2) ...\\r\\n#6 21.01 Setting up libssl3:amd64 (3.0.19-1~deb12u2) ...\\r\\n#6 21.01 Setting up libnghttp2-14:amd64 (1.52.0-1+deb12u3) ...\\r\\n#6 21.03 Setting up libnpth0:amd64 (1.6-3) ...\\r\\n#6 21.03 Setting up libassuan0:amd64 (2.5.5-5) ...\\r\\n#6 21.06 Setting up libkrb5support0:amd64 (1.20.1-2+deb12u4) ...\\r\\n#6 21.06 Setting up libsasl2-modules-db:amd64 (2.1.28+dfsg-10) ...\\r\\n#6 21.06 Setting up perl-modules-5.36 (5.36.0-7+deb12u3) ...\\r\\n#6 21.07 Setting up gnupg-l10n (2.2.40-1.1+deb12u2) ...\\r\\n#6 21.07 Setting up librtmp1:amd64 (2.4+20151223.gitfa8646d.1-2+b2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:20.227388Z\",\"hidden\":true,\"batch\":14,\"order\":102},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 21.08 Setting up libncursesw6:amd64 (6.4-4) ...\\r\\n#6 21.09 Setting up libk5crypto3:amd64 (1.20.1-2+deb12u4) ...\\r\\n#6 21.10 Setting up libsasl2-2:amd64 (2.1.28+dfsg-10) ...\\r\\n#6 21.10 Setting up ripgrep (13.0.0-4+b2) ...\\r\\n#6 21.11 Setting up git-man (1:2.39.5-0+deb12u3) ...\\r\\n#6 21.12 Setting up libssh2-1:amd64 (1.10.0-3+b1) ...\\r\\n#6 21.12 Setting up libkrb5-3:amd64 (1.20.1-2+deb12u4) ...\\r\\n#6 21.14 Setting up openssl (3.0.19-1~deb12u2) ...\\r\\n#6 21.15 Setting up readline-common (8.2-1.3) ...\\r\\n#6 21.17 Setting up libgdbm6:amd64 (1.23-3) ...\\r\\n#6 21.17 Setting up pinentry-curses (1.2.1-1) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:20.317721Z\",\"hidden\":true,\"batch\":14,\"order\":103},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 21.20 Setting up libreadline8:amd64 (8.2-1.3) ...\\r\\n#6 21.20 Setting up libldap-2.5-0:amd64 (2.5.13+dfsg-5) ...\\r\\n#6 21.21 Setting up ca-certificates (20230311+deb12u1) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:20.529159Z\",\"hidden\":true,\"batch\":14,\"order\":104},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 21.42 debconf: unable to initialize frontend: Dialog\\r\\n#6 21.42 debconf: (TERM is not set, so the dialog frontend is not usable.)\\r\\n#6 21.42 debconf: falling back to frontend: Readline\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:20.564888Z\",\"hidden\":true,\"batch\":14,\"order\":105},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 21.43 debconf: unable to initialize frontend: Readline\\r\\n#6 21.43 debconf: (This frontend requires a controlling tty.)\\r\\n#6 21.43 debconf: falling back to frontend: Teletype\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:20.736378Z\",\"hidden\":true,\"batch\":14,\"order\":106},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 22.52 Updating certificates in \\\/etc\\\/ssl\\\/certs...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:21.663782Z\",\"hidden\":true,\"batch\":14,\"order\":107},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 23.82 142 added, 0 removed; done.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:22.965177Z\",\"hidden\":true,\"batch\":14,\"order\":108},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 23.85 Setting up libgssapi-krb5-2:amd64 (1.20.1-2+deb12u4) ...\\r\\n#6 23.87 Setting up libgdbm-compat4:amd64 (1.23-3) ...\\r\\n#6 23.87 Setting up gpgconf (2.2.40-1.1+deb12u2) ...\\r\\n#6 23.88 Setting up libcurl4:amd64 (7.88.1-10+deb12u14) ...\\r\\n#6 23.89 Setting up curl (7.88.1-10+deb12u14) ...\\r\\n#6 23.90 Setting up libperl5.36:amd64 (5.36.0-7+deb12u3) ...\\r\\n#6 23.90 Setting up gpg (2.2.40-1.1+deb12u2) ...\\r\\n#6 23.91 Setting up gnupg-utils (2.2.40-1.1+deb12u2) ...\\r\\n#6 23.92 Setting up gpg-agent (2.2.40-1.1+deb12u2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:23.070383Z\",\"hidden\":true,\"batch\":14,\"order\":109},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 24.89 Setting up gpgsm (2.2.40-1.1+deb12u2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:24.045516Z\",\"hidden\":true,\"batch\":14,\"order\":110},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 24.90 Setting up libcurl3-gnutls:amd64 (7.88.1-10+deb12u14) ...\\r\\n#6 24.90 Setting up dirmngr (2.2.40-1.1+deb12u2) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:24.198000Z\",\"hidden\":true,\"batch\":14,\"order\":111},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 25.15 Setting up perl (5.36.0-7+deb12u3) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:24.300689Z\",\"hidden\":true,\"batch\":14,\"order\":112},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 25.16 Setting up gpg-wks-server (2.2.40-1.1+deb12u2) ...\\r\\n#6 25.16 Setting up gpg-wks-client (2.2.40-1.1+deb12u2) ...\\r\\n#6 25.17 Setting up liberror-perl (0.17029-2) ...\\r\\n#6 25.19 Setting up git (1:2.39.5-0+deb12u3) ...\\r\\n#6 25.21 Setting up gnupg (2.2.40-1.1+deb12u2) ...\\r\\n#6 25.22 Processing triggers for libc-bin (2.36-9+deb12u13) ...\\r\\n#6 25.25 Processing triggers for ca-certificates (20230311+deb12u1) ...\\r\\n#6 25.25 Updating certificates in \\\/etc\\\/ssl\\\/certs...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:24.550124Z\",\"hidden\":true,\"batch\":14,\"order\":113},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 26.57 0 added, 0 removed; done.\\r\\n#6 26.57 Running hooks in \\\/etc\\\/ca-certificates\\\/update.d...\\r\\n#6 26.57 done.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:25.720007Z\",\"hidden\":true,\"batch\":14,\"order\":114},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 26.90 Hit:1 http:\\\/\\\/deb.debian.org\\\/debian bookworm InRelease\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:26.041179Z\",\"hidden\":true,\"batch\":14,\"order\":115},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 26.90 Hit:2 http:\\\/\\\/deb.debian.org\\\/debian bookworm-updates InRelease\\n#6 26.90 Hit:3 http:\\\/\\\/deb.debian.org\\\/debian-security bookworm-security InRelease\\n#6 26.92 Get:4 https:\\\/\\\/download.docker.com\\\/linux\\\/debian bookworm InRelease [46.6 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:26.221985Z\",\"hidden\":true,\"batch\":14,\"order\":116},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 27.45 Get:5 https:\\\/\\\/download.docker.com\\\/linux\\\/debian bookworm\\\/stable amd64 Packages [69.8 kB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:26.597688Z\",\"hidden\":true,\"batch\":14,\"order\":117},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 27.53 Fetched 116 kB in 1s (169 kB\\\/s)\\n#6 27.53 Reading package lists...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:26.829332Z\",\"hidden\":true,\"batch\":14,\"order\":118},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:27.643340Z\",\"hidden\":true,\"batch\":14,\"order\":119},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 28.56 Reading package lists...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:27.858296Z\",\"hidden\":true,\"batch\":14,\"order\":120},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:28.859207Z\",\"hidden\":true,\"batch\":14,\"order\":121},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 29.76 Building dependency tree...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:29.061304Z\",\"hidden\":true,\"batch\":14,\"order\":122},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 30.03 Reading state information...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:29.178149Z\",\"hidden\":true,\"batch\":14,\"order\":123},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 30.26 Suggested packages:\\n#6 30.26 docker-model-plugin\\n#6 30.26 Recommended packages:\\n#6 30.26 docker-buildx-plugin docker-compose-plugin\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:29.404309Z\",\"hidden\":true,\"batch\":14,\"order\":124},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 30.33 The following NEW packages will be installed:\\n#6 30.33 docker-ce-cli\\n#6 30.41 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\\n#6 30.41 Need to get 17.0 MB of archives.\\n#6 30.41 After this operation, 45.9 MB of additional disk space will be used.\\n#6 30.41 Get:1 https:\\\/\\\/download.docker.com\\\/linux\\\/debian bookworm\\\/stable amd64 docker-ce-cli amd64 5:29.5.0-1~debian.12~bookworm [17.0 MB]\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:29.571991Z\",\"hidden\":true,\"batch\":14,\"order\":125},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 31.16 debconf: delaying package configuration, since apt-utils is not installed\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:30.308008Z\",\"hidden\":true,\"batch\":14,\"order\":126},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 31.23 Fetched 17.0 MB in 1s (30.3 MB\\\/s)\\n#6 31.28 Selecting previously unselected package docker-ce-cli.\\r\\n#6 31.28 (Reading database ... \\r(Reading database ... 5%\\r(Reading database ... 10%\\r(Reading database ... 15%\\r(Reading database ... 20%\\r(Reading database ... 25%\\r(Reading database ... 30%\\r(Reading database ... 35%\\r(Reading database ... 40%\\r(Reading database ... 45%\\r(Reading database ... 50%\\r(Reading database ... 55%\\r(Reading database ... 60%\\r(Reading database ... 65%\\r(Reading database ... 70%\\r(Reading database ... 75%\\r(Reading database ... 80%\\r(Reading database ... 85%\\r(Reading database ... 90%\\r(Reading database ... 95%\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:30.422528Z\",\"hidden\":true,\"batch\":14,\"order\":127},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"(Reading database ... 100%\\r(Reading database ... 10141 files and directories currently installed.)\\r\\n#6 31.29 Preparing to unpack ...\\\/docker-ce-cli_5%3a29.5.0-1~debian.12~bookworm_amd64.deb ...\\r\\n#6 31.29 Unpacking docker-ce-cli (5:29.5.0-1~debian.12~bookworm) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:30.593031Z\",\"hidden\":true,\"batch\":14,\"order\":128},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 33.24 Setting up docker-ce-cli (5:29.5.0-1~debian.12~bookworm) ...\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:32.387569Z\",\"hidden\":true,\"batch\":14,\"order\":129},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#6 DONE 34.2s\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:33.390803Z\",\"hidden\":true,\"batch\":14,\"order\":130},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#7 [ 3\\\/11] WORKDIR \\\/app\\n#7 DONE 0.1s\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:33.501767Z\",\"hidden\":true,\"batch\":14,\"order\":131},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#8 [ 4\\\/11] COPY package*.json .\\\/\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:33.669922Z\",\"hidden\":true,\"batch\":14,\"order\":132},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#8 DONE 0.2s\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:33.725146Z\",\"hidden\":true,\"batch\":14,\"order\":133},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#9 [ 5\\\/11] RUN NODE_ENV=development npm ci\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:33.891670Z\",\"hidden\":true,\"batch\":14,\"order\":134},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#9 7.967 npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:41.710997Z\",\"hidden\":true,\"batch\":14,\"order\":135},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#9 9.401 npm warn deprecated glob@10.5.0: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting \",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:43.144027Z\",\"hidden\":true,\"batch\":14,\"order\":136},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#9 13.71 \\n#9 13.71 added 246 packages, and audited 247 packages in 13s\\n#9 13.71 \\n#9 13.71 51 packages are looking for funding\\n#9 13.71 run `npm fund` for details\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:47.443018Z\",\"hidden\":true,\"batch\":14,\"order\":137},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#9 13.76 \\n#9 13.76 8 vulnerabilities (5 moderate, 2 high, 1 critical)\\n#9 13.76 \\n#9 13.76 To address all issues, run:\\n#9 13.76 npm audit fix\\n#9 13.76 \\n#9 13.76 Run `npm audit` for details.\\n#9 13.79 npm notice\\n#9 13.79 npm notice New major version of npm available! 10.8.2 -> 11.14.1\\n#9 13.79 npm notice Changelog: https:\\\/\\\/github.com\\\/npm\\\/cli\\\/releases\\\/tag\\\/v11.14.1\\n#9 13.79 npm notice To update run:@11.14.1\\n#9 13.79 npm notice\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:47.682270Z\",\"hidden\":true,\"batch\":14,\"order\":138},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#9 DONE 14.4s\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:48.158443Z\",\"hidden\":true,\"batch\":14,\"order\":139},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#10 [ 6\\\/11] COPY tsconfig.json .\\\/\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:48.364862Z\",\"hidden\":true,\"batch\":14,\"order\":140},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#10 DONE 0.2s\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:48.459525Z\",\"hidden\":true,\"batch\":14,\"order\":141},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#11 [ 7\\\/11] COPY src\\\/ .\\\/src\\\/\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:48.632121Z\",\"hidden\":true,\"batch\":14,\"order\":142},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#11 DONE 0.4s\\n\\n#12 [ 8\\\/11] RUN npm run build\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:48.844625Z\",\"hidden\":true,\"batch\":14,\"order\":143},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#12 0.600 \\n#12 0.600 > vibn-agent-runner@0.1.0 build\\n#12 0.600 > tsc\\n#12 0.600\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:24:49.420956Z\",\"hidden\":true,\"batch\":14,\"order\":144},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#12 16.72 src\\\/agent-session-runner.ts(153,12): error TS2339: Property 'workspaceRoot' does not exist on type 'SessionRunOptions'.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:05.548980Z\",\"hidden\":true,\"batch\":14,\"order\":145},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"#12 ERROR: process \\\"\\\/bin\\\/sh -c npm run build\\\" did not complete successfully: exit code: 2\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:05.779793Z\",\"hidden\":true,\"batch\":14,\"order\":146},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"------\\n > [ 8\\\/11] RUN npm run build:\\n0.600 \\n0.600 > vibn-agent-runner@0.1.0 build\\n0.600 > tsc\\n0.600 \\n16.72 src\\\/agent-session-runner.ts(153,12): error TS2339: Property 'workspaceRoot' does not exist on type 'SessionRunOptions'.\\n------\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:05.842070Z\",\"hidden\":true,\"batch\":14,\"order\":147},{\"command\":\"docker exec ci59tkfkk62utdwacire8o4z bash -c 'bash \\\/artifacts\\\/build.sh'\",\"output\":\"Dockerfile:48\\n--------------------\\n 46 | COPY tsconfig.json .\\\/\\n 47 | COPY src\\\/ .\\\/src\\\/\\n 48 | >>> RUN npm run build\\n 49 | \\n 50 | # Prune dev deps after build\\n--------------------\\nERROR: failed to build: failed to solve: process \\\"\\\/bin\\\/sh -c npm run build\\\" did not complete successfully: exit code: 2\\nexit status 1\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:05.857999Z\",\"hidden\":true,\"batch\":14,\"order\":148},{\"command\":null,\"output\":\"========================================\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:05.941487Z\",\"hidden\":false,\"batch\":1,\"order\":149},{\"command\":null,\"output\":\"Deployment failed: Command execution failed (exit code 1): docker exec ci59tkfkk62utdwacire8o4z 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: 5.43kB 0.0s done\\n#1 DONE 0.1s\\n\\n#2 [internal] load metadata for docker.io\\\/library\\\/node:20-slim\\n#2 DONE 0.3s\\n\\n#3 [internal] load .dockerignore\\n#3 transferring context: 2B done\\n#3 DONE 0.1s\\n\\n#4 [internal] load build context\\n#4 DONE 0.0s\\n\\n#5 [ 1\\\/11] FROM docker.io\\\/library\\\/node:20-slim@sha256:2cf067cfed83d5ea958367df9f966191a942351a2df77d6f0193e162b5febfc0\\n#5 DONE 0.0s\\n\\n#5 [ 1\\\/11] FROM docker.io\\\/library\\\/node:20-slim@sha256:2cf067cfed83d5ea958367df9f966191a942351a2df77d6f0193e162b5febfc0\\n#5 CACHED\\n\\n#4 [internal] load build context\\n#4 transferring context: 306.13kB 0.1s done\\n#4 DONE 0.3s\\n\\n#6 [ 2\\\/11] RUN apt-get update && apt-get install -y --no-install-recommends ripgrep git ca-certificates curl gnupg && install -m 0755 -d \\\/etc\\\/apt\\\/keyrings && curl -fsSL https:\\\/\\\/download.docker.com\\\/linux\\\/debian\\\/gpg | gpg --dearmor -o \\\/etc\\\/apt\\\/keyrings\\\/docker.gpg && chmod a+r \\\/etc\\\/apt\\\/keyrings\\\/docker.gpg && echo \\\"deb [arch=$(dpkg --print-architecture) signed-by=\\\/etc\\\/apt\\\/keyrings\\\/docker.gpg] https:@1.0.0: Use your platform's native DOMException instead\\n#9 9.401 npm warn deprecated glob@10.5.0: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting \\n#9 13.71 \\n#9 13.71 added 246 packages, and audited 247 packages in 13s\\n#9 13.71 \\n#9 13.71 51 packages are looking for funding\\n#9 13.71 run `npm fund` for details\\n#9 13.76 \\n#9 13.76 8 vulnerabilities (5 moderate, 2 high, 1 critical)\\n#9 13.76 \\n#9 13.76 To address all issues, run:\\n#9 13.76 npm audit fix\\n#9 13.76 \\n#9 13.76 Run `npm audit` for details.\\n#9 13.79 npm notice\\n#9 13.79 npm notice New major version of npm available! 10.8.2 -> 11.14.1\\n#9 13.79 npm notice Changelog: https:\\\/\\\/github.com\\\/npm\\\/cli\\\/releases\\\/tag\\\/v11.14.1\\n#9 13.79 npm notice To update run:@11.14.1\\n#9 13.79 npm notice\\n#9 DONE 14.4s\\n\\n#10 [ 6\\\/11] COPY tsconfig.json .\\\/\\n#10 DONE 0.2s\\n\\n#11 [ 7\\\/11] COPY src\\\/ .\\\/src\\\/\\n#11 DONE 0.4s\\n\\n#12 [ 8\\\/11] RUN npm run build\\n#12 0.600 \\n#12 0.600 > vibn-agent-runner@0.1.0 build\\n#12 0.600 > tsc\\n#12 0.600 \\n#12 16.72 src\\\/agent-session-runner.ts(153,12): error TS2339: Property 'workspaceRoot' does not exist on type 'SessionRunOptions'.\\n#12 ERROR: process \\\"\\\/bin\\\/sh -c npm run build\\\" did not complete successfully: exit code: 2\\n------\\n > [ 8\\\/11] RUN npm run build:\\n0.600 \\n0.600 > vibn-agent-runner@0.1.0 build\\n0.600 > tsc\\n0.600 \\n16.72 src\\\/agent-session-runner.ts(153,12): error TS2339: Property 'workspaceRoot' does not exist on type 'SessionRunOptions'.\\n------\\nDockerfile:48\\n--------------------\\n 46 | COPY tsconfig.json .\\\/\\n 47 | COPY src\\\/ .\\\/src\\\/\\n 48 | >>> RUN npm run build\\n 49 | \\n 50 | # Prune dev deps after build\\n--------------------\\nERROR: failed to build: failed to solve: process \\\"\\\/bin\\\/sh -c npm run build\\\" did not complete successfully: exit code: 2\\nexit status 1\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:05.967979Z\",\"hidden\":false,\"batch\":1,\"order\":150},{\"command\":null,\"output\":\"Error type: App\\\\Exceptions\\\\DeploymentException\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:05.986183Z\",\"hidden\":true,\"batch\":1,\"order\":151},{\"command\":null,\"output\":\"Error code: 0\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:06.025730Z\",\"hidden\":true,\"batch\":1,\"order\":152},{\"command\":null,\"output\":\"Location: \\\/var\\\/www\\\/html\\\/app\\\/Traits\\\/ExecuteRemoteCommand.php:242\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:06.061592Z\",\"hidden\":true,\"batch\":1,\"order\":153},{\"command\":null,\"output\":\"Stack trace (first 5 lines):\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:06.121174Z\",\"hidden\":true,\"batch\":1,\"order\":154},{\"command\":null,\"output\":\"#0 \\\/var\\\/www\\\/html\\\/app\\\/Traits\\\/ExecuteRemoteCommand.php(106): App\\\\Jobs\\\\ApplicationDeploymentJob->executeCommandWithProcess()\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:06.194280Z\",\"hidden\":true,\"batch\":1,\"order\":155},{\"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-15T17:25:06.261156Z\",\"hidden\":true,\"batch\":1,\"order\":156},{\"command\":null,\"output\":\"#2 \\\/var\\\/www\\\/html\\\/app\\\/Traits\\\/ExecuteRemoteCommand.php(72): Illuminate\\\\Support\\\\Collection->each()\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:06.302126Z\",\"hidden\":true,\"batch\":1,\"order\":157},{\"command\":null,\"output\":\"#3 \\\/var\\\/www\\\/html\\\/app\\\/Jobs\\\/ApplicationDeploymentJob.php(3290): App\\\\Jobs\\\\ApplicationDeploymentJob->execute_remote_command()\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:06.319688Z\",\"hidden\":true,\"batch\":1,\"order\":158},{\"command\":null,\"output\":\"#4 \\\/var\\\/www\\\/html\\\/app\\\/Jobs\\\/ApplicationDeploymentJob.php(898): App\\\\Jobs\\\\ApplicationDeploymentJob->build_image()\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:06.346702Z\",\"hidden\":true,\"batch\":1,\"order\":159},{\"command\":null,\"output\":\"========================================\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:06.438874Z\",\"hidden\":false,\"batch\":1,\"order\":160},{\"command\":null,\"output\":\"Deployment failed. Removing the new version of your application.\",\"type\":\"stderr\",\"timestamp\":\"2026-05-15T17:25:06.472486Z\",\"hidden\":false,\"batch\":1,\"order\":161},{\"command\":null,\"output\":\"Gracefully shutting down build container: ci59tkfkk62utdwacire8o4z\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:25:09.843102Z\",\"hidden\":false,\"batch\":1,\"order\":162},{\"command\":\"docker stop -t 30 ci59tkfkk62utdwacire8o4z\",\"output\":\"ci59tkfkk62utdwacire8o4z\",\"type\":\"stdout\",\"timestamp\":\"2026-05-15T17:25:11.082412Z\",\"hidden\":true,\"batch\":17,\"order\":163}]","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-15T17:22:00.000000Z","updated_at":"2026-05-15T17:25:11.000000Z"} \ No newline at end of file diff --git a/suggested-fixes.md b/suggested-fixes.md deleted file mode 100644 index f021e220..00000000 --- a/suggested-fixes.md +++ /dev/null @@ -1,718 +0,0 @@ -# Vibn AI Chat Route — Fix Instructions - -This document specifies fixes to the `POST /api/chat` route and the tools it -orchestrates. The goal is to eliminate the "hallucinated tool calls" failure -mode where the assistant confidently claims to have edited files, restarted -servers, and applied design changes — but in reality wrote to a ghost path, -left a zombie process, or never invoked the tool at all. - -Each fix is self-contained, numbered, and ends with verification steps. Apply -in order. Fixes 1 and 2 are the root causes; the rest are guardrails that -only become reliable after 1 and 2 land. - ---- - -## Fix 1 — Make `dev_server_start` and `fs_*` tools project-path-aware - -### Problem - -The system prompt instructs the model to `cd &&` before every dev -server command and to write files under `/workspace//`. Nothing -enforces this. When the model forgets — or hallucinates that it -remembered — `fs_write` silently creates a file at `/workspace/src/app/page.tsx` -while the running app lives at `/workspace//src/app/page.tsx`. The -file exists; it just has zero relationship to the server. - -### Required changes - -In the tool implementations (likely in `@/lib/ai/vibn-tools` or wherever -`executeMcpTool` dispatches): - -1. **Add a `projectSlug` parameter to the tool execution context.** Plumb - `activeProject.slug` from the chat route into `executeMcpTool`. It is - already passed `activeProject?.id`; add slug alongside. - -2. **For `fs_read`, `fs_write`, `fs_edit`, `fs_glob`, `fs_grep`, `fs_list`, - `fs_delete`:** when `projectSlug` is set on the execution context, resolve - the `path` argument as follows: - - If `path` starts with `/workspace//`, accept as-is. - - If `path` is relative (no leading slash), resolve relative to - `/workspace//`. - - If `path` starts with `/workspace/` but **not** `/workspace//`, - **reject the call** with an error: - `PATH_OUTSIDE_PROJECT: refusing to write to '' because it is - outside the active project at '/workspace//'. Did you mean - '/workspace//'?` - - If `path` starts with any other absolute path, reject the same way. - -3. **For `dev_server_start`:** when `projectSlug` is set on the execution - context, automatically prepend `cd /workspace// && ` to the command - if the command does not already start with `cd /workspace/` or - `cd `. The model's prompt-level instruction to `cd` first becomes - belt-and-suspenders; the tool guarantees the working directory. - -4. **For `shell_exec`:** do NOT auto-prepend `cd` (the model legitimately runs - commands at `/workspace` root for git ops on multiple repos). Instead, - when `projectSlug` is set and the command does not contain `cd ` or - `cd /workspace/` anywhere, append a one-time warning to the tool - result: `[NOTE] You ran a shell command without cd'ing into - /workspace/. If you intended to operate on the active project, the - next call should start with 'cd && '.` Do not block — just inform. - -### Verification - -- Call `fs_write { path: '/workspace/src/app/page.tsx', content: 'x' }` from - a project-scoped thread. Expect `PATH_OUTSIDE_PROJECT` error. -- Call `fs_write { path: 'src/app/page.tsx', content: 'x' }` from a - project-scoped thread. Expect success at `/workspace//src/app/page.tsx`. -- Call `dev_server_start { command: 'npm run dev', port: 3000 }` from a - project-scoped thread. Expect the underlying exec to run from - `/workspace//`, not `/workspace/`. - ---- - -## Fix 2 — Add verification data to mutation tool results - -### Problem - -The model claims "I just rewrote `page.tsx`" with no way for itself or the -harness to verify it. The next turn, the model sees its own confident claim -in history and treats it as fact. Hallucination compounds across turns. - -### Required changes - -Edit the return shape of these tools (likely in `@/lib/ai/vibn-tools`): - -1. **`fs_write` and `fs_edit`** must return a JSON object including: - ```json - { - "ok": true, - "path": "/workspace//src/app/page.tsx", - "bytes": 4821, - "sha256": "a3f5...", - "mtime": "2026-05-16T18:42:11Z", - "preview": "first 200 chars of the new file content" - } - ``` - On failure, return `{ "ok": false, "error": "..." }` with no `sha256`. - -2. **`dev_server_start`** must, on successful launch, perform a server-side - `curl -sS -o - -w '\n[status=%{http_code}]' http://localhost:/` - with a 5s timeout, and include the result in the tool response: - ```json - { - "ok": true, - "previewUrl": "https://...", - "port": 3000, - "healthCheck": { - "status": 200, - "bodyBytes": 18432, - "bodyHash": "b7c2...", - "bodySnippet": " { - const tr = rawResults.find((r) => r.name === tc.name); - let resultSig = "(no result captured)"; - if (tr) { - try { - const parsed = typeof tr.result === "string" - ? JSON.parse(tr.result) - : tr.result; - if (parsed && typeof parsed === "object") { - if (parsed.ok === false) { - resultSig = `ERROR: ${parsed.error ?? "unknown"}`; - } else if (parsed.sha256) { - resultSig = `ok bytes=${parsed.bytes} sha=${parsed.sha256.slice(0, 8)}`; - } else if (parsed.previewUrl) { - resultSig = `ok previewUrl=${parsed.previewUrl} health=${parsed.healthCheck?.status ?? "?"}`; - } else if (parsed.uuid) { - resultSig = `ok uuid=${parsed.uuid}`; - } else { - resultSig = "ok"; - } - } - } catch { - resultSig = String(tr.result).slice(0, 80); - } - } - const argSig = JSON.stringify(tc.args ?? {}).slice(0, 100); - return ` - ${tc.name}(${argSig}) → ${resultSig}`; - }).join("\n"); - const suffix = `\n\n[tools executed this turn:\n${summary}\n]`; - msg.content = (msg.content ?? "") + suffix; - msg.toolCalls = undefined; - } - ``` - -2. This requires `_rawToolResults` to be persisted on every assistant - message — the code already does this (see the `_rawToolResults` block - near the end of the stream handler). No schema change needed. - -### Verification - -- Send a message, let the model edit a file, then send a follow-up. In - the second turn's history (log it server-side or inspect via the model's - reasoning), the assistant's previous message must end with a - `[tools executed this turn: ...]` block listing the actual tool calls - and their `sha256` / `previewUrl` / error result. -- Confirm DeepSeek and Gemini both accept the modified history without - the orphan-tool_calls error. - ---- - -## Fix 4 — Broaden loop detection to semantic patterns - -### Problem - -Current detection fingerprints `tool_name|args` and bails on 3 identical -calls. In real loops the args differ slightly: `shell_exec pkill -f next` -→ `shell_exec npm run dev` → `shell_exec curl localhost:3000` → repeat. -Different `command` strings, no fingerprint collision, loop runs to the -30-round cap. - -### Required changes - -In `/api/chat`, replace the fingerprint construction: - -```js -function fingerprintToolCall(tc) { - if (tc.name === "shell_exec") { - const cmd = String(tc.args?.command ?? "").trim(); - // First non-cd verb (pkill, npm, curl, etc.) - const verb = cmd - .split("&&") - .map((s) => s.trim()) - .find((s) => !s.startsWith("cd ")) - ?.split(/\s+/)[0] ?? "shell"; - return `shell_exec:${verb}`; - } - if (tc.name === "fs_write" || tc.name === "fs_edit" || tc.name === "fs_read") { - return `${tc.name}:${tc.args?.path ?? ""}`; - } - if (tc.name === "dev_server_start" || tc.name === "dev_server_stop" || - tc.name === "dev_server_logs" || tc.name === "dev_server_list") { - return `dev_server:${tc.args?.port ?? "?"}`; - } - if (tc.name === "apps_get" || tc.name === "apps_logs" || - tc.name === "apps_deploy" || tc.name === "apps_unstick") { - return `${tc.name}:${tc.args?.uuid ?? ""}`; - } - const argSig = JSON.stringify(tc.args ?? {}).slice(0, 80); - return `${tc.name}:${argSig}`; -} -``` - -Then in the loop body: - -```js -for (const tc of resp.toolCalls) { - toolFingerprints.push(fingerprintToolCall(tc)); -} -// Sliding window of 10 (was 8); threshold 3 stays the same -const window = toolFingerprints.slice(-10); -const counts = new Map(); -for (const fp of window) counts.set(fp, (counts.get(fp) ?? 0) + 1); -const repeated = [...counts.entries()].find(([, n]) => n >= 3); -if (repeated) { - loopBreakReason = `Repeated ${repeated[0]} ${repeated[1]}× in last 10 calls`; -} -``` - -### Verification - -- Simulate the log's failure pattern: `shell_exec pkill -f next` → - `shell_exec npm run dev` → `shell_exec curl localhost:3000` → repeat - three times. The new fingerprinter should report - `Repeated shell_exec:pkill 3× in last 10 calls` and trigger - `loopBreakReason`. -- Confirm a legitimate fan-out (e.g. 5 different `fs_write` to 5 - different files) does NOT trigger because each fingerprint is unique. - ---- - -## Fix 5 — Lower silent-stretch nudge threshold to 2 rounds OR 5 tool calls - -### Problem - -Current `roundsSinceText >= 4` is too lenient. By round 4 the user has -already typed "are you there?" — exactly what happened at messages -12–22 of the failing session. Also, `roundsSinceText` counts rounds, -not tool calls: one round with 8 parallel `fs_write` calls still reads -as a single round. - -### Required changes - -In `/api/chat`, track both round-count and tool-count since last text: - -```js -let roundsSinceText = 0; -let toolCallsSinceText = 0; -``` - -After each model response: - -```js -if (resp.text) { - // ... existing emit ... - roundsSinceText = 0; - toolCallsSinceText = 0; -} else if (resp.toolCalls.length) { - roundsSinceText++; - toolCallsSinceText += resp.toolCalls.length; -} -``` - -And update the nudge condition: - -```js -const isSilent = roundsSinceText >= 2 || toolCallsSinceText >= 5; -let extraSystem = isSilent - ? "\n\n[STATUS NUDGE] You have run " - + `${toolCallsSinceText} tool call(s) over ${roundsSinceText} round(s) ` - + "without sending the user any text. Before any more tool calls, " - + "send ONE short sentence describing what you are currently working " - + "on and why. The user is staring at silent tool pills." - : ""; -``` - -### Verification - -- Trigger a turn where the model fires 6 parallel tool calls in one round - with no text. The next round must receive the `[STATUS NUDGE]` system - injection. -- Trigger a turn where the model fires 1 tool call per round across 3 - rounds with no text. The third round must receive the nudge. - ---- - -## Fix 6 — Broaden recovery-summary trigger beyond `assistantText.length === 0` - -### Problem - -The post-loop recovery summary only fires when the model produced **no -text at all**. In the failing log, the model produced lots of confident -text — it just happened to be wrong about what its tools did. The -recovery path never engaged. - -### Required changes - -In `/api/chat`, replace the `needsRecovery` condition: - -```js -// Inspect the last 3 tool results for any explicit failure (ok: false, -// exit code != 0, http status >= 400). If the model wrote text but its -// final operations failed, we still want a forced honest summary. -function lastToolResultsHadFailure(messages, lookback = 3) { - const toolMsgs = messages.filter((m) => m.role === "tool").slice(-lookback); - for (const tm of toolMsgs) { - const raw = typeof tm.content === "string" ? tm.content : ""; - try { - const parsed = JSON.parse(raw); - if (parsed.ok === false) return true; - if (typeof parsed.exitCode === "number" && parsed.exitCode !== 0) return true; - if (parsed.healthCheck?.status && parsed.healthCheck.status >= 400) return true; - if (typeof parsed.error === "string" && parsed.error.length > 0) return true; - } catch { - // non-JSON result, skip - } - } - return false; -} - -const lastTurnHadTools = - messages.length > 0 && messages[messages.length - 1].role === "tool"; -const needsRecovery = - !aborted && - lastTurnHadTools && - (round >= MAX_TOOL_ROUNDS || - !!loopBreakReason || - assistantText.trim().length === 0 || - lastToolResultsHadFailure(messages)); -``` - -When the recovery summary fires due to `lastToolResultsHadFailure`, the -injected `[RECOVERY]` system message should also note the failure: - -```js -const failureNote = lastToolResultsHadFailure(messages) - ? "Your last tool calls returned failures or non-2xx health checks. " - + "Do NOT claim those operations succeeded. " - : ""; -const reason = loopBreakReason - ? `LOOP DETECTED: ${loopBreakReason}. Stop trying that approach. ` - : round >= MAX_TOOL_ROUNDS - ? "You hit the tool-round cap. " - : ""; -// ... use `${reason}${failureNote}` in the [RECOVERY] prompt ... -``` - -### Verification - -- Stub `dev_server_start` to return `{ ok: false, error: "EADDRINUSE" }`. - Send a request that causes the model to call it. Confirm a recovery - summary fires even if the model already wrote upbeat text. -- Confirm the recovery prompt includes the failure-note text in that case. - ---- - -## Fix 7 — Lower `MAX_TOOL_ROUNDS` from 30 to 15 - -### Problem - -30 rounds is too generous. In the failing log, none of the painful turns -that went past round 15 produced anything useful — they were just the -model trying to recover from its own hallucinations. The cap should -encourage handoff to the user, not extended thrashing. - -### Required changes - -In `/api/chat`: - -```js -const MAX_TOOL_ROUNDS = 15; -``` - -The "[WARNING] You only have N tool calls left" injection at -`MAX_TOOL_ROUNDS - round <= 3` will naturally fire at round 12, which -is still plenty of headroom for the legitimate Path-B scaffold workflows -(scaffold → install → configure → start = ~7 tool calls). - -### Verification - -- Confirm a normal "build me a Next.js app and start the dev server" - request completes in well under 15 rounds. -- Confirm the warning prompt fires at round 13 (cap minus 3 minus 1 - due to comparison being `<= 3` with round already incremented). - ---- - -## Fix 8 — Add a hard-rule prompt clause forbidding unverified mutation claims - -### Problem - -The current "Never fake success" prompt clause is vibes, not a checkable -rule. The model has no instruction telling it *how* to know whether it -faked success. - -### Required changes - -In `buildSystemPrompt`, in the "Hard rules (non-negotiable)" section, -add the following clauses: - -``` -- **Cite the tool result, don't claim from memory.** Before stating - "I edited X" or "the server is running," you must point to a tool - result from THIS turn. If you can't, say "I have not yet made that - change — running the tool now" and then run it. A claim without a - citable tool result is a hallucination. -- **Trust the `ok` field.** Tool results carry an explicit `ok: - true|false`. If `ok` is false (or absent, or `exitCode` is non-zero, - or `healthCheck.status` is >= 400), the operation FAILED. Do not - describe a failed operation as successful. Report the error - verbatim. -- **`fs_write` and `fs_edit` results carry a `sha256` and `bytes` - field on success.** When you tell the user a file was changed, - include the byte count or the first 6 chars of the sha as evidence: - "Updated `page.tsx` (4.8kb, sha=a3f5c2…)." This protects both of - you from drift. -- **`dev_server_start` results carry a `healthCheck` field on - success.** Before telling the user "the preview is ready," confirm - `healthCheck.status === 200`. If it's 502 or empty, the server - isn't actually serving — report that, don't paper over it. -``` - -### Verification - -- Inspect a sample of model outputs after this fix lands. They should - now include phrases like "Updated `page.tsx` (sha=a3f5c2…)" or - "Preview is up (health 200)" rather than bare "I just rewrote - page.tsx." -- Send a request that causes `dev_server_start` to return - `healthCheck.status: 502`. The model must NOT say "preview is - ready" — it must surface the 502. - ---- - -## Fix 9 — Make `autoExtractPlanUpdates` non-authoritative until user-confirmed - -### Problem - -`autoExtractPlanUpdates` is fire-and-forget after every turn and writes -directly into `plan.decisions`, which the next turn's system prompt then -treats as a hard "DO NOT re-litigate" instruction. A single misfire (e.g. -the model says "I logged this as our Global Design System" → extraction -agrees → next turn locks in a decision that was never user-confirmed) -poisons the project state durably. - -### Required changes - -1. In the plan schema, add a `confidence` and `source` field to each - decision/task/idea written by auto-extraction: - ```ts - { title, choice, why, confidence: "auto" | "user", source: "extracted" | "explicit" } - ``` - -2. In `autoExtractPlanUpdates`, write new items with `confidence: "auto"`, - `source: "extracted"`. - -3. In `buildSystemPrompt`, in `decisionsBlock`, split decisions into two - lists: - ``` - **Decisions confirmed by the user (do not re-litigate):** - - - - **Decisions inferred from prior chat (treat as tentative — confirm - with the user before relying on them):** - - - ``` - -4. When the user explicitly confirms (the model calls `plan_decision_log` - with the user's exact words, or the user clicks a confirm UI in the - Plan tab), upgrade `confidence` to `"user"`. - -### Verification - -- Trigger an auto-extraction that writes a decision. Confirm it appears - in the "tentative" list in the next turn's system prompt, not the - authoritative list. -- Have the user confirm the decision. Confirm `confidence` flips to - `"user"` and it moves to the authoritative list. - ---- - -## Fix 10 — Surface auto-commit result in the user reply when something shipped - -### Problem - -`commitAndPushIfDirty` runs fire-and-forget AFTER the assistant message is -persisted. The model never sees the commit SHA or success state in-context, -so it cannot honestly report "committed as abc123." It just hopes. - -### Required changes - -Move the commit step to run BEFORE the final `emit({ type: "done" })`, -and wait for its result with a tight timeout (e.g. 8s). Stream the result -to the client as a structured event: - -```js -if (activeProject?.id && activeProject?.slug && typeof activeProject?.giteaCloneUrl === "string") { - try { - await ensureProjectRepoCloned({ /* ... */ }).catch(() => null); - const firstSentence = (assistantText || "") - .split(/(?<=[.!?])\s+/)[0]?.trim()?.slice(0, 180); - const commitMessage = firstSentence || "AI checkpoint"; - - const commitPromise = commitAndPushIfDirty({ - projectId: activeProject.id, - projectSlug: activeProject.slug, - message: commitMessage, - }); - const timeoutPromise = new Promise((resolve) => - setTimeout(() => resolve({ committed: false, reason: "timeout" }), 8000) - ); - const result = await Promise.race([commitPromise, timeoutPromise]); - - if (result.committed) { - emit({ type: "commit", sha: result.sha, pushed: result.pushed }); - } else if (result.reason && result.reason !== "clean" && result.reason !== "no_repo") { - emit({ type: "commit_failed", reason: result.reason }); - } - } catch (err) { - emit({ type: "commit_failed", reason: String(err) }); - } -} -``` - -The client should render `commit` events as a small inline badge ("✓ -abc123f"). The model itself can be made aware on the NEXT turn via the -tool-history rewrite from Fix 3 — include the commit SHA in the -synthetic `[tools executed this turn: ...]` block. - -### Verification - -- Make a file edit. Confirm the chat reply ends with a visible commit SHA - badge in the UI. -- On a clean turn (no file changes), confirm no commit event fires. -- On a commit timeout (simulate by stubbing `commitAndPushIfDirty` to - hang), confirm the response still completes within ~8s with a - `commit_failed: reason=timeout` event. - ---- - -## Fix 11 — Populate and front-load `buildCodebaseSummary` in the system prompt - -### Problem - -Evidence from the failing session: the agent ran `fs_tree` 5 times and -`fs_glob "**/page.tsx"` 9+ times across one session, repeatedly -re-discovering the same file location. Path tallies across the session -showed FIVE different path conventions used for the homepage: -`getacquired-2-0/src/app/page.tsx` (70x), `src/app/page.tsx` (30x), -empty string `""` (19x), `/workspace/getacquired-2-0/src/app/page.tsx` -(10x), and `app/page.tsx` (1x). The agent never learned which one the -tools expected because the codebase summary that should have told it -was missing or empty. - -Separately, project plan context (vision, audience, brief) is technically -included in the system prompt, but the agent only called `plan_get` ONCE -in 65 turns — and only after the user explicitly asked "can you look at -the plan please to understand the market we are serving." For 16 turns -before that, the agent designed a Wall Street aesthetic for a marketplace -that was actually selling HVAC and plumbing businesses, because the -audience field was buried in a long `activeBlock` after operational -instructions. - -### Required changes - -1. **Make `buildCodebaseSummary` actually return content.** Inspect - `@/lib/ai/project-context/codebase-summary` and verify it: - - Detects the project root by finding `package.json` under - `/workspace//`. - - Reads framework signals (Next.js vs Vite, React vs Vue) from - `package.json` dependencies. - - Lists 10–20 most-important file paths grouped by purpose - (app/, components/, lib/, public/, api/, schema/). - - Returns a deterministic block under ~1500 chars, e.g.: - ``` - [CODEBASE — /workspace//] - Framework: Next.js 16.2 (App Router) + Tailwind + Sentry - Package manager: npm (lockfile: package-lock.json) - Entry points: - - src/app/page.tsx (homepage) - - src/app/layout.tsx (root layout) - - src/app/api/auth/[...nextauth]/route.ts - UI components: - - src/shared/components/layout/Navbar.tsx - - src/shared/components/layout/Footer.tsx - Styles: src/app/globals.css, tailwind.config.ts - Path convention for fs_*: paths are relative to /workspace//. - 'src/app/page.tsx' is correct. Do NOT prefix with the slug. - ``` - - On a fresh project before scaffold, return a short placeholder: - `[CODEBASE — /workspace//] Empty repo; ready for scaffold.` - -2. **Cache the codebase summary aggressively** — recompute only when - `package.json` or directory structure changes (track mtime). The - current implementation likely awaits a fresh computation on every - turn, which is both slow and a source of "summary unavailable" stub - returns when the dev container isn't fully clone-ready yet. - -3. **Front-load the audience/vision/brief.** In `buildSystemPrompt`, - move the project-identity block (name, audience, vision, brief - snippet) to the TOP of the system prompt, BEFORE the long - "How Vibn is structured / Common questions → tools / How to deploy" - section. The current ordering buries the most-decision-relevant - context after ~3000 chars of operational scaffolding. - -4. **Add an explicit "if you don't know the codebase, read this first" - reminder** at the top of the codebase block: - ``` - [CODEBASE] This block tells you the repo layout. You should NOT - need fs_tree or fs_glob "**/page.tsx" to find common files — they're - listed below. Use fs_tree only when you suspect the layout has - changed or you need to explore a subdirectory not listed here. - ``` - -### Verification - -- After this fix, replay a "modify the homepage" request against a - populated project. The agent should call `fs_read` on `src/app/page.tsx` - directly with the correct relative path, with no preceding `fs_tree` - or `fs_glob` discovery calls. -- Inspect the rendered system prompt for a fresh project-scoped thread. - Confirm the `[CODEBASE — ...]` block is present, lists at least the - app entry points, and explicitly states the path convention. -- Replay the failing session's first user message ("apply your design - skills to the home page"). The agent should reference the project's - audience (SMB / Main Street buyers) in its first response, without - needing a `plan_get` call, because the brief is now front-loaded. - ---- - -## Rollout order - -1. **Fix 11 (codebase summary populated and front-loaded)** — landed - first because it eliminates the 10+ redundant discovery calls per - turn and gives the agent ground truth about path conventions before - Fix 1's enforcement starts rejecting wrong-path writes. -2. Fix 1 (path scoping enforcement) — eliminates the ghost-file class - of bug entirely. Should land alongside Fix 11 so the agent knows - what the rules are before they start rejecting writes. -3. Fix 2 (verification data in tool results) — lands the schema the rest - of the fixes depend on. -4. Fix 3 (history rewrite with tool summaries) — only valuable AFTER Fix - 2 is producing sha256/healthCheck fields. -5. Fix 8 (hard-rule prompt clauses citing sha256/healthCheck) — depends - on Fixes 2 and 3. -6. Fix 4 (semantic loop detection) — independent, can ship anytime. -7. Fix 5 (silent-stretch nudge threshold) — independent. -8. Fix 6 (recovery on tool failure) — depends on Fix 2 for `ok` and - `healthCheck` fields. -9. Fix 7 (lower MAX_TOOL_ROUNDS to 15) — independent, ship last after - confirming legitimate workflows still fit. -10. Fix 9 (auto-extraction confidence tiers) — independent. -11. Fix 10 (sync commit with streamed result) — independent. - -After all eleven land, replay the failing session's prompts against the -new harness and confirm: -- The agent references the project's audience and brief in its first - response, without a `plan_get` call (Fix 11). -- No redundant `fs_tree` / `fs_glob "**/page.tsx"` discovery sequences - (Fix 11). -- No "ghost file" path scoping errors (Fix 1). -- No "I just rewrote page.tsx" claim without a citable sha256 (Fixes 2, - 3, 8). -- No 20+ round runaway loops (Fixes 4, 7). -- No silent stretches >2 rounds (Fix 5). -- Failed `dev_server_start` calls produce honest recovery prose, not - "preview is ready" hallucinations (Fixes 6, 8). \ No newline at end of file diff --git a/temp-spec-kit b/temp-spec-kit new file mode 160000 index 00000000..51e6a140 --- /dev/null +++ b/temp-spec-kit @@ -0,0 +1 @@ +Subproject commit 51e6a140e291f6f83b920fcf848531d17940ef9d diff --git a/vibn-agent-runner/dist/llm/gemini-chat.js b/vibn-agent-runner/dist/llm/gemini-chat.js index c41731ca..93a35257 100644 --- a/vibn-agent-runner/dist/llm/gemini-chat.js +++ b/vibn-agent-runner/dist/llm/gemini-chat.js @@ -5,6 +5,8 @@ exports.streamGeminiChat = streamGeminiChat; const genai_1 = require("@google/genai"); const GEMINI_API_KEY = process.env.GOOGLE_API_KEY || ""; const GEMINI_MODEL = process.env.VIBN_CHAT_MODEL || "gemini-3.1-pro-preview"; +// Add a clear visual log so we always know exactly which model is active in the terminal +console.log(`[GeminiChat Runner] Initialized — Model: ${GEMINI_MODEL}`); if (!GEMINI_API_KEY) { console.warn(`[GeminiChat] WARNING: GOOGLE_API_KEY is not set. Chat stream will fail with 403 Forbidden.`); } @@ -73,16 +75,13 @@ async function callGeminiChat(opts) { if (opts.systemPrompt) { config.systemInstruction = opts.systemPrompt; } - if (opts.includeThoughts) { - config.thinkingConfig = { thinkingBudgetTokens: 1024 }; - } const fns = toGeminiFunctions(opts.tools ?? []); if (fns) config.tools = fns; const response = await ai.models.generateContent({ model: GEMINI_MODEL, contents: toGeminiContents(opts.messages), - config + config, }); let text = ""; let thoughts = ""; @@ -108,7 +107,7 @@ async function callGeminiChat(opts) { text, thoughts, toolCalls, - finishReason: response.candidates?.[0]?.finishReason + finishReason: response.candidates?.[0]?.finishReason, }; } catch (error) { @@ -125,7 +124,6 @@ async function* streamGeminiChat(opts) { const config = { temperature: opts.temperature ?? 0.7, maxOutputTokens: 8192, - thinkingConfig: { thinkingBudgetTokens: 1024 }, }; if (opts.systemPrompt) { config.systemInstruction = opts.systemPrompt; @@ -136,7 +134,7 @@ async function* streamGeminiChat(opts) { const streamResult = await ai.models.generateContentStream({ model: GEMINI_MODEL, contents: toGeminiContents(opts.messages), - config + config, }); for await (const chunk of streamResult) { const parts = chunk.candidates?.[0]?.content?.parts ?? []; diff --git a/vibn-agent-runner/dist/prompts/coder.js b/vibn-agent-runner/dist/prompts/coder.js index 486dda56..b7507892 100644 --- a/vibn-agent-runner/dist/prompts/coder.js +++ b/vibn-agent-runner/dist/prompts/coder.js @@ -18,6 +18,7 @@ Since you are running autonomously, you must take action immediately. A turn ends when you have fully completed the task AND shipped the code. - **For build/edit tasks:** The natural stopping point is starting the dev server via \`dev_server_start\`, verifying it works via \`browser_console\`, and calling the \`ship\` tool to deploy to production. +- **CRITICAL:** When you successfully finish a task from the Execution Plan, you MUST call \`plan_task_complete { taskId }\` to check it off the list before moving to the next task. - If you run into a fatal error that you cannot fix after two attempts, write a brief summary of the blocker and stop. # Hard rules — non-negotiable diff --git a/vibn-agent-runner/dist/tools/vibn-tools.js b/vibn-agent-runner/dist/tools/vibn-tools.js index 32cda979..c7198346 100644 --- a/vibn-agent-runner/dist/tools/vibn-tools.js +++ b/vibn-agent-runner/dist/tools/vibn-tools.js @@ -91,6 +91,34 @@ exports.VIBN_TOOL_DEFINITIONS = [ required: ["projectId"], }, }, + // ── Email ─────────────────────────────────────────────────────────────── + { + name: "email_send", + description: "Send an email to a user. Use this to notify users of important events, send reports, or distribute content. You can optionally design the email using MJML syntax for beautifully responsive emails.", + parameters: { + type: "OBJECT", + properties: { + projectId: { + type: "STRING", + description: "The Vibn project ID sending the email.", + }, + to: { type: "STRING", description: "The recipient's email address." }, + subject: { + type: "STRING", + description: "The subject line of the email.", + }, + text: { + type: "STRING", + description: "The plain-text fallback body of the email.", + }, + mjml: { + type: "STRING", + description: "Optional MJML markup (...). If provided, it will be automatically compiled to HTML. Do NOT provide raw HTML, only use valid MJML syntax.", + }, + }, + required: ["projectId", "to", "subject", "text"], + }, + }, // ── Market Research & GTM ─────────────────────────────────────────────── { name: "market_categories_suggest", @@ -1485,26 +1513,33 @@ After this returns, ALWAYS call apps_deploy { uuid } to regenerate the live Trae }, }, { - name: "plan_decision_log", - description: "Log a decision the user has made. Call this PROACTIVELY whenever a non-trivial choice gets settled in conversation (database engine, auth approach, framework, pricing model, copy, branding…) — so it shows up in the Plan tab and you stop re-asking it next session. Don't ask permission; log it and move on.", + name: "plan_document_update", + description: "Overwrite the content of one of the Blueprint documents in the Plan tab. These documents define the specifications for the product. ALWAYS use this instead of `fs_write` when a user asks you to update the PRD, Spec, or Architecture plan.", parameters: { type: "OBJECT", properties: { - projectId: { type: "STRING", description: "The Vibn project ID." }, - title: { + projectId: { type: "STRING" }, + docId: { type: "STRING", - description: 'Short topic of the decision (e.g. "Database engine", "Auth provider").', + description: "The specific document to update.", + enum: [ + "stories", + "acceptance", + "success", + "ui_design", + "tech_context", + "data_model", + "file_structure", + "tasks", + "checklist", + ], }, - choice: { + content: { type: "STRING", - description: 'What was chosen (e.g. "Postgres", "Stripe Checkout").', - }, - why: { - type: "STRING", - description: "Optional 1-2 sentence reasoning. Strongly recommended.", + description: "The full markdown content for the document. This will completely overwrite the existing document.", }, }, - required: ["projectId", "title", "choice"], + required: ["projectId", "docId", "content"], }, }, { diff --git a/vibn-agent-runner/patch_delegate_prompt.js b/vibn-agent-runner/patch_delegate_prompt.js new file mode 100644 index 00000000..76960c0f --- /dev/null +++ b/vibn-agent-runner/patch_delegate_prompt.js @@ -0,0 +1,16 @@ +const fs = require('fs'); +const file = 'src/prompts/coder.ts'; +let code = fs.readFileSync(file, 'utf8'); + +const oldStopping = `A turn ends when you have fully completed the task AND shipped the code. +- **For build/edit tasks:** The natural stopping point is starting the dev server via \\\`dev_server_start\\\`, verifying it works via \\\`browser_console\\\`, and calling the \\\`ship\\\` tool to deploy to production. +- If you run into a fatal error that you cannot fix after two attempts, write a brief summary of the blocker and stop.`; + +const newStopping = `A turn ends when you have fully completed the task AND shipped the code. +- **For build/edit tasks:** The natural stopping point is starting the dev server via \\\`dev_server_start\\\`, verifying it works via \\\`browser_console\\\`, and calling the \\\`ship\\\` tool to deploy to production. +- **CRITICAL:** When you successfully finish a task from the Execution Plan, you MUST call \\\`plan_task_complete { taskId }\\\` to check it off the list before moving to the next task. +- If you run into a fatal error that you cannot fix after two attempts, write a brief summary of the blocker and stop.`; + +code = code.replace(oldStopping, newStopping); +fs.writeFileSync(file, code); +console.log("Patched Delegate Prompt to enforce plan_task_complete"); diff --git a/vibn-agent-runner/src/llm/gemini-chat.ts b/vibn-agent-runner/src/llm/gemini-chat.ts index 40c58081..2077a802 100644 --- a/vibn-agent-runner/src/llm/gemini-chat.ts +++ b/vibn-agent-runner/src/llm/gemini-chat.ts @@ -1,10 +1,15 @@ -import { GoogleGenAI } from '@google/genai'; +import { GoogleGenAI } from "@google/genai"; const GEMINI_API_KEY = process.env.GOOGLE_API_KEY || ""; const GEMINI_MODEL = process.env.VIBN_CHAT_MODEL || "gemini-3.1-pro-preview"; +// Add a clear visual log so we always know exactly which model is active in the terminal +console.log(`[GeminiChat Runner] Initialized — Model: ${GEMINI_MODEL}`); + if (!GEMINI_API_KEY) { - console.warn(`[GeminiChat] WARNING: GOOGLE_API_KEY is not set. Chat stream will fail with 403 Forbidden.`); + console.warn( + `[GeminiChat] WARNING: GOOGLE_API_KEY is not set. Chat stream will fail with 403 Forbidden.`, + ); } const ai = new GoogleGenAI({ apiKey: GEMINI_API_KEY }); @@ -108,12 +113,10 @@ export async function callGeminiChat(opts: { temperature: opts.temperature ?? 0.7, maxOutputTokens: 8192, }; - - if (opts.systemPrompt) { - config.systemInstruction = opts.systemPrompt; - } - + if (opts.systemPrompt) { + config.systemInstruction = opts.systemPrompt; + } const fns = toGeminiFunctions(opts.tools ?? []); if (fns) config.tools = fns; @@ -121,13 +124,13 @@ export async function callGeminiChat(opts: { const response = await ai.models.generateContent({ model: GEMINI_MODEL, contents: toGeminiContents(opts.messages), - config + config, }); let text = ""; let thoughts = ""; const toolCalls: ToolCall[] = []; - + const parts = response.candidates?.[0]?.content?.parts ?? []; for (const part of parts) { @@ -139,19 +142,18 @@ export async function callGeminiChat(opts: { toolCalls.push({ id: `tc-${Date.now()}-${Math.random().toString(36).slice(2)}`, name: part.functionCall.name || "", - args: part.functionCall.args as Record ?? {}, + args: (part.functionCall.args as Record) ?? {}, thoughtSignature: (part as any).thoughtSignature, }); } } - return { - text, - thoughts, - toolCalls, - finishReason: response.candidates?.[0]?.finishReason + return { + text, + thoughts, + toolCalls, + finishReason: response.candidates?.[0]?.finishReason, }; - } catch (error) { return { text: "", @@ -172,11 +174,10 @@ export async function* streamGeminiChat(opts: { const config: any = { temperature: opts.temperature ?? 0.7, maxOutputTokens: 8192, - }; if (opts.systemPrompt) { - config.systemInstruction = opts.systemPrompt; + config.systemInstruction = opts.systemPrompt; } const fns = toGeminiFunctions(opts.tools ?? []); @@ -185,7 +186,7 @@ export async function* streamGeminiChat(opts: { const streamResult = await ai.models.generateContentStream({ model: GEMINI_MODEL, contents: toGeminiContents(opts.messages), - config + config, }); for await (const chunk of streamResult) { @@ -200,7 +201,6 @@ export async function* streamGeminiChat(opts: { } yield { type: "done" }; - } catch (error) { yield { type: "error", diff --git a/vibn-agent-runner/src/prompts/coder.ts b/vibn-agent-runner/src/prompts/coder.ts index 6eefab34..657b77c9 100644 --- a/vibn-agent-runner/src/prompts/coder.ts +++ b/vibn-agent-runner/src/prompts/coder.ts @@ -18,6 +18,7 @@ Since you are running autonomously, you must take action immediately. A turn ends when you have fully completed the task AND shipped the code. - **For build/edit tasks:** The natural stopping point is starting the dev server via \`dev_server_start\`, verifying it works via \`browser_console\`, and calling the \`ship\` tool to deploy to production. +- **CRITICAL:** When you successfully finish a task from the Execution Plan, you MUST call \`plan_task_complete { taskId }\` to check it off the list before moving to the next task. - If you run into a fatal error that you cannot fix after two attempts, write a brief summary of the blocker and stop. # Hard rules — non-negotiable diff --git a/vibn-agent-runner/src/tools/vibn-tools.ts b/vibn-agent-runner/src/tools/vibn-tools.ts index 6ab955df..b03e6144 100644 --- a/vibn-agent-runner/src/tools/vibn-tools.ts +++ b/vibn-agent-runner/src/tools/vibn-tools.ts @@ -113,6 +113,37 @@ export const VIBN_TOOL_DEFINITIONS: ToolDefinition[] = [ }, }, + // ── Email ─────────────────────────────────────────────────────────────── + { + name: "email_send", + description: + "Send an email to a user. Use this to notify users of important events, send reports, or distribute content. You can optionally design the email using MJML syntax for beautifully responsive emails.", + parameters: { + type: "OBJECT", + properties: { + projectId: { + type: "STRING", + description: "The Vibn project ID sending the email.", + }, + to: { type: "STRING", description: "The recipient's email address." }, + subject: { + type: "STRING", + description: "The subject line of the email.", + }, + text: { + type: "STRING", + description: "The plain-text fallback body of the email.", + }, + mjml: { + type: "STRING", + description: + "Optional MJML markup (...). If provided, it will be automatically compiled to HTML. Do NOT provide raw HTML, only use valid MJML syntax.", + }, + }, + required: ["projectId", "to", "subject", "text"], + }, + }, + // ── Market Research & GTM ─────────────────────────────────────────────── { @@ -1675,28 +1706,35 @@ After this returns, ALWAYS call apps_deploy { uuid } to regenerate the live Trae }, }, { - name: "plan_decision_log", + name: "plan_document_update", description: - "Log a decision the user has made. Call this PROACTIVELY whenever a non-trivial choice gets settled in conversation (database engine, auth approach, framework, pricing model, copy, branding…) — so it shows up in the Plan tab and you stop re-asking it next session. Don't ask permission; log it and move on.", + "Overwrite the content of one of the Blueprint documents in the Plan tab. These documents define the specifications for the product. ALWAYS use this instead of `fs_write` when a user asks you to update the PRD, Spec, or Architecture plan.", parameters: { type: "OBJECT", properties: { - projectId: { type: "STRING", description: "The Vibn project ID." }, - title: { + projectId: { type: "STRING" }, + docId: { + type: "STRING", + description: "The specific document to update.", + enum: [ + "stories", + "acceptance", + "success", + "ui_design", + "tech_context", + "data_model", + "file_structure", + "tasks", + "checklist", + ], + }, + content: { type: "STRING", description: - 'Short topic of the decision (e.g. "Database engine", "Auth provider").', - }, - choice: { - type: "STRING", - description: 'What was chosen (e.g. "Postgres", "Stripe Checkout").', - }, - why: { - type: "STRING", - description: "Optional 1-2 sentence reasoning. Strongly recommended.", + "The full markdown content for the document. This will completely overwrite the existing document.", }, }, - required: ["projectId", "title", "choice"], + required: ["projectId", "docId", "content"], }, }, { diff --git a/vibn-frontend/app/[workspace]/project/[projectId]/(home)/layout.tsx b/vibn-frontend/app/[workspace]/project/[projectId]/(home)/layout.tsx index 9a566fd9..0f19b631 100644 --- a/vibn-frontend/app/[workspace]/project/[projectId]/(home)/layout.tsx +++ b/vibn-frontend/app/[workspace]/project/[projectId]/(home)/layout.tsx @@ -6,6 +6,7 @@ import { ReactNode } from "react"; import { Toaster } from "sonner"; import { ChatPanel } from "@/components/vibn-chat/chat-panel"; +import { ProjectStreamHandler } from "@/components/project/project-stream-handler"; export default async function ProjectShell({ children, @@ -14,10 +15,11 @@ export default async function ProjectShell({ children: ReactNode; params: Promise<{ workspace: string; projectId: string }>; }) { - const { workspace } = await params; + const { workspace, projectId } = await params; return ( <> +
diff --git a/vibn-frontend/app/[workspace]/project/[projectId]/(home)/plan/page-v1.tsx b/vibn-frontend/app/[workspace]/project/[projectId]/(home)/plan/page-v1.tsx deleted file mode 100644 index d54fa053..00000000 --- a/vibn-frontend/app/[workspace]/project/[projectId]/(home)/plan/page-v1.tsx +++ /dev/null @@ -1,2441 +0,0 @@ -"use client"; - -/** - * Plan tab — the home of the project's thinking. - * - * Sub-areas (always visible, even when empty, so a founder learns the - * model on a brand-new project): - * 1. Vision — the elevator pitch + audience - * 2. Ideas — the "park-it" bin for raw thoughts - * 3. Tasks — what needs to happen next (open / done) - * 4. Decisions — log of "we chose X over Y because Z" - * - * Same UI rhythm as Infrastructure: section tiles in a horizontal bar - * (with counts), full-width detail panel below. Everything writes through - * `/api/projects/[projectId]/plan` and persists under - * `fs_projects.data.plan`. The AI chat reads the plan as context so - * decisions don't get re-litigated. - */ - -import { useCallback, useEffect, useState } from "react"; -import { useParams } from "next/navigation"; -import ReactMarkdown from "react-markdown"; -import remarkGfm from "remark-gfm"; -import { - Loader2, - AlertCircle, - MessageSquare, - ListTodo, - GitBranch, - Target, - Plus, - Trash2, - Check, - RotateCcw, - Pencil, - X, - Eye, - FileText, -} from "lucide-react"; - -interface Idea { - id: string; - text: string; - createdAt: string; -} -type TaskStatus = "open" | "in_progress" | "review" | "done" | "blocked"; -interface Task { - id: string; - title: string; - description?: string; - status: TaskStatus; - agent?: { - runId: string; - startedAt: string; - finishedAt?: string; - status: "queued" | "running" | "succeeded" | "failed"; - } | null; - createdAt: string; - startedAt?: string; - doneAt?: string; - // Legacy single-line tasks (pre-markdown migration) carry text instead of title. - text?: string; -} -interface Decision { - id: string; - title: string; - choice: string; - why?: string; - createdAt: string; -} -interface Plan { - vision?: string; - brief?: string; - brief_filename?: string; // stored as `vision` server-side, surfaced as "Objective" in the UI - ideas: Idea[]; // legacy bin — no longer surfaced; kept on the model for backward compat - tasks: Task[]; - decisions: Decision[]; -} - -interface Session { - id: string; - title: string; - summary: string | null; - messageCount: number; - updatedAt: string; - createdAt: string; -} - -type Section = "objective" | "sessions" | "tasks" | "decisions"; - -interface SectionDef { - key: Section; - label: string; - icon: React.ComponentType<{ size?: number; style?: React.CSSProperties }>; - blurb: string; -} - -const SECTIONS: SectionDef[] = [ - { - key: "objective", - label: "Objective", - icon: Target, - blurb: "What you're building, who it's for, and why.", - }, - { - key: "tasks", - label: "Features", - icon: ListTodo, - blurb: "High-level capabilities to be delegated to the AI.", - }, - { - key: "decisions", - label: "Decisions", - icon: GitBranch, - blurb: "Choices already made — so we stop re-litigating them.", - }, - { - key: "sessions", - label: "Sessions", - icon: MessageSquare, - blurb: "Past chat sessions for this project.", - }, -]; - -// ────────────────────────────────────────────────── -// Page -// ────────────────────────────────────────────────── - -export default function PlanTab() { - const params = useParams(); - const projectId = params.projectId as string; - const workspace = params.workspace as string; - - const [plan, setPlan] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const [active, setActive] = useState
("objective"); - const [sessionCount, setSessionCount] = useState(0); - - const load = useCallback(async () => { - try { - const res = await fetch(`/api/projects/${projectId}/plan`, { - credentials: "include", - }); - if (!res.ok) throw new Error(`HTTP ${res.status}`); - const data = await res.json(); - setPlan(data.plan); - setError(null); - } catch (e: any) { - setError(e?.message ?? "Failed to load plan"); - } finally { - setLoading(false); - } - }, [projectId]); - - useEffect(() => { - load(); - // Only poll the plan API periodically if we aren't currently editing or saving - // something, otherwise we risk overwriting user input or causing layout thrashing. - const intervalId = setInterval(load, 15000); // Backed off from 5s to 15s to reduce API spam - return () => clearInterval(intervalId); - }, [load]); - - if (loading && !plan) { - return ( -
-
- Loading plan… -
-
- ); - } - if (error || !plan) { - return ( -
-
- - {error ?? "No plan data"} -
-
- ); - } - - const counts: Record = { - objective: plan.vision ? 1 : 0, - sessions: sessionCount, - tasks: plan.tasks.filter((t) => t.status !== "done").length, - decisions: plan.decisions.length, - }; - - return ( -
- -
- - -
-
- {active === "objective" && ( - - )} - {active === "sessions" && ( - - )} - {active === "tasks" && ( - - )} - {active === "decisions" && ( - - )} -
-
-
-
- ); -} - -// ────────────────────────────────────────────────── -// Left rail tile -// ────────────────────────────────────────────────── - -function SectionTile({ - def, - count, - active, - onClick, -}: { - def: SectionDef; - count: number; - active: boolean; - onClick: () => void; -}) { - const Icon = def.icon; - return ( - - ); -} - -// ────────────────────────────────────────────────── -// Vision -// ────────────────────────────────────────────────── - -function BriefPanel({ - plan, - projectId, - onChange, -}: { - plan: Plan; - projectId: string; - onChange: (p: Plan) => void; -}) { - const [draft, setDraft] = useState(plan.brief ?? ""); - const [saving, setSaving] = useState(false); - const [editing, setEditing] = useState(!plan.brief); - const [editorView, setEditorView] = useState<"write" | "preview">("write"); - const [dirty, setDirty] = useState(false); - - useEffect(() => { - setDraft(plan.brief ?? ""); - setDirty(false); - }, [plan.brief]); - - const handleSave = async () => { - setSaving(true); - try { - const res = await fetch(`/api/projects/${projectId}/plan`, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ kind: "brief", text: draft }), - }); - if (res.ok) { - onChange({ ...plan, brief: draft }); - setDirty(false); - setEditing(false); - } - } finally { - setSaving(false); - } - }; - - const handleFileUpload = async (e: React.ChangeEvent) => { - const file = e.target.files?.[0]; - if (!file) return; - - // For now we just read text files (txt, md, csv). - // In the future you can send PDFs to an extraction API. - const reader = new FileReader(); - reader.onload = async (event) => { - const content = event.target?.result as string; - setDraft(content); - setDirty(true); - setEditing(true); - }; - reader.readAsText(file); - }; - - if (!editing && plan.brief) { - return ( -
- -
- ( -

- ), - h1: ({ node, ...props }) => ( -

- ), - h2: ({ node, ...props }) => ( -

- ), - h3: ({ node, ...props }) => ( -

- ), - ul: ({ node, ...props }) => ( -
    - ), - ol: ({ node, ...props }) => ( -
      - ), - li: ({ node, ...props }) => ( -
    1. - ), - }} - > - {plan.brief} - -

-
- ); - } - - return ( -
- {!plan.brief && ( -
-

- No project brief uploaded. You can paste your PRD, requirements - document, or notes below. The AI will read this to understand the - full scope of your project. -

-
- - -
-
- )} - - {editing && ( -
-
- - -
-
- - {editorView === "write" ? ( -