agent-safety-oss 1.6.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,20 @@ All notable changes to `agent-safety-oss` are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.6.1] — 2026-06-10
9
+
10
+ 문서를 처음 보는 분 기준으로 다시 정리하고, 도구가 표시하는 버전 오류를 바로잡았습니다.
11
+
12
+ ### 수정
13
+
14
+ - 런타임이 표시하는 버전(`src/version.ts`)이 v1.5.0 으로 남아 있던 문제를 바로잡았습니다. MCP 서버 선언·CLI 배너·프로젝트 정보 조회가 이제 실제 패키지 버전을 표시합니다. 재발하지 않도록 release 전 자동 검사에 버전 일치 항목을 추가했습니다.
15
+
16
+ ### 개선
17
+
18
+ - README 를 처음 보는 분 기준으로 다시 정리했습니다 — 목차 추가, 여러 곳에 흩어져 있던 시작 방법·구성 요소 안내를 한 곳으로 통합, 브라우저 입력 폼 화면 캡처 추가.
19
+ - 공공 데이터 source 상세 매핑과 향후 추가 후보를 [docs/DATA_SOURCES.md](./docs/DATA_SOURCES.md) 로 정리했습니다.
20
+ - AI 코딩 도구(Claude Code·Codex CLI·Cursor 등) 공통 안내 파일 `AGENTS.md` 를 추가했습니다 — 외부 기여자가 어떤 도구를 쓰든 같은 규칙을 안내받습니다.
21
+
8
22
  ## [1.6.0] — 2026-05-30
9
23
 
10
24
  브라우저 입력 폼을 명령어 한 줄로 띄울 수 있습니다 — 설치도 빌드도 필요 없습니다.
