Commit Graph

71 Commits

Author SHA1 Message Date
windpacer
647c7c090f feat: 트렌드 P2 — 알람선·운전음영·듀얼커서·자동집계(LTTB) + 집계 버그수정
- 알람선(markLine HI/LO/SP; v_instrument_range euhi/eulo + .sp) — GET /api/trend/limits
- 운전음영(markArea RUN/TRIP; event_history LEAD 구간화) — GET /api/trend/runbands
- 듀얼커서 Δ(zr 클릭→Δt·Δy·기울기), 자동집계 경로 + line sampling:'lttb'
- fix: trQuery 집계 호출이 query-string으로 가 body의 tagNames 누락→빈 차트.
  JSON body로 전송 + 집계 0행/예외 시 raw(/api/history/query) 폴백
- fix: QueryHistoryWithIntervalAsync from/to UTC 정규화(ToUniversalTime) —
  '+00:00'/Local-kind 입력이 9h 시프트되던 잠재버그 방지(프론트 'Z' 경로 영향 0)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 18:56:40 +09:00
windpacer
52ed77efac docs: 트렌드 P2 작업지시서 (LLM 구현용)
- 알람선(markLine HI/LO/SP)·운전음영(markArea RUN/TRIP)·듀얼커서Δ·자동집계/LTTB
- 슬롯 추가 절차, 기존 함수/엔드포인트/스키마, camelCase DTO 등 cold-start 자가완결

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 17:46:42 +09:00
windpacer
c7e2250bd3 feat: 트렌드 워크스페이스(ECharts) 추가 + 이벤트히스토리 sub_area 정렬
트렌드 P1 (Tab 17 "트렌드"):
- 단일 ECharts 차트 슬롯구조(trState/TR_LAYERS/trRender) — P2/P3 무중단 증분 기반
- 기능: 그룹빌더(realtime 아날로그 클릭선택)/멀티시리즈·이중축/dataZoom(좌우날짜)/
  범례표(색변경·행클릭 강조·보이는구간 통계)/보이는범위 minmax 마커/라이브 현재값/
  트립·이벤트 오버레이(/api/event-history 재사용)/100%환산/Y줌
- 백엔드: trend_group 테이블 + v_analog_points 뷰(숫자 livevalue=아날로그) +
  TrendService/TrendController(/api/trend: analog-points·groups CRUD·live) + DI
- echarts 5.5.1 로컬 번들, DTO는 [JsonPropertyName]로 camelCase 고정

이벤트히스토리 sub_area 정렬(컬럼 일치):
- event_history_table section → sub_area (DDL/인덱스/엔티티/DTO/서비스/컨트롤러/evt UI/MCP/프롬프트)
- 이력 조회 PIVOT 재작성(MAX/CASE), ft.category '계기' → 'instrument'

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 17:42:54 +09:00
windpacer
930fac2b4f docs: 트렌드 워크스페이스(ECharts) 구현 플랜 — P1~P3 단일차트 슬롯구조
- trState + TR_LAYERS + trRender 합성구조로 P2/P3를 같은 차트에 무중단 증분
- P1(그룹/dataZoom/범례강조/minmax/라이브/트립오버레이) ~ P3(LLM분석/스마트그룹/상관) 로드맵
- 설치(ECharts 로컬번들)·백엔드(trend_group/v_analog_points)·프론트 코드 스니펫 포함

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 17:34:04 +09:00
windpacer
81e2ea145a fix: realtime supervisor — OPC 장기단절 후 자동복구 (OCE 오인중지 + 연결 타임아웃)
- SuperviseAsync: catch(OperationCanceledException){break} 가 OPC SDK 연결 타임아웃
  (TaskCanceledException=OCE 하위)을 '우리 취소'로 오인해 '중지됨'으로 영구정지되던
  버그 수정 → when(ct.IsCancellationRequested) 가드, 그 외 OCE는 일반 오류처럼 재시도
- CreateSessionAsync: CancellationToken.None → 실제 토큰 전달
  (죽은 서버 상대 세션생성이 SDK 기본 OperationTimeout ~2분 블로킹하던 원인 제거)
