Skip to content

baesumin/react-addon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AI Agent - Chrome Extension & Vue.js Portal Integration

Vue.js ν¬νƒˆκ³Ό ν†΅ν•©λ˜λŠ” React 기반 AI Agent Chrome Extension μ˜ˆμ‹œ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

이 λ ˆν¬μ§€ν† λ¦¬λŠ” 두 개의 독립적인 ν”„λ‘œμ νŠΈλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

react-addon/
β”œβ”€β”€ chrome-extension/     # React 기반 Chrome Extension
β”‚   β”œβ”€β”€ popup/           # Extension νŒμ—… UI
β”‚   β”œβ”€β”€ content.js       # μ½˜ν…μΈ  슀크립트
β”‚   β”œβ”€β”€ background.js    # λ°±κ·ΈλΌμš΄λ“œ μ›Œμ»€
β”‚   └── manifest.json    # Extension μ„€μ •
β”‚
└── vue-portal/          # Vue.js ν¬νƒˆ μ˜ˆμ‹œ
    β”œβ”€β”€ src/
    β”‚   β”œβ”€β”€ views/       # νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈ
    β”‚   β”œβ”€β”€ stores/      # Pinia μƒνƒœ 관리
    β”‚   └── router/      # Vue Router
    └── index.html

🎯 ν”„λ‘œμ νŠΈ κ°œμš”

Chrome Extension

React 18 + Vite둜 κ΅¬μΆ•λœ Chrome Extension으둜, Vue.js ν¬νƒˆκ³Ό ν†΅ν•©λ˜μ–΄ AI Agent κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

μ£Όμš” κΈ°λŠ₯:

  • πŸ“± React 기반 νŒμ—… UI
  • πŸ”— Vue.js ν¬νƒˆ μžλ™ 감지
  • πŸ’¬ μ‹€μ‹œκ°„ μ–‘λ°©ν–₯ 톡신
  • πŸ“Š ν¬νƒˆ 데이터 μΆ”μΆœ (DOM, μ‚¬μš©μž 정보, λ„€λΉ„κ²Œμ΄μ…˜)
  • πŸ€– AI 쿼리 처리

Vue Portal

Vue 3 + Pinia + Vue Router둜 κ΅¬μΆ•λœ μ˜ˆμ‹œ ν¬νƒˆλ‘œ, Chrome Extension과의 톡합을 ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ£Όμš” κΈ°λŠ₯:

  • 🏠 ν™ˆ, λŒ€μ‹œλ³΄λ“œ, ν”„λ‘œν•„ νŽ˜μ΄μ§€
  • πŸ“‘ Extensionκ³Ό μ‹€μ‹œκ°„ 톡신
  • πŸ§ͺ Extension ν…ŒμŠ€νŠΈ κΈ°λŠ₯
  • πŸ“¦ Pinia μƒνƒœ 관리

πŸš€ λΉ λ₯Έ μ‹œμž‘

1. Chrome Extension μ„€μ • 및 μ„€μΉ˜

# Extension ν΄λ”λ‘œ 이동
cd chrome-extension

# μ˜μ‘΄μ„± μ„€μΉ˜
npm install

# λΉŒλ“œ
npm run build

Chromeμ—μ„œ Extension μ„€μΉ˜:

  1. chrome://extensions/ 접속
  2. "개발자 λͺ¨λ“œ" ν™œμ„±ν™”
  3. "μ••μΆ•ν•΄μ œλœ ν™•μž₯ ν”„λ‘œκ·Έλž¨μ„ λ‘œλ“œν•©λ‹ˆλ‹€" 클릭
  4. chrome-extension/dist/ 폴더 선택

2. Vue Portal μ‹€ν–‰

# ν¬νƒˆ ν΄λ”λ‘œ 이동
cd vue-portal

# μ˜μ‘΄μ„± μ„€μΉ˜
npm install

# 개발 μ„œλ²„ μ‹€ν–‰
npm run dev

ν¬νƒˆμ΄ http://localhost:3000μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

3. 톡합 ν…ŒμŠ€νŠΈ

  1. λΈŒλΌμš°μ €μ—μ„œ http://localhost:3000 접속
  2. Chrome Extension μ•„μ΄μ½˜ ν΄λ¦­ν•˜μ—¬ νŒμ—… μ—΄κΈ°
  3. μ—°κ²° μƒνƒœ 확인: "ν¬νƒˆ 연결됨" ν‘œμ‹œ 확인
  4. νŒμ—…μ—μ„œ AI 쿼리 μž…λ ₯ 및 전솑
  5. λΈŒλΌμš°μ € μ½˜μ†”(F12)μ—μ„œ λ©”μ‹œμ§€ 둜그 확인

