@clazic/kordoc 2.1.2 → 2.1.4
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/README.md +79 -10
- package/dist/{chunk-R6J5ZSDL.js → chunk-N2UPMKGJ.js} +9 -9
- package/dist/{chunk-R6J5ZSDL.js.map → chunk-N2UPMKGJ.js.map} +1 -1
- package/dist/{chunk-PKIJLEV6.js → chunk-NNYD6QUN.js} +2 -2
- package/dist/cli.js +4 -4
- package/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +2 -2
- package/dist/{utils-BWQ2RGUD.js → utils-7VR5ORIC.js} +2 -2
- package/dist/{watch-U4AVI5RY.js → watch-5RZ4YQPC.js} +3 -3
- package/package.json +1 -1
- /package/dist/{chunk-PKIJLEV6.js.map → chunk-NNYD6QUN.js.map} +0 -0
- /package/dist/{utils-BWQ2RGUD.js.map → utils-7VR5ORIC.js.map} +0 -0
- /package/dist/{watch-U4AVI5RY.js.map → watch-5RZ4YQPC.js.map} +0 -0
package/README.md
CHANGED
|
@@ -106,9 +106,6 @@ HWP, HWPX, PDF, XLSX, DOCX — 관공서에서 쏟아지는 모든 문서를 파
|
|
|
106
106
|
|
|
107
107
|
```bash
|
|
108
108
|
npm install @clazic/kordoc
|
|
109
|
-
|
|
110
|
-
# PDF 파싱이 필요하면 (선택)
|
|
111
|
-
npm install pdfjs-dist
|
|
112
109
|
```
|
|
113
110
|
|
|
114
111
|
## 빠른 시작
|
|
@@ -195,28 +192,55 @@ kordoc watch ./수신함 -d ./변환결과 # 폴더 감시 모드
|
|
|
195
192
|
kordoc watch ./문서 --webhook https://api/hook # 웹훅 알림
|
|
196
193
|
```
|
|
197
194
|
|
|
198
|
-
## MCP 서버
|
|
195
|
+
## MCP 서버
|
|
196
|
+
|
|
197
|
+
AI 도구에서 직접 문서를 파싱할 수 있습니다. **로컬 MCP**와 **원격 MCP** 두 가지 방식을 지원합니다.
|
|
198
|
+
|
|
199
|
+
| | 로컬 MCP | 원격 MCP |
|
|
200
|
+
|---|---|---|
|
|
201
|
+
| 지원 포맷 | HWP, HWPX, PDF, XLSX, DOCX | HWPX, PDF, XLSX, DOCX |
|
|
202
|
+
| 설치 | `npm install -g @clazic/kordoc` 필요 | 설치 불필요 |
|
|
203
|
+
| 파일 전달 | 파일 경로 직접 | base64 인코딩 |
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
### 로컬 MCP (전 포맷 지원, 권장)
|
|
208
|
+
|
|
209
|
+
**1. 전역 설치**
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
npm install -g @clazic/kordoc
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**2. AI 도구별 설정**
|
|
216
|
+
|
|
217
|
+
#### Claude Code
|
|
199
218
|
|
|
200
|
-
|
|
219
|
+
`~/.claude.json` 에 추가:
|
|
201
220
|
|
|
202
221
|
```json
|
|
203
222
|
{
|
|
204
223
|
"mcpServers": {
|
|
205
224
|
"kordoc": {
|
|
206
|
-
"
|
|
225
|
+
"type": "stdio",
|
|
226
|
+
"command": "kordoc-mcp",
|
|
227
|
+
"args": [],
|
|
228
|
+
"env": {}
|
|
207
229
|
}
|
|
208
230
|
}
|
|
209
231
|
}
|
|
210
232
|
```
|
|
211
233
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
### 로컬 MCP (HWP 5.x 포함 전 포맷, 파일 경로 직접 접근)
|
|
234
|
+
또는 터미널에서:
|
|
215
235
|
|
|
216
236
|
```bash
|
|
217
|
-
|
|
237
|
+
claude mcp add kordoc -- kordoc-mcp
|
|
218
238
|
```
|
|
219
239
|
|
|
240
|
+
#### Gemini CLI
|
|
241
|
+
|
|
242
|
+
`~/.gemini/settings.json` 에 추가:
|
|
243
|
+
|
|
220
244
|
```json
|
|
221
245
|
{
|
|
222
246
|
"mcpServers": {
|
|
@@ -227,6 +251,51 @@ npm install -g @clazic/kordoc
|
|
|
227
251
|
}
|
|
228
252
|
```
|
|
229
253
|
|
|
254
|
+
#### Cursor / Windsurf / VS Code
|
|
255
|
+
|
|
256
|
+
프로젝트 루트 `.mcp.json` 또는 설정 파일에 추가:
|
|
257
|
+
|
|
258
|
+
```json
|
|
259
|
+
{
|
|
260
|
+
"mcpServers": {
|
|
261
|
+
"kordoc": {
|
|
262
|
+
"command": "kordoc-mcp"
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
#### Windows
|
|
269
|
+
|
|
270
|
+
Windows에서는 `cmd`를 통해 실행해야 합니다:
|
|
271
|
+
|
|
272
|
+
```json
|
|
273
|
+
{
|
|
274
|
+
"mcpServers": {
|
|
275
|
+
"kordoc": {
|
|
276
|
+
"command": "cmd",
|
|
277
|
+
"args": ["/c", "kordoc-mcp"]
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
### 원격 MCP (설치 없이 바로 사용)
|
|
286
|
+
|
|
287
|
+
HWP 5.x를 제외한 모든 포맷 지원. 설치 없이 바로 연결 가능합니다.
|
|
288
|
+
|
|
289
|
+
```json
|
|
290
|
+
{
|
|
291
|
+
"mcpServers": {
|
|
292
|
+
"kordoc": {
|
|
293
|
+
"serverUrl": "https://kordoc-mcp.clazic.workers.dev"
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
230
299
|
**7개 도구:**
|
|
231
300
|
|
|
232
301
|
| 도구 | 설명 |
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
precheckZipSize,
|
|
7
7
|
sanitizeHref,
|
|
8
8
|
toArrayBuffer
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-NNYD6QUN.js";
|
|
10
10
|
import {
|
|
11
11
|
parsePageRange
|
|
12
12
|
} from "./chunk-MOL7MDBG.js";
|
|
@@ -309,7 +309,7 @@ var HEADING_RATIO_H2 = 1.3;
|
|
|
309
309
|
var HEADING_RATIO_H3 = 1.15;
|
|
310
310
|
|
|
311
311
|
// src/hwpx/parser.ts
|
|
312
|
-
var MAX_DECOMPRESS_SIZE =
|
|
312
|
+
var MAX_DECOMPRESS_SIZE = 500 * 1024 * 1024;
|
|
313
313
|
var MAX_ZIP_ENTRIES = 500;
|
|
314
314
|
function clampSpan(val, max) {
|
|
315
315
|
return Math.max(1, Math.min(val, max));
|
|
@@ -1135,7 +1135,7 @@ function readRecords(data) {
|
|
|
1135
1135
|
}
|
|
1136
1136
|
return records;
|
|
1137
1137
|
}
|
|
1138
|
-
var MAX_DECOMPRESS_SIZE2 =
|
|
1138
|
+
var MAX_DECOMPRESS_SIZE2 = 500 * 1024 * 1024;
|
|
1139
1139
|
function decompressStream(data) {
|
|
1140
1140
|
const opts = { maxOutputLength: MAX_DECOMPRESS_SIZE2 };
|
|
1141
1141
|
if (data.length >= 2 && data[0] === 120) {
|
|
@@ -1969,7 +1969,7 @@ var END_OF_CHAIN = 4294967294;
|
|
|
1969
1969
|
var FREE_SECT = 4294967295;
|
|
1970
1970
|
var MAX_CHAIN_LENGTH = 1e6;
|
|
1971
1971
|
var MAX_DIR_ENTRIES = 1e5;
|
|
1972
|
-
var MAX_STREAM_SIZE =
|
|
1972
|
+
var MAX_STREAM_SIZE = 500 * 1024 * 1024;
|
|
1973
1973
|
function parseLenientCfb(data) {
|
|
1974
1974
|
if (data.length < 512) throw new Error("CFB \uD30C\uC77C\uC774 \uB108\uBB34 \uC9E7\uC2B5\uB2C8\uB2E4 (\uCD5C\uC18C 512\uBC14\uC774\uD2B8)");
|
|
1975
1975
|
if (!data.subarray(0, 8).equals(CFB_MAGIC)) throw new Error("CFB \uB9E4\uC9C1 \uBC14\uC774\uD2B8 \uBD88\uC77C\uCE58");
|
|
@@ -2147,7 +2147,7 @@ import { createRequire } from "module";
|
|
|
2147
2147
|
var require2 = createRequire(import.meta.url);
|
|
2148
2148
|
var CFB = require2("cfb");
|
|
2149
2149
|
var MAX_SECTIONS = 100;
|
|
2150
|
-
var MAX_TOTAL_DECOMPRESS =
|
|
2150
|
+
var MAX_TOTAL_DECOMPRESS = 500 * 1024 * 1024;
|
|
2151
2151
|
function parseHwp5Document(buffer, options) {
|
|
2152
2152
|
let cfb = null;
|
|
2153
2153
|
let lenientCfb = null;
|
|
@@ -3410,7 +3410,7 @@ g.pdfjsWorker = pdfjsWorker;
|
|
|
3410
3410
|
import { getDocument, GlobalWorkerOptions } from "pdfjs-dist/legacy/build/pdf.mjs";
|
|
3411
3411
|
GlobalWorkerOptions.workerSrc = "";
|
|
3412
3412
|
var MAX_PAGES = 5e3;
|
|
3413
|
-
var MAX_TOTAL_TEXT =
|
|
3413
|
+
var MAX_TOTAL_TEXT = 500 * 1024 * 1024;
|
|
3414
3414
|
var PDF_LOAD_TIMEOUT_MS = 3e4;
|
|
3415
3415
|
async function loadPdfWithTimeout(buffer) {
|
|
3416
3416
|
const loadingTask = getDocument({
|
|
@@ -4375,7 +4375,7 @@ import { readFile } from "fs/promises";
|
|
|
4375
4375
|
import JSZip3 from "jszip";
|
|
4376
4376
|
import { DOMParser as DOMParser2 } from "@xmldom/xmldom";
|
|
4377
4377
|
var MAX_SHEETS = 100;
|
|
4378
|
-
var MAX_DECOMPRESS_SIZE3 =
|
|
4378
|
+
var MAX_DECOMPRESS_SIZE3 = 500 * 1024 * 1024;
|
|
4379
4379
|
var MAX_ROWS2 = 1e4;
|
|
4380
4380
|
var MAX_COLS2 = 200;
|
|
4381
4381
|
function cleanNumericValue(raw) {
|
|
@@ -4655,7 +4655,7 @@ async function parseXlsxDocument(buffer, options) {
|
|
|
4655
4655
|
// src/docx/parser.ts
|
|
4656
4656
|
import JSZip4 from "jszip";
|
|
4657
4657
|
import { DOMParser as DOMParser3 } from "@xmldom/xmldom";
|
|
4658
|
-
var MAX_DECOMPRESS_SIZE4 =
|
|
4658
|
+
var MAX_DECOMPRESS_SIZE4 = 500 * 1024 * 1024;
|
|
4659
4659
|
function getChildElements(parent, localName) {
|
|
4660
4660
|
const result = [];
|
|
4661
4661
|
const children = parent.childNodes;
|
|
@@ -5491,4 +5491,4 @@ export {
|
|
|
5491
5491
|
extractFormFields,
|
|
5492
5492
|
parse
|
|
5493
5493
|
};
|
|
5494
|
-
//# sourceMappingURL=chunk-
|
|
5494
|
+
//# sourceMappingURL=chunk-N2UPMKGJ.js.map
|