- 1회 연결 시도 10초 타임아웃(연결토큰 + WaitAsync 하드 백스톱)
- 재시도 주기 30s → 10s (리던던트 서버 전환 시 수분 단절도 빠르게 재포착)
- 라이브 검증: Experion kill→2.5분→revive 시 재연결 순환 유지 후 수동개입 0 자동 구독복구

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 17:31:23 +09:00
windpacer
50705ab0e8 feat: P&ID 연결 엑셀 라운드트립 — id 안정 키 + 운전자 문서규칙
- ExportToExcelAsync: 17번째 컬럼 id(pid_equipment.id) 추가 (col1~16 위치 불변)
- ImportFromExcelAsync: id 우선 매칭 — id 있으면 그 행만 in-place UPDATE
  (다중경로 보존), 빈 id면 INSERT, col17 헤더가 'id'가 아닌 옛 파일은 tag_no 폴백
- PidImportResult.RowsInserted 추가 + import 로그 신규건수 포함
- 구조설명-6-2차플랜트-byPBK.xlsx 문서규칙: upsert_pid_connection(9bcba0a) 연동
  규칙으로 슬림화 (콤마=병렬 병합, 카테고리 매핑, 멱등/잠금/변경금지는 도구가 처리)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 21:34:24 +09:00
windpacer
9bcba0a317 feat: 웹UI Phase 4 완료 — CSS 분리, pane 중첩 버그 수정, app.js 제거
Phase 4 — CSS 분리:
- style.css(2,230→670줄)에서 탭별 스타일을 css/<tab>.css 8개로 분할
  (t2s:437, pid:236, pb:106, hist:100, evt:50, opcsvr:14, llmchat:501, kbadmin:109)
- 크로스탭 공유 스타일(nm-*, hist-status, dt-picker 등)은 style.css 잔류
- index.html head에 11개 CSS link 태그 (1 style.css + 8 tab + 2 lib)

app.js 제거:
- index.html에서 <script src=/js/app.js> 참조 제거
- app.js → 10줄 placeholder (이미 Phase 0-3에서 모든 로직 이전 완료)

Pane wrapper 버그 수정:
- 16개 pane 파일에서 <section class=pane id=pane-xxx> wrapper 제거
- activateTab이 innerHTML로 주입 시 중첩 section + display:none 발생
- 내용이 전혀 안 보이는 문제 해결

문서 갱신:
- AGENTS.md: Frontend Architecture 섹션 추가
- 웹UI-개선플랜-byOPUS.md: Phase 0-4 완료 상태로 갱신, 결과 검증 추가

MCP:
- server.py: timestamp 정밀도 개선 등
2026-05-24 18:47:25 +09:00
windpacer
32a442abd6 docs: 세션 작업 문서 추가 — 웹UI 개선플랜(감리정정) + 대화모음
- 웹UI-개선플랜-byQwen27B.md: app.js/index.html 분리 리팩토링 계획.
  실코드 대조 감리 결과 §0.5 추가 — 치명 결함 3건(모듈레벨 상태/최상위
  실행문 누락, 로더 기동 부재, async 파셜 배선 타이밍) 정정 및 정정 로더 포함
- 메타데이터업데이트/문서뷰어/커밋-브랜치정리 대화모음

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 16:47:27 +09:00
windpacer
2e844abf11 feat: 운전판정 고도화 — realtime stall 수정 + 교차검증 + 단위/레인지
- ExperionRealtimeService를 단일 SuperviseAsync supervisor로 재설계:
  비블로킹 부팅, PublishingStopped/KeepAliveStopped 워치독으로 silent
  stall 감지, 30초 주기 무한 재연결, flush 루프 단일화
- RealtimeServiceStatus에 LastDataAgeSeconds/Stalled 추가, History는
  Stalled 시 스냅샷 skip
- v_plant_running_state에 진공펌프(vp-) 포함 + 교차검증 4객체
  (pump_corroboration_manual, v_pump_signal_map,
  v_plant_running_state_corroborated, v_plant_running_state_agg)
  + v_instrument_range 뷰 (boot DDL)
