- 히스토리 로드 기능 구현 (loadFromHistory, fillFormFromHistory)
- 클라이언트 사이드 필수값 밸리데이션 추가
- 응답 본문 \xXX UTF-8 바이트 시퀀스 디코딩 (PHP 스택트레이스 한글 깨짐 해결)
- sidebar에 data-operation-id 속성 추가
- history-drawer 함수 연결 수정
- Flow Tester 변수 바인딩 개선
- 마이그레이션 파일 통합 정리
- ApiTokenService: API 서버 토큰 교환 서비스 추가
- AuthService: 로그인 성공 시 API 토큰 교환 연동
- 레이아웃: 세션 토큰을 localStorage에 동기화 (FCM 사용)
- config/services.php: exchange_secret 설정 추가
환경변수 필요: INTERNAL_EXCHANGE_SECRET (API와 동일)
- HTMX 응답 에러 수정: JSON 래핑 대신 HTML 직접 반환
- MenuController, GlobalMenuController의 index 메소드 수정
- index.blade.php, global-index.blade.php의 JSON 파싱 로직 제거
- 메뉴 options 필드 검증 추가
- StoreMenuRequest, UpdateMenuRequest에 options 필드 추가
- section 변경이 정상 저장되도록 수정
- 개발도구 메뉴 하드코딩 제거, DB 기반 동적 렌더링
- sidebar.blade.php에서 하드코딩된 메뉴 제거
- tools-menu.blade.php 컴포넌트 신규 생성
- section=tools 메뉴가 하단 고정 영역에 동적 표시
- Config, Service, Controller, View 생성
- Model 4개 (admin_api_* 테이블 참조)
- 3-Panel 레이아웃 (sidebar, request, response)
- HTMX 기반 동적 UI
- 마이그레이션은 api/ 프로젝트에서 관리
- 리스트/상세 페이지에 재전송 버튼 추가
- 인증 방식 선택: 토큰 직접 입력 / 사용자 선택(Sanctum 토큰 발급)
- 환경별 API URL 변환 (API_BASE_URL 설정)
- X-API-KEY 헤더 자동 추가 (FLOW_TESTER_API_KEY 사용)
- 성공/실패 상태 배너 표시
- 세션에 토큰 저장하여 다음 재전송 시 자동 입력
- 재전송 성공 시 1초 후 페이지 새로고침
- 에러만 필터 옵션 추가 (4xx+5xx)
- MeetingLogService: processUploadedFile 메서드 추가
- MeetingLogController: uploadFile 엔드포인트 추가
- routes/api.php: /api/meeting-logs/upload 라우트 추가
- meeting-summary.blade.php: 드래그앤드롭 파일 업로드 UI 구현
- refreshMeetingList 함수로 목록 새로고침 처리
- 소프트 삭제된 필드 목록에 표시 (withTrashed)
- 삭제된 필드 시각적 구분 (빨간 배경, '삭제됨' 배지)
- 필드 복원 기능 추가 (restore API)
- 필드 영구 삭제 기능 추가 (forceDelete API)
- 체크박스 선택 및 일괄 삭제 기능 추가
- 시스템 필드 삭제 제한 해제
- 커스텀 모달 적용 (showConfirm, showDeleteConfirm)
- MeetingLog 모델 (BelongsToTenant, SoftDeletes)
- GoogleCloudService (GCS 업로드, STT API)
- MeetingLogService (Claude API 요약)
- MeetingLogController (HTMX/JSON 듀얼 응답)
- 순수 Tailwind CSS UI 구현
- API 라우트 8개 엔드포인트 등록
## 주요 변경사항
### 1. 시스템 필드 정의 DB 마이그레이션
- 기존 하드코딩된 Constants/SystemFieldDefinitions.php 제거
- 신규 Models/SystemFieldDefinition.php 모델 추가
- system_field_definitions 테이블 기반 동적 관리
### 2. 테이블 등록 시 자동 필드 생성
- DB 실제 테이블 목록에서 선택하여 등록
- MySQL INFORMATION_SCHEMA에서 컬럼 정보 자동 조회
- COLUMN_COMMENT를 필드명(한글)으로 사용
- IS_NULLABLE로 필수 여부 자동 설정
- 시스템 컬럼(id, tenant_id, timestamps 등) 자동 제외
### 3. 필드명 동기화 기능
- 기존 등록된 테이블의 필드명을 DB COMMENT로 업데이트
- POST /source-tables/{table}/sync-field-names API 추가
### 4. 시딩 상태 계산 수정
- getFieldCountFor(): is_seed_default=true인 필드만 카운트
- getTotalFieldCountFor(): 전체 활성 필드 카운트 (신규)
- "제외" 필드가 있어도 시딩 완료 상태 정상 표시
### 5. UI 개선
- 시스템 필드 정의 탭에서 테이블별 관리
- 테이블 헤더에 "필드명 동기화", "삭제" 버튼 추가
- 테이블 선택 모달에서 COMMENT(한글명) 표시
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## 주요 변경사항
- BizCertController: 내부 API (OCR, CRUD)
- BizCertOcrService: Claude Vision API 연동, Tesseract.js 지원
- BizCert 모델 및 FormRequest 추가
- config/services.php에 Claude API 설정 추가
## 프론트엔드
- business-ocr.blade.php: layouts.app 레이아웃 적용
- JS/AI 토글 모드 (Tesseract.js / Claude Vision)
- 이미지 전처리 추가 (그레이스케일, 대비 강화, 이진화)
- SweetAlert2 연동 (토스트, 삭제 확인)
## API 엔드포인트
- POST /api/biz-cert/ocr - OCR 처리
- GET /api/biz-cert - 목록 조회
- POST /api/biz-cert - 저장
- DELETE /api/biz-cert/{id} - 삭제
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 필터 적용 시 오래된 순 정렬 (시간순 추적 용이)
- 상세 페이지 그룹 요청 섹션: 접힌 상태 기본, 메서드별 뱃지
- 리스트 아이콘 버튼 (상세, AI 복사), 세로 중앙 정렬
- 응답 바디 슬래시 이스케이프 처리
- 시스템 alert를 커스텀 Tailwind 모달로 교체
- 파라미터 표시: URL 아래에 key=value 형식으로 표시
- 아코디언 기능: row 클릭 시 요청 헤더/응답 바디 확장 표시
- 요청 헤더: 각 항목별 한 줄 포맷 (key: value)
- 아이콘 버튼: 상세(눈), AI 복사(복사) 아이콘으로 변경
- AI 복사: 에러(400+) 로그에만 AI 분석 복사 버튼 표시
- 레이아웃: 테이블 컬럼 고정 너비, 셀 중간 정렬
- 아코디언 스타일: 테두리 추가, 배경색 조정
- 모든 로그 삭제(truncate) 기능 추가
레거시 5130.sam.kr/ai_sam의 Google Gemini Live API 음성 어시스턴트를
MNG 프로젝트로 이전 (React → Pure JS + Blade)
변경 내용:
- GeminiController: API 키 제공 엔드포인트 추가
- sam-ai-live.js: LiveManager, AudioVisualizer ES 모듈
- sam-ai-menu.blade.php: 전면 재작성 (Tailwind UI)
- 환경변수: GEMINI_API_KEY, GEMINI_PROJECT_ID 추가
기능:
- 실시간 음성 입출력 (WebAudio API)
- UI 도구: navigateToPage, searchDocuments
- 오디오 시각화 (Canvas API)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 사이드바 UI 텍스트 변경 (실험실 → R&D Labs)
- 라우트 및 컨트롤러 주석 업데이트
- AI/Management 컨트롤러 docblock 추가
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- AIController 생성 (12개 메서드)
- ManagementController 생성 (11개 메서드)
- A 메뉴 플레이스홀더 템플릿 12개 생성
- 사업자등록증 OCR, 웹 녹음 AI 요약, 회의록 AI 요약
- 업무협의록 AI 요약, 운영자용 챗봇, Vertex RAG 챗봇
- 테넌트 지식 업로드, 테넌트 챗봇, SAM AI 메뉴 이동
- SAM AI 알람음 제작, GPS 출퇴근 관리, 기업개황 조회
- M 메뉴 플레이스홀더 템플릿 11개 생성
- 바로빌 테넌트 관리, 전자세금계산서 전략, 전자세금계산서
- 사업자등록번호 진위 확인, 영업관리 & 매니저 미팅관리
- 카드 세무항목 매칭 전략, 한국 카드사 API 보고서
- 카드 사용내역 수집 후 매칭, 계좌입출금 내역 조회 API
- 영업관리 시나리오, 매니저 시나리오
- 라우트 23개 추가 (AI 12개, Management 11개)
- 사이드바 메뉴 라우트 연결 완료
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- ItemField 모델 및 SystemFieldDefinitions 상수 클래스 추가
- ItemFieldSeedingService: 시스템 필드 시딩/초기화/커스텀 필드 CRUD
- ItemFieldController (API): HTMX 기반 시딩 상태, 커스텀 필드 관리
- 커스텀 필드 수정 기능 (시스템 필드는 source_table/field_key 수정 불가)
- 레거시 데이터 표시 개선: 소스 테이블 비어있으면 '미지정' 배지
- 필드 키 정책 변경: 숫자로 시작 허용 (영문/숫자/밑줄)
- AI 문의하기: 시딩 오류 보고서 생성 기능
- 사이드바에 품목기준 필드 관리 메뉴 추가
- 메뉴 영구삭제 시 연관 권한도 함께 삭제
- 삭제 정보를 archived_records에 저장 (복구용)
- 메뉴 데이터, 권한 목록, 역할-권한 연결 정보 보관
- batch_id를 순수 UUID로 변경 (컬럼 크기 제한 해결)
- 영구삭제 시 에러 메시지 토스트로 표시 (하위 메뉴 존재 등)
- 글로벌 메뉴 영구삭제 시 참조 테넌트 메뉴 연결 해제
- forceDeleteMenu: 연관 권한(menu:{id}.*) 함께 삭제
- forceDeleteGlobalMenu: 연관 권한 삭제 + 테넌트 메뉴 참조 해제
- 삭제 전 권한/역할 연결 정보를 archived_records에 저장
- Controller 반환값에 삭제된 권한 정보 포함
- 주의 필요 항목을 팀별(이슈)/담당자별(태스크) 카드로 그룹핑
- 반응형 그리드 레이아웃 적용 (1~4열)
- 펼침 블록에 회사/팀/담당자/프로젝트/마감일 상세 정보 표시
- 조회 조건 변경: 마감 3일 이내 → 이번 주 마감 + 마감 초과 + 긴급
- 헤더 뱃지 "마감임박" → "이번주"로 변경
- checkRolePermission(): user_roles 테이블 쿼리 추가
- traceUsersWithPermission(): user_roles 기반 역할 사용자 조회 추가
- getUserRoles(): model_has_roles + user_roles 통합 조회로 변경
- 중복 제거 및 결과 병합 처리
- getMenuTree()에 TenantScope 비활성화 추가 (HQ 관리자가 다른 테넌트 메뉴 조회 가능)
- getRolePermissions()에 user_roles 테이블 쿼리 추가 (테넌트별 역할 권한 반영)
- hasRolePermission(), getUserPermissionCounts()도 user_roles 포함하도록 수정
- 사용자 버튼의 data-context-menu를 아이디 뱃지로 이동 (클릭 이벤트 충돌 해결)
- ImportService에 importIssuesToTask 메서드 추가
- ImportController에 importIssues 액션 추가
- ImportIssuesRequest FormRequest 생성
- POST /api/admin/pm/import/task/{taskId}/issues 라우트 추가
- import.blade.php UI에 '기존 작업에 이슈 추가' 모드 추가
- ImportProjectRequest에 tasks 레벨 검증 규칙 보완
- 사용자 목록에 테넌트 컬럼 추가 (기본 테넌트 인디고 배지)
- UserService: tenants 관계 eager loading 추가
- 컨텍스트 메뉴 우클릭 → 좌클릭 변경 (캡처링 방식)
- 전체 blade 파일 툴팁 통일: '클릭하여 메뉴 열기'
- flow-tester 오류 분석 문구 수정
Daily Logs 페이지:
- 미완료 항목 상태 변경 시 카드 유지 (done만 제거)
- 카드 정렬을 날짜 오래된 순으로 변경
- 요약 내용 nl2br 적용 및 접힘 시 2줄 제한
- 아코디언 항목 담당자별 그룹핑으로 통합
Project Management 페이지:
- 오늘의 활동을 칸반(3열) → 담당자 카드 스타일로 변경
- 완료 항목도 함께 표시 (취소선, 초록 배지)
- 미완료/완료 건수 헤더에 표시
- ApiLogCapturer 추가: 플로우 실행 중 API 로그 캡처
- resolveBaseUrl() 추가: .env 환경변수 기반 baseUrl 지원
- 실행 상세 페이지: 스텝별 접기/펼치기 기능 (성공=접힘, 실패=펼침)
- JSON 가이드 및 예제 플로우 최신화
- AI 프롬프트 템플릿 업데이트
- bindExpectVariables() 추가: expect jsonPath 값에 변수 바인딩 적용
- areNumericEqual() 추가: 숫자 타입 유연 비교 ("2" == 2)
- VariableBinder: setVariables()에서 {{$env.XXX}} 환경변수 치환 지원
- FlowExecutor: 스텝 실행 결과에 reason, description, expect 필드 추가
- buildResultReason(): 성공/실패 이유 자동 생성
- 부정 테스트(400, 404 등) 시 예상대로 반환됨을 명시
- 400: 유효성 검증 실패 확인
- 404: 리소스 미존재 확인
- 409: 충돌 상태 확인
- 403: 권한 거부 확인
- run-detail.blade.php: 예상 상태코드, 이유, 스텝 설명 표시 UI
- 테이블 헤더 스타일 통일 (menus, roles, permissions, boards 등)
- 권한 매트릭스 체크박스/버튼 크기 20x20으로 표준화
- 스크럼 항목 추가/수정 모달 통합 (코드 중복 제거)
- daily-logs API URL 경로 수정 (/pm/ 제거)
- 타임존 Asia/Seoul로 변경
- flow-tester 액션 아이콘 크기 조정