diff --git a/PATCHNOTES.md b/PATCHNOTES.md index 4d4e804..52208ac 100644 --- a/PATCHNOTES.md +++ b/PATCHNOTES.md @@ -1,5 +1,11 @@ # Astra Patch Notes +## v2.2.206 (2026-06-08) +### ๐Ÿ—‚๏ธ Settings ํŒจ๋„ ์นดํ…Œ๊ณ ๋ฆฌ ํƒญ ์ •๋ฆฌ +- ๊ธธ๊ฒŒ ๋‚˜์—ด๋˜๋˜ 9๊ฐœ ์„ค์ • ์„น์…˜์„ **4๊ฐœ ํƒญ**์œผ๋กœ ๊ทธ๋ฃนํ•‘ โ€” **๋ชจ๋ธยท์—ฐ๊ฒฐ**(์—ฐ๊ฒฐ+Cloud Providers) / **์ง€์‹ยท๊ธฐ์–ต**(๋ฉ”๋ชจ๋ฆฌ+๋‘๋‡Œ) / **์—ฐ๋™**(Datacollect+Telegram+Google) / **๋™์ž‘ยท๊ณ ๊ธ‰**(Devil+๊ณ ๊ธ‰). +- ํ‘œํ˜„ ๊ณ„์ธต๋งŒ ์ถ”๊ฐ€(ํƒญ ๋„ค๋น„ + show/hide) โ€” ์š”์†Œ IDยท`data-save`ยท๋ฆฌ์Šค๋„ˆยท`renderState`ยทprovider ์ „๋ถ€ ๋ฌด์ˆ˜์ •์ด๋ผ ์ €์žฅ ๋™์ž‘ ๊ทธ๋Œ€๋กœ. ์ข์€ ์‚ฌ์ด๋“œ๋ทฐ ๋Œ€์‘(ํƒญ ์ค„๋ฐ”๊ฟˆ), ํ™œ์„ฑ ํƒญ ๊ธฐ์–ต(setState). +- ๋ณ€๊ฒฝ: [settings-panel.html](media/settings-panel.html) ยท [settings-panel.css](media/settings-panel.css) ยท [settings-panel.js](media/settings-panel.js). + ## v2.2.205 (2026-06-05) ### ๐Ÿงน ๋ฐฑ์—”๋“œ ๋ถ„๋ฆฌ ์ค€๋น„ โ€” Bridge ํƒ€๊นƒ ํ† ๊ธ€(๋กœ์ปฌ/NAS) + /research ์ œ๊ฑฐ - **Datacollect Bridge ํƒ€๊นƒ ์„ค์ •** ์ถ”๊ฐ€ โ€” Astra Settings ํŒจ๋„์—์„œ `๋กœ์ปฌ/NAS` ์ „ํ™˜ + NAS URL/ํ† ํฐ(`x-bridge-token`). ๊ธฐ๋ณธ `๋กœ์ปฌ` = ํ˜„ํ–‰ ๋™์ž‘ ๊ทธ๋Œ€๋กœ. ([bridgeClient.ts](src/features/datacollect/bridgeClient.ts) ยท [settings-panel](media/settings-panel.html) ยท [settingsPanelProvider.ts](src/features/settings/settingsPanelProvider.ts)) diff --git a/media/settings-panel.css b/media/settings-panel.css index aa77d96..eb084c7 100644 --- a/media/settings-panel.css +++ b/media/settings-panel.css @@ -42,6 +42,38 @@ body { opacity: 0.7; } +/* โ”€โ”€โ”€ Tabs (์นดํ…Œ๊ณ ๋ฆฌ ๋„ค๋น„) โ”€โ”€โ”€ */ +.tabs { + display: flex; + gap: 6px; + flex-wrap: wrap; /* ์ข์€ ์‚ฌ์ด๋“œ๋ทฐ์—์„œ ์ž๋™ ์ค„๋ฐ”๊ฟˆ */ + margin-bottom: 14px; +} +.tab { + padding: 6px 12px; + border-radius: 6px; + border: 1px solid var(--vscode-panel-border); + background: transparent; + color: var(--vscode-descriptionForeground); + font-size: 12px; + font-weight: 600; + cursor: pointer; + white-space: nowrap; +} +.tab:hover { + color: var(--vscode-foreground); + background: var(--vscode-list-hoverBackground); +} +.tab.active { + background: var(--vscode-button-background); + color: var(--vscode-button-foreground); + border-color: var(--vscode-button-background); +} +/* ๋น„ํ™œ์„ฑ ํƒญ ์„น์…˜ ์ˆจ๊น€ โ€” DOM ์—๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ํ‘œ์‹œ๋งŒ ๋ˆ๋‹ค(JS refs/state ๋ฌด์˜ํ–ฅ). */ +.section[hidden] { + display: none !important; +} + .hint { color: var(--vscode-descriptionForeground); font-size: 11px; diff --git a/media/settings-panel.html b/media/settings-panel.html index 0bf76e0..883bf9b 100644 --- a/media/settings-panel.html +++ b/media/settings-panel.html @@ -14,9 +14,16 @@ + +
-
+