- MetadataLoaderService에 euhi/eulo/units 메타속성 추가
- generate_status_report에 agg 조회 연동 + sample/focus 버그 수정
- plant_context.md에 펌프 prefix(p-/vp-) + 교차검증 뷰 사용법

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 16:47:20 +09:00
windpacer
7dbeb36218 fix: box-drawing GFM 변환 — 행별 자체 │ 위치 사용으로 컬럼 경계 불일치 대응 2026-05-24 13:20:33 +09:00
windpacer
762b4a1e7d fix: box-drawing table multi-line cell merge
Continuation rows (≤1 non-empty cell, e.g. wrapped cell text)
were being treated as separate data rows, shifting columns.
Now merged into the previous row by appending to the same cell.
2026-05-24 13:11:28 +09:00
windpacer
c31a2cf2e7 feat: box-drawing table to GFM pipe table conversion 2026-05-24 13:08:07 +09:00
windpacer
1a4666e339 fix: box-drawing 테이블 행 분리 문제 — 정규식 prefix만 검사하도록 수정
- BOX_RE: 전체 라인 검사 → 선두 box-drawing 문자만 확인
- 셀 내부 ' % ( ) 등 모든 문자 허용되어 행 분리 방지
- CSS 백업: .md-body pre에 font-family: var(--fm) 추가
2026-05-24 12:47:29 +09:00
windpacer
94a4b10f41 fix: 문서 탐색기 raw HTML escape + 높이 보정
- marked.js html renderer 오버라이드: 터미널 덤프에 포함된
  <div class="hidden"> 등 raw HTML이 DOM을 깨는 현상 방지
- .docs-layout height calc(100vh - 116px) → calc(100vh - 126px)
  (pane-hdr 높이 정확히 반영)
2026-05-24 12:34:32 +09:00
windpacer
24478b0ccf feat: 문서 탐색기 PDF 내보내기 (브라우저 인쇄 → PDF로 저장)
마크다운/텍스트 뷰어 툴바에 🖨 PDF 버튼 추가. 렌더된 결과(KaTeX·mermaid
SVG·코드강조·GFM 표)를 깨끗한 새 창에 담아 print() → 인쇄창에서 "PDF로 저장".

- 폐쇄망 OK: 외부 리소스 없이 /lib 로컬 CSS만 사용 (KaTeX 폰트도 로컬)
- 한글: 인쇄 본문 폰트 맑은 고딕 지정 → 윈도우에서 깨짐 없음
- 실제 텍스트(검색·복사 가능), 페이지 잘림 방지(break-inside) 적용

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 07:08:15 +09:00
windpacer
3556739a3e chore: 프론트 라이브러리 wwwroot/lib 추적 (.gitignore 예외)
Python용 lib/ 무시 규칙이 wwwroot/lib 까지 잡아 vendoring 라이브러리가
미추적이던 문제 수정. clone 시 마크다운 렌더 등이 동작하도록 추적 전환.

- 신규: marked, dompurify, highlight.js(+테마), katex(js/css/auto-render+woff2 20),
  mermaid (문서 탐색기 의존)
- 기존 누락분 동반 추적: uPlot.iife.min.js, uPlot.min.css
- .gitignore: !src/Web/wwwroot/lib/ 예외 추가

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 06:34:23 +09:00
windpacer
eb9ce9a501 docs: 웹 UI 구조 개선 플랜 추가 (HTML/JS 모놀리식 분리)
index.html(1.7K줄)·app.js(5.1K줄) 모놀리식 분리 방안 — HTML 파셜(fetch),
Razor 파셜, Vite+바닐라 ESM, 프레임워크 비교 및 점진 이관 단계.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 06:32:24 +09:00
windpacer
9cc359b803 feat: 문서 탐색기 (Tab 16) — 프로젝트 폴더 트리 탐색 + txt/md/pdf 뷰어
프로젝트 폴더 전체를 안전하게 탐색하고 문서를 보고 편집하는 웹 UI.

- DocBrowserService: 루트 자동탐색(.git/.sln), 경로이탈·심볼릭·제외디렉토리
  ·민감파일 가드, 목록/읽기/원본/쓰기/이름변경/삭제/폴더/업로드