πŸ“‘ 톡신 μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Vue Portal    β”‚
β”‚ (localhost:3000)β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚ postMessage
         ↕
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Content Script  β”‚  ←─── Extension의 ν¬νƒˆ 톡합 λ ˆμ΄μ–΄
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚ Chrome API
         ↕
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Background Worker   β”‚  ←─── AI 처리 및 λ©”μ‹œμ§€ 쀑계
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚ Chrome API
         ↕
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Popup (React)  β”‚  ←─── μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‹ λ©”μ‹œμ§€ ν”„λ‘œν† μ½œ

Extension β†’ Portal

νƒ€μž… μ„€λͺ… 데이터
ADDON_READY Extension μ€€λΉ„ μ™„λ£Œ { source: 'react-addon' }
AI_QUERY AI 쿼리 전솑 { message, timestamp }
GET_DOM_DATA DOM 데이터 μš”μ²­ -

Portal β†’ Extension

νƒ€μž… μ„€λͺ… 데이터
PORTAL_READY ν¬νƒˆ μ€€λΉ„ μ™„λ£Œ { appVersion, capabilities }
PORTAL_RESPONSE AI 쿼리 응닡 { text, timestamp }
DOM_DATA DOM 데이터 전솑 { url, title, userInfo, ... }

πŸ› οΈ 개발 κ°€μ΄λ“œ

Chrome Extension 개발

cd chrome-extension

# 개발 λͺ¨λ“œ (hot reload μ—†μŒ, μˆ˜λ™ reload ν•„μš”)
npm run dev

# ν”„λ‘œλ•μ…˜ λΉŒλ“œ
npm run build

디버깅:

  • νŒμ—…: νŒμ—… 우클릭 β†’ 검사
  • Content Script: ν¬νƒˆ νŽ˜μ΄μ§€μ—μ„œ F12 β†’ Console
  • Background: chrome://extensions/ β†’ "μ„œλΉ„μŠ€ μ›Œμ»€" 클릭

Vue Portal 개발

cd vue-portal

# 개발 μ„œλ²„ (hot reload 지원)
npm run dev

# ν”„λ‘œλ•μ…˜ λΉŒλ“œ
npm run build

디버깅:

  • λΈŒλΌμš°μ € μ½˜μ†”(F12)μ—μ„œ Extension λ©”μ‹œμ§€ 둜그 확인
  • Vue Devtools μ‚¬μš© ꢌμž₯

μƒˆλ‘œμš΄ λ©”μ‹œμ§€ νƒ€μž… μΆ”κ°€

1. Extensionμ—μ„œ (chrome-extension/popup/App.jsx)

const sendNewMessageType = async () => {
  const [tab] = await chrome.tabs.query({ active: true, currentWindow: true })

  chrome.tabs.sendMessage(tab.id, {
    type: 'NEW_MESSAGE_TYPE',
    data: { ... }
  })
}

2. Portalμ—μ„œ (vue-portal/src/main.js)

window.addEventListener('message', (event) => {
  if (event.data.source === 'react-addon') {
    switch (event.data.type) {
      case 'NEW_MESSAGE_TYPE':
        // 처리 둜직
        break
    }
  }
})

πŸ“¦ 배포

Chrome Extension 배포

  1. λΉŒλ“œ:

    cd chrome-extension
    npm run build
  2. ZIP 파일 생성:

    cd dist
    zip -r ../extension.zip *
  3. Chrome Web Store μ—…λ‘œλ“œ:

Vue Portal 배포

  1. λΉŒλ“œ:

    cd vue-portal
    npm run build
  2. 배포:

    • dist/ 폴더λ₯Ό μ›Ή μ„œλ²„μ— 배포
    • Netlify, Vercel, AWS S3 λ“± μ‚¬μš© κ°€λŠ₯
  3. Extension manifest μ—…λ°μ΄νŠΈ:

    "content_scripts": [
      {
        "matches": ["https://your-actual-domain.com/*"],
        ...
      }
    ]

πŸ”§ μ»€μŠ€ν„°λ§ˆμ΄μ§•

AI 처리 둜직 μΆ”κ°€

