- type: group
  steps:
    - type: say
      message: ⚠️ Sorry, this doesn't seem to be a LinkedIn profile page.
    - type: stop
  condition:
    - '{{url}} =~ ^(?!https:\/\/www\.linkedin\.com\/in\/[\w\-]+\/?).*$'
- type: js
  args: ''
  code: |-
    const result = (() => {
        const selectors = {
            name: 'h1',
            status: '.text-body-medium.break-words',
            location: '.text-body-small.inline.t-black--light.break-words',
            contact: 'section.pv-top-card--website a',
            about: '#about ~ .display-flex span',
            experience: '#experience + div + div',
            education: '#education + div + div',
            language: '#languages + div + div'
        };
        const getListContent = (container) => {
            if (!container) return null
            return Array.from(container.querySelectorAll('.artdeco-list__item'))
                .map(item => {
                    const clone = item.cloneNode(true);
                    clone.querySelectorAll('.visually-hidden').forEach(el => el.remove());
                    return clone.textContent
                        .replace(/\s+/g, ' ')
                        .replace(/\n\n+/g, '\n')
                        .trim();
                });
        };
        const result = {
            name: document.querySelector(selectors.name)?.textContent.trim(),
            url: window.location.href,
            status: document.querySelector(selectors.status)?.textContent.trim(),
            location: document.querySelector(selectors.location)?.textContent.trim(),
            contact: document.querySelector(selectors.contact)?.href || null,
            about: document.querySelector(selectors.about)?.textContent.trim(),
            experience: getListContent(document.querySelector(selectors.experience)),
            education: getListContent(document.querySelector(selectors.education)),
            language: getListContent(document.querySelector(selectors.language))
        };
        return result;
    })();
    return result;
  param: profile
  timeout: 15000
- type: say
  message: |-
    JSON:
    {{profile}}
This automation command is created by a community member. HARPA AI team does not audit community commands.
Please review the command carefully and only install if you trust the creator.
All rights reserved © HARPA AI TECHNOLOGIES LLC, 2021 — 2025
Designed and engineered in Finland 🇫🇮