From 0951368221d5507d4b24dfaf3431a0886dfc9fb5 Mon Sep 17 00:00:00 2001 From: kim Date: Tue, 30 Jun 2026 17:53:54 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=B3=B4=EB=93=9C=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=20=EC=8B=9C=20=EC=84=A4=EC=B9=98=EB=90=9C=20=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EB=AA=A9=EB=A1=9D=EC=9D=84=20AI?= =?UTF-8?q?=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20=ED=94=84=EB=A1=AC=ED=94=84?= =?UTF-8?q?=ED=8A=B8=EC=97=90=20=ED=8F=AC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - _csbFetchLibs(): 보드 선택 시 /api/arduino/libs?fqbn= 호출 후 캐시 - 초기 로드 및 보드 변경 시 자동 갱신 - lang: 선택 시 라이브러리 조회 생략 - boardBlock에 "설치된 라이브러리: ..." 추가 (~113 토큰) Co-Authored-By: Claude Sonnet 4.6 --- web-ui/code.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) 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');