v0.1.57
v0.1.57 — 강조 엣지 중복 fix + 엣지 종류 라벨 i18n / 뷰포트 토글 + AI 채팅 MVP + leerness 1.9.10
요청 1
- "2D 모드에서 노드선택시 강조되는 엣지가 이미 연결되어있는 엣지가 강조되는게 아니라 별도의 엣지로 강조되어서 헷갈려"
요청 2
- "엣지 종류 패널의 정보는 한글로도 표시될 수 있어야해, 2D모드와 3D 모드 뷰포트에 표시되는 엣지 자체에 엣지 종류 표시 여부를 선택할 수 있는 기능"
요청 3
- "ollama, OpenClaw, NemoClaw, codex, claude code, vscode github copilot 등등등의 채팅과 연동되어서 ViewWork에서도 채팅을 전송할 수 있게"
요청 4
- "leerness-1.9.10 버전으로 업데이트 및 마이그레이션"
Fix #1 — 강조 엣지 중복 제거
src/components/Visualizer2D/Graph2D.tsx—HighlightedEdgesOverlay/HighlightedEdgesOverlayInner컴포넌트 + ReactFlowuseStore/useViewportimport 완전 제거.- 이전 (v0.1.49 ~ v0.1.56): smoothstep/step 라우팅 위에 별도 SVG 레이어가 cubic bezier 강조선을 추가로 그려 "같은 엣지가 두 번" 보임. setEdges 의 highlight 로직 (stroke #F5A623 + 두꺼움 + opacity 1) 만으로 충분.
- 결과: 한 엣지 = 한 path. 시각 명확.
Feature #2 — 엣지 종류 라벨 한글화 + 뷰포트 표시 토글
src/i18n/locales/{ko,en}.json—edges.kinds.*28개 키 추가. ko: "import" / "동적 import" / "참조" / "외부 서비스" / "포함" / "GET" / "POST" / "클라우드 읽기" / "Firebase 라우팅" / "에이전트 ↔ 프로젝트" 등.src/utils/edgeStyle.ts—edgeKindLabel(kind, t)helper. t 함수 인자로 받아 i18n 우선, 없으면 EDGE_STYLES.label fallback.viewStore—showEdgeTypeLabel: boolean(기본 false, persist 대상) +setShowEdgeTypeLabel.EdgeLegend— i18n 라벨 + 상단에 "엣지 위 라벨" 토글 버튼 (Eye/EyeOff 아이콘).- 2D
Graph2D.tsx— 3 edge useMemo (baseEdges / agentProjectEdges / githubEdges) 에서label: showEdgeTypeLabel && !isParent ? edgeKindLabel(e.kind, t) : undefined— React Flow 가 inline 텍스트로 렌더. - 3D
BezierConnections.tsx— 신규<BezierEdgeLabels>sub-component. 토글 on 시 각 엣지 midpoint 위에 Html 라벨 (parent-child 제외, distanceFactor 18).
Feature #3 — AI 채팅 MVP
electron/ipc/handlers.ts— 신규 IPC 채널ai:chatSend+ 3종 provider 핸들러 (Ollama / OpenAI-compatible / Anthropic). 모두 normalized{ content: string }출력. AbortController 90s timeout.electron/preload.ts—viewworkApi.aiChatSend(payload)+AiChatSendPayloadDto타입.src/store/chatStore.ts(신규) — Zustand store: providers + activeProviderId + messages (cap 200) + sending/lastError. localStorage persist. 5개 preset (Ollama / OpenAI GPT-4o mini / Claude 3.5 Haiku / OpenRouter / LM Studio).sendChatMessage(content)async helper.src/components/Chat/ChatPanel.tsx(신규) — UI: provider dropdown + 메시지 입력 (Enter 전송 / Shift+Enter 줄바꿈) + 채팅 bubble + Empty state (preset 빠른 추가) + ProviderEditor 모달 (name / kind / baseUrl / model / apiKey / systemPrompt / temperature).RightSidebar— 'chat' 탭 추가 (항상 표시). viewStore 의rightSidebarActiveTab타입 확장.- 보안: API Key 는 localStorage 에 저장 (사용자 머신만). main 단발 전달 후 GC, 디스크/네트워크 노출 없음.
- 지원 범위: Ollama (로컬) / OpenAI API / OpenRouter / LM Studio / llama.cpp / Anthropic Claude. CLI 도구 (Claude Code / Codex / Copilot) 는 추후 'cli' kind 로 확장 예정.
#4 — leerness 1.9.9 → 1.9.10
npm i -g [email protected]+leerness migrate .실행..harness/의 templates / AX_*.md / skill-index 갱신..claude/commands/*.md와/update슬래시 커맨드 자동 추가.
검증
npx tsc --noEmitexit=0.npm run build성공 (renderer 3,151kB, ChatPanel + chatStore 으로 약 +32kB).
📦 GitHub 릴리스 노트: v0.1.57