From bd7eaa69dc1b67894bf6dea132c4d6308547e13d Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 13 Apr 2026 15:42:05 +0900 Subject: [PATCH] feat: real-time streaming parser and active code block glowing effects (v1.0.25) --- package.json | 2 +- src/extension.ts | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 4e95c90..f64372f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "connect-ai-lab", "displayName": "Connect AI", "description": "100% 로컬 AI 코딩 에이전트 — 파일 생성, 코드 편집, 터미널 실행을 오프라인으로. Ollama + Gemma/Llama/DeepSeek 지원.", - "version": "1.0.24", + "version": "1.0.25", "publisher": "connectailab", "license": "MIT", "icon": "assets/icon.png", diff --git a/src/extension.ts b/src/extension.ts index 6cbd9e5..38a4f39 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -972,6 +972,17 @@ textarea::placeholder{color:var(--text-dim)} .stream-active{position:relative} .stream-active::after{content:'';display:inline-block;width:2px;height:14px;background:var(--accent);margin-left:2px;animation:blink .6s step-end infinite;vertical-align:text-bottom;border-radius:1px;box-shadow:0 0 6px var(--accent)} @keyframes blink{0%,100%{opacity:1}50%{opacity:0}} +.stream-active .code-wrap:last-child { + border: 1px solid var(--accent); + animation: codePulse 2s infinite; +} +.stream-active .code-wrap:last-child pre { + box-shadow: inset 0 0 20px rgba(124,106,255,0.05); +} +@keyframes codePulse { + 0%, 100% { box-shadow: 0 0 15px var(--accent-glow); } + 50% { box-shadow: 0 0 35px var(--accent2-glow); border-color: var(--accent2); } +}
Connect AI
@@ -996,6 +1007,11 @@ input.addEventListener('input',()=>{input.style.height='auto';input.style.height function getTime(){return new Date().toLocaleTimeString('ko-KR',{hour:'2-digit',minute:'2-digit'})} function esc(s){const d=document.createElement('div');d.innerText=s;return d.innerHTML} function fmt(t){ + if(t.lastIndexOf(' t.lastIndexOf('')) t += ''; + if(t.lastIndexOf(' t.lastIndexOf('')) t += ''; + if(t.lastIndexOf(' t.lastIndexOf('')) t += ''; + if((t.match(/\x60\x60\x60/g)||[]).length % 2 !== 0) t += '\n\x60\x60\x60'; + const blocks = []; function pushB(h){ blocks.push(h); return '__B' + (blocks.length-1) + '__'; } t=t.replace(/([\\s\\S]*?)<\\/create_file>/g,(_,p,c)=>pushB('
\ud83d\udcc1 '+esc(p)+' \u2014 \uc790\ub3d9 \uc0dd\uc131\ub428
'+esc(c)+'
'));