- DocsController(/api/docs): config·tree·text·raw(공개) / 변경계열은 KB admin 토큰
- 뷰어: md(marked+DOMPurify+hljs+KaTeX+mermaid) / pdf(원본 iframe) / txt(pre) / 그 외 다운로드
- 인라인 편집(md 실시간 분할 미리보기) + 관리(새폴더/업로드/이름변경/삭제)
- 사이드바 nav 스크롤 수정(.nav overflow), 헤더 컴팩트화로 문서 영역 확보

주의: 프론트 라이브러리(marked/mermaid/katex 등)는 wwwroot/lib/(.gitignore)라
미추적 — 별도 처리 필요.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 06:32:19 +09:00
windpacer
ce72e25f0e docs: 6-1차 플랜트(P6-1) 구조설명 자료 추가
구조설명-6-1차플랜트-byPBK.xlsx — P6-1 설비 구조 설명 자료.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 06:32:02 +09:00
windpacer
87ab8adfe0 docs: 측류추출 자동운전 플랜 문서 추가
C-6111 측류추출탑 자동운전 관련 플랜·관계식·운전 주의점 문서.

- 측류추출-자동운전-플랜-byOpus.md / -컨셉회의.md(.docx)
- 측류추출-관계식.md, PGMEA_측류추출운전방식_주의점.md
- 측류추출-시간지연-적용방식.md(박스 정렬 수정)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 06:31:58 +09:00
windpacer
f81044c451 feat: Sub-Area(세부 Area) 분류 기능 + 포인트 삭제 시 메타데이터/이력 정리
하나의 area(P6)를 Column 단위 sub_area(P6-1/P6-2)로 분류. tag_metadata
attribute='sub_area'(EAV)에 저장, 공용 설비는 "P6-1,P6-2" 형식 + 토큰 매칭.

- 백엔드: GetSubAreaListByAreaAsync/UpdateSubAreaAsync/SeedSubAreaAsync,
  SubAreaController(GET/PUT/POST seed), SubAreaDtos
- 포인트 삭제 개선: DeleteRealtimePointAsync(purgeHistory) — 잔여 0이면
  고아 메타데이터(desc/area/sub_area) 정리, opt-in 시 history_table 영구 삭제
- MCP: find_tags(sub_area=...) + _area_or_subarea_filter('-' 포함 시 자동 토큰 매칭)
- 문서: prompts/plant_context.md, AGENTS.md, SubArea-추가플랜.md
- UI: 포인트빌더 Sub-Area 관리 카드(조회/수정/seed) + 행별 이력 삭제 체크박스

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 06:31:51 +09:00
windpacer
302183c97e feat: P&ID 연결 분석, LLM 에이전트 모드, KB 확장, MCP 서버 리팩토링
- P&ID: 연결 분석 API, Prefix 규칙 관리, 카테고리 분류, DXF 그래프 빌드
- LLM: 대화 요약, tool card 영구 보존, 시계열 차트(uPlot), 에이전트 모드
- KB: 청크 미리보기, Field Instrument Inference, 인증/Qdrant 클라이언트
- MCP: 서버 기능 확장, 파이프라인 수정, timeout 개선
- Frontend: P&ID UI, LLM UI, KB UI, OPC UA Write 탭 추가
- 설정: AGENTS.md, plant_context, README, opencode.json 업데이트
- 정리: 진단 체크리스트 문서 삭제
2026-05-21 23:36:57 +09:00
windpacer
960bda4a3c fix: P&ID 배관번호 분류 오류 수정 (power_equipment → pipings)
- _PID_LINENO_FULL_RE: 7필드 고정 regex → 5~7필드 통합 (9차 P-9107-25A-F-n 등 미매칭 수정)
- _extract_pid_dxf_fast: 레이어 이름 하드코딩 제거 → FULL_RE 매칭 우선, LINENO 계열 레이어 힌트 보조
- MatchCategoryAsync: 배관번호 regex(_pipeLineNoRe) 체크를 prefix 룰보다 먼저 실행 → P-9117-20A-F-n 등이 power_equipment로 오분류되던 문제 수정
- pump extractor 프롬프트: 배관번호 SKIP/INCLUDE 예시 추가
- DB 기존 레코드 435건 pipings로 재분류 (직접 SQL)
- .claude/settings.json: LLM 모델명 하드코딩 제거

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 10:36:30 +09:00
windpacer
0ccec38c18 docs: CLAUDE.md 정리 — 변경 이력 압축 (963→81줄)
git 히스토리에 이미 있는 Phase 0~6 changelog, OPC UA 서버,
버그 수정 이력, 성능 분석, 구현 계획(Task 1~4) 전부 삭제.
작업 규칙 + 최신 1건(Phase 7)만 유지해 세션 컨텍스트 로드량 축소.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 07:13:39 +09:00
windpacer
d09ef95869 feat: Phase 6 보강 도구 5종 (find_tags, query_events, active_alarms, summarize_events, generate_status_report)
이벤트 중심 도구와 LLM 요약/보고서 도구를 추가해 채팅에서
"활성 알람", "교대 보고서", "이벤트 요약" 같은 운전원 요청을 처리.

