diff --git a/web-ui/code.js b/web-ui/code.js index b089823..a643ea3 100644 --- a/web-ui/code.js +++ b/web-ui/code.js @@ -2880,8 +2880,11 @@ function _buildCodeSystemPrompt() { const _activeCode = (() => { try { const f = codeFiles.find(f => f.id === activeCodeFileId); return f?.model?.getValue() || f?.content || ''; } catch { return ''; } })(); const boardHints = _boardSpecificHints(_activeCode); const isLangOnly = _csbSelBoard?.fqbn?.startsWith('lang:'); + const libBlock = (!isLangOnly && _csbBoardLibs.length) + ? `\n설치된 라이브러리: ${_csbBoardLibs.join(', ')}` + : ''; const boardBlock = _csbSelBoard?.fqbn - ? `\n## ${isLangOnly ? '코딩 언어' : '대상 보드'}: ${_csbSelBoard.name}${isLangOnly ? '' : ` (${_csbSelBoard.fqbn})`}${boardHints}\n` + ? `\n## ${isLangOnly ? '코딩 언어' : '대상 보드'}: ${_csbSelBoard.name}${isLangOnly ? '' : ` (${_csbSelBoard.fqbn})`}${boardHints}${libBlock}\n` : ''; // 에디터 파일 컨텍스트 — 로컬 폴더와 분리하여 강조 @@ -4803,10 +4806,26 @@ let _csbSelBoard = (() => { catch { return CSB_BOARD_DEFAULT; } })(); let _csbSelAllBoards = []; +let _csbBoardLibs = []; // 현재 보드의 설치된 라이브러리 캐시 +let _csbBoardLibsFqbn = ''; // 캐시된 fqbn + +async function _csbFetchLibs(fqbn) { + if (!fqbn || fqbn.startsWith('lang:')) { _csbBoardLibs = []; _csbBoardLibsFqbn = fqbn; return; } + if (fqbn === _csbBoardLibsFqbn) return; + try { + const data = await api('/api/arduino/libs?fqbn=' + encodeURIComponent(fqbn)); + _csbBoardLibs = (data.libs || []).map(l => l.name).filter(Boolean); + _csbBoardLibsFqbn = fqbn; + } catch { _csbBoardLibs = []; } +} + +// 초기 로드 시 현재 보드 라이브러리 가져오기 +_csbFetchLibs(_csbSelBoard.fqbn); function _csbBoardSelSave(board) { _csbSelBoard = board; try { localStorage.setItem('csb_selected_board', JSON.stringify(board)); } catch {} + _csbFetchLibs(board.fqbn); const el = document.getElementById('csb-board-sel-name'); if (el) el.textContent = board.name; const badge = document.getElementById('csb-board-qemu-badge');