์—ฐ๊ฒฐ

๋กœ์ปฌ AI ์—”์ง„(Ollama ๋˜๋Š” LM Studio) ์œ„์น˜์™€ ๊ธฐ๋ณธ ๋ชจ๋ธ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

@@ -46,7 +53,7 @@
-
+

Datacollect (slash ๋ช…๋ น)

์ฑ„ํŒ…์—์„œ /research ยท /benchmark ยท /youtube ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด Datacollect Bridge๋กœ ์œ„์ž„๋ฉ๋‹ˆ๋‹ค. ํƒ€๊นƒ์œผ๋กœ ๋กœ์ปฌ(npm run bridge) ๋˜๋Š” NAS์˜ ๊ฒฝ๋Ÿ‰ Bridge ์ค‘ ์–ด๋””๋ฅผ ํ˜ธ์ถœํ• ์ง€ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

@@ -118,7 +125,7 @@
-
+

๋ฉ”๋ชจ๋ฆฌ

๋Œ€ํ™” ์‘๋‹ต ์ „์— ์ฃผ์ž…๋˜๋Š” ๋‹จ๊ธฐ/์ค‘๊ธฐ/์žฅ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

@@ -148,7 +155,7 @@
-
+

๋‘๋‡Œ (์ง€์‹ ํด๋”)

ํ˜„์žฌ ํ™œ์„ฑ ๋‘๋‡Œ ํ”„๋กœํ•„ ์ •๋ณด์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ยท์ˆ˜์ •์€ ์‚ฌ์ด๋“œ๋ฐ”์˜ [๋ณ€๊ฒฝ โ–พ โ†’ ๋‘๋‡Œ] ๋˜๋Š” VS Code Settings์—์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

@@ -165,7 +172,7 @@
-
+

Telegram ๋ด‡

ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ Astra์™€ ๋Œ€ํ™”ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด BotFather์—์„œ ๋ด‡์„ ๋งŒ๋“ค๊ณ  ํ† ํฐ์„ ์—ฌ๊ธฐ์— ์ €์žฅํ•˜์„ธ์š”. Astra์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์—๋Š” ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

@@ -205,7 +212,7 @@
-
+

Google (Calendar ยท Sheets)

ํšŒ์˜๋กยทํ• ์ผ์„ Google Calendar ์— ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  Sheets ๋ฅผ ์ฝ๊ณ  ์“ฐ๋ ค๋ฉด OAuth ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Google Cloud Console ์—์„œ Desktop OAuth Client ๋งŒ๋“ค๊ณ  Client ID/Secret ์„ ์•„๋ž˜์— ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”.

@@ -285,7 +292,7 @@
-
+

Cloud LLM Providers