신규 MCP 도구 (mcp-server/server.py):
- find_tags(query, area?, top_k):
    v_tag_summary 뷰 기반. base_tag 또는 description ILIKE 매칭.
    PV/SP/OP/설명/area 함께 반환.
- query_events(tag_name?, event_type?, area?, since?, until?, limit):
    event_history_table 필터 조회. since/until 미지정 시 최근 24h.
    event_type은 ALARM/TRIP/NORMAL/RUN/CHANGE 5종.
- active_alarms(area?, limit):
    DISTINCT ON (tagname)으로 태그별 최신 이벤트 추출 후
    ALARM/TRIP만 반환 (NORMAL 들어왔으면 자동 해제).
- summarize_events(since?, area?, event_type?, max_events, focus?):
    query_events 결과를 LLM에 넣어 한국어 6~10줄 구조화 요약
    (현황/알람/패턴/권고) + by_type/by_area 통계.
- generate_status_report(area?, hours):
    활성 알람 + 최근 이벤트 통계/표본을 LLM에 넘겨
    교대 보고서 형식(요약/알람/이벤트분석/권고) 마크다운 생성.
    윈도우 1~168시간, 기본 24시간.

공통:
- prepared statement(파라미터 바인딩)로 SQL 인젝션 방지
- SET statement_timeout = SQL_STATEMENT_TIMEOUT_MS 적용
- _DB_SCHEMA에 event_history_table 정의 추가 (NL2SQL 인지용)

시스템 프롬프트 (OllamaController):
- ToolGuideKo에 신규 5종 + search_kb + event_type 5종 명시
- run_sql 자동 가드(LIMIT/timeout) 안내 추가

검증:
- dotnet build: 경고 0건, 에러 0건
- python3 -m py_compile: OK
- import server 후 5개 도구 attribute 확인

런타임:
- mcp-server 재시작 시 신규 도구 자동 인식
- 클라이언트는 ListToolsAsync로 동적 수집 — 추가 작업 불필요

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 05:24:36 +09:00
windpacer
5a9d60e8a8 fix: Phase 5 진단 핫픽스 + Phase 6 run_sql 안전 가드
진단 보고서(plans/...phase5-사용자체크리스트.md) 기반 7건 코드 이슈
수정 + Phase 6 잔여 항목 중 최우선인 run_sql 가드 구현.

핫픽스:
- nl2sql_worker.py: _list_drawings 파싱 버그(문자열 분리) HIGH
- nl2sql_worker.py: 5개 async 함수 blocking DB 연결 → to_thread MED
- ExperionDbContext.cs: KB DDL의 {} 문자가 String.Format placeholder로
  오인되어 부팅 실패 → 별도 NpgsqlCommand 사용 HIGH
- KbIngestWorker: 단일 청크 임베딩 실패 시 전체 abort → 부분 인덱싱 LOW
- KbAuthService: 초기 비번 로그 평문 → 마스킹 + 콘솔 분리 출력 LOW
- KbQdrantClient: new HttpClient → IHttpClientFactory LOW
- OllamaController: plant_context.md 매 요청 파일 읽기 → mtime 캐시 LOW

Phase 6 — run_sql 가드:
- _validate_sql 강화: \b 단어 경계로 updated_at 오탐 제거, WITH 허용,
  TRUNCATE/COPY 추가, 다중 세미콜론 차단
