--- - name: Install Node.js role ansible.builtin.include_role: name: roles/vhosts/nodejs vars: nodejs_version: "{{ ai_agent_runtime_nodejs_version }}" install_yarn: "{{ ai_agent_runtime_install_yarn }}" yarn_version: "{{ ai_agent_runtime_yarn_version }}" - name: Ensure user local bin directory exists on macOS ansible.builtin.file: path: "{{ ansible_env.HOME }}/.local/bin" state: directory mode: "0755" when: ansible_os_family == 'Darwin' - name: Install npm global package manager helper ansible.builtin.copy: src: manage_npm_global_package.sh dest: "{{ '/usr/local/sbin' if ansible_os_family != 'Darwin' else ansible_env.HOME + '/.local/bin' }}/ai-workspace-manage-npm-global-package" owner: "{{ 'root' if ansible_os_family != 'Darwin' else xworkspace_console_user }}" group: "{{ 'root' if ansible_os_family != 'Darwin' else ('staff' if ansible_os_family == 'Darwin' else xworkspace_console_user) }}" mode: "0755" become: "{{ ansible_os_family != 'Darwin' }}" - name: Install global npm packages for AI runtime ansible.builtin.command: cmd: "{{ '/usr/local/sbin' if ansible_os_family != 'Darwin' else ansible_env.HOME + '/.local/bin' }}/ai-workspace-manage-npm-global-package {{ ai_agent_runtime_npm_global_package_action }} {{ item }}" loop: "{{ ai_agent_runtime_npm_global_packages }}" register: ai_agent_runtime_npm_global_install changed_when: "'changed=1' in ai_agent_runtime_npm_global_install.stdout" when: ai_agent_runtime_npm_global_packages | length > 0 - name: Install pinned Playwright package for AI runtime ansible.builtin.command: cmd: "{{ '/usr/local/sbin' if ansible_os_family != 'Darwin' else ansible_env.HOME + '/.local/bin' }}/ai-workspace-manage-npm-global-package {{ ai_agent_runtime_npm_global_package_action }} playwright@{{ ai_agent_runtime_playwright_version }}" register: ai_agent_runtime_playwright_install changed_when: "'changed=1' in ai_agent_runtime_playwright_install.stdout" when: - ai_agent_runtime_playwright_enabled | bool - ai_agent_runtime_playwright_version | length > 0