package/README.md CHANGED
@@ -5,12 +5,16 @@
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)
6
6
  [![Node](https://img.shields.io/badge/node-%3E%3D20.19-brightgreen)](https://nodejs.org)
7
7
  [![MCP](https://img.shields.io/badge/MCP-1.x-purple)](https://modelcontextprotocol.io)
8
- [![Release](https://img.shields.io/badge/release-v1.6.0-blue.svg)](./CHANGELOG.md)
8
+ [![Release](https://img.shields.io/badge/release-v1.6.1-blue.svg)](./CHANGELOG.md)
9
9
  [![Tools](https://img.shields.io/badge/MCP%20tools-92-orange.svg)](./docs/IDENTITY.md)
10
10
 
11
11
  **건설현장의 법정 안전문서 작성을 더 빠르고 정확하게.** 산안법·기준규칙·중처법·KOSHA 기술지원규정(가이드)을 기반으로 안전관리자와 현장소장의 문서 작성과 검토를 돕는 오픈소스 도구입니다.
12
12
 
13
- [정체성](./docs/IDENTITY.md) · [Claude Desktop 설정](./docs/SETUP_CLAUDE_DESKTOP.md) · [Codex CLI 설정](./docs/SETUP_CODEX.md) · [기술 상세 (운영 온톨로지)](./docs/OPERATIONAL-ONTOLOGY.md)
13
+ [정체성](./docs/IDENTITY.md) · [Claude Desktop 설정](./docs/SETUP_CLAUDE_DESKTOP.md) · [Codex CLI 설정](./docs/SETUP_CODEX.md) · [데이터 출처](./docs/DATA_SOURCES.md) · [기술 상세 (운영 온톨로지)](./docs/OPERATIONAL-ONTOLOGY.md)
14
+
15
+ ---
16
+
17
+ **목차** — [한 눈에](#한-눈에--안전관리자가-받는-가치) · [왜 필요한가](#왜-필요한가) · [무엇이 들어 있나](#무엇이-들어-있나) · [시작하기](#시작하기) · [사용 예시](#사용-예시) · [자동작성 흐름](#어떻게-동작하나--자동작성-흐름) · [현장 운영 흐름](#현장-운영-흐름) · [공공 데이터 연결](#공공-데이터-연결) · [근거 등급과 검수](#신뢰성--근거-등급과-검수) · [검증 상태](#검증-상태) · [현재 한계](#현재-한계) · [기술 상세](#기술-상세--온톨로지-설계) · [기여](#개발--기여) · [라이선스](#라이선스)
14
18
 
15
19
  ---
16
20
 
@@ -24,41 +28,65 @@
24
28
  | "**추락 산재 발생 보고**" 요청 | 산안법 §54·§57 등 법령 자동 인용 + 사고조사 기술지침 자동 인용 + 시간순 제출 순서 안내 |
25
29
  | "**MSDS 비치대장**" 요청 | 산안법 §114·§115 + KOSHA 화학물질 경고표지 가이드 + 보호구 자동 표시 |
26
30
 
31
+ **누구를 위한 것인가:**
32
+
33
+ - **안전관리자** — TBM·위험성평가·작업계획서·MSDS 대장·사고보고서 초안 작성, 법령·KOSHA Guide·양식·보존기간 일괄 확인, LLM 작성 문서의 법령 인용·필수 항목 검수
34
+ - **현장소장** — 오늘 작업의 위험·보호구·작업 전 조치·작업허가 필요 여부 확인, 사고 발생 시 보고 순서와 제출 문서를 시간순으로 확인
35
+ - **신규 담당자** — 전임자의 폴더와 기억에 묶인 맥락을 `profile` · `drafts` · `documents` · `photos` · `issues` · `actions` · `reports` 로 이어받기
36
+
27
37
  **작성 주체는 안전관리자, AI 비서는 옆에서 보조** (법적 판단·서명·제출 책임은 사람). 본 도구가 의무 문서를 자동 생성하더라도 결재 전 안전관리자 검토는 필수입니다.
28
38
 
29
- ---
39
+ ![브라우저 입력 폼 — 법령 근거·KOSHA 가이드가 자동 채워진 작성 화면과 실시간 미리보기](./docs/assets/viewer-form.png)
40
+
41
+ *`npx -y agent-safety-oss viewer` 한 줄로 뜨는 브라우저 입력 폼 — 적용 법령 조문·보존기간·결재선이 자동 채워지고, 오른쪽에 결재 가능한 문서가 실시간 미리보기됩니다. ([B. 브라우저 입력 폼](#b-브라우저-입력-폼--ai-비서cli-불필요) 참조)*
42
+
43
+ ## 왜 필요한가
44
+
45
+ 건설 현장의 안전관리 자료는 보통 이렇게 흩어져 있습니다.
46
+
47
+ ```text
48
+ 법령 조문 · KOSHA Guide · 위험성평가표 · TBM 일지 · 작업계획서
49
+ 작업허가서 · MSDS · 현장 사진 · 개선조치 · 보고서
50
+ ```
51
+
52
+ 자료는 존재하지만 서로 연결되지 않으면, 안전관리 품질은 시스템보다 담당자의 경험과 기억에 의존합니다. `agent-safety-oss`는 이 자료들을 다음 사슬로 연결합니다.
53
+
54
+ ```text
55
+ 작업 -> 위험요인 -> 통제대책 -> 법령 근거 -> 문서 -> 증빙 -> 개선조치 -> 보고
56
+ ```
57
+
58
+ LLM은 이 그래프를 보고 문서를 작성하거나 설명할 수 있지만, 법령 근거를 임의로 만들지는 않습니다. 필수 항목이 비어 있으면 결재 불가 또는 보강 필요로 표시하고, 근거 없는 법적 표현은 검수 도구가 잡아냅니다.
30
59
 
31
60
  ## 무엇이 들어 있나
32
61
 
33
62
  | 영역 | 내용 |
34
63
  |---|---|
35
- | **<!-- INV:DOCUMENTS_TOTAL -->19<!-- /INV:DOCUMENTS_TOTAL -->종 법정 안전관리 문서** | TBM · 작업계획서 · 위험성평가 · MSDS · 산재조사표 등 매일·매주·매월 작성하는 양식 |
36
- | **법령 <!-- INV:LAW_BUNDLE_COUNT -->10<!-- /INV:LAW_BUNDLE_COUNT -->건 핵심 조문** | 산안법 · 시행령 · 시행규칙 · 기준규칙 · 중처법 · 중처법 시행령 · 위험성평가 고시 · 건진법 등 합계 <!-- INV:LAW_ARTICLES -->76<!-- /INV:LAW_ARTICLES -->조 (전체 1,310조 중 건설안전 실무 핵심만 발췌. 전체 법령은 [법제처](https://www.law.go.kr) 직접 참조) |
64
+ | **<!-- INV:DOCUMENTS_TOTAL -->19<!-- /INV:DOCUMENTS_TOTAL -->종 법정 안전관리 문서** | TBM · 작업계획서 · 위험성평가 · MSDS · 산재조사표 등 매일·매주·매월 작성하는 양식. docId 마스터 <!-- INV:DOCID_MASTER -->94<!-- /INV:DOCID_MASTER -->개 (19종 + 사이클·범위·발주처별 변형) |
65
+ | **법령 <!-- INV:LAW_BUNDLE_COUNT -->10<!-- /INV:LAW_BUNDLE_COUNT -->건 핵심 조문** | 산안법 · 시행령 · 시행규칙 · 기준규칙 · 중처법 · 중처법 시행령 · 위험성평가 고시 · 건진법 등 합계 <!-- INV:LAW_ARTICLES -->79<!-- /INV:LAW_ARTICLES -->조 (전체 1,310조 중 건설안전 실무 핵심만 발췌. 전체 법령은 [법제처](https://www.law.go.kr) 직접 참조). 마지막 동기화: <!-- INV:LAW_LAST_SYNC -->2026-06-08<!-- /INV:LAW_LAST_SYNC --> |
37
66
  | **KOSHA 기술지원규정 (가이드) <!-- INV:KOSHA_BODY -->1,039<!-- /INV:KOSHA_BODY -->건** | 한국산업안전보건공단 발행 기술지침 전체 본문 (인터넷 없이 즉시 검색·인용) |
38
- | **양식 <!-- INV:FORMS_TOTAL -->132<!-- /INV:FORMS_TOTAL -->개** | 고용노동부·KOSHA 공식 HWP / PDF / XLSX 원본 + 자동 생성 Markdown 양식 |
39
- | **위험·통제 정보망** | 작업 위험요인 통제대책 법령 근거 문서 자동 연결 ("의미 연결망" 자세히는 [기술 상세](./docs/OPERATIONAL-ONTOLOGY.md)) |
67
+ | **양식 <!-- INV:FORMS_TOTAL -->132<!-- /INV:FORMS_TOTAL -->개** | 고용노동부·KOSHA 공식 HWP <!-- INV:FORMS_HWP -->14<!-- /INV:FORMS_HWP --> / PDF <!-- INV:FORMS_PDF -->23<!-- /INV:FORMS_PDF --> / XLSX <!-- INV:FORMS_XLSX -->1<!-- /INV:FORMS_XLSX --> 원본 + 자동 생성 Markdown 양식 <!-- INV:FORMS_MD -->94<!-- /INV:FORMS_MD -->개 (일부는 라이선스상 공식 다운로드 URL 안내로 대체) |
68
+ | **MCP 도구 <!-- INV:TOOLS_TOTAL -->92<!-- /INV:TOOLS_TOTAL -->개** | 없이 바로 쓰는 <!-- INV:TOOLS_KEYLESS -->85<!-- /INV:TOOLS_KEYLESS -->개 + 공공 API 필요 <!-- INV:TOOLS_KEYREQ -->7<!-- /INV:TOOLS_KEYREQ -->개 (그중 <!-- INV:TOOLS_PLACEHOLDER -->2<!-- /INV:TOOLS_PLACEHOLDER -->개는 공공누리 라이선스 사유로 다운로드 URL 안내만 하는 placeholder) |
69
+ | **위험·통제 정보망** | 작업 → 위험요인 → 통제대책 → 법령 근거 → 문서 자동 연결. 그래프 노드 <!-- INV:GRAPH_TOTAL -->3,369<!-- /INV:GRAPH_TOTAL -->개 (카테고리 1단계 <!-- INV:GRAPH_TOPLEVEL -->2,212<!-- /INV:GRAPH_TOPLEVEL --> + KOSHA Guide 1,039) · 엣지 약 <!-- INV:GRAPH_EDGES -->32,963<!-- /INV:GRAPH_EDGES --> · WorkActivity <!-- INV:GRAPH_ACTIVITIES -->41<!-- /INV:GRAPH_ACTIVITIES --> / Hazard <!-- INV:GRAPH_HAZARDS -->38<!-- /INV:GRAPH_HAZARDS --> / Control <!-- INV:GRAPH_CONTROLS -->50<!-- /INV:GRAPH_CONTROLS --> |
40
70
 
41
- → 위 자료들이 **서로 연결**되어 있어, "굴착 작업"이라는 한 단어만 알면 적용 법령·KOSHA 가이드·위험·통제·양식이 자동으로 따라옵니다.
71
+ → 위 자료들이 **서로 연결**되어 있어, "굴착 작업"이라는 한 단어만 알면 적용 법령·KOSHA 가이드·위험·통제·양식이 자동으로 따라옵니다. (패키지 버전: <!-- INV:VERSION -->1.6.1<!-- /INV:VERSION -->)
42
72
 
43
- ---
73
+ ## 시작하기
44
74
 
45
- ## 어떻게 시작하나?
75
+ Node.js 20.19 이상이 필요합니다 ([nodejs.org](https://nodejs.org)). 환경에 맞는 경로 하나를 고르세요.
46
76
 
47
77
  | 사용자 환경 | 진입 경로 | 난이도 |
48
78
  |---|---|:---:|
49
- | **Claude Desktop / OpenAI Codex CLI 이미 쓰는 분** (개발자 · IT 익숙) | 아래 "5초 진입" 카드 그대로 복사 AI 비서가 본 도구 호출 | ⭐ 5초 |
50
- | **AI 비서가 뭔지 모르는 분** (안전관리자 · 현장소장) | [📖 Claude Desktop 설정 가이드](./docs/SETUP_CLAUDE_DESKTOP.md) 그림 따라하기 | ⭐⭐ 5분 |
51
- | **브라우저 폼만 쓰고 싶은 분** (AI 비서·CLI 모두 불필요) | `npx -y agent-safety-oss viewer` 한 줄 → 브라우저에 입력 폼 자동 표시 → 빈 칸만 채우면 본문 자동 생성 → MD 다운로드 (아래 "브라우저 입력 폼" 섹션) | ⭐ 10초 |
52
-
53
- ---
79
+ | **Claude Desktop / OpenAI Codex CLI 이미 쓰는 분** (개발자 · IT 익숙) | [A. AI 비서에 연결](#a-ai-비서에-연결--claude-desktop--openai-codex-cli) 설정 블록 복사 | ⭐ 5초 |
80
+ | **AI 비서가 뭔지 모르는 분** (안전관리자 · 현장소장) | [📖 Claude Desktop 설정 가이드](./docs/SETUP_CLAUDE_DESKTOP.md) 그림 따라하기 | ⭐⭐ 5분 |
81
+ | **브라우저 폼만 쓰고 싶은 분** (AI 비서·CLI 모두 불필요) | [B. 브라우저 입력 폼](#b-브라우저-입력-폼--ai-비서cli-불필요) `npx` | ⭐ 10초 |
82
+ | **터미널 · CI · 개발자** | [C. 터미널 · 개발자](#c-터미널--ci--개발자) | ⭐ |
54
83
 
55
- ## 5초 진입 — Claude Desktop / OpenAI Codex CLI 사용자
84
+ ### A. AI 비서에 연결 — Claude Desktop / OpenAI Codex CLI
56
85
 
57
- > **"AI 비서 도구 연결 표준" (MCP) 을 지원하는 앱** (Claude Desktop · OpenAI Codex CLI) 의 설정 파일에 아래 한 블록을 추가하면 끝납니다. <!-- INV:TOOLS_TOTAL -->92<!-- /INV:TOOLS_TOTAL -->개 도구가 모두 동작합니다 (<!-- INV:TOOLS_KEYLESS -->85<!-- /INV:TOOLS_KEYLESS -->개는 인터넷 없이 동작, <!-- INV:TOOLS_KEYREQ -->7<!-- /INV:TOOLS_KEYREQ -->개만 공공 OpenAPI 키 필요).
86
+ > **"AI 비서 도구 연결 표준" (MCP) 을 지원하는 앱**의 설정 파일에 아래 한 블록을 추가하면 끝납니다. <!-- INV:TOOLS_TOTAL -->92<!-- /INV:TOOLS_TOTAL -->개 도구가 모두 동작합니다 (<!-- INV:TOOLS_KEYLESS -->85<!-- /INV:TOOLS_KEYLESS -->개는 인터넷 없이 동작, <!-- INV:TOOLS_KEYREQ -->7<!-- /INV:TOOLS_KEYREQ -->개만 공공 OpenAPI 키 필요).
58
87
 
59
- ### Claude Desktop (JSON 설정)
88
+ **Claude Desktop (JSON 설정)** — 설정 파일에 다음을 추가:
60
89
 
61
- 설정 파일에 다음을 추가:
62
90
  ```json
63
91
  {
64
92
  "mcpServers": {
@@ -76,9 +104,8 @@
76
104
 
77
105
  저장 후 Claude Desktop 을 완전 종료·재시작하면 도구 목록에 `agent-safety-oss` 가 보입니다.
78
106
 
79
- ### OpenAI Codex CLI (TOML 설정)
107
+ **OpenAI Codex CLI (TOML 설정)** — `~/.codex/config.toml` 에 다음을 추가:
80
108
 
81
- `~/.codex/config.toml` 에 다음을 추가:
82
109
  ```toml
83
110
  [mcp_servers.agent-safety-oss]
84
111
  command = "npx"
@@ -87,174 +114,33 @@ args = ["-y", "agent-safety-oss", "serve"]
87
114
 
88
115
  Codex CLI 재시작 후 `codex mcp list` 로 등록 확인.
89
116
 
90
- 자세한 안내:
91
- - [docs/SETUP_CLAUDE_DESKTOP.md](./docs/SETUP_CLAUDE_DESKTOP.md)
92
- - [docs/SETUP_CODEX.md](./docs/SETUP_CODEX.md)
93
- - 더 많은 예시: [examples/](./examples/)
94
-
95
- ## 누구를 위한 것인가
96
-
97
- ### 안전관리자
98
-
99
- - TBM, 위험성평가, 작업계획서, 작업허가서, MSDS 대장, 점검표, 사고보고서 초안을 만든다.
100
- - 법령, KOSHA Guide, 위험요인, 통제대책, 양식, 보존기간을 한 번에 확인한다.
101
- - LLM이 작성한 문서의 법령 인용, 필수 항목, 결재 가능 여부를 검수한다.
102
- - 사진 증빙, 안전 이슈, 개선조치, 운영 보고서를 로컬 기록으로 남긴다.
103
-
104
- ### 현장소장
105
-
106
- - 오늘 작업의 위험, 필요한 보호구, 작업 전 조치, 작업허가 필요 여부를 빠르게 본다.
107
- - 사고 발생 시 보고 순서와 제출 문서를 시간순으로 확인한다.
108
- - 안전관리자가 부재하거나 겸임일 때도 최소한의 안전관리 문서 흐름을 놓치지 않는다.
109
-
110
- ### 신규 담당자
111
-
112
- - 기존 담당자의 폴더 구조와 기억에 묶인 맥락을 `profile`, `drafts`, `documents`, `photos`, `issues`, `actions`, `reports`로 이어받는다.
113
-
114
- ## 왜 필요한가
115
-
116
- 건설 현장의 안전관리 자료는 보통 이렇게 흩어져 있습니다.
117
-
118
- ```text
119
- 법령 조문
120
- KOSHA Guide
121
- 위험성평가표
122
- TBM 일지
123
- 작업계획서
124
- 작업허가서
125
- MSDS
126
- 현장 사진
127
- 개선조치
128
- 보고서
129
- ```
130
-
131
- 자료는 존재하지만 서로 연결되지 않으면, 안전관리 품질은 시스템보다 담당자의 경험과 기억에 의존합니다. `agent-safety-oss`는 이 자료들을 다음 사슬로 연결합니다.
132
-
133
- ```text
134
- 작업 -> 위험요인 -> 통제대책 -> 법령 근거 -> 문서 -> 증빙 -> 개선조치 -> 보고
135
- ```
136
-
137
- LLM은 이 그래프를 보고 문서를 작성하거나 설명할 수 있지만, 법령 근거를 임의로 만들지는 않습니다. 필수 항목이 비어 있으면 결재 불가 또는 보강 필요로 표시하고, 근거 없는 법적 표현은 검수 도구가 잡아냅니다.
138
-
139
- ## 자동작성 흐름
140
-
141
- 사용자는 자연어로 요청하고, Agent는 MCP 도구를 순서대로 호출합니다. 핵심은 문서를 바로 "그럴듯하게" 쓰는 것이 아니라, 그래프 컨텍스트를 먼저 조립하고, 초안을 만들고, 검수한 뒤 보관하는 것입니다.
142
-
143
- ```mermaid
144
- flowchart LR
145
- U[안전관리자 / 현장소장] --> A[Claude Desktop / Codex CLI]
146
- A --> G[get_safety_document_guide]
147
- A --> C[assemble_doc_context]
148
- A --> P[get_site_profile]
149
- G --> D[generate_safety_document]
150
- C --> D
151
- P --> D
152
- D --> R[review_safety_document]
153
- R -->|보강 필요| U
154
- R -->|결재 가능| S[archive_safety_document]
155
- ```
156
-
157
- 자동작성은 다음 순서로 이해하면 됩니다.
117
+ 소스 빌드본을 직접 연결할 때는 `command: "node"`, `args: ["/absolute/path/to/agent-safety-oss/build/cli.js", "serve"]` 로 바꾸면 됩니다.
158
118
 
159
- 1. 사용자가 "오늘 굴착 작업 TBM 만들어줘"처럼 요청한다.
160
- 2. Agent가 `get_safety_document_guide`로 양식 구조와 필수 항목을 확인한다.
161
- 3. Agent가 `assemble_doc_context`로 법령, 위험요인, 통제대책, KOSHA Guide, 관련 문서를 가져온다.
162
- 4. 등록된 현장 프로파일이 있으면 `get_site_profile` 결과로 사업장명, 현장명, 결재선을 채운다.
163
- 5. `generate_safety_document`가 초안을 만든다.
164
- 6. `review_safety_document`가 필수 항목, 법령 인용, 결재 가능 여부를 점검한다.
165
- 7. 사용자가 보강하거나 승인하면 `archive_safety_document`로 로컬에 보관한다.
119
+ 자세한 안내: [docs/SETUP_CLAUDE_DESKTOP.md](./docs/SETUP_CLAUDE_DESKTOP.md) · [docs/SETUP_CODEX.md](./docs/SETUP_CODEX.md) · 많은 예시: [examples/](./examples/)
166
120
 
167
- 예를 들어 TBM 요청은 내부적으로 이런 흐름이 됩니다.
168
-
169
- ```text
170
- 사용자:
171
- 오늘 4층 발코니 거푸집 양중 작업 TBM 만들어줘.
172
-
173
- Agent:
174
- get_safety_document_guide({ docId: "daily_tbm" })
175
- assemble_doc_context({ docId: "daily_tbm" })
176
- get_site_profile()
177
- generate_safety_document({ docId: "daily_tbm", draft: ... })
178
- review_safety_document({ docId: "daily_tbm", draft: ... })
179
-
180
- 결과:
181
- TBM 초안
182
- 주요 위험요인
183
- 통제대책
184
- 필요 보호구
185
- 법령/KOSHA 근거
186
- 미작성 필수 항목
187
- 결재 가능 여부
188
- ```
189
-
190
- 폼 UI와 함께 쓰는 경우에는 `render_a2ui_form`, `save_form_draft`, `load_form_draft`를 같이 사용합니다.
191
-
192
- ```text
193
- render_a2ui_form docId 기반 입력 폼 생성
194
- save_form_draft Agent 또는 사용자가 입력한 값을 임시 저장
195
- load_form_draft 사용자가 수정한 값을 Agent가 다시 읽음
196
- submit_safety_document A2UI 입력값을 실제 문서 생성 흐름으로 제출
197
- generate_safety_document
198
- review_safety_document
199
- archive_safety_document
200
- ```
201
-
202
- ## 브라우저 입력 폼 — CLI 안 익숙해도 됨
121
+ ### B. 브라우저 입력 AI 비서·CLI 불필요
203
122
 
204
123
  > **CLI(명령어 입력)가 익숙하지 않은 안전관리자·현장소장이 가장 편하게 쓰는 방법.** 브라우저 화면에 입력 양식이 뜨고, 법령 근거·KOSHA 가이드·위험요인·통제대책이 미리 채워져 있습니다. 빈 칸만 채우면 결재 가능한 문서가 자동 생성됩니다.
205
124
 
206
125
  실행 — **한 줄이면 됩니다** (설치·빌드·git clone 모두 불필요):
207
126
 
208
127
  ```bash
209
- # Node.js 20.19+ 만 미리 설치 (https://nodejs.org). 그 외 준비 없음.
210
128
  npx -y agent-safety-oss viewer
211
129
  # → 브라우저가 자동으로 http://localhost:5174 열림
212
130
  # (자동으로 안 열리면 위 주소를 브라우저 주소창에 직접 입력)
213
131
  # 다른 포트로 열려면: PORT=5180 npx -y agent-safety-oss viewer
214
132
  ```
215
133
 
216
- > 소스를 직접 받아 개발·수정하는 경우엔 `git clone` 후 `npm install && npm run build && npm run mcp:viewer` 로도 같은 화면이 뜹니다.
217
-
218
134
  브라우저에서 보이는 화면:
219
135
 
220
136
  1. **폼 종류 선택** (TBM 회의록 / 굴착 작업계획서 / 정기 위험성평가 / MSDS 비치대장 등 <!-- INV:DOCUMENTS_TOTAL -->19<!-- /INV:DOCUMENTS_TOTAL -->종)
221
- 2. **자동 표시되는 영역** (그대로 결재 인용 가능):
222
- - 적용 법령 조문 (산안법 / 기준규칙 / 위평고시 등) — 본문 그대로 발췌
223
- - 적용 KOSHA 기술지원규정 (가이드) 평균 5건
224
- - 위험요인 + 통제대책 + 필요 보호구
137
+ 2. **자동 표시되는 영역** (그대로 결재 인용 가능) — 적용 법령 조문 본문 발췌 · 적용 KOSHA 가이드 평균 5건 · 위험요인 + 통제대책 + 필요 보호구
225
138
  3. **빈 칸 입력** — 작업일·작업명·참석자 등 사용자 입력 필요한 항목만 표시
226
139
  4. **본문 생성** 버튼 → 결재 가능한 문서 자동 작성
227
140
  5. **검수** → 빠진 필수 항목 / 결재 가능 여부 / 환각 차단 검증
228
141
  6. **MD 다운로드** 또는 LocalStorage 보관
229
142
 
230
- > PDF 출력이 필요하면 다운로드한 `.md` 를 [Pandoc](https://pandoc.org/) · 한글/한컴오피스 · [Typora](https://typora.io/) 등으로 변환합니다.
231
-
232
- > 이 폼은 [Google A2UI](https://github.com/google/a2ui) (Agent-UI 표준) 기반으로 만들어졌습니다. 기술 상세는 [`docs/OPERATIONAL-ONTOLOGY.md`](./docs/OPERATIONAL-ONTOLOGY.md) 참조.
233
-
234
- ## 빠른 시작
235
-
236
- Node.js 20.19 이상이 필요합니다. 위 "어떻게 시작하나?" 표의 세 경로에 맞춰 고르세요.
237
-
238
- ### A. AI 비서 (Claude Desktop · OpenAI Codex CLI) — 안전관리자·현장소장 권장
239
-
240
- 위 "5초 진입" 카드의 설정 한 블록이면 끝입니다 (`npx` 가 패키지를 자동으로 받아 실행 → 별도 설치 불필요). 소스 빌드본을 직접 연결할 때는:
241
-
242
- ```json
243
- {
244
- "mcpServers": {
245
- "agent-safety-oss": {
246
- "command": "node",
247
- "args": ["/absolute/path/to/agent-safety-oss/build/cli.js", "serve"]
248
- }
249
- }
250
- }
251
- ```
252
-
253
- ### B. 브라우저 입력 폼 — AI 비서·CLI 없이
254
-
255
- ```bash
256
- npx -y agent-safety-oss viewer # 브라우저에 입력 폼 자동 표시 (위 "브라우저 입력 폼" 섹션)
257
- ```
143
+ > PDF 출력이 필요하면 다운로드한 `.md` 를 [Pandoc](https://pandoc.org/) · 한글/한컴오피스 · [Typora](https://typora.io/) 등으로 변환합니다. 이 폼은 [Google A2UI](https://github.com/google/a2ui) (Agent-UI 표준) 기반입니다.
258
144
 
259
145
  ### C. 터미널 · CI · 개발자
260
146
 
@@ -277,79 +163,7 @@ node build/cli.js serve
277
163
 
278
164
  CLI 사용 예시는 [`examples/`](./examples/) 폴더의 `mcp-list-tools.sh`, `search-laws.sh`, `generate-tbm.sh` 참고.
279
165
 
280
- ### 공공 데이터 연결 — 13 source 통합
281
-
282
- 본 OSS 는 한국 공공 OpenAPI 와 portal 13 source 를 그래프 작성 보조에 통합합니다.
283
-
284
- **연결된 공공 데이터 source**:
285
-
286
- | Source | 영역 | 호출 도구 |
287
- |---|---|---|
288
- | KOSHA OneAPI 15121001 / 15121008 | 재해사례 + 첨부 | `search_accident_cases` · `get_accident_case_attachments` |
289
- | KOSHA OneAPI 15133935 | 건설 사망사고 통계 | `search_construction_fatal_accidents` |
290
- | KOSHA OneAPI 15119137 | 전 업종 사망사고 | `search_all_fatal_accidents` |
291
- | KOSHA OneAPI 15139398 | 안전보건자료실 (외국인 13개국어) | `search_safety_materials` · `get_foreign_worker_resource_links` |
292
- | KOSHA OneAPI 15001197 | MSDS (화학물질안전) | `search_msds` |
293
- | KOSHA OneAPI 15139497 | 보호구 안전인증 (KCs) | `search_ppe_certification` |
294
- | KOSHA OneAPI 15123696 | 안전보건법령 스마트검색 (AI 유사어) | `search_safety_law_smart` |
295
- | KOSHA OneAPI 15144147 | KOSHA Guide PDF 다운로드 (현재 번들 <!-- INV:KOSHA_BODY -->1,039<!-- /INV:KOSHA_BODY -->) | (offline 번들로 대체) |
296
- | KOSHA OneAPI 15087828 | 건설 공종 분류 (구조 분류) | `analyze_construction_work_risks` (fallback) |
297
- | KOSHA OneAPI 15116595 | 공종 ↔ KOSHA Guide 매핑 | `analyze_construction_work_risks` (fallback) |
298
- | KOSHA OneAPI 15140383 | SIF 아카이브 (사망 고위험요인) | `search_sif_archive` |
299
- | KOSHA portal24 | 안전보건자료실 8,976건 (OPS·동영상·교안) | `search_kosha_archive` · `list_kosha_archive_facets` · `get_kosha_archive_files` |
300
- | 법제처 OpenAPI (law.go.kr) | 안전관리 법령 10건 핵심 조문 발췌 (전문 아님) | (offline 번들 + 향후 동적 확장) |
301
-
302
- **키 없이 즉시 동작 — <!-- INV:TOOLS_KEYLESS -->85<!-- /INV:TOOLS_KEYLESS -->개 도구**:
303
- - <!-- INV:LAW_BUNDLE_COUNT -->10<!-- /INV:LAW_BUNDLE_COUNT --> 법령 본문 번들 검색 (`search_safety_laws`, `get_safety_law_article`, `list_core_safety_laws`)
304
- - <!-- INV:KOSHA_BODY -->1,039<!-- /INV:KOSHA_BODY --> KOSHA Guide 본문 offline 조회 (`get_kosha_guide_md`)
305
- - 그래프 traversal (`assemble_doc_context`, `generate_safety_document`, `review_safety_document`)
306
- - 19종 법정문서 작성 보조 (위험성평가·작업계획서·TBM·MSDS·작업허가서 등)
307
- - 로컬 현장 기록 (사진·이슈·조치·보고)
308
-
309
- **키 필요 — <!-- INV:TOOLS_KEYREQ -->7<!-- /INV:TOOLS_KEYREQ -->개 도구** (KOSHA OneAPI 실시간 호출):
310
-
311
- | 도구 | 영역 |
312
- |---|---|
313
- | `search_accident_cases` | 국내 재해사례 검색 |
314
- | `get_accident_case_attachments` | 재해사례 첨부 자료 |
315
- | `search_construction_fatal_accidents` | 건설 사망사고 |
316
- | `search_all_fatal_accidents` | 전 업종 사망사고 |
317
- | `search_safety_materials` | 안전보건자료 (외국인 자료 포함) |
318
- | `search_msds` | MSDS (화학물질) |
319
- | `search_ppe_certification` | 보호구 안전인증 |
320
-
321
- #### 키 발급 — 2 경로
322
-
323
- | 경로 | 방법 |
324
- |---|---|
325
- | **A. 라텔웍스 발행 키** | <https://ratelworks.co.kr/agenthq/api-key> 에서 무료 즉시 발급 (`ASF_xxxx_yyyy`). 단일 키로 7 도구 + KOSHA portal 호출 |
326
- | **B. 자체 data.go.kr 키** | data.go.kr 에서 KOSHA OpenAPI 즉시 신청·발급. `.env` 에 `DATA_GO_KR_KEY=...` 설정 |
327
-
328
- 자세한 설정: `.env.example` + [docs/SETUP_CLAUDE_DESKTOP.md](./docs/SETUP_CLAUDE_DESKTOP.md).
329
-
330
- #### 향후 추가 가능 공공 데이터
331
-
332
- 본 OSS 는 현재 13 source 를 통합했으나, 다음 공공 데이터도 그래프 통합 후보입니다 (contributor 환영):
333
-
334
- - **법제처 OpenAPI** 동적 확장 (안전 외 인접 법령 — 산업안전기준에 관한 규칙 외)
335
- - **KOSHA-MS** 안전보건경영시스템 인증 사업장 명부
336
- - **KCs/KCs Self** 안전인증·자율안전인증 통합 (현재 보호구만)
337
- - **고용노동부** 산업재해 통계연보 (분기·연도별 추이)
338
- - **국토교통부** 건설공사 안전관리 종합정보망 (CSI)
339
- - **환경부** 화학물질 정보 (PRTR · 유해성 등급)
340
- - **소방청** 위험물 안전관리 정보
341
- - **건설근로자공제회** 안전교육 이수 자료
342
-
343
- 추가 요청은 [Issue](https://github.com/ratelworks/agent-safety-oss/issues) 로 제안 가능.
344
-
345
- #### 키 등록 (A 경로)
346
-
347
- | 방법 | 동작 |
348
- |---|---|
349
- | 방법 1 — Claude 에 한국어로: "라텔웍스에서 받은 AgentHQ 키 `ASF_xxxx` 를 등록해줘" | `link_company_key` 도구가 호출되어 `~/.agent-safety-oss/company-key.json` 저장 |
350
- | 방법 2 — 환경변수 | `AGENTHQ_API_KEY=ASF_xxxx` |
351
-
352
- ## 실제 사용 예시
166
+ ## 사용 예시
353
167
 
354
168
  Claude Desktop이나 Codex에서 자연어로 요청합니다.
355
169
 
@@ -375,124 +189,91 @@ Claude Desktop이나 Codex에서 자연어로 요청합니다.
375
189
  Agent는 내부적으로 다음 도구들을 조합합니다.
376
190
 
377
191
  ```text
378
- assess_my_obligations
379
- list_safety_documents_by_cycle
380
- get_safety_document_guide
381
- assemble_doc_context
382
- generate_safety_document
383
- review_safety_document
384
- verify_safety_basis
385
- archive_safety_document
386
- ```
387
-
388
- ## 현장 운영 흐름
389
-
390
- ### 1. 현장 프로파일 등록
391
-
392
- 한 번 등록하면 <!-- INV:DOCUMENTS_TOTAL -->19<!-- /INV:DOCUMENTS_TOTAL -->종 법정문서 (<!-- INV:DOCID_MASTER -->94<!-- /INV:DOCID_MASTER --> docId 마스터) 의 사업장명, 현장명, 대표자, 안전관리자, 현장소장, 결재선이 자동 채워집니다.
393
-
394
- ```text
395
- register_site
396
- register_project
397
- register_person
398
- register_equipment
399
- register_contractor
400
- ```
401
-
402
- 예시 요청:
403
-
404
- ```text
405
- 우리 회사 사업장 정보를 등록해줘.
406
- 사업장명은 황룡건설, 대표자는 황한일이야.
407
- 현장은 천안 신축현장, 공사금액은 30억, 상시근로자는 12명이야.
408
- 안전관리자는 김안전, 현장소장은 이소장이야.
409
- ```
410
-
411
- ### 2. 의무 확인
412
-
413
- 사업장 규모, 공사금액, 업종, 공사 단계에 따라 적용 문서와 마감, 보관기간을 확인합니다.
414
-
415
- ```text
416
- assess_my_obligations
417
- list_safety_documents_by_cycle
418
- list_upcoming_duties
419
- query_applicability
420
- get_submission_info
421
- get_retention_status
192
+ assess_my_obligations 사업장 규모·공사금액 기반 의무 판정
193
+ list_safety_documents_by_cycle 작성 주기별 문서 목록
194
+ get_safety_document_guide 양식 구조 + 필수 항목
195
+ assemble_doc_context 법령·위험·통제·KOSHA Guide 근거 조립
196
+ generate_safety_document 결재 가능한 초안 합성
197
+ review_safety_document 필수 항목·법령 인용·결재 가능 여부 점검
198
+ verify_safety_basis 근거 없는 법적 표현 차단
199
+ archive_safety_document 로컬 보관
422
200
  ```
423
201
 
424
- ### 3. 문서 작성
202
+ ## 어떻게 동작하나 — 자동작성 흐름
425
203
 
426
- 문서 하나를 만들 법령, 위험요인, 통제대책, KOSHA Guide, 관련 문서, 보존기간을 그래프에서 조립합니다.
204
+ 핵심은 문서를 바로 "그럴듯하게" 쓰는 것이 아니라, **그래프 컨텍스트를 먼저 조립하고, 초안을 만들고, 검수한 뒤 보관**하는 것입니다.
427
205
 
428
- ```text
429
- get_safety_document_guide
430
- assemble_doc_context
431
- generate_safety_document
432
- export_drafted_document
433
- get_official_form
206
+ ```mermaid
207
+ flowchart LR
208
+ U[안전관리자 / 현장소장] --> A[Claude Desktop / Codex CLI]
209
+ A --> G[get_safety_document_guide]
210
+ A --> C[assemble_doc_context]
211
+ A --> P[get_site_profile]
212
+ G --> D[generate_safety_document]
213
+ C --> D
214
+ P --> D
215
+ D --> R[review_safety_document]
216
+ R -->|보강 필요| U
217
+ R -->|결재 가능| S[archive_safety_document]
434
218
  ```
435
219
 
436
- 자동작성에서 가장 중요한 도구는 `assemble_doc_context`와 `generate_safety_document`의 조합입니다. 전자는 LLM이 추측하지 않도록 근거를 모으고, 후자는 그 근거를 결재 가능한 Markdown 문서로 합성합니다.
220
+ 1. 사용자가 "오늘 굴착 작업 TBM 만들어줘"처럼 요청한다.
221
+ 2. Agent가 `get_safety_document_guide`로 양식 구조와 필수 항목을 확인한다.
222
+ 3. Agent가 `assemble_doc_context`로 법령, 위험요인, 통제대책, KOSHA Guide, 관련 문서를 가져온다.
223
+ 4. 등록된 현장 프로파일이 있으면 `get_site_profile` 결과로 사업장명, 현장명, 결재선을 채운다.
224
+ 5. `generate_safety_document`가 초안을 만든다.
225
+ 6. `review_safety_document`가 필수 항목, 법령 인용, 결재 가능 여부를 점검한다.
226
+ 7. 사용자가 보강하거나 승인하면 `archive_safety_document`로 로컬에 보관한다.
437
227
 
438
- ### 4. 검수
228
+ `assemble_doc_context`와 `generate_safety_document`의 조합이 핵심입니다 — 전자는 LLM이 추측하지 않도록 근거를 모으고, 후자는 그 근거를 결재 가능한 Markdown 문서로 합성합니다.
439
229
 
440
- 필수 항목 누락, 결재 가능 여부, 법령 인용 실존 여부, 근거 없는 법적 표현을 점검합니다.
230
+ UI([B. 브라우저 입력 폼](#b-브라우저-입력-폼--ai-비서cli-불필요))와 함께 쓰는 경우에는 `render_a2ui_form` (입력 생성) `save_form_draft` / `load_form_draft` (임시 저장·재로딩) → `submit_safety_document` (실제 문서 생성 흐름으로 제출) 를 같이 사용합니다.
441
231
 
442
- ```text
443
- review_safety_document
444
- verify_safety_basis
445
- query_legal_basis
446
- query_penalty
447
- ```
232
+ ## 현장 운영 흐름
448
233
 
449
- ### 5. 사진, 이슈, 개선조치
234
+ | 단계 | 무엇을 하나 | 핵심 도구 |
235
+ |---|---|---|
236
+ | **1. 현장 프로파일 등록** | 한 번 등록하면 <!-- INV:DOCUMENTS_TOTAL -->19<!-- /INV:DOCUMENTS_TOTAL -->종 법정문서의 사업장명·현장명·대표자·안전관리자·현장소장·결재선이 자동 채워짐 | `register_site` · `register_project` · `register_person` · `register_equipment` · `register_contractor` |
237
+ | **2. 의무 확인** | 사업장 규모·공사금액·업종·공사 단계에 따라 적용 문서와 마감, 보관기간 확인 | `assess_my_obligations` · `list_safety_documents_by_cycle` · `list_upcoming_duties` · `query_applicability` · `get_submission_info` · `get_retention_status` |
238
+ | **3. 문서 작성** | 법령·위험요인·통제대책·KOSHA Guide·관련 문서·보존기간을 그래프에서 조립해 초안 작성 | `get_safety_document_guide` · `assemble_doc_context` · `generate_safety_document` · `export_drafted_document` · `get_official_form` |
239
+ | **4. 검수** | 필수 항목 누락, 결재 가능 여부, 법령 인용 실존 여부, 근거 없는 법적 표현 점검 | `review_safety_document` · `verify_safety_basis` · `query_legal_basis` · `query_penalty` |
240
+ | **5. 사진 · 이슈 · 개선조치** | 법정문서와 별개로 현장 운영 기록 (사진 증빙 → 이슈 → 조치 → 보고) | `upload_photo_evidence` · `register_safety_issue` · `record_corrective_action` · `complete_action` · `generate_safety_report` |
450
241
 
451
- 법정문서와 별개로 현장 운영 기록을 남깁니다.
242
+ 프로파일 등록 예시 요청:
452
243
 
453
244
  ```text
454
- upload_photo_evidence
455
- register_safety_issue
456
- record_corrective_action
457
- complete_action
458
- generate_safety_report
245
+ 우리 회사 사업장 정보를 등록해줘.
246
+ 사업장명은 황룡건설, 대표자는 황한일이야.
247
+ 현장은 천안 신축현장, 공사금액은 30억, 상시근로자는 12명이야.
248
+ 안전관리자는 김안전, 현장소장은 이소장이야.
459
249
  ```
460
250
 
461
- ## 들어 있는
462
-
463
- - 패키지 버전: <!-- INV:VERSION -->1.6.0<!-- /INV:VERSION -->
464
- - MCP 도구: <!-- INV:TOOLS_TOTAL -->92<!-- /INV:TOOLS_TOTAL -->개 = 키 없이 바로 쓰는 <!-- INV:TOOLS_KEYLESS -->85<!-- /INV:TOOLS_KEYLESS -->개 + 공공 API 키 필요 <!-- INV:TOOLS_KEYREQ -->7<!-- /INV:TOOLS_KEYREQ -->개 (그중 <!-- INV:TOOLS_PLACEHOLDER -->2<!-- /INV:TOOLS_PLACEHOLDER -->개는 공공누리 라이선스 사유로 다운로드 URL 안내만 하는 placeholder)
465
- - 19종 법정 안전관리 문서: <!-- INV:DOCUMENTS_TOTAL -->19<!-- /INV:DOCUMENTS_TOTAL --> (TBM·작업계획서·위험성평가·MSDS·산재조사표 등)
466
- - 법정의무 문서 마스터 (`legal-duty-master.json`): <!-- INV:DOCID_MASTER -->94<!-- /INV:DOCID_MASTER --> docId (19종 + 사이클·범위·발주처별 변형)
467
- - 양식 인덱스 (`forms-map.json`): <!-- INV:FORMS_TOTAL -->132<!-- /INV:FORMS_TOTAL --> formId — HWP <!-- INV:FORMS_HWP -->14<!-- /INV:FORMS_HWP --> / PDF <!-- INV:FORMS_PDF -->23<!-- /INV:FORMS_PDF --> / XLSX <!-- INV:FORMS_XLSX -->1<!-- /INV:FORMS_XLSX --> (공식 양식) + 자동 생성 MD <!-- INV:FORMS_MD -->94<!-- /INV:FORMS_MD -->개. HWP/PDF/XLSX 중 일부는 라이선스상 공식 다운로드 URL 안내로 대체.
468
- - 그래프 노드: 카테고리 1단계 <!-- INV:GRAPH_TOPLEVEL -->2,212<!-- /INV:GRAPH_TOPLEVEL --> + KOSHA Guide 1,039 (서브디렉토리 포함 재귀) = 전체 **<!-- INV:GRAPH_TOTAL -->3,369<!-- /INV:GRAPH_TOTAL -->** · 엣지 약 <!-- INV:GRAPH_EDGES -->32,963<!-- /INV:GRAPH_EDGES --> (정확 카운트는 `npm run audit:strict`)
469
- - 핵심 작업/위험/통제: WorkActivity <!-- INV:GRAPH_ACTIVITIES -->41<!-- /INV:GRAPH_ACTIVITIES --> / Hazard <!-- INV:GRAPH_HAZARDS -->38<!-- /INV:GRAPH_HAZARDS --> / Control <!-- INV:GRAPH_CONTROLS -->50<!-- /INV:GRAPH_CONTROLS -->
470
- - 법령 본문 번들: **<!-- INV:LAW_BUNDLE_COUNT -->10<!-- /INV:LAW_BUNDLE_COUNT -->개 MD** — 산안법·시행령·시행규칙·기준규칙·중처법·중처법 시행령·위험성평가 고시·건진법·건진법 시행령·건진법 시행규칙 (합계 약 <!-- INV:LAW_ARTICLES -->76<!-- /INV:LAW_ARTICLES -->조). 마지막 동기화: <!-- INV:LAW_LAST_SYNC -->2026-05-18<!-- /INV:LAW_LAST_SYNC --> (`src/ontology/safety-laws/*.md`)
251
+ ## 공공 데이터 연결
471
252
 
472
- ## (기술 상세) 온톨로지 설계 개발자·연구자용
253
+ OSS 는 한국 공공 OpenAPI 와 portal **13 source** 를 그래프 작성 보조에 통합합니다. source별 상세 매핑과 향후 추가 후보는 [docs/DATA_SOURCES.md](./docs/DATA_SOURCES.md) 참조.
473
254
 
474
- > 섹션부터는 **개발자·기술 연구자용 상세**입니다. 안전관리자·현장소장이 도구를 사용하는 내용을 필요는 없습니다.
255
+ **키 없이 즉시 동작 <!-- INV:TOOLS_KEYLESS -->85<!-- /INV:TOOLS_KEYLESS -->개 도구**: 법령 <!-- INV:LAW_BUNDLE_COUNT -->10<!-- /INV:LAW_BUNDLE_COUNT -->건 본문 번들 검색 · KOSHA Guide <!-- INV:KOSHA_BODY -->1,039<!-- /INV:KOSHA_BODY -->건 offline 조회 · 그래프 traversal · 19종 법정문서 작성 보조 · 로컬 현장 기록.
475
256
 
476
- 프로젝트는 계층 (Layer) 으로 안전 정보를 표현합니다.
257
+ **키 필요 <!-- INV:TOOLS_KEYREQ -->7<!-- /INV:TOOLS_KEYREQ -->개 도구** (KOSHA OneAPI 실시간 호출):
477
258
 
478
- | 계층 | 역할 | 예 |
479
- |---|---|---|
480
- | Semantic Layer (의미 계층) | 안전관리 객체와 관계 정의 | Site, Project, WorkActivity, Hazard, Control, LegalArticle, SafetyDocument |
481
- | Kinetic Layer (실행 계층) | 그래프 객체에 대한 실행 가능한 MCP 도구 | `generate_safety_document`, `review_safety_document`, `register_safety_issue` |
482
- | Dynamic Layer (동적 계층) | LLM과 하네스의 상황 해석 + 도구 조합 | Claude Desktop, OpenAI Codex CLI |
259
+ | 도구 | 영역 |
260
+ |---|---|
261
+ | `search_accident_cases` · `get_accident_case_attachments` | 국내 재해사례 검색 + 첨부 자료 |
262
+ | `search_construction_fatal_accidents` · `search_all_fatal_accidents` | 건설 / 업종 사망사고 |
263
+ | `search_safety_materials` | 안전보건자료 (외국인 자료 포함) |
264
+ | `search_msds` | MSDS (화학물질) |
265
+ | `search_ppe_certification` | 보호구 안전인증 |
483
266
 
484
- 핵심 의미 사슬 (안전 정보 자동 연결):
267
+ **키 발급 2 경로:**
485
268
 
486
- ```text
487
- WorkActivity (작업) → Hazard (위험) → Control (통제대책)
488
- SafetyDocument (문서) → LegalArticle (법령 조문)
489
- SafetyDocument → KOSHA Guide (가이드)
490
- PhotoEvidence (사진) → SafetyIssue (이슈) → CorrectiveAction (조치) → SafetyReport (보고)
491
- ```
269
+ | 경로 | 방법 |
270
+ |---|---|
271
+ | **A. 라텔웍스 발행 키** | <https://ratelworks.co.kr/agenthq/api-key> 에서 무료 즉시 발급 (`ASF_xxxx_yyyy`). 단일 키로 7 도구 + KOSHA portal 호출 |
272
+ | **B. 자체 data.go.kr 키** | data.go.kr 에서 KOSHA OpenAPI 즉시 신청·발급. `.env` 에 `DATA_GO_KR_KEY=...` 설정 |
492
273
 
493
- 채택 표준: JSON-LD 1.1, RDF/OWL, SKOS, PROV-O, schema.org, ISO 45001. 런타임은 무거운 그래프 DB 없이 로컬 파일 + MCP 도구로 동작합니다. 자세한 운영 온톨로지 상세는 [`docs/OPERATIONAL-ONTOLOGY.md`](./docs/OPERATIONAL-ONTOLOGY.md), 핵심 객체 13종은 [`docs/IDENTITY.md`](./docs/IDENTITY.md) 참조.
274
+ **키 등록 (A 경로):** Claude 한국어로 "라텔웍스에서 받은 AgentHQ `ASF_xxxx` 등록해줘" 라고 하면 `link_company_key` 도구가 `~/.agent-safety-oss/company-key.json` 저장합니다. 또는 환경변수 `AGENTHQ_API_KEY=ASF_xxxx`. 자세한 설정: `.env.example` + [docs/SETUP_CLAUDE_DESKTOP.md](./docs/SETUP_CLAUDE_DESKTOP.md).
494
275
 
495
- ## 근거 등급
276
+ ## 신뢰성 — 근거 등급과 검수
496
277
 
497
278
  | 근거 | 등급 | 문서에서의 의미 |
498
279
  |---|---|---|
@@ -500,11 +281,9 @@ PhotoEvidence (사진) → SafetyIssue (이슈) → CorrectiveAction (조치)
500
281
  | KOSHA Guide | recommended | 기술적 권고와 작업 방법 |
501
282
  | 재해사례, 안전보건자료, MSDS, 통계, 보호구 인증 | reference | 참고 자료와 교육 자료 |
502
283
 
503
- LLM이 "의무", "반드시", "금지", "위반" 같은 표현을 쓰면 `verify_safety_basis`가 법령 근거를 요구합니다.
504
-
505
- ## 로컬 저장소
284
+ LLM이 "의무", "반드시", "금지", "위반" 같은 표현을 쓰면 `verify_safety_basis`가 법령 근거를 요구합니다. 근거가 없으면 unsupported, 등급이 어긋나면 partial 로 표시됩니다.
506
285
 
507
- 사용자 데이터는 기본적으로 로컬에 저장됩니다.
286
+ **로컬 저장소** — 사용자 데이터는 기본적으로 로컬에 저장됩니다 (디렉터리 `0o700`, 파일 `0o600` 권한).
508
287
 
509
288
  ```text
510
289
  ~/.agent-safety-oss/
@@ -518,58 +297,25 @@ LLM이 "의무", "반드시", "금지", "위반" 같은 표현을 쓰면 `verify
518
297
  traces/ 실행 추적
519
298
  ```
520
299
 
521
- 디렉터리는 `0o700`, 파일은 `0o600` 권한으로 생성됩니다.
522
-
523
300
  ## 검증 상태
524
301
 
525
302
  최근 검증 결과:
526
303
 
527
- - 운영 온톨로지: 38/38 통과
528
- - 그래프 추론: 5/5 통과
529
- - 그래프 recall / precision: 100% / 100%
530
- - ISO 45001 카테고리 일관성: 100%
531
- - strict graph audit: 통과
532
- - 필드 워크플로우: 4/4 시나리오, 29/29 단계 통과
533
- - 실제 입력 반응성: 4/4 시나리오 통과, 입력 문구 반영 S1 7/7 · S2 7/7 · S3 6/6 · S4 6/6
534
- - 현장 사용자 테스터: 안전관리자/현장소장 수기 체크리스트와 피드백 양식 생성
535
- - 생성 문서 품질: 평균 8.65/10
536
- - essence gate: 9/9 통과
537
- - lightweight gate: 4/4 통과
538
-
539
- 검증 명령:
540
-
541
- ```bash
542
- npm run typecheck
543
- npm run build
544
- npm run ontology:operational
545
- npm run mcp:test:graph
546
- npm run mcp:test:real-input
547
- npm run mcp:test:field-user
548
- npm run audit:strict
549
- npx tsx scripts/test/field-test-workflows.ts
550
- npx tsx scripts/quality/field-test-quality-eval.ts
551
- ```
552
-
553
- ## 현장 사용자 테스터
304
+ - 운영 온톨로지: 38/38 통과 · 그래프 추론: 5/5 통과 · 그래프 recall / precision: 100% / 100%
305
+ - ISO 45001 카테고리 일관성: 100% · strict graph audit: 통과
306
+ - 필드 워크플로우: 4/4 시나리오, 29/29 단계 통과 · 실제 입력 반응성: 4/4 시나리오 통과
307
+ - 생성 문서 품질: 평균 8.65/10 · essence gate: 9/9 통과 · lightweight gate: 4/4 통과
554
308
 
555
- 실제 안전관리자나 현장소장이 생성 문서를 검토하듯 테스트하려면 다음 명령을 실행합니다.
309
+ 핵심 검증 명령 (전체 목록과 CI 구성은 [CONTRIBUTING.md](./CONTRIBUTING.md) 참조):
556
310
 
557
311
  ```bash
558
- npm run mcp:test:field-user
559
- ```
560
-
561
- 결과는 `artifacts/test-results/field-user-tester/`에 생성됩니다. 시나리오에는 실제 입력값, MCP 생성 문서, 자동 검토 결과, 수기 체크리스트, 피드백 양식이 함께 들어갑니다.
562
-
563
- ```text
564
- 01-input.json 실제 현장 입력
565
- 02-generated.md 생성 문서
566
- 03-review.txt 자동 검토 결과
567
- 04-human-checklist.md 안전관리자/현장소장 수기 체크리스트
568
- 05-feedback-template.json 현장 피드백 기록 양식
569
- 06-auto-evaluation.json 자동 판정 결과
312
+ npm run typecheck && npm run build
313
+ npm run test # essence + lightweight + docs drift + smoke
314
+ npm run mcp:test:graph # 그래프 추론·일관성·효과
315
+ npm run audit:strict # 그래프 무결성 strict 감사
570
316
  ```
571
317
 
572
- 테스터는 자동 통과 여부를 제공하지만, 최종 판단은 `04-human-checklist.md`의 수기 점수와 현장 피드백을 우선합니다.
318
+ 실제 안전관리자나 현장소장이 생성 문서를 검토하듯 테스트하려면 `npm run mcp:test:field-user` 를 실행합니다. 결과는 `artifacts/test-results/field-user-tester/` 에 시나리오별로 생성됩니다 (실제 입력값 · 생성 문서 · 자동 검토 결과 · 수기 체크리스트 · 피드백 양식). 자동 통과 여부를 제공하지만, 최종 판단은 수기 체크리스트의 점수와 현장 피드백을 우선합니다.
573
319
 
574
320
  ## 현재 한계
575
321
 
@@ -579,7 +325,32 @@ npm run mcp:test:field-user
579
325
  - 사진 외 EvidenceType, 예를 들어 서명, 교육 참석, 제출 영수증, 점검 결과 증빙은 더 확장해야 합니다.
580
326
  - 최종 법적 판단, 서명, 제출 책임은 안전관리자와 사업장 책임자에게 있습니다.
581
327
 
582
- ## 개발 환경
328
+ ## 기술 상세 — 온톨로지 설계
329
+
330
+ > 이 섹션은 **개발자·기술 연구자용**입니다. 안전관리자·현장소장이 본 도구를 사용하는 데 이 내용을 알 필요는 없습니다.
331
+
332
+ 이 프로젝트는 세 계층 (Layer) 으로 안전 정보를 표현합니다.
333
+
334
+ | 계층 | 역할 | 예 |
335
+ |---|---|---|
336
+ | Semantic Layer (의미 계층) | 안전관리 객체와 관계 정의 | Site, Project, WorkActivity, Hazard, Control, LegalArticle, SafetyDocument |
337
+ | Kinetic Layer (실행 계층) | 그래프 객체에 대한 실행 가능한 MCP 도구 | `generate_safety_document`, `review_safety_document`, `register_safety_issue` |
338
+ | Dynamic Layer (동적 계층) | LLM과 하네스의 상황 해석 + 도구 조합 | Claude Desktop, OpenAI Codex CLI |
339
+
340
+ 핵심 의미 사슬 (안전 정보 자동 연결):
341
+
342
+ ```text
343
+ WorkActivity (작업) → Hazard (위험) → Control (통제대책)
344
+ SafetyDocument (문서) → LegalArticle (법령 조문)
345
+ SafetyDocument → KOSHA Guide (가이드)
346
+ PhotoEvidence (사진) → SafetyIssue (이슈) → CorrectiveAction (조치) → SafetyReport (보고)
347
+ ```
348
+
349
+ 채택 표준: JSON-LD 1.1, RDF/OWL, SKOS, PROV-O, schema.org, ISO 45001. 런타임은 무거운 그래프 DB 없이 로컬 파일 + MCP 도구로 동작합니다.
350
+
351
+ 상세 문서: [아키텍처](./docs/ARCHITECTURE.md) · [운영 온톨로지](./docs/OPERATIONAL-ONTOLOGY.md) · [핵심 객체 13종 (정체성)](./docs/IDENTITY.md) · [API 스펙](./docs/API-SPECS.md) · [JSON-LD 작성 가이드](./docs/JSONLD-AUTHORING-GUIDE.md)
352
+
353
+ ## 개발 · 기여
583
354
 
584
355
  ```bash
585
356
  git clone https://github.com/ratelworks/agent-safety-oss.git
@@ -590,6 +361,8 @@ npm run typecheck
590
361
  npm run mcp:tools
591
362
  ```
592
363
 
364
+ 기여 절차·코딩 규칙·PR 체크리스트는 [CONTRIBUTING.md](./CONTRIBUTING.md), 보안 신고는 [SECURITY.md](./SECURITY.md) 를 참조하십시오. 새 공공 데이터 통합 제안은 [Issue](https://github.com/ratelworks/agent-safety-oss/issues) 로 환영합니다.
365
+
593
366
  ## 제공 · 개발
594
367
 
595
368
  - **제공**: 황룡건설(주) 안전보건기획부 — 도메인 검증·현장 요구사항·시나리오 제공
@@ -34,5 +34,6 @@ export declare function searchArticles(query: string, options?: {
34
34
  limit?: number;
35
35
  }): Promise<LawArticle[]>;
36
36
  export declare function getArticle(ref: string, lawHint?: LawCode): Promise<LawArticle | null>;
37
+ export declare function guessLawCodeFromRef(lawPart: string): LawCode | undefined;
37
38
  export {};
38
39
  //# sourceMappingURL=safety-laws-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"safety-laws-loader.d.ts","sourceRoot":"","sources":["../../src/lib/safety-laws-loader.ts"],"names":[],"mappings":"AAsBA,QAAA,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAoDxF,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,SAAS,CAAC;AAgB7C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAAC;CACpE;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,QAAQ,IAAI,OAAO,EAAE,CAOpC;AAGD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAgD5E;AAQD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAgC7E;AAGD,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,OAAO,CAAC,UAAU,EAAE,CAAC,CAgBvB;AAID,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAe3F"}
1
+ {"version":3,"file":"safety-laws-loader.d.ts","sourceRoot":"","sources":["../../src/lib/safety-laws-loader.ts"],"names":[],"mappings":"AAsBA,QAAA,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAoDxF,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,SAAS,CAAC;AAgB7C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAAC;CACpE;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,QAAQ,IAAI,OAAO,EAAE,CAOpC;AAGD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAgD5E;AAQD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAgC7E;AAGD,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,OAAO,CAAC,UAAU,EAAE,CAAC,CAgBvB;AAID,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAe3F;AAeD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAgCxE"}
@@ -215,7 +215,9 @@ function normalizeRef(raw) {
215
215
  const lawPart = trimmed.replace(refShort, "").trim();
216
216
  return { lawPart, refShort };
217
217
  }
218
- function guessLawCodeFromRef(lawPart) {
218
+ // 법령명 문자열 → 번들 LawCode 추정. 번들 외 법령(소방·환경 등) undefined.
219
+ // verify_safety_basis 의 본문 인라인 인용 검증에서도 재사용 (번들 법령만 환각 대조 대상).
220
+ export function guessLawCodeFromRef(lawPart) {
219
221
  if (!lawPart)
220
222
  return undefined;
221
223
  const lp = lawPart.toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"safety-laws-loader.js","sourceRoot":"","sources":["../../src/lib/safety-laws-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,6BAA6B;AAC7B,wDAAwD;AACxD,wEAAwE;AACxE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,uDAAuD;AACvD,SAAS,cAAc;IACrB,2CAA2C;IAC3C,MAAM,UAAU,GAAG;QACjB,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC;QACnD,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC;KACjE,CAAC;IACF,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;AAElC,8BAA8B;AAC9B,MAAM,SAAS,GAA8E;IAC3F,IAAI,EAAE;QACJ,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,SAAS;KACpB;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,gBAAgB;QAC1B,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,aAAa;KACxB;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,iBAAiB;QAC3B,SAAS,EAAE,UAAU;QACrB,QAAQ,EAAE,cAAc;KACzB;IACD,eAAe,EAAE;QACf,QAAQ,EAAE,oBAAoB;QAC9B,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,iBAAiB;KAC5B;IACD,iBAAiB,EAAE;QACjB,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,kBAAkB;KAC7B;IACD,wBAAwB,EAAE;QACxB,QAAQ,EAAE,qBAAqB;QAC/B,SAAS,EAAE,UAAU;QACrB,QAAQ,EAAE,sDAAsD;KACjE;IACD,+DAA+D;IAC/D,wBAAwB,EAAE;QACxB,QAAQ,EAAE,gBAAgB;QAC1B,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,sBAAsB;KACjC;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,qBAAqB;KAChC;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,gBAAgB;QAC1B,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,2BAA2B;KACtC;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,iBAAiB;QAC3B,SAAS,EAAE,UAAU;QACrB,QAAQ,EAAE,0BAA0B;KACrC;CACF,CAAC;AAIF,4BAA4B;AAC5B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE9C,KAAK,UAAU,WAAW,CAAC,IAAa;IACtC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;IACvD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,OAAO,CAAC;AACjB,CAAC;AA8BD,MAAM,UAAU,QAAQ;IACtB,OAAQ,MAAM,CAAC,IAAI,CAAC,SAAS,CAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI;QACJ,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS;QACpC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ;QAClC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ;KACnC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAa;IAClD,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,cAAc;IACd,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEvD,MAAM,IAAI,GAAG,CAAC,KAAa,EAAsB,EAAE;QACjD,yCAAyC;QACzC,MAAM,EAAE,GAAG,IAAI,MAAM,CACnB,cAAc,WAAW,CAAC,KAAK,CAAC,0BAA0B,EAC1D,GAAG,CACJ,CAAC;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,YAAY,GAChB,IAAI,CAAC,OAAO,CAAC;QACb,IAAI,CAAC,OAAO,CAAC;QACb,IAAI,CAAC,IAAI,CAAC;QACV,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAEvC,wCAAwC;IACxC,IAAI,YAAY,GAAkC,SAAS,CAAC;IAC5D,IAAI,oBAAoB,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,oBAAoB;aAC3B,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;aACjB,IAAI,EAAE;aACN,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,YAAY,GAAG,UAAU,CAAC;aACpH,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,YAAY,GAAG,SAAS,CAAC;aAC1E,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,YAAY,GAAG,cAAc,CAAC;IACnF,CAAC;IAED,OAAO;QACL,SAAS;QACT,YAAY;QACZ,eAAe;QACf,YAAY;QACZ,oBAAoB;QACpB,aAAa;QACb,YAAY;KACb,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,qBAAqB;AACrB,2CAA2C;AAC3C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAa;IACpD,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE7B,oCAAoC;IACpC,+DAA+D;IAC/D,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QACvC,cAAc;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,SAAS;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD,kDAAkD;QAClD,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW;YAAE,SAAS;QAC3B,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpC,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,IAAI,CAAC,SAAS;YAC5B,GAAG;YACH,KAAK;YACL,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,SAAS,EAAE,CAAC,IAAI,EAAE;SAClD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,UAAiD,EAAE;IAEnD,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAe,CAAC;IAChF,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAChD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACjF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,SAAS;YACzC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;gBAAE,OAAO,OAAO,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,WAAW;AACX,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,OAAiB;IAC7D,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ;IAClD,MAAM,QAAQ,GAAG,OAAO,IAAI,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEvE,MAAM,cAAc,GAAc,QAAQ;QACxC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACZ,CAAC,CAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAe,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;QACtD,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qBAAqB;AAErB,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,aAAa;IACb,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACjC,2CAA2C;IAC3C,4CAA4C;IAC5C,oDAAoD;IACpD,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,YAAY,GAChB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE3D,2CAA2C;IAC3C,IAAI,QAAQ;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC9E,8CAA8C;IAC9C,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,SAAS;YAAE,OAAO,aAAa,CAAC;QACpC,IAAI,OAAO;YAAE,OAAO,WAAW,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,cAAc;IACd,IAAI,YAAY;QAAE,OAAO,wBAAwB,CAAC;IAClD,yBAAyB;IACzB,IAAI,UAAU;QAAE,OAAO,eAAe,CAAC;IACvC,qCAAqC;IACrC,IAAI,OAAO;QAAE,OAAO,WAAW,CAAC;IAChC,IAAI,SAAS;QAAE,OAAO,aAAa,CAAC;IACpC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5D,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"safety-laws-loader.js","sourceRoot":"","sources":["../../src/lib/safety-laws-loader.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,13 @@
4
4
  > **출처 URL**: https://www.law.go.kr/법령/산업안전보건법
5
5
  > **현행 법률**: **법률 제21065호** (공포·시행 2025-10-01, 타법개정)
6
6
  > **저작권**: 저작권법 §7 비보호 저작물 (자유 인용·재배포)
7
- > **마지막 동기화**: 2026-04-26 (법제처 OpenAPI lawService MST=276853 직접 추출)
8
- > **검토 필요 여부**: **완료 (10조문 모두 법제처 원문 대조)** — §5/§25/§29/§36/§38/§42/§57/§63/§64/§67 본문 검증. 가운뎃점(·) 및 줄바꿈 표기는 우리 번들 정책(가독성) 유지
7
+ > **마지막 동기화**: 2026-06-08 (§54·§114·§115 추가 — 법제처 lawService MST=276853 직접 추출. 기존 10조문은 2026-04-26 대조)
8
+ > **검토 필요 여부**: **완료 (13조문 모두 법제처 원문 대조)** — §5/§25/§29/§36/§38/§42/§54/§57/§63/§64/§67/§114/§115 본문 검증. 가운뎃점(·) 및 줄바꿈 표기는 우리 번들 정책(가독성) 유지
9
9
  > **다음 검토 권장**: 2027-04-26 (연 1회)
10
10
  > **범위**: 건설·산업안전 실무 핵심 조문 (전체 법령 아님)
11
11
 
12
12
  본 번들은 건설안전 실무에서 자주 인용되는 조문만 포함합니다. 전체 법령은 법제처에서 확인.
13
- 2026-04-26 법제처 신본(제21065호 2025-10-01 시행) 기준 10조문 본문 직접 대조 완료. 폭염 관련 신설 조항(제20522호 2025-06-01)은 §39(보건조치)에 통합되었으며 본 번들의 §39는 별도 수록되어 있지 않습니다 — 폭염 작업 인용 시 법제처 §39 직접 확인.
13
+ 2026-04-26 법제처 신본(제21065호 2025-10-01 시행) 기준 10조문 본문 직접 대조 완료. 2026-06-08 동일 신본에서 §54(중대재해 발생 시 사업주의 조치)·§114(MSDS 게시 및 교육)·§115(MSDS 용기 경고표시) 3조문 추가 대조 완료 (총 13조문). 폭염 관련 신설 조항(제20522호 2025-06-01)은 §39(보건조치)에 통합되었으며 본 번들의 §39는 별도 수록되어 있지 않습니다 — 폭염 작업 인용 시 법제처 §39 직접 확인.
14
14
 
15
15
  ---
16
16
 
@@ -151,6 +151,16 @@
151
151
  **처벌**: 제171조 (1천만원 이하 과태료)
152
152
 
153
153
 
154
+ ---
155
+
156
+ ## §54 중대재해 발생 시 사업주의 조치
157
+
158
+ ① 사업주는 중대재해가 발생하였을 때에는 즉시 해당 작업을 중지시키고 근로자를 작업장소에서 대피시키는 등 안전 및 보건에 관하여 필요한 조치를 하여야 한다.
159
+
160
+ ② 사업주는 중대재해가 발생한 사실을 알게 된 경우에는 고용노동부령으로 정하는 바에 따라 지체 없이 고용노동부장관에게 보고하여야 한다. 다만, 천재지변 등 부득이한 사유가 발생한 경우에는 그 사유가 소멸되면 지체 없이 보고하여야 한다.
161
+
162
+ **관련**: §57 (산업재해 발생 보고), §38 (안전조치)
163
+
154
164
  ---
155
165
 
156
166
  ## §57 산업재해 발생 은폐 금지 및 보고 등
@@ -225,3 +235,25 @@
225
235
 
226
236
  **관련**: 시행규칙 §86 (안전보건대장의 작성), 고시 제2022-22호 (건설공사 안전보건대장의 작성 등에 관한 고시)
227
237
 
238
+ ---
239
+
240
+ ## §114 물질안전보건자료의 게시 및 교육
241
+
242
+ ① 물질안전보건자료대상물질을 취급하려는 사업주는 제110조제1항 또는 제3항에 따라 작성하였거나 제111조제1항부터 제3항까지의 규정에 따라 제공받은 물질안전보건자료를 고용노동부령으로 정하는 방법에 따라 물질안전보건자료대상물질을 취급하는 작업장 내에 이를 취급하는 근로자가 쉽게 볼 수 있는 장소에 게시하거나 갖추어 두어야 한다.
243
+
244
+ ② 제1항에 따른 사업주는 물질안전보건자료대상물질을 취급하는 작업공정별로 고용노동부령으로 정하는 바에 따라 물질안전보건자료대상물질의 관리 요령을 게시하여야 한다.
245
+
246
+ ③ 제1항에 따른 사업주는 물질안전보건자료대상물질을 취급하는 근로자의 안전 및 보건을 위하여 고용노동부령으로 정하는 바에 따라 해당 근로자를 교육하는 등 적절한 조치를 하여야 한다.
247
+
248
+ **관련**: §110 (물질안전보건자료의 작성·제출), §111 (물질안전보건자료의 제공), §115 (경고표시) — MSDS 비치·게시대장의 법적 근거
249
+
250
+ ---
251
+
252
+ ## §115 물질안전보건자료대상물질 용기 등의 경고표시
253
+
254
+ ① 물질안전보건자료대상물질을 양도하거나 제공하는 자는 고용노동부령으로 정하는 방법에 따라 이를 담은 용기 및 포장에 경고표시를 하여야 한다. 다만, 용기 및 포장에 담는 방법 외의 방법으로 물질안전보건자료대상물질을 양도하거나 제공하는 경우에는 고용노동부장관이 정하여 고시한 바에 따라 경고표시 기재 항목을 적은 자료를 제공하여야 한다.
255
+
256
+ ② 사업주는 사업장에서 사용하는 물질안전보건자료대상물질을 담은 용기에 고용노동부령으로 정하는 방법에 따라 경고표시를 하여야 한다. 다만, 용기에 이미 경고표시가 되어 있는 등 고용노동부령으로 정하는 경우에는 그러하지 아니하다.
257
+
258
+ **관련**: §114 (물질안전보건자료의 게시 및 교육), KOSHA 화학물질 경고표지(GHS) 가이드
259
+
@@ -1 +1 @@
1
- {"version":3,"file":"verify-safety-basis.d.ts","sourceRoot":"","sources":["../../src/tools/verify-safety-basis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,iBAAiB,CAAC;AAiVrE,eAAO,MAAM,qBAAqB,EAAE,cAOnC,CAAC"}
1
+ {"version":3,"file":"verify-safety-basis.d.ts","sourceRoot":"","sources":["../../src/tools/verify-safety-basis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,iBAAiB,CAAC;AAwcrE,eAAO,MAAM,qBAAqB,EAAE,cAOnC,CAAC"}
@@ -2,7 +2,7 @@ import { z } from "zod";
2
2
  import { EvidenceItemSchema, BASIS_TYPES, } from "../evidence/evidence.schema.js";
3
3
  import { BASIS_WEIGHT_MAP } from "../config/constants.js";
4
4
  import { stringBool } from "../lib/zod-helpers.js";
5
- import { getArticle, listLaws } from "../lib/safety-laws-loader.js";
5
+ import { getArticle, listLaws, guessLawCodeFromRef, } from "../lib/safety-laws-loader.js";
6
6
  // 파일 최상단 상수 — verification status 코드
7
7
  const STATUS = {
8
8
  SUPPORTED: "supported",
@@ -14,6 +14,15 @@ const STATUS = {
14
14
  // 응답 텍스트 첫 줄에 부착하여 LLM 이 "검증 성공"으로 오해하는 것을 차단
15
15
  const MARKER_HALLUCINATION = "[HALLUCINATION_DETECTED]";
16
16
  const MARKER_NOT_FOUND = "[NOT_FOUND]";
17
+ const MARKER_INLINE_CITATION = "[INLINE_CITATION_WARNING]";
18
+ // 본문 인라인 법령 인용 추출 정규식 (korean-law-mcp verify_citations 패턴 차용)
19
+ // evidence 배열을 첨부하지 않고 claim 본문에 "산안기준규칙 제38조" 처럼 인라인으로 쓴
20
+ // 법령 인용을 자동 추출 → 번들 조문 대조. evidence-기반 검증의 사각지대(LLM 이 근거를
21
+ // 구조화하지 않고 본문에 흘려 쓴 가짜 조문)를 메운다.
22
+ // 그룹1: 법령명("산안기준규칙" / "산업안전보건법" 등)
23
+ // 그룹2: 제N조의 N 그룹3: 제N조의 M 의 M
24
+ // 그룹4: §N 의 N 그룹5: §N 의 M
25
+ const INLINE_CITATION_REGEX = /([가-힣][가-힣·ㆍ\s]{0,20}?(?:법|규칙|시행령|시행규칙|고시|규정))\s*(?:제\s*(\d+)\s*조(?:\s*의\s*(\d+))?|§\s*(\d+)(?:\s*의\s*(\d+))?)/g;
17
26
  // 기본 mandatory trigger — claim 에 포함되면 법령·규정 근거 필요
18
27
  // 교차 검증 지적 반영: "필수", "필요", "위반 시", "과태료" 추가
19
28
  const DEFAULT_MANDATORY_TRIGGERS = [
@@ -72,12 +81,17 @@ async function handler(rawInput) {
72
81
  unsupported: verdicts.filter((v) => v.status === STATUS.UNSUPPORTED).length,
73
82
  invalid: verdicts.filter((v) => v.status === STATUS.INVALID).length,
74
83
  hallucinationCount: verdicts.reduce((s, v) => s + v.hallucinationCount, 0),
84
+ // 본문 인라인 인용 환각 — evidence 기반 hallucinationCount 와 별개 집계 (status 미반영)
85
+ inlineUnresolvedCount: verdicts.reduce((s, v) => s + v.inlineUnresolvedCount, 0),
75
86
  };
76
87
  // 다음 행동 제안 — 환각·부분지원·미지원 케이스별 맞춤 검색 도구 추천
77
88
  const nextActions = [];
78
89
  if (summary.hallucinationCount > 0) {
79
90
  nextActions.push("search_safety_laws({keyword}) 로 정확한 조문 재검색 후 재제출", "list_core_safety_laws() 로 번들된 법령 6개·55조문 목록 확인");
80
91
  }
92
+ if (summary.inlineUnresolvedCount > 0) {
93
+ nextActions.push("본문에 evidence 없이 인라인으로 쓴 법령 인용 중 번들 미수록 건이 있음 — search_safety_laws 또는 법제처로 실존 확인 (번들은 건설안전 발췌라 누락 가능, 미수록≠환각). verdicts[].inlineCitations 참조");
94
+ }
81
95
  if (summary.unsupported > 0) {
82
96
  nextActions.push("compile_safety_references({workType, docType}) 로 관련 법령·KOSHA 자료 묶음 받기");
83
97
  }
@@ -105,6 +119,10 @@ async function handler(rawInput) {
105
119
  else if (summary.unsupported > 0) {
106
120
  headerLines.push(`${MARKER_NOT_FOUND} 근거 부족 claim ${summary.unsupported}건 — mandatory trigger 가 포함된 claim 에 법령·규정 근거가 없거나 evidence 자체가 비어있음.`);
107
121
  }
122
+ // 인라인 인용 경고는 evidence 기반 판정과 독립 — isError/status 에 영향 없이 추가 노출
123
+ if (summary.inlineUnresolvedCount > 0) {
124
+ headerLines.push(`${MARKER_INLINE_CITATION} 본문 인라인 법령 인용 ${summary.inlineUnresolvedCount}건이 번들에 미수록 — 번들은 건설안전 핵심 발췌(전체 법령 아님)라 **실존 조문도 누락 가능(미수록≠환각)**. verdicts[].inlineCitations 의 exists:false 항목을 search_safety_laws/법제처로 실존 확인할 것. (번들 외 법령 inBundle:false 는 대조 보류)`);
125
+ }
108
126
  const text = (headerLines.length > 0 ? headerLines.join("\n") + "\n\n" : "") +
109
127
  JSON.stringify(payload, null, 2);
110
128
  return {
@@ -166,6 +184,61 @@ async function checkRefExistence(ev) {
166
184
  };
167
185
  }
168
186
  }
187
+ // claim 본문에서 인라인 법령 인용을 추출해 번들 조문과 대조.
188
+ // evidence 미첨부 사각지대 보완 — 번들 법령(산안법/기준규칙/중처법/건진법/위평고시)의
189
+ // 없는 조문을 본문에 쓴 경우만 환각 flag. 번들 외 법령은 대조 불가로 보류(false positive 방지).
190
+ async function checkInlineCitations(claim) {
191
+ const checks = [];
192
+ const seen = new Set();
193
+ for (const m of claim.matchAll(INLINE_CITATION_REGEX)) {
194
+ const lawPart = m[1].trim().replace(/\s+/g, "");
195
+ const artNo = m[2] ?? m[4]; // 제N조 | §N
196
+ const subNo = m[3] ?? m[5]; // 의 M
197
+ if (!artNo)
198
+ continue;
199
+ const ref = subNo ? `§${artNo}의${subNo}` : `§${artNo}`;
200
+ const key = `${lawPart}|${ref}`;
201
+ if (seen.has(key))
202
+ continue;
203
+ seen.add(key);
204
+ const raw = m[0].trim().replace(/\s+/g, " ");
205
+ const code = guessLawCodeFromRef(lawPart);
206
+ if (!code) {
207
+ // 번들 외 법령(소방·환경·하도급 등) — 실존 대조 불가, 환각 판정 보류
208
+ checks.push({
209
+ raw,
210
+ lawPart,
211
+ ref,
212
+ inBundle: false,
213
+ exists: false,
214
+ reason: "번들 외 법령 추정 — 본 도구의 번들 조문으로는 실존 대조 불가 (법제처 원문 확인 필요)",
215
+ });
216
+ continue;
217
+ }
218
+ const article = await getArticle(`${lawPart} ${ref}`, code);
219
+ if (article) {
220
+ checks.push({
221
+ raw,
222
+ lawPart,
223
+ ref,
224
+ inBundle: true,
225
+ exists: true,
226
+ matched: `${article.lawShortName} ${article.ref} ${article.title}`,
227
+ });
228
+ }
229
+ else {
230
+ checks.push({
231
+ raw,
232
+ lawPart,
233
+ ref,
234
+ inBundle: true,
235
+ exists: false,
236
+ reason: `번들 법령(${lawPart})에 '${ref}' 조문 미수록 — 본 번들은 건설안전 핵심 발췌(전체 법령 아님)라 **실존 조문도 누락될 수 있음(미수록≠환각)**. 실존 여부는 search_safety_laws 또는 법제처 원문으로 확인 필요.`,
237
+ });
238
+ }
239
+ }
240
+ return checks;
241
+ }
169
242
  async function verifyClaim(claim, evidence, mandatoryTriggers, allowRecommendedAsBasis, verifyReferenceExistence) {
170
243
  const reasons = [];
171
244
  // 근거 등급 정합성 확인
@@ -228,6 +301,14 @@ async function verifyClaim(claim, evidence, mandatoryTriggers, allowRecommendedA
228
301
  else {
229
302
  status = STATUS.PARTIAL;
230
303
  }
304
+ // 본문 인라인 인용 검증 — status 확정 후 계산하여 reasons/status/isError 에 영향 없음.
305
+ // (법령명↔조문 휴리스틱 연결의 false positive 가 기존 evidence 판정을 흔들지 않도록 분리)
306
+ let inlineCitations = [];
307
+ let inlineUnresolvedCount = 0;
308
+ if (verifyReferenceExistence) {
309
+ inlineCitations = await checkInlineCitations(claim);
310
+ inlineUnresolvedCount = inlineCitations.filter((c) => c.inBundle && !c.exists).length;
311
+ }
231
312
  return {
232
313
  claim,
233
314
  status,
@@ -236,6 +317,8 @@ async function verifyClaim(claim, evidence, mandatoryTriggers, allowRecommendedA
236
317
  matchedTriggers,
237
318
  refChecks,
238
319
  hallucinationCount,
320
+ inlineCitations,
321
+ inlineUnresolvedCount,
239
322
  };
240
323
  }
241
324
  function rankWeight(acc, next) {
@@ -250,7 +333,7 @@ function rankWeight(acc, next) {
250
333
  export const verifySafetyBasisTool = {
251
334
  name: "verify_safety_basis",
252
335
  title: "안전관리 근거 검증 (ref 실존 + 등급 정합성)",
253
- description: "LLM 이 생성한 안전관리 결론(claim)에 첨부된 근거(evidence)의 **(1) 등급 정합성**(basisType↔legalWeight) + **(2) reference 실존성**(번들 법령 55조문 대조) + **(3) mandatory trigger 검사**(의무/반드시/필수/금지/위반 등 포함 시 법령 근거 필수) 를 점검. 환각 인용 발견 시 응답 첫 줄에 `[HALLUCINATION_DETECTED]` 마커 + isError:true 를 부착해 LLM 의 자가검열을 강제. **주의**: 의미론적 entailment(이 조문이 정말 이 주장에 적용되는가)는 검증하지 않음 — 인간 검토 필요. 법령 조회 Tool 미제공 환경에서는 allowRecommendedAsBasis=true 로 KOSHA Guide 근거까지 허용 가능.",
336
+ description: "LLM 이 생성한 안전관리 결론(claim)에 첨부된 근거(evidence)의 **(1) 등급 정합성**(basisType↔legalWeight) + **(2) reference 실존성**(번들 법령 55조문 대조) + **(3) mandatory trigger 검사**(의무/반드시/필수/금지/위반 등 포함 시 법령 근거 필수) + **(4) 본문 인라인 인용 검증**(evidence 첨부하지 않고 claim 본문에 '제38조'·'§38' 처럼 흘려 쓴 법령 인용을 자동 추출→번들 조문 대조. 번들 수록이면 확인됨, 미수록이면 `[INLINE_CITATION_WARNING]`) 을 점검. 환각 인용 발견 시 응답 첫 줄에 `[HALLUCINATION_DETECTED]` 마커 + isError:true 를 부착해 LLM 의 자가검열을 강제. **주의**: (4) 인라인 검증은 법령명↔조문 휴리스틱 + **번들이 건설안전 발췌(전체 법령 아님)** 라는 이중 한계로 false positive 여지가 있어 status/isError 에 미반영(경고 전용). 번들 미수록은 환각이 아니라 발췌 누락일 수 있으니 법제처 확인 필요. 번들 외 법령(inBundle:false)은 대조 보류. 의미론적 entailment(이 조문이 정말 이 주장에 적용되는가)는 검증하지 않음 — 인간 검토 필요. 법령 조회 Tool 미제공 환경에서는 allowRecommendedAsBasis=true 로 KOSHA Guide 근거까지 허용 가능.",
254
337
  inputSchema,
255
338
  handler,
256
339
  };
@@ -1 +1 @@
1
- {"version":3,"file":"verify-safety-basis.js","sourceRoot":"","sources":["../../src/tools/verify-safety-basis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,kBAAkB,EAClB,WAAW,GAEZ,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEpE,qCAAqC;AACrC,MAAM,MAAM,GAAG;IACb,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;CACV,CAAC;AAEX,cAAc;AACd,8CAA8C;AAC9C,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AACxD,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC,kDAAkD;AAClD,4CAA4C;AAC5C,MAAM,0BAA0B,GAAG;IACjC,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,MAAM;IACN,QAAQ;IACR,OAAO;IACP,IAAI;IACJ,MAAM;IACN,KAAK;IACL,IAAI;CACL,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,CAAC;SACN,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KAClD,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,sCAAsC,CAAC;IACnD,mBAAmB,EAAE,CAAC;SACnB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,kEAAkE,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAC9G;IACH,2BAA2B,EAAE,UAAU;SACpC,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CACP,oFAAoF,CACrF;IACH,uBAAuB,EAAE,UAAU;SAChC,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,kHAAkH,CACnH;IACH,wBAAwB,EAAE,UAAU;SACjC,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CACP,iHAAiH,CAClH;CACJ,CAAC,CAAC;AAqBH,KAAK,UAAU,OAAO,CAAC,QAAiB;IACtC,MAAM,KAAK,GAAU,WAAW,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CACX,MAAM,WAAW,CACf,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,QAAQ,EACV,QAAQ,EACR,KAAK,CAAC,uBAAuB,KAAK,IAAI,EACtC,KAAK,CAAC,wBAAwB,KAAK,KAAK,CACzC,CACF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG;QACd,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM;QACvE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;QACnE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM;QAC3E,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;QACnE,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC;KAC3E,CAAC;IAEF,0CAA0C;IAC1C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,OAAO,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;QACnC,WAAW,CAAC,IAAI,CACd,kDAAkD,EAClD,gDAAgD,CACjD,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC5B,WAAW,CAAC,IAAI,CACd,uEAAuE,CACxE,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAC1D,WAAW,CAAC,IAAI,CACd,uFAAuF,CACxF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG;QACd,OAAO;QACP,QAAQ;QACR,iBAAiB,EAAE,QAAQ;QAC3B,MAAM,EAAE;YACN,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,KAAK,IAAI;YAC/D,2BAA2B,EAAE,KAAK,CAAC,2BAA2B,KAAK,KAAK;YACxE,wBAAwB,EAAE,KAAK,CAAC,wBAAwB,KAAK,KAAK;SACnE;QACD,WAAW;KACZ,CAAC;IAEF,6BAA6B;IAC7B,MAAM,eAAe,GAAG,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;IACrE,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,eAAe,EAAE,CAAC;QACpB,WAAW,CAAC,IAAI,CACd,GAAG,oBAAoB,UAAU,OAAO,CAAC,kBAAkB,0FAA0F,CACtJ,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACnC,WAAW,CAAC,IAAI,CACd,GAAG,gBAAgB,gBAAgB,OAAO,CAAC,WAAW,sEAAsE,CAC7H,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GACR,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEnC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,iBAAiB,EAAE,OAAO;QAC1B,OAAO,EAAE,eAAe,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KAC5C,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CAAC,KAAY;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC;IAC9C,IAAI,KAAK,CAAC,2BAA2B,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC9D,yBAAyB;IACzB,MAAM,MAAM,GAAG,CAAC,GAAG,0BAA0B,EAAE,GAAG,KAAK,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,4DAA4D;AAC5D,sCAAsC;AACtC,KAAK,UAAU,iBAAiB,CAAC,EAAiB;IAChD,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;IAErC,yBAAyB;IACzB,IAAI,EAAE,CAAC,SAAS,KAAK,KAAK,IAAI,EAAE,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;QAC5D,OAAO;YACL,SAAS;YACT,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,aAAa,EAAE,CAAC,SAAS,2DAA2D;SAC7F,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,aAAa,EAAE,CAAC,SAAS,8CAA8C;SAChF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,SAAS;gBACT,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE;aACnE,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,EAAE;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;aACvB,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO;YACL,SAAS;YACT,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,SAAS,OAAO,QAAQ,SAAS,8IAA8I;SACxL,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,SAAS;YACT,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,YAAa,GAAa,CAAC,OAAO,EAAE;SAC7C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,KAAa,EACb,QAAyB,EACzB,iBAA2B,EAC3B,uBAAgC,EAChC,wBAAiC;IAEjC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,eAAe;IACf,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,QAAQ,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CACV,sBAAsB,EAAE,CAAC,SAAS,sBAAsB,QAAQ,OAAO,EAAE,CAAC,WAAW,QAAQ,CAC9F,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,SAAS,GAAe,EAAE,CAAC;IAC/B,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,wBAAwB,EAAE,CAAC;QAC7B,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,KAAK,KAAK,IAAI,EAAE,CAAC,SAAS,KAAK,YAAY,CAAC,EAAE,CAAC;gBAC/E,kBAAkB,IAAI,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CACV,8BAA8B,KAAK,CAAC,SAAS,OAAO,KAAK,CAAC,MAAM,EAAE,CACnE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IACzE,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,aAAa,CAAC,CAAC;IAE7E,IAAI,cAAc,IAAI,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,mBAAmB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC;QAC9F,IAAI,uBAAuB,IAAI,cAAc,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CACV,GAAG,IAAI,4DAA4D,CACpE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAE7B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IAEtD,IAAI,MAA4C,CAAC;IACjD,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;QAC3B,mCAAmC;QACnC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC1B,CAAC;SAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAC5B,CAAC;SAAM,IAAI,cAAc,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM;YACJ,uBAAuB,IAAI,cAAc;gBACvC,CAAC,CAAC,MAAM,CAAC,OAAO;gBAChB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,KAAK;QACL,MAAM;QACN,OAAO;QACP,aAAa,EAAE,OAAO;QACtB,eAAe;QACf,SAAS;QACT,kBAAkB;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,GAAuD,EACvD,IAA+C;IAE/C,MAAM,KAAK,GAA2B;QACpC,IAAI,EAAE,CAAC;QACP,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;KACb,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,8BAA8B;IACrC,WAAW,EACT,qaAAqa;IACva,WAAW;IACX,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"verify-safety-basis.js","sourceRoot":"","sources":["../../src/tools/verify-safety-basis.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export declare const VERSION = "1.5.0";
1
+ export declare const VERSION = "1.6.1";
2
2
  export declare const SERVER_NAME = "agent-safety-oss";
3
3
  export declare const SERVER_DESCRIPTION = "\uC911\uC18C \uAC74\uC124\uC0AC\uC758 \uC548\uC804\uAD00\uB9AC\uC790\uC640 \uD604\uC7A5\uC18C\uC7A5\uC744 \uC704\uD55C \uACBD\uB7C9 \uC548\uC804 \uC628\uD1A8\uB85C\uC9C0 MCP \uC11C\uBC84 \u2014 \uBC95\uB839, KOSHA \uC790\uB8CC, \uC704\uD5D8\uC694\uC778, \uD1B5\uC81C\uB300\uCC45, \uBC95\uC815\uBB38\uC11C, \uC0AC\uC9C4 \uC99D\uBE59, \uAC1C\uC120\uC870\uCE58\uB97C \uADF8\uB798\uD504 \uAE30\uBC18 \uB3C4\uAD6C\uB85C \uC81C\uACF5. \uC81C\uACF5: \uD669\uB8E1\uAC74\uC124(\uC8FC) \u00B7 \uAC1C\uBC1C: \u321C\uB77C\uD154\uC6CD\uC2A4 \u00B7 \uB77C\uC774\uC120\uC2A4: MIT.";
4
4
  export declare const PROVIDED_BY = "\uD669\uB8E1\uAC74\uC124(\uC8FC)";
package/build/version.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // 파일 최상단 상수 — 버전 관리 단일 출처
2
2
  // SSoT: package.json `version` 과 일치. 갱신 시 두 파일 동시 수정 필수.
3
- export const VERSION = "1.5.0";
3
+ export const VERSION = "1.6.1";
4
4
  export const SERVER_NAME = "agent-safety-oss";
5
5
  export const SERVER_DESCRIPTION = "중소 건설사의 안전관리자와 현장소장을 위한 경량 안전 온톨로지 MCP 서버 — 법령, KOSHA 자료, 위험요인, 통제대책, 법정문서, 사진 증빙, 개선조치를 그래프 기반 도구로 제공. 제공: 황룡건설(주) · 개발: ㈜라텔웍스 · 라이선스: MIT.";
6
6
  export const PROVIDED_BY = "황룡건설(주)";
@@ -28,7 +28,7 @@
28
28
  ## 번들 데이터
29
29
 
30
30
  ```text
31
- src/ontology/safety-laws/*.md 법령 본문 <!-- INV:LAW_BUNDLE_COUNT -->10<!-- /INV:LAW_BUNDLE_COUNT -->개 (합계 약 <!-- INV:LAW_ARTICLES -->76<!-- /INV:LAW_ARTICLES -->조)
31
+ src/ontology/safety-laws/*.md 법령 본문 <!-- INV:LAW_BUNDLE_COUNT -->10<!-- /INV:LAW_BUNDLE_COUNT -->개 (합계 약 <!-- INV:LAW_ARTICLES -->79<!-- /INV:LAW_ARTICLES -->조)
32
32
  src/ontology/legal-duty-master.json <!-- INV:DOCID_MASTER -->94<!-- /INV:DOCID_MASTER --> docId 마스터
33
33
  src/ontology/forms/forms-map.json <!-- INV:FORMS_TOTAL -->132<!-- /INV:FORMS_TOTAL --> formId 인덱스
34
34
  src/ontology/forms/auto/*.md <!-- INV:FORMS_MD -->94<!-- /INV:FORMS_MD --> 자동 생성 양식
@@ -49,6 +49,39 @@ src/ontology/kras-methods/*.md KRAS 방법론
49
49
 
50
50
  일반 사용자는 선택적으로 `AGENTHQ_API_KEY`를 설정한다. 운영팀 또는 자체 중계를 운영하는 조직만 `DATA_GO_KR_KEY`를 직접 설정한다.
51
51
 
52
+ ## 공공 OpenAPI source 매핑 (13 source)
53
+
54
+ 본 OSS 가 그래프 작성 보조에 통합한 공공 데이터 source 와 호출 도구의 매핑이다.
55
+
56
+ | Source | 영역 | 호출 도구 |
57
+ |---|---|---|
58
+ | KOSHA OneAPI 15121001 / 15121008 | 재해사례 + 첨부 | `search_accident_cases` · `get_accident_case_attachments` |
59
+ | KOSHA OneAPI 15133935 | 건설 사망사고 통계 | `search_construction_fatal_accidents` |
60
+ | KOSHA OneAPI 15119137 | 전 업종 사망사고 | `search_all_fatal_accidents` |
61
+ | KOSHA OneAPI 15139398 | 안전보건자료실 (외국인 13개국어) | `search_safety_materials` · `get_foreign_worker_resource_links` |
62
+ | KOSHA OneAPI 15001197 | MSDS (화학물질안전) | `search_msds` |
63
+ | KOSHA OneAPI 15139497 | 보호구 안전인증 (KCs) | `search_ppe_certification` |
64
+ | KOSHA OneAPI 15123696 | 안전보건법령 스마트검색 (AI 유사어) | `search_safety_law_smart` |
65
+ | KOSHA OneAPI 15144147 | KOSHA Guide PDF 다운로드 (현재 번들 <!-- INV:KOSHA_BODY -->1,039<!-- /INV:KOSHA_BODY -->) | (offline 번들로 대체) |
66
+ | KOSHA OneAPI 15087828 | 건설 공종 분류 (구조 분류) | `analyze_construction_work_risks` (fallback) |
67
+ | KOSHA OneAPI 15116595 | 공종 ↔ KOSHA Guide 매핑 | `analyze_construction_work_risks` (fallback) |
68
+ | KOSHA OneAPI 15140383 | SIF 아카이브 (사망 고위험요인) | `search_sif_archive` |
69
+ | KOSHA portal24 | 안전보건자료실 8,976건 (OPS·동영상·교안) | `search_kosha_archive` · `list_kosha_archive_facets` · `get_kosha_archive_files` |
70
+ | 법제처 OpenAPI (law.go.kr) | 안전관리 법령 <!-- INV:LAW_BUNDLE_COUNT -->10<!-- /INV:LAW_BUNDLE_COUNT -->건 핵심 조문 발췌 (전문 아님) | (offline 번들 + 향후 동적 확장) |
71
+
72
+ ## 향후 추가 가능 공공 데이터
73
+
74
+ 다음 공공 데이터도 그래프 통합 후보다 (contributor 환영 — [Issue](https://github.com/ratelworks/agent-safety-oss/issues) 로 제안).
75
+
76
+ - **법제처 OpenAPI** 동적 확장 (안전 외 인접 법령 — 산업안전기준에 관한 규칙 외)
77
+ - **KOSHA-MS** 안전보건경영시스템 인증 사업장 명부
78
+ - **KCs/KCs Self** 안전인증·자율안전인증 통합 (현재 보호구만)
79
+ - **고용노동부** 산업재해 통계연보 (분기·연도별 추이)
80
+ - **국토교통부** 건설공사 안전관리 종합정보망 (CSI)
81
+ - **환경부** 화학물질 정보 (PRTR · 유해성 등급)
82
+ - **소방청** 위험물 안전관리 정보
83
+ - **건설근로자공제회** 안전교육 이수 자료
84
+
52
85
  ## 근거 등급
53
86
 
54
87
  | basisType | legalWeight | 사용 방식 |
package/docs/IDENTITY.md CHANGED
@@ -9,7 +9,7 @@ agent-safety-oss 는 **건설현장의 법정 안전문서 작성을 더 빠르
9
9
  **주요 MCP host**: **Claude Desktop · OpenAI Codex CLI** 두 host 만 메인 지원. 설정은 host 별 안내 (`docs/SETUP_CLAUDE_DESKTOP.md` · `docs/SETUP_CODEX.md`) 참조.
10
10
 
11
11
  번들 공공데이터:
12
- - **법령 본문 MD <!-- INV:LAW_BUNDLE_COUNT -->10<!-- /INV:LAW_BUNDLE_COUNT -->개** (합계 약 <!-- INV:LAW_ARTICLES -->76<!-- /INV:LAW_ARTICLES -->조): 산안법·시행령·시행규칙·기준규칙·중처법·중처법 시행령·위험성평가 고시·건진법·건진법 시행령·건진법 시행규칙
12
+ - **법령 본문 MD <!-- INV:LAW_BUNDLE_COUNT -->10<!-- /INV:LAW_BUNDLE_COUNT -->개** (합계 약 <!-- INV:LAW_ARTICLES -->79<!-- /INV:LAW_ARTICLES -->조): 산안법·시행령·시행규칙·기준규칙·중처법·중처법 시행령·위험성평가 고시·건진법·건진법 시행령·건진법 시행규칙
13
13
  - **KOSHA Guide <!-- INV:KOSHA_BODY -->1,039<!-- /INV:KOSHA_BODY -->건** (본문) + **<!-- INV:KOSHA_META -->1,039<!-- /INV:KOSHA_META -->건** (메타, 2026.1 재정비 후 유효본)
14
14
  - **부처별 분산 공공데이터 통합**: 법제처·KOSHA·고용노동부·국토부 등 자료를 같은 온톨로지 그래프로 묶어 LLM 이 관계 따라가며 도메인 추론 가능
15
15
 
package/docs/INVENTORY.md CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  > **본 문서는 `npm run build` 시 `scripts/build/generate-inventory.ts` 가 자동 생성합니다. 수동 편집 금지** — drift 차단용.
4
4
 
5
- - 생성 시각: 2026-06-01T10:01:38+09:00
6
- - 법령 데이터 최신 동기화: **2026-05-18**
5
+ - 생성 시각: 2026-06-10T09:47:03+09:00
6
+ - 법령 데이터 최신 동기화: **2026-06-08**
7
7
  - 양식 인덱스 컴파일: 2026-04-29
8
8
 
9
9
  ---
@@ -97,11 +97,11 @@
97
97
  | 산안기준규칙 | 10 | 671 | 1.5% | 2026-04-26 | — |
98
98
  | 산안법 시행규칙 | 4 | 252 | 1.6% | 2026-04-26 | — |
99
99
  | 산안법 시행령 | 3 | 159 | 1.9% | 2026-04-26 | — |
100
- | 산업안전보건법 | 10 | 175 | 5.7% | 2026-04-26 | : |
100
+ | 산업안전보건법 | 13 | 175 | 7.4% | 2026-06-08 | : |
101
101
  | 위험성평가 고시 | 26 | 23 | 113.0% | 2026-04-24 | — |
102
102
  | 중처법 시행령 | 13 | 14 | 92.9% | 2026-05-18 | — |
103
103
  | 중대재해처벌법 | 6 | 16 | 37.5% | 2026-04-26 | — |
104
- | **합계** | **76** | — | — | — | — |
104
+ | **합계** | **79** | — | — | — | — |
105
105
 
106
106
  **저작권**: 저작권법 §7 — 비보호 저작물 (자유 인용·재배포)
107
107
 
@@ -1,6 +1,6 @@
1
1
  # Operational Ontology Profile
2
2
 
3
- > release: **v<!-- INV:VERSION -->1.6.0<!-- /INV:VERSION --> · <!-- INV:TOOLS_TOTAL -->92<!-- /INV:TOOLS_TOTAL --> tools · <!-- INV:KOSHA_BODY -->1,039<!-- /INV:KOSHA_BODY --> KOSHA Guides**
3
+ > release: **v<!-- INV:VERSION -->1.6.1<!-- /INV:VERSION --> · <!-- INV:TOOLS_TOTAL -->92<!-- /INV:TOOLS_TOTAL --> tools · <!-- INV:KOSHA_BODY -->1,039<!-- /INV:KOSHA_BODY --> KOSHA Guides**
4
4
  > 목적: 중소 건설사가 실제 업무에서 사용할 수 있는 경량 운영 온톨로지 그래프
5
5
 
6
6
  ## 1. 목적
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-safety-oss",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "건설현장의 법정 안전문서 작성을 더 빠르고 정확하게. 산안법·기준규칙·중처법·KOSHA Guide를 기반으로 안전관리자와 현장소장의 문서 작성과 검토를 돕는 오픈소스 도구입니다.",
5
5
  "type": "module",
6
6
  "main": "build/index.js",
@@ -100,11 +100,12 @@
100
100
  "verify:tool-capability": "tsx scripts/verify/verify-tool-capability-drift.ts",
101
101
  "verify:edge-context": "tsx scripts/verify/verify-edge-context-drift.ts",
102
102
  "verify:link-type": "tsx scripts/verify/verify-link-type-semantics.ts",
103
- "prepublishOnly": "npm run check:oss-hygiene && npm run build && npm run check:essence && npm run check:lightweight && npm run docs:check && npm run verify-all && npm run validate-shacl && npm run verify:tool-capability && npm run verify:edge-context && npm run verify:link-type && npm run form-conformance && npm run quality-regression && npm run check:doc-sync",
103
+ "prepublishOnly": "npm run check:oss-hygiene && npm run build && npm run check:essence && npm run check:lightweight && npm run docs:check && npm run verify-all && npm run validate-shacl && npm run verify:tool-capability && npm run verify:edge-context && npm run verify:link-type && npm run form-conformance && npm run quality-regression && npm run check:doc-sync && npm run check:doc-citations",
104
104
  "audit:expand": "tsx scripts/audit/audit-jsonld-expand.ts",
105
105
  "audit:graph-v2": "tsx scripts/audit/audit-ontology-v2.ts",
106
106
  "ontology:operational": "tsx scripts/verify/verify-operational-ontology.ts",
107
- "check:doc-sync": "tsx scripts/verify/check-doc-code-sync.ts"
107
+ "check:doc-sync": "tsx scripts/verify/check-doc-code-sync.ts",
108
+ "check:doc-citations": "tsx scripts/verify/check-doc-citation-existence.ts"
108
109
  },
109
110
  "keywords": [
110
111
  "mcp",