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 +14 -0
- package/README.md +156 -383
- package/build/lib/safety-laws-loader.d.ts +1 -0
- package/build/lib/safety-laws-loader.d.ts.map +1 -1
- package/build/lib/safety-laws-loader.js +3 -1
- package/build/lib/safety-laws-loader.js.map +1 -1
- package/build/ontology/safety-laws//354/202/260/354/227/205/354/225/210/354/240/204/353/263/264/352/261/264/353/262/225.md +35 -3
- package/build/tools/verify-safety-basis.d.ts.map +1 -1
- package/build/tools/verify-safety-basis.js +85 -2
- package/build/tools/verify-safety-basis.js.map +1 -1
- package/build/version.d.ts +1 -1
- package/build/version.js +1 -1
- package/docs/DATA_SOURCES.md +34 -1
- package/docs/IDENTITY.md +1 -1
- package/docs/INVENTORY.md +4 -4
- package/docs/OPERATIONAL-ONTOLOGY.md +1 -1
- package/docs/assets/viewer-form.png +0 -0
- package/package.json +4 -3
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)
|
|
6
6
|
[](https://nodejs.org)
|
|
7
7
|
[](https://modelcontextprotocol.io)
|
|
8
|
-
[](./CHANGELOG.md)
|
|
9
9
|
[](./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
|
+

|
|
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 -->
|
|
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
|
-
|
|
|
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 익숙) |
|
|
50
|
-
| **AI 비서가 뭔지 모르는 분** (안전관리자 · 현장소장) | [📖 Claude Desktop 설정 가이드](./docs/SETUP_CLAUDE_DESKTOP.md)
|
|
51
|
-
| **브라우저 폼만 쓰고 싶은 분** (AI 비서·CLI 모두 불필요) |
|
|
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
|
-
|
|
84
|
+
### A. AI 비서에 연결 — Claude Desktop / OpenAI Codex CLI
|
|
56
85
|
|
|
57
|
-
> **"AI 비서 도구 연결 표준" (MCP) 을 지원하는
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
202
|
+
## 어떻게 동작하나 — 자동작성 흐름
|
|
425
203
|
|
|
426
|
-
|
|
204
|
+
핵심은 문서를 바로 "그럴듯하게" 쓰는 것이 아니라, **그래프 컨텍스트를 먼저 조립하고, 초안을 만들고, 검수한 뒤 보관**하는 것입니다.
|
|
427
205
|
|
|
428
|
-
```
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
443
|
-
review_safety_document
|
|
444
|
-
verify_safety_basis
|
|
445
|
-
query_legal_basis
|
|
446
|
-
query_penalty
|
|
447
|
-
```
|
|
232
|
+
## 현장 운영 흐름
|
|
448
233
|
|
|
449
|
-
|
|
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
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
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
|
-
|
|
257
|
+
**키 필요 — <!-- INV:TOOLS_KEYREQ -->7<!-- /INV:TOOLS_KEYREQ -->개 도구** (KOSHA OneAPI 실시간 호출):
|
|
477
258
|
|
|
478
|
-
|
|
|
479
|
-
|
|
480
|
-
|
|
|
481
|
-
|
|
|
482
|
-
|
|
|
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
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
529
|
-
-
|
|
530
|
-
-
|
|
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
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"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
|
|
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-
|
|
8
|
-
> **검토 필요 여부**: **완료 (
|
|
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;
|
|
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":"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"}
|
|
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,EACL,UAAU,EACV,QAAQ,EACR,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,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;AACvC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAE3D,8DAA8D;AAC9D,0DAA0D;AAC1D,0DAA0D;AAC1D,iCAAiC;AACjC,qCAAqC;AACrC,qCAAqC;AACrC,mCAAmC;AACnC,MAAM,qBAAqB,GACzB,iHAAiH,CAAC;AAEpH,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;AAqCH,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;QAC1E,qEAAqE;QACrE,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,qBAAqB,EACrC,CAAC,CACF;KACF,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,qBAAqB,GAAG,CAAC,EAAE,CAAC;QACtC,WAAW,CAAC,IAAI,CACd,6IAA6I,CAC9I,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,+DAA+D;IAC/D,IAAI,OAAO,CAAC,qBAAqB,GAAG,CAAC,EAAE,CAAC;QACtC,WAAW,CAAC,IAAI,CACd,GAAG,sBAAsB,iBAAiB,OAAO,CAAC,qBAAqB,mLAAmL,CAC3P,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,uCAAuC;AACvC,uDAAuD;AACvD,mEAAmE;AACnE,KAAK,UAAU,oBAAoB,CACjC,KAAa;IAEb,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;QACvC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;QAClC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,4CAA4C;YAC5C,MAAM,CAAC,IAAI,CAAC;gBACV,GAAG;gBACH,OAAO;gBACP,GAAG;gBACH,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,KAAK;gBACb,MAAM,EACJ,qDAAqD;aACxD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC;gBACV,GAAG;gBACH,OAAO;gBACP,GAAG;gBACH,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE;aACnE,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC;gBACV,GAAG;gBACH,OAAO;gBACP,GAAG;gBACH,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,SAAS,OAAO,OAAO,GAAG,kHAAkH;aACrJ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,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,kEAAkE;IAClE,gEAAgE;IAChE,IAAI,eAAe,GAA0B,EAAE,CAAC;IAChD,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAC9B,IAAI,wBAAwB,EAAE,CAAC;QAC7B,eAAe,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACpD,qBAAqB,GAAG,eAAe,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,CAC/B,CAAC,MAAM,CAAC;IACX,CAAC;IAED,OAAO;QACL,KAAK;QACL,MAAM;QACN,OAAO;QACP,aAAa,EAAE,OAAO;QACtB,eAAe;QACf,SAAS;QACT,kBAAkB;QAClB,eAAe;QACf,qBAAqB;KACtB,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,8uBAA8uB;IAChvB,WAAW;IACX,OAAO;CACR,CAAC"}
|
package/build/version.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const VERSION = "1.
|
|
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.
|
|
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 = "황룡건설(주)";
|
package/docs/DATA_SOURCES.md
CHANGED
|
@@ -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 -->
|
|
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 -->
|
|
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-
|
|
6
|
-
- 법령 데이터 최신 동기화: **2026-
|
|
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
|
-
| 산업안전보건법 |
|
|
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
|
-
| **합계** | **
|
|
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.
|
|
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.
|
|
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",
|