chrome-extension/background.js νŒŒμΌμ—μ„œ:

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  if (message.type === 'PROCESS_AI') {
    // μ‹€μ œ AI API 호좜
    const response = await fetch('https://your-ai-api.com', {
      method: 'POST',
      body: JSON.stringify(message.data)
    })

    const result = await response.json()

    chrome.runtime.sendMessage({
      type: 'PORTAL_RESPONSE',
      data: { text: result.answer }
    })
  }
})

ν¬νƒˆ URL λ³€κ²½

chrome-extension/manifest.jsonμ—μ„œ:

"content_scripts": [
  {
    "matches": ["https://your-portal.com/*"],  // μ‹€μ œ URL둜 λ³€κ²½
    "js": ["content.js"]
  }
]

μƒˆλ‘œμš΄ ν¬νƒˆ νŽ˜μ΄μ§€ μΆ”κ°€

cd vue-portal

# 1. μƒˆ μ»΄ν¬λ„ŒνŠΈ 생성
touch src/views/NewPage.vue

# 2. λΌμš°ν„°μ— μΆ”κ°€ (src/router/index.js)

πŸ› 문제 ν•΄κ²°

Extension이 ν¬νƒˆμ„ κ°μ§€ν•˜μ§€ λͺ»ν•¨

  • βœ… manifest.json의 matches URL 확인
  • βœ… Extension이 ν™œμ„±ν™”λ˜μ–΄ μžˆλŠ”μ§€ 확인
  • βœ… νŽ˜μ΄μ§€ μƒˆλ‘œκ³ μΉ¨ (F5)
  • βœ… Extension μž¬λ‘œλ“œ (chrome://extensions/)

λ©”μ‹œμ§€κ°€ 전솑/μˆ˜μ‹ λ˜μ§€ μ•ŠμŒ

  • βœ… λΈŒλΌμš°μ € μ½˜μ†”μ—μ„œ μ—λŸ¬ 확인
  • βœ… event.data.source κ°’ 확인
  • βœ… Content Scriptκ°€ λ‘œλ“œλ˜μ—ˆλŠ”μ§€ 확인
  • βœ… λ©”μ‹œμ§€ λ¦¬μŠ€λ„ˆκ°€ λ“±λ‘λ˜μ—ˆλŠ”μ§€ 확인

λΉŒλ“œ 였λ₯˜

  • βœ… Node.js 버전 확인 (v16 이상 ꢌμž₯)
  • βœ… node_modules μ‚­μ œ ν›„ μž¬μ„€μΉ˜
  • βœ… μΊμ‹œ 클리어: npm cache clean --force

πŸ“š 기술 μŠ€νƒ

Chrome Extension

  • βš›οΈ React 18.2
  • ⚑ Vite 5.0
  • 🎨 CSS3
  • πŸ”§ Chrome Extension Manifest V3

Vue Portal

  • πŸ’š Vue 3.3
  • 🍍 Pinia 2.1 (μƒνƒœ 관리)
  • πŸ›£οΈ Vue Router 4.2
  • ⚑ Vite 5.0

πŸ“– μ°Έκ³  λ¬Έμ„œ

🀝 κΈ°μ—¬ν•˜κΈ°

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“„ λΌμ΄μ„ μŠ€

MIT License

πŸ’‘ μ‚¬μš© 사둀

이 ν”„λ‘œμ νŠΈλŠ” λ‹€μŒκ³Ό 같은 μ‹œλ‚˜λ¦¬μ˜€μ— ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

  • πŸ€– μ›Ή ν¬νƒˆμ— AI μ–΄μ‹œμŠ€ν„΄νŠΈ μΆ”κ°€
  • πŸ“Š ν¬νƒˆ 데이터 뢄석 및 μΈμ‚¬μ΄νŠΈ 제곡
  • πŸ”„ λ ˆκ±°μ‹œ μ‹œμŠ€ν…œμ— ν˜„λŒ€μ μΈ UI/UX μΆ”κ°€
  • 🎯 μ‚¬μš©μž 행동 좔적 및 κ°œμ„  μ œμ•ˆ
  • πŸ“ μ»¨ν…μŠ€νŠΈ 기반 도움말 μ‹œμŠ€ν…œ

πŸ‘₯ μ—°λ½μ²˜

λ¬Έμ˜μ‚¬ν•­μ΄λ‚˜ μ œμ•ˆμ΄ μžˆμœΌμ‹œλ©΄ Issueλ₯Ό μƒμ„±ν•΄μ£Όμ„Έμš”!


Made with ❀️ using React, Vue, and Chrome Extension API

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published