Ollama / LM Studio ๋กœ์ปฌ ์™ธ์— cloud API ๋ฅผ ๋ถ™์—ฌ์„œ ๋ชจ๋ธ ์„ ํƒ์ง€๋ฅผ ํ™•์žฅ. API key ๋Š” ๋ชจ๋‘ Secret Storage ์— ์ €์žฅ (settings.json ์นจ๋ฒ” X). ์‚ฌ์ด๋“œ๋ฐ” ๋ชจ๋ธ dropdown ์—์„œ ํ™œ์„ฑ provider ์˜ ๋ชจ๋ธ์ด ํ•จ๊ป˜ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

@@ -357,7 +364,7 @@
-
+

๐ŸŽญ Devil's Advocate (๋„ํ˜„)

๋งค ๋‹ต๋ณ€ ์งํ›„ ๋ณ„๋„ LLM ํ˜ธ์ถœ๋กœ *๋น„ํŒ์  sparring partner* ๊ฐ€ ํ•œ ๋ฌธ๋‹จ ๋ฐ˜๋ฐ•. ์‚ฌ์šฉ์ž์˜ ์‚ฌ๊ณ ๋ฅผ ๋Šฅ๋™์  ๋ฐฉ์–ด๋กœ ์ „ํ™˜. ๊ฐ™์€ ๋ชจ๋ธ ์žฌ์‚ฌ์šฉ (~10-15% ์ถ”๊ฐ€ ๋น„์šฉ).

@@ -369,7 +376,7 @@
-
+

๊ณ ๊ธ‰

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ๊ฑด๋“œ๋ฆด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.

diff --git a/media/settings-panel.js b/media/settings-panel.js index 5196c03..f778c95 100644 --- a/media/settings-panel.js +++ b/media/settings-panel.js @@ -482,5 +482,24 @@ } } + // ---- Tabs (์นดํ…Œ๊ณ ๋ฆฌ ๋„ค๋น„) โ€” ํ‘œํ˜„ ๊ณ„์ธต๋งŒ. ๊ธฐ์กด refs/๋ฆฌ์Šค๋„ˆ/state ์— ๋ฌด์˜ํ–ฅ ---- + (function initTabs() { + const tabButtons = Array.from(document.querySelectorAll('.tab')); + const sections = Array.from(document.querySelectorAll('.section')); + if (tabButtons.length === 0) return; + const valid = new Set(tabButtons.map((b) => b.dataset.tab)); + function setActiveTab(tab) { + tabButtons.forEach((b) => b.classList.toggle('active', b.dataset.tab === tab)); + // ์ˆจ๊น€๋งŒ(hidden) โ€” DOM ์ œ๊ฑฐ X. renderState ๋Š” ์ˆจ๊ฒจ์ง„ ์ž…๋ ฅ์—๋„ ๊ฐ’์„ ์ฑ„์šด๋‹ค. + sections.forEach((s) => { s.hidden = s.dataset.tab !== tab; }); + try { const st = vscode.getState() || {}; vscode.setState({ ...st, activeTab: tab }); } catch (e) { /* noop */ } + } + tabButtons.forEach((b) => b.addEventListener('click', () => setActiveTab(b.dataset.tab))); + let initial = 'model'; + try { const saved = (vscode.getState() || {}).activeTab; if (saved && valid.has(saved)) initial = saved; } catch (e) { /* noop */ } + if (!valid.has(initial)) initial = tabButtons[0].dataset.tab; + setActiveTab(initial); + })(); + vscode.postMessage({ type: 'ready' }); })(); diff --git a/package.json b/package.json index c07c028..16794b2 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "astra", "displayName": "Astra", "description": "The personal intelligence layer for Antigravity and VS Code. A private cognitive partner for deep project context, memory, and proactive strategic decision-making.", - "version": "2.2.205", + "version": "2.2.206", "publisher": "g1nation", "license": "MIT", "icon": "assets/icon.png",