- _apply_sql_guards: LIMIT 미지정 시 SELECT * FROM (...) _capped LIMIT 1000
- _execute_sql_internal: 매 호출 SET statement_timeout = 30000
- SQL_MAX_ROWS / SQL_STATEMENT_TIMEOUT_MS 환경변수화
- 응답 JSON에 row_limit 필드 추가
- nl2sql_worker.py의 _run_sql / _query_with_nl에도 동일 적용

기타:
- .gitignore: storage/ 추가 (KB 업로드 원본 디렉토리)
- opencode.json: 모델 항목을 실제 서빙 모델(Qwen3.6-27B-FP8 / 256K)로 동기화

검증:
- dotnet build: 경고 0건, 에러 0건
- python3 -m py_compile: OK
- _apply_sql_guards / _validate_sql 스모크 테스트 통과

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 05:18:06 +09:00
windpacer
908bfe151f feat: Knowledge Base RAG 시스템 + 채팅 LLM 개선 (Phase 0~5 완료)
- KB RAG 전체 파이프라인: 업로드, 파싱(xlsx/pdf/docx/text), 임베딩, Qdrant 인덱싱
- KB 관리 UI(14번 탭): 로그인, 문서 목록, 업로드, 삭제, 재인덱스
- OllamaController: 한글 시스템 프롬프트, plant_context.md 외부 파일화, SSE tool_start/tool_result 이벤트
- 프론트: 툴 실행 카드, KB 인용 링크, 표 자동 렌더, 추천 질문 칩
- nl2sql_worker: history_table.recorded_at 사용, tag_metadata 응답 개선
- DB: KB 테이블 5개 DDL + 시드, pgcrypto 확장
2026-05-13 20:22:27 +09:00
windpacer
35136ba91e feat: 로컬 LLM 채팅 기능 추가 (Ollama + vLLM, 스트리밍, MCP 도구 호출)
- OllamaController: Ollama/vLLM 프록시 API (채팅, 스트리밍, 모델 목록, 설정)
- UI: 새 대화 탭, 세션 관리, Markdown 렌더링, 스트리밍 응답
- vLLM: OpenAI-compatible API 지원, MCP function calling 통합
- Fix: McpClient DI 팩토리 등록 (HttpClient BaseAddress 문제 해결)
- Fix: llm-model.json 직렬화 JsonSerializer 사용
- Fix: nl2sql_worker KST 시간대 표시 (AT TIME ZONE Asia/Seoul)
- Program.cs: Ollama/vLLM HttpClient 등록 (1800s timeout)
2026-05-12 19:59:31 +09:00
windpacer
ab290df5cd fix: tag_metadata orphan cleanup on metadata reload 2026-05-11 22:02:29 +09:00
windpacer
5cacc5dbb5 feat: LLM 모델명 외부 설정 + 포인트 추가 기능
- mcp-server: 하드코딩된 모델명을 llm-model.json 기반 config.py로 외부화
- C#: AppendPointsAsync로 기존 데이터 유지하면서 포인트 추가
- C#: LlmConfigController로 LLM 모델명 조회/저장 API
- Frontend: LLM 설정 UI 카드 + 포인트 빌더에서 추가하기 버튼
2026-05-11 17:55:18 +09:00
windpacer
de728f013a docs: 이벤트 히스토리 기획서 및 MiniMax 진단 보고서 추가 2026-05-11 15:54:17 +09:00
windpacer
c6e284404c feat: 디지털 이벤트 히스토리 기능 추가 (event_history_table, DigitalEventDetectorService, API, UI) 2026-05-11 15:48:00 +09:00
windpacer
7330711499 chore: 프로젝트 파일 구조 정리 - 루트 파일 폴더별 이동, 테스트/구버전 삭제
루트 파일 정리:
- DXF/P&ID 관련 → dxf-graph/
- fastTable 관련 → fastTable/
- plan/ → plans/ 통합 (최신 버전 유지)
- 테스트 출력 파일, 구버전 프로젝트 삭제
- 불필요한 루트 문서 삭제
2026-05-10 17:39:58 +09:00
windpacer
f73ec217ad feat: 포인트빌더 그룹화 UI + 미리보기/선택적 적용 기능
기존 단일 조건(name/dataType) 방식에서 그룹별 패턴 기반 방식으로 개편.
컨트롤러/아날로그/디지털/사용자정의 5개 그룹에 대해 태그 패턴, 속성 체크박스, DataType을 각각 설정 가능.
미리보기(PREVIEW) API 추가하여 조건에 매칭되는 포인트를 확인 후 선택적으로 적용 가능.
2026-05-10 17:22:37 +09:00
windpacer
05e2156843 mcp-server warning clear 2026-05-09 04:28:10 +09:00
windpacer
9b87ad13a0 feat: pv 값 파싱 헬퍼 parseEnumPv() 추가, 포인트빌더 테이블 적용 2026-05-08 18:11:05 +09:00
windpacer
f01ab13ab9 feat: v_tag_summary 뷰에서 state descriptor JOIN 제거, 고아 데이터 DELETE 추가 2026-05-08 18:10:55 +09:00
windpacer
831390d59d feat: MetaAttributes에서 state0~7descriptor 제거, 주석 동시 업데이트 2026-05-08 18:10:45 +09:00
windpacer
e923aab43b opencode 로 바꾸고 작업전 커밋 2026-05-08 17:22:10 +09:00
windpacer
15c17522c8 MCP-서버 리팩토링 후 P&ID 추출 테스트전 다른 기능 확인 후 커밋 2026-05-04 10:35:13 +09:00
windpacer
a0404b1fee chore: .gitignore에 Python 캐시 및 가상환경 무시 규칙 추가 2026-05-03 03:58:23 +09:00
windpacer
f71ec310e4 feat: P&ID 그래프 파이프라인 및 MCP 서버 개선
- P&ID 그래프 파이프라인 구현 (py)
  - pid_geometric_extractor.py: 기하학적 특징 추출
  - pid_intelligent_mapper.py: 태그 매핑
  - pid_topology_builder.py: 위상 구축
  - test_pipeline_phase2.py, test_pipeline_phase3.py: 테스트

