@neobiotechlabs/neobiotech-dev-agent 0.1.36 → 0.1.39
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +13 -1
- package/.mcp.json +6 -2
- package/dist/doctor.js +15106 -0
- package/dist/doctor.js.map +1 -0
- package/dist/index.js +1258 -885
- package/dist/index.js.map +1 -1
- package/dist/setup-codex.js +164 -0
- package/dist/setup-codex.js.map +1 -0
- package/package.json +4 -33
- package/skills/doc-render/SKILL.md +2 -2
- package/README.md +0 -493
package/README.md
DELETED
|
@@ -1,493 +0,0 @@
|
|
|
1
|
-
# @neobiotechlabs/neobiotech-dev-agent
|
|
2
|
-
|
|
3
|
-
IEC 62304 의료기기 소프트웨어 개발을 위한 MCP Server. Claude Code에서 Jira, Confluence, Risk Management, CVSS, Xray, 추적성 관리를 직접 사용합니다. **npm-as-plugin**으로 배포되어 `/plugin install` 한 번으로 MCP 서버 등록 + doc-render skill 배포 + 인증(userConfig → 키체인)이 한 번에 처리됩니다.
|
|
4
|
-
|
|
5
|
-
> 서버 자체를 개발/수정하는 분은 [docs/developer-guide.md](docs/developer-guide.md)를, 전체 툴 레퍼런스는 이 문서 아래쪽을 참고하세요.
|
|
6
|
-
|
|
7
|
-
## 설치 (plugin — 권장)
|
|
8
|
-
|
|
9
|
-
공개 npm(npmjs.org)에 게시되어 별도 registry 인증 없이 설치할 수 있습니다. Claude Code 안에서:
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
1) marketplace 등록 (GitHub source — 누구나 가능)
|
|
13
|
-
/plugin marketplace add NeobiotechLabs/jira-mcp-server
|
|
14
|
-
|
|
15
|
-
2) plugin 설치 (user scope 권장 — 어느 프로젝트에서든 적용)
|
|
16
|
-
/plugin install neobiotech-dev-agent@neobiotech
|
|
17
|
-
|
|
18
|
-
3) 자격증명 입력 (키체인에 저장)
|
|
19
|
-
/plugin configure neobiotech-dev-agent@neobiotech
|
|
20
|
-
|
|
21
|
-
4) Claude Code 완전 재시작 → /mcp 에서 neobiotech-dev-agent 가 ✔ Connected 인지 확인
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
`userConfig` 6개 항목 (3번 configure 시 입력):
|
|
25
|
-
|
|
26
|
-
| 항목 | 필수 | 비고 |
|
|
27
|
-
|------|------|------|
|
|
28
|
-
| `JIRA_URL` | O | **https 권장** — http에선 node-fetch 리다이렉트가 POST를 GET으로 변환해 생성/수정이 실패함 |
|
|
29
|
-
| `JIRA_EMAIL` | O | Jira 계정 이메일 |
|
|
30
|
-
| `JIRA_API_TOKEN` | O | [발급](https://id.atlassian.com/manage-profile/security/api-tokens) |
|
|
31
|
-
| `XRAY_CLIENT_ID` | X | Xray Cloud (둘 다 있어야 활성화) |
|
|
32
|
-
| `XRAY_CLIENT_SECRET` | X | Xray Cloud |
|
|
33
|
-
| `RISK_PLUGIN_AUTH_TOKEN` | X | Risk Management Plugin |
|
|
34
|
-
|
|
35
|
-
> ⚠️ 재시작 없으면 userConfig가 반영되지 않아 spawn 직후 종료됩니다 (`/mcp`에서 `-32000`). 설치/구성 후 **반드시 Claude Code를 완전히 재시작**하세요.
|
|
36
|
-
> ⚠️ 설치·업데이트 후에도 옛날 버전이 실행된다면 consumer 로컬 캐시가 원인입니다 — [트러블슈팅](#트러블슈팅) 참고.
|
|
37
|
-
|
|
38
|
-
## 로컬에서 코드 변경하며 테스트
|
|
39
|
-
|
|
40
|
-
서버 코드를 고치면서 바로 확인하려는 경우(서버 개발·브랜치 테스트) 두 가지 패턴이 있습니다. 어떤 패턴이든 **watch + `/mcp` reconnect** 루프가 핵심입니다.
|
|
41
|
-
|
|
42
|
-
### 준비 (공통): clone + build
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
# doc_render 툴이 vendor/dev-docs-templates/ submodule을 쓰므로 --recurse-submodules
|
|
46
|
-
git clone --recurse-submodules https://github.com/NeobiotechLabs/jira-mcp-server.git
|
|
47
|
-
cd jira-mcp-server
|
|
48
|
-
npm install
|
|
49
|
-
npm run build # dist/index.js 단일 bundle (최초 1회 필수 — dist는 git에 없음)
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
이미 clone한 경우: `git submodule update --init --recursive`.
|
|
53
|
-
|
|
54
|
-
### 패턴 1: `claude mcp add`로 로컬 빌드 직접 실행 (빠른 iteration, 권장)
|
|
55
|
-
|
|
56
|
-
빌드된 `dist/index.js`를 MCP 서버로 바로 등록합니다. plugin의 userConfig/키체인 대신 환경변수를 직접 주고, 가장 빠르게 코드를 돌려볼 수 있습니다.
|
|
57
|
-
|
|
58
|
-
한 터미널에서 watch를 켜둡니다 — 소스 저장 시 `dist/`가 자동 재빌드됩니다:
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
npm run dev
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
다른 터미널에서 (또는 Claude Code 세션에서) 로컬 dist를 MCP 서버로 등록:
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
claude mcp add neobiotech-dev --scope user \
|
|
68
|
-
-e JIRA_URL=https://your-domain.atlassian.net \
|
|
69
|
-
-e JIRA_EMAIL=your-email@example.com \
|
|
70
|
-
-e JIRA_API_TOKEN=your-api-token \
|
|
71
|
-
-- node "$(pwd)/dist/index.js"
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
> `-e` 옵션은 `--` 앞에 와야 합니다. Xray/Risk가 필요하면 같은 방식으로 `-e XRAY_CLIENT_ID=...` 등 추가.
|
|
75
|
-
|
|
76
|
-
코드를 고칠 때마다 반영: **Claude Code `/mcp` → `neobiotech-dev` → reconnect**.
|
|
77
|
-
|
|
78
|
-
> stdio MCP 서버는 프로세스가 시작될 때 코드를 메모리에 로드합니다. watch가 `dist/`를 갱신해도 프로세스를 재시작(reconnect)하지 않으면 옛날 코드를 계속 씁니다. "즉시 반영"의 마지막 단계는 항상 reconnect입니다.
|
|
79
|
-
|
|
80
|
-
### 패턴 2: plugin을 로컬 directory source로 설치
|
|
81
|
-
|
|
82
|
-
plugin의 userConfig/키체인/doc-render skill 배포 이점을 그대로 쓰면서 로컬 코드를 실행하려면, `.claude-plugin/marketplace.json`의 source를 배포용 npm 대신 로컬 directory로 임시 교체합니다.
|
|
83
|
-
|
|
84
|
-
`.claude-plugin/marketplace.json`의 `plugins[0].source`를 임시로 변경:
|
|
85
|
-
|
|
86
|
-
```json
|
|
87
|
-
"source": { "source": "directory", "path": "." }
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
그리고:
|
|
91
|
-
|
|
92
|
-
```
|
|
93
|
-
/plugin marketplace add /절대경로/jira-mcp-server
|
|
94
|
-
/plugin install neobiotech-dev-agent@neobiotech --scope user
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
코드 변경 반영은 동일하게 `/mcp` reconnect. 검증이 끝나면 `git checkout .claude-plugin/marketplace.json`으로 복구. 변경 전 `claude plugin validate .`로 매니페스트 정합성을 확인하세요.
|
|
98
|
-
|
|
99
|
-
> plugin(`/plugin install`)과 `claude mcp add`는 서버 이름이 다르면 공존하지만 헷갈리므로, 번갈아 쓸 때는 한쪽을 제거(`claude plugin uninstall` 또는 `claude mcp remove`) 후 전환을 권장합니다.
|
|
100
|
-
|
|
101
|
-
## 프로젝트 초기 설정
|
|
102
|
-
|
|
103
|
-
각 consumer 프로젝트 폴더에서 최초 1회 실행하면, 이후 모든 툴이 해당 Jira 프로젝트 키를 자동으로 인식합니다.
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
jira 프로젝트 초기 설정해줘. 프로젝트 키는 DYN야
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
→ `jira_init_project` → `./CLAUDE.md`에 키를 기록. 여러 프로젝트면 폴더마다 각각 실행.
|
|
110
|
-
|
|
111
|
-
## 트러블슈팅
|
|
112
|
-
|
|
113
|
-
### 설치·업데이트 후 옛날 버전이 실행됨 (stale)
|
|
114
|
-
|
|
115
|
-
`uninstall` → `install` 해도 같은 버전이 계속 잡힌다면, 두 군데 중 한 곳이 stale한 것입니다. **비파괴적 방법부터 먼저** 시도합니다.
|
|
116
|
-
|
|
117
|
-
**1. marketplace 갱신 먼저** (비파괴적 — 항상 먼저):
|
|
118
|
-
|
|
119
|
-
```
|
|
120
|
-
/plugin marketplace update neobiotech
|
|
121
|
-
/reload-plugins
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
이것만으로 marketplace.json이 최신 version을 가리키게 되면 install이 최신 버전을 잡습니다. (`/plugin marketplace update`가 안 먹으면 `/plugin marketplace remove neobiotech` 후 `/plugin marketplace add NeobiotechLabs/jira-mcp-server`로 git clone을 강제 fresh — 공식 known issue [#38271](https://github.com/anthropics/claude-code/issues/38271).)
|
|
125
|
-
|
|
126
|
-
**2. 여전히 옛날 버전이면 npm-cache 정리** (마지막 수단) — Claude Code를 **완전히 종료한 뒤**:
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
rm -rf ~/.claude/plugins/npm-cache # stale package-lock + node_modules
|
|
130
|
-
rm -rf ~/.claude/plugins/cache/neobiotech # 옛날 installPath 잔해
|
|
131
|
-
rm -f ~/.claude/plugins/plugin-catalog-cache.json # stale marketplace snapshot (있으면)
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
재시작 후 `/plugin marketplace update neobiotech` → `/plugin install neobiotech-dev-agent@neobiotech`.
|
|
135
|
-
|
|
136
|
-
### 다른 PC에서 `No matching version` (npm registry / `.npmrc`)
|
|
137
|
-
|
|
138
|
-
Windows 등 **다른 PC**에서 `/plugin install` 시 `failed to install npm packages. No matching version` 으로 실패하면, npmjs.org와 패키지는 정상이고 **해당 PC의 npm 설정이 원인**입니다. plugin install이 `.claude-plugin/marketplace.json`에 적은 `registry`(`https://registry.npmjs.org`)보다 **시스템 `.npmrc`를 우선** 사용하기 때문입니다. 사내 npm mirror를 기본으로 쓰거나, 이전 install 실패로 `.npmrc`에 잘못된 줄(쓰레기)이 쌓여 있으면 npmjs.org 대신 다른 registry를 쿼리합니다.
|
|
139
|
-
|
|
140
|
-
진단:
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
npm config get registry # npmjs.org가 아니면 원인
|
|
144
|
-
npm view @neobiotechlabs/neobiotech-dev-agent@0.1.8 version --registry https://registry.npmjs.org # 버전이 나오면 패키지·npmjs.org 정상 → 이 PC의 .npmrc 문제 확정
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
해결 — `%USERPROFILE%\.npmrc`(Windows) / `~/.npmrc`(macOS·Linux)에서 이전 실패로 쌓인 쓰레기 줄(잘못된 registry · scope · auth 잔재)을 전체 삭제한 뒤, scope registry 오버라이드 추가:
|
|
148
|
-
|
|
149
|
-
```
|
|
150
|
-
@neobiotechlabs:registry=https://registry.npmjs.org/
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
사내 mirror를 전역 기본으로 유지해야 하면 **scope 오버라이드만**으로 충분합니다. **Claude Code 완전 재시작** 후 `/plugin install neobiotech-dev-agent@neobiotech` 재시도. 상세 진단 순서는 [developer-guide §10.7](docs/developer-guide.md#107-트러블슈팅).
|
|
154
|
-
|
|
155
|
-
### `/mcp`에서 `Failed to connect` / `-32000` (plugin)
|
|
156
|
-
|
|
157
|
-
두 원인:
|
|
158
|
-
|
|
159
|
-
1. **userConfig 미구성 (가장 흔함)** — install 직후 userConfig(키체인)가 비어 `.mcp.json`의 `${user_config.*}`가 빈 값 → `src/index.ts`가 필수 env 검증에서 `process.exit(1)`. `/plugin configure`로 값을 넣고 **Claude Code 완전 재시작**.
|
|
160
|
-
2. **runtime 의존성 누락 (과거)** — 0.1.8 tsup bundle 도입으로 해결. 최신 버전이면 해당 없음.
|
|
161
|
-
|
|
162
|
-
진단 — installPath의 `dist/index.js`를 직접 실행해 봅니다:
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
node ~/.claude/plugins/cache/neobiotech/neobiotech-dev-agent/<version>/dist/index.js </dev/null
|
|
166
|
-
# "Missing JIRA_URL..." → 모듈 로딩 통과 = 원인 1 (userConfig)
|
|
167
|
-
# ERR_MODULE_NOT_FOUND → bundle 누락 = 옛날 버전 (원인 2)
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### `claude mcp add` 모드 연결 실패
|
|
171
|
-
|
|
172
|
-
가장 흔한 원인은 args 경로 오타 또는 빌드 누락. `claude mcp get <name>`으로 `Command`/`Args`/`Environment`를 점검하고, `ls <경로>`로 파일이 실제 존재하는지 확인 (없으면 `npm run build`).
|
|
173
|
-
|
|
174
|
-
### 일반
|
|
175
|
-
|
|
176
|
-
| 증상 | 원인 / 해결 |
|
|
177
|
-
|------|------------|
|
|
178
|
-
| `Missing environment variables...`로 종료 | 필수 env 3개 중 하나라도 비면 `index.ts`가 `process.exit(1)`. `claude mcp get`의 env 또는 userConfig에서 값 누락 확인 |
|
|
179
|
-
| Risk / Xray 툴이 동작 안 함 | 선택 env(`RISK_PLUGIN_AUTH_TOKEN`, `XRAY_*`) 누락/만료. `xray`는 두 env가 모두 있어야 활성화 |
|
|
180
|
-
| `401`/`403` | 토큰/권한. Jira API 토큰 재발급, 프로젝트 권한·이슈타입 존재 여부 확인 |
|
|
181
|
-
| 프로젝트 키가 인식 안 됨 | `jira_init_project` 미실행. consumer `CLAUDE.md`에 키가 있는지 확인 |
|
|
182
|
-
|
|
183
|
-
## 툴 목록 (56개)
|
|
184
|
-
|
|
185
|
-
### Jira 기본 CRUD (12)
|
|
186
|
-
|
|
187
|
-
| 툴 | 설명 |
|
|
188
|
-
|-----|------|
|
|
189
|
-
| `jira_get_issue` | 이슈 조회 (필드 선택, linked issues 포함) |
|
|
190
|
-
| `jira_search` | JQL로 이슈 검색 |
|
|
191
|
-
| `jira_create_issue` | 이슈 생성 (custom fields 지원, rich_text customfield ADF 자동 변환) |
|
|
192
|
-
| `jira_update_issue` | 이슈 필드 업데이트 (description + rich_text customfield ADF 자동 변환) |
|
|
193
|
-
| `jira_add_comment` | 코멘트 추가 |
|
|
194
|
-
| `jira_create_link` | 이슈 간 링크 생성 (Blocks, Implements, Relates, Mitigates, Risk Source 등) |
|
|
195
|
-
| `jira_get_links` | 이슈 링크 조회 |
|
|
196
|
-
| `jira_delete_link` | 이슈 링크 삭제 |
|
|
197
|
-
| `jira_get_transitions` | 상태 전이 목록 조회 |
|
|
198
|
-
| `jira_transition` | 이슈 상태 변경 |
|
|
199
|
-
| `jira_delete_issue` | 이슈 삭제 |
|
|
200
|
-
| `jira_get_issue_type_schema` | 이슈 타입의 필드 스키마 동적 조회 |
|
|
201
|
-
|
|
202
|
-
### Confluence (8)
|
|
203
|
-
|
|
204
|
-
| 툴 | 설명 |
|
|
205
|
-
|-----|------|
|
|
206
|
-
| `confluence_get_page` | 페이지 조회 |
|
|
207
|
-
| `confluence_search` | CQL로 페이지 검색 |
|
|
208
|
-
| `confluence_create_page` | 페이지 생성 |
|
|
209
|
-
| `confluence_update_page` | 페이지 업데이트 |
|
|
210
|
-
| `confluence_delete_page` | 페이지 삭제 |
|
|
211
|
-
| `confluence_get_spaces` | 스페이스 목록 |
|
|
212
|
-
| `confluence_get_page_children` | 하위 페이지 조회 |
|
|
213
|
-
| `confluence_publish_doc` | **(High-level)** 마크다운 문서(`markdown` 또는 `markdown_file`) → Confluence 페이지 게재 (create/update 자동 분기, 마크다운 → storage 변환 + 코드펜스 → 코드 매크로). **plantuml 펜스 자동 PNG 렌더링 + 첨부 임베드** (`render_diagrams: true` 기본). 큰 문서(25KB+)는 `markdown_file` 권장 |
|
|
214
|
-
|
|
215
|
-
### Risk Management (5)
|
|
216
|
-
|
|
217
|
-
Risk Management Plugin과 연동하여 Hazard 티켓의 Risk 값을 관리합니다.
|
|
218
|
-
|
|
219
|
-
| 툴 | 설명 |
|
|
220
|
-
|-----|------|
|
|
221
|
-
| `risk_get_config` | 프로젝트 Risk Management 설정 조회 |
|
|
222
|
-
| `risk_activate_panel` | Risk Management Plugin 패널 활성화 |
|
|
223
|
-
| `risk_set_values` | Risk 값(severity, p1, p2) 설정 |
|
|
224
|
-
| `risk_create_hazards` | **(High-level)** Hazard 일괄 생성 + Risk 패널 + Risk 값 + Risk Source 링크 |
|
|
225
|
-
| `risk_create_mitigation` | **(High-level)** 완화 Requirement 생성 + Mitigates 링크 + Hazard P2 업데이트 |
|
|
226
|
-
|
|
227
|
-
### CVSS / Vulnerability (3)
|
|
228
|
-
|
|
229
|
-
CVSS v4.0 기반 보안 취약점 평가.
|
|
230
|
-
|
|
231
|
-
| 툴 | 설명 |
|
|
232
|
-
|-----|------|
|
|
233
|
-
| `cvss_calculate` | CVSS v4.0 metrics → 점수/심각도 계산 |
|
|
234
|
-
| `cvss_set_vector` | Vulnerability 티켓에 CVSS Vector + Score 설정 |
|
|
235
|
-
| `cvss_get_vector` | Vulnerability 티켓의 CVSS Vector + Score 조회 |
|
|
236
|
-
|
|
237
|
-
### Xray (4)
|
|
238
|
-
|
|
239
|
-
Xray Cloud API + GraphQL로 테스트 관리.
|
|
240
|
-
|
|
241
|
-
| 툴 | 설명 |
|
|
242
|
-
|-----|------|
|
|
243
|
-
| `xray_get_test_keys` | Test Execution의 Test 키 목록 조회 |
|
|
244
|
-
| `xray_export_cucumber` | Cucumber feature 파일 export |
|
|
245
|
-
| `xray_import_results` | 테스트 실행 결과 import |
|
|
246
|
-
| `xray_create_test` | Xray에 테스트 케이스 생성 |
|
|
247
|
-
|
|
248
|
-
### Traceability (3)
|
|
249
|
-
|
|
250
|
-
IEC 62304 추적성 관리.
|
|
251
|
-
|
|
252
|
-
| 툴 | 설명 |
|
|
253
|
-
|-----|------|
|
|
254
|
-
| `traceability_check` | 티켓의 추적성 상태 확인 (모든 링크 표시) |
|
|
255
|
-
| `traceability_find_missing` | Gate 내 누락된 링크 찾기 |
|
|
256
|
-
| `traceability_fix` | 누락된 링크 일괄 생성 |
|
|
257
|
-
|
|
258
|
-
### IEC 62304 워크플로우 (4)
|
|
259
|
-
|
|
260
|
-
| 툴 | 설명 |
|
|
261
|
-
|-----|------|
|
|
262
|
-
| `sds_create_task` | Task 생성 + SDS/DD 링크 연결 |
|
|
263
|
-
| `doc_update_description` | 티켓 description을 문서 내용으로 업데이트 |
|
|
264
|
-
|
|
265
|
-
( `risk_create_hazards`, `risk_create_mitigation`은 위 Risk Management에 포함)
|
|
266
|
-
|
|
267
|
-
### HELP (1)
|
|
268
|
-
|
|
269
|
-
| 툴 | 설명 |
|
|
270
|
-
|-----|------|
|
|
271
|
-
| `help` | 전체 툴 카탈로그, 워크플로우 가이드, 툴 상세 정보 |
|
|
272
|
-
|
|
273
|
-
### 사용성 공학 - IEC 62366-1 (4)
|
|
274
|
-
|
|
275
|
-
| 툴 | 설명 |
|
|
276
|
-
|-----|------|
|
|
277
|
-
| `usability_create_use_spec` | Use Specification 정의 (사용자 프로파일, 사용 환경, 의도된 사용) |
|
|
278
|
-
| `usability_create_scenarios` | 사용 시나리오 일괄 생성 (Normal Use / Abnormal Use) |
|
|
279
|
-
| `usability_link_to_hazard` | 사용 시나리오 → Hazard Risk Source 연결 |
|
|
280
|
-
| `usability_create_validation` | 사용성 검증 결과 기록 (방법, 결과, 증빙) |
|
|
281
|
-
|
|
282
|
-
### 기술 문서 검증 - MDR Annex II (3)
|
|
283
|
-
|
|
284
|
-
| 툴 | 설명 |
|
|
285
|
-
|-----|------|
|
|
286
|
-
| `doc_create_from_template` | MDR Annex II 구조로 누락 문서 자동 생성 |
|
|
287
|
-
| `doc_check_completeness` | 필수 문서 누락/미승인 항목 검사 (✅⚠️❌) |
|
|
288
|
-
| `doc_generate_evidence` | NB 심사용 증거 패키지 (추적성/리스크/V&V 매트릭스) |
|
|
289
|
-
|
|
290
|
-
### 개발 문서 렌더 (1)
|
|
291
|
-
|
|
292
|
-
| 툴 | 설명 |
|
|
293
|
-
|-----|------|
|
|
294
|
-
| `doc_render` | dev_docs(PRD/Spec/Plan/Tasks)·mdr_docs(PA/EA gate 문서 전체) 템플릿 모드 기반(freeform) 결정적 렌더 — 메타만 치환, 자유 텍스트/AI 지침/빈 데이터 표는 consumer가 채움 |
|
|
295
|
-
|
|
296
|
-
### MDR 전문가 체크리스트 (3)
|
|
297
|
-
|
|
298
|
-
역할별 규제 검토의 hard 기준(체크리스트)을 반환합니다. 판단은 아래 [MDR 전문가 에이전트](#mdr-전문가-에이전트-subagent) subagent가 담당합니다.
|
|
299
|
-
|
|
300
|
-
| 툴 | 설명 |
|
|
301
|
-
|-----|------|
|
|
302
|
-
| `expert_get_regulatory_checklist` | MDR Regulatory Architect 검사 체크리스트 (Annex II / GSPR / intended use). phase 미사용 |
|
|
303
|
-
| `expert_get_cybersecurity_checklist` | Cybersecurity Reviewer 검사 체크리스트 (IEC 81001-5-1 / FDA 2023 / AAMI TIR57-SW96). phase: design\|implementation\|verification\|postmarket |
|
|
304
|
-
| `expert_get_sw_architect_checklist` | SW Architect 검사 체크리스트 (IEC 62304 §5 / IEC 42010 / SOUP 선정·모니터링). scope: sad\|soup\|dd |
|
|
305
|
-
|
|
306
|
-
### 초기 설정 (1)
|
|
307
|
-
|
|
308
|
-
| 툴 | 설명 |
|
|
309
|
-
|-----|------|
|
|
310
|
-
| `jira_init_project` | 프로젝트 폴더에 Jira 프로젝트 키 초기 설정 |
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
큰 마크다운 문서(PRD/Plan/Spec 등)를 Jira description(~32K 한계)에 담기 어려울 때, PDF 변환 후 첨부하는 경로. **플랫폼 무관 번들 Pretendard(Regular+Bold)로 한글 렌더링, 시스템 폰트 의존 없음** — 헤딩(H1~H6) 굵게 지원, macOS/Windows/Linux 동일 결과. 표지·머리말/꼬리말 옵션, 50MB warning / 100MB hard limit, `X-Atlassian-Token: no-check` 헤더 강제, 자체 60s AbortController. description은 손대지 않고 summary는 코멘트로 게시.
|
|
314
|
-
|
|
315
|
-
| 툴 | 설명 |
|
|
316
|
-
|-----|------|
|
|
317
|
-
| `markdown_to_pdf` | 마크다운(`markdown` 또는 `markdown_file`) → PDF 변환 (번들 Pretendard Regular+Bold, 표지·머리말/꼬리말 옵션). base64 또는 tmpfile 출력. |
|
|
318
|
-
| `jira_attach_file` | Jira 이슈에 파일 첨부 (file_path 또는 base64, 50MB warning / 100MB hard limit). |
|
|
319
|
-
| `jira_attach_pdf_from_markdown` | 마크다운(`markdown` 또는 `markdown_file`) → PDF → Jira 첨부 원샷 (description 미수정, summary 코멘트 옵션). 큰 문서는 `markdown_file` 권장 |
|
|
320
|
-
|
|
321
|
-
### 문서 리뷰 (1)
|
|
322
|
-
|
|
323
|
-
| 툴 | 설명 |
|
|
324
|
-
|-----|------|
|
|
325
|
-
| `review_get_criteria` | 문서 리뷰 평가 기준 로드 — plugin 번들 generic 기본 + consumer cwd `data/review-criteria.md` override (2계층). `document-content-reviewer`·`requirement-coverage-tracker` subagent가 절차 첫 단계로 호출 |
|
|
326
|
-
|
|
327
|
-
## MDR 전문가 에이전트 (subagent)
|
|
328
|
-
|
|
329
|
-
역할별 규제 검토는 전문가 **subagent**가 담당합니다. consumer가 명시적으로 dispatch해야 동작합니다 (자동 트리거 없음):
|
|
330
|
-
|
|
331
|
-
- `@mdr-cybersecurity-reviewer` — IEC 81001-5-1·FDA 2023 cybersecurity guidance·AAMI TIR57/SW96 보안 리뷰 (설계·구현·검증·운영 4단계)
|
|
332
|
-
- `@mdr-regulatory-architect` — MDR Annex II·GSPR·intended use 규제 검토
|
|
333
|
-
- `@sw-architect` — IEC 62304 §5·IEC 42010 SW 아키텍처 품질 평가, SOUP 선정·모니터링 (EA 단계 SAD/SDD/SOUP List 평가, scope: sad|soup|dd)
|
|
334
|
-
|
|
335
|
-
각 subagent는 대응하는 체크리스트 툴(`expert_get_*_checklist`)로 hard 기준을 먼저 로드한 뒤(STEP 1 강제), 기존 툴(jira/confluence/cvss/traceability)로 산출물을 교차 평가해 구조화된 리포트(필수항목 충족 여부 + 결함 + 권고)를 반환합니다. 체크리스트 기준 자체는 `src/tools/expert-checklists.ts`의 pure data로 결정적·재현 가능합니다.
|
|
336
|
-
|
|
337
|
-
사용 예:
|
|
338
|
-
|
|
339
|
-
```
|
|
340
|
-
@mdr-cybersecurity-reviewer DYN-123 설계 보안 리뷰해줘 (phase=design)
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
```
|
|
344
|
-
@mdr-regulatory-architect PA Gate(DYN-100) Annex II 완전성 검토해줘
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
> subagent는 plugin의 `agents/` 디렉터리가 Claude Code에 의해 자동 재귀 스캔되어 노출됩니다. `marketplace.json` 수정은 불필요하며, npm 패키지에 포함되려면 `package.json` `files`에 `"agents"`가 있어야 합니다. 상세 설계: [docs/superpowers/specs/2026-07-07-mdr-expert-agents-design.md](docs/superpowers/specs/2026-07-07-mdr-expert-agents-design.md).
|
|
348
|
-
## doc_render 작성 skill (consumer 워크플로우)
|
|
349
|
-
|
|
350
|
-
이 서버는 `.claude/skills/doc-render/` 절차 가이드를 함께 제공합니다. `/plugin install` 하면 consumer(Claude Code)에게 skill도 자동으로 배포되므로, consumer는 doc_render 출력으로 MDR/dev 문서를 자동 작성해 자기 repo `docs/`에 저장하고 Jira 티켓 description에 미러할 수 있습니다.
|
|
351
|
-
|
|
352
|
-
> plugin이 아닌 `claude mcp add` 모드를 쓸 때만 skill을 수동으로 복사합니다:
|
|
353
|
-
> ```bash
|
|
354
|
-
> cp -R <이-repo>/skills/doc-render <consumer-repo>/.claude/skills/
|
|
355
|
-
> ```
|
|
356
|
-
|
|
357
|
-
consumer Claude Code 세션에서:
|
|
358
|
-
|
|
359
|
-
> "DYN-8 intended use 문서 작성"
|
|
360
|
-
|
|
361
|
-
skill이 doc_render 호출 → 자동 초안 → 리뷰 게이트 → `docs/mdr/PA/intended-use-DYN-8.md` 저장 → DYN-8 description 미러까지 수행합니다. 자세한 절차·저장 경로·frontmatter 스키마는 [`skills/doc-render/SKILL.md`](skills/doc-render/SKILL.md)와 [설계 문서](docs/superpowers/specs/2026-07-03-doc-render-skill-design.md) 참조.
|
|
362
|
-
|
|
363
|
-
## 사용 예시
|
|
364
|
-
|
|
365
|
-
```
|
|
366
|
-
DYN-1234 이슈 내용 알려줘
|
|
367
|
-
```
|
|
368
|
-
→ `jira_get_issue`
|
|
369
|
-
|
|
370
|
-
```
|
|
371
|
-
Hazard 티켓 2개 만들어줘. [HAZ-1] 영상 렌더링 오류, [HAZ-2] 측정 오차
|
|
372
|
-
```
|
|
373
|
-
→ `risk_create_hazards` (생성 + Risk 패널 + Risk 값 + 링크 한 번에)
|
|
374
|
-
|
|
375
|
-
```
|
|
376
|
-
이 Vulnerability의 CVSS 점수 계산해줘. AV:N, AC:L, PR:N, VC:H
|
|
377
|
-
```
|
|
378
|
-
→ `cvss_calculate` + `cvss_set_vector`
|
|
379
|
-
|
|
380
|
-
```
|
|
381
|
-
DYN-2550의 추적성 확인해줘
|
|
382
|
-
```
|
|
383
|
-
→ `traceability_check`
|
|
384
|
-
|
|
385
|
-
```
|
|
386
|
-
Use Specification 만들어줘. 수술실 의사, 수술실 환경, 수술 네비게이션 목적
|
|
387
|
-
```
|
|
388
|
-
→ `usability_create_use_spec` + `usability_create_scenarios`
|
|
389
|
-
|
|
390
|
-
```
|
|
391
|
-
MDR Annex II 기술 문서 완전성 검사해줘
|
|
392
|
-
```
|
|
393
|
-
→ `doc_check_completeness`
|
|
394
|
-
|
|
395
|
-
```
|
|
396
|
-
사용 가능한 툴 목록 보여줘
|
|
397
|
-
```
|
|
398
|
-
→ `help`
|
|
399
|
-
|
|
400
|
-
## 추적성 관계 맵
|
|
401
|
-
|
|
402
|
-
```
|
|
403
|
-
PA Gate
|
|
404
|
-
├── [Intended Use] Document ── Blocks ──→ Gate
|
|
405
|
-
│ └── Intended Use ── Relates ──→ IU Document
|
|
406
|
-
├── [System Requirement Spec] ── Blocks ──→ Gate
|
|
407
|
-
│ └── System Requirement ── Relates ──→ SyRS Document
|
|
408
|
-
├── [Classification] Document ── Blocks ──→ Gate
|
|
409
|
-
│ └── Classification ── Relates ──→ Classification Document
|
|
410
|
-
├── [SW Development Plan] ── Blocks ──→ Gate
|
|
411
|
-
├── [Risk Management Plan] ── Blocks ──→ Gate
|
|
412
|
-
├── [Security Maintenance Plan] ── Blocks ──→ Gate
|
|
413
|
-
├── [Configuration Management Plan] ── Blocks ──→ Gate
|
|
414
|
-
└── [Use Specification] ── Blocks ──→ Gate ← IEC 62366-1
|
|
415
|
-
└── Use Scenario ── Relates ──→ Use Spec
|
|
416
|
-
└── Abnormal Use Scenario ── Risk Source ──→ Hazard
|
|
417
|
-
|
|
418
|
-
EA Gate (8 living documents — EA 초기 결정·승인 / ER 개발·검증 중 갱신 / CA 최종 확정)
|
|
419
|
-
├── [Risk Management Report] ── Blocks ──→ Gate
|
|
420
|
-
│ └── Hazard ── Risk Source ──→ IU/SyRS / Use Scenario
|
|
421
|
-
│ └── Hazard ── Relates ──→ RMR Document
|
|
422
|
-
├── [SW Requirements Spec] ── Blocks ──→ Gate
|
|
423
|
-
│ └── Requirement ── Mitigates ──→ Hazard
|
|
424
|
-
│ └── Requirement ── Implements ──→ System Requirement
|
|
425
|
-
├── [SW Architecture Document] ── Blocks ──→ Gate
|
|
426
|
-
│ └── Architecture ── Implements ──→ Requirement
|
|
427
|
-
├── [SW Detailed Design Document] ── Blocks ──→ Gate
|
|
428
|
-
│ └── Detailed Design ── Implements ──→ Requirement/Architecture
|
|
429
|
-
│ └── Task ── Implements ──→ Detailed Design
|
|
430
|
-
├── [SOUP List] ── Blocks ──→ Gate (doc_render; CA 최종 SBOM 기반 확정)
|
|
431
|
-
├── [Usability Evaluation Plan] ── Blocks ──→ Gate (doc_render; use_spec/scenarios 연계)
|
|
432
|
-
├── [Clinical Evaluation Plan] ── Blocks ──→ Gate (doc_render)
|
|
433
|
-
└── [List of Hazard-Related Use Scenarios] ── Blocks ──→ Gate (abnormal scenarios 연계)
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
## PlantUML 다이어그램 렌더링
|
|
437
|
-
|
|
438
|
-
`confluence_publish_doc`·`markdown_to_pdf`·`jira_attach_pdf_from_markdown` 호출 시 ` ```plantuml ` 펜스를 PNG로 자동 렌더링합니다.
|
|
439
|
-
|
|
440
|
-
### 사전 요구사항
|
|
441
|
-
|
|
442
|
-
- **Java 21+** — `java -version`이 PATH에서 동작해야 합니다. 없으면 [Adoptium](https://adoptium.net/)에서 설치.
|
|
443
|
-
- Graphviz는 **불필요** — PlantUML 내장 smetana 엔진으로 layout 처리. 일부 복잡한 다이어그램만 Graphviz가 필요할 수 있습니다.
|
|
444
|
-
|
|
445
|
-
### 동작
|
|
446
|
-
|
|
447
|
-
| 도구 | 옵션 | 기본값 | 설명 |
|
|
448
|
-
|------|------|--------|------|
|
|
449
|
-
| `confluence_publish_doc` | `render_diagrams` | `true` | plantuml 펜스 → PNG 렌더 → 첨부 업로드 → `<ac:image>` 매크로 임베드 |
|
|
450
|
-
| `confluence_publish_doc` | `diagram_format` | `'png'` | 이미지 포맷 (`png`·`svg`) |
|
|
451
|
-
| `confluence_publish_doc` | `diagram_dpi` | `96` | PNG 렌더링 DPI |
|
|
452
|
-
| `markdown_to_pdf` | `render_plantuml` | `true` | plantuml 펜스 → PNG → PDF 내 이미지 임베드 |
|
|
453
|
-
| `markdown_to_pdf` | `diagram_dpi` | `96` | PNG 렌더링 DPI |
|
|
454
|
-
| `jira_attach_pdf_from_markdown` | `render_plantuml` | `true` | 위와 동일 |
|
|
455
|
-
| `jira_attach_pdf_from_markdown` | `diagram_dpi` | `96` | PNG 렌더링 DPI |
|
|
456
|
-
|
|
457
|
-
- **옵트아웃**: `render_diagrams: false` 또는 `render_plantuml: false`
|
|
458
|
-
- **부분 실패**: 한 블록 렌더 실패 시 해당 블록만 코드 매크로 폴백, 나머지 계속 진행
|
|
459
|
-
- **결과 확인**: 응답 JSON의 `diagram_stats` (`rendered`·`failed`·`java_missing`) 필드
|
|
460
|
-
- **도움말**: `help` 호출 시 `diagram` 워크플로우 참조
|
|
461
|
-
|
|
462
|
-
### 라이선스
|
|
463
|
-
|
|
464
|
-
PlantUML jar은 GPL-3.0. 출력 PNG/SVG에는 GPL 의무가 없습니다 (Neobiotech 법무 검토 완료, 2026-07-31).
|
|
465
|
-
|
|
466
|
-
## 릴리즈 절차
|
|
467
|
-
|
|
468
|
-
배포는 **`v*` 태그 push** 시 GitHub Actions(`release.yml`)이 자동 수행(build → test → publish to npmjs.org, 공개). main에 머지만 해서는 배포되지 않습니다.
|
|
469
|
-
|
|
470
|
-
### 정식
|
|
471
|
-
|
|
472
|
-
```bash
|
|
473
|
-
npm version patch && git push --follow-tags # latest (version lifecycle가 plugin.json/marketplace.json 자동 동기화)
|
|
474
|
-
```
|
|
475
|
-
|
|
476
|
-
### 베타
|
|
477
|
-
|
|
478
|
-
```bash
|
|
479
|
-
npm version prerelease --preid=beta && git push --follow-tags # beta (태그명에 beta 포함 시 --tag beta)
|
|
480
|
-
```
|
|
481
|
-
|
|
482
|
-
> consumer(이미 plugin 설치한 팀원)의 업데이트는 `/plugin marketplace update neobiotech` 후 `/plugin install` 재실행. stale 캐시가 잡고 있으면 [트러블슈팅](#트러블슈팅)의 캐시 정리 절차를 따르세요.
|
|
483
|
-
|
|
484
|
-
### 태그별 dist-tag 매핑
|
|
485
|
-
|
|
486
|
-
| git 태그 | npm dist-tag | consumer 설치 |
|
|
487
|
-
|----------|-------------|---------------|
|
|
488
|
-
| `v0.1.9-beta.0` | `beta` | marketplace.json source.version을 beta로 맞추거나 `/plugin marketplace update` |
|
|
489
|
-
| `v0.1.9` | `latest` | `/plugin install neobiotech-dev-agent@neobiotech` (캐시 정리 후) |
|
|
490
|
-
|
|
491
|
-
## 라이선스
|
|
492
|
-
|
|
493
|
-
MIT
|