diff --git a/.flox/env/manifest.toml b/.flox/env/manifest.toml index 4b9f75e..d08ad2e 100644 --- a/.flox/env/manifest.toml +++ b/.flox/env/manifest.toml @@ -5,24 +5,24 @@ go.pkg-path = "go" go.version = "1.25" golangci-lint.pkg-path = "golangci-lint" -golangci-lint.version = "2.5.0" +golangci-lint.version = "^2.6.0" golangci-lint.pkg-group = "common" go-task.pkg-path = "go-task" -go-task.version = "3.45.4" +go-task.version = "^3.45.4" go-task.pkg-group = "common" git.pkg-path = "git" -git.version = "2.51.0" +git.version = "^2.51.0" git.pkg-group = "common" docker.pkg-path = "docker" -docker.version = "28.4.0" +docker.version = "^28.5.1" docker.pkg-group = "common" claude-code.pkg-path = "claude-code" +claude-code.version = "^2.0.37" claude-code.pkg-group = "common" -claude-code.version = "2.0.15" [hook] on-activate = ''' diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 7bef932..dff1bdb 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -1,4 +1,4 @@ -# Code generated by ADL CLI v0.23.11. DO NOT EDIT. +# Code generated by ADL CLI v0.26.0. DO NOT EDIT. # This file was automatically generated from an ADL (Agent Definition Language) specification. # Manual changes to this file may be overwritten during regeneration. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dea859a..17919d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -# Code generated by ADL CLI v0.23.11. DO NOT EDIT. +# Code generated by ADL CLI v0.26.0. DO NOT EDIT. # This file was automatically generated from an ADL (Agent Definition Language) specification. # Manual changes to this file may be overwritten during regeneration. diff --git a/.infer/.gitignore b/.infer/.gitignore new file mode 100644 index 0000000..e10cda0 --- /dev/null +++ b/.infer/.gitignore @@ -0,0 +1,6 @@ +# Ignore log files and history files +logs/*.log +history +chat_export_* +conversations.db +bin/ diff --git a/.infer/config.yaml b/.infer/config.yaml new file mode 100644 index 0000000..d6bab8e --- /dev/null +++ b/.infer/config.yaml @@ -0,0 +1,327 @@ +gateway: + url: http://localhost:8080 + api_key: "" + timeout: 200 + oci: ghcr.io/inference-gateway/inference-gateway:latest + run: true + docker: true + exclude_models: + - ollama_cloud/cogito-2.1:671b + - ollama_cloud/kimi-k2:1t + - ollama_cloud/kimi-k2-thinking + - ollama_cloud/deepseek-v3.1:671b +client: + timeout: 200 + retry: + enabled: true + max_attempts: 3 + initial_backoff_sec: 5 + max_backoff_sec: 60 + backoff_multiplier: 2 + retryable_status_codes: + - 400 + - 408 + - 429 + - 500 + - 502 + - 503 + - 504 +logging: + debug: false + dir: "" +tools: + enabled: true + sandbox: + directories: + - . + - /tmp + protected_paths: + - .infer/ + - .git/ + - '*.env' + bash: + enabled: true + whitelist: + commands: + - ls + - pwd + - tree + - wc + - sort + - uniq + - head + - tail + - task + - make + - find + patterns: + - ^git status$ + - ^git branch( --show-current)?( -[alrvd])?$ + - ^git log + - ^git diff + - ^git remote( -v)?$ + - ^git show + read: + enabled: true + require_approval: false + write: + enabled: true + require_approval: true + edit: + enabled: true + require_approval: true + delete: + enabled: true + require_approval: true + grep: + enabled: true + backend: auto + require_approval: false + tree: + enabled: true + require_approval: false + web_fetch: + enabled: true + whitelisted_domains: + - golang.org + safety: + max_size: 8192 + timeout: 30 + allow_redirect: true + cache: + enabled: true + ttl: 3600 + max_size: 52428800 + web_search: + enabled: true + default_engine: duckduckgo + max_results: 10 + engines: + - duckduckgo + - google + timeout: 10 + github: + enabled: true + token: '%GITHUB_TOKEN%' + base_url: https://api.github.com + owner: inference-gateway + safety: + max_size: 1048576 + timeout: 30 + todo_write: + enabled: true + require_approval: false + safety: + require_approval: true +export: + output_dir: .infer + summary_model: "" +agent: + model: "" + system_prompt: | + Autonomous software engineering agent. Execute tasks iteratively until completion. + + IMPORTANT: You NEVER push to main or master or to the current branch - instead you create a branch and push to a branch. + IMPORTANT: You ALWAYS prefer to search for specific matches in a file rather than reading it all - prefer to use Grep tool over Read tool for efficiency. + IMPORTANT: You ALWAYS prefer to see AGENTS.md before README.md files. + IMPORTANT: When reading project documentation, prefer AGENTS.md if available, otherwise fallback to README.md - start by Using Grep tool and read all the headings followed by '^##' - found the section you were looking for? great - use Read tool. You didn't find anything? continue to see '^###' + + RULES: + - Security: Defensive only (analysis, detection, docs) + - Style: no emojis/comments unless asked, use conventional commits + - Code: Follow existing patterns, check deps, no secrets + - Tasks: Use TodoWrite, mark progress immediately + - Chat exports: Read only "## Summary" to "---" section + - Tools: ALWAYS use parallel execution when possible - batch multiple tool calls in a single response to improve efficiency + - Tools: Prefer Grep for search, Read for specific files + + PARALLEL TOOL EXECUTION: + - When you need to perform multiple operations, make ALL tool calls in a single response + - Examples: Read multiple files, search multiple patterns, execute multiple commands + - The system supports up to 5 concurrent tool executions by default + - This reduces back-and-forth communication and significantly improves performance + + WORKFLOW: + When asked to implement features or fix issues: + 1. Plan with TodoWrite + 2. Search codebase to understand context + 3. Implement solution + 4. Run tests with: task test + 5. Run lint/format with: task fmt and task lint + 6. Commit changes (only if explicitly asked) + 7. Create a pull request (only if explicitly asked) + + EXAMPLE: + Can you create a pull request with the changes? + I will checkout to a new branch + Bash(git checkout -b feat/my-new-feature) + Now I will modify the files + Read|Edit|Grep etc + Bash(git add ) + Bash(git commit -m ) + Now I will push the changes + Bash(git push origin ) + Now I'll create a pull request + Github(...) + system_prompt_plan: |- + You are an AI planning assistant in PLAN MODE. Your role is to analyze user requests and create detailed, actionable plans WITHOUT executing them. + + CAPABILITIES IN PLAN MODE: + - Read, Grep, and Tree tools ONLY for gathering information + - Analyze code structure and dependencies + - Break down complex tasks into clear steps + - Explain reasoning and approaches + - Identify potential challenges and solutions + + RESTRICTIONS IN PLAN MODE: + - DO NOT execute Write, Edit, Delete, Bash, or modification tools + - DO NOT make any changes to files or system + - DO NOT attempt to implement the plan + - Focus solely on planning and explanation + + PLANNING WORKFLOW: + 1. Use Read/Grep/Tree to understand the codebase + 2. Analyze the user's request thoroughly + 3. Break down into logical, sequential steps + 4. Explain your reasoning for each step + 5. Identify files/components that need changes + 6. Suggest testing and validation approaches + 7. Present the complete plan to the user + + OUTPUT FORMAT: + Structure your plan clearly with: + - Overview: What needs to be done and why + - Steps: Numbered, actionable steps with explanations + - Files: List of files that would be modified + - Testing: How to verify the changes + - Considerations: Potential issues or alternatives + system_reminders: + enabled: true + interval: 4 + reminder_text: |- + + This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware. If you are working on tasks that would benefit from a todo list please use the TodoWrite tool to create one. If not, please feel free to ignore. Again do not mention this message to the user. + + verbose_tools: false + max_turns: 50 + max_tokens: 8192 + max_concurrent_tools: 5 + optimization: + enabled: true + model: "" + min_messages: 50 + buffer_size: 2 +git: + commit_message: + model: "" + system_prompt: |- + Generate a concise git commit message following conventional commit format. + + REQUIREMENTS: + - MUST use format: "type: Brief description" + - MUST be under 50 characters total + - MUST use imperative mood (e.g., "Add", "Fix", "Update") + - Types: feat, fix, docs, style, refactor, test, chore + + EXAMPLES: + - "feat: Add git shortcut with AI commits" + - "fix: Resolve build error in container" + - "docs: Update README installation guide" + - "refactor: Simplify error handling" + + Respond with ONLY the commit message, no quotes or explanation. +scm: + pr_create: + prompt: "" + base_branch: main + branch_prefix: "" + model: "" + cleanup: + return_to_base: true + delete_local_branch: false +storage: + enabled: true + type: sqlite + sqlite: + path: .infer/conversations.db + postgres: + host: localhost + port: 5432 + database: infer_conversations + username: "" + password: "" + ssl_mode: prefer + redis: + host: localhost + port: 6379 + password: "" + db: 0 +conversation: + title_generation: + enabled: true + model: "" + system_prompt: |- + Generate a concise conversation title based on the messages provided. + + REQUIREMENTS: + - MUST be under 50 characters total + - MUST be descriptive and capture the main topic + - MUST use title case + - NO quotes, colons, or special characters + - Focus on the primary subject or task discussed + + EXAMPLES: + - "React Component Testing" + - "Database Migration Setup" + - "API Error Handling" + - "Docker Configuration" + + Respond with ONLY the title, no quotes or explanation. + batch_size: 10 + interval: 0 +chat: + theme: tokyo-night +a2a: + enabled: true + cache: + enabled: true + ttl: 300 + task: + status_poll_seconds: 5 + polling_strategy: exponential + initial_poll_interval_sec: 2 + max_poll_interval_sec: 60 + backoff_multiplier: 2 + background_monitoring: true + completed_task_retention: 5 + tools: + query_agent: + enabled: true + require_approval: false + query_task: + enabled: true + require_approval: false + submit_task: + enabled: true + require_approval: false + download_artifacts: + enabled: true + download_dir: /tmp/downloads + timeout_seconds: 30 + require_approval: false +init: + prompt: |- + Please analyze this project and generate a comprehensive AGENTS.md file. Start by using the Tree tool to understand the project structure. + Use your available tools to examine configuration files, documentation, build systems, and development workflow. + Focus on creating actionable documentation that will help other AI agents understand how to work effectively with this project. + + The AGENTS.md file should include: + - Project overview and main technologies + - Architecture and structure + - Development environment setup + - Key commands (build, test, lint, run) + - Testing instructions + - Project conventions and coding standards + - Important files and configurations + + Write the AGENTS.md file to the project root when you have gathered enough information. diff --git a/.releaserc.yaml b/.releaserc.yaml index 8f16488..c9bbc0d 100644 --- a/.releaserc.yaml +++ b/.releaserc.yaml @@ -1,4 +1,4 @@ -# Code generated by ADL CLI v0.23.11. DO NOT EDIT. +# Code generated by ADL CLI v0.26.0. DO NOT EDIT. # This file was automatically generated from an ADL (Agent Definition Language) specification. # Manual changes to this file may be overwritten during regeneration. diff --git a/AGENTS.md b/AGENTS.md index 5ea79eb..6dabc44 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,25 +11,12 @@ This file describes the agents available in this A2A (Agent-to-Agent) system. This agent is built using the Agent Definition Language (ADL) and provides A2A communication capabilities. ## Agent Capabilities - - - - **Streaming**: ✅ Real-time response streaming supported - - - **Push Notifications**: ❌ Server-sent events not supported - - - **State History**: ❌ State transition history not tracked - - ## AI Configuration - - - - **System Prompt**: You are an expert Playwright browser automation assistant with the ability to create downloadable artifacts. Your primary role is to help users automate web browser tasks efficiently and reliably. Your core capabilities include: @@ -72,113 +59,84 @@ For data extraction, you can use the create_artifact tool to save extracted data Your automation solutions should be maintainable, efficient, and production-ready. - **Configuration:** - - - ## Skills - This agent provides 8 skills: - ### navigate_to_url - **Description**: Navigate to a specific URL and wait for the page to fully load - **Tags**: navigation, browser, playwright - **Input Schema**: Defined in agent configuration - **Output Schema**: Defined in agent configuration - ### click_element - **Description**: Click on an element identified by selector, text, or other locator strategies - **Tags**: interaction, click, playwright - **Input Schema**: Defined in agent configuration - **Output Schema**: Defined in agent configuration - ### fill_form - **Description**: Fill form fields with provided data, handling various input types - **Tags**: form, input, automation, playwright - **Input Schema**: Defined in agent configuration - **Output Schema**: Defined in agent configuration - ### extract_data - **Description**: Extract data from the page using selectors and return structured information - **Tags**: scraping, extraction, data, playwright - **Input Schema**: Defined in agent configuration - **Output Schema**: Defined in agent configuration - ### take_screenshot - **Description**: Capture a screenshot of the current page or specific element - **Tags**: screenshot, capture, visual, playwright - **Input Schema**: Defined in agent configuration - **Output Schema**: Defined in agent configuration - ### execute_script - **Description**: Execute custom JavaScript code in the browser context - **Tags**: javascript, execution, custom, playwright - **Input Schema**: Defined in agent configuration - **Output Schema**: Defined in agent configuration - ### handle_authentication - **Description**: Handle various authentication scenarios including basic auth, OAuth, and custom login forms - **Tags**: authentication, login, security, playwright - **Input Schema**: Defined in agent configuration - **Output Schema**: Defined in agent configuration - ### wait_for_condition - **Description**: Wait for specific conditions before proceeding with automation - **Tags**: wait, synchronization, timing, playwright - **Input Schema**: Defined in agent configuration - **Output Schema**: Defined in agent configuration - - - ## Server Configuration **Port**: 8080 - **Debug Mode**: ❌ Disabled - - - **Authentication**: ❌ Not required - ## API Endpoints The agent exposes the following HTTP endpoints: - `GET /.well-known/agent-card.json` - Agent metadata and capabilities -- `POST /skills/{skill_name}` - Execute a specific skill -- `GET /skills/{skill_name}/stream` - Stream skill execution results +- `GET /health` - Health check endpoint +- `POST /a2a` - JSON-RPC endpoint for all A2A operations (skill execution, streaming, etc.) ## Environment Setup ### Required Environment Variables Key environment variables you'll need to configure: - - - -- `PORT` - Server port (default: 8080) +- `PORT` - Server port (configured: 8080) ### Development Environment - - **Flox Environment**: ✅ Configured for reproducible development setup - - - ## Usage ### Starting the Agent @@ -194,7 +152,6 @@ go run main.go task run ``` - ### Communicating with the Agent The agent implements the A2A protocol and can be communicated with via HTTP requests: @@ -202,62 +159,18 @@ The agent implements the A2A protocol and can be communicated with via HTTP requ ```bash # Get agent information curl http://localhost:8080/.well-known/agent-card.json - - - -# Execute navigate_to_url skill -curl -X POST http://localhost:8080/skills/navigate_to_url \ - -H "Content-Type: application/json" \ - -d '{"input": "your_input_here"}' - -# Execute click_element skill -curl -X POST http://localhost:8080/skills/click_element \ - -H "Content-Type: application/json" \ - -d '{"input": "your_input_here"}' - -# Execute fill_form skill -curl -X POST http://localhost:8080/skills/fill_form \ - -H "Content-Type: application/json" \ - -d '{"input": "your_input_here"}' - -# Execute extract_data skill -curl -X POST http://localhost:8080/skills/extract_data \ - -H "Content-Type: application/json" \ - -d '{"input": "your_input_here"}' - -# Execute take_screenshot skill -curl -X POST http://localhost:8080/skills/take_screenshot \ - -H "Content-Type: application/json" \ - -d '{"input": "your_input_here"}' - -# Execute execute_script skill -curl -X POST http://localhost:8080/skills/execute_script \ - -H "Content-Type: application/json" \ - -d '{"input": "your_input_here"}' - -# Execute handle_authentication skill -curl -X POST http://localhost:8080/skills/handle_authentication \ - -H "Content-Type: application/json" \ - -d '{"input": "your_input_here"}' - -# Execute wait_for_condition skill -curl -X POST http://localhost:8080/skills/wait_for_condition \ - -H "Content-Type: application/json" \ - -d '{"input": "your_input_here"}' - - ``` -## Deployment +Refer to the main README.md for specific skill execution examples and input schemas. +## Deployment **Deployment Type**: Manual - Build and run the agent binary directly - Use provided Dockerfile for containerized deployment - - ### Docker Deployment + ```bash # Build image docker build -t browser-agent . @@ -266,39 +179,28 @@ docker build -t browser-agent . docker run -p 8080:8080 browser-agent ``` - ## Development ### Project Structure ``` . -├── main.go # Server entry point -├── skills/ # Business logic skills - -│ └── navigate_to_url.go # Navigate to a specific URL and wait for the page to fully load - -│ └── click_element.go # Click on an element identified by selector, text, or other locator strategies - -│ └── fill_form.go # Fill form fields with provided data, handling various input types - -│ └── extract_data.go # Extract data from the page using selectors and return structured information - -│ └── take_screenshot.go # Capture a screenshot of the current page or specific element - -│ └── execute_script.go # Execute custom JavaScript code in the browser context - -│ └── handle_authentication.go # Handle various authentication scenarios including basic auth, OAuth, and custom login forms - -│ └── wait_for_condition.go # Wait for specific conditions before proceeding with automation - -├── .well-known/ # Agent configuration -│ └── agent-card.json # Agent metadata -├── go.mod # Go module definition -└── README.md # Project documentation +├── main.go # Server entry point +├── skills/ # Business logic skills +│ └── navigate_to_url.go # Navigate to a specific URL and wait for the page to fully load +│ └── click_element.go # Click on an element identified by selector, text, or other locator strategies +│ └── fill_form.go # Fill form fields with provided data, handling various input types +│ └── extract_data.go # Extract data from the page using selectors and return structured information +│ └── take_screenshot.go # Capture a screenshot of the current page or specific element +│ └── execute_script.go # Execute custom JavaScript code in the browser context +│ └── handle_authentication.go # Handle various authentication scenarios including basic auth, OAuth, and custom login forms +│ └── wait_for_condition.go # Wait for specific conditions before proceeding with automation +├── .well-known/ # Agent configuration +│ └── agent-card.json # Agent metadata +├── go.mod # Go module definition +└── README.md # Project documentation ``` - ### Testing ```bash @@ -310,7 +212,6 @@ go test ./... task test:coverage ``` - ## Contributing 1. Implement business logic in skill files (replace TODO placeholders) diff --git a/CLAUDE.md b/CLAUDE.md index 2c2ba58..2d68b79 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,7 +10,7 @@ browser-agent is an A2A (Agent-to-Agent) server implementing the [A2A Protocol]( ### ADL-Generated Structure -The codebase is generated using ADL CLI 0.23.11 and follows a strict generation pattern: +The codebase is generated using ADL CLI 0.26.0 and follows a strict generation pattern: - **Generated Files**: Marked with `DO NOT EDIT` headers - manual changes will be overwritten - **Configuration Source**: `agent.yaml` - defines agent capabilities, skills, and metadata - **Server Implementation**: Built on the ADK (Agent Development Kit) framework from `github.com/inference-gateway/adk` @@ -117,7 +117,7 @@ Activate with: `flox activate` (if Flox is installed) - **Generated Files**: Never manually edit files with "DO NOT EDIT" headers - **Configuration Changes**: Always modify `agent.yaml` and regenerate -- **ADL Version**: Ensure ADL CLI 0.23.11 or compatible version for regeneration +- **ADL Version**: Ensure ADL CLI 0.26.0 or compatible version for regeneration - **Port Configuration**: Default 8080, configurable via `A2A_PORT` or `A2A_SERVER_PORT` ## Debugging Tips diff --git a/Dockerfile b/Dockerfile index 1c03904..13cf9cb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,11 @@ -# Code generated by ADL CLI v0.23.11. DO NOT EDIT. +# Code generated by ADL CLI v0.26.0. DO NOT EDIT. # This file was automatically generated from an ADL (Agent Definition Language) specification. # Manual changes to this file may be overwritten during regeneration. FROM golang:1.25-alpine AS builder # Build arguments for version injection -ARG VERSION="0.4.2" +ARG VERSION="0.4.3" ARG AGENT_NAME="browser-agent" ARG AGENT_DESCRIPTION="AI agent for browser automation and web testing using Playwright" @@ -54,7 +54,11 @@ RUN apt-get update && apt-get install -y \ x11-utils \ && rm -rf /var/lib/apt/lists/* -WORKDIR /root/ +# Create a2a group and agent user +RUN groupadd -g 1001 a2a && \ + useradd -m -u 1001 -g a2a agent + +WORKDIR /app # Copy the binary and playwright CLI from builder stage COPY --from=builder /app/main . @@ -77,12 +81,18 @@ RUN if [ "$BROWSER_ENGINE" = "all" ]; then \ playwright install --with-deps chromium; \ fi +# Change ownership to agent user +RUN chown -R agent:a2a /app + +# Switch to non-root user +USER agent + # Expose port EXPOSE 8080 # Set environment variables ENV A2A_SERVER_PORT=8080 -ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright +ENV PLAYWRIGHT_BROWSERS_PATH=/home/agent/.cache/ms-playwright # Browser configuration defaults (can be overridden at runtime) ENV BROWSER_ENGINE=chromium diff --git a/README.md b/README.md index e8847a4..a0763b3 100644 --- a/README.md +++ b/README.md @@ -23,12 +23,22 @@ docker build -t browser-agent . docker run -p 8080:8080 browser-agent ``` +## Quick Install + +Add this agent to your Inference Gateway CLI: + +```bash +infer agents add browser-agent http://localhost:8080 \ + --oci ghcr.io/inference-gateway/browser-agent:latest \ + --run +``` + ## Features - ✅ A2A protocol compliant - ✅ AI-powered capabilities - ✅ Streaming support -- ✅ Production ready +- ✅ Enterprise-ready - ✅ Minimal dependencies ## Endpoints @@ -41,14 +51,14 @@ docker run -p 8080:8080 browser-agent | Skill | Description | Parameters | |-------|-------------|------------| -| `navigate_to_url` | Navigate to a specific URL and wait for the page to fully load |timeout, url, wait_until | -| `click_element` | Click on an element identified by selector, text, or other locator strategies |button, click_count, force, selector, timeout | -| `fill_form` | Fill form fields with provided data, handling various input types |fields, submit, submit_selector | -| `extract_data` | Extract data from the page using selectors and return structured information |extractors, format | -| `take_screenshot` | Capture a screenshot of the current page or specific element |full_page, quality, selector, type | -| `execute_script` | Execute custom JavaScript code in the browser context |args, return_value, script | -| `handle_authentication` | Handle various authentication scenarios including basic auth, OAuth, and custom login forms |login_url, password, password_selector, submit_selector, type, username, username_selector | -| `wait_for_condition` | Wait for specific conditions before proceeding with automation |condition, custom_function, selector, state, timeout | +| `navigate_to_url` | Navigate to a specific URL and wait for the page to fully load | timeout, url, wait_until | +| `click_element` | Click on an element identified by selector, text, or other locator strategies | button, click_count, force, selector, timeout | +| `fill_form` | Fill form fields with provided data, handling various input types | fields, submit, submit_selector | +| `extract_data` | Extract data from the page using selectors and return structured information | extractors, format | +| `take_screenshot` | Capture a screenshot of the current page or specific element | full_page, quality, selector, type | +| `execute_script` | Execute custom JavaScript code in the browser context | args, return_value, script | +| `handle_authentication` | Handle various authentication scenarios including basic auth, OAuth, and custom login forms | login_url, password, password_selector, submit_selector, type, username, username_selector | +| `wait_for_condition` | Wait for specific conditions before proceeding with automation | condition, custom_function, selector, state, timeout | ## Configuration diff --git a/Taskfile.yml b/Taskfile.yml index 24d9e1c..420c536 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -1,4 +1,4 @@ -# Code generated by ADL CLI v0.23.11. DO NOT EDIT. +# Code generated by ADL CLI v0.26.0. DO NOT EDIT. # This file was automatically generated from an ADL (Agent Definition Language) specification. # Manual changes to this file may be overwritten during regeneration. diff --git a/config/config.go b/config/config.go index abae9af..6aecb4b 100644 --- a/config/config.go +++ b/config/config.go @@ -1,4 +1,4 @@ -// Code generated by ADL CLI v0.23.11. DO NOT EDIT. +// Code generated by ADL CLI v0.26.0. DO NOT EDIT. // This file was automatically generated from an ADL (Agent Definition Language) specification. // Manual changes to this file may be overwritten during regeneration. diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index e83108f..66849a2 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -28,6 +28,14 @@ wait_for_xvfb() { if [ "$XVFB_ENABLED" = "true" ]; then echo "Starting Xvfb on display $XVFB_DISPLAY with screen resolution $XVFB_SCREEN" + # Clean up stale lock files from previous runs + DISPLAY_NUM=$(echo "$XVFB_DISPLAY" | sed 's/://g') + LOCK_FILE="/tmp/.X${DISPLAY_NUM}-lock" + if [ -f "$LOCK_FILE" ]; then + echo "Removing stale lock file: $LOCK_FILE" + rm -f "$LOCK_FILE" + fi + # Start Xvfb without -ac flag for security # Use -nolisten tcp to prevent network access Xvfb "$XVFB_DISPLAY" -screen 0 "$XVFB_SCREEN" -nolisten tcp & diff --git a/example/docker-compose.yaml b/example/docker-compose.yaml index abdedc2..76fdb0b 100644 --- a/example/docker-compose.yaml +++ b/example/docker-compose.yaml @@ -105,6 +105,8 @@ services: environment: INFER_LOGGING_DEBUG: true INFER_GATEWAY_URL: http://inference-gateway:8080 + INFER_GATEWAY_RUN: false + INFER_GATEWAY_DOCKER: false INFER_A2A_ENABLED: true INFER_TOOLS_ENABLED: false INFER_AGENT_MODEL: deepseek/deepseek-chat diff --git a/internal/logger/logger.go b/internal/logger/logger.go index 185f59e..d76dac9 100644 --- a/internal/logger/logger.go +++ b/internal/logger/logger.go @@ -1,4 +1,4 @@ -// Code generated by ADL CLI v0.23.11. DO NOT EDIT. +// Code generated by ADL CLI v0.26.0. DO NOT EDIT. // This file was automatically generated from an ADL (Agent Definition Language) specification. // Manual changes to this file may be overwritten during regeneration. diff --git a/main.go b/main.go index 7641a1f..4726c0a 100644 --- a/main.go +++ b/main.go @@ -1,4 +1,4 @@ -// Code generated by ADL CLI v0.23.11. DO NOT EDIT. +// Code generated by ADL CLI v0.26.0. DO NOT EDIT. // This file was automatically generated from an ADL (Agent Definition Language) specification. // Manual changes to this file may be overwritten during regeneration.