- MCP 서버 개선
  - server.py: 멀티프로세싱 지원
  - pipeline/: 분석, 추출, 매핑, 위상 모듈 추가

- C# P&ID 그래프 서비스
  - PidGraphDtos.cs: DTO 정의
  - PidGraphService.cs: 비즈니스 로직
  - PidGraphController.cs: API 컨트롤러

- OPC UA 서비스 개선
  - ExperionOpcServerService.cs
  - ExperionRealtimeService.cs
  - ExperionFastService.cs

- MCP 클라이언트 및 호스팅 서비스 개선
  - McpClient.cs
  - McpServerHostedService.cs

- 웹 UI 개선
  - pid_graph_view.html: P&ID 그래프 뷰어
  - pid-viewer.js: 뷰어 로직
  - app.js: 메인 앱
  - pid_graph.css: 스타일

- 프로젝트 설정 업데이트
  - ExperionCrawler.csproj
  - Program.cs
2026-05-03 03:50:20 +09:00
windpacer
30182bf020 feat: implement P&ID extraction and tag mapping, update MCP server and web UI 2026-05-02 14:56:04 +09:00
windpacer
fb11359b4c 2026년 4월 30일 Stable State 2026-04-30 08:16:21 +09:00
windpacer
c0f32177bf fix: TimescaleDB hypertable 오류 수정 - fast_record 테이블의 복합 키 설정 2026-04-29 18:46:54 +09:00
windpacer
38c0d3c888 docs: fastSession 오류 수정 내용 문서화 2026-04-29 18:44:33 +09:00
windpacer
6689612b3b fix: fastSession 시작 시 엔티티 변경 오류 수정 - CreateFastSessionAsync에서 Status를 Pending에서 Running으로 변경 2026-04-29 18:43:02 +09:00
windpacer
86dd268dab fix(#fastRecord): 프론트엔드 API 호출 경로를 /api/pointbuilder/points로 수정 2026-04-29 17:34:03 +09:00
windpacer
0ec94946f2 fix(#fastRecord): GetPoints API 응답 키를 items로 변경하여 프론트엔드와 호환성 확보 2026-04-29 17:32:14 +09:00
windpacer
cf0cf68fdd docs(#12): step12.md 사전/사후 확인 항목 업데이트 2026-04-29 10:10:51 +09:00